//--------------------------------------------
// Set up our simple tag open values
//--------------------------------------------
//
// Modified by Volker Puttrich to allow IE 4+
// on windows to use cursor position for inserting
// tags / smilies

var B_open = 0;
var I_open = 0;
var U_open = 0;
var QUOTE_open = 0;
var CODE_open = 0;
var SQL_open = 0;
var HTML_open = 0;
//-- mod_bbcode begin
//-- bbcode_open begin
var BR_open=0;
var ALIGN_open=0;
var ANFRAGE_open=0;
var ASEARCH_open=0;
var BBCODE_open=0;
var BLUR_open=0;
var BOLD_open=0;
var C_open=0;
var CODE2_open=0;
var COL_open=0;
var DROP_open=0;
var FH_open=0;
var FV_open=0;
var FLOAT_IMG_open=0;
var FNT_open=0;
var GLOW_open=0;
var GOOGLE_open=0;
var HR_open=0;
var PIC_open=0;
var INV_open=0;
var IT_open=0;
var JS_open=0;
var MAIL_open=0;
var MOVE_open=0;
var OT_open=0;
var OL_open=0;
var PHP_open=0;
var QT_open=0;
var QUOTE2_open=0;
var QUOTEVB_open=0;
var SHADOW_open=0;
var FSIZE_open=0;
var SPOILER_open=0;
var PROG_open=0;
var S_open=0;
var SUB_open=0;
var SEARCH_open=0;
var SUP_open=0;
var TMB_open=0;
var US_open=0;
var UL_open=0;
var URI_open=0;
var WIKI_open=0;
var XRAY_open=0;
var LATEX_open=0;
var LINKTHUMB_open=0;
//-- bbcode_open end
//-- mod_bbcode end

//-- mod_highlight_php begin
var PHP_open = 0;
//-- mod_highlight_php end


var bbtags   = new Array();

// Determine browser type and stuff.
// Borrowed from http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html

var myAgent   = navigator.userAgent.toLowerCase();
var myVersion = parseInt(navigator.appVersion);

var is_ie   = ((myAgent.indexOf("msie") != -1)  && (myAgent.indexOf("opera") == -1));
var is_nav  = ((myAgent.indexOf('mozilla')!=-1) && (myAgent.indexOf('spoofer')==-1)
                && (myAgent.indexOf('compatible') == -1) && (myAgent.indexOf('opera')==-1)
                && (myAgent.indexOf('webtv') ==-1)       && (myAgent.indexOf('hotjava')==-1));

var is_win   =  ((myAgent.indexOf("win")!=-1) || (myAgent.indexOf("16bit")!=-1));
var is_mac    = (myAgent.indexOf("mac")!=-1);
//-- mod_bbcode begin
var is_opera = (myAgent.indexOf("opera") != -1);
if (is_opera) {
    var myVersion = parseFloat(myAgent.substr(myAgent.indexOf('opera') + 6, 4) );
}
//-- mod_bbcode end


// Set the initial radio button status based on cookies

var allcookies = document.cookie;
var pos = allcookies.indexOf("bbmode=");

prep_mode();

function prep_mode()
{
    if (pos != 1) {
        var cstart = pos + 7;
        var cend   = allcookies.indexOf(";", cstart);
        if (cend == -1) { cend = allcookies.length; }
        cvalue = allcookies.substring(cstart, cend);

        if (cvalue == 'ezmode') {
            document.REPLIER.bbmode[0].checked = true;
        } else {
            document.REPLIER.bbmode[1].checked = true;
        }
    }
    else {
        // default to normal mode.
        document.REPLIER.bbmode[1].checked = true;
    }
}

function setmode(mVal)
{
    document.cookie = "bbmode="+mVal+"; path=/; expires=Wed, 1 Jan 2020 00:00:00 GMT;";
}

function get_easy_mode_state()
{
    // Returns true if we've chosen easy mode

    if (document.REPLIER.bbmode[0].checked) {
        return true;
    }
    else {
        return false;
    }
}

//--------------------------------------------
// Set the help bar status
//--------------------------------------------

function hstat(msg)
{
    document.REPLIER.helpbox.value = eval( "help_" + msg );
}

// Set the number of tags open box

function cstat()
{
    var c = stacksize(bbtags);

    if ( (c < 1) || (c == null) ) {
        c = 0;
    }

    if ( ! bbtags[0] ) {
        c = 0;
    }

    document.REPLIER.tagcount.value = c;
}

//--------------------------------------------
// Get stack size
//--------------------------------------------

