
var query = "<invalid>";
var searchResult;
var orderBy = "time";
var pageSize = 6;

function newSearchResult() {
	searchResult = new Object();
	searchResult.query = query;
	searchResult.entries = new Array();
	searchResult.size = 0;
	searchResult.numPages = 0;
	searchResult.currentPage = 0;
	searchResult.orderBy = orderBy;
}

function init() {
	var artistId = null;
	var query = window.location.search;
	if (query != "") {
		var params = query.substr(1).split("&");
		for (var i=0; i<params.length; i++) {
			var tokens = params[i].split("=");
			if (tokens[0] == "artistId")
				artistId = tokens[1];
		}
	}
	if (artistId)
		loadArtist(artistId);
	else
		searchAll();
}

function loadArtist(artistId) {
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("GET", "/servlet/artistsearch?artistId=" + artistId, true);
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) {
				eval(http.responseText);
				newSearchResult();
				searchResult.entries[searchResult.currentPage] = itemList;
				searchResult.size = size;
				searchResult.numPages = Math.ceil(size/pageSize);
				updateSearchResult();
				if (itemList.length > 0)
					openArtist(itemList[0]);
			}
			else
				alert("Failed to load recording - code " + http.status);
		}
	}
	http.send(null);
	document.getElementById("search-result").innerHTML = "<span style='color: red'>Searching...</span>";
}

function doSearch() {
	if (!searchResult || query != searchResult.query || orderBy != searchResult.orderBy) {
		newSearchResult();
	}
	else {
		if (searchResult.entries[searchResult.currentPage]) {
			updateSearchResult();
			return;
		}
	}
	var params = "query=" + encodeURIComponent(query);
	params += "&offset=" + (searchResult.currentPage * pageSize);
	params += "&limit=" + pageSize;
	params += "&orderBy=" + searchResult.orderBy;
	params += "&ts=" + new Date().getTime();
	
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("GET", "/servlet/artistsearch?" + params, true);
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) {
				eval(http.responseText);
				searchResult.entries[searchResult.currentPage] = itemList;
				searchResult.size = size;
				searchResult.numPages = Math.ceil(size/pageSize);
				updateSearchResult();
			}
			else {
				alert("Search failed - code " + http.status);
			}
		}
	}
	http.send(null);
	document.getElementById("search-result").innerHTML = "<span style='color: red'>Searching...</span>";
}

function updateSearchResult() {
	var html = new StringBuilder();
	html.append("<table class='layout'>");
	for (var row=0; row<2; row++) {
		html.append("<tr>");
		for (var col=0; col<3; col++) {
			var index = row*3+col;
			var item = searchResult.entries[searchResult.currentPage][index];
			if (item) {
				var sexImage = (item.sex.toLowerCase() == 'm') ? "boysing.gif" : "girlsing.gif";
				html.append("<td><div class='item'>");
				html.append("<p><a href='javascript:openSearchResult(").append(index).append(")'><img class='artist-thumbnail' src='images/").append(sexImage).append("'/></a></p>");
				html.append("<h2>").append(item.name).append("</h2>");
				html.append("<h3>").append(item.recordings).append(" ban thu</h3>");
				html.append("</div></td>");
			}
		}
		html.append("</tr>");
	}
	html.append("</table>");
	document.getElementById("search-result").innerHTML = html;
	updateSearchPages();
}

function updateSearchPages() {
	var resultSize = searchResult.size;
	var currentPage = searchResult.currentPage;
	var numPages = searchResult.numPages;
	var currentChapter = Math.floor(currentPage/5);
	var chapterSize = 5;
	
	var html = new StringBuilder();
	if (currentPage > 0)
		html.append("<a href='javascript:setSearchPage(").append(currentPage-1).append(")'>&lt;</a>");
	else
		html.append("<span>&lt;</span>");
	for (var i=currentChapter*chapterSize; i<(currentChapter+1)*chapterSize; i++)
		if (i < numPages) {
			if (currentPage == i)
				html.append("<span><b>").append(i+1).append("</b></span>");
			else
				html.append("<a href='javascript:setSearchPage(").append(i).append(")'>").append(i+1).append("</a>");
		}
		else
			html.append("<span>&nbsp;</span>");
	if (currentPage+1 < numPages)
		html.append("<a href='javascript:setSearchPage(").append(currentPage+1).append(")'>&gt;</a>");
	else
		html.append("<span>&gt;</span>");
	document.getElementById("search-pager").innerHTML = html;
	document.getElementById("search-stats").innerHTML = (currentPage*pageSize+1) + "-" + Math.min(currentPage*pageSize+pageSize, resultSize) + " of " + resultSize;
}

function openSearchResult(index) {
	openArtist(searchResult.entries[searchResult.currentPage][index]);
}

function setSearchPage(page) {
	if (page == searchResult.currentPage)
		alert("FATAL");
	searchResult.currentPage = page;
	doSearch();
}

function setSearchString(q) {
	query = q;
}

function orderByName() {
	orderBy = "name";
	doSearch();
}

function orderByRecordings() {
	orderBy = "recordings";
	doSearch();
}

function orderByTime() {
	orderBy = "time";
	doSearch();
}

function openArtist(artist) {
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("GET", "/servlet/recordingsearch?artistId=" + artist.id, true);
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) {
				eval(http.responseText);
				if (itemList.length > 0) {
					artist.recordingList = itemList;
					showArtistInfo(artist);
				}
				else
					alert("User does not exist: ID " + artist.id);
			}
			else
				alert("Failed to load recordings - code " + http.status);
		}
	}
	http.send(null);
	document.getElementById("artist-info").innerHTML = "<span style='color: red'>Loading...</span>";
}

function showArtistInfo(artist) {
	var sexImage = (artist.sex == 'm') ? "boysing.gif" : "girlsing.gif";
	var html = new StringBuilder();
	html.append("<table class='layout0'><tr><td><img src='images/").append(sexImage).append("'/></td><td>").append(artist.name).append("</td></tr></table>");
	html.append("<table class='layout'>");
	for (var index=0; index<artist.recordingList.length; index++) {
		var item = artist.recordingList[index];
		html.append("<tr>");
		html.append("<td class='col-1'><h1>").append(getSongName(item)).append("</h1></td>");
		html.append("<td><h3>").append(howLongAgo(item.when)).append("</h3></td>");
		html.append("<td><h3>").append(item.views).append(" luot nghe</h3></td>");
		html.append("<td>").append(getRatingImage(item.rating)).append("</td>");
		html.append("<td><a href='javascript:openRecordingAtIndex(").append(index).append(")'><img src='images/viewrecording.gif'/></a></td>");
		html.append("</tr>");
	}
	html.append("</table>");
	document.getElementById("artist-info").innerHTML = html;
	currentArtist = artist;
}

var currentArtist;

function openRecordingAtIndex(index) {
	if (currentArtist)
		openRecording(currentArtist.recordingList[index]);
	else
		alert("FATAL");
}
