//---------------- Variables -------------------------------
var iButtonWidth	= 100;
var iButtonHeight	= 100;
var iCellSpacing    = 20; 
var BOOK_DIV		= 'BookDiv';
var CHAPTER_DIV		= 'ChapterDiv';
var PAGE_DIV		= 'PageDiv';
var SCROLL_ID		= 'PageDiv';
var COL				= 5;
var ROW				= 4;
var iScrollSize		= 10;
var iMaxTextLength	= 21;
var bHoldingScrollUp = false;

var bIsShowingUpImage = false;

var bIsShowingDownImage = false;
var maxScrollDown;
//--------------- Define class CBook -----------------------
function CBook(strName, bViewed, iNumChapter)
{
	// Properties
	this.strName = strName;
	this.bViewed = bViewed;
	this.bHidden = false;
	this.arrChapter = new Array(iNumChapter);
	// Functions
	this.SetChapterInfo = SetChapterInfo;
	this.IsBookViewed	= IsBookViewed;
}
// Functions of CBook
function SetChapterInfo(iIndex, strName, bViewed, iNumPage)
{
	this.arrChapter[iIndex] = new CChapter(strName, bViewed, iNumPage);
}
function IsBookViewed()
{
	if (this.bViewed == true)
	{
		return true;
	}
	for(i = this.arrChapter.length - 1; i >= 0; i--)
	{
		if (this.arrChapter[i].bViewed == true)
		{
			continue;
		}
		if (this.arrChapter[i].IsChapterViewed() == false)
		{
			return false;
		}
	}
	this.bViewed = true;
	return true;
}
//---------------- End definition of CBook -------------------

//--------------- Define class CChapter -----------------------
function CChapter(strName, bViewed, iNumPage)
{
	this.strName	= strName;
	this.bViewed	= bViewed;
	this.bHidden	= false;
	this.arrPage	= new Array(iNumPage);
	// Functions
	this.SetPageInfo		= SetPageInfo;
	this.IsChapterViewed	= IsChapterViewed;
}
// Functions of CChapter
function SetPageInfo(iIndex, strName, bViewed, strPageFile, iTocDataIdx)
{
	this.arrPage[iIndex] = new CPage(strName, bViewed, strPageFile, iTocDataIdx);
}
function IsChapterViewed()
{
	if (this.bViewed == true)
	{
		return true;
	}
	for(var i = this.arrPage.length - 1; i >= 0; i--)
	{
		if (this.arrPage[i].bViewed == false)
		{
			return false;
		}
	}
	this.bViewed = true;
	return true;
}
//---------------- End definition of CChapter -------------------

//--------------- Define class Page -----------------------
function CPage(strName, bViewed, strPageFile, iTocDataIdx)
{
	this.strName = strName;
	this.bViewed = bViewed;
	this.bHidden = false;
	this.strPageFile = strPageFile;
	this.iTocDataIdx = iTocDataIdx;
}
//---------------- End definition of CPage -------------------

// The GenerateBookDiv function is not belong to CBook
function GenerateBookDiv()
{
	var strInfo = "";
	var strImg = "";
	var row = 1;
	var book;
	var iCount = 0;
	strInfo += "<TABLE cellspacing=" + iCellSpacing + "><TR>";
	for (var i = 0; i < TOCButtonStyleFrame.arrBook.length; i++)
	{
		book = TOCButtonStyleFrame.arrBook[i];
		if (book.bHidden == true) continue;

		if (iCount > 0 && iCount % COL == 0)
		{
			strInfo += "</TR><TR>";
			row = row + 1;
		}
		strInfo += "<TD><Button id=\"book" + i + "\" style=\"width:" + iButtonWidth + ";height:" + iButtonHeight + "\" onclick=";
		strInfo += "'OnChangeBook("+ i + ")'>";
		if (i == TOCButtonStyleFrame.iViewingBook)
		{
			strImg = "ViewingBook.gif";
		}
		else if (book.IsBookViewed() == true)
		{
			strImg = "ViewedBook.gif";
		}
		else
		{
			strImg = "Book.gif";
		}
		strInfo += "<TABLE><TR><TD align='center' valign='middle' style='width:" + iButtonWidth + "'><Img id='bookimage" + i + "' SRC='" + strImg + "'></TD></TR><TR><TD align='center' valign='middle' style='width:" + (iButtonWidth - 10) + "'>";
		strInfo += TruncLongText(book.strName);
		strInfo += "</TD></TR></TABLE></Button></TD>";
		iCount++;
	}
	strInfo += "</TR></TABLE>";
	if(row > ROW)
	{
		maxScrollDown = (row - ROW)*(iButtonHeight + iCellSpacing);
	}
	else
	{
		maxScrollDown = -1;
	}
	UpdateScrollButtons(row, BOOK_DIV);
	return strInfo;
}

