// JavaScript Document

var ShelvesConfig = {
	ID_SHELF_AREA	:"jsid-shelfArea",
	ID_SHELF_LIST	:"jsid-shelfList",
	ID_BACK_BTN		:"jsid-shelfBackBtn",
	ID_SHELF_BTN_PRE:"jsid-shelfBtn-",
	
	CLS_SHELF_BTN	:"jscls-shelfBtn",
	CLS_LOADING		:"wcp-Functional-004",
	
	HTML_SHELF_HEAD	:'<div class="set-Heading"><p class="set-Colorz">#{color}</p>'+
					'<h3>#{name}</h3>'+ 
					'<p class="set-PrintTrg"><a href="/webcatplus/bookshelf/#{shelfId}.html" onclick="javascript:linkToPrint(this.href); return false">' +
					'<img src="/externals/images/btn-print-01.png" alt="この書棚で連想する" width="33" height="16" class="rollover" />' +
					'<img src="/externals/images/msg-print-01.png" alt="この書棚を印刷する" width="120" height="20" class="msg" />' +
					'</a></p>' +
					'</div>' +
					'<div class="set-Body">'+
					'<p id="#{btnId}" class="trg-Assoc #{className}"><a href="javascript:void(0);"><img src="/externals/images/btn-association-02.gif" alt="この書棚で連想する" width="205" height="25" class="rollover" /></a></p>',
					
	HTML_SHELF_FOOT	:'</div>',
					
	HTML_ELEM_BOOK	:'<div class="set-I">'+
					'<table cellspacing="0">' +
					'<tr>' +
					'<td class="set-Viz"><div><a href="#{url}" onclick="javascript:linkToDetail(this.href); return false;"><img src="#{image_url}" alt="#{image_title}" width="60" /></a></div></td>' +
					'<td class="set-Info">' +
					'<h3><a href="#{url}" onclick="javascript:linkToDetail(this.href); return false;">#{title}</a></h3>' +
					'<p>#{creator}<br />#{publish}</p>' +
					'</tr></table></div>',
					
	HTML_ELEM_WORK	:'<div class="set-I">' +
					'<table cellspacing="0">' +
					'<tr>' +
					'<td class="set-Info">' +
					'<h3><a href="#{url}" onclick="javascript:linkToDetail(this.href); return false;">#{title}</a></h3>' +
					'<div class="set-Creation">' +
					'<p>#{creator}</p>' +
					'<p><a href="#{url}" onclick="javascript:linkToDetail(this.href); return false;">掲載本<strong>#{book_total}</strong>冊</a></p>' +
					'</tr></table></div>',
					
	HTML_ELEM_KEYWORD:'<div class="set-I">' +
					'<p class="set-Kw"><span>#{image}</span><span>#{title}</span></p>' +
					'</div>',
					
	HTML_PUBLISH	:'#{publisher_name}<br /><span>#{publication_date}</span>',
	HTML_CREATOR	:'<a href="#{url}">#{name}</a>',
	
	EXC_KEYWORD_IMG	:'<img src="/externals/images/icn-keywords-01.gif" alt="除外キーワード" width="56" height="13" />',
	INC_KEYWORD_IMG	:'<img src="/externals/images/icn-keywords-02.gif" alt="必須キーワード" width="56" height="13" />',
	WIKIPEDIA_IMG	:'<img src="/externals/images/icn-keywords-03.gif" alt="ウィキペディア" width="56" height="13" />',
	COLOR_IMG_ARR	:new Array(
						'<img src="/externals/images/icn-signal-07.png" alt=" " width="14" height="14" />',
						'<img src="/externals/images/icn-signal-08.png" alt=" " width="14" height="14" />',
						'<img src="/externals/images/icn-signal-09.png" alt=" " width="14" height="14" />',
						'<img src="/externals/images/icn-signal-10.png" alt=" " width="14" height="14" />',
						'<img src="/externals/images/icn-signal-11.png" alt=" " width="14" height="14" />',
						'<img src="/externals/images/icn-signal-12.png" alt=" " width="14" height="14" />'
					),
	
	MINIMUM_WIDTH	:990,
	SHELF_WIDTH		:230,
	MINIMUM_SHELF	:4
}


