// #################################################################################
// #    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 = 0 // 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 FM      = "jpreadex" ;
var FSUFFIX = "hr.htm" ;    // HTML file without Kanji Ruby

@if (@DEBUG == 8)           // Adminitorator Mode
    var MAX_LIMIT = 100;
@else
    var MAX_LIMIT = 20;
@end

// ******************************************************************
// *    Custom Object Constructors Definition
// ******************************************************************

function TocPack(url, cap, mod, cnd, msg, pvp, sum){
    this.URL    = url ;     // Link URL(format: FM + ?? + FSUFFIX
    this.Cap    = cap ;     // Link Caption (format: String)
    this.Mod    = mod ;     // Modified Date (format: "R"/"U"/"N" + yyyy/mm/dd(ddd)-hh:mm:ss)
    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
}

// ******************************************************************
// *    Custom Methods for Custom Objects Constructors
// ******************************************************************

var BODY_LEN = 10;  // HTML file name body length(format: FM + ??)
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(){
    return this.URL.substr( 0, BODY_LEN);   // jpreadex??
}
function getSelOpt(){
    return this.Cap.substr( 0, CAPS_LEN);   // Chapter Caption(top 20 chars)
}
function getModStatus(){
    return this.Mod.substr( 0, STAT_LEN);   // "U","R" or "N"
}
function getModDate(){
    return this.Mod.substr( 1, DATE_LEN);   // yyyy/mm/dd
}
function getModTime(){
    return this.Mod.substr(17, TIME_LEN);   // 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 makeTOC(){
//  Cap.ID     Caption
    var C01 = "Young People of Today" ;
    var C02 = "To Return to Japan or Stay in America" ;
    var C03 = "<span class='NAME'>Yoshida</span>'s Family Matters" ;
    var C04 = "Marriage and Business" ;
    var C05 = "The Virtue of Modesty" ;
    var C06 = "The Real Meaning Behind Words" ;
    var C07 = "Business and Leisure" ;
    var C08 = "The Evils of a Work-Centered Culture and Breath of Life" ;
    var C09 = "A tall tree catches much wind" ;
    var C10 = "Consumer's Needs" ;
    var C11 = "Improving the Quality of Life" ;
    var C12 = "Japanese Emotions" ;
    var C13 = "Services Onboard an Airplane" ;
    var C14 = "Under the Influence of a Bubble Economy" ;
    var C15 = "Goodbye With a Guitar" ;
    var C16 = "Men in The Kitchen" ;
    var C17 = "Compatibility - Cooking vs Convenience" ;
    var C18 = "Mrs. <span class='NAME'>Kobayashi</span>'s Surprise" ;
    var C19 = "Pedestrian Bridge" ;
    var C20 = "<span class='NAME'>Karaoke</span>(part1)：Japanese Folk & Ballad vs Pop & Rock" ;
    var C21 = "<span class='NAME'>Karaoke</span>(part2)：<span class='NAME'>Karaoke</span> Bar vs <span class='NAME'>Karaoke</span> Box" ;
    var C22 = "The Dexterous Japanese" ;
    var C23 = "Cars Especially For Children" ;
    var C24 = "Cars and Torrents of People" ;
    var C25 = "Thoughts On Impersonation" ;
    var C26 = "The Japanese and Rice" ;
    var C27 = "The Japanese and Meat" ;
    var C28 = "The Japanese and Curried Rice" ;
    var C29 = "The Japanese and Noodles" ;
    var C30 = "The Japanese and <span class='NAME'>Tempura</span>" ;
    var C31 = "A Cigarette Mystery" ;
    var C32 = "The Beauty of Imbalance " ;
    var C33 = "Why is a heaven heavenly?" ;
    var C34 = "Backslash against 'Like I do'" ;
    var C35 = "Thoughts on Convenience Stores" ;
    var C36 = "Early Morning <span class='NAME'>Tokyo</span>" ;
    var C37 = "Middle Age Divorce" ;
    var C38 = "Suggestions on Walking Fast" ;
    var C39 = "The Phobia of Not Boarding The Plane on Time" ;
    var C40 = "Non-Smoking <span class='NAME'>Izakaya</span>" ;
    var C41 = "Thoughts on Entering the Fifties" ;
    var C42 = "Airplane and <span class='NAME'>Ijikevich</span>" ;
    var C43 = "There is nothing ...!?" ;
    var C44 = "About <span class='NAME'>Hiragana, Katakana</span> ..." ;
    var C45 = "Japanese Words Used in Japan" ;
    var C46 = "Words and Exceptial Elements" ;
    var C47 = "Differences in Customs" ;
    var C48 = "Japanese Customs" ;
    var C49 = "Japanese Foods" ;
    var C50 = "Japanese Conversations" ;
    var C51 = "Low-<span class='NAME'>Gan</span>??" ;
    var C52 = "I will give you something, come in??" ;
    var C53 = "James Curtis Hepburn's Life" ;
    var C54 = "How to read the <span class='NAME'>I-Ro-Ha</span> Poem" ;
    var C55 = "Japanese Diet";                            // 日本人の食生活
    var C56 = "Culture Center";                           // カルチャーセンター
    var C57 = "Fortune - Superstition - Necromancy";      // 縁起・迷信・占い
    var C58 = "Japanese Adults and Manga";                // 日本人の大人と漫画
    var C59 = "How Japanese Women Look at Marriage";      // 日本の女性の結婚観
    var C60 = "Education: Japanese Children";             // 教育−日本の子ども−
    var C61 = "Waste Reduction";                          // ごみの減量化
    var C62 = "Lafcadio Hearn";                           // ラフカディオ・ハーン
    var C63 = "Characteristics of the Japanese Language"; // 日本語の特徴
    var C64 = "Nonverbal Communication";                  // 非言語コミュニケーション

//  Msg.ID     Tutor's Messages
    var M01 = "Added 'OL',サラリーマン meaning definition. 2009/01/10(Sat)-02:21:06";
    var M02 = "Added 'できたら','-わ' meaning definition. 2009/01/17(Sat)-20:15:28";
    var M03 = "";
    var M04 = "";
    var M05 = "";
    var M06 = "";
    var M07 = "";
    var M08 = "Added 世間 meaning. etc. 2006/08/21(Mon)-21:03:04";
    var M09 = "";
    var M10 = "";
    var M11 = "Added パチンコ photo as Rich-Text-Message description. 2006/08/21(Mon)-23:10:19";
    var M12 = "";
    var M13 = "Added カラオケボックス photo as Rich-Text-Message description. 2006/08/22(Tsu)-22:01:33";
    var M14 = "";
    var M15 = "Added キブツ photo as Rich-Text-Message description. 2006/08/21(Mon)-21:24:00";
    var M16 = "";
    var M17 = "Added 納豆 photo as Rich-Text-Message description. 2006/08/21(Mon)-20:42:59<br />Modified 赤飯 photo as Rich-Text-Message description. 2006/08/26(Sat)-00:52:31";
    var M18 = "Added 接待ゴルフ meaning. 2006/08/21(Mon)-21:22:41";
    var M19 = "Added 歩道橋 photo as Rich-Text-Message description. etc. 2009/01/10(Sat)-15:58:15";
    var M20 = "Added 披露 meaning. 2009/02/26(Thu)-11:14:51";
    var M21 = "Added カラオケボックス photo as Rich-Text-Message description. 2006/08/22(Tsu)-22:05:58<br />Added 「集団の和」meaning. 2006/08/25(Fri)-23:48:40";
    var M22 = "Added 4 words meanings. 2006/08/23(Wed)-00:25:34<br />Added 「ポケベル」mening. 2006/08/25(Fri)-23:55:22";
    var M23 = "Added 3 words meanings. 2006/08/23(Wed)-00:42:41<br />Added 「大げさ」meaning. 2006/08/26(Sat)-00:04:16";
    var M24 = "";
    var M25 = "";
    var M26 = "Added 納豆 photo as Rich-Text-Message description. 2006/08/21(Mon)-20:42:59";
    var M27 = "";
    var M28 = "";
    var M29 = "";
    var M30 = "Added 徳川家康 photo as Rich-Text-Message description. 2006/08/21(Mon)-19:30:19";
    var M31 = "Added 懇々、諭す、率先する words meaning. 2009/02/01(Sun)-02:56:30";
    var M32 = "";
    var M33 = "";
    var M34 = "";
    var M35 = "";
    var M36 = "Added パチンコ photo as Rich-Text-Message description. 2006/08/22(Tsu)-22:21:04<br />Added 花札 photo as Rich-Text-Message description.,余儀 2006/08/22(Tsu)-22:57:54";
    var M37 = "";
    var M38 = "";
    var M39 = "";
    var M40 = "";
    var M41 = "Added 納豆 photo as Rich-Text-Message description. 2006/08/21(Mon)-20:42:59";
    var M42 = "";
    var M43 = "";
    var M44 = "";
    var M45 = "";
    var M46 = "";
    var M47 = "";
    var M48 = "";
    var M49 = "Added 蕎麦 photo as Rich-Text-Message description. 2009/01/12(Mon)-17:54:13";
    var M50 = "";
    var M51 = "";
    var M52 = "Added 1 photo as Rich-Text-Message description せんべい. & Bug Fix 2006/09/09(Sat)-21:19:09";
    var M53 = "Added 5 photos as Rich-Text-Message description. 2006/08/27(Sun)-01:22:57<br />Added 3 photos as Rich-Text-Message, 5 word meanings. 2006/09/04(Mon)-12:50:18";
    var M54 = "Added 4 word meanings, さしもの、台頭、イエス、歌謡. 2009/01/10(Sat)-07:27:32";
    var M55 = "Added 3 photos as Rich-Text-Message description 漬け物,海藻,みそ汁;2009/01/14(Wed)-18:19:40";
    var M56 = "Intruduced Sound file for listening: 2006/11/01(Wed)-09:26:31";
    var M57 = "Added one word note & one Rich-Text-Message: 2006/11/05(Sun)-15:32:42";
    var M58 = "Intruduced Sound file for listening: 2006/11/01(Wed)-09:26:31<br />Added 5 word notes: 2006/11/05(Sun)-14:40:36";
    var M59 = "";
    var M60 = "Intruduced Sound file for listening: 2006/11/01(Wed)-09:26:31";
    var M61 = "";
    var M62 = "Added 2 photos as Rich-Text-Message description 武士,松江城; 2006/11/11(Sat)-11:35:23<br />Added 2 photos as Rich-Text-Message description シジミ、エビ、ワカサギ: 2006/11/14(Tsu)-14:26:57";
    var M63 = "Added 1 external link for the words with 雨: 2006/11/09(Thu)-22:18:03";
    var M64 = "Added 1 photo as Rich-Text-Message description: <em>yes</em> by shaking their heads from side to side: 2006/11/10(Fri)-20:06:08";

    var i = 0;          //   URL                  Cap.  Released/Modified Info.     Stat. Msg.PV, SM
    this[i++] = new TocPack( FM + "01" + FSUFFIX, C01, "U2009/01/10(Sat)-02:17:48", true, M01,10, 0 ) ;
    this[i++] = new TocPack( FM + "02" + FSUFFIX, C02, "U2009/01/17(Sat)-20:16:10", true, M02, 3, 0 ) ;
    this[i++] = new TocPack( FM + "03" + FSUFFIX, C03, "U2006/01/10(Mon)-22:24:38", true, M03, 3, 0 ) ;
    this[i++] = new TocPack( FM + "04" + FSUFFIX, C04, "U2006/01/10(Mon)-22:24:47", true, M04, 4, 0 ) ;
    this[i++] = new TocPack( FM + "05" + FSUFFIX, C05, "U2006/01/10(Mon)-22:24:58", true, M05, 0, 0 ) ;
    this[i++] = new TocPack( FM + "06" + FSUFFIX, C06, "U2006/01/12(Wed)-00:06:13", true, M06, 2, 0 ) ;
    this[i++] = new TocPack( FM + "07" + FSUFFIX, C07, "U2006/01/12(Wed)-00:06:21", true, M07, 3, 0 ) ;
    this[i++] = new TocPack( FM + "08" + FSUFFIX, C08, "U2006/08/20(Sun)-12:26:10", true, M08, 0, 0 ) ;
    this[i++] = new TocPack( FM + "09" + FSUFFIX, C09, "U2006/01/12(Wed)-00:06:37", true, M09, 0, 0 ) ;
    this[i++] = new TocPack( FM + "10" + FSUFFIX, C10, "U2006/01/12(Wed)-00:06:43", true, M10, 1, 0 ) ;
    this[i++] = new TocPack( FM + "11" + FSUFFIX, C11, "U2006/08/21(Mon)-23:09:35", true, M11, 1, 0 ) ;
    this[i++] = new TocPack( FM + "12" + FSUFFIX, C12, "U2006/01/09(Sun)-00:25:34", true, M12, 9, 0 ) ;
    this[i++] = new TocPack( FM + "13" + FSUFFIX, C13, "U2006/08/22(Tsu)-22:02:24", true, M13, 1, 0 ) ;
    this[i++] = new TocPack( FM + "14" + FSUFFIX, C14, "U2006/01/20(Thu)-23:47:15", true, M14, 0, 0 ) ;
    this[i++] = new TocPack( FM + "15" + FSUFFIX, C15, "U2006/08/19(Sat)-22:09:40", true, M15, 1, 0 ) ;
    this[i++] = new TocPack( FM + "16" + FSUFFIX, C16, "U2006/01/20(Thu)-23:56:54", true, M16, 0, 0 ) ;
    this[i++] = new TocPack( FM + "17" + FSUFFIX, C17, "U2006/08/26(Sat)-00:53:11", true, M17, 4, 0 ) ;
    this[i++] = new TocPack( FM + "18" + FSUFFIX, C18, "U2006/08/19(Sat)-22:09:53", true, M18, 3, 0 ) ;
    this[i++] = new TocPack( FM + "19" + FSUFFIX, C19, "U2009/01/10(Sat)-15:57:34", true, M19, 1, 0 ) ;
    this[i++] = new TocPack( FM + "20" + FSUFFIX, C20, "U2009/02/26(Thu)-11:09:47", true, M20, 2, 0 ) ;
    this[i++] = new TocPack( FM + "21" + FSUFFIX, C21, "U2006/08/25(Fri)-23:49:01", true, M21, 1, 0 ) ;
    this[i++] = new TocPack( FM + "22" + FSUFFIX, C22, "U2006/08/25(Fri)-23:55:39", true, M22, 1, 0 ) ;
    this[i++] = new TocPack( FM + "23" + FSUFFIX, C23, "U2006/08/26(Sat)-00:03:33", true, M23, 0, 0 ) ;
    this[i++] = new TocPack( FM + "24" + FSUFFIX, C24, "U2006/01/21(Fri)-00:01:33", true, M24, 0, 0 ) ;
    this[i++] = new TocPack( FM + "25" + FSUFFIX, C25, "U2006/01/21(Fri)-00:03:05", true, M25, 0, 0 ) ;
    this[i++] = new TocPack( FM + "26" + FSUFFIX, C26, "U2006/08/20(Sun)-20:57:42", true, M26, 4, 0 ) ;
    this[i++] = new TocPack( FM + "27" + FSUFFIX, C27, "U2006/01/22(Tsu)-21:55:29", true, M27, 1, 0 ) ;
    this[i++] = new TocPack( FM + "28" + FSUFFIX, C28, "U2006/01/21(Fri)-00:03:51", true, M28, 0, 0 ) ;
    this[i++] = new TocPack( FM + "29" + FSUFFIX, C29, "U2006/01/09(Sun)-00:26:45", true, M29, 0, 0 ) ;
    this[i++] = new TocPack( FM + "30" + FSUFFIX, C30, "U2006/08/21(Mon)-01:40:54", true, M30, 2, 0 ) ;
    this[i++] = new TocPack( FM + "31" + FSUFFIX, C31, "U2009/02/01(Sun)-03:11:31", true, M31, 8, 0 ) ;
    this[i++] = new TocPack( FM + "32" + FSUFFIX, C32, "U2006/01/22(Sat)-12:39:57", true, M32, 0, 0 ) ;
    this[i++] = new TocPack( FM + "33" + FSUFFIX, C33, "U2006/01/22(Sat)-12:40:33", true, M33, 1, 0 ) ;
    this[i++] = new TocPack( FM + "34" + FSUFFIX, C34, "U2006/01/22(Sat)-12:41:04", true, M34, 1, 0 ) ;
    this[i++] = new TocPack( FM + "35" + FSUFFIX, C35, "U2006/01/22(Sat)-12:41:34", true, M35, 0, 0 ) ;
    this[i++] = new TocPack( FM + "36" + FSUFFIX, C36, "U2006/08/22(Tsu)-22:21:21", true, M36, 5, 0 ) ;
    this[i++] = new TocPack( FM + "37" + FSUFFIX, C37, "U2006/01/22(Sat)-12:42:25", true, M37, 1, 0 ) ;
    this[i++] = new TocPack( FM + "38" + FSUFFIX, C38, "U2006/01/22(Sat)-12:42:51", true, M38, 2, 0 ) ;
    this[i++] = new TocPack( FM + "39" + FSUFFIX, C39, "U2006/01/22(Sat)-12:43:08", true, M39, 2, 0 ) ;
    this[i++] = new TocPack( FM + "40" + FSUFFIX, C40, "U2006/01/09(Sun)-00:27:15", true, M40, 1, 0 ) ;
    this[i++] = new TocPack( FM + "41" + FSUFFIX, C41, "U2006/08/20(Sun)-21:03:45", true, M41, 0, 0 ) ;
    this[i++] = new TocPack( FM + "42" + FSUFFIX, C42, "U2006/01/09(Sun)-00:27:24", true, M42, 2, 0 ) ;
    this[i++] = new TocPack( FM + "43" + FSUFFIX, C43, "U2006/01/22(Sat)-12:44:24", true, M43, 3, 0 ) ;
    this[i++] = new TocPack( FM + "44" + FSUFFIX, C44, "U2006/01/22(Sat)-12:44:58", true, M44, 1, 0 ) ;
    this[i++] = new TocPack( FM + "45" + FSUFFIX, C45, "U2006/01/22(Sat)-12:45:23", true, M45, 1, 0 ) ;
    this[i++] = new TocPack( FM + "46" + FSUFFIX, C46, "U2006/01/22(Sat)-12:45:51", true, M46, 0, 0 ) ;
    this[i++] = new TocPack( FM + "47" + FSUFFIX, C47, "U2006/01/22(Sat)-12:46:10", true, M47, 3, 0 ) ;
    this[i++] = new TocPack( FM + "48" + FSUFFIX, C48, "U2006/01/22(Sat)-12:46:41", true, M48, 0, 0 ) ;
    this[i++] = new TocPack( FM + "49" + FSUFFIX, C49, "U2009/01/12(Mon)-17:54:53", true, M49, 5, 0 ) ;
    this[i++] = new TocPack( FM + "50" + FSUFFIX, C50, "U2006/01/22(Sat)-12:46:54", true, M50, 2, 0 ) ;
    this[i++] = new TocPack( FM + "51" + FSUFFIX, C51, "U2006/01/22(Sat)-12:47:04", true, M51, 2, 0 ) ;
    this[i++] = new TocPack( FM + "52" + FSUFFIX, C52, "U2006/09/09(Sat)-21:19:09", true, M52, 1, 0 ) ;
    this[i++] = new TocPack( FM + "53" + FSUFFIX, C53, "U2006/09/04(Mon)-12:40:09", true, M53, 4, 0 ) ;
    this[i++] = new TocPack( FM + "54" + FSUFFIX, C54, "U2009/01/10(Sat)-07:43:11", true, M54,14, 0 ) ;
    this[i++] = new TocPack( FM + "55" + FSUFFIX, C55, "U2009/01/14(Wed)-18:20:16", true, M55, 4, 0 ) ;
    this[i++] = new TocPack( FM + "56" + FSUFFIX, C56, "U2006/11/01(Wed)-09:23:41", true, M56, 4, 0 ) ;
    this[i++] = new TocPack( FM + "57" + FSUFFIX, C57, "U2006/11/05(Sun)-15:32:42", true, M57, 3, 0 ) ;
    this[i++] = new TocPack( FM + "58" + FSUFFIX, C58, "U2006/11/05(Sun)-14:40:51", true, M58, 6, 0 ) ;
    this[i++] = new TocPack( FM + "59" + FSUFFIX, C59, "R2006/11/02(Thu)-20:47:03", true, M59, 7, 0 ) ;
    this[i++] = new TocPack( FM + "60" + FSUFFIX, C60, "U2006/11/01(Wed)-09:24:24", true, M60, 4, 0 ) ;
    this[i++] = new TocPack( FM + "61" + FSUFFIX, C61, "R2006/11/03(Fri)-13:30:23", true, M61, 3, 0 ) ;
    this[i++] = new TocPack( FM + "62" + FSUFFIX, C62, "U2006/11/14(Tsu)-14:27:13", true, M62, 6, 0 ) ;
    this[i++] = new TocPack( FM + "63" + FSUFFIX, C63, "R2006/11/09(Thu)-22:17:09", true, M63, 4, 0 ) ;
    this[i++] = new TocPack( FM + "64" + FSUFFIX, C64, "U2006/11/10(Fri)-20:06:24", true, M64, 7, 0 ) ;
    this.length = i ;
}
var oTocList = new makeTOC();
var iTocLen  = oTocList.length;

