/// しおりリスト画面 - SCRSLS0100

//名前空間用のオブジェクトを用意する
var BOOKMARK = {};

BOOKMARK.contentTypes = {};
BOOKMARK.contentName = {};
BOOKMARK.download = {};
BOOKMARK.pathImgContentNone = './img/page-none.png';

// Contains non-exist content
BOOKMARK.bookmark_errorContent = [];
// Contain contents
BOOKMARK.collection_contents = [];

// ソート条件復帰
BOOKMARK.searchDivision = 1;
BOOKMARK.sortType = 2;
// スクロール復帰
BOOKMARK.scrollTop = 0;

// Init function of page
$(document).ready(function() {

	if (!AVWEB.avwCheckLogin(COMMON.ScreenIds.Login))
		return;

	COMMON.LockScreen();

	document.title = I18N.i18nText('dspShiori') + ' | ' + I18N.i18nText('sysAppTitle');

	// Set bookmark screen
	ClientData.BookmarkScreen(COMMON.ScreenIds.BookmarkList);

	// Check if Force Change password
	if (ClientData.requirePasswordChange() != 1) {

		// Synchronize bookmarks with server
		BOOKMARK.SyncContent();

		// Collection all detail of pages
		BOOKMARK.bookmark_collectAllPages();

		$("#dspDelete").click(BOOKMARK.dspDelete_Click);
		$("#dspDelete1").click(BOOKMARK.dspDelete1_Click);
		$("#dspCancel").click(BOOKMARK.dspCancel_Click);
		$("#dspConfirmOK").click(BOOKMARK.dspConfirmOK_Click);

		BOOKMARK.ClearGrid();

		// if (ClientData.BookMarkData().length == 0) {
		if (BOOKMARK.collection_contents.length == 0) {
			// Show error
			$("#msgShioriNotExists").show();
			$("#dspDelete").hide();
			$("#dspDelete1").hide();
		} else {
			$("#msgShioriNotExists").hide();
			$("#dspDelete").show();
			$("#dspDelete1").show();
		}

		// Show book in local storage
		// BOOKMARK.ShowBookmark();

		$("a[name='dspRead']").unbind('click');
		$("a[name='dspRead']").click(BOOKMARK.dspRead_Click);
		// ダイハツ対応
		$("a[name='dspDownload']").unbind('click');
		$("a[name='dspDownload']").click(BOOKMARK.downloadFunction);

		BOOKMARK.HideSorting();

		// Default sort is タイトル名, default is asc
		ClientData.sortOpt_searchDivision(BOOKMARK.searchDivision);
		ClientData.sortOpt_sortType(BOOKMARK.sortType);
		BOOKMARK.dspTitleNm_Click();
	} else {
		HEADER.checkForceChangePassword();
	}

	if (COMMON.isAnonymousLogin()) {
		// プッシュメッセージ隠す
		$('#dspPushMessage').hide();
	}

	// ダイアログ関連
	$("#dspTitleNm").click(BOOKMARK.dspTitleNm_Click);
	$("#dspTitleNmKn").click(BOOKMARK.dspTitleNmKn_Click);
	$("#dspPubDt").click(BOOKMARK.dspPubDt_Click);

	// Check JP language and show title kana
	if (I18N.getCurrentLanguage() != COMMON.Consts.ConstLanguage_Ja) {
		$("#dspTitleNmKn").hide();
		$("#dspTitleNmKn_Seperate").hide();
	} else {
		$("#dspTitleNmKn").show();
		$("#dspTitleNmKn_Seperate").show();
	}

	// ビューア、共有表示パーツ読み込み
	$("#viewer").load("./inc_contentview.html?__UPDATEID__", function(myData, myStatus, xhr) {
		// 読み込み完了時の処理
		I18N.i18nReplaceText();
	});

});

BOOKMARK.refreshView = function() {

	// Synchronize bookmarks with server
	BOOKMARK.SyncContent();

	// Collection all detail of pages
	BOOKMARK.bookmark_collectAllPages();

	BOOKMARK.ClearGrid();

	// if (ClientData.BookMarkData().length == 0) {
	if (BOOKMARK.collection_contents.length == 0) {
		// Show error
		$("#msgShioriNotExists").show();
		$("#dspDelete").hide();
		$("#dspDelete1").hide();
	} else {
		$("#msgShioriNotExists").hide();
		$("#dspDelete").show();
		$("#dspDelete1").show();
	}

	// Default sort is タイトル名, default is asc
	ClientData.sortOpt_searchDivision(BOOKMARK.searchDivision);
	// 前と同じ状態にするので逆転させる
	if (BOOKMARK.sortType == 1) {
		BOOKMARK.sortType = 2;
	} else {
		BOOKMARK.sortType = 1;
	}
	ClientData.sortOpt_sortType(BOOKMARK.sortType);

	if (BOOKMARK.searchDivision == 1) {
		BOOKMARK.dspTitleNm_Click();
	} else if (BOOKMARK.searchDivision == 2) {
		BOOKMARK.dspTitleNmKn_Click();
	} else {
		BOOKMARK.dspPubDt_Click();
	}

};

