﻿var queryStack = [];

function getQueryStack(){
    return queryStack;
}	

function setQueryStack(_stack){
   queryStack = _stack;
}

function typing(){
	var keyword = $F('query');
}
var bannerStyle = [];
function getBannerStyle(){
	if (bannerStyle.length == 0){
		bannerStyle = [];
		if (IE){
			var ele = document.getElementsByTagName('table');		
			for (var i = 0 ; i < ele.length ; i++){
				if (ele[i].getAttribute('name')=='bannerStyle'){
					bannerStyle[bannerStyle.length] = ele[i]; 
				}
			}	
			ele = document.getElementsByTagName('td');
			for (var i = 0 ; i < ele.length ; i++){
				if (ele[i].getAttribute('name')=='bannerStyle'){
					bannerStyle[bannerStyle.length] = ele[i]; 
				}
			}
		}else{
			var temp = document.getElementsByName('bannerStyle');
			for (var i=0; i< temp.length; i++){
				bannerStyle[bannerStyle.length] = temp[i];
			}
		}
		
	}
	return bannerStyle;
}
function renderSearchType(_type){

	getBannerStyle().each(function (style,index){
		if (IE){
			style.className =_type;
		} else {
			style.setAttribute('class',_type);
		}
	});	
}

function searchTimeOut(){
	if (getQueryStack().length > 0 && getIrecords().length < 200){	
		$("loading").style.display = 'block';
		setTimeout(getQueryStack().shift(), 1000);
		setTimeout('searchTimeOut()',10000);				
	}else {
		$("loading").style.display = 'none';
	}
}	

function send(){
	var _stack = [];
	setIrecords([]);
	setQueryStack(_stack);
	var infos = getSelectedInfos();
	var _query = $F('query');
	var _searchType = getSearchType();
	var _searchBannerId = getSelectedBanner().id;
	infos.each(function(value,index){
		_stack[_stack.length]= "sendValue2('"+_query+"','"+value+"','"+_searchType+"','"+ _searchBannerId +"')";
//		_stack[_stack.length]= "if (getIrecords().length < 200){sendValue2('"+_query+"','"+value+"','"+_searchType+"','"+ _searchBannerId +"')}";
	});

	if (_stack.length > 0){
		$("loading").style.display = 'block';
		setTimeout(getQueryStack().shift(), 1000);
		setTimeout('searchTimeOut()',10000);
	}
	readingPage = 1;
	recordsArray.clear();
	recordsHashtable.clear();
	setStartResult(0);
	setEndResult(0);
	setMergeResult(0);
	setTotalResult(0);
	var searchResultsHolder = $("searchResultsHolder");
	var searchResults = $("searchResults");
	searchResultsHolder.removeChild(searchResults);
	searchResults = document.createElement("div");
	searchResults.setAttribute("id", "searchResults");
	searchResultsHolder.appendChild(searchResults);	
	$('keyword').innerHTML = _query;
	var _numberPerPage = getNumberPerPage();
	var pageHolder = $("pageHolder");
	var pages  = $("pages");
	pageHolder.removeChild(pages);
	pages = document.createElement("div");
	pages.setAttribute("id", "pages");
	pageHolder.appendChild(pages);
	return false;
}
var banners = [];
function getBanners(){
	if (banners.length ==0){
		banners = [];
		if (IE){
			var temp = document.getElementsByTagName('div');
			for (var i = 0 ; i < temp.length; i ++){
				if (temp[i].name == 'banner'){
					banners[banners.length] = temp[i];
				}
			}
		}else{	
			var temp = document.getElementsByName('banner');	
			for (var i = 0 ; i < temp.length; i ++){
				banners[banners.length] = temp[i];
			}
		}
	}
	return banners;
}
var checkBoxs = [];
function getCheckBoxs(){
	if (checkBoxs.length ==0){
		checkBoxs = [];
		var temp = document.getElementsByTagName('input');
		for (var i = 0 ; i < temp.length; i ++){
			if (temp[i].type == 'checkbox'){
				checkBoxs[checkBoxs.length] = temp[i];
			}
		}
	}
	return checkBoxs;
}
function showBanner(obj){
	getBanners().each(function(banner,index){(banner.id!=obj)?banner.style.display='none':banner.style.display='block'});

	getCheckBoxs().each(function(checkBox,index){
		if (checkBox.getAttribute('name') == ''&& checkBox.checked){
			checkBox.checked = false;
			checkBox.style.display='none';
		}
	});	
}