var ShelfElementType = {
	BOOK:0,
	WORK:1,
	PERSON:2,
	WIKIPEDIA:3,
	INKEYWORD:4,
	EXKEYWORD:5
}


var AllShelves = function(){
	this.content	= document.getElementById(ShelvesConfig.ID_SHELF_AREA);
	this.list	 	= document.getElementById(ShelvesConfig.ID_SHELF_LIST);
	this.backBtn	= document.getElementById(ShelvesConfig.ID_BACK_BTN);
	this.loading	= getElementsByTagAndClass("DIV", ResultConfig.CLS_LOADING, this.content)[0];
	this.content.style.display = "none";
	
	this._setListener();
}

AllShelves.prototype = {
	_setListener:function(){
		$(this.backBtn).click(function(){
			TopGlobal.main.hideAllShelves();
		});
	},
	
	open:function(){
		this.content.style.display = "";
		this._loadShelves();
		//this._setShelves();
	},
	
	close:function(){
		$(document.body).css({minWidth:ShelvesConfig.MINIMUM_WIDTH});
		this.content.style.display = "none";
	},
	
	
	_loadShelves:function(){
		var self = this;
		this.loading.style.display = "";
		Observer.addEventListener(GlobalEvent.SHELF_LOADED, ShelfManager, self._loadedShelves, self);
		Observer.addEventListener(GlobalEvent.SHELF_LOAD_ERROR, ShelfManager, self._loadErrorShelves, self);
		
		ShelfManager.loadAllShelfData();
	},
	
	_loadedShelves:function(){
		var self = this;
		this.loading.style.display = "none";
		Observer.removeEventListener(GlobalEvent.SHELF_LOADED, ShelfManager, self._loadedShelves, self);
		Observer.removeEventListener(GlobalEvent.SHELF_LOAD_ERROR, ShelfManager, self._loadErrorShelves, self);
		
		this._setShelves();
	},
	
	_loadErrorShelves:function(){
		var self = this;
		this.loading.style.display = "none";
		Observer.removeEventListener(GlobalEvent.SHELF_LOADED, ShelfManager, self._loadedShelves, self);
		Observer.removeEventListener(GlobalEvent.SHELF_LOAD_ERROR, ShelfManager, self._loadErrorShelves, self);
		
		throw new Error("書棚の読み込み失敗");
	},
	
	
	_setShelves:function(){
		for (var i =this.list.childNodes.length-1; i>=0; i--) {
			this.list.removeChild(this.list.childNodes[i]);
		}
		
		if(!ShelfManager.shelfData || !ShelfManager.shelfData.shelves){
			throw new Error("書棚データがありません");
		}
		
		var data = ShelfManager.shelfData.shelves;
		var len = data.length;
		var minWidth = ShelvesConfig.MINIMUM_WIDTH;
		if(len > ShelvesConfig.MINIMUM_SHELF) minWidth += (len - ShelvesConfig.MINIMUM_SHELF) * ShelvesConfig.SHELF_WIDTH;
		
		//change minimum width
		$(document.body).css({minWidth:minWidth});
		
		for(var i = 0; i < len; i++){
			var shelf = data[i];
			var color = shelf.color;
			var td = document.createElement("TD");
			td.className = "set-Row";
			var tdhtml = "";
			tdhtml += TemplateManager.setTemplate(ShelvesConfig.HTML_SHELF_HEAD, {
												  name		:shelf.name, 
												  className	:ShelvesConfig.CLS_SHELF_BTN, 
												  shelfId	:shelf.id,
												  color		:ShelvesConfig.COLOR_IMG_ARR[color],
												  btnId		:ShelvesConfig.ID_SHELF_BTN_PRE + shelf.id
												  });
			
			var elements = shelf.elements;
			var elemLen = (elements) ? elements.length : 0;
			for(var j = 0; j < elemLen; j++){
				var elemhtml;
				var elem = elements[j];
				var title = getWrapText(elem.title, 60);
				var imageTitle = title.replace(/<\/*.+>|"/gi,"");
				var image = (elem.image_url || elem.image_url != "") ? elem.image_url : FixedValues.IMG_NOWPRINTING;
				if(elem.status != 0) continue;
				switch(elem.type){
					case ShelfElementType.BOOK:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_BOOK, {
															title		:(title) ? title : "",
															url			:(elem.url) ? elem.url : "",
															image_url	:image,
															image_title :imageTitle,
															creator		:this._getCreatorHTML(elem),
															publish		:this._getPublishHTML(elem)
															});
						break;
					case ShelfElementType.WORK:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_WORK, {
															title		:(title) ? title : "",
															url			:(elem.url) ? elem.url : "",
															creator		:this._getCreatorHTML(elem),
															book_total	:(elem.book_total) ? elem.book_total : 0
															});
						break;
					case ShelfElementType.PERSON:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_BOOK, {
															title		:(title) ? title : "",
															url			:(elem.url) ? elem.url : "",
															image_url	:image,
															image_title :imageTitle,
															creator		:(elem.lifetime) ? elem.lifetime : "",
															publish		:""
															});
						break;
					case ShelfElementType.WIKIPEDIA:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_KEYWORD, {
															title		:(title) ? title : "",
															image		:ShelvesConfig.WIKIPEDIA_IMG
															});
						break;
					case ShelfElementType.INKEYWORD:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_KEYWORD, {
															title		:(title) ? title : "",
															image		:ShelvesConfig.INC_KEYWORD_IMG
															});
						break;
					case ShelfElementType.EXKEYWORD:
						elemhtml = TemplateManager.setTemplate(ShelvesConfig.HTML_ELEM_KEYWORD, {
															title		:(title) ? title : "",
															image		:ShelvesConfig.EXC_KEYWORD_IMG
															});
						break;
					default:
						break;
				}
				
				tdhtml += elemhtml;
			}
			
			tdhtml += ShelvesConfig.HTML_SHELF_FOOT;
			td.innerHTML = tdhtml;
			this.list.appendChild(td);
		}
		
		
		//set shelf btn listener
		$("."+ShelvesConfig.CLS_SHELF_BTN).click(function(){
			var id = this.id.substring(ShelvesConfig.ID_SHELF_BTN_PRE.length, this.id.length);
			SearchManager.assocShelfSearch(id);
		});
	},
	
	_getCreatorHTML:function(elem){
		/*var returnStr = "";
		var creators = elem.creators;
		var len = (creators) ? creators.length : 0;
		for(var i = 0; i < len; i++){
			var creator = creators[i];
			returnStr += TemplateManager.setTemplate(ShelvesConfig.HTML_CREATOR, {url:"javascript:linkToDetail('"+creator.url+"')", name:creator.name});
			
		}*/
		
		var creators = elem.creators;
		var creatorLen = (creators) ? creators.length : 0;
		var creatorStr = "";
		for(var i = 0; i < creatorLen; i++){
			var creator = creators[i];
			creatorStr += '<a href="javascript:linkToDetail(\'' + creator.url +'\')">'+creator.name+'</a>';
			if(i != creatorLen - 1) creatorStr += ",";
			if(i == FixedValues.MAX_CREATOR_NUM && i != creatorLen - 1){
				creatorStr += "他" + Number(creatorLen - ResultConfig.MAX_CREATOR_NUM) + "名";
				break;
			}
		}
		return creatorStr;
	},
	
	_getPublishHTML:function(elem){
		var publisherStr = "";
		var publisherLen = (elem.publishers) ? elem.publishers.length : 0;
		for(var i = 0; i < publisherLen; i++){
			var publisher = elem.publishers[i];
			publisherStr += '<a href="javascript:rtMatchBookPublish(\''+ publisher.name +'\')">' + publisher.name + '</a>';
			if(i != publisherLen - 1) publisherStr += ",";
		}
		
		return TemplateManager.setTemplate(ShelvesConfig.HTML_PUBLISH, {
			publisher_name		:publisherStr,
			publication_date	:(elem.publication_date) ? elem.publication_date : ""
		});
	}
}