/*
 * ----------------------------------------------------------------------------
 * Event groups [start]
 * ----------------------------------------------------------------------------
 */

BOOKMARK.dspTitleNm_Click = function() {

	var isAsc = false;
	if (ClientData.sortOpt_searchDivision() == 1) { // Name
		if (ClientData.sortOpt_sortType() == 1) { // ASC
			isAsc = false;
			BOOKMARK.sortType = 2;
		} else {
			isAsc = true;
			BOOKMARK.sortType = 1;
		}
	} else {
		BOOKMARK.searchDivision = 1;
		BOOKMARK.sortType = 1;
		ClientData.sortOpt_searchDivision(1);
		isAsc = true;
	}
	ClientData.sortOpt_sortType(BOOKMARK.sortType);

	BOOKMARK.SortTitleName(isAsc);

	// changeStatusSort(this, isAsc);
	HEADER.setStatusSort('#dspTitleNm', isAsc);

};
BOOKMARK.dspTitleNmKn_Click = function() {
	var isAsc = false;
	if (ClientData.sortOpt_searchDivision() == 2) { // Kana
		if (ClientData.sortOpt_sortType() == 1) { // ASC
			isAsc = false;
			BOOKMARK.sortType = 2;
		} else {
			isAsc = true;
			BOOKMARK.sortType = 1;
		}
	} else {
		BOOKMARK.searchDivision = 2;
		BOOKMARK.sortType = 1;
		ClientData.sortOpt_searchDivision(2); // Kana
		isAsc = true;
	}
	ClientData.sortOpt_sortType(BOOKMARK.sortType);

	BOOKMARK.SortTitleNameKana(isAsc);

	// changeStatusSort(this, isAsc);
	HEADER.setStatusSort('#dspTitleNmKn', isAsc);

};
BOOKMARK.dspPubDt_Click = function() {
	var isAsc = false;
	if (ClientData.sortOpt_searchDivision() == 3) { // Publish date
		if (ClientData.sortOpt_sortType() == 1) { // ASC
			isAsc = false;
			BOOKMARK.sortType = 2;
		} else {
			isAsc = true;
			BOOKMARK.sortType = 1;
		}
	} else {
		BOOKMARK.sortType = 1;
		ClientData.sortOpt_searchDivision(3); // Kana
		isAsc = true;
	}
	ClientData.sortOpt_sortType(BOOKMARK.sortType);

	BOOKMARK.SortPubDate(isAsc);

	// changeStatusSort(this, isAsc);
	HEADER.setStatusSort('#dspPubDt', isAsc);
};

// Event of each button [読む]
BOOKMARK.dspRead_Click = function() {
	var jsondata = $(this).attr("value");
	var data = JSON.parse(jsondata);

	LIMIT_ACCESS_CONTENT.checkLimitContent(data.contentid, function() {
		BOOKMARK.dspRead_Click_callback(data);
	}, function() {
	});
};
//
BOOKMARK.dspRead_Click_callback = function(data) {

	ClientData.contentInfo_contentId(data.contentid);
	ClientData.bookmark_pageNo(data.pageNo);
	ClientData.contentInfo_contentType(data.contentType);
	ClientData.IsRefresh(false);
	// AVWEB.avwScreenMove(COMMON.ScreenIds.ContentView);

	// 表示
	BOOKMARK.showContentView();

};

// Cancel dialog of deleting
BOOKMARK.dspCancel_Click = function() {
	// Close dialog
	// $('#dlgConfirm').dialog('close');
	$("#delete_shiori").hide();
	COMMON.unlockLayout();
};
// Process deleting
BOOKMARK.dspConfirmOK_Click = function() {
	// --------------------------------
	// Process deleting [start]
	// --------------------------------

	// Get selected bookmarks
	var arrSelectedBookmarks = $("input[name='chkDelete']:checked");
	$.each(arrSelectedBookmarks, function() {
		// Delete selected items on layout

		var contentid = JSON.parse(this.value).contentid;
		var pageNo = JSON.parse(this.value).pageNo;

		$(this).parent().parent().parent().remove();

		// Remove from ClientData
		var bm = ClientData.BookMarkData();

		for ( var nIndex = bm.length - 1; nIndex >= 0; nIndex--) {
			if (bm[nIndex].contentid == contentid && bm[nIndex].pageNo == pageNo) {
				bm.splice(nIndex, 1);
				ClientData.isChangedBookmark(true);
			}
		}
		ClientData.BookMarkData(bm);

		if (ClientData.BookMarkData().length == 0) {
			// Show error
			$("#msgShioriNotExists").show();
			$("#dspDelete").hide();
			$("#dspDelete1").hide();
		}
	});

	// --------------------------------
	// Process deleting [ end ]
	// --------------------------------

	$("#delete_shiori").hide();
	COMMON.unlockLayout();
};

