
var _offsetX;
var _offsetY;
var _clientX;
var _clientY;
var _cursorLocked;
function pi_cursorLock(){ // mouse down
	_cursorLocked = true;
}
function pi_cursorUnlock(){ // mouse up
	_cursorLocked = false;
}
function pi_getMouseXY(evt){
	// マウスでパネルのタイトルを掴み移動させる
	// Firefox ではうまく動作しない
	if (_cursorLocked){ // mouse down
		var elm = document.getElementById("_postIt");
		elm.style.left = evt.clientX - _offsetX; // 表示するx座標
		elm.style.top = evt.clientY - _offsetY; // 表示するy座標
	} else { // mouse up
		// layerX layerY は Firefox のみの独自規格で、他のブラウザーは
		// offsetX offsetY だが、最近は Safari でも layerX layerY が動く
		// Firefox では evt.x evt.y は動かない
		_offsetX = evt.layerX;
		_offsetY = evt.layerY;
		_clientX = evt.clientX;
		_clientY = evt.clientY;
	}
}

//===== 旧 PostIt の設定 ======
//var _notOpen = 0;
//var _shrink = 1;
//var _openWithCondition = 2;
//var _openAnyway = 3;
//=========================== 
var _mode;
var _expand = 0;
//var _shrink = 1;
var _expired = 2; // 旧版との互換性のため 2 のまま

var _postItObj;
function setPostItObj(obj){
	_postItObj = obj;
}
function postItObj(){
	return _postItObj;
}

function savedPostIt(answer){
    if (trim(answer).length == 0){
        // 削除メッセージ
        alert("付箋は完全に削除されました");
    } else {
        var obj = JSON.parse(answer);
        //alert("savedPostIt->"+encodeObject(obj)); //##
        
        if (obj.type * 1 == _expired){
            alert("付箋は削除されました");
        } else {
            setPostItObjects(obj);
            
            // あらかじめ closePostIt() されていないとトグル式に閉じてしまう
            showPostIt();
        }
    }
}
function savePostIt(){
    // PostIt 内容を保存
    var elm = document.getElementById("textArea");
    elm.contentEditable = false;

    // RADIO ボックスから type を検出
    var elm = elmFor("removeCB");
    postItObj().type = (elm.checked) ? _expired : _expand;

    var val = document.getElementById("textArea").innerHTML;
    if (val.length > 0){
        val = transferToCR(val); // <br> を改行に変更
    }
    // 空データなら付箋は削除マークではなく実際に削除される
    val = trim(val);
    
    // savedPostIt（）に備え付箋を一旦閉じておく：その前に type, val を記憶
    closePostIt();
    
    //alert("savePostIt->"+postItObj().type+"->"+val); //##
    
    // val が "" の場合、そのレコードは削除される
    var args = new Object();
    args["owner"] = owner();
    args["patientId"] = patientId();
    args["entryDate"] = currentDate();
    args["type"] = postItObj().type;
    args["color"] = _colorNumber;
    args["val"] = encodeSTRING(val);
    NRCall("PUT_POST_IT", args, savedPostIt);
}

function positionInHTML(position, html){
    // 見かけ上は平文に見える文字列上の位置を HTML 上の位置として返す
    var isTag = false;
    var plainPos = 0;
    for (pos in html){
        var ch = html.charAt(pos);
        
        if (ch == "<") isTag = true;
        if (!isTag){
            if (plainPos == position)
                return pos;
            plainPos++;
        }
        if (ch == ">") isTag = false;
    }
}

function getSelectedString(command){
    // 文字列に HTML 属性をつける
    var elm = document.getElementById("textArea");
    var st = htmlToPlain(elm.innerHTML); // HTML をプレーン・テキストに変換
    
    if (command == "strong"){
        // 選択部分を強調文字にする
        var ln = "<strong>" + st + "</strong>";
    } else if (command == "red"){
        var ln = "<font color='#f00'>" + st + "</font>";
    } else if (command == "blue"){
        var ln = "<font color='#00f'>" + st + "</font>";
    } else if (command == "plain"){
        var ln = st;
    }
    elm.innerHTML = ln;
}