function stacksize(thearray)
{
    for (i = 0 ; i < thearray.length; i++ ) {
        if ( (thearray[i] == "") || (thearray[i] == null) || (thearray == 'undefined') ) {
            return i;
        }
    }

    return thearray.length;
}

//--------------------------------------------
// Push stack
//--------------------------------------------

function pushstack(thearray, newval)
{
    arraysize = stacksize(thearray);
    thearray[arraysize] = newval;
}

//--------------------------------------------
// Pop stack
//--------------------------------------------

function popstack(thearray)
{
    arraysize = stacksize(thearray);
    theval = thearray[arraysize - 1];
    delete thearray[arraysize - 1];
    return theval;
}


//--------------------------------------------
// Close all tags
//--------------------------------------------

function closeall()
{
    if (bbtags[0]) {
        while (bbtags[0]) {
            tagRemove = popstack(bbtags)
            document.REPLIER.Post.value += "[/" + tagRemove + "]";

            // Change the button status
            // Ensure we're not looking for FONT, SIZE or COLOR as these
            // buttons don't exist, they are select lists instead.

            if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
            {

/*-- mod_bbcode exclude begin
                eval("document.REPLIER." + tagRemove + ".value = ' " + tagRemove + " '");
-- mod_bbcode exclude end */

//-- mod_bbcode begin


                if (tagRemove == 'CODE')
                    eval("document.REPLIER." + tagRemove + "_.value = document.REPLIER." + tagRemove + "_.value.replace(/\\*$/,'');");
                else {
                    if (document.getElementsByName(tagRemove)[0])
                        eval("document.REPLIER." + tagRemove + ".value = document.REPLIER." + tagRemove + ".value.replace(/\\*$/,'');");
                    else if (document.getElementsByName("sel" + tagRemove)[0])
                        eval("document.REPLIER.sel" + tagRemove + ".value = document.REPLIER.sel" + tagRemove + ".value.replace(/\\*$/,'');");
                }

//-- mod_bbcode end



                eval(tagRemove + "_open = 0");
            }
        }
    }

    // Ensure we got them all
    document.REPLIER.tagcount.value = 0;
    bbtags = new Array();
    document.REPLIER.Post.focus();
}

//--------------------------------------------
// EMOTICONS
//--------------------------------------------

function emoticon(theSmilie)
{
    doInsert(" " + theSmilie + " ", "", false);
}

//--------------------------------------------
// ADD CODE
//--------------------------------------------

function add_code(NewCode)
{
    document.REPLIER.Post.value += NewCode;
    document.REPLIER.Post.focus();
}

//--------------------------------------------
// ALTER FONT
//--------------------------------------------

function alterfont(theval, thetag)
{
    if (theval == 0)
        return;

    if(doInsert("[" + thetag + "=" + theval + "]", "[/" + thetag + "]", true))
        pushstack(bbtags, thetag);

    document.REPLIER.ffont.selectedIndex  = 0;
    document.REPLIER.fsize.selectedIndex  = 0;
    document.REPLIER.fcolor.selectedIndex = 0;

    cstat();

}


//--------------------------------------------
// SIMPLE TAGS (such as B, I U, etc)
//--------------------------------------------

function simpletag(thetag)
{
    var tagOpen = eval(thetag + "_open");

    if ( get_easy_mode_state() )
    {
        inserttext = prompt(prompt_start + "\n[" + thetag + "]xxx[/" + thetag + "]");
        if ( (inserttext != null) && (inserttext != "") )
        {
            doInsert("[" + thetag + "]" + inserttext + "[/" + thetag + "] ", "", false);
        }
    }
    else {
        if (tagOpen == 0)
        {
            if(doInsert("[" + thetag + "]", "[/" + thetag + "]", true))
            {
                eval(thetag + "_open = 1");
                // Change the button status

//-- mod_bbcode begin
                if (thetag == 'CODE')
                    eval("document.REPLIER." + thetag + "_.value += '*'");
                else
//-- mod_bbcode end
                eval("document.REPLIER." + thetag + ".value += '*'");

                pushstack(bbtags, thetag);
                cstat();
                hstat('click_close');
            }
        }
        else {
            // Find the last occurance of the opened tag
            lastindex = 0;

            for (i = 0 ; i < bbtags.length; i++ )
            {
                if ( bbtags[i] == thetag )
                {
                    lastindex = i;
                }
            }

            // Close all tags opened up to that tag was opened
            while (bbtags[lastindex])
            {
                tagRemove = popstack(bbtags);
                doInsert("[/" + tagRemove + "]", "", false)

                // Change the button status
            if ( (tagRemove != 'FONT') && (tagRemove != 'SIZE') && (tagRemove != 'COLOR') )
                {

/*-- mod_bbcode exclude begin
                eval("document.REPLIER." + tagRemove + ".value = ' " + tagRemove + " '");
-- mod_bbcode exclude end */

//-- mod_bbcode begin
                if (tagRemove == 'CODE')
                    eval("document.REPLIER." + tagRemove + "_.value = document.REPLIER." + tagRemove + "_.value.replace(/\\*$/,'');");
                else {
                    if (document.getElementsByName(tagRemove)[0])
                        eval("document.REPLIER." + tagRemove + ".value = document.REPLIER." + tagRemove + ".value.replace(/\\*$/,'');");
                    else if (document.getElementsByName("sel" + tagRemove)[0])
                        eval("document.REPLIER.sel" + tagRemove + ".value = document.REPLIER.sel" + tagRemove + ".value.replace(/\\*$/,'');");
                }
//-- mod_bbcode end


                    eval(tagRemove + "_open = 0");
                }
            }

            cstat();
        }
    }
}


