/**
 * jamasv4.js $Id: jamasv4.js 1948 2007-12-10 11:40:29Z taiji $
 */

/**
 * メニューの開閉
 *
 */
function exMenu(tname)
{
    tmenu = document.getElementById(tname).style;
    if (tmenu.display == 'none') tmenu.display = "block"; else tmenu.display = "none";
}


/**
 * 検索年度の変更
 * 
 * @param string mode Basic or Advanced
 */
function ychk(mode) 
{

    var year_range = null;
    for (i=0;i<document.forms['yr_form'].yr.length;i++) {
        if (document.forms['yr_form'][i].checked == true) {
            year_range = document.forms['yr_form'][i].value;
        }
    }

    if (year_range == null) {
        alert("年度指定範囲に誤りがあります(1)");
        return false;
    } else if (year_range == 'user_select') {
        // ユーザー指定
        yBgn = document.getElementById('rs1').value;
        yEnd = document.getElementById('re1').value;
    } else {
        ary  = year_range.split('-');
        yBgn = ary[0];
        yEnd = ary[1];
    }

    if (yBgn == 'none' || yEnd == 'none') {
        alert("年度指定範囲に誤りがあります(2)");
        return false;
    }

    ysa = parseFloat(yEnd) - parseFloat(yBgn);
    if (ysa < 0)  {
        alert("年度指定範囲に誤りがあります(3)");
        return false;
    }

    var form = document.createElement("form");
    var input = "";

    if (mode == 'Advanced') {
        module_value = 'Advanced';
        action_value = 'RangeSetConfirm';
        method_value = 'GET';
    } else {
        module_value = 'Default';
        action_value = 'RangeSet';
        method_value = 'POST';
    }

    form.action = "/index.php";
    form.method = method_value;
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "rmodule";
    input.value = mode;
    form.appendChild(input);
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "module";
    input.value = module_value;
    form.appendChild(input);
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "action";
    input.value = action_value;
    form.appendChild(input);
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "rst";
    input.value = yBgn;
    form.appendChild(input);
    input = document.createElement("input");
    input.type = "hidden";
    input.name = "red";
    input.value = yEnd;
    form.appendChild(input);
    document.getElementsByTagName("body")[0].appendChild(form);
    form.submit();
}

function chk_radio(idx)
{
    document.forms['yr_form'].yr[idx].checked = true;
}
function rst_select(idx)
{
    document.forms['yr_form'].rs1.selectedIndex = 0;
    document.forms['yr_form'].re1.selectedIndex = 0;
}

/**
 * 文献をチェックする(サーバーへリクエストを送る)
 *
 * @param int sid 検索履歴ID
 * @param int uid 
 */
function checkUid(sid,uid)
{

    clearMsg('errmsg2');
    clearMsg('errmsg3');

    var ele = document.getElementById("uid_"+uid);
    var xmlHttp = getXmlHttpObject();
    var url = '/index.php';
    var postdata = 'module=Default&action=SearchResultCheck&sid='+sid+'&';
    if(ele.checked){
        postdata += "uid="+uid;
    }else{
        postdata += "uidx="+uid;
    }
    xmlHttp.open('POST', url, true);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function(){};
    xmlHttp.send(postdata);
}

/**
 * ページ内の全ての文献をチェックする(サーバーへリクエストを送る)
 *
 * @param int sid
 * @param array uidArray
 * @param string ck_mode check|uncheck
 * @param int ck_type 0:タイトル表示,詳細表示でのチェック
 *                    1:クリップボードに送る
 *                    2:クリップボードでのチェック
 */
