// #################################################################################
// #    File Name   : jpreadtoc.js
// #    Project     : JPREAD
// #    System      : On-Line Japanese Reading Material
// #    Purpose     : Generate Dynamic Table of Contents
// #    Function    : JPREAD Control
// #    Medel       : This programe is based on the Document Object Model (DOM)
// #    Language    : JavaScript (Client Side Scripting. ver: 5.x)
// #    Include     : jpread.js
// #    Date Issued : 2002/03/27(Wed)-16:34:21
// #    Base URL    : http://www.all.co.nz/
// #    Location    : js/
// #    Usage       :
// #    Browsers    : IE5.x and above
// #    Requirement : <BODY ID='oBody'>
// #    Restriction : None
// #    Author      : Hiroto Sekine (Able LL Systems Dpt. CHC, NZL)
// #    Copyright   : (C) 2002 Southern Cross Virtual Co., Ltd. All Rights Reserved.
// #    Contact     : info@all.co.nz
// #    Tab Stop    : 4 (Suitable TAB stop size to view this Source Code)
// # ===============================================================================
// #    ** Revision **
// # Date   Description                                             Sign      Mark
// # ------+-------------------------------------------------------+---------+------
// #
// #################################################################################
@set @DEBUG = 9 // Program Debug Flag: ON(=1)/OFF(=0)
// ###########################################################################
// #                            << NOTICE >>                                 #
// # THIS PROGRAM CODE BELONGS TO SOUTHERN CROSS VIRTUAL CO., LTD. IT IS     #
// # CONSIDERED A TRADE SECRET AND IS NOT TO BE DIVULUGED OR USED BY PARTIES #
// # WHO HAVE NOT RECEIVED WRITTEN AUTHORIZATION FROM THE OWNER.             #
// # ----------------------------------------------------------------------- #
// #                            << 通  知 >>                                 #
// # 本プログラムはSOUTHERN CROSS VIRTUAL CO., LTD.の財産です。本プログラム  #
// # はトレード・シークレットとみなされ、当該権利者の書面による許可なくして、#
// # 漏洩または使用を禁じます。                                              #
// ###########################################################################

var FSUFFIX = "hr.htm"  ;   // HTML file without Kanji Ruby
var B_CORE0 = "general" ;
var B_CORE1 = "lesson"  ;
var B_CORE2 = "grammar" ;
var B_CORE3 = "append"  ;
var B_CORE4 = "lesson/c4/"  ;
var B_CORE5 = "append"  ;
var WD_PATH = "http://www.all.co.nz/word/";
@if (@DEBUG == 9)
var WH_BASE = ""; // Base Directory
var WH_ADD1 = "../word";  // Local Run1
var WH_ADD2 = ""; // Local Run2
@else
var WH_BASE = "http://www.all.co.nz/";  // Base Directory
var WH_ADD1 = "../../word"; // Host Run1
var WH_ADD2 = "support/lesson/";  // Host Run2
@end
var WH_PATH = new Array(8);
WH_PATH[0] = WH_ADD1 ;              // Word Analyzer
WH_PATH[1] = WH_ADD2 ;    // General
WH_PATH[2] = WH_ADD2 ;    // Main Lectures
WH_PATH[3] = WH_ADD2 ;    // Grammar
WH_PATH[4] = WH_ADD2 ;    // Appendix
WH_PATH[5] = WH_ADD2 ;    // Key Lesson
WH_PATH[6] = WH_ADD2 ;    // JLP-TEST (Q)
WH_PATH[7] = WH_ADD2 ;    // JLP-TEST (L)

// ******************************************************************
// *    Custom Object Constructors Definition
// ******************************************************************

function TocPack(url, cap, mod, cnd, msg, pvp, sum){   // TOC List Array Object
    this.URL    = url ; // Link URL(format: 'body' + FSUFFIX)
    this.Cap    = cap ; // Link Caption (format: String)
    this.Mod    = mod ; // Modified Date (format: "R"/"U" + yyyy/mm/dd(ddd)-hh:mm:ss) "R": Released, "U": Updated
    this.Cnd    = cnd ; // Page Status (true: Avail, false: Not Avail)
    this.Msg    = msg ; // Message from the tutor)
    this.Pvp    = pvp ; // Page Views / Page
    this.Sum    = sum ; // Page Views / Total
}
function ListPack(id, list, len){       // TOC Array Object
    this.ID     = id ;                  // <OL> tabd ID
    this.List   = list ;                // Pointer to a TOC Object
    this.Len    = len ;                 // TOC Object Size
}

// ******************************************************************
// *    Custom Methods for Custom Objects Constructors
// ******************************************************************

var BODY_LEN =  7;  // HTML file name body length(format: ?yymmdd)
var CAPS_LEN = 20;  // List title top 20 letter as 'option' of <select> tag
var STAT_LEN =  1;  // 'U'(Updated),'R'(Released) or 'N'(Not available)
var DATE_LEN = 10;  // format: yyyy/mm/dd
var TIME_LEN =  8;  // format: hh:mm:ss
var DATM_LEN = 24;  // format: yyyy/mm/dd(ddd)-hh:mm:ss

function getUrlBody(sp, ep){
    return this.URL.substr( sp, ep );       // get URL body
}
function getSelOpt(){
    return this.Cap.substr( 0, CAPS_LEN);   // get Caption haed
}
function getModStatus(){
    return this.Mod.substr( 0, STAT_LEN);   // get "U","R" or "N"
}
function getModDate(){
    return this.Mod.substr( 1, DATE_LEN);   // get yyyy/mm/dd
}
function getModTime(){
    return this.Mod.substr(17, TIME_LEN);   // get hh:mm:ss
}
function getModDateTime(){
    return this.Mod.substr(1, DATM_LEN);    // yyyy/mm/dd(ddd)-hh:mm:ss
}
function getTutorMsg(){
    return this.Msg;                        // Tutor's Message
}
function getPVPVal(){
    return this.Pvp;                        // PVP Value
}
function getPVPSum(){
    return this.Sum;                        // PVP Sum Value
}

with(TocPack){
    prototype.UrlBody = getUrlBody;
    prototype.SelOpt  = getSelOpt;
    prototype.Mods    = getModStatus;
    prototype.Date    = getModDate;
    prototype.Time    = getModTime;
    prototype.DT      = getModDateTime;
    prototype.MSG     = getTutorMsg;
    prototype.PVP     = getPVPVal;
    prototype.SUM     = getPVPSum;
}

function getObjListID(){
    return this.ID;                 // get TOC ID
}
function getObjList(){
    return this.List;               // get Pointer to a TOC
}
function getObjListLen(){
    return this.Len;                // get a TOC Object size
}

with(ListPack){
    prototype.ID    = getObjListID;
    prototype.OLIST = getObjList;
    prototype.OLLEN = getObjListLen;
}

