/* Dynamic images, change class */

// MooTools

window

    .addEvent('domready', function()

    {



        $$('*.dynamic_img').addEvents(

        {

            'mouseenter': function()

            {

                this.addClass('over');

            },

            'mouseleave': function()

            {

                this.removeClass('over');

                this.removeClass('clicked');

            },

            'mousedown': function()

            {

                this.removeClass('over');

                this.addClass('clicked');

            }

        });



        $$('img.tSwitch')

            .addEvents(

            {

                'mousedown': function()

                {

                    var tbody = this.getParent('thead').getNext('tbody');

                    tbody.toggleClass('hide');

                    if (tbody.hasClass('hide'))

                    {

                        document.cookie = 't3' + this.getParent('table')

                            .getProperty('id') + '=1; expires=Wed, 1 Jan 2020 00:00:00 GMT';

                        this.removeClass('opened');

                        this.addClass('closed');

                    }

                    else

                    {

                        document.cookie = 't3' + this.getParent('table')

                            .getProperty('id') + '=1; expires=Thu, 01-Jan-1970 00:00:01 GMT';

                        this.removeClass('closed');

                        this.addClass('opened');

                    }

                }

            });



        $$('table.row_table_data tbody tr').addEvents(

        {

            'mouseenter': function()

            {

                this.addClass('hlight');

            },

            'mouseleave': function()

            {

                this.removeClass('hlight');

            },

            'mousedown': function()

            {

                this.toggleClass('marked');

            }

        });



    });

    

// IE MooTools Fix

if (Browser.Engine.trident) // für IE

{

    /**

     * Element Erweiterungen

     *

     */

    Element.implement(

    {

        insertAtCursor: function(value, select)

        {

            var pos = this.getSelectedRange();



            // IE fix BEGIN

            if (pos.start == 0 && pos.end == 0)

            {

                this.focus();

                sel = document.selection.createRange();

                sel.text = value;

                this.focus();

                return this;

            }

            // IE fix END



            var text = this.get('value');

            this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length));

            if ($pick(select, true))

            {

                this.selectRange(pos.start, pos.start + value.length);

            }

            else

            {

                this.setCaretPosition(pos.start + value.length);

            }



            return this;

        },



        insertAroundCursor: function(options, select)

        {

            options = $extend(

            {

                before: '',

                defaultMiddle: '',

                after: ''

            }, options);



            var value = this.getSelectedText() || options.defaultMiddle;

            var pos = this.getSelectedRange();



            // IE fix BEGIN

            if (pos.start == 0 && pos.end == 0)

            {

                this.focus();

                sel = document.selection.createRange();

                sel.text = options.before + options.after;

                this.focus();

                return this;

            }

            // IE fix END



            var text = this.get('value');

            if (pos.start == pos.end)

            {

                this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length));

                this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length);

            }

            else

            {

                var current = text.substring(pos.start, pos.end);

                this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length));

                var selStart = pos.start + options.before.length;



                if ($pick(select, true))

                {

                    this.selectRange(selStart, selStart + current.length);

                }

                else

                {

                    this.setCaretPosition(selStart + text.length);

                }

            }

            return this;

        }

    });

}

    

