
/////////////////////////////////////////////
///// Ajax //////////////////////////////////

function gotPath(){
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert("gotPath ===\n"+value);//##
        
        setDefaultPath(value);
        
        showMenu();
		hideMessage("_message");
	} 
}
function getPath(){
    // filename をサーバから読み出す
    xmlHttpObject = createXMLHttpRequest(gotPath);
    if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
        var array = new Array();
        array["owner"] = owner();
        // array["menu"] = "1"; -- ここはドキュメントの path なので不要
        
        var st = "./server.php?command=GET_PATH"
        + "&value=" + encodeObject(array);
        //alert(st); //===
        
        xmlHttpObject.open("GET", encodeURI(st), true);
        xmlHttpObject.send(null);
    }
}

function gotFile(){
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert("gotFile ===\n"+value);//##
        
		var array = value.split("<SEPARATOR>");
		if (array.length > 1){
			//alert(array[1]);
            var obj = decodeObject(array[1]);
            setMenuObj(obj);
		} else {
            var array = new Array();
            array.push(" メニューが作成されていないので サンプル・メニューを表示します。");
            array.push("適当に編集してください。");
            var msg = array.join("");
            showFadeoutInfo("message", msg, 3000);
        }
        getPath();
		hideMessage("_message");
	} else 
		showMessage("_message", "サーバで処理中です ... ");
}
function getFile(filename){
    // filename をサーバから読み出す
    xmlHttpObject = createXMLHttpRequest(gotFile);
    if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
        var array = new Array();
        array["owner"] = owner();
        array["menu"] = "1";
        array["filename"] = filename;
        
        setFileName(filename);
        
        var st = "./server.php?command=GET_FILE"
        + "&value=" + encodeObject(array);
        //alert(st); //===
        
        xmlHttpObject.open("GET", encodeURI(st), true);
        xmlHttpObject.send(null);
    }
}

var _mainMenu;
function gotSubMenu(){
	if ((xmlHttpObject.readyState == 4) && (xmlHttpObject.status == 200)){
		var value = xmlHttpObject.responseText;
		//alert("gotSubMenu ===\n"+value);//##
        
		var array = value.split("<SEPARATOR>");
		if (array.length > 1){
			//alert(array[1]);
            var obj = decodeObject(array[1]);
            setSubMenuObjForMainMenu(obj, _mainMenu);
        }
        showSubMenuFor(_mainMenu);
		hideMessage("_message");
	} else 
		showMessage("_message", "サブメニューをリクエストしています ... ");
}
function getSubMenu(mainMenu){
    // SUBMENU をサーバへリクエスト
    xmlHttpObject = createXMLHttpRequest(gotSubMenu);
    if (xmlHttpObject){ // GETパラメータ付きでリクエスト送信
        var array = new Array();
        array["owner"] = owner();
        array["menu"] = "1";
        array["filename"] = menuForMainMenu(mainMenu);
        
        _mainMenu = mainMenu;
        
        var st = "./server.php?command=GET_FILE"
        + "&value=" + encodeObject(array);
        //alert(st); //===
        
        xmlHttpObject.open("GET", encodeURI(st), true);
        xmlHttpObject.send(null);
    }
}

///// Ajax //////////////////////////////////
/////////////////////////////////////////////

/////////////////////////
///// localStorage //////

function checkNOA(){
    // NOA から得られた owner を localStorage に記憶
    if (window.opener && (window.opener.name == "noa")){
        window.localStorage["infoBorderOwner"] = window.opener.owner();
    } else if (window.top && (window.top.noa)){
        window.localStorage["infoBorderOwner"] = window.top.noa.owner();
    } else {
        alert("Window opener としての NOA が見つかりません");
    }
}

///// localStorage //////
/////////////////////////


var _parents;
function setParentForRow(parent, num){
    if (!_parents) _parents = new Object();
    
    _parents[num] = parent;
}
function parentForRow(num){
    // num は欠番あり
    return _parents[num];
}

var _rows;
function setRows(num){
    _rows = num;
}
function rows(){
    return _rows;
}

var _filename;
function setFileName(name){
    _filename = name;
}
function fileName(){
    return _filename;
}
function isMainMenu(){
    return (_filename == "menu.txt") ? true : false;
}

function openEditor(){
    // Editor を開く
	window.open("./editor.php", "contents");
}

function clickedTitle(row){
    // row 行目のタイトルがクリックされた
    var parent = parentForRow(row);
    var array = parent.children;
    
    for (row in array){
        // 子供 row をトグル式に折畳む
        var elm = document.getElementById("row."+row);
        if (elm.style.display == "none")
            elm.style.display = "block"; // 表示する
        else
            elm.style.display = "none"; // 表示しない
    }
}

var _isShrink;
function shrink(mainMenu, subMenu){
    // subMenu の子供全体を収縮 / その subMenu のみ expand
    // の動作をトグル式に実行
    var isOpen;
    if (_isShrink){
        // 選択された subMenu 所属の URI 行を展開
        var recs = subMenuObjForMainMenu(mainMenu);
        for (sbMenu in recs){
            var uri = trim(recs[sbMenu]);
            
            if (uri.length == 0){ // TITLE only
                isOpen =  (sbMenu == subMenu) ? true : false;
            } else { // TITLE with ANCHOR
                var elm = document.getElementById("row." + sbMenu);
                if (isOpen){
                    elm.style.display = "block"; // 表示する
                }
            }
        }
        _isShrink = false;
    } else {
        // すべての URI 行を収縮
        var recs = subMenuObjForMainMenu(mainMenu);
        for (sbMenu in recs){
            var uri = trim(recs[sbMenu]);
            
            if (uri.length == 0){ // TITLE only
            } else { // TITLE with ANCHOR
                var elm = document.getElementById("row." + sbMenu);
                elm.style.display = "none"; // 表示しない
            }
        }
        _isShrink = true;
    }
}

