
/**
 * Resizing code is modified version of code from the tinyMCE editor.
 *
 * Resizing functions are thus licensed under the LGPL.
 */

var textareaResizer = {};
var currentDisplayMode = "textarea"; // textarea or spell

/**
 * Handle actual resizing of textarea
 */
function textareaResizeTo(h) {
    h = parseInt(h);

    // resize elements
    var editorArea = document.getElementById(textareaResizer.editor_id);
    var previewPanel = document.getElementById('preview-panel');
    var spellCheckDiv = document.getElementById('jive-spell-markup-div');

    editorArea.style.height = h + "px";

    if (previewPanel) {
        previewPanel.style.height = h + "px";
    }
    if (spellCheckDiv) {
        spellCheckDiv.style.height = h + "px";
    }
}

/**
 * Handles resizing events.
 */
function textareaResizeEventHandler(e) {
    var resizer = textareaResizer;

    // Do nothing
    if (!resizer.resizing)
        return;

    e = typeof(e) == "undefined" ? window.event : e;

//    var dx = e.screenX - resizer.downX;
    var dy = e.screenY - resizer.downY;
    var resizeBox = resizer.resizeBox;

    switch (e.type) {
        case "mousemove":
            var w, h;

//            w = resizer.width + dx;
            h = resizer.height + dy;

//            w = w < 499 ? 499 : w;
            h = h < 150 ? 150 : h;

//            var oldWidth = parseInt(resizeBox.style.width);

//            resizeBox.style.width = w + "px";
            resizeBox.style.height = h + "px";

            // this is slow in IE, need to see if there is a way to improve speed
//            var editorTabs = document.getElementById('editor-tabs');
//            var editorPanel = document.getElementById('editor-panel-wrapper');
//            var spellCheckDiv = document.getElementById('jive-spell-markup-div');

//            if (editorTabs) {
//                editorTabs.style.width = (w + 2) + "px";
//            }
//            if (editorPanel) {
//                editorPanel.style.width = (w + 2) + "px";
//            }
//            if (spellCheckDiv) {
//                spellCheckDiv.style.width = w + "px";
//            }

            break;

        case "mouseup":
            textareaSetResizing(e, resizer.editor_id, false);
//            textareaResizeTo(resizer.width + dx, resizer.height + dy);
            var h = resizer.height + dy;
            h = h < 150 ? 150 : h;
            textareaResizeTo(h);

            // Store settings in cookies

            // Expire cookies in a year
            var expires = new Date();
            expires.setTime(expires.getTime() + 3600000 * 24 * 365);

            // Set the jive cookies
//            setCookie("jive_" + resizer.editor_id + "_width", "" + (resizer.width + dx), expires);
            setCookie("jive_" + resizer.editor_id + "_height", "" + h, expires);

            // set the tinyMCE cookies
//            setCookie("TinyMCE_GUIEditor_width", "" + (resizer.width + dx), expires);
            setCookie("TinyMCE_GUIEditor_height", "" + h, expires);

            break;
        default:
            // ignore;
            break;
    }
};

/**
 * Starts/stops the editor resizing.
 */
