// Filter function for Lecture Table
// Copyright (C) 1998 Southern Cross Virtual Co., Ltd.
// All Rights Reserved
// Author: Mr. Hiroto Sekine

var targetDate;         // for Date filter
var avalFlag = true;    // to skip cmbPart
if (typeof(F) == "undefined"){
    var F = document.all;
}
var rs;

function makeIDS(){
    var i = 0;
    this[i++] = "cmbPart";
    this[i++] = "cmbClass";
    this[i++] = "cmbSearch";
    this[i] = "";
    this.length = 0;
}
var IDS = new makeIDS();

function FilterLevelAndText( TDC ){
    var strCmp;
    var cFilterExpr = "";

    if (cmbPart.options[cmbPart.selectedIndex].value != "0"){
        if (cFilterExpr != "") cFilterExpr += " & ";
        cFilterExpr = cFilterExpr + "A=" + cmbPart.options[cmbPart.selectedIndex].value;
    }

    if (cmbClass.selectedIndex > 0){
        if (cFilterExpr != "") cFilterExpr += " & ";
        cFilterExpr = cFilterExpr + "CC=" + cmbClass.options[cmbClass.selectedIndex].value;
    }
    if (cmbSearch.selectedIndex > 0){
        if (cFilterExpr != "") cFilterExpr += " & ";
        cFilterExpr = cFilterExpr + "F=" + cmbSearch.options[cmbSearch.selectedIndex].value;
    }

    with( TDC ){
        object.Filter = cFilterExpr;
        Reset();
    }
    filterCheck();
}

function filterCheck(){
    var x, y, i = 0;
    while(IDS[i] != ""){
        x = F[ IDS[i] ];
        if ((x != null) && (x.selectedIndex > 0)){
            y = F[ "cmdReset" ];
            if (y != null) y.disabled = false;
            return;
        }
        i ++;
    }
    y = F[ "cmdReset" ];
    if (y != null) y.disabled = true;
}

function cmbStart_onchange( TDC ){
    FilterLevelAndText( TDC );
}

function cmbEnd_onchange( TDC ){
    FilterLevelAndText( TDC );
}

function cmbCourse_onchange( TDC ){
    FilterLevelAndText( TDC );
}

function cmbFees_onchange( TDC ){
    FilterLevelAndText( TDC );
}

function cmbStatus_onchange( TDC ){
    FilterLevelAndText( TDC );
}

function filterDisabled(){  // OK for Adjective
    var x = F["oCMBRESET"];
    if (x != null) x.disabled = true;
}

function tableReset( TDC ){
    var x, i = 0;
    while(IDS[i] != ""){
        x = F[ IDS[i] ];
        if (x != null) x.options[0].selected = true;
        i ++;
    }
    with( TDC ){
        object.Filter = "";
        Reset();
    }
    x = F[ "cmdReset" ];
    if (x != null) x.disabled = true;
}

function checkTable( ITEM ){
    if (ITEM.value < 5 || ITEM.value > 99){
        alert("Must be greater than 4 and less than 100");
        with( ITEM ){
            value = 5;
            focus();
        }
    }
}
/* *-------------------------------------------------------------------------* */
/* * 																		 * */
/* *-------------------------------------------------------------------------* */