BOOKMARK.dspDelete1_Click = function() {
	BOOKMARK.dspDelete_Click();
};

BOOKMARK.dspDelete_Click = function() {
	if ($("input[name='chkDelete']:checked").length > 0) {
		COMMON.lockLayout();
		$("#delete_shiori").show();
		$("#delete_shiori").center();
	}
};

// Show detail content
BOOKMARK.ShowBookmark = function(showList) {
	if (AVWEB.avwHasError()) {
		return;
	} 
	
	var hasMemo = false;
	var hasMarking = false;
	var contentid = "";
	var pageNo = 0;

	if (showList.length > 0) {
		$("#dspDelete").show();
		$("#dspDelete1").show();
	}
	// TotalThread = ClientData.BookMarkData().length;
	for ( var nIndex = showList.length - 1; nIndex >= 0; nIndex--) {
		hasMarking = false;
		hasMemo = false;

		contentid = showList[nIndex].contentid;
		pageNo = showList[nIndex].pageNo;

		// Check if contentid has marking
		for ( var nIndex1 = 0; nIndex1 < ClientData.MarkingData().length; nIndex1++) {

			if (ClientData.MarkingData()[nIndex1].contentid == contentid && ClientData.MarkingData()[nIndex1].pageNo == pageNo) {
				hasMarking = true;
			}
		}

		// Check if contentid has memo
		for ( var nIndex1 = 0; nIndex1 < ClientData.MemoData().length; nIndex1++) {

			if (ClientData.MemoData()[nIndex1].contentid == contentid && ClientData.MemoData()[nIndex1].pageNo == pageNo) {
				hasMemo = true;
			}
		}

		var pageDetail;
		var contentTitle = "";
		var contentTitleKana = "";
		var contentType = "";
		// Search current page if collection that get details before
		for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents.length; nIndex2++) {
			if (BOOKMARK.collection_contents[nIndex2].contentid == contentid) {
				contentTitle = BOOKMARK.collection_contents[nIndex2].contentTitle;
				contentTitleKana = BOOKMARK.collection_contents[nIndex2].contentTitleKana;
				contentType = BOOKMARK.collection_contents[nIndex2].contentType;

				// Search in pages
				for ( var nIndex3 = 0; nIndex3 < BOOKMARK.collection_contents[nIndex2].pages.length; nIndex3++) {
					if (pageNo == BOOKMARK.collection_contents[nIndex2].pages[nIndex3].pageNo) {
						pageDetail = BOOKMARK.collection_contents[nIndex2].pages[nIndex3];
						if (contentType != COMMON.ContentTypeKeys.Type_PDF) {
							pageDetail.pageText = "";
						}
						break;
					}
				}

			}
		}
		if (pageDetail) {
			// If bookmark does not exist
			if (pageDetail.existed == true) {
				// Show normal
				BOOKMARK.UpdateBookmark(contentid, pageDetail.pageNo, contentTitle, contentTitleKana);

				var pageThumbnail = (pageDetail.pageThumbnail != BOOKMARK.pathImgContentNone) ? ("data:image/jpeg;base64," + pageDetail.pageThumbnail) : BOOKMARK.pathImgContentNone;

				BOOKMARK.insertRow(contentid, pageThumbnail, COMMON.htmlEncode(contentTitle), pageDetail.pageText, pageDetail.pageNo, hasMemo, hasMarking, nIndex, contentType);
			} else {
				// Not existed -> Show error
				BOOKMARK.insertRowError(contentid, COMMON.htmlEncode(contentTitle), pageDetail.pageNo);
			}
		}

	}
	$("a[name='dspRead']").unbind('click');
	$("a[name='dspRead']").click(BOOKMARK.dspRead_Click);
	// ダイハツ対応
	$("a[name='dspDownload']").unbind('click');
	$("a[name='dspDownload']").click(BOOKMARK.downloadFunction);

};
// Hide all sorting symbol
BOOKMARK.HideSorting = function() {
	$('#menu_sort li a').removeClass('ascending_sort').removeClass('descending_sort');
};
// Sort by title name
BOOKMARK.SortTitleName = function(isAsc) {

	HEADER.setStatusSort('#dspTitleNm', isAsc);

	var arrSource = ClientData.BookMarkData();
	var arrTarget = [];
	var arrShowList = [];
	var strTemp = "";
	var nTempIndex = 0;
	var isStop = false;
	while (!isStop) {
		if (arrSource.length > 0) {
			strTemp = "";
			// Lookup min item
			for ( var nIndex = 0; nIndex < arrSource.length; nIndex++) {
				if (strTemp == "") {
					strTemp = arrSource[nIndex].contentTitle;
					nTempIndex = nIndex;
				} else {
					// ASC
					if (isAsc) {
						if (arrSource[nIndex].contentTitle < strTemp) {
							strTemp = arrSource[nIndex].contentTitle;
							nTempIndex = nIndex;
						}
					} else {
						if (arrSource[nIndex].contentTitle > strTemp) {
							strTemp = arrSource[nIndex].contentTitle;
							nTempIndex = nIndex;
						}
					}
				}
			}
			// Add to target array
			arrTarget.push(arrSource[nTempIndex]);

			// 表示対象なら表示用リストにプッシュ
			for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents.length; nIndex2++) {
				if (BOOKMARK.collection_contents[nIndex2].contentid == arrSource[nTempIndex].contentid) {
					arrShowList.push(arrSource[nTempIndex]);
					break;
				}
			}

			// Remove min item from source array
			arrSource.splice(nTempIndex, 1);
		} else {
			isStop = true;
		}
	}
	BOOKMARK.ClearGrid();
	ClientData.BookMarkData(arrTarget);
	BOOKMARK.ShowBookmark(arrShowList);
};
// Clear all rows of grid
BOOKMARK.ClearGrid = function() {

	var arrSelectedBookmarks = $("input[name='chkDelete']");
	$.each(arrSelectedBookmarks, function() {
		$(this).parent().parent().parent().remove();
	});

};
// Sort by title name kana
BOOKMARK.SortTitleNameKana = function(isAsc) {

	HEADER.setStatusSort('#dspTitleNmKn', isAsc);

	var arrSource = ClientData.BookMarkData();
	var arrTarget = [];
	var arrShowList = [];
	var strTemp = "";
	var nTempIndex = 0;
	var isStop = false;
	while (!isStop) {
		if (arrSource.length > 0) {
			strTemp = "";
			// Lookup min item
			for ( var nIndex = 0; nIndex < arrSource.length; nIndex++) {
				if (strTemp == "") {
					strTemp = arrSource[nIndex].contentTitleKana;
					nTempIndex = nIndex;
				} else {
					// ASC
					if (isAsc) {
						if (arrSource[nIndex].contentTitleKana < strTemp) {
							strTemp = arrSource[nIndex].contentTitleKana;
							nTempIndex = nIndex;
						}
					} else {
						if (arrSource[nIndex].contentTitleKana > strTemp) {
							strTemp = arrSource[nIndex].contentTitleKana;
							nTempIndex = nIndex;
						}
					}
				}
			}
			// Add to target array
			arrTarget.push(arrSource[nTempIndex]);

			// 表示対象なら表示用リストにプッシュ
			for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents.length; nIndex2++) {
				if (BOOKMARK.collection_contents[nIndex2].contentid == arrSource[nTempIndex].contentid) {
					arrShowList.push(arrSource[nTempIndex]);
					break;
				}
			}

			// Remove min item from source array
			arrSource.splice(nTempIndex, 1);
		} else {
			isStop = true;
		}
	}
	BOOKMARK.ClearGrid();
	ClientData.BookMarkData(arrTarget);
	BOOKMARK.ShowBookmark(arrShowList);
};
// Sort by publish date
BOOKMARK.SortPubDate = function(isAsc) {

	HEADER.setStatusSort('#dspPubDt', isAsc);

	var arrSource = ClientData.BookMarkData();
	var arrTarget = [];
	var arrShowList = [];
	var dateTemp = undefined;
	var nTempIndex = 0;
	var isStop = false;
	while (!isStop) {
		if (arrSource.length > 0) {
			dateTemp = undefined;
			// Lookup min item
			for ( var nIndex = 0; nIndex < arrSource.length; nIndex++) {
				if (dateTemp == undefined) {
					dateTemp = arrSource[nIndex].registerDate;
					nTempIndex = nIndex;
				} else {
					// ASC
					if (isAsc) {
						if (arrSource[nIndex].registerDate < dateTemp) {
							dateTemp = arrSource[nIndex].registerDate;
							nTempIndex = nIndex;
						}
					} else {
						if (arrSource[nIndex].registerDate > dateTemp) {
							dateTemp = arrSource[nIndex].registerDate;
							nTempIndex = nIndex;
						}
					}
				}
			}
			// Add to target array
			arrTarget.push(arrSource[nTempIndex]);

			// 表示対象なら表示用リストにプッシュ
			for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents.length; nIndex2++) {
				if (BOOKMARK.collection_contents[nIndex2].contentid == arrSource[nTempIndex].contentid) {
					arrShowList.push(arrSource[nTempIndex]);
					break;
				}
			}

			// Remove min item from source array
			arrSource.splice(nTempIndex, 1);
		} else {
			isStop = true;
		}
	}
	BOOKMARK.ClearGrid();
	ClientData.BookMarkData(arrTarget);
	BOOKMARK.ShowBookmark(arrShowList);
};
/*
 * Update information of specified bookmark
 */