function GenerateChapterDiv(Book)
{
	var strInfo = "";
	var strImg = "";

	var iCurrentBook = TOCButtonStyleFrame.iCurrentBook;
	var iViewingBook = TOCButtonStyleFrame.iViewingBook;
	var bFlag = (iCurrentBook == iViewingBook) ? true : false;
	var iViewingChapter = TOCButtonStyleFrame.iViewingChapter;
	var row = 1;
	var iCount = 0;
	strInfo += "<TABLE cellspacing=" + iCellSpacing + "><TR>";
	for (var i = 0; i < Book.arrChapter.length; i++)
	{
		if (Book.arrChapter[i].bHidden == true) continue;

		if (iCount > 0 && iCount % COL == 0)
		{
			strInfo += "</TR><TR>";
			row = row + 1;
		}
		strInfo += "<TD><Button id=\"chapter" + i + "\" style=\"width:" + iButtonWidth + ";height:" + iButtonHeight + "\" onclick=";
		strInfo += "'OnChangeChapter("+ i + ")'>";
		
		if (bFlag == true)
		{
			if (i == iViewingChapter)								strImg = "ViewingChapter.gif";
			else if (Book.arrChapter[i].IsChapterViewed() == true)	strImg = "ViewedChapter.gif";
			else													strImg = "Chapter.gif";
		}
		else
		{
			if (Book.arrChapter[i].IsChapterViewed() == true)		strImg = "ViewedChapter.gif";
			else													strImg = "Chapter.gif";
		}
		
		strInfo += "<TABLE><TR><TD align='center' valign='middle' style='width:" + iButtonWidth + "'><Img id='chapterimage" + i + "' SRC='" + strImg + "'></TD></TR><TR><TD align='center' valign='middle' style='width:" + (iButtonWidth-10) + "'>";
		strInfo += TruncLongText(Book.arrChapter[i].strName);
		strInfo += "</TD></TR></TABLE></Button></TD>";
		iCount++;
	}
	strInfo += "</TR></TABLE>";
	if(row > ROW)
	{
		maxScrollDown = (row - ROW)*(iButtonHeight + iCellSpacing);
	}
	else
	{
		maxScrollDown = -1;
	}
	UpdateScrollButtons(row, CHAPTER_DIV);
	return strInfo;
}

