// YouTube DJ Version 2.0
// Simon Cross, July 2008
// http://www.simoncross.com
// sicross@gmail.com

var player1;
var player2;
var dj_playlist;
var dj_mixer;
var dj_controller;

function redrawLayout(){
	var windowHeight = $(window).height();
	var headerHeight = $('#header').height();
	var leftcolheaderHeight = $('.leftcolheader').height();
	var rightcolheaderHeight = $('.rightcolheader').height();
	$('#wrapper').height(windowHeight);
	$('#content').height(windowHeight-headerHeight);
	$('.leftcolbody').height(windowHeight-headerHeight-leftcolheaderHeight);
	$('.rightcolbody').height(windowHeight-headerHeight-rightcolheaderHeight);
}

$(document).ready(function(){
	
	// initial visual setup
	$('#seo').hide();	
	redrawLayout();
	$(window).resize(redrawLayout);

	dj_playlist = new playlist('playlist');
	player1 = new player('p1', dj_playlist);
	player2 = new player('p2', dj_playlist);
	dj_mixer = new mixer('mixer');
	dj_controller = new controller('controller',player1,player2,dj_playlist);

	// bugfix for FF3 which for some reason doen't allow
	//  the position of the fader to be set in initiation
	setTimeout("dj_mixer.setCrossFader(50)",2000);
  
		// add submit handler for YouTube search box
		$("#searchform").submit(function() {
			
			$('#searchspinner').show();

			// do a lastfm search
			var vq = $('#vq').val();
			$.getJSON('lastfmproxy.php', {"q":vq, "method":"search"}, function(data){
				$('#searchspinner').hide();
				$('#resultspane').empty();
				$('#resultspane').append('<div id="lastfm_searchresults"><div class="artists"><h4>Artists</h4><ul id="lastfm_artists"></ul></div><div class="tracks"><h4>Song Titles</h4><ul id="lastfm_tracks"></ul></div></div>');
				
				$.each(data.artists, function(){
					$('#lastfm_artists').append('<li><img src="'+this.image_small+'" height="50" width="50" /><span class="content"><a href="?q='+vq+'&artist='+this.name+'" onclick="showArtist(\''+this.name+'\'); return false;">'+this.name+'</a></span></li>');
				});
				$.each(data.tracks, function(){
					$('#lastfm_tracks').append('<li><img src="'+this.image_small+'" height="50" width="50" /><span class="content"><div class="track"><a href="?q='+vq+'&artist='+this.artist+'&track='+this.name+'" onclick="searchVideos(\''+this.artist+'\', \''+this.name+'\'); return false;">'+this.name+'</a></div><div class="artist">by <a href="#" onclick="showArtist(\''+this.artist+'\')">'+this.artist+'</a></div></span></li>');
				});
				
				$('.leftcolbody').scrollTo('#lastfm_searchresults h4:first',500);
			});
			
			return false; // end submit handler
    	});  

 }); // end of the onDomReady function

function showArtist(artist,q){
	
	$('#searchspinner').show();

	// do a lastfm artist lookup
	$.getJSON('lastfmproxy.php', {"artist":artist, "method":"artist"}, function(data){
		$('#searchspinner').hide();
		$('#resultspane').empty();
		$('#resultspane').append('<div id="lastfm_artistresults"><h3>'+data.name+'</h3><div class="tracks"><h4>Top Tracks</h4><ul id="lastfm_artist_tracks"></ul></div><div class="similar"><h4>Similar Artists</h4><ul id="lastfm_artist_similar"></ul></div></div>');
		
		$.each(data.tracks, function(){
			$('#lastfm_artist_tracks').append('<li><a href="?q='+q+'&artist='+data.name+'&track='+this.name+'" onclick="searchVideos(\''+data.name+'\', \''+this.name+'\'); return false;">'+this.name+'</a></li>');
		});
		$.each(data.similar, function(){
			$('#lastfm_artist_similar').append('<li><a href="?q='+q+'&artist='+this.name+'" onclick="showArtist(\''+this.name+'\'); return false;">'+this.name+'</a></li>');
		});

		$('.leftcolbody').scrollTo('#lastfm_artistresults h3:first',500);
	});
	
	
}

function searchVideos(artist, title){
	
	$('#searchspinner').show();


			var vq = artist+' '+title;
			$.getJSON('ytproxy.php', {"vq":vq}, function(data){
				
				$('#resultspane').empty();
				$('#searchspinner').hide();
				$('#resultspane').append('<div id="youtube_results"><h3>YouTube Videos for '+artist+' - '+title+'</h3><ul id="resultlist"></ul></div>');
				
				$.each(data.results, function(){
		
					var title = this.title;			
					var id = this.id;
					var thumb = this.thumbnail;
					var desc = this.description;
					var duration = this.duration;
					//var viewCount = this.views;
						
					$('#resultlist').append('<li id="res_'+id+'"><div class="id">'+id+'</div><h3><a href="#"><img width="75" height="60" src="'+thumb+'" /><div class="title">'+title+'</a> <span class="duration">('+duration+' seconds)</span></div></h3><p>'+desc+'</p></li>');
					
					// add clicked item to bottom of playlist
					$('#res_'+id+' a').click(function(e){
						
						dj_playlist.addItem(id, title);
						
						return false;
					}) // end click for add to playlist link
					
				}); // end foreach result returned

				$('.leftcolbody').scrollTo('#youtube_results h3:first',500);

			}); // end ajax response handler
	
}



// function called by the youtube swf player once its ready
//  this kicks off further setup code within the player class
function onYouTubePlayerReady(pid){
	if(pid=='p1_player') {
		player1.onReady();
		player1.ytplayer.addEventListener("onStateChange", "p1stateChange");
		
	}
	else if(pid=='p2_player') {
		player2.onReady();
		player2.ytplayer.addEventListener("onStateChange", "p2stateChange");
	}
};
function p1stateChange(newstate){
	player1.onStateChange(newstate);
}
function p2stateChange(newstate){
	player2.onStateChange(newstate);
}