BOOKMARK.UpdateBookmark = function(contentid, pageNo, contentTitle, contentTitleKana) {
	var arrBookmarks = ClientData.BookMarkData();

	for ( var nIndex = 0; nIndex < arrBookmarks.length; nIndex++) {
		if (contentid == arrBookmarks[nIndex].contentid && pageNo == arrBookmarks[nIndex].pageNo) {
			if (contentTitle != null && contentTitle != undefined) {
				arrBookmarks[nIndex].contentTitle = contentTitle;
			}
			if (contentTitleKana != null && contentTitleKana != undefined) {
				arrBookmarks[nIndex].contentTitleKana = contentTitleKana;
			}
			break;
		}
	}
	// Set bookmark back to client data
	ClientData.BookMarkData(arrBookmarks);
};

/*
 * Insert error row
 */
BOOKMARK.insertRowError = function(contentid, pageTitle, pageNo) {

	var newRow = "";

	newRow += "<section class='sectionBookmark'>";
	newRow += "     <div class='cnt_section'>";

	newRow += '<span class="check">';
	newRow += "<input type='checkbox' name='chkDelete' value='{\"contentid\":" + contentid + ", \"pageNo\":" + pageNo + "}' />";
	newRow += '</span>';

	newRow += "     <div class='text'>";
	newRow += '         <label class="name">' + COMMON.truncate(pageTitle, 20) + '</label>';
	newRow += '         <div class="info">';
	newRow += "                 <label class='lang name' lang='msgShioriDeleted'>" + I18N.i18nText('msgShioriDeleted') + "</label>";

	newRow += "         </div>";
	newRow += "     </div>";

	newRow += "</section>";
	$('#pnlTop').after(newRow);
};