function closePostItEditor(){
    // 編集モードを終了し表示モードとする
    var elm = document.getElementById("textArea");
    elm.contentEditable = false;

    var tr = document.getElementById("spaceArea");
    tr.innerHTML = "";
    tr.style.height = "0px";
    
    document.getElementById("entryDateArea").innerHTML = "";
    document.getElementById("updateTimeArea").innerHTML = "";
    document.getElementById("postItToolArea").innerHTML = "";
    document.getElementById("footerArea").innerHTML = "";
}

var _colorNumber;
function changeToEditable(){
    // 付箋内容を編集できるようにする
    // textArea を編集可能状態にする
    var elm = document.getElementById("textArea");
    elm.contentEditable = true; // TEXT を編集可能状態にする
    elm.focus();
    
    // SPACE
    var tr = document.getElementById("spaceArea");
    tr.innerHTML = "";
    tr.style.height = "8px";
    
   // 受診日
    var tr = document.getElementById("entryDateArea");
    tr.innerHTML = "";
    var td = newTD(tr, "postitTD", "年月日");
    var date = (postItObj()) ? postItObj().entryDate : "";
    var td = newTD(tr, "", date);
    
    // 更新日
    var tr = document.getElementById("updateTimeArea");
    tr.innerHTML = "";
    var td = newTD(tr, "postitTD", "更新日");
    td.setAttribute("onclick", "showPostItObjects()");
    var update = (postItObj()) ? postItObj().updateTime : "";
    var td = newTD(tr, "", update);
    
    // 文字色
    var tr = document.getElementById("postItToolArea");
    tr.innerHTML = "";
    var td = newTD(tr, "", "");
    var sp = newSPAN(td, "");
    sp.style.paddingRight = "5px";
    sp.innerHTML = "文字色";
    var td = newTD(tr, "", "");
    var sp = newSPAN(td, "");
    sp.style.paddingRight = "5px";
    var a = newA(sp, "赤", "#", "");
    a.setAttribute("onMouseUp", "getSelectedString('red')"); //####
    var sp = newSPAN(td, "");
    sp.style.paddingRight = "5px";
    var a = newA(sp, "青", "#", "");
    a.setAttribute("onMouseUp", "getSelectedString('blue')"); //####
    var sp = newSPAN(td, "");
    sp.style.paddingRight = "5px";
    var a = newA(sp, "強調文字", "#", "");
    a.setAttribute("onMouseUp", "getSelectedString('strong')"); //####
    var sp = newSPAN(td, "");
    sp.style.paddingRight = "5px";
    var a = newA(sp, "平文", "#", "");
    a.setAttribute("onMouseUp", "getSelectedString('plain')"); //####
    
    // CHECK BOX
    var tr = document.getElementById("footerArea");
    tr.innerHTML = "";
    var td = newTD(tr, "", "");
    td.setAttribute("colspan", "2");
    var div = newDIV(td, "");
    
    var sp = newSPAN(div, "postItColorArea");
    sp.style.paddingRight = "5px";
    _colorNumber = postItObj().color * 1;
    showPostItColor();

    // 削除チェックボックス
    var sp = newSPAN(div, "");
    sp.style.fontSize = "10pt";
    sp.style.paddingRight = "10px";
    sp.style.position = "relative";
    sp.style.top = "8px";
    var status = (postItObj() && (postItObj().type * 1 == _expired)) ? 1 : 0;
    var cb = newCHECKBOX(sp, "removeCB", "削除", status);

    // BUTTON
    var sp = newSPAN(div, "");
    sp.style.position = "relative";
    sp.style.top = "6px";
    var bt = newBUTTON(sp, "", "とりやめ");
	bt.setAttribute("onclick", "closePostIt()");
    var bt = newBUTTON(sp, "", "確定");
	bt.setAttribute("onclick", "savePostIt()");
}

function showPostItColor(){
    // 付箋色を表示
    var elm = elmFor("postItColorArea");
    elm.innerHTML = "付箋色";
    elm.setAttribute("onclick", "changePostItColor()");
    
    switch (_colorNumber){
        case 1: elm.setAttribute("class", "postItTagBlue"); break;
        case 2: elm.setAttribute("class", "postItTagYellow"); break;
        case 3: elm.setAttribute("class", "postItTagRed"); break;
        default: elm.setAttribute("class", "postItTagGreen"); break;
    }
    elm.style.top = "5";
    elm.style.left = "-4";
}
function changePostItColor(){
    // 付箋色を変更
    if (_colorNumber < 3)
        _colorNumber += 1;
    else
        _colorNumber = 0;
    
    showPostItColor();
}

