// JavaScript Document

	var mjplayer = Class.create({
		loaded:false,
		track:0,
		tracks:[],
		state:0,
		player:false,
		queueTrack:-1,
		initialize:function(){
			if(Object.isArray(arguments[0])) this.tracks = arguments[0];
			else for(var i=0; i<arguments.length; i++) this.tracks.push({title:arguments[i++], rel:arguments[i]});
			window.playerReady = this.playerReady.bind(this);
			window.prefix(this.loadPlayer.bind(this));
		},
		loadPlayer:function(){
			var s1 = new SWFObject('/js/jwplayer.swf','ply',getWidth(),30,9,'#ffffff');
			s1.addParam('flashvars','controlbar=top&skin=/js/stylish.swf');
			s1.addParam('wmode','transparent');
			s1.write('player');
			this.tracks.each(function(track, n){
				$('tracklist').innerHTML += '<a id="track' + n + '" href="'+track.rel+'" onclick="MJP.play(' + n + '); return false">' + (n+1) + '. ' + track.title + '</a>\n';
			}); 
			this.goIdle();
		},
		playerReady:function(){
			this.player = $('ply');
			Event.observe(window, 'resize', function(){
				$('ply').width = getWidth();										 
			})
			
			window.itemShift = function(){
				for(var i=0; i<this.tracks.length; i++){
					$('track' + i).className = (i == this.track) ? 'playing' : 'idle';
					if($('track_' + i)) $('track_' + i).style.display = (i == this.track) ? 'block' : 'none'; 
				}
			}.bind(this);			
			this.player.addControllerListener("ITEM","itemShift");
			
			window.listLoaded = function(o){
				$('ply').sendEvent('PLAY', 'true');
			};
			this.player.addControllerListener("PLAYLIST","listLoaded");
			
			window.stateAltered = function(o){
				switch(o.newstate){
					case 'PLAYING':
						if(!this.state) this.state = 1;
						if(!$('track_' + this.track)){
							$('playing').innerHTML = 'Now Playing: <b>' + this.tracks[this.track].title + '</b> <sup><a href="javascript:MJP.stop()">stop</a></sup>';
							$('playing').show();
						}else{
							$('playing').hide();
							$('track_' + this.track).style.display = 'block';  
						}
						this.throwStart();
						return;
					case 'COMPLETED':
						if((this.state == 2)&&(this.tracks[this.track+1])) this.play(this.track+1);
						else this.goIdle();
						return;
					case 'BUFFERING':
						return;
					default:
						if(this.state != 2) this.goIdle();
				}
			}.bind(this);
			this.player.addModelListener('STATE', 'stateAltered');
			this.loaded = true;
			if(this.queueTrack > -1) this.play(this.queueTrack);  
		},
		goIdle:function(){
			$('playing').innerHTML = '<a href="javascript:MJP.playAll()">Play All</a>';
			$('playing').show();
			for(var i=0; i<this.tracks.length; i++){
				$('track' + i).className = 'idle';
				if($('track_' + i)) $('track_' + i).style.display = 'none'; 
			}
			this.state = 0;
		},
		throwStart:function(){},
		play:function(n){
			if(!this.loaded) return this.queueTrack = n;
			//if($('player').style.bottom != '0px') new Effect.Morph('player', {style:'bottom:0px'});	
			this.track = n;
			this.player.sendEvent('LOAD', this.tracks[n].rel);
		},
		playAll:function(){
			this.state = 2;
			this.play(0);
		},
		stop:function(){
			this.player.sendEvent('STOP', 'true');
			this.goIdle();
		}
	});