// ******************************************************************
// *    TOC0 (General) Data List Definition
// ******************************************************************

function makeTOC0(){
    //  ID     Caption
    var C01 = "オンライン日本語形容詞(イ)活用アナライザー C (v0.8w)"; // A
    var C02 = "オンライン日本語形容詞(イ)活用アナライザー E (v0.8w)"; // B
    var C03 = "オンライン日本語形容詞(イ)活用アナライザー J (v0.8w)"; // C
    var C04 = "オンライン日本語形容詞(ナ)活用アナライザー C (v0.3w)"; // D
    var C05 = "オンライン日本語形容詞(ナ)活用アナライザー E (v0.3w)"; // E
    var C06 = "オンライン日本語形容詞(ナ)活用アナライザー J (v0.3w)"; // F
    var C07 = "オンライン日本語動詞活用アナライザー C (v1.0w)";       // G
    var C08 = "オンライン日本語動詞活用アナライザー E (v1.0w)";       // H
    var C09 = "オンライン日本語動詞活用アナライザー J (v1.0w)";       // I

    var i = 0 ;         //    URL              Cap  Released/Modified Info.
    this[i++] = new TocPack( "adjective.htm" , C01, "U2002/04/09(Tsu)-14:28:55", true, "",  3,  0 ) ; // A
    this[i++] = new TocPack( "adjectivee.htm", C02, "U2002/11/10(Sun)-17:47:24", true, "",  0,  0 ) ; // B
    this[i++] = new TocPack( "adjectivej.htm", C03, "U2004/10/24(Sun)-21:40:01", true, "",  0,  0 ) ; // C
    this[i++] = new TocPack( "adjverb.htm"   , C04, "U2002/04/09(Tsu)-14:28:55", true, "",  1,  0 ) ; // D
    this[i++] = new TocPack( "adjverbe.htm"  , C05, "U2002/04/09(Tsu)-14:28:55", true, "",  0,  0 ) ; // E
    this[i++] = new TocPack( "adjverbj.htm"  , C06, "U2002/04/09(Tsu)-14:28:55", true, "",  1,  0 ) ; // F
    this[i++] = new TocPack( "verbs.htm"     , C07, "U2002/04/09(Tsu)-14:28:55", true, "", 51,  0 ) ; // G
    this[i++] = new TocPack( "verbse.htm"    , C08, "U2002/04/09(Tsu)-14:28:55", true, "",  6,  0 ) ; // H
    this[i++] = new TocPack( "verbsj.htm"    , C09, "U2002/04/09(Tsu)-14:28:55", true, "",  1,  0 ) ; // I
    this.length = i ;
}

// ******************************************************************
// *    TOC1 (General) Data List Definition
// ******************************************************************

function makeTOC1(){
    //  ID     Caption
    var C01 = " Writing and Pronunciation" ;
    var C02 = " Characteristics Of Japanese Grammar" ;
    var C03 = " Useful Daily Expressions" ;
    var C04 = " <span class='NAME'>KEIGO</span> (Polite Language)" ;

    var i = 0;          //    URL                   Cap Released/Modified Info.
    this[i++] = new TocPack( "general01" + FSUFFIX, C01, "U2002/04/09(Tsu)-14:28:55", true, "", 7, 0 ) ;
    this[i++] = new TocPack( "general02" + FSUFFIX, C02, "U2002/04/09(Tsu)-14:28:55", true, "", 3, 0 ) ;
    this[i++] = new TocPack( "general03" + FSUFFIX, C03, "U2004/12/08(Wed)-19:53:56", true, "", 1, 0 ) ;
    this[i++] = new TocPack( "general04" + FSUFFIX, C04, "U2002/04/09(Tsu)-14:28:55", true, "", 3, 0 ) ;
    this.length = i;
}

// ******************************************************************
// *    TOC2 (Lesson) Data List Definition
// ******************************************************************