// ******************************************************************
// *    Search Table Control Object Option Values (append14hr.htm)
// ******************************************************************

	var ATTRIBUTE   = "AA"; // 全属性形容詞   (append04hr.htm:cmbClass)
	var ATTRIBUTEO  = "AO"; // 属性形容詞だけ (append04hr.htm:cmbClass)
	var EMOTIONAL   = "EA"; // 全感情形容詞   (append04hr.htm:cmbClass)
	var EMOTIONALO  = "EO"; // 感情形容詞だけ (append04hr.htm:cmbClass)
	var DOUBLEUSE   = "BO"; // 感情＋属性だけ (append04hr.htm:cmbClass)

	var STR_AA      = "[属性]"      ;	// 1
	var STR_AO      = "属性形容詞"  ;
	var STR_EA      = "[感情]"      ;	// 2
	var STR_EO      = "感情形容詞"  ;
	var STR_BO      = "[感情&属性]" ;	// 3

	var	AITYPES	= new Array(3);
		AITYPES[0] = STR_AA;	// 1 :default
		AITYPES[1] = STR_EA;	// 2
		AITYPES[2] = STR_BO;	// 3

	var	AITYPESM = new Array(3);
		AITYPESM[0] = "Attributes";	// 1
		AITYPESM[1] = "Emotional";	// 2 :default
		AITYPESM[2] = "Attr. + Emotion";	// 3

	var	FMASK	= 255 ;

	var	PW20	=   1 ;
	var	PW21	=   2 ;
	var	PW22	=   4 ;
	var	PW23	=   8 ;
	var	PW24	=  16 ;
	var	PW25	=  32 ;
	var	PW26	=  64 ;
	var	PW27	= 128 ;

	var	VSFB0	= PW20 ;
	var	VSFB1	= PW21 ;
	var	VSFB2	= PW22 ;
	var	VSFB3	= PW23 ;
	var	VSFB4	= PW24 ;
	var	VSFB5	= PW25 ;
	var	VSFB6	= PW26 ;
	var	VSFB7	= PW27 ;

	var	VSFB0C	= "例外変化規則" ;
	var	VSFB1C	= "";
	var	VSFB2C	= "" ;
	var	VSFB3C	= "" ;
	var	VSFB4C	= "" ;
	var	VSFB5C	= "" ;
	var	VSFB6C	= "" ;
	var	VSFB7C	= "" ;

	var	VBFB0	= PW20 ;
	var	VBFB1	= PW21 ;
	var	VBFB2	= PW22 ;
	var	VBFB3	= PW23 ;
	var	VBFB4	= PW24 ;
	var	VBFB5	= PW25 ;
	var	VBFB6	= PW26 ;
	var	VBFB7	= PW27 ;

	var	VBFB0C	= "可能形なし" ;
	var	VBFB1C	= "";
	var	VBFB2C	= "" ;
	var	VBFB3C	= "" ;
	var	VBFB4C	= "" ;
	var	VBFB5C	= "" ;
	var	VBFB6C	= "" ;
	var	VBFB7C	= "" ;

	var	AIFB0	= PW20 ;
	var	AIFB1	= PW21 ;
	var	AIFB2	= PW22 ;
	var	AIFB3	= PW23 ;
	var	AIFB4	= PW24 ;
	var	AIFB5	= PW25 ;
	var	AIFB6	= PW26 ;
	var	AIFB7	= PW27 ;

	var	AIFB0C	= "" ;
	var	AIFB1C	= "";
	var	AIFB2C	= "" ;
	var	AIFB3C	= "" ;
	var	AIFB4C	= "" ;
	var	AIFB5C	= "" ;
	var	AIFB6C	= "" ;
	var	AIFB7C	= "" ;

	var	SPFB0	= PW20 ;
	var	SPFB1	= PW21 ;
	var	SPFB2	= PW22 ;
	var	SPFB3	= PW23 ;
	var	SPFB4	= PW24 ;
	var	SPFB5	= PW25 ;
	var	SPFB6	= PW26 ;
	var	SPFB7	= PW27 ;

	var	SPFB0C	= "イ形・ナ形が同型１(例：やわらかい／やわらかな)" ;
	var	SPFB1C	= "イ形・ナ形が同型２(例：真っ黒い／真っ黒な)";
	var	SPFB2C	= "イ形で連体形が２つある(例：大きい／大きな)" ;
	var	SPFB3C	= "" ;
	var	SPFB4C	= "イ形で連体形がない(例：多い)" ;
	var	SPFB5C	= "イ形で否定形がない(例：ない)" ;
	var	SPFB6C	= "連用形が名詞になる(例：多く＋の＋人)" ;
	var	SPFB7C	= "[いい]の変則活用(例：連用形＝よく)" ;

	var	ANFB0	= PW20 ;
	var	ANFB1	= PW21 ;
	var	ANFB2	= PW22 ;
	var	ANFB3	= PW23 ;
	var	ANFB4	= PW24 ;
	var	ANFB5	= PW25 ;
	var	ANFB6	= PW26 ;
	var	ANFB7	= PW27 ;

	var	ANFB0C	= "" ;
	var	ANFB1C	= "";
	var	ANFB2C	= "" ;
	var	ANFB3C	= "ナ形で連体形「な・の」(例：特別な／特別の)" ;
	var	ANFB4C	= "" ;
	var	ANFB5C	= "" ;
	var	ANFB6C	= "「に」の用法が変則規則(例：同じように書く)" ;
	var	ANFB7C	= "「な」不要の変則連体形(例：同じ花)" ;