var BBEditor = new Class ({

    preview: null,

    textArea: null,

    id: null,



    Binds: ['fetchPreview', 'showToolbarWindow', 'insertTag', 'insertSingleTag', 'insertSmilieTag', 'hideToolbarWindow', 'showPreview', 'hidePreview'],



    /**

     * Initialisiert den Editor

     */

    initialize: function(textAreaId) {



        //connect elements

        this.id = textAreaId;

        this.textArea = $(textAreaId);

        this.toolbar = $(textAreaId + '_toolbar');

        this.preview = $(textAreaId + '_preview');



        //init elements

        this.preview.setStyle('display', 'none');



        //add Events

        $(textAreaId + '_previewButton').addEvent('click', this.fetchPreview);

        $(textAreaId + '_resourceButton').addEvent('click', this.showToolbarWindow);

        $(textAreaId + '_smilieButton').addEvent('click', this.showToolbarWindow);

        $(textAreaId + '_troopButton').addEvent('click', this.showToolbarWindow);

        $(textAreaId).addEvent('click', this.hideToolbarWindow);

        this.addEvent($(textAreaId + '_toolbar'), this.insertTag);

        this.addEvent($(textAreaId + '_resources'), this.insertTag);

        this.addEvent($(textAreaId + '_smilies'), this.insertTag);

        this.addEvent($(textAreaId + '_troops'), this.insertTag);

    },



    /**

     * Fügt den klickbaren Objekten die Events hinzu

     *

     * @param object containerObjekt

     * @param string callback

     */

    addEvent: function(div, call) {

        var childen =  div.getChildren();

        for (i = 0; i < childen.length; i++) {

            if ($(childen[i]).get('bbTag')) {

                $(childen[i]).addEvent('click', call);

            }

        }

    },



    /**

     * Fügt einen ausgewählten Tag in die

     * Textarea ein

     *

     * @param Object

     */

    insertTag: function(Event) {

        this.hidePreview();

        var link = $(Event.target.parentNode);

        var tag = link.get('bbTag');



        switch (link.get('bbType')) {

            //double tag

            case 'd':

                this.textArea.insertAroundCursor({before: '[' + tag + ']', after: '[/' + tag + ']'});

                break;

            //smilie

            case 's':

                this.textArea.insertAtCursor(tag, false);

                break;

            //once

            case 'o':

                this.textArea.insertAtCursor('[' + link.get('bbTag') + ']', false);

                break;

        }

    },



    /**

     * Zeigt ein Unterfenster der Toolbar

     * an

     *

     * @param Object

     */

    showToolbarWindow: function(Event) {

        var targetDiv = Event.target.parentNode;

        var window = $(this.id + '_' +  targetDiv.get('bbWin'));



        var show = true;

        if (window.getStyle('display') == 'block') {

            show = false;

        }



        this.hideToolbarWindow();



        if (show) {

            window.fade('hide').fade('in');

            window.setStyle('display', 'block');

        }

    },



    /**

     * Versteckt die Fenster der Toolbar

     *

     * @param Object

     */

    hideToolbarWindow: function() {

        var childen =  $(this.id + '_toolbarWindows').getChildren();

        for (i = 0; i < childen.length; i++) {

            $(childen[i]).setStyle('display', 'none');

        }

    },



    /**

     * Holt die Vorschau vom Server

     *

     * @param Object

     */

    fetchPreview: function(Event) {

        if (this.textArea.getStyle('display') == 'none' || this.textArea.value.length < 1) {

            this.hidePreview();

            return;

        }



        var jsonRequest = new Request.JSON({

            method: 'post',

            url: 'ajax.php?f=bb',

            data:

            {

                nl2br:  1,

                target: this.id,

                text:   this.textArea.value

            },

            onSuccess: this.showPreview

        });

        jsonRequest.post();

    },



    /**

     * Zeigt die Vorschau

     *

     * @param string textAreaId

     */

    showPreview: function(data) {

        if (data.error == true) {

            alert(data.errorMsg);

            return;

        } else {

            this.preview.innerHTML = data.text;

            this.preview.setStyle('display','block');

            this.textArea.setStyle('display','none');

        }

    },



    /**

     * Versteckt die Vorschau

     *

     * @param string textAreaId

     */

    hidePreview: function() {

        this.preview.setStyle('display','none');

        this.textArea.setStyle('display','inline');

    }

});







var attackSysbolState = new Array();



function getAttackSymbolState(id)

{

    var state = attackSysbolState[id];



    if (!state)

    {

        state = new Object();



        var type = 0;



        var imgClass = $('markSybol_'+id).get('class');



        var color = imgClass.substr(imgClass.lastIndexOf('_')+1, 11);



        switch (color)

        {

            case 'green':

                type = 1;

                break;

            case 'yellow':

                type = 2;

                break;

            case 'red':

                type = 3;

                break;

            default:

                type = 0;

                break;

        }

        state.type = type;

        state.oldType = type;





        attackSysbolState[id] = state;

    }



    return state;

}



function drawAttackSymbol(id)

{

    var state = getAttackSymbolState(id);



    if (state.type == 4)

    {

        state.type = 0;

    }



    switch (state.type)

    {

        case 1:

            img = 'img/green.gif';

            color = 'green';

            break;

        case 2:

            img = 'img/yellow.gif';

            color = 'yellow';

            break;

        case 3:

            img = 'img/red.gif';

            color = 'red';

            break;

        default:

            img = 'img/grey.gif';

            color = 'grey';

            break;

    }

    $('markSybol_'+id).set('class', 'attack_symbol_'+color);

}



function markAttackSymbol(id)

{



    var state = getAttackSymbolState(id);

    state.type ++ ;



    drawAttackSymbol(id);



    if (state.isSaving != true)

    {

        state.isSaving = true;



        (function()

        {

            if (state.type != state.oldType)

            {

                var jsonRequest = new Request.JSON(

                {

                   method: 'post',

                   url: 'ajax.php?f=vp&id='+id+'&state='+state.type,

                   onSuccess: function(data)

                   {

                        var state = getAttackSymbolState(data.id);



                        state.isSaving = false;



                        state.type = data.type;

                        state.oldType = data.type;



                        drawAttackSymbol(data.id);

                   }

                });

                jsonRequest.post();

            }

            else

            {

                state.isSaving = false;



            }



         }).delay(1000);

    }



}