function makeTOC2(){
    //  ID     Caption
    var C01 = "Introductions" ;
    var C02 = "Address and Telephone Number" ;
    var C03 = "Day and Time" ;
    var C04 = "How Much?" ;
    var C05 = "Counting Objects" ;
    var C06 = "Going and Coming" ;
    var C07 = "Going by Taxi" ;
    var C08 = "Existence of People and Things" ;
    var C09 = "Place, Location" ;
    var C10 = "Tickets Bought" ;
    var C11 = "Reading Review" ;
    var C12 = "Telephoning" ;
    var C13 = "Delicious Cakes" ;
    var C14 = "Yesterday's Enjoyable <span class='NAME'>Kabuki</span>" ;
    var C15 = "Giving and Receiving" ;
    var C16 = "Asking Preferences" ;
    var C17 = "Invitation to a Party" ;
    var C18 = "Ownership and Events" ;
    var C19 = "Doing This and That" ;
    var C20 = "Requests and Orders" ;
    var C21 = "Having Things Done" ;
    var C22 = "Public Transportation" ;
    var C23 = "Asking Permission" ;
    var C24 = "Refusal" ;
    var C25 = "Now in Progress" ;
    var C26 = "Reading Review" ;
    var C27 = "Present Condition" ;
    var C28 = "Expressing Preferences" ;
    var C29 = "Dining Out" ;
    var C30 = "Reading Review" ;

    var M06 = "Added 1 photo Rich-Msg-Box for 東京駅(2). 2006/09/04(Mon)-19:02:55";
    var M09 = "Added 2 photos Rich-Msg-Box for 改札口、交番. 2006/09/04(Mon)-19:16:54";
    var M10 = "Added 1 photo Rich-Msg-Box for 歌舞伎. 2006/09/04(Mon)-17:04:14<br />Modified 見る(see)⇒観る(watch) 2006/09/04(Mon)-17:13:15";
    var M11 = "Added 2 photos Rich-Msg-Box for 新幹線、喫茶店. 2006/09/04(Mon)-19:54:20";
    var M14 = "Added 1 photo Rich-Msg-Box for 歌舞伎. 2006/09/04(Mon)-17:19:06<br />Modified 見る(see)⇒観る(watch) 2006/09/04(Mon)-17:22:06";
    var M16 = "Added 1 photo Rich-Msg-Box for 改札口. 2006/09/04(Mon)-17:56:04";

    var i = 0;          //    URL                  Cap  Released/Modified Info.
    this[i++] = new TocPack( "lesson01" + FSUFFIX, C01, "U2002/04/09(Tsu)-14:28:55", true, "", 4, 7 ) ;
    this[i++] = new TocPack( "lesson02" + FSUFFIX, C02, "U2004/10/24(Sun)-18:31:33", true, "", 1, 2 ) ;
    this[i++] = new TocPack( "lesson03" + FSUFFIX, C03, "U2004/10/24(Sun)-18:42:56", true, "", 0, 1 ) ;
    this[i++] = new TocPack( "lesson04" + FSUFFIX, C04, "U2004/10/24(Sun)-19:37:07", true, "", 1, 2 ) ;
    this[i++] = new TocPack( "lesson05" + FSUFFIX, C05, "U2004/10/27(Wed)-23:24:26", true, "", 0, 2 ) ;
    this[i++] = new TocPack( "lesson06" + FSUFFIX, C06, "U2006/09/04(Mon)-19:02:55", true, M06,0, 0 ) ;
    this[i++] = new TocPack( "lesson07" + FSUFFIX, C07, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson08" + FSUFFIX, C08, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson09" + FSUFFIX, C09, "U2006/09/04(Mon)-19:16:54", true, M09,0, 0 ) ;
    this[i++] = new TocPack( "lesson10" + FSUFFIX, C10, "U2006/09/04(Mon)-17:13:15", true, M10,0, 1 ) ;
    this[i++] = new TocPack( "lesson11" + FSUFFIX, C11, "U2006/09/04(Mon)-19:54:20", true, M11,0, 3 ) ;
    this[i++] = new TocPack( "lesson12" + FSUFFIX, C12, "U2002/04/09(Tsu)-14:28:55", true, "", 1, 3 ) ;
    this[i++] = new TocPack( "lesson13" + FSUFFIX, C13, "U2002/06/15(Sat)-14:01:11", true, "", 0, 1 ) ;
    this[i++] = new TocPack( "lesson14" + FSUFFIX, C14, "U2006/09/04(Mon)-17:22:06", true, M14,1, 2 ) ;
    this[i++] = new TocPack( "lesson15" + FSUFFIX, C15, "U2001/09/04(Mon)-17:56:04", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson16" + FSUFFIX, C16, "U2006/09/04(Mon)-17:56:04", true, M16,0, 0 ) ;
    this[i++] = new TocPack( "lesson17" + FSUFFIX, C17, "U2002/04/17(Wed)-21:57:46", true, "", 0, 1 ) ;
    this[i++] = new TocPack( "lesson18" + FSUFFIX, C18, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
    this[i++] = new TocPack( "lesson19" + FSUFFIX, C19, "U2004/10/20(Wed)-21:51:43", true, "", 0, 2 ) ;
    this[i++] = new TocPack( "lesson20" + FSUFFIX, C20, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson21" + FSUFFIX, C21, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson22" + FSUFFIX, C22, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
    this[i++] = new TocPack( "lesson23" + FSUFFIX, C23, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson24" + FSUFFIX, C24, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson25" + FSUFFIX, C25, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson26" + FSUFFIX, C26, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson27" + FSUFFIX, C27, "U2002/11/23(Sat)-12:15:15", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson28" + FSUFFIX, C28, "U2002/11/23(Sat)-12:32:37", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson29" + FSUFFIX, C29, "U2007/03/19(Mon)-15:56:55", true, "", 0, 0 ) ;
    this[i++] = new TocPack( "lesson30" + FSUFFIX, C30, "R2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
    this.length = i;
}

// ******************************************************************
// *    TOC3 (Grammar) Data List Definition
// ******************************************************************

function makeTOC3(){
  //  ID     Caption
  var C01 = " 1- 5: Identifying People and Things" ;
  var C02 = " 6- 7: に/へ verb" ;
  var C03 = " 8- 9: Existence of People and Things" ;
  var C04 = "10-12: 〜を verb/〜に〜を verb" ;
  var C05 = "13-14: Adjectives" ;
  var C06 = "15　　: Giving and Receiving" ;
  var C07 = "16-17: Inviting and Offering to Do Something" ;
  var C08 = "18　　: Ownership and Events" ;
  var C09 = "19-27: Model Verb Conjugation" ;
  var C10 = "28-30: Desire, Preference, Like and Dislike" ;
  var C11 = "Basic Sentence Patterns (Lectures & Quiz)" ;

  var SPSPATH = "sps/CHP0101";

  var i = 0 ;         //    URL                   Cap  Released/Modified Info.
  this[i++] = new TocPack( "grammar01" + FSUFFIX, C01, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar02" + FSUFFIX, C02, "U2002/11/10(Sun)-17:47:24", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar03" + FSUFFIX, C03, "U2004/10/24(Sun)-21:40:01", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar04" + FSUFFIX, C04, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar05" + FSUFFIX, C05, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar06" + FSUFFIX, C06, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar07" + FSUFFIX, C07, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar08" + FSUFFIX, C08, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar09" + FSUFFIX, C09, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 1 ) ;
  this[i++] = new TocPack( "grammar10" + FSUFFIX, C10, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 4 ) ;
  this[i++] = new TocPack( SPSPATH     + ".htm" , C11, "U2007/04/25(Wed)-19:50:22", true, "", 0, 4 ) ;
  this.length = i ;
}

function makeRomanNum(){
  var i = 0;
  this[i++] = "T" ;
  this[i++] = "U" ;
  this[i++] = "V" ;
  this[i++] = "W" ;
  this[i++] = "X" ;
  this[i++] = "Y" ;
  this[i++] = "Z" ;
  this[i++] = "[" ;
  this[i++] = "\" ;
  this[i++] = "]" ;
  this[i++] = "XI" ;
  this.length = i ;
}

// ******************************************************************
// *    TOC4 (Appendices) Data List Definition
// ******************************************************************

function makeTOC4(){
  //  ID     Caption
  var C01 = "Particles" ;
  var C02 = "Interrogatives" ;
  var C03 = "Sentence Patterns" ;
  var C04 = "Adjectives" ;
  var C05 = "Verb Conjugations" ;
  var C06 = "'<span class=\"NAME\">Ko-So-A-Do</span>' Structure" ;
  var C07 = "Country, Nationality, Language" ;
  var C08 = "Common Japanese Names" ;
  var C09 = "Counters" ;
  var C10 = "Extent, Frequency, Quantity" ;
  var C11 = "Time Expressions" ;
  var C12 = "Parts of the Face and Body" ;
  var C13 = "How to use Particles 「に」and 「で」" ;
  var C14 = "Japanese Language Proficiency Test Words(3,4)" ;
  var C15 = "How JP Words can be modified by other Speech Words" ;
  var C16 = "Japanese <em>Kanji</em> Characters List" ;
  var C17 = "Japanese Language Proficiency Test Placement" ;
  var C18 = "How to read <em>Kanji</em>? On-reading, or KUN-Reading?" ;

  var H00 = "Japanese <em>Kanji</em> Characters List Help" ;
  var H01 = "Japanese <em>Kanji</em> Note" ;

  var M01 = "Added some extended descriptions for the particles. 2006/10/11(Wed)-00:23:57";
  var M02 = "Added 1 photo Rich-Msg-Box for 歌舞伎. 2006/09/04(Mon)-16:42:56";
  var M03 = "Added 1 photo Rich-Msg-Box for 歌舞伎. 2006/09/04(Mon)-16:43:52";
  var M04 = "Added 2 entries 厳格、頑強. 2006/09/08(Fri)-01:02:37";
  var M13 = "Added 1 photo Rich-Msg-Box for ねんがじょう.2006/09/10(Sun)-21:45:00<br />Added 4 photos Rich-Msg-Box for 「に」「で」2006/10/10(Tsu)-23:47:06";
  var M14 = "Updated the HELP information (click [HELP] button to view it. however it is still under construction.) 2006/09/26(Tsu)-03:55:29 ";
  var M16 = "Added 12 level-3 Kanji. 2007/01/11(Thu)-00:54:07";

  var i = 0;          //    URL                  Cap   Released/Modified Info.
  this[i++] = new TocPack( "append01" + FSUFFIX, C01, "U2006/10/11(Wed)-00:24:08", true, M01,  1,  2 ) ;  // A
  this[i++] = new TocPack( "append02" + FSUFFIX, C02, "U2006/09/04(Mon)-16:42:56", true, M02,  0,  1 ) ;  // B
  this[i++] = new TocPack( "append03" + FSUFFIX, C03, "U2006/09/04(Mon)-16:43:52", true, M03,  0,  0 ) ;  // C
  this[i++] = new TocPack( "append04" + FSUFFIX, C04, "U2006/09/08(Fri)-01:02:37", true, M04,  0,  2 ) ;  // D
  this[i++] = new TocPack( "append05" + FSUFFIX, C05, "R2006/07/22(Sat)-13:14:33", true, "",   0,  0 ) ;  // E
  this[i++] = new TocPack( "append06" + FSUFFIX, C06, "U2004/10/24(Sun)-19:56:57", true, "",   0,  1 ) ;  // F
  this[i++] = new TocPack( "append07" + FSUFFIX, C07, "U2004/03/14(Sun)-14:20:32", true, "",   0,  0 ) ;  // G
  this[i++] = new TocPack( "append08" + FSUFFIX, C08, "U2002/04/09(Tsu)-14:28:55", true, "",   0,  0 ) ;  // H
  this[i++] = new TocPack( "append09" + FSUFFIX, C09, "U2002/06/07(Fri)-09:30:47", true, "",   0,  2 ) ;  // I
  this[i++] = new TocPack( "append10" + FSUFFIX, C10, "U2002/04/09(Tsu)-14:28:55", true, "",   0,  0 ) ;  // J
  this[i++] = new TocPack( "append11" + FSUFFIX, C11, "U2004/10/24(Sun)-19:16:26", true, "",   0,  0 ) ;  // K
  this[i++] = new TocPack( "append12" + FSUFFIX, C12, "U2002/04/09(Tsu)-14:28:55", true, "",   0,  0 ) ;  // L
  this[i++] = new TocPack( "append13" + FSUFFIX, C13, "R2006/09/10(Sun)-21:45:00", true, M13,  1, 13 ) ;  // M
  this[i++] = new TocPack( "append14" + FSUFFIX, C14, "U2006/10/10(Tsu)-23:47:06", true, M14,  1,  3 ) ;  // N
  this[i++] = new TocPack( "append15" + FSUFFIX, C15, "R2006/10/10(Tsu)-13:16:40", true, "",   0,  0 ) ;  // O
  this[i++] = new TocPack( "append16" + FSUFFIX, C16, "U2007/01/11(Thu)-00:51:43", true, M16,  5,  1 ) ;  // P
  this[i++] = new TocPack( "append17" + FSUFFIX, C17, "R2006/12/26(Tsu)-22:36:14", true, "",  29, 24 ) ;  // Q
  this[i++] = new TocPack( "append18" + FSUFFIX, C18, "R2006/12/17(Sun)-17:52:25", true, "",   0,  0 ) ;  // R
  this[i++] = new TocPack( "kanjihelp" + ".htm", H00, "R2009/01/11(Sun)-20:04:09", false, "",  0,  0 ) ;
  this[i++] = new TocPack( "kanjinote" + ".htm", H01, "R2006/12/17(Sun)-17:52:25", false,"",   0,  0 ) ;
  this.length = i;
}

// ******************************************************************
// *    TOC5 (Index Of Key Lessons) Data List Definition
// ******************************************************************

function makeTOC5(){
  //  ID     Caption
  var C01 = "How to make verb potential form." ;
  var C02 = "Abstract number 0-20." ;
  var C03 = "Abstract number 20-100." ;
  var C04 = "Days of the week." ;
  var C05 = "Days of the month." ;
  var C06 = "Month." ;
  var C07 = "Abstract number 100-." ;
  var C08 = "Decimals." ;
  var C09 = "Fractions." ;
  var C10 = "Counters for Sheet and Stick." ;
  var C11 = "Japanese traditional counting 1-10." ;
  var C12 = "Verb conjugation form (1)." ;
  var C13 = "Verb conjugation form (2)." ;
  var C14 = "Verb conjugation form (3)." ;
  var C15 = "Verb conjugation form (4)." ;
  var C16 = "イ-Adjective conjugation form (1)." ;
  var C17 = "ナ-Adjective conjugation form (1)." ;
  var C18 = "イ-Adjective conjugation form (2)." ;
  var C19 = "ナ-Adjective conjugation form (2)." ;
  var C20 = "Verb conjugation form (5)." ;
  var C21 = "Verb conjugation form (6) Let's do -/Won't you do -." ;
  var C22 = "Verb conjugation form (7) Let's do -/Shall I(we) do -." ;
  var C23 = "Verb conjugation form (8) -て(で) Form (1)." ;
  var C24 = "Verb conjugation form (9) -て(で) Form (2)." ;
  var C25 = "Verb conjugation form (10) -て(で) Form (3)." ;
  var C26 = "Verb conjugation form (11) -て(で) Form (4)." ;
  var C27 = "Verb conjugation form (12) -て(で) Form (5)." ;
  var C28 = "Verb conjugation form (13) -て(で)いる Form (1)." ;
  var C29 = "Verb conjugation form (14) -て(で)いる Form (2)." ;
  var C30 = "Noun (1): Family Members." ;
  var C31 = "Verb conjugation form (15) -たい Form (1)." ;
  var C32 = "Adjectives(イ & ナ) conjugation form (3)." ;
  var C33 = "Sentence Pattern (1): N1 is N2/Is N1 N2?/Yes/No." ;
  var C34 = "Particle (1) は: as Topic Marker." ;
  var C35 = "Particle (2) か: as Question Marker." ;
  var C36 = "Grammar (1): Omission of Topic." ;
  var C37 = "Particle (3) へ/に: as Direction Marker." ;
  var C38 = "Particle (4) に/は: as Place Marker." ;
  var C39 = "Grammar (2): Japanese Verb Tense Feature." ;
  var C40 = "Particle (5) に: as Place Marker." ;
  var C41 = "Particle (6) が: as Subject Marker." ;
  var C42 = "Grammar (3) Verb ある/いる." ;
  var C43 = "Verb conjugation form (15) Basic 4 Forms." ;
  var C44 = "Particle (7) を: as Direct Object Marker." ;
  var C45 = "Particle (8) に: as Indirect Object Marker." ;
  var C46 = "Grammar (4) Adjectives as Noun Modifier." ;
  var C47 = "Grammar (5) Adjectives as Predicate." ;
  var C48 = "Grammar (6) あげる/くれる as 'GIVE'." ;
  var C49 = "Grammar (7) How to make Verb '-しょう' Form." ;
  var C50 = "Grammar (8) Inviting and Suggesting." ;
  var C51 = "Grammar (9) Offering to do something." ;
  var C52 = "Grammar (10) Ownership and Events." ;
  var C53 = "Verb conjugation form (16) -て(で) Form (3)." ;
  var C54 = "Verb conjugation form (17) -ない Form." ;
  var C55 = "Particle (9) が: for 'Like'." ;
  var C56 = "Particle (10) が: for わかる." ;
  var C57 = "Grammar (11) The usase of Verb '-たい' Form." ;

  var i = 0;          //    URL                            Cap   Released/Modified Info.
  this[i++] = new TocPack( "lesson02"  + FSUFFIX + "#NM1", C01, "R2002/04/17(Wed)-16:30:08", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson02"  + FSUFFIX + "#NM2", C02, "R2002/11/08(Fri)-21:41:18", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson03"  + FSUFFIX + "#NM1", C03, "R2002/11/10(Sun)-19:56:29", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson03"  + FSUFFIX + "#NM2", C04, "R2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson03"  + FSUFFIX + "#NM3", C05, "R2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson03"  + FSUFFIX + "#NM4", C06, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson04"  + FSUFFIX + "#NM1", C07, "U2003/08/22(Fri)-17:11:48", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson04"  + FSUFFIX + "#NM2", C08, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson04"  + FSUFFIX + "#NM3", C09, "U2002/06/07(Fri)-09:30:47", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson05"  + FSUFFIX + "#NM1", C10, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson05"  + FSUFFIX + "#NM2", C11, "U2002/06/07(Fri)-00:10:06", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson06"  + FSUFFIX + "#NM1", C12, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson08"  + FSUFFIX + "#NM1", C13, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson10"  + FSUFFIX + "#NM1", C14, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson12"  + FSUFFIX + "#NM1", C15, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson13"  + FSUFFIX + "#NM1", C16, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson13"  + FSUFFIX + "#NM2", C17, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson14"  + FSUFFIX + "#NM1", C18, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson14"  + FSUFFIX + "#NM2", C19, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson15"  + FSUFFIX + "#NM1", C20, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson16"  + FSUFFIX + "#NM1", C21, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson17"  + FSUFFIX + "#NM1", C22, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson19"  + FSUFFIX + "#NM1", C23, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson20"  + FSUFFIX + "#NM1", C24, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson22"  + FSUFFIX + "#NM1", C25, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson23"  + FSUFFIX + "#NM1", C26, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson24"  + FSUFFIX + "#NM1", C27, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson25"  + FSUFFIX + "#NM1", C28, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson27"  + FSUFFIX + "#NM1", C29, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson27"  + FSUFFIX + "#NM2", C30, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson28"  + FSUFFIX + "#NM1", C31, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "lesson28"  + FSUFFIX + "#NM2", C32, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar01" + FSUFFIX + "#NM1", C33, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar01" + FSUFFIX + "#NM2", C34, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar01" + FSUFFIX + "#NM3", C35, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar01" + FSUFFIX + "#NM4", C36, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar02" + FSUFFIX + "#NM1", C37, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar02" + FSUFFIX + "#NM2", C38, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar02" + FSUFFIX + "#NM3", C39, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar03" + FSUFFIX + "#NM1", C40, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar03" + FSUFFIX + "#NM2", C41, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar03" + FSUFFIX + "#NM3", C42, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar04" + FSUFFIX + "#NM1", C43, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar04" + FSUFFIX + "#NM2", C44, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar04" + FSUFFIX + "#NM3", C45, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar05" + FSUFFIX + "#NM1", C46, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar05" + FSUFFIX + "#NM2", C47, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar06" + FSUFFIX + "#NM1", C48, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar07" + FSUFFIX + "#NM1", C49, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar07" + FSUFFIX + "#NM2", C50, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar07" + FSUFFIX + "#NM3", C51, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar08" + FSUFFIX + "#NM1", C52, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar09" + FSUFFIX + "#NM1", C53, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar09" + FSUFFIX + "#NM2", C54, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar10" + FSUFFIX + "#NM1", C55, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar10" + FSUFFIX + "#NM2", C56, "U2003/08/18(Mon)-03:53:01", true, "", 0, 0 ) ;
  this[i++] = new TocPack( "grammar10" + FSUFFIX + "#NM3", C57, "U2002/04/09(Tsu)-14:28:55", true, "", 0, 0 ) ;
  this.length = i;
}

function makeAlpha(){
  var i = 0;
  this[i++] = "A";
  this[i++] = "B";
  this[i++] = "C";
  this[i++] = "D";
  this[i++] = "E";
  this[i++] = "F";
  this[i++] = "G";
  this[i++] = "H";
  this[i++] = "I";
  this[i++] = "J";
  this[i++] = "K";
  this[i++] = "L";
  this[i++] = "M";
  this[i++] = "N";
  this[i++] = "O";
  this[i++] = "P";
  this[i++] = "Q";
  this[i++] = "R";
  this[i++] = "S";
  this[i++] = "T";
  this[i++] = "U";
  this[i++] = "V";
  this[i++] = "W";
  this[i++] = "X";
  this[i++] = "Y";
  this[i++] = "Z";
  this.length = i;
}

// ******************************************************************
// *    TOC6 (JLPT) 日本語能力試験関連ページ
// ******************************************************************

function makeTOC6(){
  var B01 = "c4/Particle401.htm";
  var B02 = "c4/Particle402.htm";
  var B03 = "c4/inflect401.htm";
  var B04 = "c4/TwoVerbs401.htm";
  var B05 = "c4/sentencemake401.htm";
  var B06 = "c4/sentencemake402.htm";
  var B07 = "c4/sentencemake403.htm";
  var B08 = "c4/FindAdjective401.htm";
  var B09 = "lvl/JLPKANJIREAD001.htm";
  var B10 = "lvl/JLPWORDS001.htm";
  var B11 = "lvl/JLPWORDS002.htm";
  var B12 = "c4/unscramble2.htm";
  var B13 = "c1/kanjicross1.htm";
  var B14 = "c4/Particle301.htm";

  //  ID     Caption
  var C01 = "日本語能力試験−練習問題集4級[文法編:助詞1]：(全80問、20問/回)" ;  // A
  var C02 = "日本語能力試験−練習問題集4級[文法編:助詞2]：(全30問、20問/回)" ;  // B
  var C03 = "日本語能力試験−練習問題集4級[文法編:動詞1]：(全40問、20問/回)" ;  // C
  var C04 = "日本語能力試験−練習問題集4級[文法編:動詞2]：(全20問、20問/回)" ;  // D
  var C05 = "日本語能力試験−練習問題集4級[文法編:作文1]" ;                     // E
  var C06 = "日本語能力試験−練習問題集4級[文法編:作文2]" ;                     // F
  var C07 = "日本語能力試験−練習問題集4級[文法編:作文3]" ;                     // G
  var C08 = "日本語能力試験−練習問題集4級[語彙編:形容詞1]：(全24問、10問/回)" ;// H
  var C09 = "日本語能力試験−レベル判定1-4級[漢字読み1](全120問、40問/回)" ;    // I
  var C10 = "日本語能力試験−レベル判定1-4級[単語用法1](全80問、40問/回)" ;     // J
  var C11 = "日本語能力試験−レベル判定1-4級[単語用法2](全120問、40問/回)" ;    // K
  var C12 = "ひらがなテーブル・ゲーム" ;                                        // L
  var C13 = "Interactive Kanji Crossword & 4-Kanji Idiom Game [1] (JLP-L2)" ;   // M
  var C14 = "日本語能力試験−練習問題集3級[文法編:助詞1]：(全80問、20問/回)" ;  // N

  var i = 0 ;         //   URL  Cap  Released/Modified Info.
  this[i++] = new TocPack( B01, C01, "R2006/12/31(Sun)-16:16:22", true, "", 14, 0 ) ; // A
  this[i++] = new TocPack( B02, C02, "R2006/12/31(Sun)-16:16:22", true, "",  8, 0 ) ; // B
  this[i++] = new TocPack( B03, C03, "R2006/12/31(Sun)-16:16:22", true, "",  6, 0 ) ; // C
  this[i++] = new TocPack( B04, C04, "R2006/12/31(Sun)-16:16:22", true, "",  5, 0 ) ; // D
  this[i++] = new TocPack( B05, C05, "R2006/12/31(Sun)-16:16:22", true, "",  5, 0 ) ; // E
  this[i++] = new TocPack( B06, C06, "R2006/12/31(Sun)-16:16:22", true, "",  3, 0 ) ; // F
  this[i++] = new TocPack( B07, C07, "R2006/12/31(Sun)-16:16:22", true, "",  5, 0 ) ; // G
  this[i++] = new TocPack( B08, C08, "R2006/12/31(Sun)-16:16:22", true, "", 10, 0 ) ; // H
  this[i++] = new TocPack( B09, C09, "R2006/12/31(Sun)-16:16:22", true, "",  6, 0 ) ; // I
  this[i++] = new TocPack( B10, C10, "R2006/12/31(Sun)-16:16:22", true, "",  0, 0 ) ; // J
  this[i++] = new TocPack( B11, C11, "R2006/12/31(Sun)-16:16:22", true, "",  0, 0 ) ; // K
  this[i++] = new TocPack( B12, C12, "R2007/01/11(Thu)-01:41:25", true, "",  6, 0 ) ; // L
  this[i++] = new TocPack( B13, C13, "R2007/02/11(Sun)-21:48:21", true, "",  8, 0 ) ; // M
  this[i++] = new TocPack( B14, C14, "R2009/01/11(Sun)-01:50:08", true, "", 13, 0 ) ; // N
  this.length = i ;
}

// ******************************************************************
// *    Custom TOC Object Constructor Definition
// ******************************************************************

function makeTOCLists(){
    var i = 0;

    var oTocList0 = new makeTOC0(); // 0: Word Analyzer
    var oTocList1 = new makeTOC1(); // 1: General
    var oTocList2 = new makeTOC2(); // 2: Main Lectures
    var oTocList3 = new makeTOC3(); // 3: Grammar
    var oTocList4 = new makeTOC4(); // 4: Appendix
    var oTocList5 = new makeTOC5(); // 5: Key Lessons
    var oTocList6 = new makeTOC6(); // 6: JLP-TEST

    var iTocLen0  = oTocList0.length;
    var iTocLen1  = oTocList1.length;
    var iTocLen2  = oTocList2.length;
    var iTocLen3  = oTocList3.length;
    var iTocLen4  = oTocList4.length;
    var iTocLen5  = oTocList5.length;
    var iTocLen6  = oTocList6.length;

    this[i++] = new ListPack( "oTOC1", oTocList1, iTocLen1 );
    this[i++] = new ListPack( "oTOC2", oTocList2, iTocLen2 );
    this[i++] = new ListPack( "oTOC3", oTocList3, iTocLen3 );
    this[i++] = new ListPack( "oTOC4", oTocList4, iTocLen4 );
    this[i++] = new ListPack( "oTOC0", oTocList0, iTocLen0 );
    this[i++] = new ListPack( "oTOC5", oTocList5, iTocLen5 );
    this[i++] = new ListPack( "oTOC6", oTocList6, iTocLen6 );
    this.length = i;
}

// ******************************************************************
// *    Custom TOC Object Instance Definition
// ******************************************************************

var oListTOC = new makeTOCLists();
var oListLen = oListTOC.length;

// ******************************************************************
// *    Create Most Recent Modified Sections
// ******************************************************************

@if (@DEBUG == 8)           // Adminitorator Mode
    var MAX_LIMIT = 100;
@else
    var MAX_LIMIT = 20;
@end

var MOST_READ_PERIOD_STARTO = "2006/08/26";    // Original
var MOST_READ_PERIOD_START  = "2011/06/06";    // Copy from Google Anaytics
var MOST_READ_PERIOD_END    = "2011/06/12";

var gbSortOrder     = false;// Initial: DeAscendant

function pkCells(n){
    this.Cells = new Array(n);
    // 0: A Specific Data Field to compare each others (eg. DATE-TIME)
    // 1: Original Record Position in the Specific Record in a Object Data
    // 2: The Specific Data Object Position in The 'oListTOC' (should be 0-4)
}

var dtArray = new Array();
var pvArray = new Array();

function fnCreateRecentModifiedList( oObject, iTopNum, bDir ){
    // IN: oObject: Target Object ID where to be displayd the list
    // IN: iTopNum: Top Recent Modified Chapter number to be showed(3-10)
    // IN: bDir:    List soting direction (True = A, false = D)

    @if (@DEBUG == 1) alert("fnCreateRecentModifiedList >> IN") @end
    var ua = window.navigator;
    var oOL = F[ oObject ];
    if (oOL == null) return;
    if (ua.cookieEnabled){
        var cookieVal = getCookieValue( coABLETOP_CAPSL );
        if (cookieVal != null && cookieVal != iTopNum){
            iTopNum = cookieVal;
            @if (@DEBUG == 1) window.status = "iTopNum is stored as: " + iTopNum + "."; @end
        }
    }
    iTopNum = (iTopNum > MAX_LIMIT) ? MAX_LIMIT : iTopNum;
    if (iTopNum <= 0){
        oOL.style.display = 'none';
        F.oTopModCap.style.display = 'none';
        return;
    }
    gbSortOrder = bDir;
    var oList, oHref, oSpan, oCell;
    var i, k;
    var j = 0;
    var oTocList, iTocLen;
    var wda = oListLen-3;

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    for (k=0; k<(oListLen); k++){
        with( oListTOC[k] ){
            oTocList = List;    // Extract a Specific Data Object
            iTocLen  = Len;     // Get the Specific Data Size
        }
        for (i=0; i<iTocLen; i++){
            oCell = oTocList[i];
            if (! oCell.Cnd) continue;   // Skip Suspended Chapter(s)
            dtArray[j] = new pkCells(3); // Append 3 data store variables
            with(dtArray[j]){
                Cells[0] = oCell.DT();   // Store DATE-TIME
                Cells[1] = i;            // Store Original Array position
                Cells[2] = k;            // Store 'oListTOC' Index
            }
            j ++;                        // Increment Work Array Number
        }
    }

    // *----------------------------------------------------------------------------
    // *    Sorting the Work Data Array
    // *----------------------------------------------------------------------------

    qSort(dtArray, 0, j);

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    var Loop = (iTopNum > j) ? j : iTopNum;
    var idx;
    for (i=0; i<Loop; i++){
        idx = dtArray[i].Cells[1];  // Get the original data structure
        oCell = oListTOC[dtArray[i].Cells[2]].List[idx];
        with( document ){
            oList = createElement( "LI"   );
            oHref = createElement( "A"    );
            oSpan = createElement( "SPAN" );
        }
        with( oHref ){
            href      = (dtArray[i].Cells[2] == wda) ? WD_PATH + oCell.URL : WH_BASE + WH_PATH[dtArray[i].Cells[2]] + oCell.URL;
//            href      = WH_BASE + WH_PATH[dtArray[i].Cells[2]] + oCell.URL;
            innerHTML = "(" + itoStr(2, idx+1) + ") " + oCell.Cap;
        }
        with( oSpan ){            // LI   tag
            innerText = " (" + dtArray[i].Cells[0] + ")";
        }
        with( oList ){            // LI   tag
            appendChild( oHref ); // A    tag
            appendChild( oSpan ); // SPAN tag
        }

        oOL.appendChild( oList ); // LI tag
        //<li><a href='qyymmddhr.htm'> (Last modified: yyyy/mm/dd(ddd)-hh/mm/ss</a></li>
    }   // for Loop end
    with( document ){
        var oSelect = createElement( "SELECT" );
        var oOption = createElement( "OPTION" );
        var oSpan1  = createElement( "SPAN"   );
        var oSpan2  = createElement( "SPAN"   );
    }
    for (i=0; i<MAX_LIMIT; i++){
        oOption = document.createElement( "OPTION" );
        oOption.innerText = i + 1;
        oSelect.appendChild( oOption );
    }
    with( oSelect ){
        selectedIndex = iTopNum - 1;
        id = "oSelID";
        onchange = fnCreateRecentModifiedList2;
        title = "Select Num to be showed at onece.";
    }

    oSpan1.innerHTML = "Most recent top <span style='color:red;'>" + Loop + "</span> modified Chapters:  ";
    oSpan2.appendChild( oSelect );
    with( F.oTopModCap ){  // "oTopModCap" is hard-coded directly in the index.htm
        appendChild( oSpan1 );
        appendChild( oSpan2 );
        style.display = "";
    }
    oOL.style.display = "";
}

// ******************************************************************
// *    Create Most Studied Sections
// ******************************************************************

function fnCreateMostReadTopicList( oObject, iTopNum, bDir ){
    // IN: oObject: Target Object ID where to be displayd the list
    // IN: iTopNum: Top Recent Modified Chapter number to be showed(3-10)
    // IN: bDir:    List soting direction (True = A, false = D)

    @if (@DEBUG == 1) alert("fnCreateMostReadTopicList >> IN") @end
    var ua = window.navigator;
    var oOL = document.all[ oObject ];
    if (oOL == null) return;
    if (ua.cookieEnabled){
        var cookieVal = getCookieValue( coABLETOP_TPOLS );
        if (cookieVal != null && cookieVal != iTopNum){
            iTopNum = cookieVal;
            @if (@DEBUG == 8) window.status = "iTopNum is stored as: " + iTopNum + "."; @end
        }
    }
    iTopNum = (iTopNum > MAX_LIMIT) ? MAX_LIMIT : iTopNum;
    if (iTopNum <= 0){
        oOL.style.display = 'none';
        document.all.oTopReadCap.style.display = 'none';
        return;
    }
    gbSortOrder = bDir;
    var oList, oHref, oSpan, oCell;
    var i, k;
    var j = 0;
    var iCount = 0;
    var oTocList, iTocLen;
    var wda = oListLen-3;

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    for (k=0; k<(oListLen); k++){
        with( oListTOC[k] ){
            oTocList = List;
            iTocLen  = Len;
        }
        for (i=0; i<iTocLen; i++){
            oCell = oTocList[i];
//            if (! oCell.Cnd) continue;          // Skip Suspended Chapter(s)
            pvArray[j] = new pkCells(3);        // Append 4 data store variables
            with(pvArray[j]){
                Cells[0] = oCell.PVP();         // Store PVP value (int)
                Cells[1] = i;                   // Store Original Array position
                Cells[2] = k;                   // Store 'oListTOC' Index
            }
            iCount += pvArray[j].Cells[0];      // Get Total Page Views
            j ++;                               // Increment Work Array Number
        }
    }

    // *----------------------------------------------------------------------------
    // *    Sorting the Work Data Array
    // *----------------------------------------------------------------------------

    qSort(pvArray, 0, j);

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    var Loop = (iTopNum > j) ? j : iTopNum;
    var idx;
    for (i=0; i<Loop; i++){
        idx = pvArray[i].Cells[1];  // Get the original data structure
        oCell = oListTOC[pvArray[i].Cells[2]].List[idx];
        with(document){
            oList = createElement( "LI"   );
            oHref = createElement( "A"    );
            oSpan = createElement( "SPAN" );
        }
        with(oHref){
            href      = (pvArray[i].Cells[2] == wda) ?  WD_PATH + oCell.URL : WH_BASE + WH_PATH[pvArray[i].Cells[2]] + oCell.URL;
//            href      = WH_BASE + WH_PATH[pvArray[i].Cells[2]] + oCell.URL;
            innerHTML = "(" + itoStr(2, idx+1) + ") " + oCell.Cap;
        }
        with(oSpan){            // LI   tag
            innerText = " (Reviewed: " + pvArray[i].Cells[0] + ((pvArray[i].Cells[0] > 1) ? ' times' : ' time') + ")";
        }
        with(oList){            // LI   tag
            appendChild(oHref); // A    tag
            appendChild(oSpan); // SPAN tag
        }

        oOL.appendChild(oList); // LI tag
        //<li><a href='qyymmddhr.htm'>Caption</a><span>(Read: 99 times)</span></li>
    }   // for Loop end
    with(document){
        var oSelect = createElement( "SELECT" );
        var oOption = createElement( "OPTION" );
        var oSpan1  = createElement( "SPAN"   );
        var oSpan2  = createElement( "SPAN"   );
        var oSpan3  = createElement( "SPAN"   );
        var oSpan4  = createElement( "SPAN"   );
    }
    for (i=0; i<MAX_LIMIT; i++){
        oOption = document.createElement( "OPTION" );
        oOption.innerText = i + 1;
        oSelect.appendChild( oOption );
    }
    with( oSelect ){
        selectedIndex = iTopNum - 1;
        id = "oSelID2";
        onchange = fnCreateMostReadTopicList2;
        title = "Select Num to be showed at onece.";
    }

    oSpan1.innerHTML = "Most Reviewed top <span style='color:red;'>" + Loop + "</span> Session:  ";
    oSpan2.appendChild( oSelect );
    oSpan3.innerHTML = "　Period【" + MOST_READ_PERIOD_START + "-" + MOST_READ_PERIOD_END + "】";
//    oSpan3.innerHTML = "　Period【 Not yet evaluated: 2006/09/04(Mon)-02:31:13 】";
    oSpan4.innerHTML = "　Total Reviews【 <span style='color:red;font-weight:bold;'>" + iCount + "</span> 】";
    with( F.oTopReadCap ){  // "oTopReadCap" is hard-coded directly in the index.htm
        appendChild( oSpan1 );
        appendChild( oSpan2 );
        appendChild( oSpan3 );
        appendChild( oSpan4 );
        style.display = "";
    }
    oOL.style.display = "";
}

function fnCreateRecentModifiedList2(){
  var ua = window.navigator;
    var x = F[ "oSelID" ];
    if (x != null){
        var iValue = x.selectedIndex+1;
        with( F ){
            oTopModCap.innerHTML = "";
            oTopMod.innerHTML    = "";
        }
        if (ua.cookieEnabled){
            setCookieValue( coABLETOP_CAPSL, iValue, twoWeeks );
            @if (@DEBUG == 1) window.status = "Top Caps value: " + iValue + " saved."; @end
        }
        fnCreateRecentModifiedList("oTopMod", iValue, false);
    }
}
function fnCreateMostReadTopicList2(){
  var ua = window.navigator;
    var x = F[ "oSelID2" ];
    if (x != null){
        var iValue = x.selectedIndex+1;
        with( F ){
            oTopReadCap.innerHTML = "";
            oTopRead.innerHTML   = "";
        }
    if (ua.cookieEnabled){
        setCookieValue( coABLETOP_TPOLS, iValue, twoWeeks );
        @if (@DEBUG == 1) window.status = "Top Read value: " + iValue + " saved."; @end
    }
        fnCreateMostReadTopicList("oTopRead", iValue, false);
    }
}
function fnAddMsgIfany2( sid, oid, iNum ){
    // sid: HTML <TAG> object ID to be append the message
    // oid: Data Object Block ID to be append the message (ie. 0:oTOC1, 1:oTOC2,... )
    // iNum: Seesion number ie. 0, 1, 2, .... so on

    var oTocList = oListTOC[ oid ].List;
    var x = F[ sid ];
    if (x != null && oTocList[iNum].Msg != ""){
        var oSpan = document.createElement( "DIV" );
        oSpan.innerHTML = oTocList[iNum].Msg;
        oSpan.style.backgroundColor = "lightblue";
        x.appendChild(oSpan);
        x.style.display = "";
    }
}

// ******************************************************************
// *    QUICK SORT Partition
// ******************************************************************

function partition(rows, l, r){
    var i, j, wkRow, PIVOT;

    i = l - 1;
    j = r;

    PIVOT = rows[r].Cells[0];   // DATE-TIME data as pivot data

    if (gbSortOrder == true){   // A
        do{
            while(rows[++i].Cells[0] < PIVOT);
            while((i < --j) && (PIVOT < rows[j].Cells[0]));
            if (i >= j) break;
            wkRow   = rows[i];
            rows[i] = rows[j];
            rows[j] = wkRow;
        }while(1);
    } else {                // D
        do{
            while(rows[++i].Cells[0] > PIVOT);
            while((i < --j) && (PIVOT > rows[j].Cells[0]));
            if (i >= j) break;
            wkRow   = rows[i];
            rows[i] = rows[j];
            rows[j] = wkRow;
        }while(1);
    }

    wkRow   = rows[i];
    rows[i] = rows[r];
    rows[r] = wkRow;

    return(i);
}

// ******************************************************************
// *    QUICK SORT Engine
// ******************************************************************

function qSort(rows, start, end){
    // rows:    Data Array to be sorted
    // start:   First record number to be sorted(0)
    // end:     Last  record number to be sorted(record length)

    var left;
    var right;
    var v;
    var sp;
    var low     = new Array();
    var high    = new Array();

    low[0]  = start;
    high[0] = end-1;
    sp = 1;

    while(sp > 0){
        sp --;
        left    = low[sp];
        right   = high[sp];
        if (left >= right){
        } else {
            v = partition(rows, left, right);
            if ((v - left) < (right - v)){
                low[sp]     = v + 1;
                high[sp++]  = right;
                low[sp]     = left;
                high[sp++]  = v - 1;
            } else {
                low[sp]     = left;
                high[sp++]  = v - 1;
                low[sp]     = v + 1;
                high[sp++]  = right;
            }
        }
    }
}

// #################################################################################
// #    << End of jpreadtoc.js >> (C) 2002 Southern Cross Virtual Co., Ltd. (v1.2)
// #################################################################################