function makePostIt(obj){
    // 付箋の本体を表示
    // showPostItForce() と共有
    setPostItObj(obj); // 現在扱っている PostIt を記憶
    
    // currentDate のページ・ヘッダーの Y 座標を返す
    var elm = document.getElementById(currentDate() + ".page");
    var pos = getPosition(elm);
	var x = 30; // 表示するx座標
	var y = pos.y + 80; // 表示するy座標
    var w = 280;
    var title = "付箋";
    var haction = "openHelp('postItHelp.html')"; // HELP ACTION
    var elm = openSeeThroughPanel("_floatPanel", x, y, w, title, haction);
    if (!elm){
        alert("_floatPanel がないのでパネルを表示できません"); return;
    }
    elm.style.padding = "5px";
    
	var tbl = newTABLE(elm, "/base-table");
    tbl.style.backgroundColor = "#ffe";
    
    ///// CONTENTS：子テーブルとして生成 //////////
	var tr = newTR(tbl, "", "");
	var td = newTD(tr, "postItContentsArea", "");
    td.style.padding = "10px";
    var tbl = newTABLE(td, "/base-table");
    
    // 付箋内容
    var tr = newTR(tbl, "", "");
    var td = newTD(tr, "textArea", "");
    td.setAttribute("colspan", "2");
    td.setAttribute("onclick", "changeToEditable()");
    if (obj && obj.value && obj.value.length)
        td.innerHTML = convertSTRING(obj.value, "\n", "<br>"); // 改行を <br> に変更
    else
        td.innerHTML = "";
    
    ///// 以下は編集モードでのみ表示 ///////////////
    var tr = newTR(tbl, "spaceArea", ""); // contents
    
    var tr = newTR(tbl, "entryDateArea", ""); // contents
    tr.style.fontSize = "9pt";
    tr.style.color = "#aaa";
    
    var tr = newTR(tbl, "updateTimeArea", ""); // contents
    tr.style.fontSize = "9pt";
    tr.style.color = "#aaa";
    
    // tool area
    var tr = newTR(tbl, "postItToolArea", ""); // contents
    tr.style.fontSize = "9pt";
    tr.style.color = "#aaa";
    
    // button area
    var tr = newTR(tbl, "footerArea", ""); // contents
}


function showPostItForce(){
    // obj が無くても強制的に付箋を開く：chart.js から利用
    // 空の obj を生成して付箋パネルを開く
    var elm = document.getElementById("_postIt");
    if (elm && elm.innerHTML.length){
        // トグル式に付箋を表示・非表示
        closePostIt();
        return;
    }
    
    var obj = postItForDate(currentDate());
    //alert("showPostItForce->"+encodeObject(obj)); //##
    
    if (obj){
        obj.entryDate = currentDate();
    } else {
        var obj = new Object();
        obj.entryDate = currentDate();
        obj.type = _expand;
        obj.value = "";
        obj.updateTime = "";
    }
    
    makePostIt(obj);
    changeToEditable();
}
function closePostIt(){
    // 付箋を閉じる
    // closeFloatPanel() では他のカルテを開いた場合には機能しない
    var elm = elmFor("_floatPanel");
    elm.innerHTML = "";
    elm.style.left = -10000; // 表示するx座標
}
function showPostIt(){
	// ## あらかじめ base に _postIt エレメントの埋め込みが必要
    // obj = {"type":"0","entryDate":"...","value":"memo","updateTime":"..."}
    var obj = postItForDate(currentDate()); // currentDate() 以前直近の obj
    
    parent().openPage(currentDate(), true); // そのページをアクティブにする
    if (obj && obj.value){
        if (obj.type == _expired){
            // expired type なら閉じて終了
            closePostIt(); // 他の日付の付箋を閉じる
        } else {
            makePostIt(obj);
        }
    } else {
        // obj が無く status が無ければ閉じて終わる
        closePostIt(); // 他の日付の付箋を閉じる
    }
}

function ps_version(){
	return "Ver.140531";
}