function checkClipAll(sid, uidArray, ck_mode, ck_type)
{
    if (ck_mode == 'check') {
        key_name = 'uid';
    } else {
        key_name = 'uidx';
    }
    if (ck_type != 1 && ck_type != 2) {
        ck_type = 0;
    }

    var xmlHttp = getXmlHttpObject();
    var url = '/index.php';
    // var postdata = 'module=Default&action=SearchResultCheck&sid='+sid+'&'+'ck_type='+ck_type+'&';
    var postdata = 'module=Clipboard&action=Append&sid='+sid+'&'+'ck_type='+ck_type+'&';
    var uid = uidArray.join('-');

    postdata = postdata + key_name +"="+uid;
    xmlHttp.open('POST', url, true);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
            var xmlDoc = xmlHttp.responseXML;
            if (xmlDoc.documentElement) {
                //var total   = xmlDoc.getElementsByTagName('total').item(0).firstChild;

                var success = xmlDoc.getElementsByTagName('success').item(0).firstChild;
                var add_req = xmlDoc.getElementsByTagName('add_req').item(0).firstChild;

                if (success.data == 1) {
                    msg = add_req.data  + "件クリップボードに保存しました。";
                } else {
                    msg = "保存件数を超えるため保存できませんでした（保存件数は500件までです）";
                }
            } else {
                msg = "unknown error detected";
            }
            setErrorMsg('errmsg2',msg);
            setErrorMsg('errmsg3',msg);
        }
    };
    xmlHttp.send(postdata);
}


function checkUidAll(sid, uidArray, ck_mode, ck_type)
{
    if (ck_mode == 'check') {
        key_name = 'uid';
    } else {
        key_name = 'uidx';
    }
    if (ck_type != 1 && ck_type != 2) {
        ck_type = 0;
    }

    var xmlHttp = getXmlHttpObject();
    var url = '/index.php';
    var postdata = 'module=Default&action=SearchResultCheck&sid='+sid+'&'+'ck_type='+ck_type+'&';
    var uid = uidArray.join('-');

    postdata = postdata + key_name +"="+uid;
    xmlHttp.open('POST', url, true);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlHttp.onreadystatechange = function() {}
    xmlHttp.send(postdata);
}



/**
 * 1件詳細表示へ
 *
 * @param int sid
 * @param int uid
 */
function goDetailOne(sid, uid, module)
{
    if (module != 'Basic' && module != 'Advanced' && module != 'Journal' && module != 'Clipboard') {
        return false;
    }

    frm = document.outputsetting1;

    var input   = document.createElement("input");
    input.type  = "hidden";
    input.name  = "sid";
    input.value = sid;
    frm.appendChild(input);

    var input   = document.createElement("input");
    input.type  = "hidden";
    input.name  = "uid";
    input.value = uid;
    frm.appendChild(input);

    agavi_action(frm, module, 'DetailOne', 'GET');
}

/**
 * すべてチェック
 *
 * @param string formname フォーム名
 * @param string ctname   チェックボックス名
 * @param int    sid      
 */
function allCheck(formname,ctname,sid)
{
    clearMsg('errmsg2');
    clearMsg('errmsg3');

    uidArray = [];
    for (i = 0;i < document.forms[formname].length;i++) {
        if (document.forms[formname].elements[i].type == "checkbox" &&
            document.forms[formname].elements[i].name == ctname) {
            document.forms[formname].elements[i].checked = true;
            uidArray.push(document.forms[formname].elements[i].value);
        }
    }
    checkUidAll(sid,uidArray,'check');

}

/**
 * すべてクリア
 *
 * @param string formname フォーム名
 * @param string ctname   チェックボックス名
 * @param int    sid      
 */
function allUnCheck(formname,ctname,sid)
{
    uidArray = [];
    for (i = 0;i < document.forms[formname].length;i++) {
        if (document.forms[formname].elements[i].type == "checkbox" &&
            document.forms[formname].elements[i].name == ctname) {
            document.forms[formname].elements[i].checked = false;
            uidArray.push(document.forms[formname].elements[i].value);
        }
    }
    checkUidAll(sid,uidArray,'uncheck');
}

/** 
 * 履歴検索実行
 *
 */
