var search_box_selector = "input.search";
var artist_search_url = "";
var tag_search_url = "";
var generate_playlist_url = "";
var tag_recommendations_url = "";
var artist_recommendations_url = "";
var search_query = "";
var tag_array = [];
var ajax_request2 = new Array(2);
ajax_request2[0] = null;
ajax_request2[1] = null;
var not_found = new Array(2);

$(document).ready(function() {
	// focus on search box
	setTimeout(function() {
		$(search_box_selector).focus();
	},50);
	$(search_box_selector)
		.keyup(search_modified)
		.blur(function() {
			setTimeout(function() {
				$('div.search_results_container').hide();
			},150);
		});
	artist_search_url = $('#root_url').attr('href')+'artists/ajaxSearch/';
	tag_search_url = $('#root_url').attr('href')+'tags/ajaxSearch/';
	generate_playlist_url = $('#root_url').attr('href')+'tracks/get.json';
	tag_recommendations_url = $('#root_url').attr('href')+'tags/suggestTags/2';
	artist_recommendations_url = $('#root_url').attr('href')+'tags/suggestArtists/2';
	
	$('tr.result.artist').live('click',function() {
		var artist_name = $(this).find('td.name').html().replace("<strong>","").replace("</strong>","");
		generate_playlist(artist_name,null);
		showPlaylist();
		return false;
	});
	
	$('tr.result.tag').live('click',function() {
		var tag_id = $(this).find('td.id').html();
		generate_playlist(null,tag_id);
		showPlaylist();
		return false;
	});
});

function search_modified() {
	var new_query = $(search_box_selector).val();
	if (new_query!=search_query) {
	    $('div.black_spinner').show();
		not_found[0] = false;
		not_found[1] = false;
		search_query = new_query;
		$('tr#no_match').hide();
		get_results('artist');
		get_results('tag');
	};
}

function get_results(type) {
	$('div.black_spinner').show();
	
	if (type=='artist') {
		if (ajax_request2[0]) { // checks for an existing ajax request
			ajax_request2[0].abort(); // aborts request
		};
		var url = artist_search_url+search_query+'.json';
		var request = 0;
	} else {
		if (ajax_request2[1]) {
			ajax_request2[1].abort();
		};
		var url = tag_search_url+search_query+'.json';
		var request = 1;
	};
	
	ajax_request2[request] = $.ajax({
		url : url,
		dataType : 'json',
		success : function(data) {
			$('table.search_results tr.result.'+type).remove();
			if (data!=null) {
			    $('tr#no_match').hide();
				$('table.search_results tr.subtitle.'+type).show();
				
				$.each(data.item,function() {
					var new_row = $('table.search_results tr.result:first').clone();
					var query_index = this.name.toLowerCase().indexOf(search_query.toLowerCase());
					var item_name = this.name.substring(0,query_index)+"<strong>"+this.name.substring(query_index,query_index+search_query.length)+"</strong>"+this.name.substring(query_index+search_query.length,this.name.length);
					new_row.find('td.name').html(item_name);
					new_row.find('td.plays').html(this.plays+' plays');
					new_row.find('td.url').html(this.url);
					if (this.id) {
						new_row.find('td.id').html(this.id);
					};
					new_row.addClass(type);
					new_row.insertAfter('table.search_results tr.'+type+':last');
				});
				$('table.search_results tr.'+type).show();
			} else {
				$('table.search_results tr.subtitle.'+type).hide();
				
				if (type=='tag') {
					not_found[1] = true;
				} else if(type=='artist') {
					not_found[0] = true;
				};
				
				if (not_found[0]&&not_found[1]) {
					$('tr#no_match').show();
				};
			};
			$('div.search_results_container').show();
			$('div.black_spinner').hide();
		}
	});
}

function generate_playlist(artist,tag) {
	$('#load_player_playlist').show();
	if (artist!=null) {
		var data = "artist="+artist;
	} else if(tag!=null) {
		var data = "tag="+tag;
	};
	$.ajax({
		url : generate_playlist_url,
		method : "GET",
		data : data,
		dataType : 'json',
		success : function(data) {
			$('#load_player_playlist').hide();
			if (data!=null) {
				var mygrid = jQuery("#player_playlist")[0];
				var response = eval(data);
				mygrid.addJSONData(response);
			} else {
				alert('Error loading search results.');
			};
		}
	});
}

function serialise_tags() {
	var serialised = "";
	var tag_count = tag_array.length;
	for (var i=0; i < tag_count; i++) {
		serialised += i+'='+tag_array[i];
		if (i!=(tag_count-1)) {
			serialised += '&';
		};
	};
	return serialised;
}

function generate_recommendations() {
	var serialised = serialise_tags();
	$('ul.tag_suggestions').addClass('disabled');
	$.ajax({
		url : tag_recommendations_url,
		data : serialised,
		success : function(data) {
			if (data!="null") {
				$('ul.tag_suggestions').removeClass('disabled').replaceWith(data);
			} else {
				
			};
		}
	});
	$('ul.artist_suggestions').addClass('disabled');
	$.ajax({
		url : artist_recommendations_url,
		data : serialised,
		success : function(data) {
			if (data!="null") {
				$('ul.artist_suggestions').removeClass('disabled').replaceWith(data);
			} else {
				
			};
		}
	});
}