// Insert row to grid
BOOKMARK.insertRow = function(contentid, pageThumbnail, pageTitle, pageText, pageNo, hasMemo, hasMarking, index, contentType) {
	var imgMarkingHide = '<img style="visibility:hidden" class="pen" alt="" src="./img/list/icon_pen.png" />';
	var imgMemoHide = '<img style="visibility:hidden" class="sticker" alt="" src="./img/list/icon_sticker.png" />';
	var imgMarking = '<img class="pen" alt="" src="./img/list/icon_pen.png" />';
	var imgMemo = '<img class="sticker" alt="" src="./img/list/icon_sticker.png" />';
	var newRow = "";

	newRow += "<section class='sectionBookmark'>";

	newRow += '<div class="cnt_section">';
	newRow += '<span class="check">';
	newRow += "<input type='checkbox' name='chkDelete' value='{\"contentid\":" + contentid + ", \"pageNo\":" + pageNo + ", \"index\": " + index + "}'/>";
	newRow += '</span>';
	newRow += '<a class="img" href="#">';
	newRow += '<img id="pageImg' + contentid + '" src="' + pageThumbnail + '" width="160" height="120" style="display:none;">';
	newRow += '<img id="loadingIcon' + contentid + "_" + pageNo + '" src="./img/data_loading.gif" height="25px" width="25px" style="padding: 46px; "/>';
	newRow += '</a>';

	newRow += '<div class="text">';
	newRow += '<a class="name" href="#">' + COMMON.truncate(pageTitle, 20) + '</a>';

	newRow += '<div class="info">';
	newRow += '<ul class="date">';

	var contentText = COMMON.htmlEncode(COMMON.getLines(pageText, 3));

	newRow += '<li><label id="Label1">' + COMMON.truncate(contentText, 60) + '</label></li>';

	newRow += '</ul>';
	newRow += '<ul class="pic">';

	// Resize Image
	var imgTemp = new Image();

	imgTemp.onload = function() {

		if (imgTemp.width > imgTemp.height) {

			$("img#pageImg" + contentid).attr('height', '');
			$("img#pageImg" + contentid).removeAttr('height');
			$("img#pageImg" + contentid).attr('width', '120');
			var realHeight = (120 * imgTemp.height) / imgTemp.width;
			$("img#pageImg" + contentid).css('padding-top', (120 - realHeight) / 2 + 'px');
		} else {
			$("img#pageImg" + contentid).attr('width', '');
			$("img#pageImg" + contentid).removeAttr('width');
			$("img#pageImg" + contentid).attr('height', '120');
			$("img#pageImg" + contentid).css('padding-top', '0px');
		}

		$("#loadingIcon" + contentid + "_" + pageNo).fadeOut('slow', function() {
			$("img#pageImg" + contentid).fadeIn('slow');
		});
	};

	imgTemp.src = pageThumbnail;

	if (hasMemo) {
		newRow += '<li><a href="javascript:void(0);" style="cursor: default;">' + imgMemo + '</a></li>';
	} else {
		newRow += '<li><a href="javascript:void(0);" style="cursor: default;">' + imgMemoHide + '</a></li>';
	}

	if (hasMarking) {
		newRow += '<li><a href="javascript:void(0);" style="cursor: default;">' + imgMarking + '</a></li>';
	} else {
		newRow += '<li><a href="javascript:void(0);" style="cursor: default;">' + imgMarkingHide + '</a></li>';
	}

	newRow += '<li class="pageno"><label id="Label2" class="lang" lang="txtPage">' + I18N.i18nText('txtPage') + '</label><label id="Label3">' + pageNo + '</label></li>';

	newRow += '<li>';
	newRow += "<a class='read read_open lang' name='dspRead' value='{\"contentid\":\"" + contentid + "\", \"pageNo\":\"" + pageNo + "\", \"contentType\":\"" + contentType + "\" }' lang='txtRead'>"
			+ I18N.i18nText('txtRead') + "</a>";

	if (BOOKMARK.download[contentid] == '1') {
		newRow += "<a class='read read_download' name='dspDownload' contentid='" + contentid + "'>ダウンロード</a>";
	}
	newRow += '</li>';

	newRow += '</ul>';
	newRow += '</div>';
	newRow += '</div>';
	newRow += '</div>';

	newRow += "</section>";

	$('#pnlTop').after(newRow);
};

