//***********************************
// チェックボックスの初期設定:フレームを使用している場合
//***********************************
function initialize(){

    if (getTargetForm() == null || getTargetText() == null) {
        alert("親ウィンドウの情報が確認できません。");
        return;
    }
    var targetText = getTargetText();
    setCheckBoxValues(targetText);
}

//***********************************
// チェックボックスの初期設定:フレームを使用していない場合
//***********************************
function initializeNF(){

    if (getTargetFormNF() == null || getTargetTextNF() == null) {
        alert("親ウィンドウの情報が確認できません。");
        return;
    }
    var targetText = getTargetTextNF();
    setCheckBoxValues(targetText);
}

//***********************************
// チェックボックスに値をセットします。
//***********************************
function setCheckBoxValues(boxObj) {

    // 数字以外のものを削除。
    parentPut('', boxObj);

    hocdnkAll = boxObj.value;
    // 数字を切り出します。
    var hocdnkElm = hocdnkAll.match(/\d+/g);

    if (hocdnkElm == null) {
        return;
    }
    
    var checkPoint = new Array();
    j = 0;

    // 検索対象コードの配列を作成します。
    for(i=0; i <hocdnkElm.length; i++){

        if(document.forms[0].name == ""){
            //長さが2桁のコードの検索
            if(hocdnkElm[i].length == 2){
                checkPoint[j] = hocdnkElm[i];
                j++;
            }
        } else if(document.forms[0].name == "all") {
            // 特に指定のないコードの検索
                checkPoint[j] = hocdnkElm[i];
                j++;

        } else {
            //区・市町村の場合
            //フォームの名前が入っているコードの検索
            if(!(hocdnkElm[i].indexOf(document.forms[0].name,0))){
                checkPoint[j] = hocdnkElm[i];
                j++;
            }
        }
    }

    // 該当するコードがあった場合検索
    // レスポンス速度が気になる場合は、ここが対象になります。
    for(count=0; count < checkPoint.length; count++){

        for (j = 0; j < document.forms[0].elements.length; j++) {
            code = document.forms[0].elements[j].name;

            if (checkPoint[count] == code){
                document.forms[0].elements[j].checked = true;
                break;
            }
        }

    }
}

//***********************************
// チェックボックスのオン・オフ時の処理
//***********************************
function pushCheckBox(boxObj){

    if (getTargetForm() == null || getTargetText() == null) {
        alert("親ウィンドウの情報が確認できません。");
        return;
    }
    var targetTextBox = getTargetText();

    if(boxObj.checked){
        //チェックボックスがオンの時
        window.parent.parentPut(boxObj.name, targetTextBox);
    } else {
        //チェックボックスがオフの時
        window.parent.parentTake(boxObj.name, targetTextBox);
    }
}

//***********************************
// チェックボックスのオン・オフ時の処理
//***********************************
function pushCheckBoxNF(boxObj){

    if (getTargetFormNF() == null || getTargetTextNF() == null) {
        alert("親ウィンドウの情報が確認できません。");
        return;
    }
    var targetTextBox = getTargetTextNF();

    if(boxObj.checked){
        //チェックボックスがオンの時
        window.parentPut(boxObj.name, targetTextBox);
    } else {
        //チェックボックスがオフの時
        window.parentTake(boxObj.name, targetTextBox);
    }
}

//***********************************
// TextBoxの値に引数を設定
//***********************************
function parentPut(code, boxObj){

    hocdnkAll = boxObj.value + ' ' + code;
    var hocdnkElm = hocdnkAll.match(/\d+/g);
    var text = '';
    if (hocdnkElm != null) {
        for (i = 0; i < hocdnkElm.length; i++) {
            text += hocdnkElm[i] + ' ';
        }
    }
    boxObj.value = text;
}

//***********************************
// TextBoxの値から引数を削除
//***********************************
function parentTake(code, boxObj){

    hocdnkAll = boxObj.value;
    var hocdnkElm = hocdnkAll.match(/\d+/g);
    var text = '';
    if (hocdnkElm != null) {
        for (i = 0; i < hocdnkElm.length; i++) {
            if (hocdnkElm[i] != code) {
                text += hocdnkElm[i] + ' ';
            }
        }
    }
    boxObj.value = text;
}

//***********************************
// 対象となるFormObjectを取得:フレーム使用
//***********************************
function getTargetForm() {

    var parentwin = window.parent;
    var targetwin = parentwin.opener;
    var queries = parentwin.location.search;
    var formname = getQueryValue(queries, 'pfm');
	return getForm(targetwin, formname);
}

//***********************************
// 対象となるFormObjectを取得:フレーム未使用
//***********************************
function getTargetFormNF() {

    var targetwin = window.opener;
    var queries = window.location.search;
    var formname = getQueryValue(queries, 'pfm');
	return getForm(targetwin, formname);
}

//***********************************
// WindowsObjectと名前からFormObjectを取得
//***********************************
function getForm(win,name) {
	if(document.layers){
	    // NN4.7 対応
		if(win.document.layers['contents'] 
		    && win.document.layers['contents'].document.forms[name]){
	
			return win.document.layers['contents'].document.forms[name];
		
		}else if(win.document.forms[name]){
			return win.document.forms[name];
		}
	}else{
		return win.document.forms[name];
	}
}

//***********************************
// 対象となるTextObjectを取得
//***********************************
function getTargetText() {

    var parentwin = window.parent;
    var targetwin = parentwin.opener;
    var queries = parentwin.location.search;
    return getTextBox(targetwin, queries);
}

//***********************************
// 対象となるTextObjectを取得
//***********************************
function getTargetTextNF() {

    var targetwin = window.opener;
    var queries = window.location.search;
    return getTextBox(targetwin, queries);
}