function pkCells(n, f1, f2, c){
	// n: Number of Source Words
	// f: Grammtical Attribute Code(s)
	// c: Rule caption to be displayed using "title" property in the HTML element
	n ++;	// Increment for the space of Grammar Rule Entry
	this.Cells	= new Array(n);
	this.Flag1	= f1;	// Flag1: 8 bit flags (Primary   Attributes)
	this.Flag2	= f2;	// Flag2: 8 bit flags (Secondary Attributes)
	this.Caps	= c;	// Caption to be displayed using 'title' property in HTML element
	this.length = n;
}
function makeRemarksList(){
	var	i = 0;
	this[i] = new pkCells(1, ANFB7, 0, ANFB7C );
	with(this[i]){
		Cells[0] = "[「な」不要]";
		Cells[1] = "おなじ/同じ";
	}
	this[++i] = new pkCells(1, ANFB6, 0, ANFB6C );
	with(this[i]){
		Cells[0] = "[「に」変則]";
		Cells[1] = "おなじ/同じ";
	}
	this[++i] = new pkCells(6, 0, SPFB0, SPFB0C );
	with(this[i]){
		Cells[0] = "[イナ同形1]";
		Cells[1] = "やわらかい/柔らかい";
		Cells[2] = "こまかい/細かい";
		Cells[3] = "あたたかい/暖かい/温かい";
		Cells[4] = "しかくい/四角い";
		Cells[5] = "きいろい/黄色い";
		Cells[6] = "ちゃいろい/茶色い";
	}
	this[++i] = new pkCells(4, 0, SPFB1, SPFB1C );
	with(this[i]){
		Cells[0] = "[イナ同形2]";
		Cells[1] = "まっくろい/真っ黒い";
		Cells[2] = "はらぐろい/腹黒い";
		Cells[3] = "まじかい/間近い";
		Cells[4] = "まんまるい/真ん丸い";
	}
	this[++i] = new pkCells(3, 0, SPFB2, SPFB2C );
	with(this[i]){
		Cells[0] = "[2連体形]";
		Cells[1] = "おおきい/大きい";
		Cells[2] = "ちいさい/小さい";
		Cells[3] = "おかしい/可笑しい";
	}
	this[++i] = new pkCells(8, ANFB3, 0, ANFB3C );
	with(this[i]){
		Cells[0] = "[ナ形な・の]";
		Cells[1] = "とくべつ/特別";
		Cells[2] = "いろいろ/色々";
		Cells[3] = "こうど/高度";
		Cells[4] = "べつ/別";
		Cells[5] = "わずか/わずか";
		Cells[6] = "さまざま/様々";
		Cells[7] = "とくしゅ/特殊";
		Cells[8] = "しゅじゅ/種々";
	}
	this[++i] = new pkCells(1, 0, SPFB4, SPFB4C );
	with(this[i]){
		Cells[0] = "[NO連体形]";
		Cells[1] = "おおい/多い";
	}
	this[++i] = new pkCells(1, 0, SPFB5, SPFB5C );
	with(this[i]){
		Cells[0] = "[NO否定形]";
		Cells[1] = "ない/無い";
	}
	this[++i] = new pkCells(3, 0, SPFB6, SPFB6C );
	with(this[i]){
		Cells[0] = "[連用形＝名詞]";
		Cells[1] = "おおい/多い";
		Cells[2] = "ちかい/近い";
		Cells[3] = "とおい/遠い";
	}
	this[++i] = new pkCells(1, 0, SPFB7, SPFB7C );
	with(this[i]){
		Cells[0] = "[連用形＝変則]";
		Cells[1] = "いい/いい";
	}
	this[++i] = new pkCells(1, 0, VSFB0, VSFB0C );
	with(this[i]){
		Cells[0] = "[否定形＝ない,NG:ありない]";
		Cells[1] = "ある/ある";
	}
	this[++i] = new pkCells(8, VBFB0, 0, VBFB0C );
	with(this[i]){
		Cells[0] = "[主語＝非情物]";
		Cells[1] = "ふる/降る";
		Cells[2] = "ある/ある";
		Cells[3] = "いる/要る";
		Cells[4] = "たりる/足りる";
		Cells[5] = "はじまる/始まる";
		Cells[6] = "のびる/伸びる";
		Cells[7] = "ながれる/流れる";
		Cells[8] = "おちる/落ちる";
	}
	this[++i] = new pkCells(5, VBFB0, 0, VBFB0C );
	with(this[i]){
		Cells[0] = "[主語＝有情物、主体外の意志]";
		Cells[1] = "そだつ/育つ";
		Cells[2] = "さく/咲く";
		Cells[3] = "あきる/飽きる";
		Cells[4] = "つかれる/疲れる";
		Cells[5] = "うまれる/生まれる";
		Cells[6] = "のびる/伸びる";
	}
	this[++i] = new pkCells(6, VBFB0, 0, VBFB0C );
	with(this[i]){
		Cells[0] = "[主体による制御不能な心理作用]";
		Cells[1] = "このむ/好む";
		Cells[2] = "きらう/嫌う";
		Cells[3] = "おしむ/惜しむ";
		Cells[4] = "うらやむ/羨む";
		Cells[5] = "おそれる/恐れる";
		Cells[6] = "こまる/困る";
	}
	this[++i] = new pkCells(1, VBFB0, 0, VBFB0C );
	with(this[i]){
		Cells[0] = "[原形の意味が「可能」を表す]";
		Cells[1] = "わかる/分かる";
	}
	this[++i] = new pkCells(1, VBFB0, 0, VBFB0C );
	with(this[i]){
		Cells[0] = "[自動詞で「可能」の意味がある]";
		Cells[1] = "はいる/入る";
	}
	this.length = ++i;
}