/*
 * ----------------------------------------------------------------------------
 * Event groups [ end ]
 * ----------------------------------------------------------------------------
 */

/*
 * Get all detail pages of content in bookmark
 */
BOOKMARK.bookmark_collectAllPages = function() {
	var arrBookMarks = ClientData.BookMarkData();
	for ( var nIndex = 0; nIndex < BOOKMARK.collection_contents.length; nIndex++) {

		var contentid = BOOKMARK.collection_contents[nIndex].contentid;
		var pages = [];

		// Collect all pages of current content
		for ( var nIndex1 = 0; nIndex1 < arrBookMarks.length; nIndex1++) {
			// Found content
			if (arrBookMarks[nIndex1].contentid == contentid) {
				pages.push({
					pageNo : arrBookMarks[nIndex1].pageNo,
					pageText : "",
					pageThumbnail : "",
					existed : false
				});
			}
		}
		// Add collected pages to content
		BOOKMARK.collection_contents[nIndex].pages = pages;

		// Join pages to request to server
		var strPageNos = BOOKMARK.buildPageNos(BOOKMARK.collection_contents[nIndex].pages);

		// Call api to get all details of pages 1 time
		AVWEB.avwCmsApiSync(ClientData.userInfo_accountPath(), "webContentPage", "GET", {
			contentId : contentid,
			sid : ClientData.userInfo_sid(),
			pageNos : strPageNos,
			thumbnailFlg : 1
		}, function(data) {

			BOOKMARK.collection_contents[nIndex].contentTitle = data.contentTitle;
			BOOKMARK.collection_contents[nIndex].contentTitleKana = data.contentTitleKana;
			for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents[nIndex].pages.length; nIndex2++) {

				var comparePageNo = BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageNo;

				for ( var nIndex3 = 0; nIndex3 < data.pages.length; nIndex3++) {
					if (data.pages[nIndex2] && comparePageNo == data.pages[nIndex2].pageNo) {
						// Set flag to determine page existed
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].existed = true;
						// Store detail of page
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageText = data.pages[nIndex2].pageText;
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageThumbnail = data.pages[nIndex2].pageThumbnail;
					} else if (BOOKMARK.contentTypes[contentid] == "none" && data.pages.length > 0) {
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].existed = true;
						// Store detail of page
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageText = ''; // data.pages[0].pageText;
						BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageThumbnail = BOOKMARK.pathImgContentNone; // data.pages[nIndex2].pageThumbnail;
					}
				}

			}
		}, function() { // when server response error

			if (BOOKMARK.contentTypes[contentid] == "none") {
				BOOKMARK.collection_contents[nIndex].contentTitle = BOOKMARK.contentName[contentid];
				for ( var nIndex2 = 0; nIndex2 < BOOKMARK.collection_contents[nIndex].pages.length; nIndex2++) {
					BOOKMARK.collection_contents[nIndex].pages[nIndex2].existed = true;
					BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageThumbnail = BOOKMARK.pathImgContentNone;
					BOOKMARK.collection_contents[nIndex].pages[nIndex2].pageText = '';

				}
			}
		});

	}
};
/*
 * Build pageNos
 */
