

function owner(){
	return document.getElementById("_owner").value;
}

var _records;
function setRecords(array){
	// 読込まれたレコードを記憶
	_records = array;
}
function records(){
	return _records;
}
function recordAtIndex(ix){
	return _records[ix];
}

///////////////////////////
/// Ajax による処理 /////////

function searched(){
	// サーバから返された処理を実行
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert("searched ===\n"+value);//##
		var array = value.split("<SEPARATOR>");
		if (array.length > 1){
			var objects = eval('(' + array[1] + ')');
			setRecords(objects);
			showResult();
		}
		hideMessage("_message");
	} else 
		showMessage("_message", "サーバで処理中です ...");
}
function search(){
	// 検索キーによりデータを検索
	var code = document.getElementById("codeF").value;
	var key = document.getElementById("keyF").value;
	
	if (code.length + key.length == 0){
		alert("検索キーが指定されていません");
		return;
	}
	
	xmlHttpObject = createXMLHttpRequest(searched);
	if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
		var array = new Array();
		array["code"] = code;
		array["name"] = key;
		//array["handan"] = handan;
		
		var st = "sysServer.php?command=GET_GLOBAL_PRICE"
		+ "&value=" + encodeSTRING(encodeObject(array));
		//alert(st); //return; //===
		xmlHttpObject.open("GET", encodeURI(st), true);
		xmlHttpObject.send(null);
	}
}

function closeDebug(){
    document.getElementById("_debug").innerHTML = "";
}
function puttedGlobalToPrice(){
	// サーバから返された処理を実行
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert("puttedPriceList ===\n"+value);//##
		var array = value.split("<SEPARATOR>");
        var elm = document.getElementById("_debug");
        var div = newDIV(elm, "");
        div.style.borderBottom = "thin solid #aaa";
        div.style.marginBottom = "5px";
        var img = newIMAGE(div, "", "./close.png", "close");
        img.setAttribute("onclick", "closeDebug()");
        var sp = newSPAN(div, "");
        sp.style.paddingLeft = "5px";
        sp.innerHTML = "以下のレコードが PriceList へ上書きされました";
		if (array.length > 1){
            var div = newDIV(elm, "");
            div.innerHTML = array[1];
			alert("PriceList の該当レコードがグローバル辞書で更新されました");
        }
		hideMessage("_message");
	} else 
		showMessage("_message", "サーバで処理中です ...");
}
function putGlobalToPrice(){
	// グローバル辞書から PriceList へ同じ requestCode のレコードを書き込む
	xmlHttpObject = createXMLHttpRequest(puttedGlobalToPrice);
	if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
		var st = "sysServer.php?command=PUT_GLOBAL_TO_PRICE";
		//alert(st); //return; //===
		xmlHttpObject.open("GET", encodeURI(st), true);
		xmlHttpObject.send(null);
	}
}

function checkedPriceListGlobal(){
	// 各テーブルの存在がチェックされた
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert(value);//###
		var array = value.split("<SEPARATOR>");
		if (array.length > 1){
			var st = array[1];
			if (st.length){
				// テーブルの新規生成メッセージがあった場合、表示
				st = st + "<br/>*** データベースを調整しました";
				showMessage("_message", st);
			}
		} else
			showMessage("_message", "*** noaSystemServer error ***");
	}
	document.getElementById("message").innerHTML = "データベースのチェックが終わりました ...";
}
function checkPriceListGlobal(){
	// グローバル辞書の有無をチェック
	xmlHttpObject = createXMLHttpRequest(checkedPriceListGlobal);
	if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
		var st = "noaSystemServer.php?command=CREATE_TABLE_IF_NEEDED";
		//alert(st); //return; //===
		xmlHttpObject.open("GET", encodeURI(st), true);
		xmlHttpObject.send(null);
	}
}

/// Ajax による処理 /////////
///////////////////////////

function showInfo(row){
	// 選択された行のレコード属性パネルを開く
	var obj = recordAtIndex(row);
	//alert(encodeObject(obj)); //##
	
	var url = "./infoPanel.php?value=" + encodeObject(obj);
	window.open(url, "info", "width=500,height=200,location=no,toolbar=no");
}

