// playlist functions

var mp;
var md;
var cp;

window.addEvent('domready', function() {
	// where not doing the domready because we are waiting for the flashready 
	// and the right communication between flash and javascript
	
	/*
	var asUserSet = false;
	$('asUserInput').addEvents({
		
		'mouseenter': function() {
			if(this.value == 'Who are you on Last.fm?' && asUserSet == false) { this.value = 'Enter your last.fm username' };
		},
		
		'mouseleave': function() {
			if(this.value == 'Enter your last.fm username' && asUserSet == false) { this.value = 'Who are you on Last.fm?' };
		},	
		
		'focus': function() {
			if(this.value == 'Enter your last.fm username' || this.value == 'Who are you on Last.fm?') { this.value = '' };
		},
		
		'blur': function() {
			if(this.value == '') { 
				$('asUser').removeClass('set');
				var asUserSet = false;
				this.value = 'Who are you on Last.fm?';
			} else { 
				$('asUser').addClass('set');
				$('asUserLink').href = 'http://www.last.fm/'+this.value;
			};
		}
		
	});	
	
	*/
	
	if(total >= 1) {
		md = new Metadata();	
	}
	
	if(total > 1) {
		mp = new Musicplayer();	
	}
	
	cp = new Customplaylist();	


});
	
var javascript = function javascript(){
	//alert('true');
	return true // yes it's really true minster flash!
}	

var flashready = function javascript(){
		
}

var jsalert = function jsalert(t){
	alert(t);
}

var Musicplayer = new Class ({

		initialize: function() {
			
			var musicplayer = this;
					
			this.history = new HistoryManager();
			this.play    = new Number(play);
			this.total   = new Number(total);
			
			this.history.addEvent('onHistoryChange', function(hash) {															 
				if(!isNaN(hash) && hash != '' && hash != musicplayer.play) {  
					//alert(hash);
					musicplayer.goto(Number(hash));
				}else if(musicplayer.play != 1){
					this.addState(musicplayer.play);
				}
			});
			
			this.history.fireEvent('onHistoryChange', [this.history.getCurrentLocation()]);
			
			document.addEvent('keypress', function(event) {
				this.keyPressed.call(this, event);
			}.bind(this));	
			
			//prevent window from interacting with these keyevents
			window.addEvents({
				keypress:function(e){var e=new Event(e);if(e.key=='down'||e.key=='up')e.stop()}
			});	
			
			row = $$('table.list tr');
			row.each(function(item,i) { 
					
				//alert(i);
					
				item.addEvent('mouseenter', function(evt) {
					this.addClass('hover');	
				});
				item.addEvent('mouseleave', function(evt) {
					this.removeClass('hover');	
				});
				
				 	td = item.getElements('td');		
					td.each(function(item,j) { 
	
						item.addEvent('click', function(evt) {
							musicplayer.goto(i+1);
						});
					
					});		
		
			});
			
			$$('table.list tr td.track a').each(function(item,i) { 
				item.addEvent('click', function(evt) {
					musicplayer.goto(i+1);
					new Event(evt).stop();
				});													 
			});
		
		},
		
		goto: function(to){
			row = $$('table.list tr');
			row.each(function(item,i) { 
				item.removeClass('selected');
				if((i+1) == to){
					item.addClass('selected')
				}
			});
			this.history.addState(to);
			this.play = Number(to);
			this.newdata();
		},

		keyPressed: function(event) {
			
			event = new Event(event);
		
			switch (event.key) {
				case 'up':
					return this.previous();
				case 'down':
					return this.next();
				case 'right':
				case 'k':	
				case 'left':
				case 'j':	
				case 'q':
					//return $('swfobject').fullscreen();			
			}
			// Safari's codes for the arrow keys
			switch (event.code) {
				case 63232:
				case 63234:
					return this.previous();
				case 63233:
				case 63235:
					return this.next();
			}
		},
		
		next: function(){
			
			if(Number(this.play) < Number(this.total)) { to = Number(this.play)+1 } else { to = 1; };			
			this.goto(to);
			return true; //return status to flash
			
		},
		
		previous: function(){
			
			if(Number(this.play) > 1) { to = Number(this.play)-1 } else { to = Number(this.total); };
			this.goto(to);	
			return true; //return status to flash
			
		}, 
		
		newdata: function(){
			
			$('message').set('html', '');
			$('message').removeClass('loading');
			$('message').removeClass('error');
					
			$('message').set('html','Loading data..');
			$('message').addClass('loading');
			
			var jsonRequest = new Request.JSON({url: "/api", onComplete: function(req){
							
				$('as').href = 'http://www.last.fm/music/'+escape(req.artist)+'/_/'+escape(req.song);
				$('metadata').set('html',req.metadata);
				
				if(req.videoId){
					$('Swiff_1').playvideo(req.videoId,Number(req.play));
					$('message').set('html','');
					$('message').removeClass('loading');
				} else {
					$('message').set('html','Could not find a video.. Let\'s move forward');							
					$('message').addClass('error');
					if(Number(req.play) < Number(req.total)) { to = Number(req.play)+1 } else { to = 1; };
					(function(){ mp.next(); }).delay(3000);
				}
				
				md.build();
				
			}}).get({'method': 'musicvideo', 'artist': songs[this.play][0], 'song': songs[this.play][1], 'play': Number(this.play), 'total': Number(this.total) });
			
		}

});