// * ------------<< Start of Linked Global Variables >>-------
var gbSortOrder     = false;// Initial: DeAscendant
// * ------------<< End of Linked Global Variables >>---------

function pkCells(){
    this.Cells = new Array(2);
}
var dtArray = new Array();
var pvArray = new Array();

function fnGetTitleCaptionByURL( sUrl ){
    var p;
    if ((p = sUrl.indexOf('.')) != -1 && p > 11){ // mod 2007/06/02 by skn23
        sUrl = sUrl.substr( p-12, BODY_LEN);    // ****[JPREADEX99hr].htm-->[] is 12 length
    } else {
        sUrl = sUrl.substr( 0, BODY_LEN);
    }
    window.status = "TARGET URL= " + sUrl;
    var sCaption = "UnDefined";
    @if (@DEBUG == 8)
      alert("iTocLen= " + iTocLen);
    @end
    for (var i=0; i<iTocLen; i++){
        if (oTocList[i].URL.indexOf( sUrl ) != -1){
            sCaption = fnStripHtmlTags(oTocList[i].Cap);
            window.status = "TOPIC TITLE= " + sCaption;
            break;
        }
    }
    return sCaption;
}
function fnStripHtmlTags( sCaption ){
    // IN : "Non-Smoking <span class='NAME'>Izakaya</span>"
    // OUT: "Non-Smoking Izakaya"
    var sRet = "";
    var p  = 0;
    var q  = 0;
    var l  = sCaption.length;
    var sp = sCaption.indexOf( '<', p );
    var ep = sCaption.indexOf( '>', p );
    while((sp != -1) && (ep != -1)){
        q = sp - p;
        sRet += sCaption.substr( p, q );
        p = ep + 1;
        sp = sCaption.indexOf( '<', p );
        ep = sCaption.indexOf( '>', p );
    }
    sRet += sCaption.substr( p, l-p );
    return sRet;
}

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 = document.all[ oObject ];
    if (oOL == null) return;
    if (ua.cookieEnabled){
        var cookieVal = getCookieValue( coABLETOP_CAPS );
        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';
        document.all.oTopModCap.style.display = 'none';
        return;
    }
    gbSortOrder = bDir;
    var oList, oHref, oSpan, oCell;
    var i;
    var j = 0;

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    for (i=0; i<iTocLen; i++){
        oCell = oTocList[i];
        if (! oCell.Cnd) continue;          // Skip Suspended Chapter(s)
        dtArray[j] = new pkCells();         // Append 2 data store variables
        dtArray[j].Cells[0] = oCell.DT();   // Store DATE-TIME
        dtArray[j].Cells[1] = i;            // Store Original Array position
        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 = oTocList[idx];
        with(document){
            oList = createElement( "LI"   );
            oHref = createElement( "A"    );
            oSpan = createElement( "SPAN" );
        }
        with(oHref){
            href      = 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(document.all.oTopModCap){  // "oTopModCap" is hard-coded directly in the index.htm
        appendChild( oSpan1 );
        appendChild( oSpan2 );
        style.display = "";
    }
    oOL.style.display = "";
}

var MOST_READ_PERIOD_START  = "2009/01/01";    // Copy from Google Anaytics
var MOST_READ_PERIOD_END    = "2009/01/13";

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_TPOIC );
        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;
    var j = 0;
    var iCount = 0;

    // *----------------------------------------------------------------------------
    // *    Make Work Array to Sort Chapter Title by Modified Date Order
    // *----------------------------------------------------------------------------

    for (i=0; i<iTocLen; i++){
        oCell = oTocList[i];
        if (! oCell.Cnd) continue;          // Skip Suspended Chapter(s)
        pvArray[j] = new pkCells();         // Append 2 data store variables
        pvArray[j].Cells[0] = oCell.PVP();  // Store PVP value (int)
        pvArray[j].Cells[1] = i;            // Store Original Array position
        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 = oTocList[idx];
        with(document){
            oList = createElement( "LI"   );
            oHref = createElement( "A"    );
            oSpan = createElement( "SPAN" );
        }
        with(oHref){
            href      = oCell.URL;
            innerHTML = "(" + itoStr(2, idx+1) + ") " + oCell.Cap;
        }
        with(oSpan){            // LI   tag
            innerText = " (Read: " + 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 read top <span style='color:red;'>" + Loop + "</span> Chapters:  ";
    oSpan2.appendChild( oSelect );
    oSpan3.innerHTML = "　Period【" + MOST_READ_PERIOD_START + "-" + MOST_READ_PERIOD_END + "】";
    oSpan4.innerHTML = "　Total Views【 <span style='color:red;font-weight:bold;'>" + iCount + "</span> 】";
    with(document.all.oTopReadCap){  // "oTopReadCap" is hard-coded directly in the index.htm
        appendChild( oSpan1 );
        appendChild( oSpan2 );
        appendChild( oSpan3 );
        appendChild( oSpan4 );
        style.display = "";
    }
    oOL.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)
// #################################################################################