function textareaSetResizing(e, editor_id, state) {
    e = typeof(e) == "undefined" ? window.event : e;

    var resizer = textareaResizer;
    var editorArea = document.getElementById(editor_id);
    var resizeBox = document.getElementById(editor_id + 'ResizeBox');
    var spellCheckDiv = document.getElementById('jive-spell-markup-div');

    if (state) {
        // disable highlighting
        document.ondragstart = function() { return false; }

        // Place box over editor area
        var width = editorArea.offsetWidth;
        var height = editorArea.clientHeight;
        resizeBox.style.width = width + "px";
        resizeBox.style.height = height + "px";
        resizer.iframeWidth = width;
        resizer.iframeHeight = height;

        // Hide editor/spellchecker and show resize box
        editorArea.style.display = "none";
        if (spellCheckDiv) {
            if (spellCheckDiv.style.display == "block") {
                currentDisplayMode = "spell";
            }
            else {
                currentDisplayMode = "textarea";
            }
            spellCheckDiv.style.display = "none";
        }
        resizeBox.style.display = "block";

        // Add event handlers, only once
        if (!resizer.eventHandlers) {
            if (navigator.appName == "Microsoft Internet Explorer") {
                addEvent(document, "mousemove", textareaResizeEventHandler);
            }
            else {
                addEvent(window, "mousemove", textareaResizeEventHandler);
            }
            addEvent(document, "mouseup", textareaResizeEventHandler);

            resizer.eventHandlers = true;
        }

        resizer.resizing = true;
        resizer.downX = e.screenX;
        resizer.downY = e.screenY;
        resizer.width = parseInt(resizeBox.style.width);
        resizer.height = parseInt(resizeBox.style.height);
        resizer.resizeBox = resizeBox;
        resizer.editor_id = editor_id;
    }
    else {
        // reenable highlighting
        document.ondragstart = function() { return true;}

        resizer.resizing = false;
        resizeBox.style.display = "none";
        editorArea.style.display = "block";

        if (spellCheckDiv && currentDisplayMode == "spell") {
            spellCheckDiv.style.width = editorArea.offsetWidth;
            spellCheckDiv.style.display = "block";
        }
    }
};

function addEvent(obj, name, handler) {
	if (obj.attachEvent) {
		obj.attachEvent("on" + name, handler);
    }
    else {
		obj.addEventListener(name, handler, true);
    }
};


function setCookie(name, value, expires, path, domain, secure) {
    var curCookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + escape(path) : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");

    document.cookie = curCookie;
};

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);

    if (begin == -1) {
        begin = dc.indexOf(prefix);

        if (begin != 0) {
            return null;
        }
    }
    else {
        begin += 2;
    }

    var end = document.cookie.indexOf(";", begin);

    if (end == -1) {
        end = dc.length;
    }

    return unescape(dc.substring(begin + prefix.length, end));
};


// jive functions

function isAdvancedEditorBrowser() {
    // Check if valid browser has execcommand support
    if (typeof(document.execCommand) == 'undefined') {
        return false;
    }

    // only msie 5.5+, gecko 1.3+ or opera 9+ need apply
    var agent = navigator.userAgent.toLowerCase();
    var aVer = navigator.appVersion.toLowerCase();
    var minor = parseFloat(aVer);
    var major = parseInt(minor);

    // Safari
    if (agent.indexOf("applewebkit") != -1) {
        return false;
    }

    // IE
    var msie = (navigator.appName == "Microsoft Internet Explorer");
    var msie3 = (agent.indexOf("msie 3") != -1);
    var msie4 = (agent.indexOf("msie 4") != -1);
    var msie5up = (msie && !msie3 && !msie4);
    if (msie5up) {
        return true;
    }

    // Opera
    var opera = (agent.indexOf("opera") != -1);
    var opera2 = (agent.indexOf("opera 2") != -1 || agent.indexOf("opera/2") != -1);
    var opera3 = (agent.indexOf("opera 3") != -1 || agent.indexOf("opera/3") != -1);
    var opera4 = (agent.indexOf("opera 4") != -1 || agent.indexOf("opera/4") != -1);
    var opera5 = (agent.indexOf("opera 5") != -1 || agent.indexOf("opera/5") != -1);
    var opera6 = (agent.indexOf("opera 6") != -1 || agent.indexOf("opera/6") != -1);
    var opera7 = (agent.indexOf("opera 7") != -1 || agent.indexOf("opera/7") != -1);
    var opera8 = (agent.indexOf("opera 8") != -1 || agent.indexOf("opera/8") != -1);
    // opera 9 kinda works but there are currently too many issues to support it
    var opera9 = (agent.indexOf("opera 9") != -1 || agent.indexOf("opera/9") != -1);
    var opera10up = (opera && !opera2 && !opera3 && !opera4 && !opera5
            && !opera6 && !opera7 && !opera8 && !opera9);

    if (opera10up) {
        return true;
    }

    if (agent.indexOf('gecko') != -1 && agent.indexOf('khtml') == -1) {
        return true;
    }

    return false;
}

