if (!NTULib) {
	var NTULib = {};
}
if (!NTULib.MetaCat) {
	NTULib.MetaCat = {};
}
NTULib.MetaCat.Record = Class.create();
NTULib.MetaCat.Record.prototype = {initialize:function (_detailUrl, _title, _author, _mediaType, _year, _code, _library) {
	this.url = _detailUrl;
	this.title = _title;
	this.author = _author;
	this.mediaType = _mediaType;
	this.year = _year;
	this.code = _code;
	this.library = _library;
}};
function setStartResult(_start) {
	$("startResult").innerHTML = _start;
}
function setEndResult(_end) {
	$("endResult").innerHTML = _end;
}
function setMergeResult(_merge) {
	$("mergeResult").innerHTML = _merge;
}
NTULib.MetaCat.LibrarySet = Class.create();
NTULib.MetaCat.LibrarySet.prototype = {initialize:function (_book) {
		this.book = _book;
		this._double = false;
	}
}
NTULib.MetaCat.BookSet = Class.create();
NTULib.MetaCat.BookSet.prototype = {initialize:function (_title, _code) {
	this.title = _title;
	this.code = _code;
	this.books = new Array();
	this.libraries = [];
	this.titleLink = null;
	this.yearSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	this.mediaTypeSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	this.authorSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	this.librarySpan = NTULib.MetaCat.Utils.newElement("span", {});
}, addBook:function (book) {
	this.books[this.books.length] = book;
	var library = this.libraries.detect(function (_library) {
		return (_library.book.library == book.library);
	});
	if (library) {
		library._double = true;
	} else {
		this.libraries[this.libraries.length] = new NTULib.MetaCat.LibrarySet(book);
	}
	this.setTitle();
	var count = Math.min(this.books.length, 3);
	if (count < 4) {
		this.yearSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
		this.mediaTypeSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
		this.authorSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
		for (var i = 0; i < count; i++) {
			this.setAuthor(this.books[i]);
			this.setMediaType(this.books[i]);
			this.setYear(this.books[i]);
		}
	}
	this.librarySpan = NTULib.MetaCat.Utils.newElement("span", {});
	this.setLibrary();
}, setTitle:function () {
	if (this.books.length == 1) {
		this.titleLink = NTULib.MetaCat.Utils.newElement("a", {"href":this.books[0].url, "target":"_blank"});
		var _title = document.createTextNode(this.books[0].title);
		this.titleLink.appendChild(_title);
	} else {
		if (IE) {
			this.titleLink = NTULib.MetaCat.Utils.newElement("a", {"href":"javascript:void(0)", "code":this.code});
			this.titleLink.onclick = function () {
				showAllTitles(this.code);
			};
		} else {
			this.titleLink = NTULib.MetaCat.Utils.newElement("a", {"href":"javascript:void(0)", "onClick":"showAllTitles('" + this.code + "')"});
		}
		var _title = document.createTextNode(this.title);
		this.titleLink.appendChild(_title);
	}
}, setYear:function (_book) {
	var year = _book.year;
	if (year && (year != "")) {
		this.yearSpan.appendChild(document.createTextNode(year + " "));
	}
}, setMediaType:function (_book) {
	var mediaType = _book.mediaType;
	if (mediaType && (mediaType != "")) {
		this.mediaTypeSpan.appendChild(document.createTextNode(mediaType + " "));
	}
}, setAuthor:function (_book) {
	var authorName = _book.author;
	if (authorName && (authorName != "")) {
		this.authorSpan.appendChild(document.createTextNode(authorName + " "));
	}
}, setLibrary:function () {
	if (this.books.length == 1) {
		var libraryLink = NTULib.MetaCat.Utils.newElement("a", {"href":this.books[0].url, "target":"_blank", "class":"fl"});
		var library = document.createTextNode(this.books[0].library);
		var libraryFont = NTULib.MetaCat.Utils.newElement("font", {"color":"#6f6f6f", "size":"-1"});
		libraryFont.appendChild(library);
		libraryLink.appendChild(libraryFont);
		this.librarySpan.appendChild(libraryLink);
	} else {
		for (var i = 0; i < this.libraries.length; i++) {
			var _librarySet = this.libraries[i];
			if (_librarySet._double) {
				var libraryLink;
				if (IE) {
					libraryLink = NTULib.MetaCat.Utils.newElement("a", {"href":"javascript:void(0)", "code":_librarySet.book.code, "library":_librarySet.book.library, "class":"fl"});
					libraryLink.onclick = function () {
						showAllLibraries(this.code, this.library);
					};
				} else {
					libraryLink = NTULib.MetaCat.Utils.newElement("a", {"href":"javascript:void(0)", "onClick":"showAllLibraries('" + _librarySet.book.code + "','" + _librarySet.book.library + "')", "class":"fl"});
				}
				var libraryName = document.createTextNode(_librarySet.book.library);
				var libraryFont = NTULib.MetaCat.Utils.newElement("font", {"color":"#6f6f6f", "size":"-1"});
				libraryFont.appendChild(libraryName);
				libraryLink.appendChild(libraryFont);
				this.librarySpan.appendChild(libraryLink);
				this.librarySpan.appendChild(document.createTextNode(" "));
			} else {
				var libraryLink = NTULib.MetaCat.Utils.newElement("a", {"href":_librarySet.book.url, "target":"_blank", "class":"fl"});
				var library = document.createTextNode(_librarySet.book.library);
				var libraryFont = NTULib.MetaCat.Utils.newElement("font", {"color":"#6f6f6f", "size":"-1"});
				libraryFont.appendChild(library);
				libraryLink.appendChild(libraryFont);
				this.librarySpan.appendChild(libraryLink);
				this.librarySpan.appendChild(document.createTextNode(" "));
			}
		}
	}
}};