//***********************************
// WindowsObjectとクエリー列からTextBoxを取得
//***********************************
function getTextBox(win,queries) {

    if (win.closed) {
        return null;
    }
    var formname = getQueryValue(queries, 'pfm');
    var boxname = getQueryValue(queries, 'ptx');
    
	if(document.layers){
	    // NN4.7 対応
		if(win.document.layers['contents']
		    && win.document.layers['contents'].document.forms[formname].elements[boxname]){
			
			return win.document.layers['contents'].document.forms[formname].elements[boxname];
		
		}else if(win.document.forms[formname].elements[boxname]){
			return win.document.forms[formname].elements[boxname];
		}
	}else{
		return win.document.forms[formname].elements[boxname];
	}
}

//***********************************
// Utility:ある文字列に含まれるある文字の数をカウントする
//***********************************
function cnumber(str, c) {
    return str.match(new RegExp("(" + c + ")", "g")).length;
}

//***********************************
// Utility:QueryMatrix作成
//***********************************
function getQueryMatrix(queries) {

    if(queries.length <= 1 || queries.charAt(0) != '?'){
        return new Array(0);
    }

    // Query数
    var num = cnumber(queries, "=");

    // Matrix作成・初期化
    matrix = new Array(num);
    for (i = 0; i < matrix.length; i++) {
        matrix[i] = new Array(2);
        for (j = 0; j < matrix[i].length; j++) {
            matrix[i][j] = '';
        }
    }

    // 文字の切り出し・格納
    var iskey   = true;
    var count   = 0;
    for(i = 1; i <= queries.length - 1; i++){
        ch = queries.charAt(i);
        if(ch == '='){
            iskey = false;
            continue;
        }
        if(ch == '&'){
            iskey = true;
            count++;
            continue;
        }
        if(iskey) {
        matrix[count][0] += ch;
        } else {
        matrix[count][1] += ch;
        }
    }
    return matrix;
}
//***********************************
// Utility:クエリー文字列とキー名からクエリーの値を取得する
//***********************************
function getQueryValue(queries,requestkey) {

    var matrix = getQueryMatrix(queries);
    for(i = 0; i < matrix.length; i++){
        var key = matrix[i][0];
        if (key == requestkey) {
            return matrix[i][1];
        }
    }
    return '';
}

//***********************************
// シソーラス・分類語キーワードセット用
// 論理コード(ラジオボタンによるAND、OR…)を変更する。
// 選択されたボタンと同じ値を持つオブジェクトを選択します。
// 論理コード初期値はAND。リロードが行われたら初期化。
//***********************************

var opcd="OR";

function changeOpecord(btnObj) {

    var selectedOpcd = btnObj.value;
    opcd = selectedOpcd;
    var forms = window.document.forms;
    
    for (f=0;f<forms.length;f++) {
	    var form = forms[f];
		var elems = form.elements;
		for (i=0;i<elems.length;i++) {
		   var elem = elems[i];
		   if (elem.value==selectedOpcd) {
		       elem.checked=true;
		   }
		}
    }
}

//***********************************
// シソーラス・分類語キーワードセット用
// 選択したリンクに関連付いたキーワードをセットします。
// 値をセットするテキストボックスが取得できなかった場合は何もしません
//***********************************
function setWord(value) {

    if (isCodeSelect()) {

        var queries = window.parent.location.search;
        var textBoxObj = getTextBox(window.parent.opener, queries);

        if (textBoxObj == null) { return; }

        var word = textBoxObj.value;
        word=mb_Trim(word);
        word=Trim(word);

        if (word==null || word.length < 1) {
            word = value;
        } else {
            word = word + ' ' + opcd + ' ' + value;
        }
        textBoxObj.value = word;
        
        // 親ウィンドウを閉じます。
        //window.parent.close();
    }
}

//***********************************
// コード選択シソーラス一覧用画面かどうか判断します。
// コード選択機能：親ウィンドウとオープナーがあり
// 必要なパラメータpfmとptxがあること
//***********************************
function isCodeSelect() {

    if (window.parent != null
        && window.parent.opener != null) {
        
        if (hasEnoughQuery()) {
             return true;
        } else {
             return false;
        }
    } else {
        return false;
    }
}

//***********************************
// コード選択機能シソーラス一覧用
// クエリーを持っているかどうかを判断します
//***********************************
function hasEnoughQuery() {

    var queries = window.parent.location.search;
    
    if (queries == null || queries == '') {
        return false;
    }

	if (queries.indexOf("pfm") == -1
	    || queries.indexOf("ptx") == -1) {
	    return false;
	} else {
	    return true;
	}
}

//***********************************
// 強制的にウィンドウを閉じます。
// 親Frameがある場合にも対応します。
//***********************************
function closeWin() {

    if (isCodeSelect()) {
        window.parent.close();

    } else {
        // NN系はセキュリティのため、Scriptで開いたウィンドウ以外は
        // close()イベントで閉じることができない。
        if (window.parent != null) {
            window.opener = window.parent;
            var win = window.parent.open(location.href,"_self");
            win.close();
        } else {
            window.opener = window;
            var win = window.open(location.href,"_self");
            win.close();
        }
    }
}

//***********************************
// Utility:半角・全角トリムのための関数
//***********************************
function Trim(str) { return RTrim(LTrim(str)); }
function mb_Trim(str) { return mb_RTrim(mb_LTrim(str)); }

function LTrim(str) { return str.replace(/^\s+/,""); }
function RTrim(str) { return str.replace(/\s+$/,""); }

function mb_LTrim(str) { return str.replace(/^　+/,""); }
function mb_RTrim(str) { return str.replace(/　+$/,""); }