function histSearch(frm)
{
    if(checkbox_is_checked(frm,'sid[]')){
        agavi_action(frm,'Advanced','Search','POST');
    }else{
        msg = "履歴がチェックされていません。";
        setErrorMsg('errmsg',msg);
    }
    return false;
}

/**
 * 履歴のクリア 
 *
 */
function histClear(frm)
{
    if(checkbox_is_checked(frm,'sid[]')){
        agavi_action(frm,'Advanced','HistoryClear','POST');
    }else{
        msg = "履歴がチェックされていません。";
        setErrorMsg('errmsg',msg);
    }
    return false;
}

/**
 * 全ての履歴をクリア 
 *
 */
function histClearAll(frm)
{
    if(frm.elements['sid[]'] != undefined){
        frm.clear_mode.value = "all";
        agavi_action(frm,'Advanced','HistoryClear','POST');
    }
    return false;
}

/** 
 * 絞り込み検索へ 
 *
 */
function condForm(frm)
{
    if (checkbox_is_checked(frm,'sid[]')) {
        agavi_action(frm,'Advanced','CondForm','GET');
    } else {
        msg = "履歴がチェックされていません。";
        setErrorMsg('errmsg',msg);
    }
    return false;
}

/**
 * 詳細表示へ 
 *
 * @param element frm
 * @param int     sid
 * @param string  module Basic or Advanced
 */
function goDetail(frm, sid, module)
{
    //   if(uid_is_checked() == false){
    //     msg = "文献がチェックされていません。";
    //     setErrorMsg('errmsg2',msg);
    //     setErrorMsg('errmsg3',msg);
    //   }else{
    agavi_action(frm, module, 'Detail', 'GET');
    //  }
}


/** 
 * 印刷表示へ 
 *
 * @param element frm
 * @param int     sid
 * @param string  module Basic or Advanced
 */
function goPrint(frm, sid, module)
{
    var module = 'Advanced'; // Advancedに統一
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        ichushi_web_window = window.open('/blank.html','ichushi_web_window');
        agavi_action(frm, module, 'Print', 'POST','ichushi_web_window');
    }
}

/**
 * ダウンロードへ 
 *
 * @param element frm
 * @param int     sid
 * @param string  module Basic or Advanced
 */
function goDownload(frm, sid, module)
{
    var module = 'Advanced'; // Advancedに統一
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        ichushi_web_window = window.open('','ichushi_web_window');
        agavi_action(frm, module, 'Download', 'GET','ichushi_web_window');
    }
}

/** 
 * メールへ 
 *
 * @param element frm
 * @param int     sid
 * @param string  module Basic or Advanced
 */
function goMail(frm, sid, module)
{
    var module = 'Advanced'; // Advancedに統一
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        ichushi_web_window = window.open('','ichushi_web_window');
        agavi_action(frm, module, 'Mail', 'POST','ichushi_web_window');
    }
}

/**
 * クリップボードへ 
 *
 * @param element frm
 * @param int     sid
 * @param string  module Basic or Advanced
 */
function goClip(frm, sid, module)
{
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        var formobj = document.todetail;
        var ctname = 'uid[]';
        var uidArray = []; // checkされているuidの配列
        for (i = 0;i < formobj.elements.length;i++) {
            if (formobj.elements[i].type == "checkbox" &&
                formobj.elements[i].name == ctname){
                if(formobj.elements[i].checked == true){
                    uidArray.push(formobj.elements[i].value);
                }
            }
        }

        ck_type = 1;
        var res = checkClipAll(sid,uidArray,'check',ck_type);
        //alert("checkUidAll res="+res);
        //        msg = uidArray.length + "件をクリップボードに格納しました。";
        //setErrorMsg('errmsg2',msg);
        //setErrorMsg('errmsg3',msg);
    }
}