function GeneratePageDiv(Chapter)
{
	var strInfo = "";
	var strImg = "";
	
	var iCurrentBook = TOCButtonStyleFrame.iCurrentBook;
	var iViewingBook = TOCButtonStyleFrame.iViewingBook;
	var iCurrentChapter = TOCButtonStyleFrame.iCurrentChapter;
	var iViewingChapter = TOCButtonStyleFrame.iViewingChapter;
	var iViewingPage	= TOCButtonStyleFrame.iViewingPage;

	var bFlag = (iCurrentBook == iViewingBook && iCurrentChapter == iViewingChapter) ? true : false;
	var row = 1;
	var iCount = 0;
	strInfo += "<TABLE cellspacing=" + iCellSpacing + "><TR>";
	for (var i = 0; i < Chapter.arrPage.length; i++)
	{
		if (Chapter.arrPage[i].bHidden == true) continue;

		if (iCount > 0 && iCount % COL == 0)
		{
			strInfo += "</TR><TR>";
			row = row + 1;
		}
		strInfo += "<TD><Button style=\"width:" + iButtonWidth + ";height:" + iButtonHeight + "\" onclick=";
		strInfo += "'OnChangePage("+ i + ")'>";

		if (bFlag == true)
		{
			if (i == iViewingPage)							strImg = "ViewingPage.gif";
			else if (Chapter.arrPage[i].bViewed == true)	strImg = "ViewedPage.gif";
			else											strImg = "Page.gif";
		}
		else
		{
			if (Chapter.arrPage[i].bViewed == true)		strImg = "ViewedPage.gif";
			else										strImg = "Page.gif";
		}
		
		strInfo += "<TABLE><TR><TD align='center' valign='middle' style='width:" + iButtonWidth + "'><Img SRC='" + strImg + "'></TD></TR><TR><TD align='center' valign='middle' style='width:" + (iButtonWidth-10) + "'>";
		strInfo += TruncLongText(Chapter.arrPage[i].strName);
		strInfo += "</TD></TR></TABLE></Button></TD>";
		iCount++;
	}
	strInfo += "</TR></TABLE>";
	if(row > ROW)
	{
		maxScrollDown = (row - ROW)*(iButtonHeight + iCellSpacing);
	}
	else
	{
		maxScrollDown = -1;
	}
	UpdateScrollButtons(row, PAGE_DIV);
	return strInfo;
}

function UpdateScrollButtons(row, DivId)
{
	HideAllScrollImage();
	if (row <= ROW)
	{
		//do nothing
	}
	else
	{
		ShowUpDisableImage(true);
		ShowDownImage(true);
	}
	SCROLL_ID = DivId;
}

function OnAllBooksButton()
{
	// Show BookDiv
	var BookDiv = document.getElementById(BOOK_DIV);
	BookDiv.style.visibility = "visible";

	// Hide ChapterDiv
	var ChapterDiv = document.getElementById(CHAPTER_DIV);
	ChapterDiv.style.visibility = "hidden";

	// Hide PageDiv
	var PageDiv			= document.getElementById(PAGE_DIV);
	PageDiv.style.visibility	= "hidden";

	// Hide Book button
	var BookButton = document.getElementById("BookButton");
	BookButton.style.visibility = "hidden";

	// Hide Chapter button
	var ChapterButton = document.getElementById("ChapterButton");
	ChapterButton.style.visibility = "hidden";
	
	// Generate Book buttons
	BookDiv.innerHTML = GenerateBookDiv();

	var div = document.getElementById(BOOK_DIV);
	div.scrollTop = 0;
}

function OnBookButton()
{
	var iCurrentBook = TOCButtonStyleFrame.iCurrentBook;
	OnChangeBook(iCurrentBook);
	var div = document.getElementById(CHAPTER_DIV);
	div.scrollTop = 0;
}

function OnChapterButton()
{
	var iCurrentChapter = TOCButtonStyleFrame.iCurrentChapter;
	OnChangeChapter(iCurrentChapter);
	var div = document.getElementById(PAGE_DIV);
	div.scrollTop = 0;
}

function OnChangeBook(iIndex)
{
	TOCButtonStyleFrame.iCurrentBook = iIndex;
	
	// Hide BookDiv
	var BookDiv = document.getElementById(BOOK_DIV);
	BookDiv.style.visibility = "hidden";

	// Show ChapterDiv
	var ChapterDiv = document.getElementById(CHAPTER_DIV);
	ChapterDiv.style.visibility = "visible";

	// Hide PageDiv
	var PageDiv			= document.getElementById(PAGE_DIV);
	PageDiv.style.visibility	= "hidden";

	// Show Book button
	var BookButton = document.getElementById("BookButton");
	BookButton.style.visibility = "visible";

	// Hide Chapter button
	var ChapterButton = document.getElementById("ChapterButton");
	ChapterButton.style.visibility = "hidden";
	
	// Generate Chapter buttons
	var book = TOCButtonStyleFrame.arrBook[iIndex];
	ChapterDiv.innerHTML = GenerateChapterDiv(book);

	// Set text to Book button
	var BookText = document.getElementById("BookText");
	BookText.innerHTML = TruncLongText(book.strName);
}

