﻿
/**
 * フォーカス中のテキストエリアのセット
 */
var eActive = null;
function setActiveForm(mobj)
{
    eActive = mobj;
}

/**
 * タグリストの作成
 */

function outputQuickTagList(root_elem_id)
{
    // ルート要素(Div)
    var eRoot = document.getElementById(root_elem_id);

    // ツリールート要素
    var eTreeUl = document.createElement('ul');
    eRoot.appendChild(eTreeUl);
    eTreeUl.className= 'tree';
    eTreeUl.setAttribute('id', 'QuickTagListTree'+root_elem_id);

    for (var gp in QuickTagList.tree) {
        // メインリスト
        var eTreeLi = document.createElement('li');
        eTreeUl.appendChild(eTreeLi);
        eTreeLi.className= 'main';
        // メインアンカー
        var eMainA = document.createElement('a');
        eTreeLi.appendChild(eMainA);
        eMainA.className= 'main_a';
        eMainA.appendChild(document.createTextNode( gp ));

        var eTreeSubUl = document.createElement('ul');
        eTreeLi.appendChild(eTreeSubUl);

        for (var tag in QuickTagList.tree[gp]) {

            aTag = QuickTagList.tree[gp][tag];

            // サブリスト
            var eTreeSubLi = document.createElement('li');
            eTreeSubUl.appendChild(eTreeSubLi);

            // サブメニュー
            var eSubA = document.createElement('a');
            eTreeSubLi.appendChild(eSubA);
            eSubA.appendChild(document.createTextNode(tag));

            QuickTagMakeMenu(eSubA, aTag);

        }
    }

    // ツリーのIDをドロップダウンメニューに登録
    EventListener.add(window, "load", function(){ new DDNavi(eTreeUl.id) }, false);


    // クイックルート要素
    var eQuickUl = document.createElement('ul');
    eRoot.appendChild(eQuickUl);
    eQuickUl.className= 'quick';

    for (var tag in QuickTagList.quick) {

        aTag = QuickTagList.quick[tag];

        var eQuickLi = document.createElement('li');
        eQuickUl.appendChild(eQuickLi);

        // メインメニュー
        var eSubA = document.createElement('a');
        eQuickLi.appendChild(eSubA);
        eSubA.appendChild(document.createTextNode(tag));

        QuickTagMakeMenu(eSubA, aTag);

    }
}

function QuickTagMakeMenu(obj, aTag)
{
        if (aTag[3]) {

            obj.onmouseover = function(obj) {
                if (UA.check('ie')) {
	                return function() {
	                    putl.view(event, obj);
	                }
                }
                else {
	                return function(e) {
	                    putl.view(e, obj);
	                }
	            }
            }(obj);

            obj.onmouseout = function(obj) {
	            return function() {
	                putl.close(obj);
	            }
            }(obj);

            obj.setAttribute('title', aTag[3]);
        }
        if (aTag[4]) {
            obj.className = aTag[4];
        }
        switch (aTag[0])
        {
            case 'repText':
                obj.setAttribute('href', 'javascript:void(0)');
                obj.onclick = function(aTag){
                    return function() {
                        repText(aTag[1]);
                        return false;
                    }
                }(aTag);
                break;
            case 'addTag':
                obj.setAttribute('href', 'javascript:void(0)');
                obj.onclick = function(aTag){
                    return function() {
                        addTag(aTag[1],aTag[2]);
                        return false;
                    }
                }(aTag);
                break;
            case 'link':
                obj.setAttribute('href', aTag[1]);
                obj.onclick = new Function('d', aTag[2]);
                break;
        }
}

/*-----------------------------------------
  入力支援関係
 -----------------------------------------*/

/**
 * 汎用タグ
 */

function addTag(tag_left, tag_right)
{
    insertTag(tag_left, tag_right);
}

/**
 * 属性の作成
 */
function makeCfAttrs(arrays)
{
    var newa = '';
    for (var key in arrays) {
        if (typeof(arrays[ key ]) == 'undefined') {
            continue;
        }
        newa += ' ' + key + '="' + arrays[ key ] + '"';
    }
    return newa;
}

/**
 * メディアタグ
 */
var cf_tagName = 'popup';
var cf_sep = ',';
function setType(val) { cf_tagName = val; }
function mediaTag(path, filename, width, height, title, thum_filename, thum_width, thum_height)
{
    var inputstr = window.prompt('ファイルの説明コメントを入力してください', title);
    var ext = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase();
    switch(cf_tagName)
    {
    case 'popup':
        var attr = {'path':path, 'file':filename, 'size':width+','+height, 'title':inputstr, 'thum':(thum_filename ? thum_filename : undefined), 'thumsize':(thum_filename ? thum_width+','+thum_height : undefined)};
        break;
    case 'textpopup':
        var attr = {'path':path, 'file':filename, 'size':width+','+height, 'title':inputstr, 'type':'text'};
        cf_tagName = 'popup';
        break;
    default:
        if (ext == 'swf') {
            cf_tagName = 'flash';
        }
        var attr = {'path':path, 'file':filename, 'size':width+','+height, 'title':inputstr};
    }
    insertTag('[%' + cf_tagName + '?' + makeCfAttrs(attr) + '%]', '');
}

