var searchResult;
var orderBy = "time";
var pageSize = 6;

function init() {
	var recordingId = 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] == "recordingId")
				recordingId = tokens[1];
		}
	}
	if (recordingId)
		loadRecording(recordingId);
	searchToday();
}

function loadRecording(recordingId) {
	var http = false;
	if (navigator.appName == "Microsoft Internet Explorer") {
		http = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		http = new XMLHttpRequest();
	}
	http.open("GET", "/servlet/recordingsearch?recordingId=" + recordingId, true);
	http.onreadystatechange = function() {
		if (http.readyState == 4) {
			if (http.status == 200) {
				eval(http.responseText);
				if (itemList.length > 0)
					openRecording(itemList[0]);
				else
					alert("Recording does not exist: ID " + recordingId);
			}
			else
				alert("Failed to load recording - code " + http.status);
		}
	}
	http.send(null);
}

function doSearch() {
	var query = document.getElementById("query").value;
	if (!searchResult || query != searchResult.query || orderBy != searchResult.orderBy) {
		searchResult = new Object();
		searchResult.query = query;
		searchResult.entries = new Array();
		searchResult.size = 0;
		searchResult.numPages = 0;
		searchResult.currentPage = 0;
		searchResult.orderBy = orderBy;
	}
	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/recordingsearch?" + 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();
	for (var index=0; index<pageSize; index++) {
		var item = searchResult.entries[searchResult.currentPage][index];
		if (item) {
			var sexImage = (item.artist.sex.toLowerCase() == 'm') ? "boysing.gif" : "girlsing.gif";
			html.append("<table class='item'><tr>");
			html.append("<td width='64'><img class='artist-thumbnail' src='images/").append(sexImage).append("'/></td>");
			html.append("<td>");
			html.append("<h1>").append(getSongName(item)).append("</h1>");
			html.append("<h2><a href='artists.html?artistId=").append(item.artist.id).append("'>").append(item.artist.name).append("</a></h2>");
			html.append("<h3>").append(howLongAgo(item.when)).append("</h3>");
			html.append("</td>");
			html.append("<td align='right'>");
			html.append("<p>").append(getRatingImage(item.rating)).append(" (").append(item.timesRated).append(")</p>");
			html.append("<h3>").append(item.views).append(" luot nghe</h3>");
			html.append("<p><a href='javascript:openSearchResult(").append(index).append(")'><img src='images/viewrecording.gif'/></a></p>");
			html.append("</td>");
			html.append("</tr></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) {
	openRecording(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;
}

function searchToday() {
	setSearchString("[today]");
	doSearch();
}

function searchYesterday() {
	setSearchString("[yesterday]");
	doSearch();
}

function searchThisWeek() {
	setSearchString("[this week]");
	doSearch();
}

function searchThisMonth() {
	setSearchString("[this month]");
	doSearch();
}

function orderByTime() {
	orderBy = "time";
	doSearch();
}

function orderByRating() {
	orderBy = "rating";
	doSearch();
}

function orderByViews() {
	orderBy = "views";
	doSearch();
}