function goExport(frm, sid, module)
{
    var module      = 'Export';
    var checked_num = uid_checked_num();
    var max_export  = 200;
    
    if (checked_num <= 0) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else if (checked_num > max_export) {
        msg = "エクスポートできる文献は"+ max_export +"件までです。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        ichushi_web_window = window.open('','ichushi_web_window');
        agavi_action(frm, module, 'ServiceSelect', 'GET','ichushi_web_window');
    }
}

/**
 * クリップボードから削除
 */
function unClip()
{
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        frm = document.todetail;
        agavi_action(frm,'Clipboard','UnClip','POST');
    }
}

/*
function _unClip(frm, sid, module)
{
    if (uid_is_checked() == false) {
        msg = "文献がチェックされていません。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);
    } else {
        var formobj = document.todetail;
        var ctname = 'uid[]';
        var uidArray = []; // checkされているuidの配列
        for (i = 0;i < formobj.elements.length;i++) {
            if (formobj.elements[i].type == "checkbox" &&
                formobj.elements[i].name == ctname) {
                if (formobj.elements[i].checked == true) {
                    uidArray.push(formobj.elements[i].value);
                }
            }
        }
        ck_type = 1;
        checkUidAll(sid,uidArray,'uncheck', ck_type);
        msg = uidArray.length + "件をクリップボードから削除しました。";
        setErrorMsg('errmsg2',msg);
        setErrorMsg('errmsg3',msg);

        var date = new Date();
        var rand = date.getTime();
        document.location.href = '/index.php?module=Clipboard&action=Index&rand='+rand;
    }
}
*/

/**
 * 式の編集画面へ
 *
 * @param string module Advanced or Basic
 * @param int sid
 * @param string query 検索式(URLエンコードされていること)
 */
function goFomulaEdit(module, sid, query)
{
    var url = "/?module="+module+"&action=FomulaEdit&sid="+sid+"&q="+ query;
    document.location.href = url;
}

/** 
 * 候補辞書画面をひらく 
 */
function openKouhoDic()
{
    var form    = document.createElement("form");
    var dicref  = document.getElementById('dicref');
    var input   = document.createElement("input");
    input.type  = "hidden";
    input.name  = "dicref";
    input.value = dicref.value;
    form.appendChild(input);

    // dr
    var dr      = document.getElementById('dr');
    var input   = document.createElement("input");
    input.type  = "hidden";
    input.name  = "dr";
    input.value = dr.options[dr.options.selectedIndex].value;
    form.appendChild(input);

    document.getElementsByTagName("body")[0].appendChild(form);

    ichushi_web_window = window.open('','ichushi_web_window');
    agavi_action(form,'Advanced','KouhoDic','GET','ichushi_web_window');
}

/** 
 * 候補辞書画面をひらく (書誌確認画面用)
 */
function openKouhoDicJN()
{
    var form    = document.createElement("form");
    var dicref  = document.getElementById('dicref');

    // append elements
    var input = createInputElement("hidden", "dicref", dicref.value);
    form.appendChild(input);

    var input = createInputElement("hidden", "dr", "jn");
    form.appendChild(input);

    var input = createInputElement("hidden", "rtn_ele", "jn");
    form.appendChild(input);

    // append form
    document.getElementsByTagName("body")[0].appendChild(form);

    ichushi_web_window = window.open('','ichushi_web_window');
    agavi_action(form,'Advanced','KouhoDic','GET','ichushi_web_window');
}

function createInputElement(type, name, value)
{
    var ele   = document.createElement('input');
    ele.type  = type;
    ele.name  = name;
    ele.value = value;
    return ele;
}


/**
 * エラーメッセージをセット 
 *
 * @param string eleid elementにつけられたID
 * @param string msg エラーメッセージ
 */
function setErrorMsg(eleid, msg)
{
    ele = document.getElementById(eleid);
    ele.innerHTML = msg;
    ele.style.display = "block";
    ele.style.width   = "100%";
}

function clearMsg(eleid)
{
    ele = document.getElementById(eleid);
    ele.style.display = "none";
}


var cookie = new Cookie;
var hist_all;
var hidden_rows;
var hidden_tables;
var histimg = new Array("/images/allhis.gif", "/images/newhis.gif");


