var fW = {
	initialize: function() {
		var featuredItems = document.getElementsByClassName('featuredItem');
		featuredItems.each(fW.initFeaturedItem);
	},
	
	initFeaturedItem: function(featuredItem, index) {
		if (featuredItem.isInitialized) return;
		featuredItem.isInitialized = true;
		
		featuredItem.hideTimeoutId = null;
		featuredItem.previousDirection = null;
		
		var links = featuredItem.getElementsByTagName('a');
		if (!links.length) return;
		featuredItem.link = links[0];
		
		var detailsBoxes = featuredItem.getElementsByClassName('details');
		if (!detailsBoxes.length) return;
		featuredItem.detailsBox = detailsBoxes[0];
		
		featuredItem.detailsBox.setStyle({opacity:0.9});
		featuredItem.setStyle({cursor:'pointer'});
		
		featuredItem.animator = new Animator({interval:25, transition:Animator.tx.easeOut});
		featuredItem.animator.addSubject(new CSSStyleSubject(featuredItem.detailsBox, "top:0px"));
		
		featuredItem.link.observe('click', function(e) { fW.handleClick(e, featuredItem); }, false);
		featuredItem.observe('click', function(e) { fW.handleClick(e, featuredItem); }, false);
		featuredItem.observe('mouseover', function(e) { fW.mover(e, featuredItem); }, false);
		featuredItem.observe('mouseout', function(e) { fW.mout(e, featuredItem); }, false);
	},
	
	handleClick: function(e, featuredItem) {
		popWin(featuredItem.link.href, 'player', 815, 635, 'yes', 'no');
		Event.stop(e);
	},
	
	mover: function(e, featuredItem) {
		fW.cancelHide(featuredItem);
		fW.showDetails(featuredItem);
		Event.stop(e);
	},
	
	mout: function(e, featuredItem) {
		fW.cancelHide(featuredItem);
		fW.scheduleHide(featuredItem);
		Event.stop(e);
	},
	
	// Delay hideDetails to combat alternating mouseover and mouseout events
	// raised  when the mouse is over the animated area.
	scheduleHide: function(featuredItem) {
		featuredItem.hideTimeoutId = window.setTimeout(function() {fW.hideDetails(featuredItem);}, 100);
	},
	
	cancelHide: function(featuredItem) {
		window.clearTimeout(featuredItem.hideTimeoutId);
	},
	
	hideDetails: function(featuredItem) {
		featuredItem.animator.options.duration = 200;
		featuredItem.animator.seekTo(0);
	},
	
	showDetails: function(featuredItem) {
		featuredItem.animator.options.duration = 300;
		featuredItem.animator.seekTo(1);
	},
	
	// Progressive initialization ensures that a slow to load image won't 
	// prevent our animation from initializing.
	beginProgressiveInit: function() {
		Event.observe(window, 'load', fW.window_load);
		fW.continueInit = true;
		fW.doProgressiveInit();
	},
	
	endProgressiveInit: function() {
		fW.continueInit = false;
	},
	
	doProgressiveInit: function() {
		if (!fW.continueInit) return;
		
		// It's possible that we'll try to initialize before the body element exists.
		// In that case, fW.initialize could explode.
		try {
			fW.initialize();
		} catch (err) {
			// We're going to attempt initialization again later, so ignore the error.
		}
		
		window.setTimeout(fW.doProgressiveInit, 100);
	},
	
	
	window_load: function(e) {
		fW.initialize();
		fW.endProgressiveInit();
	}
}

fW.beginProgressiveInit();
