// FIXME: Your lack of object instantiation disturbs me, admiral.

var bitrateChangeAdded = false;
var CmsFlvUtil = {
	registerInfo: function(el) {
		var id = CmsFlvUtil.getId(el);
		CmsFlvUtil.rehide(el);
		// Move the div to ensure that its containing block is the whole
		// document.
		var body = $$('body').first();
		body.insertBefore(el, body.firstChild);
		$('flvclose-'+id).observe('click', function(e) {
			CmsFlvUtil.closeFlv(id);
		});
	},
	registerTrigger: function(el) {
		var id = CmsFlvUtil.getId(el);
		$(el).removeClassName('flvhidden');
		$(el).observe('click', function(e) {
				if($(el).style.cursor == 'wait') {
					alert('Please wait a few seconds while we measure your bandwidth.');
				} else { 
					var preferred_bitrate = parseInt(Cookie.get('preferred_bitrate'));
					if(preferred_bitrate == 30)
						preferred_bitrate = 120;
					var measured_bandwidth = parseInt(Cookie.get('measured_bandwidth'));
					var max = (preferred_bitrate>0) ? preferred_bitrate : measured_bandwidth;
					var min = 0;
					var es = $$('.flvgroup-'+id);
					var chosen = null;
					for(var i=0,len=es.length;i<len;++i) {
						var e = es[i];
						var b = parseInt(e.select('.flvbitrate').first().innerHTML.strip());
						if(b<=max && b>min) {
							min = b;
							chosen = e;
						}
					}
					if(chosen)
						CmsFlvUtil.showFlv(CmsFlvUtil.getId(chosen));
				}
		});
		CmsFlvUtil.updateTriggersState();
	},
	updateTriggersState: function() {
		var preferred_bitrate = parseInt(Cookie.get('preferred_bitrate'));
		if(preferred_bitrate == 30)
			preferred_bitrate = 120;
		var measured_bandwidth = parseInt(Cookie.get('measured_bandwidth'));
		if((preferred_bitrate > 0) || (measured_bandwidth > 0)) {
			var els = $$('.flvtrigger');
			$A(els).each(function(el) {
				$(el).style.cursor = 'pointer';
				$(el).title = 'Click here to open lower-quality stream viewer.';
			});
		} else {
			var els = $$('.flvtrigger');
			$A(els).each(function(el) {
				$(el).style.cursor = 'wait';
				$(el).title = 'Please wait while we measure your bandwidth.';
			});
		}
	}, 
	retriggerFlv: function(bitrate) {
		var others = $$('.flvplaying');
		for(var i=0,len=others.length;i<len;++i) {
			var oe = others[i];
			var oid = CmsFlvUtil.getId(oe);
			CmsFlvUtil.closeFlv(oid);
			var g = oe.select('.flvgroup').first().innerHTML.strip();
			var gis = $$('.flvgroup-'+g);
			for(var j=0,lenj=gis.length;j<lenj;++j) {
				var fij = gis[j];
				var fjb = parseInt(fij.select('.flvbitrate').first().innerHTML.strip());
				if(fjb == bitrate) {
					CmsFlvUtil.showFlv(CmsFlvUtil.getId(fij));
				}
			}
		}
	},
	showFlv: function(id) {
		var flvinfo = $('flvinfo-'+id);
		var flvplayer = $('flvplayer-'+id);
		var flvflash = 'flvflash-'+id;
		if(flvinfo && !flvinfo.visible()) {
				var others = $$('.flvplaying');
				for(var i=0,len=others.length;i<len;++i) {
					var oid = CmsFlvUtil.getId(others[i]);
					CmsFlvUtil.closeFlv(oid);
				}

				var bitrate_selector_dest = flvinfo.select('.flvbitrate_selector').first();
				var bitrate_selector_src = $('flvbitrate_selector');
				if(bitrate_selector_src && bitrate_selector_dest) {
					bitrate_selector_dest.appendChild(bitrate_selector_src); 
					bitrate_selector_src.removeClassName('flvhidden');
				}

				var flvloc = flvinfo.select('.flvurl').first().innerHTML.strip();
				var width = parseInt(flvinfo.select('.flvwidth').first().innerHTML.strip());
				var height = parseInt(flvinfo.select('.flvheight').first().innerHTML.strip());
				var bitrate = parseInt(flvinfo.select('.flvbitrate').first().innerHTML.strip());

				// If we've managed to open an FLV that isn't what is selected
				// on the selector, change the selector.
				var brs = $('flvbitrate_selector');
				for(var bri=0,brl=brs.options.length; bri<brl; ++bri) {
					if(brs.options[bri].value == bitrate) {
						brs.selectedIndex = bri;
					}
				}

				height+=20;
				flvinfo.style.height = height+'px';
				flvinfo.style.width = width+'px';
				if(window.opera) {
					var group_id = flvinfo.select('.flvgroup').first().innerHTML.strip();
					var flvhide = $('video-thumbs-'+group_id)
;					if(flvhide && flvhide.visible())
						flvhide.hide();
					flvinfo.style.position = 'relative';
					flvinfo.style.marginTop = '20px';
					flvinfo.style.marginLeft = 'auto';
					flvinfo.style.marginRight = 'auto';
					flvinfo.scrollTo();
				} else {
					CmsFlvUtil.centerInViewport(flvinfo);
				}
				var FO = {
					movie: CmsFlvUtil.player_swf,
					width:width,
					height:height,
					id: flvflash,
					majorversion:"7",
					build:"0",
					bgcolor:"#FFFFFF",
					allowfullscreen:"true",
 	 		 		flashvars:
						"file="+flvloc+
						"&overstretch=true"+
						"&streamscript=lighttpd"+
						"&autostart=true"+
						"&showicons=false"+
						"&bufferlength=20" 
				};
				UFO.create(FO,flvplayer.id);
				flvinfo.show();
				flvinfo.addClassName('flvplaying');
		}

	},

	closeFlv: function(id) {
		var flvinfo = $('flvinfo-'+id);
		var flvplayer = $('flvflash-'+id);
		if(flvinfo && flvinfo.visible()) {
			if(flvplayer)
				flvplayer.remove(); 
			flvinfo.hide();
			flvinfo.removeClassName('flvplaying');
			if(window.opera) {
				var group_id = flvinfo.select('.flvgroup').first().innerHTML.strip();
				var flvhide = $('video-thumbs-'+group_id);
				if(flvhide && !flvhide.visible())
					flvhide.show();
			}
		}
	},

	getId: function(el) {
		return $(el).id.split(/-/)[1];
	},

	rehide: function(el) {
		$(el).hide();
		$(el).removeClassName('flvhidden');
	}, 
	unhide: function(el) {
		$(el).removeClassName('flvhidden');
		$(el).show();
	},

	centerInViewport: function(el) {
		var ed = $(el).getDimensions();
		var vd = CmsFlvUtil.getViewport();
		$(el).style.top = Math.floor(vd.y + ((vd.height - ed.height) / 2)) + 'px';
		$(el).style.left = Math.floor(vd.x + ((vd.width - ed.width) / 2)) + 'px';
	}, 

	getViewport: function() { 
		var viewport = {x:0,y:0,width:0,height:0};
	 	if(typeof self.scrollX != 'undefined') {
			viewport.x = self.pageXOffset;
			viewport.y = self.pageYOffset;
			viewport.width = self.innerWidth;
			viewport.height = self.innerHeight;
			return viewport;
		} else if(document.documentElement &&
				(typeof document.documentElement.scrollLeft != 'undefined') &&
				(document.documentElement.clientHeight != 0 || document.documentElement.clientWidth != 0)) {
			viewport.x = document.documentElement.scrollLeft;
			viewport.y = document.documentElement.scrollTop;
			viewport.width = document.documentElement.clientWidth;
			viewport.height = document.documentElement.clientHeight;
			return viewport;
		} else if(document.body &&
				(typeof document.body.scrollLeft != 'undefined')) {
			viewport.x = document.body.scrollLeft;
			viewport.y = document.body.scrollTop;		
			if(document.compatMode == "CSS1Compat") {
				viewport.width = document.body.parentNode.clientWidth;
				viewport.height = document.body.parentNode.clientHeight;
			} else {
				viewport.width = document.body.clientWidth;
				viewport.height = document.body.clientHeight;
			}
			return viewport;
		}
		return null;
	}

};
if(BandwidthTest && BandwidthTest.add_callback)
	BandwidthTest.add_callback(CmsFlvUtil.updateTriggersState);


document.observe("dom:loaded", function() {

	$('afterdarkview').observe('click', function(e) {
		pageTracker._trackEvent('Video', 'Stream', 'After Dark teaser FLV');
	});
	if($('afterdarkdownload')) {
		$('afterdarkdownload').observe('click', function(e) {
			pageTracker._trackEvent('Video', 'Download', 'After Dark teaser MP4');
		});	
	} else {
		$('afterdarkdownloadalt').observe('click', function(e) {
			pageTracker._trackEvent('Video', 'Download', 'After Dark teaser MP4 - FLV not available');
		});
	}
});