function tag_list()
{
    var listvalue = "init";
    var thelist = "";

    while ( (listvalue != "") && (listvalue != null) )
    {
        listvalue = prompt(list_prompt, "");
        if ( (listvalue != "") && (listvalue != null) )
        {
            thelist = thelist+"[*]"+listvalue+"\n";
        }
    }

    if ( thelist != "" )
    {
        doInsert( "[LIST]\n" + thelist + "[/LIST]\n", "", false);
    }
}

function tag_url()
{
    var FoundErrors = '';
    var enterURL   = prompt(text_enter_url, "http://");
    var enterTITLE = prompt(text_enter_url_name, "My Webpage");

    if (!enterURL) {
        FoundErrors += " " + error_no_url;
    }
    if (!enterTITLE) {
        FoundErrors += " " + error_no_title;
    }

    if (FoundErrors) {
        alert("Error!"+FoundErrors);
        return;
    }

    doInsert("[URL="+enterURL+"]"+enterTITLE+"[/URL]", "", false);
}


//-- mod_bbcode begin
function tag_self(tag) {
    doInsert("[" + tag + "]", "", false);
}

function tag_one(tag) {
    eval("info = " + tag + "_info;");
    eval("preset = " + tag + "_preset;");
    eval("error = " + tag + "_error;");

    var param   = prompt(info, preset);

    if (!param) {
        alert(error);
        return;
    }

    doInsert("[" + tag + "]" + param + "[/" + tag + "]", "", false);
}


function tag_multiple(tag, params)
{

    var parameters = "";
    var params_array = new Array(params.length);
    for (i = 1; i <= params.length; i++) {
        eval("info = " + tag + "_info" + i + ";");
        eval("preset = " + tag + "_preset" + i + ";");
        eval("error = " + tag + "_error" + i + ";");
        param = prompt(info, preset);
        if (!param) {
            alert(error);
            return;
        }
         params_array[params[i-1] - 1] = param;
    }
    parameters = params_array.slice(0,params_array.length-1).join(",");
    doInsert("[" + tag + "=" + parameters + "]" + params_array[params_array.length-1] + "[/" + tag + "]", "", false);

}


function tag_select(theval, thetag) {
    if (theval == 0)
        return;
    if(doInsert("[" + thetag + "=" + theval + "]", "[/" + thetag + "]", true))
        pushstack(bbtags, thetag);
    eval("document.REPLIER.sel" + thetag + ".selectedIndex  = 0;");
    cstat();
}

function tag_newlist(tag, params)
{

    if (params == "2") {
        eval("info1 = " + tag + "_info1;");
        eval("preset1 = " + tag + "_preset1;");
        eval("info2 = " + tag + "_info2;");
        eval("preset2 = " + tag + "_preset2;");
    }
    else {
        eval("info2 = " + tag + "_info1;");
        eval("preset2 = " + tag + "_preset1;");
    }
    var option = "start";
    var option_list = "";
    
    if (params == "2") {
        param = prompt(info1, preset1);
    }

    while ( (option != "") && (option != null) )
    {
        option = prompt(info2, preset2);
        if ( (option != "") && (option != null) )
        {
            option_list = option_list + "[*]" + option + "\n";
        }
    }
    
    if ( option_list != "" ) {
        if (params == "2") 
            doInsert( "[" + tag + "=" + param + "]\n" + option_list + "[/" + tag + "]\n", "", false);
        else
            doInsert( "[" + tag + "]\n" + option_list + "[/" + tag + "]\n", "", false);
    }
}

