// JavaScript Document

var SearchMode = {
	ASSOC		:"assoc",
	MATCH		:"match",
	SHELF		:"shelf"
}

var ResultType = {
	ASSOC_BOOK	:"assoc",
	MATCH_BOOK	:"matchBook",
	MATCH_WORKS	:"matchWorks",
	MATCH_PERSON:"matchPerson"
}

var AssocType = {
	TEXT:"text",
	SHELF:"shelf",
	WIKIPEDIA:"wikipedia",
	DETAIL:"detail"
}

var PageStatus = {
	FIRST	:"first",
	SEARCH	:"search",
	SHELVES	:"shelves",
	ERROR	:"error"
}

var ParamType = {
	ASSOC		:"assoc",
    MATCH_BOOK	:"equals-book",
	MATCH_WORKS	:"equals-work",
	MATCH_PERSON:"equals-creator"
}

var TemplateManager = {
	regVal:/#\{((\d|\w)+)\}/g,
    setTemplate: function(template, params){
        var place = arguments.callee.place;
        if(place == null){
            place = function(parameter){
                return function (target, match){
                    return parameter[match];
                };
            };
            // for singleton
            arguments.callee.place = place;
        };
        return template.replace(TemplateManager.regVal, place(params));
    }
};


var GlobalValues = {
	pageStatus		:PageStatus.FIRST,
	searchMode		:SearchMode.ASSOC,
	resultType		:ResultType.ASSOC,
	draggingFlg		:false,
	swfLoadedFlg	:false,
	shelfLoadedFlg	:false,
	resultNum		:30,
	liquidFlg		:true,
	detailWindow	:null,
	supportWindow	:null,
	printWindow		:null,
	graphWindow		:null,
	tutorialWindow	:null,
	headerLockFlg	:false,
	todayPlayFlg	:true,
	currentSkinIndex:0
};


var FixedValues = {
	
	API_ASSOC_TEXT_PATH				:"/webcatplus/api/associative/search/keyword.json",
	API_ASSOC_SHELF_PATH			:"/webcatplus/api/associative/search/shelf.json",
	API_ASSOC_WIKI_PATH				:"/webcatplus/api/associative/search/wikipedia.json",
	API_ASSOC_BOOK_PATH				:"/webcatplus/api/associative/search/book.json",
	API_MATCH_BOOK_KEYWORD_PATH		:"/webcatplus/api/matching/search/book/keyword.json",
	API_MATCH_BOOK_PERSON_PATH		:"/webcatplus/api/matching/search/book/creator.json",
	API_MATCH_BOOK_WORKS_PATH		:"/webcatplus/api/matching/search/book/work.json",
	API_MATCH_WORKS_KEYWORD_PATH	:"/webcatplus/api/matching/search/work/keyword.json",
	API_MATCH_WORKS_PERSON_PATH		:"/webcatplus/api/matching/search/work/creator.json",
	API_MATCH_PERSON_KEYWORD_PATH	:"/webcatplus/api/matching/search/creator/keyword.json",

	API_SHELF_DATA		:"/webcatplus/api/shelf/get.json",
	API_SHELF_EDIT		:"/webcatplus/api/shelf/operation.json",
	
	DATA_SHELF_MONTHLY	:"/externals/data/monthly.xml",
	DATA_INFO_PATH		:"/externals/data/info.xml",
	
	API_WHAT_IS_TODAY_PATH	:"/webcatplus/api/today.json",
	
	IMG_NOWPRINTING			:"/externals/images/img-nowprinting-01.jpg",
	
	CLS_DRAGGABLE_BOOK			:"jscls-draggableBook",
	CLS_DRAGGABLE_WORKS			:"jscls-draggableWorks",
	CLS_DRAGGABLE_PERSON		:"jscls-draggablePerson",
	CLS_DRAGGABLE_WIKIPEDIA		:"jscls-draggableWikipedia",
	CLS_DRAGGABLE_INC_KEYWORD	:"jscls-draggableIncKeyword",
	CLS_DRAGGABLE_EXC_KEYWORD	:"jscls-draggableExcKeyword",
	CLS_DRAGGABLE_TITLE			:"jsid-draggableTitle",
	CLS_LIQUID					:"set-Liquid",
	
	DETAIL_WINDOW	:"detailWin",
	MAIN_WINDOW		:"mainWin",
	SUPPORT_WINDOW	:"supportWin",
	GRAPH_WINDOW	:"graphWin",
	IMAGE_WINDOW	:"imageWin",
	PRINT_WINDOW	:"printWin",
	TUTORIAL_WINDOW	:"tutorialWin",
	
	DEFUALT_SELECT_MSG:"書棚を選択して下さい",
	
	HREF_GRAPH	:"/webcatplus/graph.html",
	
	ZINDEX_POPUP	: 90,
	ZINDEX_DRAGELEM	: 1100,
	
	MAX_CREATOR_NUM : 10,
	
	//Graph系
	NAME_GRAPH_FORM			:"graphform",
	NAME_L_ELEMENT			:"l",
	NAME_T_ELEMENT			:"t"
};


