var Player = {
	_playing: 			false,
	_paused:  			false,
	_current:			0,
	_swf:				null,
	_autostarted:		false,
		
	init: function() {
		document.observe('dom:loaded', function() {
			$$('img.q-start.product-track, img.q-start.product-station').invoke('observe', 'click', Player.toggleStart);
			$$('a.q-start.product-track, a.q-start.product-station').invoke('observe', 'click', Player.toggleStart);
			
			$$('.q-favorite').invoke('observe', 'click', Player.favorite);
			$$('.video-rating img').invoke('observe', 'click', Player.rate);
			//swfobject.registerObject("player_swf", "9.0.0", null, Player.swfLoaded);
			
			Event.observe(window, 'load', function() {
				$$('a.q-auto-start').each(function(i) {
					Player.autoStart(i);
				});
			});
		});
	},
	
	toggleStart: function(e) {	
		var id = Player.getId(e.target.classNames());
		if( id == Player._current ) {
			Player._playing = !Player._playing;
		} else {
			Player._playing = true;
		}
		
		if( Player._playing  ) {
			Player.start(e);
		} else {
			Player.pause(e);
		}
	},
	
	autoStart: function(i) {
		if( Player._autostarted ) return;
		
		var id = Player.getId(i.classNames());
		if (Player._swf)
		{
			Player._swf.stopPlayback();
			Player._swf.playOne(id);
			Player._autostarted = true;
		}
	},
	
	start: function(e) {
		Player.setPlaying(true);
		var id = Player.getId(e.target.classNames());
		
		var id_changed = Player._current != id;
		Player._current = id;
		
		$$('.q-start').invoke('removeClassName', 'playing');
		e.target.addClassName('playing');
		
		//Layout.debug('Put your code to play product ' + id + ' here.');
		if (Player._swf)
		{
			//Layout.debug('swf found');
			if (id_changed)
			{
				Player._swf.stopPlayback();
				Player._swf.playOne(id);
			}
			else
			{
				Player._swf.startPlayback(id);
			}
		}
		else
		{
			//alert("no");
		}
		
		e.stop();
	},
	
	pause: function(e) {
		Player.setPaused(true);
		var id = Player.getId(e.target.classNames());
		
		$$('.q-start').invoke('removeClassName', 'playing');
		
		//Layout.debug('Put your code to pause product ' + id + ' here.');
		if (Player._swf)
		{
			Player._swf.pausePlayback();
		}
		
		e.stop()
	},
	
	favorite: function(e) {
		var id = Player.getId(e.element().classNames());
		
		Layout.loading(true);
		
		new Ajax.Request(
			'/queue/favorites/format/json/id/' + id, {
				onComplete: Player.favoriteResponse
			}
		);
		
		e.stop(); // Stop it last so that if anything goes wrong, we are b/c
	},
	
	getId: function(classes) {
		// Split up the string of class names into elements,
		classes = classes.toString().split(' ');
		
		for(var c=0; c<classes.length; c++) {
			if( /product-[0-9]/gi.match(classes[c]) ) {
				return classes[c].replace('product-', '');
			}
		}
	},
	
	setPlaying: function(is_playing) {
		Player._playing = is_playing;
	},
	
	setPaused: function(is_paused) {
		Player._paused = is_paused;
	},
	
	swfLoaded: function(evt) {
		//evt.success: boolean
		//evt.id	 : id of player
		//evt.ref    : html object element reference (if success == true)		
		
		//alert("success: " + evt.success ? "yes" : "no");
		Player._swf = evt.ref;				
	},

	// Returns true if it's playing
	isPlaying: function() {
		return Player._playing;
	},
	
	rate: function(e) {
		if( !Login.isLoggedIn() ) {
			Login.show();
			e.stop();
			return;
		}
		
		var rating = Player.getStars(e.target.parentNode.classNames());
		var id     = Player.getId(e.target.parentNode.classNames());

		e.target.parentNode.parentNode.removeClassName('video-rating-0');
		e.target.parentNode.parentNode.removeClassName('video-rating-1');
		e.target.parentNode.parentNode.removeClassName('video-rating-2');
		e.target.parentNode.parentNode.removeClassName('video-rating-3');
		e.target.parentNode.parentNode.removeClassName('video-rating-4');
		e.target.parentNode.parentNode.removeClassName('video-rating-5');
		
		e.target.parentNode.parentNode.addClassName('video-rating-'+rating);
		
		new Ajax.Request('/queue/rating/format/json/id/' + id + '/stars/' + rating, {
			method:		'post',
			onComplete: Player.dumpResponse
		});
		
		e.stop();
	},
	
	dumpResponse: function(response) {
		Layout.debug(response.responseText);
	},
	
	favoriteResponse: function(response) {
		Layout.loading(false);
		//Layout.debug(response.responseText);
		
		if( response.status == 200 ) {
			var res = response.responseJSON;
			
			if( res ) {
				// We should have a product_id(int) and a remove(bool)
				//Layout.debug('.product-' + res.product_id + ' adding class name');
				if( res.remove ) {
					$$('img.q-favorite.product-' + res.product_id).invoke('removeClassName', 'favorite');
				} else {
					$$('img.q-favorite.product-' + res.product_id).invoke('addClassName', 'favorite');
				}
			}
		}
	},
	
	getStars: function(classes) {
		classes = classes.toString().split(' ');
		
		for(var c=0; c<classes.length; c++) {
			if( /star-[0-9]/gi.match(classes[c]) ) {
				return classes[c].replace('star-', '');
			}
		}
	}
};

Player.init();