BOOKMARK.buildPageNos = function(pages) {
	var strResult = "";
	for ( var nIndex = 0; nIndex < pages.length; nIndex++) {
		if (strResult == "") {
			strResult = "" + pages[nIndex].pageNo;
		} else {
			strResult += "," + pages[nIndex].pageNo;
		}
	}
	return strResult;
};

/*
 * Check a content is error or not
 */
BOOKMARK.IsErrorContent = function(strContentId) {
	var isError = false;

	for ( var nIndex = 0; nIndex < BOOKMARK.bookmark_errorContent.length; nIndex++) {
		if (strContentId == BOOKMARK.bookmark_errorContent[nIndex].contentid) {
			isError = true;
			break;
		}
	}
	return isError;
};

/*
 * Check a content is checked + ok
 */
BOOKMARK.IsOKCheckedContent = function(strContentId) {
	var isOK = false;

	for ( var nIndex = 0; nIndex < BOOKMARK.collection_contents.length; nIndex++) {
		if (strContentId == BOOKMARK.collection_contents[nIndex].contentid) {
			isOK = true;
			break;
		}
	}
	return isOK;
};

// Add OK checked content
BOOKMARK.AddContent = function(strContentId, contentType) {
	var isFound = false;
	for ( var nIndex = 0; nIndex < BOOKMARK.collection_contents.length; nIndex++) {
		if (BOOKMARK.collection_contents[nIndex].contentid == strContentId) {
			isFound = true;
			break;
		}
	}
	// Add to bufer if it does not exist
	if (!isFound) {
		BOOKMARK.collection_contents.push({
			'contentid' : strContentId,
			'contentType' : contentType,
			'contentTitle' : "",
			'contentTitleKana' : "",
			'pages' : []
		});
	}
};

/*
 * event of changing language
 */
function changeLanguageCallBackFunction() {
	if (I18N.getCurrentLanguage() != COMMON.Consts.ConstLanguage_Ja) {
		$("#dspTitleNmKn").hide();
		$("#dspTitleNmKn_Seperate").hide();
		$("#txtTitleNmKnAsc").hide();
		$("#txtTitleNmKnDesc").hide();
	} else {
		$("#dspTitleNmKn").show();
		$("#dspTitleNmKn_Seperate").show();
		if (ClientData.sortOpt_searchDivision() == 2) { // Kana
			HEADER.setStatusSort('#dspTitleNmKn', orderSort == COMMON.Consts.ConstOrderSetting_Asc);
		}
	}
	document.title = I18N.i18nText('dspShiori') + ' | ' + I18N.i18nText('sysAppTitle');
};
/*
 * Synchronize bookmark with server . Check existence of content -> Delete
 * absence content in local
 *  . Check existence of pages -> Delete absence pages in local
 */
BOOKMARK.SyncContent = function() {

	// Reset error contents
	BOOKMARK.bookmark_errorContent = [];

	// Reset ok checked content
	BOOKMARK.collection_contents = [];

	// Get bookmarks from local storage
	var arrBookmarks = ClientData.BookMarkData();

	for ( var nIndex = arrBookmarks.length - 1; nIndex >= 0; nIndex--) {

		var oneBookMark = arrBookmarks[nIndex];
		// ==================================
		// Check existence of content [start]
		// ==================================
		if (BOOKMARK.IsErrorContent(oneBookMark.contentid) == false) {
			// If content is ok + checked
			if (BOOKMARK.IsOKCheckedContent(oneBookMark.contentid) == false) {
				if (!BOOKMARK.IsExistContent(oneBookMark.contentid)["isExisted"]) {
					if (AVWEB.avwHasError()) {
						// System error excepting 404
						AVWEB.showSystemError();
						return;
					} else {
						// Add to list of error content
						BOOKMARK.bookmark_errorContent.push({
							contentid : oneBookMark.contentid
						});
						// Remove bookmark
						arrBookmarks.splice(nIndex, 1);
						ClientData.isChangedBookmark(true);
					}
				}
				// ==================================
				// Check existence of content [ end ]
				// ==================================
				else {
					// Add nromal content
					var result = BOOKMARK.IsExistContentAuthGroup(oneBookMark.contentid);
					if (result["isExisted"] == true) {
						BOOKMARK.AddContent(oneBookMark.contentid, result["contentType"]);
					}
				}
			}
		} else {
			arrBookmarks.splice(nIndex, 1);
			ClientData.isChangedBookmark(true);
		}
	}

	// Set back to storage
	ClientData.BookMarkData(arrBookmarks);

};