var GlobalEvent = {
	ASSOC_SEARCH		:"assocSearch",
	MATCH_SEARCH		:"matchSearch",
	ASSOC_SEARCHED		:"assocSearched",
	MATCH_SEARCHED		:"matchSearched",
	ASSOC_MORE_SEARCHED	:"assocMoreSearched",
	MATCH_MORE_SEARCHED	:"matchMoreSearched",
	ERROR_SEARCH		:"errorSearch",
	SHELF_LOADED		:"shelfLoaded",
	SHELF_LOAD_ERROR	:"shelfLoadError",
	SHELF_CREATED		:"shelfCreated",
	SHELF_RENAMED		:"shelfRenamed",
	SHELF_RECOLORED		:"shelfRecolored",
	SHELF_ELEMENT_ADDED	:"shelfElementAdded",
	SHELF_EDIT_ERROR	:"shelfEditError",
	TODAY_LOADED		:"todayLoaded",
	INFO_LOADED			:"infoLoaded",
	INFO_ERROR			:"infoError"
}


var SkinClassArr = new Array(
	"set-Skinz-A",
	"set-Skinz-B",
	"set-Skinz-C",
	"set-Skinz-D",
	"set-Skinz-E"
);



function linkToDetail(url){
	GlobalValues.detailWindow = window.open(url, FixedValues.DETAIL_WINDOW, 'width=900, height=900, menubar=no, toolbar=no, scrollbars=yes, resizable=yes');
	GlobalValues.detailWindow.focus();
}


function linkToSupport(url){
	GlobalValues.supportWindow = window.open(url, FixedValues.SUPPORT_WINDOW, 'width=900, height=900, menubar=no, toolbar=no, scrollbars=yes, resizable=yes');
    if (GlobalValues.supportWindow) {
	    GlobalValues.supportWindow.focus();
    }
}


function linkToPrint(url){
	GlobalValues.printWindow = window.open(url, FixedValues.PRINT_WINDOW, 'width=900, height=900, menubar=no, toolbar=no, scrollbars=yes, resizable=yes');
	GlobalValues.printWindow.focus();
}


function linkToTutorial(url){
	GlobalValues.tutorialWindow = window.open(url, FixedValues.TUTORIAL_WINDOW, 'width=680, height=510, menubar=no, toolbar=no, scrollbars=yes, resizable=yes');
	GlobalValues.tutorialWindow.focus();
}


function linkToGraph(l, t){
	var graphForm = document.forms[FixedValues.NAME_GRAPH_FORM];
	graphForm.target = FixedValues.GRAPH_WINDOW;
	graphForm.action = FixedValues.HREF_GRAPH;
	graphForm.method = "POST";
	graphForm.onsubmit = function(){
	}
		GlobalValues.graphWindow = window.open("", FixedValues.GRAPH_WINDOW, 'location=no, width=900, height=900, menubar=no, toolbar=no, scrollbars=yes, resizable=yes, location=no');
		GlobalValues.graphWindow.focus();
	
	graphForm.elements[FixedValues.NAME_L_ELEMENT].value = l;
	graphForm.elements[FixedValues.NAME_T_ELEMENT].value = t;
	graphForm.submit();
}


function getElementInfo(target){
	var id, title, type, url;
	var targetTitle = getElementsByTagAndClass("*", FixedValues.CLS_DRAGGABLE_TITLE, target)[0];
	
	id = (!target.id) ? null : target.id;
	title = targetTitle.innerHTML.split(String.fromCharCode(8203)).join("").replace(/<\/*b>/gi, "");
	//url = (targetTitle.href == "javascript:void(0);") ? "" : targetTitle.href;
	title = getHTMLUnescapedString(title);
	
	if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_BOOK) != -1){
		type = 0;
	}
	else if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_WORKS) != -1){
		type = 1;
	}
	else if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_PERSON) != -1){
		type = 2;
	}
	else if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_WIKIPEDIA) != -1){
		type = 3;
	}
	else if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_INC_KEYWORD) != -1){
		type = 4;
	}
	else if(target.className.indexOf(FixedValues.CLS_DRAGGABLE_EXC_KEYWORD) != -1){
		type = 5;
	}
	
	return {id:id, title:title, type:type, url:url};
}


function getWrapText(str, length){
	if(!str) return "";
	var returnStr = "";
	
	var strArr, returnArr = new Array();
	var lenNum = 0;
	
	if(str.constructor != String) str = String(str);
	str = String.fromCharCode(8203) + str;
	str = str.replace("</b><b>", "</b>" + String.fromCharCode(8203) + "<b>");	//for IE
	strArr = str.split(/<\/?\s?b>/i);
	
	for(var i = 0; i < strArr.length; i++){
		var tempStr = strArr[i];
		if(tempStr.constructor != String) tempStr = String(tempStr);
		
		if(tempStr.length + lenNum >= length){
			tempStr = tempStr.substr(0, length - lenNum);
			returnArr.push(tempStr);
			break;
		}
		
		lenNum += tempStr.length;
		returnArr.push(tempStr);
	}
	
	var len = returnArr.length;
	for(i = 0; i < len; i++){
		returnStr += returnArr[i].split("").join(String.fromCharCode(8203));
		if(i % 2 == 0 && i != len - 1)
			returnStr += "<b>";
		else if(i % 2 != 0)
			returnStr += "</b>";
	}
	
	return returnStr;
}


function substringByte(str, byte){
	var returnStr = "";
	var byteCount = 0;
	for(var i=0; i < str.length; i++){
		var char = str.charAt(i);
		var code = str.charCodeAt(i);
		
		if(code >= 0x0 && code <= 0x80) byteCount++;
		else byteCount += 2;
		
		returnStr += char;
		
		if(byteCount == byte){
			return returnStr;
		}
	}
	return returnStr;
}


function scrollToTop(){
	 $('html, body').animate({ scrollTop: 0 }, 'slow');
}


