PosterOverlay = Class.create();
Object.extend(PosterOverlay.prototype, AC.MovieOverlay.prototype);
Object.extend(PosterOverlay.prototype, {
	audioController: false,

	overlayId: 'ACOverlayAudio',
	overlayShadowId: 'ACOverlayAudioShadow',
	overlayShadowSrc: 'http://images.apple.com/science/poster/images/overlay_shadow20071012.png',
	
	initialize: function(items, options) {
		this.items = items;
		$('main').addClassName('hasjs');

		if (this.items.length>0) {
			this.createOverlay();
			this.setDefaults();
			this.setItemAttributes();
		}

		this.options = options || {};

	},
	
	buildContents: function() {
		this.contentPanel = Builder.node('div', {'class':'overlaycontent'});
		this.overlaynav = Builder.node('div', {'class':'overlaynav'});
		this.overlayContents = [
			this.closeBtn,
			this.contentPanel,
			this.overlaynav
		];
	},

	setItemAttributes: function() {

 		for (var i=0; i<this.items.length; i++) {
 			var item = this.items[i];
			item.nav = {
				prev: null,
				next: null
			};
			item.content = item.down('div.overlaycontent');

			item.content.down('h2').down('img').alt = item.down('.title').innerHTML;
			item.content.down('.overlay-author').innerHTML = Element.down(item, '.author').innerHTML;
			
			this.items[i+1] ? item.nav.next = this.items[i+1] : false;
			this.items[i-1] ? item.nav.prev = this.items[i-1] : false;
			
			item.triggers = item.getElementsByClassName('trigger');
			if(item.triggers.length>0) {
				for(j=0; j<item.triggers.length; j++) {
					var trigger = item.triggers[j];
					this.setEvent(item, trigger, j);
				}
			}
 			
 		}

	
 		this.listenForEvent(this, 'beforePop', false, function(evt) {
			this.handleBeforePop(evt);
		}.bindAsEventListener(this));

		this.listenForEvent(this, 'afterPop', false, function(evt) {
			this.handleAfterPop(evt);			
		}.bindAsEventListener(this));

		this.listenForEvent(this, 'beforeClose', false, function(evt) {
			this.handleBeforeClose(evt);
		}.bindAsEventListener(this));
		
	},

	setEvent: function(item, trigger, i) {
		Event.observe(trigger, 'click', this.onClick.bindAsEventListener(this, item, i), false);
	},

 	setNav: function(item, i) {
		this.overlaynav.innerHTML = '';
		if(item.nav.prev) {
			var prev = Builder.node('a', { 'class':'nav-prev'});
			prev.innerHTML = 'Previous Poster';
			Event.observe(prev, 'click', this.swapPoster.bindAsEventListener(this, item.nav.prev, i-1), false);
			this.overlaynav.appendChild(prev);
		}				
		if(item.nav.next) {
			var next = Builder.node('a', { 'class':'nav-next'});
			next.innerHTML = 'Next Poster';
			Event.observe(next, 'click', this.swapPoster.bindAsEventListener(this, item.nav.next, i+1), false);
			this.overlaynav.appendChild(next);
		}
	
	},

	swapPoster: function(evt, item, i) {
		this.handleBeforeClose(evt);
		if(Element.hasClassName(this.contentPanel, 'audio')) Element.removeClassName(this.contentPanel, 'audio');
		this.contentPanel.innerHTML =  item.content.innerHTML;
		this.setNav(item, i);
		this.fixAudioLinks();
	},

 	fixAudioLinks: function() {
		var moviewidth = 290;
		var movieheight = 16;
 		var links = $(this.contentPanel).getElementsByClassName('overlayaudiolink');
 		if (links.length>0) {
			Element.addClassName(this.contentPanel, 'audio');
			this.audioController = [];
		} 
	
 		for (var i=0; i<links.length; i++) {
 			var item = links[i];
 			item.movieUrl = item.href;
			
			var movie = AC.Quicktime.packageMovie('overlayaudiomovie'+1, item.movieUrl, {
				width: moviewidth,
				height: movieheight,
				controller: true,
				autoplay: false,
				showlogo: false,
				cache: true
			});

			Element.up(links[i], 'li').appendChild(movie);
			this.audioController[i] = new AC.QuicktimeController();
			this.audioController[i].attachToMovie(movie);
 			Event.observe(links[i], 'click', function(evt, item, i) {
				Event.stop(evt);
				// for tracking
 				this.currentItem = item;
				// set the audio clip
				
				if (this.audioController[i]) {

					if (!this.audioController[i].isPlaying()) {
						this.audioController[i].Play();
						this.track(this.currentItem, 'Start');
					}
				}
 			}.bindAsEventListener(this, links[i], i));
			// for IE
			var movie = null;
 		}
 	},

 	prepPop: function(evt, item, i) {

		// set up the nav
		this.setNav(item, i);

		// call the effect
		this.pop(this.defaultWidth, this.setPopPosition().top, this.defaultHeight, this.setPopPosition().left, item, i);
	},

 	handleAfterPop: function(evt) {
		// fix audio links
		var item = evt.event_data.data.item;
		var i = evt.event_data.data.i;
		this.contentPanel.innerHTML = item.content.innerHTML;
		this.fixAudioLinks();
		
 	},

 	handleBeforeClose: function(evt) {
		// stop the movie and unplug the controller
		if (this.audioController && this.audioController.length>0) {
			for (var i=0; i<this.audioController.length; i++) {
				if (this.audioController[i].isPlaying()) {
					 this.audioController[i].Stop();
				}
				this.audioController[i].detachFromMovie();
				this.audioController[i] = false;
			}
			this.audioController = false;
		}

		// reset the containers
		this.contentPanel.style.display = 'none';
		this.contentPanel.innerHTML = '';
		this.contentPanel.style.display = '';
 	}

});
Event.observe(window, 'load', function() {
	
	var posterOverlayNav = $$('#main .poster');
	var posterOverlay = (posterOverlayNav.length > 0) ? new PosterOverlay(posterOverlayNav) : false;
				
});