function simple_BBCode(text) {
    if (text == "") return;

    var obj_ta = document.REPLIER.Post;

    text = text.replace(/\{cr\}/g,"\n");

    if ( (myVersion >= 4) && is_ie && is_win) {
        if(obj_ta.isTextEdit) {
            obj_ta.focus();
            var sel = document.selection;
            var rng = sel.createRange();
            rng.colapse;
            if((sel.type == "Text" || sel.type == "None") && rng != null){
                rng.text = text;
            }
        }
        else{
            obj_ta.value += text;
        }
    }
    else {

	// another removed && is_win to fix the loonix issue :r

        if ( (myVersion >= 4) && (!is_opera || (is_opera && myVersion >= 8))) {
            var length = obj_ta.textLength;
            var start = obj_ta.selectionStart;
            var end = obj_ta.selectionEnd;
            var head = obj_ta.value.substring(0,start);
            var rng = obj_ta.value.substring(start, end);
            var tail = obj_ta.value.substring(end, length);
            if( start != end ){
                rng = text;
                obj_ta.value = head + rng + tail;
                start = start + rng.length;
            }
            else{
                obj_ta.value = head + text + tail;
                start = start + text.length;
            }
            obj_ta.selectionStart = start;
            obj_ta.selectionEnd = start;
        }
        else {
            obj_ta.value += text;
        }
    }

    obj_ta.focus();
    return;
}

<!-- bbcode_function -->
//-- mod_bbcode end
function tag_image()
{
    var FoundErrors = '';
    var enterURL   = prompt(text_enter_image, "http://");

    if (!enterURL) {
        FoundErrors += " " + error_no_url;
    }

    if (FoundErrors) {
        alert("Error!"+FoundErrors);
        return;
    }

    doInsert("[IMG]"+enterURL+"[/IMG]", "", false);
}

function tag_email()
{
    var emailAddress = prompt(text_enter_email, "");

    if (!emailAddress) {
        alert(error_no_email);
        return;
    }

    doInsert("[EMAIL]"+emailAddress+"[/EMAIL]", "", false);
}

//--------------------------------------------
// GENERAL INSERT FUNCTION
//--------------------------------------------
// ibTag: opening tag
// ibClsTag: closing tag, used if we have selected text
// isSingle: true if we do not close the tag right now
// return value: true if the tag needs to be closed later

//

function doInsert(ibTag, ibClsTag, isSingle)
{
    var isClose = false;
    var obj_ta = document.REPLIER.Post;

    if ( (myVersion >= 4) && is_ie && is_win) // Ensure it works for IE4up / Win only
    {
        if(obj_ta.isTextEdit){ // this doesn't work for NS, but it works for IE 4+ and compatible browsers
            obj_ta.focus();
            var sel = document.selection;
            var rng = sel.createRange();
            rng.colapse;
            if((sel.type == "Text" || sel.type == "None") && rng != null){
                if(ibClsTag != "" && rng.text.length > 0)
                    ibTag += rng.text + ibClsTag;
                else if(isSingle)
                    isClose = true;

                rng.text = ibTag;
            }
        }
        else{
            if(isSingle)
                isClose = true;

            obj_ta.value += ibTag;
        }
    }
    else
    {

//-- mod_bbcode begin

        // this should work with Mozillas
		// removed stupid && is_win, maybe it will fix loonix

        if ( (myVersion >= 4) && (!is_opera || (is_opera && myVersion >= 8))) {
            var length = obj_ta.textLength;
            var start = obj_ta.selectionStart;
            var end = obj_ta.selectionEnd;
            var head = obj_ta.value.substring(0,start);
            var rng = obj_ta.value.substring(start, end);
            var tail = obj_ta.value.substring(end, length);
            if( start != end ){
                if (ibClsTag != "" && length > 0)
                    ibTag += rng + ibClsTag;
                else if (isSingle)
                    isClose = true;
                rng = ibTag;
                obj_ta.value = head + rng + tail;
                obj_ta.selectionStart = start;
                obj_ta.selectionEnd = start + rng.length;
            }
            else{
                if(isSingle)
                    isClose = true;
                obj_ta.value = head + ibTag + tail;
                start = start + ibTag.length;
                obj_ta.selectionStart = start;
                obj_ta.selectionEnd = start;
            }
        }
        else {
//-- mod_bbcode end
        if(isSingle)
            isClose = true;

        obj_ta.value += ibTag;
//-- mod_bbcode begin
        }
//-- mod_bbcode end

    }

    obj_ta.focus();

    // clear multiple blanks
//    obj_ta.value = obj_ta.value.replace(/  /, " ");

    return isClose;
}

