// simple js syntax, because MT3.3 dosen't have js library.
// just use RegExp.escape; which appear both MT3.3 and MT4. 

var TaggingHelper = new Object();

TaggingHelper.close = function() {
    document.getElementById('tagging_helper_block').style.display = 'none';
}

TaggingHelper.compareStrAscend = function (a, b){
    return a.localeCompare(b);
}

TaggingHelper.compareByCount = function (a, b){
    return tags[b] - tags[a];
}

TaggingHelper.getBody = function () {
    // for MT 4
    // get both current editting field and hidden input fields.
    // currently i don't care about duplication.
    // but it's very nasty. FIXME! 
    return app.editor.getHTML()
         + '\n'
         + document.getElementById('editor-input-content').value
         + '\n'
         + document.getElementById('editor-input-extended').value;
}


TaggingHelper.open = function (mode) {
    var block = document.getElementById('tagging_helper_block');
    if (block.style.display == 'none') {
        block.style.display = 'block';
    }

    var tagary = new Array();
    if (mode == 'abc' || mode == 'count') {
        for (var tag in tags ){
            tagary.push(tag);
        }
    }
    else {
        var body = this.getBody();
        for (var tag in tags ) {
            var exp = new RegExp(RegExp.escape(tag));
            if (exp.test(body)) {
                tagary.push(tag);
            }
        }
    }
    if (mode == 'count')
        tagary.sort(this.compareByCount);
    else
        tagary.sort(this.compareStrAscend);

    var v = document.getElementById('tags').value;
    var taglist = '';
    var table = document.createElement('div');
    table.className = 'taghelper-table';
    for (var i=0; i< tagary.length; i++) {
        var tag = tagary[i];
        var e = document.createElement('span');
        e.onclick   = TaggingHelper.action;
        e.th_tag    = tag;
        e.appendChild( document.createTextNode(tag) );
        var exp = new RegExp("^(.*, ?)?" + RegExp.escape(tag) + "( ?\,.*)?$");
        e.className = (exp.test(v)) ? 'taghelper_tag_selected' : 'taghelper_tag';
        table.appendChild(e);
        table.appendChild( document.createTextNode(' ') );
    }

    while (block.childNodes.length) block.removeChild(block.childNodes.item(0));
    block.appendChild(table);
}

TaggingHelper.action = function (evt) {
    // IE-Firefox compatible
    var e = evt || window.event;
    var a = e.target || e.srcElement;
    var s = a.th_tag;
    
    var v = document.getElementById('tags').value;
    var exp = new RegExp("^(.*, ?)?" + RegExp.escape(s) + "( ?\,.*)?$");
    if (exp.test(v)) {
        v = v.replace(exp, "$1$2");
        if (tag_delim == ',') {
            v = v.replace(/ *, *, */g, ', ');
        }
        else {
            v = v.replace(/  +/g, ' ');
        }
        a.className = 'taghelper_tag';
    }
    else {
        v += (tag_delim == ',' ? ', ' : ' ') + s;
        a.className = 'taghelper_tag_selected';
    }
    v = v.replace(/^[ \,]+/, '');
    v = v.replace(/[ \,]+$/, '');
    document.getElementById('tags').value = v;
}