function showResult(){
	var elm = document.getElementById("resultArea");
	elm.innerHTML = "";
	var tbl = newTABLE(elm, "noBorderTable");
	
	// title
	var tr = newTR(tbl, "", "");
	tr.style.backgroundColor = "#8db";
	var td = newTD(tr, "", "code");
	var td = newTD(tr, "", "requestCode");
	var td = newTD(tr, "", "name");
	var td = newTD(tr, "", "point");
	var td = newTD(tr, "", "unitName");
	var td = newTD(tr, "", "handanCode");
	var td = newTD(tr, "", "effectCode");
	var td = newTD(tr, "", "enforceDate");
	
	// records
	array = records();
	for (var i=0,ct=array.length; i < ct; i++){
		var obj = array[i];
		var tr = newTR(tbl, "", "");
		tr.setAttribute("onmouseout", "resetColor(this,'black','white')");
		tr.setAttribute("onmouseover", "setColor(this, 'yellow', 'blue')");
		tr.setAttribute("onclick", "showInfo('"+i+"')");
		var td = newTD(tr, "", obj.code);
		var td = newTD(tr, "", obj.requestCode);
		var td = newTD(tr, "", obj.name);
		var td = newTD(tr, "", obj.point);
		var td = newTD(tr, "", obj.unitName);
		var td = newTD(tr, "", obj.handanCode);
		var td = newTD(tr, "", obj.effectCode);
		var td = newTD(tr, "", obj.enforceDate);
	}
}

function viewLoadPane(){
	// CSV を閲覧するためのペーンを表示
	var elm = document.getElementById("controlArea");
	elm.innerHTML = "";
	var tbl = newTABLE(elm, "rootTable");
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "");
	td.innerHTML = "厚労省「診療行為マスター」「医薬品マスター」などの CSV データを直接閲覧するツールです。「厚労省マスター」の CSV ファイルは <a HREF='http://www.iryohoken.go.jp/shinryohoshu/downloadMenu/' target='_blank'>厚労省の Web サイト</a> から download できます。当面は「医科診療行為マスター」「医薬品マスター」の２つに対応しています。";
	
	// ファイル選択ボタン
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "", "");
	var fm = newFORM(td, "filename", "閲覧", "viewCSV.php");
	fm.setAttribute("target","_blank");
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "");
	td.innerHTML = "グローバル辞書への組込みは上のメニュー「CSV をグローバル辞書へ」で行います。";

	function newFORM(elm, name, label, action){
		// FORM を生成
		var fm = document.createElement('FORM');
		fm.setAttribute("METHOD", "POST");
		fm.setAttribute("enctype", "multipart/form-data");
		fm.setAttribute("ACTION", action);
		elm.appendChild(fm); 
		var tbl = newTABLE(fm, "controlTable");
		
		// ファイル・アップロード・ボタン
		var tr = newTR(tbl, "", "");
		var td = newTD(tr, "fm_col", "");
		var ip1 = document.createElement('INPUT');
		ip1.setAttribute("TYPE", "file");
		ip1.setAttribute("NAME", name);
		td.appendChild(ip1); 
		
		// submit(送信)ボタン
		var ip2 = document.createElement('INPUT');
		ip2.setAttribute("TYPE", "submit");
		ip2.setAttribute("VALUE", label);
		ip2.setAttribute("onclick", "closeUploadPane()");
		td.appendChild(ip2); 
		
		return fm;
	}
}

function showLoadPane(){
	// CSV から読込むためのペーンを表示
	var elm = document.getElementById("controlArea");
	elm.innerHTML = "";
	var tbl = newTABLE(elm, "rootTable");
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "厚労省「診療行為マスター」「医薬品マスター」などの CSV データをグローバル辞書へ読込む。");
	
	// ファイル選択ボタン
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "", "");
	var fm = newFORM(td, "filename", "読込", "uploadCSV.php");
	fm.setAttribute("target","_blank");
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "");
	td.innerHTML = "　CSV ファイルは /NOA_DB　の下にまずコピーされ、さらにグローバル辞書へ読込まれます。CSV は巨大で読込みにはちょっと時間がかかります。読込み終了しないうちにウインドーを閉じると不成功に終わる場合があります。<br/>　読込み状況を表示する画面の最下段に「..行のレコードが更新されました」というメッセージが表示されるまでウインドーを閉じないでください。";
	
	function newFORM(elm, name, label, action){
		// FORM を生成
		var fm = document.createElement('FORM');
		fm.setAttribute("METHOD", "POST");
		fm.setAttribute("enctype", "multipart/form-data");
		fm.setAttribute("ACTION", action);
		elm.appendChild(fm); 
		var tbl = newTABLE(fm, "controlTable");
		
		// ファイル・アップロード・ボタン
		var tr = newTR(tbl, "", "");
		var td = newTD(tr, "fm_col", "");
		var ip1 = document.createElement('INPUT');
		ip1.setAttribute("TYPE", "file");
		ip1.setAttribute("NAME", name);
		td.appendChild(ip1); 
		
		// submit(送信)ボタン
		var ip2 = document.createElement('INPUT');
		ip2.setAttribute("TYPE", "submit");
		ip2.setAttribute("VALUE", label);
		ip2.setAttribute("onclick", "closeUploadPane()");
		td.appendChild(ip2); 
		
		return fm;
	}
}