/**
 * 画像の切り替え
 */
function toggleImage(imagepos, newimg, imgsw)
{
    var newimgsw;

    if(imgsw == 1){
        newimgsw = 0;
    }else{
        newimgsw = 1;
    }
    img = document.getElementById(imagepos);
    img.src = newimg[newimgsw];
    return newimgsw;
}

/**
 * 履歴表示行数の切り替え 
 */
//function toggleHist(disp)
function toggleHist()
{
    if (is_ie) {
        disp_type = "inline";
    } else {
        disp_type = "table-row";
    }

    // ブロックのトグル
    for (i=0;i<hidden_tables.length;i++) {
        var tbl_idx = hidden_tables[i];
        var tbl     = document.getElementById('histBlock'+tbl_idx);
        //if ((tbl.style.display=="")||(tbl.style.display == disp_type)){
        if (hist_all != 1) {
            tbl.style.display ="none";
        } else {
            tbl.style.display = disp_type;
        }
    }

    // 行のトグル
    for (i=0;i<hidden_rows.length;i++) {
        var tbl_row_arr = hidden_rows[i];
        var tbl_idx = tbl_row_arr[0];
        var row_idx = tbl_row_arr[1];
        var tbl   = document.getElementById('histTable'+tbl_idx);
        var tbdy  = tbl.tBodies.item(0);
        var theTR = tbdy.rows.item(row_idx+1);

        //if ((theTR.style.display=="")||(theTR.style.display == disp_type)){
        if (hist_all != 1) {
            theTR.style.display="none";
        } else {
            theTR.style.display = disp_type;
        }
    }

    // cookie 更新
    cookie.set('hist_all', hist_all);
}


/**
 * uidのチェックボックスがチェックされているか 
 *
 * @return bool
 */
function uid_is_checked()
{
    // 他ページでチェックされている数
    obj = document.getElementById('checkedOtherPage');
    if (obj.value > 0) {
        return true;
    }

    var formobj = document.todetail;
    var ctname = 'uid[]';
    // このページでチェックされているか
    for (i = 0;i < formobj.elements.length;i++) {
        if (formobj.elements[i].type == "checkbox" &&
            formobj.elements[i].name == ctname) {
            if (formobj.elements[i].checked == true) {
                return true;
            }
        }
    }
    return false;
}

function uid_checked_num()
{
    var checked_num = 0;
    obj = document.getElementById('checkedOtherPage');
    if (obj.value > 0) {
        checked_num += obj.value;
    }

    var formobj = document.todetail;
    var ctname = 'uid[]';
    // このページでチェックされているか
    for (i = 0;i < formobj.elements.length;i++) {
        if (formobj.elements[i].type == "checkbox" &&
            formobj.elements[i].name == ctname) {
            if (formobj.elements[i].checked == true) {
                checked_num ++;
            }
        }
    }
    return checked_num;
}




/**
 * Basic 検索語の掛け合わせ
 * 
 * @param element frm フォームエレメント
 */
function goCrossSearch(frm)
{
    q_old = frm.q_old.value;
    q_new = frm.q_new.value;
    andor = frm.andor.value;

    if (q_new == undefined || q_new.length == 0) {
        // return false;
        document.getElementById('query').value = '';
        return true;
    } else {
        q     = q_old + ' ' + andor + ' (' + q_new + ')';
        document.getElementById('query').value = q;
        return true;
    }
}



/**
 * 統制語の選択
 */
