
    /* /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
    charset = utf-8
    LastModified : 2007-02/24

    +++ user ツール +++

    ユーザ管理関係する操作を行なう。


    <-- 動作ブラウザ -->
    未テスト


    <-- 使い方 -->
    user.login()
        ログイン処理を実施する。

    user.logout()
        ログアウト処理を実施する。

    user.preRegister()
        ユーザ情報の仮登録処理を行なう。

    user.register()
        ユーザ情報の本登録処理を行なう。

    user.edit()
        ユーザ情報を取得する。

    user.updata()
        ユーザ情報を更新する。

    /_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/*/
var lang = new Object();

lang.view = new function() {

    // グローバル変数
    this.elements;

    // uri
    this.uri;

    // 開始した数
    this.bgn = 0;

    // 終了した数
    this.end = 0;

    //
    // 初期化
    //
    this.init = function(uri) {

        // カウントの初期化
        lang.view.bgn = 0;
        lang.view.end = 0;

        // divを取得
        lang.view.elements = document.getElementsByTagName("div");

        // 全div処理を開始調査
        for(var i=0; i<lang.view.elements.length; i++) {
            var mode = lang.view.elements[i].getAttribute("mode");
            if (mode == "src") {
                setTimeout("lang.view.src(" + i + ")", 0);
            } else if (mode == "cmd") {
                setTimeout("lang.view.cmd(" + i + ")", 0);
            }
        }
        lang.view.uri = uri.replace(/\/[^/]+$/, "");
    }

    //
    // ソースコード表示
    //
    this.src = function(_i) {

        lang.view.bgn++;

        var obj = lang.view.elements[_i];
        var id = obj.id;
        var tmp = id.split("_");
        var url = this.uri + "/txt/" + tmp[0] + "/src/" + tmp[1] + ".txt";
        var ax = ajax.createAjax(response);
        ajax.get(ax, url, null);

        function response(data) {

            var table = document.createElement("table");
            var tbody = document.createElement("tbody");
            var td1 = document.createElement("tr");
            var td2 = document.createElement("tr");

            table.setAttribute("cellPadding", 1);
            table.setAttribute("cellSpacing", 0);

            obj.appendChild(table);
            table.appendChild(tbody);
            tbody.appendChild(td1);

            table.className = "src";
            td1.className = "padding";
            td2.className = "padding";

            var a1 = document.createElement("tr");
            var a2 = document.createElement("td");
            var a3 = document.createElement("td");
            tbody.appendChild(a1);
            a1.appendChild(a2);
            a1.appendChild(a3);
            a1.className = "h";
            a3.className = "h";

            if (obj.getAttribute("file") != null) {
                a3.innerHTML = obj.getAttribute("file");
            }

            var s = lang.view.conv(data).split("\n");
            var num=0;
            for(var i in s) {
                num++;
                var t1 = document.createElement("tr");
                var t2 = document.createElement("td");
                var t3 = document.createElement("td");
                t2.innerHTML = num;
                t3.innerHTML = s[i];
                t2.className = "l";
                t3.className = "r";
                lang.view.setEvent(t3);
                t1.appendChild(t2);
                t1.appendChild(t3);
                tbody.appendChild(t1);
            }
            tbody.appendChild(td2);

            // 終了のため、カウントダウン
            lang.view.end++;
            // モードを変更
            obj.setAttribute("mode", "");
        }
    }

    //
    // コマンドプロンプトの表示
    //
    this.cmd = function(_i) {

        lang.view.bgn++;

        var obj = lang.view.elements[_i];
        var id = obj.id;
        var tmp = id.split("_");
        var url = this.uri + "/txt/" + tmp[0] + "/cmd/" + tmp[1] + ".txt";
        var ax = ajax.createAjax(response);
        ajax.get(ax, url, null);

        function response(data) {

            var table = document.createElement("table");
            var tbody = document.createElement("tbody");
            var td1 = document.createElement("tr");
            var td2 = document.createElement("tr");

            table.setAttribute("cellPadding", 1);
            table.setAttribute("cellSpacing", 0);

            obj.appendChild(table);
            table.appendChild(tbody);
            tbody.appendChild(td1);

            table.className = "cmd";
            td1.className = "padding";
            td2.className = "padding";

            var s = lang.view.conv2cmd(data).split("\n");

            for(var i in s) {
                var t1 = document.createElement("tr");
                var t3 = document.createElement("td");
                t3.innerHTML = s[i];
                t3.className = "r";
                t1.appendChild(t3);
                tbody.appendChild(t1);
            }
            tbody.appendChild(td2);

            // 終了のため、カウントダウン
            lang.view.end++;
            // モードを変更
            obj.setAttribute("mode", "");
        }
    }

    //
    // ソースコード変更
    //
    this.conv = function(_src) {

        var html = _src;

        html = html.replace(/&/g, "&amp;");
        html = html.replace(/</g, "&lt;");
        html = html.replace(/>/g, "&gt;");
        html = html.replace(/ /g, "&nbsp;");
        html = html.replace(/"/g, "&quot;");

        var cr1 = lang.color.color1;
        var cr2 = lang.color.color2;
        var cr3 = lang.color.color3;
        var com = lang.color.comment;

        //------//
        // 単語 //
        //------//
        for(var i in cr1) {
            html = html.replace(
                        new RegExp('(' + cr1[i] + ')\\b', 'g'),
                        lang.view.change1(cr1[i], "FF00FF"));
        }
        for(var i in cr2) {
            html = html.replace(
                        new RegExp('\\b(' + cr2[i] + ')\\b', 'g'),
                        lang.view.change2(cr2[i], "0080FF"));
        }
        for(var i in cr3) {
            html = html.replace(
                        new RegExp('\\b(' + cr3[i] + ')\\b', 'g'),
                        lang.view.change1(cr3[i], "8000FF"));
        }

        //--------//
        // 文字列 //
        //--------//
        // 文字列
        html = lang.view.code(html, "\\&quot;");
        html = html.replace(
                        /&quot;.+?&quot;/g,
                        function($0) {
                            return lang.view.change3($0, "99BB99");
                        });
        html = lang.view.decode(html, "\\&quot;");

        // 文字定数
        html = lang.view.code(html, "\\\'");
        html = html.replace(
                        /['].+?[']/g,
                        function($0) {
                            return lang.view.change3($0, "CCAACC");
                        });
        html = lang.view.decode(html, "\\\'");

        //--------------//
        // 単行コメント //
        //--------------//
        html = html.replace(
        new RegExp('(' + com[0] + ')', 'g'),
        function($0){
            return lang.view.change3($0, "00AA00");
        });

        // 複数行コメント
        if (com[1] != "") {

            // 改行変換
            html = lang.view.codeLineEnd(html);

            // 複数行コメント
            html = html.replace(
            new RegExp('(' + com[1] + ')', 'g'),
            function($0){

                // 改行コードチェック
                var code;
                if ($0.indexOf("&\\r\\n") != -1) {
                    code = "&\\r\\n";
                } else {
                    code = "&\\n";
                }

                // 変換
                var tmp = $0.split(code);
                for(var i in tmp) {
                    tmp[i] = lang.view.change3(tmp[i], "00AA00");
                }
                return tmp.join(code);
            });

            // 改行復元
            html = lang.view.decodeLineEnd(html);
        }
        return html;
    }

    //
    // コマンドプロンプト変更
    //
    this.conv2cmd = function(_cmd) {

        var html = _cmd;

        html = html.replace(/&/g, "&amp;");
        html = html.replace(/</g, "&lt;");
        html = html.replace(/>/g, "&gt;");
        html = html.replace(/ /g, "&nbsp;");
        html = html.replace(/"/g, "&quot;");

        return html;
    }

    //
    // イベント
    //
    this.setEvent = function(_obj) {

        _obj.tmp = "";
        _obj.attachEvent(
                'onclick',
                function() {
                    var clr = _obj.tmp.toUpperCase();
                    if (clr != "#FFBBDD") {
                        _obj.style.backgroundColor = "#FFBBDD";
                    } else {
                        _obj.style.backgroundColor = "";
                    }
                    _obj.tmp = _obj.style.backgroundColor;
                });
        _obj.attachEvent(
                'onmouseover',
                function() {
                                        if (_obj.style.backgroundColor == "") {
                        _obj.style.backgroundColor = "#EEFFEE";
                                        }
                });
        _obj.attachEvent(
                'onmouseout',
                function() {
                    _obj.style.backgroundColor = _obj.tmp;
                });
    }

    //
    // HTMLレベルの変換
    //
    // タグ削除無し＆変換
    this.change1 = function(_src, _color) {

        return html = "<font style=\"color:#" + _color + ";\">" + _src + "</font>";
    }
    // タグ削除無し＆変換
    this.change2 = function(_src, _color) {

        return html = "<font style=\"font-weight:bold;color:#" + _color + ";\">" + _src + "</font>";
    }
    // タグの削除＆変換
    this.change3 = function(_src, _color) {

        _src = _src.replace(/<.*?>/g, "");
        return "<font style=\"color:#" + _color + ";\">" + _src + "</font>";
    }
    // 改行削除
    this.codeLineEnd = function(_html) {

        var html = _html;
        html = html.replace(/\r\n/g, "&\\r\\n");
        html = html.replace(/\n/g, "&\\n");
        return html;
    }
    // 改行復元
    this.decodeLineEnd = function(_html) {

        var html = _html;
        html = html.replace(/\&\\r\\n/g, "\r\n");
        html = html.replace(/\&\\n/g, "\n");
        return html;
    }
    // コード(１回分だけ有効)
    this.code = function(_html, _code) {

        var html = _html;
        _code = _code.replace(/\\/g, "\\\\");
        html = html.replace(
                new RegExp('\\b(' + _code + ')\\b', 'g'),
                "&cnv;");
        return html;
    }
    // デコード(１回変換したら戻す必要がある)
    this.decode = function(_html, _decode) {

        var html = _html;
        html = html.replace(
                new RegExp('\\b(&cnv;)\\b', 'g'),
                _decode);
        return html;
    }
}
