

/////////////////////////
///// カルテからの継承値 ///

function noa(){
    if (window.opener.name == "noa"){
        return window.opener;
    } else if (window.opener.name == "tools"){
        return window.opener.top.noa;
    } else if (window.top.noa){
        return window.top.noa;
    } else {
        alert("ERROR *** insurance.js: window.opener としての NOA が見つかりません");
        return null;
    }
}

function patientId(){
    return noa().patientId();
}

function patientKanjiName(){
    return noa().patientKanjiName();
}

function currentDate(){
    return noa().currentDate();
}

function owner(){
    return noa().owner();
}

///// カルテからの継承値 ///
/////////////////////////

///////////////////////////////////
/// localStorage による処理 /////////

function putWindowSize(){
	// DocMaker のウインドー位置とサイズを localStorage へ記憶
    var array = new Array();
	array.push(window.screenLeft); // x
	array.push(window.screenTop - 22); // y
	array.push(window.outerWidth); // w
	array.push(window.outerHeight); // h
    window.localStorage["CorrectionHistoryWindowSize"] = array.join(",");
    
    showFadeoutInfo("_debug", "window のサイズと位置を記憶しました", 800);
}
function getWindowSize(){
	// DocMaker のウインドー位置とサイズを localStorage から取り出す
    var windowStatus = window.localStorage["CorrectionHistoryWindowSize"];
    if (windowStatus){
        var array = windowStatus.split(",");
        var x = array[0];
        var y = array[1];
        var w = array[2];
        var h = array[3];
		// resize を先にしておかないと元が大きいサイズだった場合 moveTo しよう
		// としてもウインドー境界の制限で移動できない場合がある
		window.resizeTo(w, h);
		window.moveTo(x, y);
    }
}

/// localStorage による処理 /////////
///////////////////////////////////

function isTool(){
    // ToolMenu 内で開いた場合は true を返す
    return (window.name == "tools") ? true : false;
}

var _records;
function setRecords(array){
    _records = array;
}
function records(){
    // 修正履歴としての ProgressSection レコードの配列
    return _records;
}
function recordForDate(dateTime){
    // 修正履歴としての ProgressSection レコードの配列
    for (num in _records){
        var rec = _records[num];
        if (rec['ProgressSection.updateTime'] == dateTime) return rec;
    }
    return null;
}

function showLogContents(elm){
    // dateTime の内容を表示
    var dateTime = elm.value;
    var rec = recordForDate(dateTime);
    if (!rec){
        alert(dateTime + " の日時に 修正前の記述はありませんでした");
        return;
    }
    _debug("showLogContents->"+encodeObject(rec));

    var elm = document.getElementById("logContentsArea");
    elm.innerHTML = "";
    
    // 修正履歴を表示するエリアを生成
    var tbl = newTABLE(elm, "");
    tbl.style.wodth = "100%";
    tbl.style.fontSize = "10pt";
    
    // 各 CELL 毎の修正履歴を表示
    var array = noa().layoutForMode(_progress_);
    for (num in array){
        var cell = array[num];
        var tag = cell.tag;

        var tr = newTR(tbl, "", "");
        if (tag == "ProgressSection.freq") tr.style.color = "#ccc";
        // LABEL
        var td = newTD(tr, "", cell.label);
        td.style.width = "55px";
        td.style.padding = "0 5px";
        td.style.verticalAlign = "top";
        td.style.backgroundColor = "#ec9";
        // VALUE
        var value = (rec[tag]) ? rec[tag] : "";
        value = transferCR(value); // 改行を <br> に変換
        var td = newTD(tr, "", "");
        td.innerHTML = value; // HTML を表示するため innerHTML へ与える
        td.style.padding = "0 5px";
        td.style.borderBottom = "thin solid #ccc";
    }
}

