var SCRUBPLAYER_URL = "scrubplayer.swf";

function flashtag(src, width, height, id) {
	var ret = '';
	ret += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" id="' + id + '" width="' + width + '" height="' + height + '" align="middle">\n'
	ret += '<param name="allowScriptAccess" value="always" />\n'
	ret += '<param name="movie" value="' + src + '" />\n'
	ret += '<param name="quality" value="high" />\n'
	ret += '<param name="bgcolor" value="#ffffff" />\n'
//	ret += '<embed src="' + src + '" quality="high" bgcolor="#ffffff" width="' + width + '" height="' + height + '" swLiveConnect=true id="' + id + '" name="' + id + '" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\n';
	ret += '<embed src="' + src + '" quality="high" bgcolor="#ffffff" width="' + width + '" height="' + height + '" swLiveConnect=true name="' + id + '" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />\n';
	ret += '</object>';
	return ret;
}

////////////////////////////////////

function aa_play (srcurls, width, height) {
	var srcurl = srcurls;
	if (Object.isArray(srcurls))
		srcurl = srcurls[0];
	srcurl = Object.extend(srcurl);
	if (srcurl.endsWith(".flv") || srcurl.endsWith(".mp3")) {
		return new AAVideo_ScrubPlayer(srcurl, width, height);
	} else {
		return new AAVideo_VLC(srcurl, width, height);
	}
}

var AAVideo = Class.create ({
	initialize: function (srcurl) {
		this.src = srcurl;
		this.paused = true;
		this.ended = true;
	},
	play: function () {},
	pause: function () {},
	toggle: function () {},
	show: function () {
		// this.elt.style.display = "block";
		this.elt.style.visibility = "visible";
	},
	hide: function () {
		// this.elt.style.display = "none";
		this.elt.style.visibility = "hidden";
	}
});

// need to add support for a thumbnail, initially paused state
var AA_SCRUBPLAYERCOUNT = 0;

/* ScrubPlayer: FLV / MP3 Flash based player */
var AAVideo_ScrubPlayer = Class.create(AAVideo, {
	initialize: function (srcurl, width, height) {
		this.src = srcurl;
		this.elt = document.createElement("div");
		width = width || 320;
		height = height || 240;
		// if (play == undefined) play = true;
		AA_SCRUBPLAYERCOUNT+= 1;
		var embed_id = "scrubplayer"+AA_SCRUBPLAYERCOUNT;
		var swfsrc = SCRUBPLAYER_URL+"?src=" + this.src;
		// pause it
		swfsrc += "&noplay=1";
		// if (!play) swfsrc += "&noplay=1";
		// if (duration) swfsrc += "&dur=" + duration;
		var ft = flashtag(swfsrc, width, height, embed_id);
		this.elt.innerHTML = ft;
		this.scrubplayer = Prototype.Browser.IE ? this.elt.select("object")[0] : this.elt.select("embed")[0] 
		if (!this.scrubplayer) log("error: could not find scrubplayer!");
		// log("got scrubplayer", this.scrubplayer);
		this.supportsScrubbing = true;
	},
	getCurrentTime: function() {
		if (!this.scrubplayer) return;
		try {
			this.scrubplayer.SetVariable("get", "");
			var ret = this.scrubplayer.GetVariable("get");
			var parts = ret.split(",");
			// log("VideoPlayer.getCurrentTime", parts);
			var ct = parseFloat(parts[0]);
			// var duration = parseFloat(parts[1]);
			var playing = (parts[2] == "true");
			// this.playing = playing;
			// var bytesLoaded = parseInt(parts[3]);
			// var bytesTotal = parseInt(parts[4]);
			// this.setBytesLoaded(bytesLoaded, bytesTotal);
			// log("Video", this.murl, this.playing ? "playing" : "paused");
			return ct;
		} catch (e) {
			log("exception", e);
			return undefined;
		}
	},
	setCurrentTime: function(time) {
		if (this.scrubplayer.SetVariable) this.scrubplayer.SetVariable("seek", time);
	},
	getDuration: function() {
		try {
			this.scrubplayer.SetVariable("get", "duration");
			var ret = this.scrubplayer.GetVariable("get");
			if (ret && ret !="undefined" && ret !="duration") {
				return ret;
			}
		} catch (e) {}
		return;
	},
	pause: function () {
		this.playing = false;
		this.scrubplayer.SetVariable("command", "setpaused");
	},
	play : function() {
		this.playing = true;
		this.scrubplayer.SetVariable("command", "setplaying");
	},
	getIsPlaying: function () {
		this.scrubplayer.SetVariable("get", "status");
		var status = this.scrubplayer.GetVariable("get");
		var parts = status.split(",");
		var playing = (parts[2] == "true");
		// log("isPlaying", playing);
		return playing;
	},
	toggle : function() {
		if (this.getIsPlaying()) {
			this.pause();
		} else {
			this.play();
		}
	}

});



//////////////////////////////////////////////////////////////////////
//// VLC
////
//// for ogg/theora, other formats

function vlctag(src, width, height, id) {
	var ret = '';
	ret += '<embed type="application/x-vlc-plugin" id="' + id + '" src="' + src + '" width="' + width + '" height="' + height + '" pluginspage="http://www.videolan.org" />\n';
	return ret;
}

var AAVideo_VLC = Class.create(AAVideo, {
	initialize: function (srcurl, width, height) {
		this.src = srcurl;
		this.elt = document.createElement("div");
		width = width || 320;
		height = height || 240;
		// if (play == undefined) play = true;
		var embed_id = "vlc";
		var tag = vlctag(this.src, width, height, embed_id);
		this.elt.innerHTML = tag;
		this.vlc = Prototype.Browser.IE ? this.elt.select("object")[0] : this.elt.select("embed")[0] 
		this.supportsScrubbing = false;
		// log("got", this.vlc);
	},
	getCurrentTime: function() {
		if (!this.scrubplayer) return;
		try {
			this.scrubplayer.SetVariable("get", "");
			var ret = this.scrubplayer.GetVariable("get");
			var parts = ret.split(",");
			// log("VideoPlayer.getCurrentTime", parts);
			var ct = parseFloat(parts[0]);
			// var duration = parseFloat(parts[1]);
			var playing = (parts[2] == "true");
			this.playing = playing;
			var bytesLoaded = parseInt(parts[3]);
			var bytesTotal = parseInt(parts[4]);
			this.setBytesLoaded(bytesLoaded, bytesTotal);
			// log("Video", this.murl, this.playing ? "playing" : "paused");
			return ct;
		} catch (e) {
			log("exception", e);
			return undefined;
		}
	},
	setCurrentTime: function(time) {
		log("VLC, setCurrentTime", time);
		this.vlc.input.time = (time*1000);
		// this.mediatag.input.position = 0.5;
	},
	getDuration: function() {
		return (this.vlc.input.length / 1000);
	},
	pause: function () {
		// if (this.mediatag.playlist.isPlaying)
		if (this.vlc.input.state == 3)
			this.vlc.playlist.togglePause();
		// this.mediatag.input.state 3 == playing, 4 == pauses
	},
	play : function() {
		this.vlc.playlist.play();
	},
	toggle : function() {
		this.vlc.playlist.togglePause();
	}
});