function showGlobalPane(){
	// グローバル辞書を閲覧するペーンを開く
	var elm = document.getElementById("controlArea");
	elm.innerHTML = "";
	var tbl = newTABLE(elm, "subTable");
    tbl.style.fontSize = "11pt";
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "グローバル辞書は「厚労省マスター」などから作成された辞書、PriceList は個人用辞書です。");
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "NOA は PriceList しか使いませんが、そこにない処置・検査・薬剤などを使いたい場合、NOA のメニューから「...その他」を選択すればグローバル辞書のデータを PriceList へコピーして使える仕組みになっています。PriceList 編集ツールで読込むこともできます。");
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "ここではグローバル辞書にどんなレコードがあるかを検索できます。");
	
	// controls
	var tr = newTR(tbl, "", "");
	
	var td = newTD(tr, "", "code ");
	td.style.backgroundColor = "#8db";
	td.style.padding = "0px 5px";
	var fd = newFIELD(td, "codeF", "", 3, "");
	fd.focus();
	
	var fd = newFIELD(td, "keyF", " name ", 20, "");
	fd.setAttribute("onchange","search()");
	
	var bt = newBUTTON(td, "", "検索");
	bt.setAttribute("onclick","search()");
	
	// results
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "resultArea", "");
}

function showRenewPane(){
	// PriceListGlobal のデータを PriceList へ書き込む
	var elm = document.getElementById("controlArea");
	elm.innerHTML = "";
	var tbl = newTABLE(elm, "rootTable");
	
	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "PriceList の requestCode（請求コード）を元にグローバル辞書から同じレコードを探し PriceList へ上書きします。");
	// control
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "グローバル・レコードを PriceList へ ");
	var bt = newBUTTON(td, "", "書き込む");
	bt.setAttribute("onclick","putGlobalToPrice()");

	// comment
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "comment", "投与量の default 値やメモなど、ユーザが設定する部分は上書きされません。");
}

var _oldTab;
function tabSelected(elm, num){
	// タブが選択された
	if (_oldTab){
		_oldTab.style.color = "#000";
		_oldTab.style.backgroundColor = "#8db";
	}
	_oldTab = elm;
	elm.style.color = "#000";
	elm.style.backgroundColor = "#fff";
    //setChangeColor(elm, '#000', '#fff');
	
	switch (num * 1){
		case 0: viewLoadPane(); break;
		case 1: showLoadPane(); break;
		case 2: showGlobalPane(); break;
		case 3: showRenewPane(); break;
	}
	document.getElementById("message").innerHTML = "";
}

function initGlobalMaster(){
	var elm = document.getElementById("base");
    elm.innerHTML = "";
    
    // HEADER
    var div = newDIV(elm, "title-bar");
    var dv = newDIV(div, "left-side");
    dv.innerHTML = "グローバル辞書 (owner: "+ owner() + ")";

    // TAB
    var div = newDIV(elm, "");
    div.style.marginTop = "8px";
    div.style.fontSize = "10pt";
    var sp = newSPAN(div, "tab");
    sp.style.borderRadius = "10px 10px 0px 0px";
    sp.innerHTML = "CSV を閲覧";
	sp.setAttribute("onclick","tabSelected(this,'0')");
    var sp = newSPAN(div, "tab");
    sp.style.borderRadius = "10px 10px 0px 0px";
    sp.innerHTML = "CSV をグローバル辞書へ";
//    setChangeColor(sp, '#000', '#fff');
	sp.setAttribute("onclick","tabSelected(this,'1')");
    var sp1 = newSPAN(div, "tab");
    sp1.style.borderRadius = "10px 10px 0px 0px";
    sp1.innerHTML = "グローバル辞書";
	sp1.setAttribute("onclick","tabSelected(this,'2')");
    var sp = newSPAN(div, "tab");
    sp.style.borderRadius = "10px 10px 0px 0px";
    sp.innerHTML = "グローバル辞書で PriceList を更新";
	sp.setAttribute("onclick","tabSelected(this,'3')");
//    setChangeColor(sp, '#000', '#fff');

    // CONTROLS
    var div = newDIV(elm, "controlArea");

    // FOOTER
    var div = newDIV(elm, "title-bar");
    div.style.marginTop = "5px";
    var dv = newDIV(div, "left-side");
    dv.innerHTML = version();
    
	// １番目の tab を選択
	tabSelected(sp1, 2);
	
	// グローバル辞書の有無をチェック
	checkPriceListGlobal();
}

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