function isTextEditorBrowser() {
    if (isAdvancedEditorBrowser()) {
        return true;
    }

    var agent = navigator.userAgent.toLowerCase();
    // safari is ok
    if (agent.indexOf("applewebkit") != -1) {
        return true;
    }

    var opera6 = (agent.indexOf("opera 6") != -1 || agent.indexOf("opera/6") != -1);
    var opera7 = (agent.indexOf("opera 7") != -1 || agent.indexOf("opera/7") != -1);
    var opera8 = (agent.indexOf("opera 8") != -1 || agent.indexOf("opera/8") != -1);
    var opera9 = (agent.indexOf("opera 9") != -1 || agent.indexOf("opera/9") != -1);

    // opera6 or better
    if (opera6 || opera7 || opera8 || opera9) {
        return true;
    }

    if (document.getElementById) {
        return true;
    }

    return false;
}

function isTabbableBrowser() {
    return (typeof(document.getElementById) != 'undefined');
}


// This function requires that a variable named '_jive_plain_quote_text' is defined prior to this
// function being called
function quoteOriginal(editor_id) {
    var ta = document.getElementById(editor_id);

    var quote = _jive_plain_quote_text.replace(/\&gt;/g, ">");
    quote = quote.replace(/\&lt;/g, "<");
    quote = quote.replace(/\&amp;/g, "&");
    quote = quote.replace(/\&quot;/g, "\"");

    ta.value = quote + '\n' + ta.value;
    ta.focus();
    
    return false;
}

var spellCheckWindow;
var popupBlockerAlertMessage = "Sorry, but we have noticed that your popup-blocker has disabled a window that provides the spell checking functionality. You will need to disable popup blocking on this site in order to spell check your post.";

function spellForm(textAreaField) {
    var width = 600;
    var height = 450;
    var x = parseInt(screen.width / 2.0) - (width / 2.0);
    var y = parseInt(screen.height / 2.0) - (height / 2.0);
    var options = "top=" + y + ",left=" + x + ",scrollbars=no,dialog=true,status=no,minimizable=true,modal=false,width=" + width + ",height=" + height + ",resizable=yes";
    spellCheckWindow = window.open(_jive_base_url + "/include/popupspellchecker/jivespell.jsp", "spellcheckwindow", options);
    if (spellCheckWindow == null) {
        alert(popupBlockerAlertMessage);
        return;
    }
    initializeSpellWindow(textAreaField);

    return false;
}

function initializeSpellWindow(textAreaField) {
    // The popup is open so call it IF the function is loaded
    try
    {
        if (spellCheckWindow.setupSpellChecker) {
            // we need to escape some things in the text before we show it in the spell check window
            var text = document.getElementById(textAreaField).value;

            spellCheckWindow.setupSpellChecker(textAreaField, text, 'spellWindowCloseHandler');
            eval('try { spellCheckWindow.resizeTo(width, height); } catch(e) { }');
            spellCheckWindow.focus();
        }
        else
        {
            var t = "initializeSpellWindow('" + textAreaField + "')";
            setTimeout(t, 500);
        }
    }
    catch(ex) {
        // ignore security exception for now
        var t = "initializeSpellWindow('" + textAreaField + "')";
        setTimeout(t, 500);
    }
}
function spellWindowCloseHandler(sourceElementID, text) {
    text = text.replace(/\&gt;/g, ">");
    text = text.replace(/\&lt;/g, "<");
    text = text.replace(/\&amp;/g, "&");
    text = text.replace(/\&quot;/g, "\"");
    text = text.replace(/\&nbsp;/g, " ");
    document.getElementById(sourceElementID).value = text;
    autoSave.messageChangeHandler();
}