var	goTbodyRows = null;
var	giTbodyLen = 0;
var	oSrcWord = new Array();

function fnTblRemarksBindDriver(){
	var	goTbody = oSearchTable.all( SEARCH_BODY );
	goTobdyRows = goTbody.rows;
	giTbodyLen	= goTobdyRows.length;
	var oRems	= new makeRemarksList();
	var	i, j;
    window.status = "... Adding Comments in the 備考 field. ・・・しばらくお待ちください。";
	for (i=0; i<oRems.length; i++){
		fnTblRemarksBind( oRems[i] );
	}
	goTobdyRows = null;
	giTbodyLen	= 0;
}
function fnTblRemarksBind( oRems ){
	var i, j, k, m, p, q, r, iWordNum, oSpan, bMatched, aRow;
	var	low, high, middle;

	for (i=1; i<oRems.length; i++){
		q = 0, r = 0;
		while((p = oRems.Cells[i].indexOf("/", r)) != -1){
			oSrcWord[q++] = oRems.Cells[i].substring(r,p);
			r = p + 1;
		}
		oSrcWord[q] = oRems.Cells[i].substr(r);
		bMatched = false;

		/* *--------------------------------------------------------------------------------* */
		/* *	Binary Search																* */
		/* *--------------------------------------------------------------------------------* */

		low	= 0;
		high = giTbodyLen - 1;

		while(low <= high){
			middle = (low + high) / 2;
			aRow = goTobdyRows[middle];
			if (oSrcWord[0] == aRow.children[1].innerText &&
				oSrcWord[1] == aRow.children[2].innerText){
				oSpan = document.createElement( "SPAN" );
				with( oSpan ){
					innerText = oRems.Cells[0];					// Grammar Rule Legend
					title 	  = oRems.Caps;						// Set Tip message
				}
				with( aRow ){
					children[2].style.color = "red";			// [2]: 単語
					children[5].appendChild( oSpan );			// [5]: 備考
					children[6].innerText = oRems.Flag1;		// [6]: FLAG1
					children[7].innerText = oRems.Flag2;		// [7]: FLAG2
				}
				bMatched = true;
				break;	// No need FOR loop any more
			} else if (oSrcWord[0] < aRow.children[1].innerText){
				high = middle - 1;
			} else {
				low = middle + 1;
			}
		}

		if (bMatched) continue;

		/* *--------------------------------------------------------------------------------* */
		/* *	Linear Search																* */
		/* *--------------------------------------------------------------------------------* */

		for (j=0; j<giTbodyLen; j++){
			aRow = goTobdyRows[j];
			if (oSrcWord[0] == aRow.children[1].innerText &&	// [1]: 読み
				oSrcWord[1] == aRow.children[2].innerText){		// [2]: 単語
				oSpan = document.createElement( "SPAN" );
				with( oSpan ){
					innerText = oRems.Cells[0];					// Grammar Rule Legend
					title 	  = oRems.Caps;						// Set Tip message
				}
				with( aRow ){
					children[2].style.color = "red";			// [2]: 単語
					children[5].appendChild( oSpan );			// [5]: 備考
					children[6].innerText = oRems.Flag1;		// [6]: FLAG1
					children[7].innerText = oRems.Flag2;		// [7]: FLAG2
				}
				bMatched = true;
				break;	// No need FOR loop any more
			}
			if (bMatched) break;	// No need FOR loop any more
		}
	}
}

