var FJInsertLink = {
    prepare : function(mode) {
        var link, txtSel;

        var app = window.opener.app;
        if (app.editor.mode == 'iframe') {
            link = app.editor.actual.getSelectedLink();
            txtSel = app.editor.actual.isTextSelected();
            if (link) {
                if (mode == 'link') {
                    document.getElementById('url').value = link.href;
                }
                else if (mode == 'related_link') {
                    var url = link.href;
                    var obj = document.getElementById('rel_entry_url').options;
                    for (var i = 0; i < obj.length; i++) {
                        if (obj[i].value == url) {
                            break;
                        }
                    }
                    document.getElementById('rel_entry_url').selectedIndex
                        = (i < obj.length) ? i : 0;
                }
                var target = link.target.toLowerCase();
                document.getElementById('link_target' + target).checked = 'checked';
            }
            else if (!txtSel) {
                if (mode == 'link') {
                    document.getElementById('url').value = 'http://';
                }
                else if (mode == 'related_link') {
                    document.getElementById('rel_entry_url').selectedIndex = 0;
                }
                document.getElementById('section_link_text').style.display = 'block';
            }
        }
        else if (app.editor.mode == 'textarea') {
            if (mode == 'link') {
                document.getElementById('url').value = 'http://';
            }
            else if (mode == 'related_link') {
                document.getElementById('rel_entry_url').selectedIndex = 0;
            }
            txtSel = app.editor.actual.getSelectedText();
            if (txtSel) {
                var m = txtSel.match(/<a.*?href\s*?=\s*?[\"']([^\"']*?)[\"'].*?>(.*?)<\/a>/i);
                if (m) {
                    if (mode == 'link') {
                        document.getElementById('url').value = m[1];
                    }
                    else if (mode == 'related_link') {
                        var obj = document.getElementById('rel_entry_url').options;
                        for (var i = 0; i < obj.length; i++) {
                            if (obj[i].value == m[1]) {
                                break;
                            }
                        }
                        document.getElementById('rel_entry_url').selectedIndex
                            = (i < obj.length) ? i : 0;
                    }
                    document.getElementById('link_text').value = m[2];
                    m = txtSel.match(/<a.*?target\s*?=\s*?[\"']([^\"']*?)[\"']/i);
                    if (m) {
                        if (m[1].toLowerCase() == "_blank") {
                            document.getElementById('link_target_blank').checked = true;
                        }
                        else if (m[1].toLowerCase() == "_self") { 
                            document.getElementById('link_target_self').checked = true;
                        }
                    }
                    else {
                        document.getElementById('link_target').checked = true;
                    }
                }
                else {
                    document.getElementById('link_text').value = txtSel;
                }
            }
//            else {
                document.getElementById('section_link_text').style.display = 'block';
//            }
            window.focus();
        }
    },

    submitLink : function (mode) {
        var link, txtSel, url, obj;

        var app = window.opener.app;
        if (mode == 'link') {
            url = document.getElementById('url').value;
        }
        else {
            obj = document.getElementById('rel_entry_url');
            url = obj.options[obj.selectedIndex].value;
        }
        if (!url || !url.trim()) {
            return;
        }

        if (app.editor.mode == 'iframe') {
            link = app.editor.actual.getSelectedLink();
            txtSel = app.editor.actual.isTextSelected();
            if(link) {
                link.removeAttribute('target');
                if (!document.getElementById('link_target').checked) {
                    link.setAttribute('target', FJInsertLink.convTarget());
                }
                link.href = url;
            }
            else if (txtSel) {
                app.editor.execCommand("createLink", false, url);
                if (!document.getElementById('link_target').checked) {
                    link = app.editor.getSelectedLink();
                    link.setAttribute('target', FJInsertLink.convTarget());
                    return;
                }
            }
            else {
                var id = "temp_id_for_retrieving_inserted_element_" + Unique.id();
                var text = document.getElementById('link_text').value;
                if (!text) {
                    text = obj.options[obj.selectedIndex].text.replace(/\(.*?\)\s*(.*?)/, "$1");
                    document.getElementById('link_text').value = text;
                }
                var html = FJInsertLink.getHTMLToInsert(url, id);
                link = app.editor.insertHTML( html, false, id, true );
                link.href = url;
            }
        }
        else if (app.editor.mode == 'textarea') {
            var html = app.editor.actual.getSelectedText();
            var linkText = document.getElementById('link_text').value;
            if (html.search(/<a.*?href\s*=\s*[\"']([^\"']*?)[\"'].*?>(.*?)<\/a>/i) != -1) {
                html = html.replace(/a(.*?)href(\s*=\s*[\"'])[^\"']*?([\"'])/i, "a$1href$2" + url + "$3");
                var target = FJInsertLink.convTarget();
                if (html.search(/<a.*?target\s*=\s*[\"'][^\"']*?[\"']/i) != -1) {
                    // target="xxx" to target none
                    if (target == "") {
                        html = html.replace(/<a\s+target\s*=\s*[\"'][^\"']*?[\"'](.*?>).*?(<\/a>)/i, "<a $1" + linkText + "$2");
                        html = html.replace(/(<a.*?)\s+target\s*=\s*[\"'][^\"']*?[\"']\s*([^\s>]+?>).*?(<\/a>)/i, "$1 $2" + linkText + "$3");
                        html = html.replace(/(<a.*?)\s+target\s*=\s*[\"'][^\"']*?[\"']\s*?>.*?(<\/a>)/i, "$1>" + linkText + "$2");
                    }
                    // target="xxx" to target="yyy"
                    else {
                        html = html.replace(/(<a.*?\s+target\s*=\s*[\"'])[^\"']*?([\"'].*?>).*?(<\/a>)/i, "$1" + target + "$2" + linkText + "$3");
                    }
                }
                else {
                    // target none to target="***"
                    if (target != "") {
                        html = html.replace(/(<a.*?)>.*?(<\/a>)/i, "$1 target=\"" + target + "\">" + linkText + "$2");
                    }
                    else {
                        html = html.replace(/(<a.*?>).*?(<\/a>)/i, "$1" + linkText + "$2");
                    }
                }
            }
            else {
                html = FJInsertLink.getHTMLToInsert(url);
            }
            return app.editor.actual.setSelection(html);
        }
    },

    convTarget : function() {
        if (document.getElementById('link_target_blank').checked) {
            return '_blank';
        }
        else if (document.getElementById('link_target_self').checked) {
            return '_self';
        }
        else if (document.getElementById('link_target').checked) {
            return '';
        }
    },

    getHTMLToInsert : function(url, id) {
        var target = FJInsertLink.convTarget();
        var text;
        if (target) {
            target = ' target="' + target + '"';
        }
        id = (id) ? ' id="' + id + '"' : '';

        text = document.getElementById('link_text').value
            ? document.getElementById('link_text').value : url;
        var html = '<a href="' + url + '"' + target + id + '>' + text + "</a>";
        return html;
    }
};