/*
 * Check content whether existed or not
 */
BOOKMARK.IsExistContent = function(strContentId) {
	var isExisted = false;
	var contentType = '';
	var result = [];
	var params = {
		sid : ClientData.userInfo_sid(),
		getType : '1',
		contentId : strContentId,
		authCode : "0"
	};

	result["isExisted"] = isExisted;
	AVWEB.avwCmsApiSync(ClientData.userInfo_accountPath(), "webGetContent", 'GET', params, function(data) {
		isExisted = true;
		contentType = data.contentData.contentType;

		result["isExisted"] = isExisted;
		result["contentType"] = contentType;

		// save content type
		// BOOKMARK.contentTypes[strContentId] = contentType;
		// BOOKMARK.contentName[strContentId] = data.contentData.contentName;
		// BOOKMARK.download[strContentId] = data.download;
		// save alert message level
		// LIMIT_ACCESS_CONTENT.messageLevel[strContentId] = {
		// alertMessageLevel: data.contentData.alertMessageLevel, alertMessage:
		// data.contentData.alertMessage };

	}, function(xmlHttpRequest, txtStatus, errorThrown) {
		if (xmlHttpRequest.status == 404) {
			isExisted = false;
		} else {
			// Show system error
			isExisted = true; // Mark this flag to prevent bookmarks from
								// deleting
			AVWEB.showSystemError();
		}
	});

	return result;
};

/*
 * Check content whether existed or not
 */
BOOKMARK.IsExistContentAuthGroup = function(strContentId) {
	var isExisted = false;
	var contentType = '';
	var result = [];
	var params = {
		sid : ClientData.userInfo_sid(),
		getType : '1',
		contentId : strContentId,
		authCode : ClientData.authCode()
	};

	result["isExisted"] = isExisted;
	AVWEB.avwCmsApiSync(ClientData.userInfo_accountPath(), "webGetContent", 'GET', params, function(data) {
		isExisted = true;
		contentType = data.contentData.contentType;

		result["isExisted"] = isExisted;
		result["contentType"] = contentType;

		// save content type
		BOOKMARK.contentTypes[strContentId] = contentType;
		BOOKMARK.contentName[strContentId] = data.contentData.contentName;
		BOOKMARK.download[strContentId] = data.download;
		// save alert message level
		LIMIT_ACCESS_CONTENT.messageLevel[strContentId] = {
			alertMessageLevel : data.contentData.alertMessageLevel,
			alertMessage : data.contentData.alertMessage
		};

	}, function(xmlHttpRequest, txtStatus, errorThrown) {
		if (xmlHttpRequest.status == 404) {
			isExisted = false;
		} else {
			// Show system error
			isExisted = true; // Mark this flag to prevent bookmarks from deleting
			AVWEB.showSystemError();
		}
	});

	return result;
};

/*
 * ----------------------------------------------------------------------------
 * Setting dialog [ end ]
 * ----------------------------------------------------------------------------
 */

BOOKMARK.showContentView = function() {

	// TOPに戻す
	var y = 0;
	if (document.documentElement.scrollTop) {
		y = document.documentElement.scrollTop;
	}
	if (document.body.scrollTop) {
		if (y == undefined || y == 0) {
			y = document.body.scrollTop;
		}
	}
	if (y == undefined || y == null) {
		y = 0;
	}
	BOOKMARK.scrollTop = y;
	window.scrollTo(0, 0);

	// 試験
	$("#header-ws").hide();
	$("#ws-body").hide();
	$("#topcontrol").hide();

	CONTENTVIEW_INITOBJECT.clearViewerComponent();
	CONTENTVIEW.cssInit();
	$("#viewer").show();

	CONTENTVIEW.ready();

};

BOOKMARK.cssInit = function() {
	$('html').css({
		'overflow-y' : 'scroll'
	});
	$('html,body').css({
		'height' : '100%',
		'margin' : '0',
		'padding' : '0'
	});
	$('html>body').css({
		'font-size' : '16px',
		'font-size' : '68.75%'
	});
	$('body').css({
		'font-family' : 'Verdana, helvetica, arial, sans-serif',
		'font-size' : '68.75%',
		'background' : '#fff',
		'color' : '#333'
	});
};

BOOKMARK.downloadFunction = function(e) {
	if (e) {
		e.preventDefault();
	}

	var contentId = $(this).attr('contentid');
	// Download content
	HEADER.downloadResourceById(contentId);

};