function changePage(_page) {
	readingPage = _page;
	var _numberPerPage = getNumberPerPage();
	var bookSets = recordsArray;
	var searchResultsHolder = $("searchResultsHolder");
	var searchResults = $("searchResults");
	searchResultsHolder.removeChild(searchResults);
	searchResults = document.createElement("div");
	searchResults.setAttribute("id", "searchResults");
	searchResultsHolder.appendChild(searchResults);
	var start = _numberPerPage * (_page - 1);
	var end = _numberPerPage * _page;
	for (var i = start; (i < bookSets.length) && (i < end); i++) {
		var bookSet = bookSets[i];
		var itemDiv = document.createElement("div");
		if (bookSet.books.length == 1) {
			NTULib.MetaCat.Utils.renderResponse(itemDiv, bookSet.books[0]);
		} else {
			itemDiv.appendChild(bookSet.titleLink);
			itemDiv.appendChild(document.createElement("br"));
			itemDiv.appendChild(bookSet.authorSpan);
			itemDiv.appendChild(document.createTextNode(" "));
			itemDiv.appendChild(bookSet.yearSpan);
			itemDiv.appendChild(document.createElement("br"));
			itemDiv.appendChild(bookSet.mediaTypeSpan);
			itemDiv.appendChild(document.createTextNode(" "));
			itemDiv.appendChild(bookSet.librarySpan);
		}
		searchResults.appendChild(itemDiv);
		searchResults.appendChild(document.createElement("br"));
	}
	setStartResult(start);
	setEndResult(Math.min(bookSets.length, end));
}
function showAllTitles(code) {
	var bookSet = recordsHashtable.get(code);
	
	var searchTitleResultsHolder = $("searchTitleResultsHolder");
	var searchTitleResults = $("searchTitleResults");
	searchTitleResultsHolder.removeChild(searchTitleResults);
	searchTitleResults = document.createElement("div");
	searchTitleResults.setAttribute("id", "searchTitleResults");
	searchTitleResultsHolder.appendChild(searchTitleResults);
	j();
	bookSet.books.each(function (book, index) {
		var itemDiv = NTULib.MetaCat.Utils.newElement("div", {"id":code});
		NTULib.MetaCat.Utils.renderResponse(itemDiv, book);
		searchTitleResults.appendChild(itemDiv);
		searchTitleResults.appendChild(document.createElement("br"));
	});
}
function showAllLibraries(code, library) {
//	var bookSet = getIrecords().detect(function (_bookset) {
//		return _bookset.code == code;
//	});
	
	bookSet = recordsHashtable.get(code);
	var searchTitleResultsHolder = $("searchTitleResultsHolder");
	var searchTitleResults = $("searchTitleResults");
	searchTitleResultsHolder.removeChild(searchTitleResults);
	searchTitleResults = document.createElement("div");
	searchTitleResults.setAttribute("id", "searchTitleResults");
	searchTitleResultsHolder.appendChild(searchTitleResults);
	j();
	bookSet.books.each(function (book, index) {
		if (book.library == library) {
			var itemDiv = NTULib.MetaCat.Utils.newElement("div", {"id":code});
			NTULib.MetaCat.Utils.renderResponse(itemDiv, book);
			searchTitleResults.appendChild(itemDiv);
			searchTitleResults.appendChild(document.createElement("br"));
		}
	});
}