var _logTD;
function showLog(answer){
    // dateTime の修正履歴を表示
    var array = JSON.parse(answer);
    var dateTime = array[0]['ProgressSection.entryDate'];
    setRecords(array);
    
    _debug("== showLog"); //##
    _debug("dateTime->"+dateTime); //##
    
    // 他の修正履歴が開いていれば消去
    if (_logTD) _logTD.innerHTML = "";
    
    // dateTime の修正履歴を表示する行を取得
    var elm = document.getElementById(dateTime + ".logRow");
    elm.innerHTML = "";
    if (isTool()){ // ToolMenu 内で開いた場合
        _logTD = newDIV(elm, "logArea");
    } else { // 別ウインドウで開いた場合
        _logTD = newTD(elm, "logArea");
        _logTD.setAttribute("colspan", "2");
    }
    
    // 修正日時のポップアップ・メニューを生成
    var correctionHistory = [""];
    var array = records();
    //_debug("<p>array->"+encodeObject(array)+"</p>"); //##
    
    for (num in array){
        var rec = array[num];
        _debug("updateTime->"+rec['ProgressSection.entryDate']); //##
        var freq = rec['ProgressSection.freq'];
        if (!freq || (freq * 1 == 0)) continue;
        
        correctionHistory.push(rec['ProgressSection.updateTime']);
    }
    //_debug("correctionHistory->"+correctionHistory); //##
    
    var div = newDIV(_logTD, "");
    div.style.backgroundColor = "#ffe";
    div.style.border = "thin solid #aaa";
    div.style.fontSize = "10pt";
    var sp = newSPAN(div, "");
    sp.style.paddingLeft = "10px";
    if (correctionHistory.length > 1){
        sp.innerHTML = "修正日時";
        sp.style.paddingRight = "5px";
        var pu = newPopupMenu(div, "", correctionHistory, "");
        pu.setAttribute("onchange", "showLogContents(this)");
    } else {
        sp.innerHTML = "このページでは修正ありません";
    }

    // 修正ログを表示するエリア
    var dv = newDIV(div, "logContentsArea");
}
function getLog(dateTime){
    // dateTime の修正履歴をサーバへリクエスト
    _debug("== getLog->"+dateTime); //##
    
    if (isTool() == false)
        putWindowSize();
    
    NRGetCorrectionHistory(owner(), patientId(), dateTime, showLog);
}


function gotPages(answer){
    //_debug("== openPages ->"+answer); //##
    
    var obj = JSON.parse(answer);
    
    // ### noa() 経由でなく neuron.js へ直接書込む
    setNameObj(obj.nameSection);
    setProgressObj(obj.progressSection);
    
    // 受信履歴を表示
    var elm = document.getElementById("contentsArea");
    elm.innerHTML = "";
    var tbl = newTABLE(elm, "/base-table");
    tbl.style.fontSize = "10pt";
    tbl.style.marginTop = "5px";

    var tr = newTR(tbl, "", "");
    var td = newTD(tr, "", "受診年月日");
    td.style.textAlign = "center";
    td.style.width = "170px";
    var td = newTD(tr, "", "主訴");
    td.style.textAlign = "center";

    var array = history();
    for (num in array){
        var dateTime = array[num];
        var rec = obj.progressSection[dateTime];
        var tr = newTR(tbl, dateTime + ".row", "");
        // entryDate
        var td = newTD(tr, "/record", dateTime);
        td.setAttribute("onclick", "getLog('" + dateTime + "')");
        td.style.textAlign = "center";
        td.style.verticalAlign = "top";
        // subject
        var st = (rec.subject) ? rec.subject.val : "";
        var td = newTD(tr, "", st);
        var tr = newTR(tbl, dateTime + ".logRow", "");
    }
}

function help(){
	window.open("./help.html","Help"
				,"width=450,height=700,scrollbars=yes,resizable=yes");
}

function init(){
    //_initDebug(true); //##
    
	var elm = document.getElementById("base");
	
	// === HEADER =======================
    var div = newDIV(elm, "/tool-header");
    var dv = newDIV(div, "/left-side");
    dv.style.fontSize = "12px";
    dv.style.width = "80%";
    // TITLE
    var sp = newSPAN(dv, "");
    sp.innerHTML = "修正履歴";
    var dv = newDIV(div, "/right-side");
    // HELP ICON
	var img = newIMAGE(dv, "", "./help.png", "?");
	img.style.height = "18px";
    img.setAttribute("onclick", "help()");
    img.setAttribute("class", "expandIcon");
    
    // === CONTENTS ======================
    var contentsDiv = newDIV(elm, "contentsArea");

	// === FOOTER ===================
    var div = newDIV(elm, "/tool-footer");
    var dv = newDIV(div, "/left-side");
    var dv = newDIV(div, "/right-side");
    dv.innerHTML = version();

    if (!noa()){
        alert("NOA のツール・メニューから開いてください");
        if ((isTool()) == false) window.close();
    } else if (!noa().patientId()){
        alert("修正履歴の対象となるカルテが開いていません");
        if ((isTool()) == false) window.close();
    } else {
        if (isTool()){
            // TOOL AREA で開いた場合
            var div = newDIV(contentsDiv, currentDate() + ".logRow", "");
            getLog(currentDate());
        } else {
            // 独立したウインドーとして開いた場合
            getWindowSize();
            NRGetPages(owner(), patientId(), gotPages);
        }
    }
}

function version(){
    return "Ver.130911";
}