/**
 * ファイルタグ
 */
function fileTag(file_id)
{
    var inputstr = window.prompt('ファイルの説明コメントを入力してください');
    if (inputstr) {
        insertTag('[%file?' + makeCfAttrs({'id':file_id, 'title':inputstr}) + '%]', '');
    }
    else {
        insertTag('[%file?' + makeCfAttrs({'id':file_id}) + '%]', '');
    }
}

/**
 * タグの挿入
 */
function insertTag(tag_left, tag_right)
{
    if ((obj = eActive) == null) {
        return;
    }
    obj.focus();

    if (document.selection) {

        var str = document.selection.createRange().text;
        document.selection.createRange().text = tag_left + str + tag_right;
    }
    else {
        var length_pos = obj.textLength;
        var start_pos  = obj.selectionStart;
        var end_pos    = obj.selectionEnd;
        var new_str    = tag_left + obj.value.substring(start_pos, end_pos) + tag_right;
        obj.value      = obj.value.substring(0,start_pos) + new_str + obj.value.substring(end_pos, length_pos);

        var caret = start_pos+new_str.length;
        if (start_pos >= caret || !tag_right) {
            caret = start_pos;
        }
        obj.selectionStart = parseInt(start_pos);
        obj.selectionEnd   = parseInt(caret);
    }
}

/**
 * テキスト変換
 */
function repText(type)
{
    if ((obj = eActive) == null) {
        return;
    }
    eActive.focus();
    if (document.selection){
        var target_str = document.selection.createRange().text;
    }
    else {
        var length_pos = obj.textLength;
        var start_pos  = obj.selectionStart;
        var end_pos    = obj.selectionEnd;
        var target_str = obj.value.substring(start_pos, end_pos);
    }
    switch(type)
    {
        case 'Bracket':
            target_str = _repBracket(target_str);
            break;
        case 'ReBracket':
            target_str = _repReBracket(target_str);
            break;
        case 'Upper':
            target_str = _repUpper(target_str);
            break;
        case 'Lower':
            target_str = _repLower(target_str);
            break;
        case 'Amp':
            target_str = _repAmp(target_str);
            break;
        case 'ReAmp':
            target_str = _repReAmp(target_str);
            break;
        case 'List':
            target_str = _repList(target_str);
            break;
        case 'Indent':
            target_str = _repIndent(target_str);
            break;
        case 'BackIndent':
            target_str = _repBackIndent(target_str);
            break;
        case 'IndentTab':
            target_str = _repIndentTab(target_str);
            break;
    }

    if (document.selection) {
        document.selection.createRange().text = target_str;
    }
    else {
        obj.value = obj.value.substring(0,start_pos) + target_str + obj.value.substring(end_pos, length_pos);
        obj.selectionStart = parseInt(start_pos);
        obj.selectionEnd   = parseInt(start_pos+target_str.length);
    }
}

/**
 * 変換：インデント
 */
function _repIndent(str)
{
    var tmp = str.split(/\r?\n/);
    var str = '';
    for(var i in tmp) {
        str += "  "+tmp[i];
        if (i < tmp.length-1) {
            str += "\n";
        }
    }
    return str;
}

/**
 * 変換：インデント消去
 */
function _repBackIndent(str)
{
    var tmp = str.split(/\r?\n/);
    var str = '';
    for(var i in tmp) {
        str+= tmp[i].replace(/^\s\s/, "");

        if (i < tmp.length-1) {
            str += "\n";
        }
    }
    return str;
}

/**
 * 変換：タブインデント
 */
function _repIndentTab(str)
{
    var tmp = str.split(/\r?\n/);
    var str = '';
    for(var i in tmp) {
        str += "\t"+tmp[i];
        if (i < tmp.length-1) {
            str += "\n";
        }
    }
    return str;
}

/**
 * 変換：リスト
 */
function _repList(str)
{
    var tmp = str.split(/\r?\n/);
    var str = '';
    for(var i in tmp) {
        str += "<li>"+tmp[i]+"</li>";
        if (i < tmp.length-1) {
            str += "\n";
        }
    }
    if (checkConfirm('ULタグを付けますか？')) {
        return '<ul>\n'+ str + '\n</ul>';
    }
    else {
        return str;
    }
}

/**
 * 変換：HTMLエンティティ
 */
function _repBracket(str)
{
    str = str.replace(/</g, "&lt;");
    str = str.replace(/>/g, "&gt;");
    return str;
}
function _repReBracket(str)
{
    str = str.replace(/&lt;/ig, '<');
    str = str.replace(/&gt;/ig, '>');
    return str;
}

/**
 * 変換：＆
 */

function _repAmp(str)
{
    str = str.replace(/&/g, '&amp;');
    return str;
}
function _repReAmp(str)
{
    str = str.replace(/&amp;/ig, '&');
    return str;
}

/**
 * 変換：大文字
 */

function _repUpper(str)
{
    str = str.toUpperCase();
    return str;
}

/**
 * 変換：小文字
 */

function _repLower(str)
{
    str = str.toLowerCase();
    return str;
}