function OnChangeChapter(iIndex)
{
	TOCButtonStyleFrame.iCurrentChapter = iIndex;
	// Hide BookDiv
	var BookDiv = document.getElementById(BOOK_DIV);
	BookDiv.style.visibility = "hidden";

	// Hide ChapterDiv
	var ChapterDiv = document.getElementById(CHAPTER_DIV);
	ChapterDiv.style.visibility = "hidden";

	// Show PageDiv
	var PageDiv			= document.getElementById(PAGE_DIV);
	PageDiv.style.visibility	= "visible";

	// Show Chapter button
	var ChapterButton = document.getElementById("ChapterButton");
	ChapterButton.style.visibility = "visible";

	// Generate Page buttons
	var iCurrentBook = TOCButtonStyleFrame.iCurrentBook;
	var book = TOCButtonStyleFrame.arrBook[iCurrentBook];
	PageDiv.innerHTML = GeneratePageDiv(book.arrChapter[iIndex]);

	// Set text to Chapter button
	var ChapterText = document.getElementById("ChapterText");
	ChapterText.innerHTML = TruncLongText(book.arrChapter[iIndex].strName);
}

function OnChangePage(iIndex)
{
	var iCurrentBook = TOCButtonStyleFrame.iCurrentBook;
	var iCurrentChapter = TOCButtonStyleFrame.iCurrentChapter;
	TOCButtonStyleFrame.iCurrentPage = iIndex;

	if (opener)
	{ 
		opener.showPage(TOCButtonStyleFrame.arrBook[iCurrentBook].arrChapter[iCurrentChapter].arrPage[iIndex].strPageFile);
		self.close();
    }
	else
	{
		var frmTOC = document.getElementById("frmTOC");
		if (frmTOC)
		{
			frmTOC.txtTOCPageIdx.value = TOCButtonStyleFrame.arrBook[iCurrentBook].arrChapter[iCurrentChapter].arrPage[iIndex].iTocDataIdx;
			frmTOC.submit();
		}
	}
}

function SetHiddenState(iBookIdx, iChapterIdx, iPageIdx, bState)
{
	TOCButtonStyleFrame.arrBook[iBookIdx].arrChapter[iChapterIdx].arrPage[iPageIdx].bHidden = bState;
}

function SetViewedState(iBookIdx, iChapterIdx, iPageIdx, bState)
{
	TOCButtonStyleFrame.arrBook[iBookIdx].arrChapter[iChapterIdx].arrPage[iPageIdx].bViewed = bState;
}

function InitBookChapterPage()
{
	OnAllBooksButton();
	OnChangeBook(TOCButtonStyleFrame.iViewingBook);
	OnChangeChapter(TOCButtonStyleFrame.iViewingChapter);
}

function OnMouseUpScrollUp()

{
	
	bHoldingScrollUp = false;
}

function OnMouseDownScrollUp()
{
	
	bHoldingScrollUp = true;
	
	var div = document.getElementById(SCROLL_ID);
	if (div)
	{
		div.scrollTop -= iScrollSize;
		if(bIsShowingDownImage == false)
		{
			ShowDownImage(true);
			ShowDownDisableImage(false);
		}
		if(div.scrollTop <= 0)
		{
			ShowUpImage(false);
			ShowUpDisableImage(true);
		}
	}
	
	setTimeout('if(bHoldingScrollUp)LoopScrollUp();', 300);
}