function getSelectedBanner(){	
	return getBanners().detect(function(banner){return banner.style.display =='block'});
}

function getSelectedInfos(){
	var groupId = getSelectedBanner().id;
	var infos = [];
	getCheckBoxs().each(function(checkBox,index){
		if (checkBox.getAttribute('groupId') == groupId && checkBox.checked){
			infos[infos.length] = checkBox.name;
		}
	});
	return infos;
}

var searchTypes = [];
function getSearchTypes(){
	if (searchTypes.length ==0){
		if (IE){
			var temp = document.getElementsByTagName('span');
			for (var i = 0 ; i < temp.length; i ++){
				if (temp[i].name == 'search_type'){
					searchTypes[searchTypes.length] = temp[i];
				}
			}
		}else{
			var temp = document.getElementsByName('search_type');
			for (var i = 0 ; i < temp.length; i ++){
					searchTypes[searchTypes.length] = temp[i];
			}
		}
	}
	return searchTypes;
}

function showSearchType(_type){
	getSearchTypes().each(function(_searchType, index){
		var _spans = _searchType.getElementsByTagName('span');	
		if (_searchType.getAttribute('type')!=_type){			
			_spans[0].style.display='inline';
			_spans[1].style.display='none';
		}else{
			_spans[0].style.display='none';
			_spans[1].style.display='inline';				
		}
	});	
	setSearchType(_type);
	// createCookie ("searchType",_type,31);

}

var locationTypes = [];
function getLocationTypes(){
	if (locationTypes.length ==0){
		if (IE){
			var temp = document.getElementsByTagName('span');
			for (var i = 0 ; i < temp.length; i ++){
				if (temp[i].name == 'location_type'){
					locationTypes[locationTypes.length] = temp[i];
				}
			}
		}else{
			var temp = document.getElementsByName('location_type');
			for (var i = 0 ; i < temp.length; i ++){
				locationTypes[locationTypes.length] = temp[i];			
			}
		}
	}
	return locationTypes;
}
var locationType ='';
function showLocationType(_type){
	
	getLocationTypes().each(function(locationType, index){
		var _spans = locationType.getElementsByTagName('span');	
		if (locationType.getAttribute('type')!=_type){			
			_spans[0].style.display='inline';
			_spans[1].style.display='none';
		}else{
			_spans[0].style.display='none';
			_spans[1].style.display='inline';				
		}
	});
	locationType = _type;
	showBanner('group'+_type);
	// createCookie("location",_type,31);
}

function showPageNumbers(bookSets){
		var _numberPerPage = getNumberPerPage();
		var pageHolder = $("pageHolder");
		var pages  = $("pages");
		
		pageHolder.removeChild(pages);
		var _num = bookSets.length /_numberPerPage;
		if ((bookSets.length % _numberPerPage)!= 0){
			_num++;
		}
		pages = document.createElement("div");
		pages.setAttribute("id", "pages");
		var _table = document.createElement("table");
		
		var _tbody = document.createElement('TBODY');
		var _tr = document.createElement("tr");
		var _td = document.createElement("td");


		_tbody.appendChild(_tr);
		_table.appendChild(_tbody);
		pages.appendChild(_table);

		pageHolder.appendChild(pages);
		var _td = document.createElement("td");
		_td.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/met.png"}));
		_td.appendChild(document.createElement("br"));
		_td.appendChild(document.createTextNode(" "));
		_tr.appendChild(_td);
		for (var i = 1 ; i <= _num; i++){
			var	pageLink;
			if (IE){
				pageLink = NTULib.MetaCat.Utils.newElement("a", {"href" : "javascript:void(0)","page":i,"style":"text-decoration: none;"});
				
				pageLink.onclick = function(){changePage(this.page);showPageNumbers(recordsArray);};
			}else{
				pageLink = NTULib.MetaCat.Utils.newElement("a", {"href" : "javascript:void(0)","onClick":"changePage('"+i+"');showPageNumbers(recordsArray);","style":"text-decoration: none;"});
			}
			var pageTD = document.createElement("td");
			var pageDiv = NTULib.MetaCat.Utils.newElement("span", {"name" : "page"+i,"onClick":"changePage('"+i+"');showPageNumbers(recordsArray);"});
			var	pageID = document.createTextNode(i);
			if (i != readingPage){
				if (IE){
					var pageImg =	NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a0.png","page":i})
					pageImg.onclick = function(){changePage(this.page);showPageNumbers(recordsArray);};
					pageDiv.appendChild(pageImg);	
				}else{
					pageDiv.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a0.png","onClick":"changePage('"+i+"');showPageNumbers(recordsArray);"}));
				}
			}else{
				pageDiv.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a1.png"}));
			}
			pageDiv.appendChild(document.createElement("br"));
			pageLink.appendChild(pageID);
			pageDiv.appendChild(pageLink);										
//			pageLink.appendChild(pageDiv); 
			pageTD.appendChild(pageDiv);	
			_tr.appendChild(pageTD);
			//pages.appendChild(document.createTextNode(" "));	

		}
		_td = document.createElement("td");
		_td.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/cat.png"}));
		_td.appendChild(document.createElement("br"));
		_td.appendChild(document.createTextNode(" "));		
		_tr.appendChild(_td);
}

