var searchResult;
var pageSize = 6;

function loadSong(songId) {
	var params = "songId=" + songId;
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("POST", "/servlet/getsong", true);
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) {
				eval(http.responseText);
				openSong(item);
			}
			else
				alert("Failed to load song - code " + http.status);
		}
	}
	http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-Length", params.length);
	http.send(params);
}

function doSearch() {
	var query = document.getElementById("query").value;
	if (!searchResult || query != searchResult.query) {
		searchResult = new Object();
		searchResult.query = query;
		searchResult.entries = new Array();
		searchResult.size = 0;
		searchResult.numPages = 0;
		searchResult.currentPage = 0;
		searchResult.orderBy = "name";
	}
	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;
	
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("POST", "/servlet/songsearch", 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.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	http.setRequestHeader("Content-Length", params.length);
	http.send(params);
	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) {
				html.append("<td valign='top'><table class='item'>");
				html.append("<tr><td><a href='javascript:openSearchResult(").append(index).append(")'><img class='song-thumbnail' src='http://").append(contentServer).append("/thumbs/").append(item.id).append(".jpg'/></a></td></tr>");
				html.append("<tr><td>");
				html.append("<span class='songTitle'>").append(item.name);
				if (item.leadSinger)
					html.append(" - ").append(item.leadSinger);
				html.append("</span>");
				html.append("</td></tr>");
				html.append("</table></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) {
	openSong(searchResult.entries[searchResult.currentPage][index]);
}

function setSearchPage(page) {
	if (page == searchResult.currentPage)
		alert("FATAL");
	searchResult.currentPage = page;
	doSearch();
}

function setSearchString(query) {
	document.getElementById("query").value = query;
}