function LoopScrollUp()

{
	
	var div = document.getElementById(SCROLL_ID);
	if (div)
	{
		div.scrollTop -= iScrollSize;
		if(bIsShowingDownImage == false)
		{
			ShowDownImage(true);
			ShowDownDisableImage(false);
		}
		if(div.scrollTop <= 0)
		{
			ShowUpImage(false);
			ShowUpDisableImage(true);
			return;
		}
	}
	
	if(bHoldingScrollUp)
		setTimeout('LoopScrollUp();', 10);
}
function OnMouseUpScrollDown()
{
	
	bHoldingScrollDown = false;
}

function OnMouseDownScrollDown()
{
	
	bHoldingScrollDown = true;
	
	var div = document.getElementById(SCROLL_ID);
	if (div)
	{
		div.scrollTop += iScrollSize;
		if(bIsShowingUpImage == false)
		{
			ShowUpImage(true);
			ShowUpDisableImage(false);
		}
		if(div.scrollTop >= maxScrollDown)
		{
			ShowDownImage(false);
			ShowDownDisableImage(true);
		}
	}

	setTimeout('if(bHoldingScrollDown)LoopScrollDown();', 300);
}

function LoopScrollDown()

{
	
	var div = document.getElementById(SCROLL_ID);
	if (div)
	{
		div.scrollTop += iScrollSize;
		if(bIsShowingUpImage == false)
		{
			ShowUpImage(true);
			ShowUpDisableImage(false);
		}
		if(div.scrollTop >= maxScrollDown)
		{
			ShowDownImage(false);
			ShowDownDisableImage(true);
			return;
		}
	}
	
	if(bHoldingScrollDown)
		setTimeout('LoopScrollDown();', 10);
}

function TruncLongText(strText)
{
	var strTemp = strText;
	if (strText.length > iMaxTextLength)
	{
		strTemp = strText.slice(0, iMaxTextLength - 5);
		strTemp += "...";
	}

	var agt = navigator.userAgent.toLowerCase();
	var is_firefox=(agt.indexOf("firefox")!=-1);
	var iLenOfLine = 12;
	if (is_firefox && strText.length > iLenOfLine)
	{
		var strLeft = strTemp.slice(0, iLenOfLine);
		var strRight = strTemp.slice(iLenOfLine, strText.length);
		strTemp = strLeft + " " + strRight;
	}
	strTemp = "<p class='TSTEXT' style='cursor:default; word-wrap:break-word; width:" + (iButtonWidth-30) + "'>" + strTemp + "</p>";
	return strTemp;
}

function ShowUpImage(bShow)
{
	var UpImg   = document.getElementById('Up');
	if (bShow == false)
	{
		UpImg.style.visibility   = "hidden";
		bIsShowingUpImage = false;
	}
	else
	{
		UpImg.style.visibility   = "visible";
		bIsShowingUpImage = true;
	}
}

function ShowDownImage(bShow)
{
	var DownImg = document.getElementById('Down');
	if (bShow == false)
	{
		DownImg.style.visibility = "hidden";
		bIsShowingDownImage = false;
	}
	else
	{
		DownImg.style.visibility = "visible";
		bIsShowingDownImage = true;
	}
}

function ShowUpDisableImage(bShow)
{
	var UpDisableImg   = document.getElementById('UpDisable');
	if (bShow == false)
	{
		UpDisableImg.style.visibility   = "hidden";
	}
	else
	{
		UpDisableImg.style.visibility   = "visible";
	}
}

function ShowDownDisableImage(bShow)
{
	var DownDisableImg = document.getElementById('DownDisable');
	if (bShow == false)
	{
		DownDisableImg.style.visibility = "hidden";
	}
	else
	{
		DownDisableImg.style.visibility = "visible";
	}
}

function HideAllScrollImage()
{
	ShowUpImage(false);
	ShowDownImage(false);
	ShowUpDisableImage(false);
	ShowDownDisableImage(false);
}