NTULib.MetaCat.Utils = Class.create();

NTULib.MetaCat.Utils.newElement = function (name, attrs) {
	var ele = document.createElement(name);
	$H(attrs).each(function (value, index) {
		ele.setAttribute(value.key, value.value);
	});
	return ele;
};

NTULib.MetaCat.Utils.addAuthor = function (itemDiv, record) {
	var authorSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	var author = document.createTextNode(record.author);
	authorSpan.appendChild(author);
	itemDiv.appendChild(authorSpan);
};
NTULib.MetaCat.Utils.addMediaType = function (itemDiv, record) {
	var mediaTypeSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	var mediaType = document.createTextNode(record.mediaType);
	mediaTypeSpan.appendChild(mediaType);
	itemDiv.appendChild(mediaTypeSpan);
};
NTULib.MetaCat.Utils.addTitle = function (itemDiv, record) {
	var titleLink = NTULib.MetaCat.Utils.newElement("a", {"href":record.url, "target":"_blank"});
	var title = document.createTextNode(record.title);
	titleLink.appendChild(title);
	itemDiv.appendChild(titleLink);
};
NTULib.MetaCat.Utils.addYear = function (itemDiv, record) {
	var yearSpan = NTULib.MetaCat.Utils.newElement("font", {"color":"#458B00", "size":"-1"});
	var year = document.createTextNode(record.year);
	yearSpan.appendChild(year);
	itemDiv.appendChild(yearSpan);
};
NTULib.MetaCat.Utils.addLibrary = function (itemDiv, record) {
	var libraryLink = NTULib.MetaCat.Utils.newElement("a", {"href":record.url, "target":"_blank", "class":"fl"});
	var library = document.createTextNode(record.library);
	var libraryFont = NTULib.MetaCat.Utils.newElement("font", {"color":"#6f6f6f", "size":"-1"});
	libraryFont.appendChild(library);
	libraryLink.appendChild(libraryFont);
	itemDiv.appendChild(libraryLink);
};
NTULib.MetaCat.Utils.renderResponse = function (itemDiv, bookRecord) {
	NTULib.MetaCat.Utils.addTitle(itemDiv, bookRecord);
	itemDiv.appendChild(document.createElement("br"));
	NTULib.MetaCat.Utils.addAuthor(itemDiv, bookRecord);
	itemDiv.appendChild(document.createTextNode(" "));
	NTULib.MetaCat.Utils.addMediaType(itemDiv, bookRecord);
	itemDiv.appendChild(document.createTextNode(" "));
	NTULib.MetaCat.Utils.addYear(itemDiv, bookRecord);
	itemDiv.appendChild(document.createElement("br"));
	NTULib.MetaCat.Utils.addLibrary(itemDiv, bookRecord);
	itemDiv.appendChild(document.createTextNode(" "));
};