function touseiSelect()
{
    var th_num = document.getElementById('th_num');
    var srchExpEle = document.getElementById('srchExp');
    var srchExp    = srchExpEle.value;

    for (i=0;i<th_num.value;i++) {
        frm = document.forms['thselectform_'+i];
        checked_flag = false;
        th_ary = [];
        for (j=0;j<frm.elements.length;j++) {
            if (frm.elements[j].type == 'checkbox' && frm.elements[j].name == 'th') {
                if (frm.elements[j].checked == true) {
                    checked_flag = true;
                    th_ary.push(frm.elements[j].value);
                }
            }
        }
        if (checked_flag == false) {
            msg = "統制語をチェックしてください。";
            setErrorMsg('errmsg',msg);
            return false;
        }
        if (th_ary.length == 1) {
            th_str = th_ary[0];
        } else {
            th_str = '('+ th_ary.join(' or ') + ')';
        }
        srchExp = srchExp.replace(/\?/,th_str);
    }

    q = document.getElementById('q');
    q.value = srchExp;
    return true;
}

// ページの途中まで自動スクロールするかのフラグ
var scroll_flag = 0;

/**
 * body onLoad で呼び出される関数 "q" にフォーカスを与える
 */
function initPage()
{
    q = document.getElementById('q');
    if (q != undefined && q.type == 'text') {
        q.focus();
    }
    //   if (scroll_flag == 1) {
    //     window.scrollTo(0,600);
    //   }
}

/**
 * 指定した件数で再表示
 * 
 * @param element frm フォームエレメント
 */
function changePerPage(frm)
{
    frm.submit();
}

var xmlHttp = getXmlHttpObject();


/**
 * 候補辞書でreturnキーを有効にする
 *
 * eventオブジェクトのkeyCodeプロパティで
 * キーコードを得る
 */
function forcusReturn(code)
{
    if (code == 13) {
        openKouhoDic();
        return false;
    }
    return true;
}
function forcusReturnJN(code)
{
    if (code == 13) {
        openKouhoDicJN();
        return false;
    }
    return true;
}





/**
 * 検索語が入力されているかチェック
 */

var time_new = 0;
var time_sav = 0;

function checkInput(ele)
{
    cs = new Date();
    time_new = cs.getTime();
    if ((time_new - time_sav) < 10000) {
        alert("検索は受け付け済みです");
        return false;
    }
    if(ele.value == ''){
        // return false; // チェックを外す(次の画面でエラー表示)
    }
    time_sav = time_new;
    return true;
}

/**
 * 履歴選択のチェックボックスがクリアされたら
 * エラーメッセージを消す
 */
function historyCheck(cbx)
{
    if (cbx.checked == true) {
        clearMsg('errmsg');
    }
    return true;
}


/**
 * 絞り込み画面:　副標目の診断すべてをチェック
 */
function checkShShindanAll()
{
    //「診断」「画像診断」「X線診断」「放射線核種診断」「超音波診断」
    var list = new Array(20, 21, 22, 23, 24);
    checkShAll("sh2", "check_shindan_all", list);
}

/**
 * 絞り込み画面:　副標目の治療すべてをチェック
 */
function checkShChiryouAll()
{
    //「治療」「薬物療法」「外科的療法」「移植」
    // 「食事療法」「精神療法」「放射線療法」
    var list = new Array(30, 31, 32, 33, 34, 35, 36);
    checkShAll("sh3", "check_chiryou_all", list);
}

/**
 * 絞り込み画面:  指定された副標目オプションを選択状態にする
 *
 * @param string sele_id セレクトボックスのID
 * @param string cbx_id  チェックボックスのID
 * @param Array  list    チェック対象の値の配列
 */
function checkShAll(sele_id, cbx_id, list)
{
    sele = document.getElementById(sele_id);
    cbx  = document.getElementById(cbx_id);
    opt_value = cbx.checked ? true : false;
    for (i = 0; i < sele.options.length; i++) {
        for (j = 0; j < list.length; j++) {
            if (sele.options[i].value == list[j]) {
                sele.options[i].selected = opt_value;
            }
        }
    }
    if (opt_value == true) {
        sele.options[0].selected = false;
    }
}

/**
 * 履歴の削除のキャンセル
 */
function historyClearCancel()
{
    document.location.href = '/index.php?module=Advanced&action=Index';
}