function showSubMenuFor(mainMenu){
    // mainMenu に所属する subMenu を表示
	var elm = document.getElementById("contents");
	elm.innerHTML = "";
    
    var recs = subMenuObjForMainMenu(mainMenu);
    for (subMenu in recs){
        var uri = trim(recs[subMenu]);
        var dv = newDIV(elm, "row." + subMenu);
        dv.style.padding = "0px 5px";
        
        if (uri.length == 0){ // TITLE only
            dv.innerHTML = "○ " + subMenu;
            dv.style.backgroundColor = "#cfd";
            dv.style.borderTop = "2px solid #fff";
            dv.setAttribute("onmouseout","resetColor(this,'#000','#cfd')");
            dv.setAttribute("onmouseover","setColor(this,'#ff0','#00f')");
            var action = "shrink('"+mainMenu+"','"+subMenu+"')";
            dv.setAttribute("onclick", action);
        } else { // TITLE with ANCHOR
            if (uri.charAt(0) == "*"){
                // * で始まる anchor は * を defaultPath() に読み替える
                // ##### この機能は path としてうまく機能していない #####
                uri = defaultPath() + "/" + uri.substr(1);
            }
            dv.style.padding = "0px 20px";
            var a = newA(dv, subMenu, uri, "contents");
        }
        
    }
}
function openSubMenu(elm){
    // mainMenu がクリックされた
    var mainMenu = trim(elm.innerHTML);
    showMainHeader(mainMenu);
    
    // 外部ファイルがなかった場合 default のメニューを表示するため _mainMenu をセット
    _mainMenu = mainMenu;
    
    // 外部ファイルを探しにゆく：外部ファイルがなかったら default を表示
    getSubMenu(mainMenu);
}

function openContents(){
    // MAP 形式でコンテンツを表示
	var win = window.open("./contents.php","INFO BOARD MAP"
                          ,"width=450,height=700,scrollbars=yes,location=no");
	win.focus();
}

function showMenu(){
    // menu を表示する
    showMainHeader();
	
	var elm = document.getElementById("contents");
	elm.innerHTML = "";
    
    var recs = menuObj();
    for (mainMenu in recs){
        // subMenu
        var dv = newDIV(elm, "");
        dv.style.padding = "0px 5px";
        dv.innerHTML = mainMenu;
        dv.setAttribute("onmouseout","resetColor(this,'#000','#fff')");
        dv.setAttribute("onmouseover","setColor(this,'#ff0','#00f')");
        dv.setAttribute("onclick", "openSubMenu(this)");
    }
}

function showMainHeader(title){
    // ヘッダーの表示を mainMenu / subMenu に応じ変化させる
	var elm = document.getElementById("headerMiddleArea");
    
    if (title && (title.length))
        elm.innerHTML = title;
    else 
        elm.innerHTML = "INFO BOARD";
}

function openHelp(){
	// ヘルプパネルを表示
	var win = window.open("./help.html","Help"
                          ,"width=450,height=700,scrollbars=yes,resizable=yes");
	win.focus();
}

function initMenu(){
    checkNOA();

	var elm = document.getElementById("base");
	elm.innerHTML = "";

    // HEADER AREA
    var dv = newDIV(elm, "headerArea");
    var tbl = newTABLE(dv, "frameTable");
    var tr = newTR(tbl, "titleBar", "");
    // LEFT
    var td = newTD(tr, "left", "");
    td.style.width = "15px";
    var img = newIMAGE(td, "", "./home.png", "home");
    img.style.height = "15px";
    img.setAttribute("onclick", "initMenu()");
    // MIDDLE
    var td = newTD(tr, "left", "");
    var sp = newSPAN(td, "headerMiddleArea");
    // RIGHT: HELP
    var td = newTD(tr, "right", "");
    var a = newA(td, "map", "#", "");
    a.setAttribute("onclick", "openContents()");
    var td = newTD(tr, "right", "");
    td.style.width = "15px";
    var img = newIMAGE(td, "", "./info.png", "zoom");
    img.style.height = "17px";
	img.setAttribute("onclick","openHelp()");

    showMainHeader();
        
    // CONTENTS
    var dv = newDIV(elm, "contents");

    // FOOTER
    var dv = newDIV(elm, "");
    dv.innerHTML = "";
    var tbl = newTABLE(elm, "frameTable");
    var tr = newTR(tbl, "titleBar", "");
    // LEFT
    var td = newTD(tr, "left", version());
    var sp = newSPAN(td, "");
    sp.innerHTML = " owner ( " + owner() + " )";
    // RIGHT
    var td = newTD(tr, "right", "");
    var img = newIMAGE(td, "", "./hammer.png", "pref");
    img.style.height = "15px";
    img.setAttribute("onclick", "openEditor()");

    // DEBUG
    var dv = newDIV(elm, "message");
    var dv = newDIV(elm, "_debug");

    getFile("menu.txt");
}

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

