/**
 * SDG_Loader - загрузчик JavaScript Shark Development Group для расстановки дополнительных аттрибутов на ряд элементов
 * и выполнения прочих действий, связанных с необходимостью автозагрузки
 */
var SDG_Loader = {
    /**
     * список функций, которые необходимо запустить
     */
    _loNeed2Start : [],
    _loAsyncStart : [],
    
    _oElementsProcedures : {
            'textarea' : function () {
                var tmpData;
                for (var i=0; i < (tmpData = $$('textarea')).length; i++) { //-- тут будем подключать редакторы к textarea
                    var lsTextArea = tmpData[i];
                    switch (true) {
                        case (lsTextArea.getAttribute('rel') && lsTextArea.getAttribute('rel').search('sdg:ext_editor')>-1) :
                            switch (lsTextArea.getAttribute('rel')) {
                                case 'sdg:ext_editor[tinymce]' :
                                    SDG_Editor.attach(lsTextArea.id, 'tinymce');
                                    break;
                                case 'sdg:ext_editor[fckeditor]' :
                                    SDG_Editor.attach(lsTextArea.id, 'fckeditor');
                                    break;
                                case 'sdg:ext_editor[ckeditor]' :
                                    SDG_Editor.attach(lsTextArea.id, 'ckeditor');
                                    break;
                                }
                        break; }
                }  
            }, //-- конец обработки текстареа
            'button' : function () {
                var tmpData;
                for (var i=0; i < (tmpData = $$('button')).length; i++) {   //-- обработка кнопок
                    var loButton = tmpData[i];
                    switch (true) { //-- тут перевести на замыкания по значению getAttribute('rel')
                        case (loButton.getAttribute('rel') && loButton.getAttribute('rel').search('sdg:')>-1) :         //-- кнопка из серии SDG
                            SDG_Core.loadJS( '/kernel/javascript/actions/actions.buttons.class.js' );     //-- подгрузим обработчик
                            if (SDG_ActionProcessor.buttons[loButton.getAttribute('rel')])  {            //-- если определен обработчик
                                SDG_ActionProcessor.buttons[loButton.getAttribute('rel')](loButton);    //-- запустим его
                            }
                        break;
                    }
                }
            }, //-- конец обработки баттонов
            'img' : function () {
                var tmpData;
                for (var i=0; i < (tmpData = $$('img')).length; i++) {      //-- обработка рисунков

                }
            }, //-- конец обработки рисунков
            'input' : function () {
                var tmpData = $$('input');
                SDG_Core.loadJS('/kernel/javascript/element_modifier.class.js');
                for (var i=0; i < tmpData.length; i++) {   //-- обработка кнопок
                    var loInput = tmpData[i];
                    switch (true) {
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:jscalendar')>-1) : //-- наложение дат
                                SDG_Modifier.setCalendar(loInput);
                        break;
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:query_field')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setQuery(poInput);};}(loInput), 0);
                        break;
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:ext_segment')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setSegment(poInput); SDG_Loader.postLoad();};}(loInput), 0);
                        break;
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:js_modifier')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setModifier(poInput, 'span');};}(loInput), 0);
                        break;
                    }
                }
            }, //-- конец обработки инпутов
            'select' : function () {
                var tmpData = $$('select');
                SDG_Core.loadJS('/kernel/javascript/element_modifier.class.js');
                for (var i=0; i < tmpData.length; i++) {   //-- обработка кнопок
                    var loInput = tmpData[i];
                    switch (true) {
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:js_modifier')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setModifier(poInput, 'span');};}(loInput), 0);
                        break;
                    }
                }
            }, //-- конец обработки инпутов
            'extensions' : function () {    //-- обработки для span-ов
                SDG_Core.loadJS('/kernel/javascript/element_modifier.class.js');
                var tmpData = $$('span');
                for (var i=0; i < tmpData.length; i++) {   //-- обработка кнопок
                    var loInput = tmpData[i];
                    switch (true) {
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:query_field')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setQuery(poInput, 'span');};}(loInput), 0);
                        break;
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:ext_segment')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setSegment(poInput, 'span'); SDG_Loader.postLoad();};}(loInput), 0);
                        break;
                        case (loInput.getAttribute('rel') && loInput.getAttribute('rel').search('sdg:js_modifier')>-1) : //-- наложение подменю с запросами
                                setTimeout( function(poInput) {return function () {SDG_Modifier.setModifier(poInput, 'span');};}(loInput), 0);
                        break;
                    }
                }
            }   //-- конец обработки расширений
    },

    attach : function (poFunc) {
        this._loNeed2Start.push ([poFunc, 0]);
    },
    /**
     * запустить процесс
     */
    start : function () {
        window.setTimeout( function() { SDG_Loader.initElements('textarea'); }, 0 );
        window.setTimeout( function() { SDG_Loader.initElements('button'); }, 0 );
        window.setTimeout( function() { SDG_Loader.initElements('img'); }, 0 );
        window.setTimeout( function() { SDG_Loader.initElements('input'); }, 0 );
        window.setTimeout( function() { SDG_Loader.initElements('select'); }, 0 );
        window.setTimeout( function() { SDG_Loader.initElements('extensions'); }, 0 );
        window.setTimeout( function() { SDG_Loader.startOther(); }, 0 );
    },
    
    startOther : function () {
        for (var i=0;i<this._loNeed2Start.length;i++) { //-- запустить стартер присоединенных методов
                if (typeof this._loNeed2Start[i][0] == 'function' && !this._loNeed2Start[i][1]) {
                    this._loNeed2Start[i][1] = 1;
                    this._loNeed2Start[i][0]();
                }
        }
    },
    
    postLoad : function () {
                for (var i=0;i<this._loNeed2Start.length;i++) { //-- запустить стартер присоединенных методов
                if (typeof this._loNeed2Start[i][0] == 'function' && !this._loNeed2Start[i][1]) {
                    this._loNeed2Start[i][1] = 1;
                    this._loNeed2Start[i][0]();
                }
        }
        this._loNeed2Start = [];
        /*
        for (var i=0;i<this._loAsyncStart.length;i++) { //-- запустить стартер присоединенных методов
                if (typeof this._loAsyncStart[i] == 'function')  this._loAsyncStart[i]();
        }
        this._loAsyncStart = [];
        */
    },
    /**
     * инициировать элементы по типам
     */
    initElements : function (psElementType) {
        this._oElementsProcedures[psElementType]();
    }
}