var search = "TITLE";
function setSearchType(_type) {
	search = _type;
	renderSearchType(search);
}
function getSearchType() {
	return search;
}
var Irecords = [];
function setIrecords(reocrds) {
	Irecords = reocrds;
}
function getIrecords() {
	return Irecords;
}
var totalResult = 0;
function getTotalResult() {
	return totalResult;
}
function setTotalResult(_total) {
	totalResult = _total;
	$("totalResult").innerHTML = totalResult;
}
var numberPerPage = 15;
function getNumberPerPage() {
	return numberPerPage;
}
function setNumberPerPage(_numberPerPage) {
	numberPerPage = _numberPerPage;
}

function readSetting(){
	new Insertion.Bottom(document.getElementsByTagName('body')[0],'<div style="position: absolute; left: '+(document.width -230)+'px; top: 10px;"><b><font color="red">New ! </font></b> <a href="javascript:createCookie(\'location\',locationType,31);createCookie(\'searchType\',search,31)" >click to save preferences</a></div>');
	var _parms = (location.href).substring((location.href).indexOf('?')).toQueryParams();
	
	if(readCookie("location")){
		showLocationType(readCookie("location")) ;
	}else {
		showLocationType(0);
	}
	var _type = _parms["t"];
	if (_type && (_type=='TITLE'||_type=='AUTHOR'||_type=='SUBJECT'||_type=='ISBN'||_type=='ISSN'||_type=='ALL')){
		showSearchType(_type) ;
	}else {
		if(readCookie ("searchType")){
			showSearchType(readCookie("searchType")) ;
		}else {
			showSearchType('TITLE');
		}
	}
	var _location = _parms["l"];
	
	if (_location){
		showLocationType(Math.min(Math.max(0,parseInt(_location)),7)) ;
	}else {
		if(readCookie ("location")){
			showLocationType(readCookie("location")) ;
		}else {
			showLocationType(0);
		}
	}
	var _query = _parms["q"];
	if (_query){
		$('query').value = _query;
		send();
	}
	$('errorMsg').innerHTML = '';
			
}
//'"+_query+"','"+value+"','"+_searchType+"','"+ _searchBannerId +"')}";
var server_index = 0;
var servers = ["metacat.ntu.edu.tw"];
// 140.112.113.40  140.112.113.53 ,"140.112.113.54"
function sendValue2(q,l,t,u){
	$("loading").style.display = 'block';
	var script = $("MetaCatSearchScript");
		if (script) {
			script.parentNode.removeChild(script);
	}
	var script = document.createElement("SCRIPT");
	script.id = "MetaCatSearchScript";
	if (l=='tiprc'||l=='ntu2'){
		if (t=='TITLE'){
			q = '(t:'+q+')';
		}
		if (t=='AUTHOR'){
			q = '(a:'+q+')';
		}
		if (t=='SUBJECT'){
			q = '(d:'+q+')';
		}
	}
	script.src = "http://"+ servers[server_index]+ "/metacat2/app?service=JsonService&q="+ encodeURI(q)+"&u="+u+"&t="+t+"&l="+l;
	server_index ++;
	if (server_index >= servers.length){
	  server_index = 0;
	}
//	alert(script.src);		
	var head = document.getElementsByTagName("HEAD")[0];
	head.appendChild(script);
}
var recordsHashtable = new Hashtable();
var recordsArray = [];
var readingPage = 1;
function MetaCatCallback(){
//	alert("Back "+MetaCatRecords.length);
  	setTotalResult(getTotalResult()+MetaCatRecords.length);
   
//    if (getIrecords().length < 200){
	$("loading").style.display = 'block';
	
	MetaCatRecords.each(function(book){
		var code = book.code;
		var record = recordsHashtable.get(code);
		if (!record){
			record = new NTULib.MetaCat.BookSet(book.title, code);
			recordsHashtable.put(code,record);
			recordsArray[recordsArray.length] = record;
		}
		record.addBook(book);

	});
		var bookSets = recordsArray;
	//	alert(bookSets.length+" "+ bookSets.size);
	
		var _numberPerPage = getNumberPerPage();
		var pageHolder = $("pageHolder");
		var pages  = $("pages");
		
		pageHolder.removeChild(pages);
		var _num = bookSets.length /_numberPerPage;
		if ((bookSets.length % _numberPerPage)!= 0){
			_num++;
		}
		pages = document.createElement("div");
		pages.setAttribute("id", "pages");
		var _table = document.createElement("table");
		
		var _tbody = document.createElement('TBODY');
		var _tr = document.createElement("tr");
		var _td = document.createElement("td");


		_tbody.appendChild(_tr);
		_table.appendChild(_tbody);
		pages.appendChild(_table);

		pageHolder.appendChild(pages);
		var _td = document.createElement("td");
		_td.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/met.png"}));
		_td.appendChild(document.createElement("br"));
		_td.appendChild(document.createTextNode(" "));
		_tr.appendChild(_td);
		for (var i = 1 ; i <= _num; i++){
			var	pageLink;
			if (IE){
				pageLink = NTULib.MetaCat.Utils.newElement("a", {"href" : "javascript:void(0)","page":i,"style":"text-decoration: none;"});
				
				pageLink.onclick = function(){changePage(this.page);showPageNumbers(recordsArray);};
			}else{
				pageLink = NTULib.MetaCat.Utils.newElement("a", {"href" : "javascript:void(0)","onClick":"changePage('"+i+"');showPageNumbers(recordsArray);","style":"text-decoration: none;"});
			}
			var pageTD = document.createElement("td");
			var pageDiv = NTULib.MetaCat.Utils.newElement("span", {"name" : "page"+i,"onClick":"changePage('"+i+"');showPageNumbers(recordsArray);"});
			var	pageID = document.createTextNode(i);
			if (i != readingPage){
				if (IE){
					var pageImg =	NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a0.png","page":i})
					pageImg.onclick = function(){changePage(this.page);showPageNumbers(recordsArray);};
					pageDiv.appendChild(pageImg);					
				}else{
					pageDiv.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a0.png","onClick":"changePage('"+i+"');showPageNumbers(recordsArray);"}));
				}
			}else{
				pageDiv.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/a1.png"}));
			}
			pageDiv.appendChild(document.createElement("br"));
			pageLink.appendChild(pageID); 
			pageDiv.appendChild(pageLink);							
//			pageLink.appendChild(pageDiv); 
			pageTD.appendChild(pageDiv);	
			_tr.appendChild(pageTD);
			//pages.appendChild(document.createTextNode(" "));	

		}
		_td = document.createElement("td");
		_td.appendChild(NTULib.MetaCat.Utils.newElement("img", {"src" : "/metacat2/images/cat.png"}));
		_td.appendChild(document.createElement("br"));
		_td.appendChild(document.createTextNode(" "));		
		_tr.appendChild(_td);
	
	
		var searchResultsHolder = $("searchResultsHolder");
		var searchResults = $("searchResults");
		searchResultsHolder.removeChild(searchResults);
		searchResults = document.createElement("div");
		searchResults.setAttribute("id", "searchResults");
		searchResultsHolder.appendChild(searchResults);
		var start = _numberPerPage * (readingPage - 1);
		var end = _numberPerPage * readingPage;
		for (var i = start; (i < bookSets.length) && (i < end); i++) {
			var bookSet = bookSets[i];
			var itemDiv = NTULib.MetaCat.Utils.newElement("div", {"id":bookSet.code});
			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));
		setMergeResult(bookSets.length);

	if (getQueryStack().length > 0){
		$("loading").style.display = 'block';
		setTimeout(getQueryStack().shift(), 1000);
	}else {
		$("loading").style.display = 'none';
	}
//   }else {
//   	setQueryStack([]);
//   }
}