var PopupGalleryMovie = Class.create();
Object.extend(Object.extend(PopupGalleryMovie.prototype, PopupGallery.prototype), {
	movieController: false,

	initialize: function(items) {
		this.items = items;
		//console.log(items)
		if (this.items.length>0) {
			this.createPopup();
			this.setDefaults();
			this.setItemAttributes();
		}

		if (location.hash) {
			var initial = location.hash.substring(location.hash.indexOf('#')+1, location.hash.length);
			if (initial=='demo') this.showDemo();
		}
	},

 	createPopup: function() {
		this.closeBtn = Builder.node('a', {href:'#close', 'class':'close'}, 'Close');
		Event.observe(this.closeBtn, 'click', this.close.bindAsEventListener(this), false);

		this.displayPanel = Builder.node('div', {'class':'movie'});
		this.controllerPanel = Builder.node('div', {'class':'controller'});
		this.descriptionPanel = Builder.node('div', {'class':'description'});

		this.popup = Builder.node('div', {'id':'popupmovie', 'class':'popup'}, [
			this.closeBtn,
			this.descriptionPanel,
			this.displayPanel,
			this.controllerPanel
		]);

 		this.popupshadow = Builder.node('div', {id:'popupmovieshadow', 'class':'popupshadow'}, [
 			Builder.node('img', {src:'/images/popups/popup_whereto_movie.png', alt:'', border:0})
 		]);

 		document.body.appendChild(this.popupshadow);
 		document.body.appendChild(this.popup);
 	},

 	onClick: function(evt, item, i) {
 		// store the small size and position for later
		this.width = (item.offsetWidth>80) ? 80 : item.offsetWidth;

		this.left = evt.pageX || evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
		this.left -= this.width/2;
		this.left = this.left || document.body.getDimensions().width / 2;
		this.height = item.offsetHeight;
		
		// hack for left-floating img links because their offsetHeight is 0!
		if (this.height == 0) {
			this.height =110;
		}
		this.top = evt.pageY || evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
		this.top -= this.height/2;
		//this.top = 10;
		
		if (AC.Detector.isiPhone()) {
		    this.left = 3;
		    this.top = 200;
		}
		
		// stop the default event
 		Event.stop(evt);

		// track this click
	 	if (item.trackClick) item.trackClick();

		// unset the click events if a movie
		if (!this.controllerPanel.innerHTML == "") {
			this.beforeClose();
			this.afterClose();
		}

		// do the image
		this.prepPop(evt, item, i);
 	},

	setItemAttributes: function() {
 		for (var i=0; i<this.items.length; i++) {
 			var item = this.items[i]; 

			item.movieLink = item.down('a.movielink');
			item.movieUrl = item.movieLink.href;
			item.description = item.down('.description');

			var posterFrame = item.down('.poster');
			item.posterFrameUrl = posterFrame.innerHTML.match(/src="?(.*)"?$/)[1];

			item.trackClick = function() {
				var name = (this.movieLink.down('img')) ? this.movieLink.down('img').alt : this.movieLink.innerHTML;
				clickTracking(this.movieUrl,  name+' - '+ document.title);
			};

 			this.setEvent(item, i);
 		}
	},

 	prepPop: function(evt, item, i) {
		// call the effect
		//this.pop(this.defaultWidth, this.setPopPosition().top, this.defaultHeight, this.setPopPosition().left, item, i);
		this.pop(this.defaultWidth, 55, this.defaultHeight, this.setPopPosition().left-8, item, i);
 	},

 	packageMovie: function(item, i) {
		var controllerstatus = false;
		var moviewidth = 240;
		var movieheight = 360;

		// if we're Opera, set this flag (in essence now) to true
		if (AC.Detector.isiPhone()) controllerstatus = true;

		// if we're Opera, use the standard movie controller & add the height for it
		if (AC.Detector.isOpera()) {
			controllerstatus = true;
			movieheight += 16;
		}

		if (AC.Detector.isQTInstalled()) {
			//console.log(item.posterFrameUrl)
			var movie = AC.Quicktime.packageMovie('movie', item.movieUrl, {
				width: moviewidth,
				height: movieheight,
				posterFrame: item.posterFrameUrl,
				controller: controllerstatus,
				showlogo: false,
				background: '#ffffff',
				cache: true
			});
			this.displayPanel.appendChild(movie);

			if (!controllerstatus) {
				this.movieController = new AC.QuicktimeController();
				this.movieController.render(this.controllerPanel);
				this.movieController.attachToMovie(movie);
				this.movieController.monitorMovie();
			}
		}

		// for IE
		var movie = null;
 	},

 	afterPop: function(item, i) {
		Element.removeClassName(this.popup, 'isanim');
		Element.removeClassName(this.popupshadow, 'isanim');
		Element.addClassName(this.popup, 'popped');
		Element.addClassName(this.popupshadow, 'popped');
		
		// reset movie & static content
		this.packageMovie(item, i);
		this.descriptionPanel.innerHTML = item.description.innerHTML;

		// reset the effect inline styles
		this.popup.style.width = '';
		this.popupshadow.style.width = '';

		this.popup.style.height = '';
		this.popupshadow.style.height = '';

		Element.setOpacity(this.popup, '');
		Element.setOpacity(this.popupshadow, '');
	},

	beforeClose: function() {
 		Element.addClassName(this.popup, 'isanim');
 		Element.addClassName(this.popupshadow, 'isanim');
 		Element.removeClassName(this.popup, 'popped');
 		Element.removeClassName(this.popupshadow, 'popped');

		// stop the movie and unplug the controller
		if (this.movieController) {
			this.movieController.Stop();
			this.movieController.detachFromMovie();
		}

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

		this.controllerPanel.innerHTML = '';

		this.descriptionPanel.innerHTML = '';
 	}

});

//Updated 12/17 - dd, will track all movies using this popup
//Updated 1.7.08 - dlv trapped for pages that do not have tracking code on them.
//Updated 1.8.08 - dd added reinitialize of SiteCatalyst for movi tracking.


function clickTracking(url,title) {
	//alert(url+"-"+title)
	if ( typeof( window[ 's' ] ) != "undefined" ) {
		s.prop6=title;
	}
	
}