YUI({
        insetBefore: 'styleover', 
        modules: {
            'yui2': {
                fullpath: 'http://yui.yahooapis.com/combo?2.6.0/build/yahoo-dom-event/yahoo-dom-event.js&2.6.0/build/element/element-beta-min.js&2.6.0/build/container/container_core-min.js&2.6.0/build/menu/menu-min.js&2.6.0/build/button/button-min.js&2.6.0/build/editor/editor-min.js'
            }
        },
        timeout: 10000,
        filter: 'min'
    }).use('node', function(Y) {
        var Tomorzi = {};
        var TM = Tomorzi;
        TM.module = new function() {
            this.ArticleForm = function() {
                var formEl = Y.get('#orzaf form');
                var editorEl = Y.get('#orzaf form #html-editor');
                if (Y.get('#orzaf #html-editor')) {
                    Y.use('yui2', function(Y) {
                        var YUD = YAHOO.util.Dom;
                        var YUE = YAHOO.util.Event;

                        var dEditor, 
                        dForm, // 表單元素
                        dSwitchLink, // 切換編輯器的聯結元素
                        dTextarea, // 原始 Textarea 元素
                        oContainer,
                        oEditor; // 編輯器物件 

                        // 插入切換編輯器的聯結
                        dTextarea = YUD.get('html-editor')
                        dSwitchLink = document.createElement('a');
                        dSwitchLink.innerHTML = '使用 HTML 精靈';
                        dSwitchLink.className = 'switch-to-editor';
                        dSwitchLink.setAttribute('href','#');
                        dTextarea.parentNode.insertBefore(dSwitchLink, dTextarea); 

                        // 將 Hack 的註解移除
                        dTextarea.value = dTextarea.value.replace(/^<!--\s{0,2}/, '');
                        dTextarea.value = dTextarea.value.replace(/\s{0,2}-->$/, '');

                        // 轉換為原始碼
                        var getSourceCode = function (sCode) {
                            var oPattern = /(<[\/\d="a-zA-Z ]+>)</gi; 
                            var sReplace = '$1\n<'; 
                            sCode = sCode.replace(/<br>/g, '\n');
                            sCode = sCode.replace(oPattern, sReplace);
                            sCode = sCode.replace(oPattern, sReplace);
                            return sCode;
                        };

                        // 轉換成 HTML 檢視
                        var getHTMLCode = function (sCode) {                        
                            var oPattern = /(<[\/\d="a-zA-Z ]+>)\s+</gi; 
                            var sReplace = '$1<'; 
                            sCode = sCode.replace(oPattern, sReplace);
                            sCode = sCode.replace(oPattern, sReplace);
                            sCode = sCode.replace(/\n/g, '<br>');
                            return sCode;
                        };

                        // 編輯器的初始化
                        var setEditor = function () {
                            YUD.generateId(dTextarea);
                            oEditor = new YAHOO.widget.Editor(dTextarea.id, {
                                height: '500px',
                                dompath: true, 
                                animate: false
                            });
                            // 在 Render 之後自動抓到 oContainer 及 Textarea
                            oEditor.on('afterRender', function() {
                                oContainer = oEditor.get('element_cont');
                                dTextarea = oEditor.get('element');
                            });
                            oEditor.render();
                            };

                            // 切換的事件
                            var onSwitchLinkClick = function(oEvent) {
                                YUE.preventDefault(oEvent);
                                dTarget = YUE.getTarget(oEvent);
                                switch (dTarget.className) {
                                    case 'switch-to-editor': {
                                         if (!oEditor) {  // 只有第一次會產生 Editor 
                                             setEditor();
                                         }
                                         else {
                                             oContainer.replaceClass('yui-textarea-container', 'yui-editor-container');
                                             oEditor._setDesignMode('on');
                                             var sCode = oEditor.get('textarea').value; 
                                             oEditor.setEditorHTML(sCode);
                                         };
                                         // 設定文字
                                         dSwitchLink.innerHTML = '檢視原始碼';
                                         YUD.replaceClass(dSwitchLink, 'switch-to-editor', 'switch-to-textarea');
                                         break;
                                     };
                                    case 'switch-to-textarea' : {
                                        // 先存檔、並處理好文字內容
                                        oEditor.saveHTML();
                                        var sCode = oEditor.get('textarea').value; 
                                        oEditor.get('textarea').value = sCode;
                                        // 設定 Container
                                        oContainer.replaceClass('yui-editor-container', 'yui-textarea-container');
                                        // 設定文字
                                        dSwitchLink.innerHTML = '使用 HTML 精靈';
                                        YUD.replaceClass(dSwitchLink, 'switch-to-textarea', 'switch-to-editor');
                                        break;
                                    };
                                };
                            };

                            YUE.on(dSwitchLink, 'click', onSwitchLinkClick);

                    });
                }
            };
        };
        Y.on('domready', function() {
            var orzgu = Y.all('#bd .orz-b .orz-u');
            var main = Y.get('#bd .orz-main');
            var header = Y.get('#bd #orzh');
            var sider = Y.get('#bd .orz-b .sidebar')
            var leftCol = Y.get('#bd .orz-g .left')
            var rightCol = Y.get('#bd .orz-g .right')
            var setHeight = function() {
                var mainHeight = main.get('region')['height'];
                var headerHeight = header.get('region')['height'];
                var siderHeight = sider.get('region')['height'];
                var leftColHeight = leftCol.get('region')['height'];
                var rightColHeight = rightCol.get('region')['height'];
                var height = mainHeight -headerHeight;
                if (height > siderHeight) {
                    orzgu.setStyle('height', height + 'px');
                } else {
                    if (rightColHeight < leftColHeight) {
                        rightCol.setStyle('height', leftColHeight + 'px');
                    } else {
                        leftCol.setStyle('height', rightColHeight + 'px');
                    } 
                } 
            };
            setHeight();
        });
        void function () {
            Y.on('contentready', TM.module.ArticleForm, '#orzaf');
        } ();
});