var AlbumList = new Class ({

		initialize: function() {
			
			var url = $$('td.album div a.image');	
				
			$$('table.album').each(function(item,i) { 
									
					url[i].set('html','<img src="'+images[i]+'" />');
					
				 	row = item.getElements('table.list tr');	
					row.each(function(item,j) { 
					
						item.addEvent('mouseenter', function(evt) {
							this.addClass('hover');	
						});
						item.addEvent('mouseleave', function(evt) {
							this.removeClass('hover');	
						});
						item.addEvent('click', function(evt) {
							setTimeout("self.location.href  = \'"+url[i].href+"#"+Number(j+1)+"\'");
						});
						
						item.getElements('td.track a').addEvent('click', function(evt) {
							setTimeout("self.location.href  = \'"+url[i].href+"#"+Number(j+1)+"\'");
							new Event(evt).stop();
						});													 
												
					});		

			});
		
		}
		
});

var Metadata = new Class ({

		initialize: function() {
			
			var isLarge  = false;
			var playerX = new Fx.Tween('player');
			var playerY = new Fx.Tween('player');
			var video  = new Fx.Tween('video');
			
			$('large').addClass('show');
			$('large').addEvent('click', function(evt) {														
					if(isLarge){
						video.start('height', '742px', '360px');
						playerX.start('width', '990px', '480px');
						playerY.start('height', '742px', '360px');
						$('large').set('html','<span>Enter large mode</span>');
						isLarge = false;	
					} else {
						video.start('height', '360px', '742px');
						playerX.start('width', '480px', '990px');
						playerY.start('height', '360px', '742px');
						$('large').set('html','<span>Exit large mode</span>');
						isLarge = true;
					}
			});
			$('large').addEvent('mouseenter', function(evt) {
				this.addClass('hover');	
			});
			$('large').addEvent('mouseleave', function(evt) {
				this.removeClass('hover');	
			});
			$('large').set('html','<span>Enter large mode</span>');
			this.build();
			
		},
		
		build: function(){
			
			$$('#metadata ul.tabs li a').each(function(item,i) { 
			
				item.addEvent('click', function(evt) {
																				
					$$('div.c').each(function(item,j) { if(i != j) { item.removeClass('show'); } else { item.addClass('show'); } });
					$$('ul.tabs li').each(function(item,j) { if(i != j) { item.removeClass('selected'); } else { item.addClass('selected'); } });
					new Event(evt).stop();
				
				});
	
			});	
			
			var url = $$('#metadata a.list');	
			
			$$('#metadata ul.list').each(function(item,i) { 
			
					row = item.getElements('li');	
					row.each(function(item,j) { 
						item.getElements('a').addEvent('click', function(evt) {
							setTimeout("self.location.href  = \'"+url[i].href+"#"+Number(j+1)+"\'");
							new Event(evt).stop();
						});													 
						
					});		

	
			});
			
			$$('#metadata .header a.add').addEvent('click', function(evt) {
																				
				cp.add($$('#metadata .header h2 a:nth-child(first)').get('text'),$$('#metadata .header h1 a').get('text'));
				new Event(evt).stop();
			
			});
			
			//var large = new Element('div', {id: 'large'});
			//$('metadata').inject(large, 'after');
			//large.addEvent('click', function(evt) {											
			//	alert('large');
			//});
			
		}
		
});

var Customplaylist = new Class ({
		
		add: function(artist,song){
					
			var jsonRequest = new Request.JSON({url: "/api", onComplete: function(req){
				
				alert('added');
				
				var fxCount = new Fx.Tween('counter');
				fxCount.start('color', '#FFF', '#111')
				$('counter').set('text',Number($('counter').get('text'))+1);
		
			}}).get({'method': 'addtocustomplaylist', 'artist': String(artist), 'song': String(song) });
			
		},
		
		remove: function(artist,song){
			
			alert('Remove: '+artist+' - '+song);
			
		}
		
		
});
