﻿

window.bbcode = {
    imageTag: false,
    theSelection: false,
    
    // Define the bbCode tags
    bbcode: [],
    bbtags: [
        '[b]','[/b]',
        '[i]','[/i]',
        '[u]','[/u]',
        '[quote]','[/quote]',
        '[code]','[/code]',
        '[list]','[/list]',
        '[list=]','[/list]',
        '[img]','[/img]',
        '[url]','[/url]'],
    
    
    help : {
        data: {
            b: "Texte gras : [b]texte[/b] (alt+b)",
            i: "Texte italique : [i]texte[/i] (alt+i)",
            u: "Texte souligné : [u]texte[/u] (alt+u)",
            q: "Citation : [quote]texte cité[/quote] (alt+q)",
            c: "Afficher du code : [code]code[/code] (alt+c)",
            l: "Liste : [list]texte[/list] (alt+l)",
            o: "Liste ordonnée : [list=]texte[/list] (alt+o)",
            p: "Insérer une image : [img]http://image_url/[/img] (alt+p)",
            w: "Insérer un lien : [url]http://url/[/url] ou [url=http://url/]Nom[/url] (alt+w)",
            a: "Fermer toutes les balises BBCode ouvertes",
            s: "Couleur du texte : [color=red]texte[/color] ce rouge fait partie du code, l'astuce : #FF0000 fonctionne aussi sdg sfdg sfdg fdg fdg fd g",
            f: "Taille du texte : [size=x-small]texte en petit[/size]"
        },
        
        show : function (helpbox_id, help) {
            var msg = (window.bbcode_help_data && window.bbcode_help_data[help])
                ? window.bbcode_help_data[help]
                : window.bbcode.help.data[help];
            
            document.getElementById(helpbox_id).innerHTML = msg;
        }
        
    },
    
    
    smiley: function (txtarea_id, text) {
        var txtarea = document.getElementById(txtarea_id);
        
        text = ' ' + text + ' ';
        if (txtarea.createTextRange && txtarea.caretPos) {
            var caretPos = txtarea.caretPos;
            caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' '
                ? caretPos.text + text + ' '
                : caretPos.text + text;
            
            txtarea.focus();
            
        } else {
            txtarea.value  += text;
            txtarea.focus();
            
        }
    },
    
    getButton: function (txtarea, bbnumber) {
        return document.getElementById(txtarea.$.bbcode.buttons['btn_' + bbnumber]);
        
    },
    
    style: {
        font: function (txtarea_id, bbopen, bbclose) {
            var txtarea = document.getElementById(txtarea_id);
            
            
            if ($.browser.msie) {
                theSelection = document.selection.createRange().text;
                if (!theSelection) {
                    txtarea.value += bbopen + bbclose;
                    txtarea.focus();
                    return;
                }
                
                document.selection.createRange().text = bbopen + theSelection + bbclose;
                txtarea.focus();
                return;
            }
            
            if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)) {
                window.bbcode.tools.mozWrap(txtarea, bbopen, bbclose);
                return;
            }
            
            txtarea.value += bbopen + bbclose;
            txtarea.focus();
            
            window.bbcode.tools.storeCaret(txtarea);
        },
        
        apply: function (txtarea_id, bbnumber) {
            var txtarea = document.getElementById(txtarea_id);
            var element = window.bbcode.getButton(txtarea, bbnumber);
            
            var current_element = null;
            
            txtarea.focus();
            
            var donotinsert = false;
            var theSelection = false;
            var bblast = 0;
            
            // Close all open tags & default button names
            if (bbnumber == -1) {
                while (window.bbcode.bbcode[0]) {
                    butnumber = window.bbcode.bbcode.pop() - 1;
                    txtarea.value += window.bbcode.bbtags[butnumber + 1];
                    
                    current_element = window.bbcode.getButton(txtarea, butnumber);
                    current_element.innerHTML = current_element.$.label.closed;
                    current_element.className = current_element.$.classNames.closed;
                    
                }
                
                window.bbcode.imageTag = false; // All tags are closed including image tags :D
                txtarea.focus();
                return;
            }
            
            
            if ($.browser.msie) {
                theSelection = document.selection.createRange().text; // Get text selection
                
                if (theSelection) {
                    // Add tags around selection
                    document.selection.createRange().text =
                        window.bbcode.bbtags[bbnumber] + theSelection + window.bbcode.bbtags[bbnumber+1];
                    
                    txtarea.focus();
                    theSelection = '';
                    return;
                }
                
            } else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)) {
                window.bbcode.tools.mozWrap(txtarea, window.bbcode.bbtags[bbnumber], window.bbcode.bbtags[bbnumber+1]);
                
                txtarea.focus();
                return;
            }

            // Find last occurance of an open tag the same as the one just clicked
            for (i = 0; i < window.bbcode.bbcode.length; i++) {
                if (window.bbcode.bbcode[i] == (bbnumber + 1)) {
                    bblast = i;
                    donotinsert = true;
                }
            }
            
            if (donotinsert) {
                // Close all open tags up to the one just clicked & default button names
                
                while (window.bbcode.bbcode[bblast]) {
                    butnumber = window.bbcode.bbcode.pop() - 1;
                    
                    txtarea.value += window.bbcode.bbtags[butnumber + 1];
                    
                    current_element = window.bbcode.getButton(txtarea, butnumber);
                    current_element.innerHTML = current_element.$.label.closed;
                    current_element.className = current_element.$.classNames.closed;
                        
                    window.bbcode.imageTag = false;
                }
                
                txtarea.focus();
                return;
                
            } else {
                // Open tags
                if (window.bbcode.imageTag && (bbnumber != 14)) {
                    // Close image tag before adding another
                    txtarea.value += window.bbcode.bbtags[15];
                    
                    // Remove the close image tag from the list
                    lastValue = window.bbcode.bbcode.pop() - 1;
                    
                    // Return button back to normal state
                    //element.value = "Img";
                    element.innerHTML = element.$.label.closed;
                    element.className = element.$.classNames.closed;
                    
                    
                    window.bbcode.imageTag = false;
                    
                }
                
                // Open tag
                txtarea.value += window.bbcode.bbtags[bbnumber];
                
                if ((bbnumber == 14) && (window.bbcode.imageTag == false)) {
                    // Check to stop additional tags after an unclosed image tag
                    window.bbcode.imageTag = 1;
                }
                
                window.bbcode.bbcode.push(bbnumber + 1);
                
                
                element.innerHTML = element.$.label.opened;
                element.className = element.$.classNames.opened;
                //element.value += "*";
                
                txtarea.focus();
                return;
            }
            
            window.bbcode.tools.storeCaret(txtarea);
        }
    },
    
    tools: {
        // From http://www.massless.org/mozedit/
        mozWrap: function (txtarea, open, close) {
            var selLength = txtarea.textLength;
            var selStart = txtarea.selectionStart;
            var selEnd = txtarea.selectionEnd;
            if (selEnd == 1 || selEnd == 2) {
                selEnd = selLength;
            }
            var s1 = (txtarea.value).substring(0,selStart);
            var s2 = (txtarea.value).substring(selStart, selEnd)
            var s3 = (txtarea.value).substring(selEnd, selLength);
            
            txtarea.value = s1 + open + s2 + close + s3;
            
            return;
        },

        // Insert at Claret position. Code from
        // http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
        storeCaret: function (textEl) {
            if (textEl.createTextRange) {
                textEl.caretPos = document.selection.createRange().duplicate();
            }
        }
        
        
    }

    
}

/*

function checkForm() {

	formErrors = false;

	if (document.post.message.value.length < 2) {
		formErrors = "Vous devez entrer un message avant de poster.";
	}

	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		bbstyle(-1);
		//formObj.preview.disabled = true;
		//formObj.submit.disabled = true;
		return true;
	}
}
*/



