OSDN Git Service

pettanR version0.4.15
[pettanr/clientJs.git] / 0.4.x / javascripts / work.js
index 64e5513..291ee01 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR work.js\r
- *   version 0.4.2\r
+ *   version 0.4.15\r
  *   \r
  * author:\r
  *   itozyun\r
  * \r
  */\r
 \r
-               pettanr.LINE_FEED_CODE_TEXTAREA = ( function(){\r
-                       var text = document.getElementById( 'shadowTxtarea'),\r
-                               form = text.parentNode;\r
-                       form.parentNode.removeChild( form);\r
-                       return text.value;\r
-               })();\r
-               pettanr.LINE_FEED_CODE_PRE = ( function(){\r
-                       var pre = document.getElementById( 'shadowPre');\r
-                       pre.parentNode.removeChild( pre);\r
-                       return pettanr.ua.isIE === true ? this.LINE_FEED_CODE_TEXTAREA : pre.innerHTML; // ie ??                                \r
-               })();\r
 \r
 /* ----------------------------------------\r
  *   pettanr.editor\r
  *    - MENU_BAR_CONTROL\r
- *    - HISTORY\r
+ *    - HISTORY_CONTROL\r
  *    - SAVE_CONTROL\r
  *    - TEXT_EDITOR_CONTROL\r
  *    - IMAGE_GROUP_EXPROLER\r
@@ -86,7 +75,7 @@ pettanr.editor = ( function(){
                COMIC_ELEMENT_ARRAY = [],\r
                ELM_MOUSE_EVENT_CHATCHER = document.getElementById( 'mouse-operation-catcher'),\r
                MIN_PANEL_HEIGHT = 20,\r
-               MIN_OBJECT_SIZE = 19,\r
+               MIN_ELEMENT_SIZE = 19,\r
                MOUSE_HIT_AREA = 10,\r
                jqMouseEventChacher,\r
                jqEditor,\r
@@ -98,6 +87,9 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * MENU BAR\r
+ *  - mouseEventListener\r
+ *  - controler\r
+ * \r
  * div\r
  *   div.title\r
  *   ul\r
@@ -129,7 +121,6 @@ pettanr.editor = ( function(){
                                a.href = '#';\r
                                return ret;\r
                        })(),\r
-                       EMPTY_FUNCTION = new Function,\r
                        ITEM_ARRAY = [],\r
                        barH = pettanr.util.getElementSize( ELM_BAR).height,\r
                        itemW = pettanr.util.getElementSize( ELM_ITEM_ORIGN).width,\r
@@ -177,12 +168,12 @@ pettanr.editor = ( function(){
                        }\r
                }\r
 \r
-               var MenuBarItemClass = function( title, opt_callbackArray){\r
+               var MenuBarItemClass = function( title){\r
                        var ELM_WRAPPER = ELM_ITEM_ORIGN.cloneNode( true),\r
                                ELM_TITLE = ELM_WRAPPER.getElementsByTagName( 'div')[ 0],\r
                                ELM_SELECTION = ELM_WRAPPER.getElementsByTagName( 'ul')[ 0],\r
                                INDEX = ITEM_ARRAY.length,\r
-                               SELECTION_CALLBACK_ARRAY = opt_callbackArray || [],\r
+                               SELECTION_CALLBACK_ARRAY = [],\r
                                numSelection = 0,\r
                                visible = false;\r
                        ELM_TITLE.innerHTML = title;\r
@@ -192,18 +183,10 @@ pettanr.editor = ( function(){
                        \r
                        function onClick( e){\r
                                var that = this,\r
-                                       i = ( function(){\r
-                                               var parent = that.parentNode,\r
-                                                       children = parent.getElementsByTagName( 'li'),\r
-                                                       l = children.length;\r
-                                               for(var i=0; i<l; ++i){\r
-                                                       if( children[ i] === that) return i;\r
-                                               }\r
-                                               return -1;\r
-                                       })();\r
-                               i !== -1 && this.className !== 'disabled' && SELECTION_CALLBACK_ARRAY[ i]();\r
+                                       i = pettanr.util.getChildIndex( this.parentNode, this);\r
+                               i !== -1 && this.className !== 'disabled' && SELECTION_CALLBACK_ARRAY[ i]( i);\r
                                e.stopPropagation();\r
-                               return false;                           \r
+                               return false;\r
                        }\r
                        return {\r
                                elm: ELM_WRAPPER,\r
@@ -240,7 +223,7 @@ pettanr.editor = ( function(){
 \r
                \r
                function createMenubarItem( title){\r
-                       var _item = MenuBarItemClass.apply( {}, [ title]);\r
+                       var _item = new MenuBarItemClass( title);\r
                        ITEM_ARRAY.push( _item);\r
                        return _item;\r
                }\r
@@ -256,6 +239,17 @@ pettanr.editor = ( function(){
 \r
                                delete MENU_BAR_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               MENU_BAR_CONTROL.init && MENU_BAR_CONTROL.init();\r
+                               // ELM_BAR.style.top = ( -barH) +'px';\r
+                               // anime\r
+                       },\r
+                       close: function(){\r
+                               var l = ITEM_ARRAY.length;\r
+                               for( var i=0; i<l; ++i){\r
+                                       ITEM_ARRAY[ i].hide();\r
+                               }\r
+                       },\r
                        h: barH,\r
                        onMouseMove: function( _mouseX, _mouseY){\r
                                if( barH >= _mouseY){\r
@@ -318,9 +312,10 @@ pettanr.editor = ( function(){
 \r
 \r
 /* ----------------------------------------\r
- * HISTORY\r
+ * HISTORY_CONTROL\r
+ *  - controler\r
  */\r
-       var HISTORY = ( function() {\r
+       var HISTORY_CONTROL = ( function() {\r
                var     STACK_BACK = [],\r
                        STACK_FORWARD = [],\r
                        MENUBAR_BACK = MENU_BAR_CONTROL.EDIT.createSelection( 'back', 'ctrl + z', back, false),\r
@@ -357,12 +352,44 @@ pettanr.editor = ( function(){
                        MENUBAR_BACK.visible( true);\r
                        SAVE_CONTROL.panelUpdated( true);\r
                }\r
+               function destroyStack( _stack, _destroy){\r
+                       _stack.fn = null;\r
+                       \r
+                       var     _argBack = _stack.argBack,\r
+                               _argForword = _stack.argForword,\r
+                               _value;\r
+                       if( typeof _argBack.length === 'number'){ // isArray\r
+                               while( _argBack.length > 0){\r
+                                       _value = _argBack.shift();\r
+                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
+                               }\r
+                       }\r
+                       if( typeof _argForword.length === 'number'){\r
+                               while( _argForword.length > 0){\r
+                                       _value = _argForword.shift();\r
+                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
+                               }                                               \r
+                       }                       \r
+               }\r
                return {\r
                        init: function(){\r
                                log = $( '#history-log');\r
-                               delete HISTORY.init;\r
+                               delete HISTORY_CONTROL.init;\r
+                       },\r
+                       open: function(){\r
+                               HISTORY_CONTROL.init && HISTORY_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               MENUBAR_BACK.visible( false);\r
+                               MENUBAR_FORWARD.visible( false);\r
+                       while( STACK_BACK.length > 0){\r
+                                       destroyStack( STACK_BACK.shift(), true);\r
+                               }\r
+                       while( STACK_FORWARD.length > 0){\r
+                                       destroyStack( STACK_FORWARD.shift(), true);\r
+                               }\r
                        },\r
-                   saveState: function( _function, _argBack, _argForword, _destory) {\r
+                   saveState: function( _function, _argBack, _argForword, _destroy) {\r
                        STACK_BACK.push( {\r
                                fn:                     _function,\r
                                argBack:        _argBack,\r
@@ -371,26 +398,11 @@ pettanr.editor = ( function(){
                        });\r
                        MENUBAR_BACK.visible( true);\r
                                SAVE_CONTROL.panelUpdated( true);\r
-\r
+                               \r
+                               var _stack;\r
                        while( STACK_FORWARD.length > 0){\r
-                                       var _stack = STACK_FORWARD.shift(),\r
-                                               _destroy = _stack.destroy,\r
-                                               _value;\r
-                                       _argBack = _stack.argBack;\r
-                                       _argForword = _stack.argForword;\r
-                                       _stack.fn = null;\r
-                                       if( typeof _argBack === 'array'){\r
-                                               while( _argBack.length > 0){\r
-                                                       _value = _argBack.shift();\r
-                                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
-                                               }\r
-                                       }\r
-                                       if( typeof _argForword === 'array'){\r
-                                               while( _argForword.length > 0){\r
-                                                       _value = _argForword.shift();\r
-                                                       _destroy === true && typeof _value.destroy === 'function' && _value.destroy();\r
-                                               }                                               \r
-                                       }\r
+                                       _stack = STACK_FORWARD.shift();\r
+                                       destroyStack( _stack, _stack.destroy);\r
                                }\r
                                MENUBAR_FORWARD.visible( false);\r
                    }           \r
@@ -399,9 +411,60 @@ pettanr.editor = ( function(){
 \r
 \r
 /* ----------------------------------------\r
- *     Save Control\r
+ * OUTPUT_CONSOLE\r
+ *  - overlay\r
  */\r
+       var OUTPUT_CONSOLE = ( function(){\r
+               var jqWrap, jqOutputArea,\r
+                       ID = 'outputConsole';\r
+               //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK);\r
+               \r
+               function close(){\r
+                       jqWrap.hide();\r
+                       jqOutputArea.val('');\r
+               }\r
+               function clickOK(){\r
+                       pettanr.overlay.hide();\r
+                       close();                        \r
+               }\r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#output-console-wrapper').hide();\r
+                               jqOutputArea = $( '#output-area');\r
+                               delete OUTPUT_CONSOLE.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( _text){\r
+                               jqWrap.show();\r
+\r
+                               \r
+                               pettanr.overlay.show( this);\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );                              \r
+                               \r
+                               jqOutputArea.val( _text).focus();\r
+                       },\r
+                       onWindowResize: function(){\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );\r
+                       },\r
+                       onClose: close,\r
+                       ID: 'textEditor'\r
+               }\r
+       })();\r
 \r
+/* ----------------------------------------\r
+ * SAVE_CONTROL\r
+ *  - controler\r
+ */\r
        var SAVE_CONTROL = ( function(){\r
                var SAVE = MENU_BAR_CONTROL.QUIT.createSelection( 'save', 'ctrl + S', quit, false),\r
                        SAVE_AND_QUIT = MENU_BAR_CONTROL.QUIT.createSelection( 'save & quit', null, quit, false, false, true),\r
@@ -411,15 +474,19 @@ pettanr.editor = ( function(){
                        updated = false;\r
                \r
                function quit(){\r
+                       // 本来は os.application.close();\r
+                       pettanr.view.show( 'entrance');\r
                }\r
                \r
                function outputAsHtml(){\r
-                       alert( COMIC_ELEMENT_CONTROL.getAsHTML( true, false));\r
+                       OUTPUT_CONSOLE.show( COMIC_ELEMENT_CONTROL.getAsHTML( true, false));\r
                }\r
                function outputAsJsonString(){\r
-                       alert( COMIC_ELEMENT_CONTROL.getAsJsonString());\r
+                       OUTPUT_CONSOLE.show( COMIC_ELEMENT_CONTROL.getAsJsonString());\r
                }\r
                return {\r
+                       open: function(){},\r
+                       close: function(){},\r
                        quit: quit,\r
                        panelUpdated: function( _updated){\r
                                if( _updated !== undefined && updated !== _updated){\r
@@ -436,14 +503,14 @@ pettanr.editor = ( function(){
        })();\r
 \r
 /* ----------------------------------------\r
- *     Text Editor (Overlay)\r
+ * Text Editor\r
+ *  - overlay\r
  */\r
-       \r
        var TEXT_EDITOR_CONTROL = ( function(){\r
                var jqWrap, jqTextarea, jqButton,\r
-                       textElement, onUpdateFunction;\r
-               \r
-               pettanr.key.addKeyDownEvent( this.ID, 69, false, false, clickOK);\r
+                       textElement, onUpdateFunction,\r
+                       ID = 'textEditor';\r
+               //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK);\r
                \r
                function close(){\r
                        jqWrap.hide();\r
@@ -501,12 +568,13 @@ pettanr.editor = ( function(){
                                textElement && this.show( textElement);\r
                        },\r
                        onClose: close,\r
-                       ID: 'textEditor'\r
+                       ID: ID\r
                }\r
        })();\r
 \r
 /* ----------------------------------------\r
- *     Image Group Exproler (Overlay)\r
+ * Image Group Exproler\r
+ *  - overlay\r
  */\r
        var IMAGE_GROUP_EXPROLER = ( function(){\r
                var ICON_ARRAY = [],\r
@@ -515,7 +583,8 @@ pettanr.editor = ( function(){
                        jqWrap, jqContainer, jqItemOrigin,\r
                        itemW, itemH,\r
                        jqName, jqButton, buttonW,\r
-                       onUpdateFunction,\r
+                       //onUpdateFunction,\r
+                       _g_onUpdateFunction,\r
                        winW,\r
                        onEnterInterval = null;\r
                \r
@@ -703,56 +772,61 @@ pettanr.editor = ( function(){
                                SRC = [ BASE_PATH, data.id, '.', data.ext].join( ''),\r
                                LOW_SRC = data.filesize && data.filesize > LIMIT_FILESIZE ? [ THUMB_PATH, data.id, '.', data.ext].join( '') : null,\r
                                reversibleImage = null,\r
-                               onEnterFlag = false;\r
+                               onEnterFlag = false,\r
+                               imgW, imgH;\r
                        JQ_ICON_WRAP.children( 'div').eq( 0).html( data.filesize + 'bytes');\r
                        jqContainer.append( JQ_ICON_WRAP.css( { left: INDEX * itemW}));\r
                        \r
+                       function onImageLoad( url, _imgW, _imgH){\r
+                               if( reversibleImage === null) {\r
+                                       alert( url);\r
+                                       return;\r
+                               }\r
+                               imgW = _imgW || data.width || 64;\r
+                               imgH = _imgH || data.height || 64;\r
+                               JQ_ICON_WRAP.children( 'div').eq( 1).html( imgW +'x' +imgH);\r
+                               var zoom = 128 /( imgW > imgH ? imgW : imgH),\r
+                                       h = Math.floor( imgH *zoom),\r
+                                       w = Math.floor( imgW *zoom);\r
+                               reversibleImage.elm.style.width = w +'px';\r
+                               reversibleImage.elm.style.height = h +'px';\r
+                               reversibleImage.elm.style.margin = Math.floor( itemH /2 -h /2)+'px 0 0';\r
+                               reversibleImage.resize( w, h);\r
+                               JQ_ICON_WRAP.click( onClick);\r
+                       }\r
+                       \r
+                       function onClick( e){\r
+                               pettanr.overlay.hide();\r
+                               if( _g_onUpdateFunction) {\r
+                                       if( LOW_SRC === null){\r
+                                               window[ _g_onUpdateFunction]( SRC, imgW, imgH);\r
+                                               window[ _g_onUpdateFunction] = null;\r
+                                       } else {\r
+                                               var _onLoad = pettanr.util.createGlobalFunc( [\r
+                                                               'function( url, w, h){',\r
+                                                                       'window["', _g_onUpdateFunction, '"]( url, w || ', data.width,',  h || ', data.height,');',\r
+                                                                       'window["', _g_onUpdateFunction, '"] = null;',\r
+                                                               '}'\r
+                                                       ].join( '')),\r
+                                                       _onError = pettanr.util.createGlobalFunc( [\r
+                                                               'function( url){',\r
+                                                                       'window["', _g_onUpdateFunction, '"]( url, ', data.width || 64 ,', ', data.height || 64,');',\r
+                                                                       'window["', _g_onUpdateFunction, '"] = null;',\r
+                                                               '}'\r
+                                                       ].join( ''));\r
+                                               pettanr.util.loadImage( SRC, window[ _onLoad], window[ _onError]);\r
+                                               window[ _onLoad] = window[ _onError] = undefined;\r
+                                       }\r
+                               }\r
+                               close();\r
+                       }\r
+                       \r
                        return {\r
                                onEnter: function(){\r
                                        if( onEnterFlag === true) return;\r
-                                       reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, function( url, imgW, imgH){\r
-                                               if( reversibleImage === null) {\r
-                                                       alert( url);\r
-                                                       return;\r
-                                               }\r
-                                               /*\r
-                                                * ieでサイズが取れない、、、\r
-                                                */\r
-                                               imgW = imgW || data.width || 64;\r
-                                               imgH = imgH || data.height || 64;\r
-                                               JQ_ICON_WRAP.children( 'div').eq( 1).html( imgW +'x' +imgH);\r
-                                               var zoom = 128 /( imgW > imgH ? imgW : imgH),\r
-                                                       h = Math.floor( imgH *zoom),\r
-                                                       w = Math.floor( imgW *zoom);\r
-                                               reversibleImage.elm.style.width = w +'px';\r
-                                               reversibleImage.elm.style.height = h +'px';\r
-                                               reversibleImage.elm.style.margin = Math.floor( itemH /2 -h /2)+'px 0 0';\r
-                                               reversibleImage.resize( w, h);\r
-                                               JQ_ICON_WRAP.click( function( e){\r
-                                                       pettanr.overlay.hide();\r
-                                                       if (onUpdateFunction) {\r
-                                                               if( LOW_SRC === null){\r
-                                                                       onUpdateFunction( SRC, imgW, imgH);\r
-                                                               } else {\r
-                                                                       ( function( onUpdate){\r
-                                                                               pettanr.util.loadImage( SRC,\r
-                                                                                       function( _abspath, imgW, imgH){\r
-                                                                                               onUpdate( SRC, imgW, imgH);\r
-                                                                                               onUpdate = null;\r
-                                                                                       },\r
-                                                                                       function( _abspath){\r
-                                                                                               onUpdate( SRC, data.width || 64, data.height || 64);\r
-                                                                                               onUpdate = null;\r
-                                                                                       }\r
-                                                                               );                                                                              \r
-                                                                       })( onUpdateFunction); // close()で値が消えるので、クロージャに保持\r
-                                                               }\r
-                                                       }\r
-                                                       close();\r
-                                               });\r
-                                       });\r
+                                       reversibleImage = pettanr.image.createReversibleImage( LOW_SRC || SRC, itemW, itemH, onImageLoad);\r
                                        JQ_ICON_WRAP.children( 'img').replaceWith( reversibleImage.elm);\r
-                                       onEnterFlag = true;                             \r
+                                       onEnterFlag = true;                                             \r
                                },\r
                                destroy: function(){\r
                                        reversibleImage && reversibleImage.destroy();\r
@@ -774,7 +848,7 @@ pettanr.editor = ( function(){
                                ICON_ARRAY.shift().destroy();\r
                        }\r
                        onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
-                       onUpdateFunction = onEnterInterval = null;\r
+                       onEnterInterval = _g_onUpdateFunction = null;\r
                }\r
                function onEnterShowImage(){\r
                        var l = ICON_ARRAY.length,\r
@@ -788,25 +862,24 @@ pettanr.editor = ( function(){
                }\r
                function clickOK(){\r
                        pettanr.overlay.hide();\r
-                       // onUpdateFunction && onUpdateFunction( textElement);\r
                        close();\r
                }\r
+               function onMouseWheel( e, delta){\r
+                       if( winW < containerW){\r
+                               wrapX += delta *WHEEL_DELTA;\r
+                               wrapX = wrapX > 0 ? 0 : wrapX < winW -containerW ? winW -containerW : wrapX;\r
+                               jqContainer.css( { left: wrapX});\r
+                               \r
+                               onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
+                               onEnterInterval = window.setTimeout( onEnterShowImage, 500);\r
+                       }\r
+                       //e.stopPropagation();\r
+                       return false;                   \r
+               }\r
                return {\r
                        init: function(){\r
                                this.jqWrap = jqWrap = $( '#image-gruop-wrapper').hide();\r
-                               jqContainer = $( '#image-icon-container').mousewheel(\r
-                                       function( e, delta){\r
-                                               if( winW < containerW){\r
-                                                       wrapX += delta *WHEEL_DELTA;\r
-                                                       wrapX = wrapX > 0 ? 0 : wrapX < winW -containerW ? winW -containerW : wrapX;\r
-                                                       jqContainer.css( { left: wrapX});\r
-                                                       \r
-                                                       onEnterInterval !== null && window.clearTimeout( onEnterInterval);\r
-                                                       onEnterInterval = window.setTimeout( onEnterShowImage, 500);\r
-                                               }\r
-                                               //e.stopPropagation();\r
-                                               return false;\r
-                                       });\r
+                               jqContainer = $( '#image-icon-container').mousewheel( onMouseWheel);\r
                                containerH = pettanr.util.getElementSize( jqContainer.get( 0)).height;\r
                                jqItemOrigin = $( $( '#imageGruopItemTemplete').remove().html());\r
                                var itemSize = pettanr.util.getElementSize( jqItemOrigin.get( 0));\r
@@ -820,7 +893,12 @@ pettanr.editor = ( function(){
                        },\r
                        jqWrap: null,\r
                        show: function( _onUpdateFunction){\r
-                               onUpdateFunction = _onUpdateFunction;\r
+                               //onUpdateFunction = _onUpdateFunction;\r
+                               if( _onUpdateFunction){\r
+                                       _g_onUpdateFunction = pettanr.util.createGlobalFunction( _onUpdateFunction);\r
+                               } else {\r
+                                       _g_onUpdateFunction = null;\r
+                               }\r
                                pettanr.overlay.show( this);\r
                                \r
                                var CURRENT_GROUP_ARRAY = IMAGE_DATA[ 'pen001'] || [],\r
@@ -889,6 +967,8 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * WINDOWS_CONTROL\r
+ *  - contloler\r
+ *  - mouseEventListener\r
  */    \r
        var WINDOWS_CONTROL = ( function(){\r
                /*\r
@@ -1017,9 +1097,9 @@ pettanr.editor = ( function(){
                                        } else {\r
                                                jqWrapper.find( '.window-footer').remove();\r
                                        }\r
-                                       update( x, y, w, h);\r
+                                       this.onFirstOpen && this.onFirstOpen( w, h -headerH -footerH);\r
                                        \r
-                                       this.onFirstOpen && this.onFirstOpen();\r
+                                       update( x, y, w, h);\r
                                        \r
                                        delete this.firstOpen;\r
                                },\r
@@ -1038,11 +1118,22 @@ pettanr.editor = ( function(){
                                                }\r
                                        }\r
                                },\r
+                               onFadeIn: function(){\r
+                                       instance.firstOpen && instance.firstOpen();\r
+                                       instance.onOpen && setTimeout( callOnOpen, 0);\r
+                                       function callOnOpen(){\r
+                                               instance.onOpen( w, bodyH);\r
+                                       }\r
+                               },\r
+                               onFadeOut: function(){\r
+                                       var elmWrapper = jqWrapper.get(0);\r
+                                       elmWrapper.parentNode.removeChild( elmWrapper);\r
+                                       instance.onClose && setTimeout( instance.onClose, 0);\r
+                               },\r
                                close: function(){\r
                                        if( visible === false) return;\r
                                        instance.visible = visible = false;\r
-                                       instance.onClose && setTimeout( instance.onClose, 0);\r
-                                       closeWindow( instance);\r
+                                       jqWrapper.fadeOut( instance.onFadeOut);\r
                                        MENUBAR_SELWCTION.title( 'show ' +title);\r
                                },\r
                                bodyBackOrForward: bodyBackOrForward,\r
@@ -1062,7 +1153,7 @@ pettanr.editor = ( function(){
                                        \r
                                        if( x > _mouseX || y > _mouseY || x +w < _mouseX || y +headerH < _mouseY ) return;\r
                                        if( CLOSE_BUTTON_ENABLED === true && x +w -closeButtonWidth < _mouseX){\r
-                                               this.close();\r
+                                               instance.close();\r
                                                return;\r
                                        }\r
                                        \r
@@ -1114,7 +1205,7 @@ pettanr.editor = ( function(){
                        }\r
                };\r
                \r
-               function getCurrentWindow( _mouseX, _mouseY){\r
+               function getCurrentIndex( _mouseX, _mouseY){\r
                        if( currentWindow && currentWindow.busy() === true) return currentWindowIndex;\r
                        var l = WINDOW_ARRAY.length,\r
                                _currentWindow = null,\r
@@ -1139,28 +1230,9 @@ pettanr.editor = ( function(){
                        if( _window.visible !== true) return;\r
                        var _jqWindow = _window.$;\r
                        jqContainer.append( _jqWindow);// appendした後に fadeIn() しないと ie で filterが適用されない.\r
-                       _jqWindow.fadeIn(\r
-                               function(){\r
-                                       _window.firstOpen && _window.firstOpen();\r
-                                       _window.onOpen && setTimeout( _window.onOpen, 0);\r
-                               }\r
-                       );\r
+                       _jqWindow.fadeIn( _window.onFadeIn);\r
                        return;\r
                }\r
-               function closeWindow( _window){\r
-                       if( _window.visible !== false) return;\r
-                       var l = WINDOW_ARRAY.length;\r
-                       for( var i=0; i<l; ++i){\r
-                               if( WINDOW_ARRAY[ i] === _window){\r
-                                       //WINDOW_ARRAY.splice( i, 1);\r
-                                       //WINDOW_ARRAY.push( _window);\r
-                                       _window.$.stop().fadeOut( function(){\r
-                                               this.parentNode.removeChild( this);\r
-                                       });\r
-                                       return;\r
-                               }\r
-                       }\r
-               }\r
                \r
                return {\r
                        init: function(){\r
@@ -1177,13 +1249,19 @@ pettanr.editor = ( function(){
                                \r
                                delete WINDOWS_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               WINDOWS_CONTROL.init && WINDOWS_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
                        onMouseMove: function( _mouseX, _mouseY){\r
-                               var _index = getCurrentWindow( _mouseX, _mouseY);\r
+                               var _index = getCurrentIndex( _mouseX, _mouseY);\r
                                if( _index === 0){\r
                                        currentWindow.onMouseMove( _mouseX, _mouseY);\r
                                        return true;\r
                                } else\r
-                               if( _index !== -1){ // 先頭のクリックでない場合\r
+                               if( _index > 0){ // 先頭のクリックでない場合\r
                                // Array を前に\r
                                        WINDOW_ARRAY.splice( currentWindowIndex, 1);\r
                                        WINDOW_ARRAY.unshift( currentWindow);\r
@@ -1195,14 +1273,14 @@ pettanr.editor = ( function(){
                                return false;\r
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
-                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                               if( getCurrentIndex( _mouseX, _mouseY) === 0){\r
                                        currentWindow.onMouseUp( _mouseX, _mouseY);\r
                                        return true;\r
                                }\r
                                return false;\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
-                               if( getCurrentWindow( _mouseX, _mouseY) === 0){\r
+                               if( getCurrentIndex( _mouseX, _mouseY) === 0){\r
                                        currentWindow.onMouseDown( _mouseX, _mouseY);\r
                                        return true;\r
                                }\r
@@ -1216,7 +1294,7 @@ pettanr.editor = ( function(){
                                 * 画面外に出るwindowの移動\r
                                 */\r
                        },\r
-                       createWindow: function( scope, EXTENDS, bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH){\r
+                       createWindow: function( EXTENDS, bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH){\r
                                opt_visible = opt_visible !== false;\r
                                opt_closeButtonEnabled = opt_closeButtonEnabled === true;\r
                                opt_resizeButtonEnabled = opt_resizeButtonEnabled === true;\r
@@ -1224,7 +1302,9 @@ pettanr.editor = ( function(){
                                opt_minWindowH = opt_minWindowH || ( h < DEFAULT_MIN_WINDOW_HEIGHT) ? h : DEFAULT_MIN_WINDOW_HEIGHT;\r
                                \r
                                var _window = pettanr.util.extend(\r
-                                       WindowClass.apply( scope, [ bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH]),\r
+                                       new WindowClass(\r
+                                               bodyTempleteID, title, x, y, w, h, opt_visible, opt_closeButtonEnabled, opt_resizeButtonEnabled, opt_minWindowW, opt_minWindowH\r
+                                       ),\r
                                        EXTENDS\r
                                );\r
                                WINDOW_ARRAY.unshift( _window);\r
@@ -1237,6 +1317,7 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * TOOL_BOX_WINDOW\r
+ * - window\r
  */\r
        var TOOL_BOX_WINDOW = ( function(){\r
                var addImageButton, addTextButton, editBgButton, switchGridButton, popupHelpButton, postButton,\r
@@ -1253,34 +1334,33 @@ pettanr.editor = ( function(){
 \r
                function addImage( e){\r
                        setTimeout( COMIC_ELEMENT_CONTROL.createImageElement, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function addText( e){\r
                        setTimeout( COMIC_ELEMENT_CONTROL.createTextElement, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function switchGrid( e){\r
                        setTimeout( GRID_CONTROL.update, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function popupHelp( e){\r
                        instance.bodyBackOrForward( true);\r
                        setTimeout( HELP_DOCUMENTS_WINDOW.open, 0);\r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                function editBG( e){\r
                        instance.bodyBackOrForward( true);\r
                        setTimeout( INFOMATION_WINDOW.open, 0); \r
-                       e && e.preventDefault();\r
+                       e && e.preventDefault && e.preventDefault();\r
                        return false;\r
                }\r
                \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
@@ -1305,26 +1385,26 @@ pettanr.editor = ( function(){
        \r
 /* ----------------------------------------\r
  * IMAGE_EXPROLER\r
+ *  - window\r
  */\r
        var IMAGE_EXPLORER_WINDOW = ( function(){\r
                var instance, finder;\r
                \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
                                        delete this.onInit;\r
                                },\r
-                               onFirstOpen: function(){\r
-                                       finder = pettanr.finder.createFinder( document.getElementById( 'image-exproler-container'), pettanr.file.TREE_TYPE_IS_IMAGE);\r
+                               onFirstOpen: function( _w, _h){\r
+                                       finder = pettanr.finder.createFinder( document.getElementById( 'image-exproler-container'), pettanr.driver.createPictureTree());\r
                                        delete this.onFirstOpen;\r
                                },\r
-                               onOpen: function(){\r
-                                       finder.onOpen();\r
+                               onOpen: function( _w, _h){\r
+                                       finder.onOpen( _w, _h);\r
                                },\r
                                onResize: function( _w, _h){\r
-                                       finder.onWindowResize( _w, _h);\r
+                                       finder.resize( _w, _h);\r
                                }\r
                        },\r
                        'image-exproler', 'Album', 0, 215, 400, 350, false, true, true, 300, 300\r
@@ -1334,59 +1414,75 @@ pettanr.editor = ( function(){
        \r
 /* ----------------------------------------\r
  * INFOMATION_WINDOW\r
+ *  - window\r
  */                    \r
        var INFOMATION_WINDOW = ( function(){\r
-               var FADE_EFFECT_ENABLED = pettanr.ua.isIE === false || pettanr.ua.ieVersion >= 8,\r
+               var FADE_EFFECT_ENABLED = true, //pettanr.ua.isIE === false || pettanr.ua.ieVersion >= 8,\r
                        FADE_IN_EFFECT = FADE_EFFECT_ENABLED === true ? 'fadeIn' : 'show',\r
                        FADE_OUT_EFFECT = FADE_EFFECT_ENABLED === true ? 'fadeOut' : 'hide',\r
                        backgroundInfomationElm,\r
                        jqComicElementInformation,\r
-                       elmValueX, elmValueY, elmValueZ, elmValueA, elmValueW, elmValueH, elmAspect,\r
-                       elmPercentW, elmPercentH,\r
+                       inputX, inputY, inputZ, inputA, inputW, inputH, inputAspectRatio,\r
+                       inputPercentW, inputPercentH,\r
                        currentComicElement = null,\r
-                       currentElementType = -1;\r
+                       currentElementType = -1,\r
+                       currentLock = false;\r
 \r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
-                               onFirstOpen: function(){\r
+                               onFirstOpen: function( _w, _h){\r
                                        backgroundInfomationElm = $( '#panel-background-information');\r
                                        \r
                                        jqComicElementInformation = $( '#comic-element-infomation').hide().css( {\r
-                                               height:         this.bodyHeight()\r
+                                               height:         _h\r
                                        });\r
                                        var TAB_GROUP_ID = 'comic-element-attribute';\r
-                                       var CREATER = pettanr.key.createEditableText;\r
-                                       elmValueX = CREATER( $( '#comic-element-x'), null, TAB_GROUP_ID);\r
-                                       elmValueY = CREATER( $( '#comic-element-y'), null, TAB_GROUP_ID);\r
-                                       elmValueZ = CREATER( $( '#comic-element-z'), null, TAB_GROUP_ID);\r
-                                       elmValueA = CREATER( $( '#comic-element-a'), null, TAB_GROUP_ID);\r
-                                       elmValueW = CREATER( $( '#comic-element-w'), null, TAB_GROUP_ID);\r
-                                       elmValueH = CREATER( $( '#comic-element-h'), null, TAB_GROUP_ID);\r
-                                       elmPercentW = CREATER( $( '#comic-element-w-percent'), null, TAB_GROUP_ID);\r
-                                       elmPercentH = CREATER( $( '#comic-element-h-percent'), null, TAB_GROUP_ID);\r
-                                       elmAspect = $( '#comic-element-keep-aspect');\r
+                                       var CREATER = pettanr.form.createInputText;//pettanr.key.createEditableText;\r
+                                       inputX = CREATER( document.getElementById( 'comic-element-x'), null, TAB_GROUP_ID);\r
+                                       inputY = CREATER( document.getElementById( 'comic-element-y'), null, TAB_GROUP_ID);\r
+                                       inputZ = CREATER( document.getElementById( 'comic-element-z'), null, TAB_GROUP_ID);\r
+                                       inputA = CREATER( document.getElementById( 'comic-element-a'), null, TAB_GROUP_ID);\r
+                                       inputW = CREATER( document.getElementById( 'comic-element-w'), null, TAB_GROUP_ID);\r
+                                       inputH = CREATER( document.getElementById( 'comic-element-h'), null, TAB_GROUP_ID);\r
+                                       inputPercentW = CREATER( document.getElementById( 'comic-element-w-percent'), null, TAB_GROUP_ID);\r
+                                       inputPercentH = CREATER( document.getElementById( 'comic-element-h-percent'), null, TAB_GROUP_ID);\r
+                                       inputAspectRatio = $( '#comic-element-keep-aspect');\r
                                        delete this.onFirstOpen;\r
                                },\r
-                               onResize: function( w, h){\r
-                                       jqComicElementInformation && jqComicElementInformation.css( {\r
-                                               height: h\r
+                               onResize: function(  _w, _h){\r
+                                       jqComicElementInformation.css( {\r
+                                               height: _h\r
                                        });\r
                                },\r
-                               update: function( _elementType, x, y, z, a, w, h, wPercent, hPercent, keepAspect){\r
-                                       if( !backgroundInfomationElm) return; // なぜか !backgroundInfomationElm が必要\r
+                               update: function( currentElement){\r
+                                       \r
+                                       if( currentLock === true && currentElement === null) return;\r
+                                       \r
+                                       var _elementType = currentElement === null ? -1 : currentElement.type,\r
+                                               x = currentElement !== null ? currentElement.x : 0,\r
+                                               y = currentElement !== null ? currentElement.y : 0,\r
+                                               z = currentElement !== null ? currentElement.z : 0,\r
+                                               a = _elementType === COMIC_ELEMENT_TYPE_TEXT ? Math.floor( currentElement.angle()) : 0,\r
+                                               w = currentElement !== null ? currentElement.w : 0,\r
+                                               h = currentElement !== null ? currentElement.h : 0,\r
+                                               actualW = _elementType === COMIC_ELEMENT_TYPE_IMAGE ? currentElement.actualW() : 1,\r
+                                               actualH = _elementType === COMIC_ELEMENT_TYPE_IMAGE ? currentElement.actualH() : 1,\r
+                                               wPercent = _elementType === COMIC_ELEMENT_TYPE_IMAGE ? Math.floor( w / actualW *100) : 0,\r
+                                               hPercent = _elementType === COMIC_ELEMENT_TYPE_IMAGE ? Math.floor( h / actualH *100) : 0,\r
+                                               keepAspect = currentElement !== null && currentElement.keepAspect === true;\r
+                                       \r
                                        if( currentElementType !== _elementType){\r
                                                if( _elementType !== -1){\r
                                                        if( _elementType === 1){\r
-                                                               elmValueA.show();\r
-                                                               elmPercentW.hide();\r
-                                                               elmPercentH.hide();\r
-                                                               elmAspect.hide();\r
+                                                               inputA.visible( true);\r
+                                                               inputPercentW.visible( false);\r
+                                                               inputPercentH.visible( false);\r
+                                                               inputAspectRatio.hide();\r
                                                        } else {\r
-                                                               elmValueA.hide();\r
-                                                               elmPercentW.show();\r
-                                                               elmPercentH.show();\r
-                                                               elmAspect.show();\r
+                                                               inputA.visible( false);\r
+                                                               inputPercentW.visible( true);\r
+                                                               inputPercentH.visible( true);\r
+                                                               inputAspectRatio.show();\r
                                                        }\r
                                                        currentElementType === -1 && jqComicElementInformation.stop().css( {\r
                                                                filter:         '',\r
@@ -1401,17 +1497,21 @@ pettanr.editor = ( function(){
                                                currentElementType = _elementType;\r
                                        }\r
                                        if( currentElementType !== -1){\r
-                                               elmValueX.update( x);\r
-                                               elmValueY.update( y);\r
-                                               elmValueZ.update( z);\r
-                                               _elementType === 1 && elmValueA.update( a);\r
-                                               elmValueW.update( w);\r
-                                               elmValueH.update( h);\r
-                                               _elementType === 0 && elmPercentW.update( wPercent);\r
-                                               _elementType === 0 && elmPercentH.update( hPercent);                                    \r
+                                               inputX.value( x);\r
+                                               inputY.value( y);\r
+                                               inputZ.value( z);\r
+                                               _elementType === 1 && inputA.value( a);\r
+                                               inputW.value( w);\r
+                                               inputH.value( h);\r
+                                               _elementType === 0 && inputPercentW.value( wPercent);\r
+                                               _elementType === 0 && inputPercentH.value( hPercent);                                   \r
                                        } else {\r
                                                \r
                                        }\r
+                               },\r
+                               lock: function( _currentLock){\r
+                                       currentLock = !!_currentLock;\r
+                                       this.bodyBackOrForward( !currentLock);\r
                                }\r
                        },\r
                        'infomation-window', 'Infomation', 0, 30, 200, 180, true\r
@@ -1420,144 +1520,124 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * HELP_WINDOW\r
+ *  - window\r
  */\r
        var HELP_DOCUMENTS_WINDOW = ( function(){\r
                var visible = true,\r
-                       hasAjaxContents = false,\r
                        jqAjaxContents,\r
                        jqNaviItems,\r
                        jqPages,\r
+                       currentPageIndex = 0,\r
+                       numPage = 0,\r
                        HELP = MENU_BAR_CONTROL.HELP,\r
-                       onLoadFunction = HELP.createAjaxSelection( onFirstOpen),\r
+                       onLoadFunction = HELP.createAjaxSelection( onAjaxStart),\r
                        instance;\r
-               function jumpPage( _index){\r
-                       \r
-               }\r
-               function onFirstOpen( _pageIndex){\r
-                       _pageIndex = _pageIndex || 0;\r
-                       if( hasAjaxContents === false){\r
+\r
+               function onAjaxStart( _pageIndex){\r
+                       currentPageIndex = _pageIndex || currentPageIndex;\r
+                       if( onHelpLoad !== null){\r
                                $.ajax({\r
                                        url:            'help/jp.xml',\r
                                        dataType:       'xml',\r
-                                       success:        function( _xml){\r
-                                               var jqXML = $( _xml),\r
-                                                       helpTitle = jqXML.find( 'pages').eq( 0).attr( 'title'),\r
-                                                       elmNavi = document.createElement( 'div'),\r
-                                                       elmItemOrigin = document.createElement( 'a'),\r
-                                                       elmPages = document.createElement( 'div'),\r
-                                                       elmPageOrigin = document.createElement( 'div'),\r
-                                                       elmTitleOrigin = document.createElement( 'h2'),\r
-                                                       elmPage,\r
-                                                       numPage = 0;\r
-                                               elmNavi.className = 'sidenavi';\r
-                                               elmItemOrigin.className = 'sidenavi-item';\r
-                                               elmItemOrigin.href = '#';\r
-                                               elmPages.className = 'page-contents';\r
-                                               elmPageOrigin.className = 'page-content';\r
-                                               elmPageOrigin.appendChild( elmTitleOrigin);\r
-                                               \r
-                                               // helpTitle && instance.title( helpTitle);\r
-                                               \r
-                                               jqXML.find( 'page').each( function(){\r
-                                                       var xmlPage = $( this),\r
-                                                               title = xmlPage.attr( 'title'),\r
-                                                               content = xmlPage.text();\r
-                                                       \r
-                                                       elmItemOrigin.innerHTML = title;\r
-                                                       elmNavi.appendChild( elmItemOrigin.cloneNode( true));\r
-                                                       \r
-                                                       elmTitleOrigin.innerHTML = title;\r
-                                                       elmPage = elmPageOrigin.cloneNode( true);\r
-                                                       elmPage.innerHTML = content;\r
-                                                       \r
-                                                       pettanr.util.cleanElement( elmPage);\r
-                                                       \r
-                                                       if( elmPage.childNodes.length > 0){\r
-                                                               elmPage.insertBefore( elmTitleOrigin.cloneNode( true), elmPage.childNodes[0]);\r
-                                                       } else {\r
-                                                               elmPage.appendChild( elmTitleOrigin.cloneNode( true));\r
-                                                       }\r
-                                                       elmPages.appendChild( elmPage);\r
-                                                       \r
-                                                       HELP.createSelection( title, null, ( function( _pageIndex){\r
-                                                               return function(){\r
-                                                                       HELP_DOCUMENTS_WINDOW.open();\r
-                                                                       onOpen( _pageIndex);                                                                    \r
-                                                               }\r
-                                                       })( numPage), true);\r
-                                                       ++numPage;\r
-                                               });\r
-                                               onLoadFunction();\r
-                                               onLoadFunction = null;\r
-                                               \r
-                                               jqAjaxContents.removeClass( 'loading').append( elmNavi, elmPages);\r
-                                               \r
-                                               jqNaviItems = jqAjaxContents.find( 'a.' +elmItemOrigin.className)\r
-                                                       .click( function( e){\r
-                                                               var that = this,\r
-                                                                       parent = this.parentNode,\r
-                                                                       i = ( function(){\r
-                                                                               var children = parent.getElementsByTagName( 'a'),\r
-                                                                                       l = children.length;\r
-                                                                               for( var i=0; i<l; ++i){\r
-                                                                                       if( children[ i] === that) return i;\r
-                                                                               }\r
-                                                                               return -1;\r
-                                                                       })();\r
-                                                               e.stopPropagation();\r
-                                                               if( i === -1) return false;\r
-                                                               jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
-                                                               jqPages.hide().eq( i).show();\r
-                                                               \r
-                                                               return false;\r
-                                                       });\r
-                                               jqAjaxContents.find( '.' +elmPageOrigin.className).find( 'a')\r
-                                                       .click( function( e){\r
-                                                               var that = this,\r
-                                                                       i = ( function(){\r
-                                                                               var href = that.href,\r
-                                                                                       i = href.split( '#jump'),\r
-                                                                                       n = i[1]\r
-                                                                               if( n && '' +parseFloat( n) === n){\r
-                                                                                       return parseFloat( n)\r
-                                                                               }\r
-                                                                               return -1;\r
-                                                                       })();\r
-                                                               e.stopPropagation();\r
-                                                               if( i === -1) return false;\r
-                                                               jqNaviItems.removeClass( 'current').eq( i).addClass( 'current');\r
-                                                               jqPages.hide().eq( i).show();\r
-                                                               \r
-                                                               return false;\r
-                                                       });\r
-                                               jqNaviItems.eq( _pageIndex).addClass( 'current');\r
-                                               jqPages = jqAjaxContents.find( '.page-content');\r
-                                               jqPages.eq( _pageIndex).show();\r
-                                       }\r
+                                       success:        onHelpLoad\r
                                });\r
-                               hasAjaxContents = true;\r
+                               onHelpLoad = null;\r
                        }\r
-                       function onOpen( _pageIndex){\r
-                               _pageIndex = _pageIndex || 0;\r
-                               jqNaviItems.removeClass( 'current').eq( _pageIndex).addClass( 'current');\r
-                               jqPages.hide().eq( _pageIndex).show();\r
+                       onAjaxStart = new Function;\r
+               }\r
+               var onHelpLoad = function( _xml){\r
+                       var jqXML = $( _xml),\r
+                               helpTitle = jqXML.find( 'pages').eq( 0).attr( 'title'),\r
+                               elmNavi = document.createElement( 'div'),\r
+                               elmItemOrigin = document.createElement( 'a'),\r
+                               elmPages = document.createElement( 'div'),\r
+                               elmPageOrigin = document.createElement( 'div'),\r
+                               elmTitleOrigin = document.createElement( 'h2'),\r
+                               elmPage;\r
+                       elmNavi.className = 'sidenavi';\r
+                       elmItemOrigin.className = 'sidenavi-item';\r
+                       elmItemOrigin.href = '#';\r
+                       elmPages.className = 'page-contents';\r
+                       elmPageOrigin.className = 'page-content main';\r
+                       elmPageOrigin.appendChild( elmTitleOrigin);\r
+                       \r
+                       //helpTitle && instance.title( helpTitle);\r
+                       \r
+                       jqXML.find( 'page').each( function(){\r
+                               var xmlPage = $( this),\r
+                                       title = xmlPage.attr( 'title'),\r
+                                       content = xmlPage.text();\r
+                               \r
+                               elmItemOrigin.innerHTML = title;\r
+                               elmNavi.appendChild( elmItemOrigin.cloneNode( true));\r
+                               \r
+                               elmTitleOrigin.innerHTML = title;\r
+                               \r
+                               elmPage = elmPageOrigin.cloneNode( true);\r
+                               elmPage.innerHTML = content;\r
+                               \r
+                               pettanr.util.cleanElement( elmPage);\r
+                               \r
+                               if( elmPage.childNodes.length > 0){\r
+                                       elmPage.insertBefore( elmTitleOrigin.cloneNode( true), elmPage.childNodes[0]);\r
+                               } else {\r
+                                       elmPage.appendChild( elmTitleOrigin.cloneNode( true));\r
+                               }\r
+                               elmPages.appendChild( elmPage);\r
+                               \r
+                               HELP.createSelection( title, null, onSelectionClick, true);\r
+                               ++numPage;\r
+                       });\r
+                       onLoadFunction();\r
+                       onLoadFunction = null;\r
+                       \r
+                       jqAjaxContents.removeClass( 'loading').append( elmNavi, elmPages);\r
+                       \r
+                       jqNaviItems = jqAjaxContents.find( 'a.' +elmItemOrigin.className).click( onNaviClick);\r
+                       jqPages = jqAjaxContents.find( '.page-content');\r
+                       jqPages.find( 'a').click( onInnerLinkClick);\r
+                       \r
+                       setTimeout( jumpPage, 0);\r
+               }\r
+               function onSelectionClick( _pageIndex){\r
+                       HELP_DOCUMENTS_WINDOW.open();\r
+                       jumpPage( _pageIndex);\r
+               }\r
+               function jumpPage( _index){\r
+                       if( typeof _index === 'number' && 0 <= _index && _index < numPage && currentPageIndex !== _index){\r
+                               currentPageIndex = _index;\r
                        }\r
+                       jqNaviItems.removeClass( 'current').eq( currentPageIndex).addClass( 'current');\r
+                       jqPages.hide().eq( currentPageIndex).show();\r
+               }\r
+               function onNaviClick( e){\r
+                       // this は <a>\r
+                       jumpPage( pettanr.util.getChildIndex( this.parentNode, this));\r
+                       e.stopPropagation();\r
+                       return false;\r
+               }\r
+               function onInnerLinkClick( e){\r
+                       var jump = ( this.href || '').split( '#jump'),\r
+                               n = jump[1];\r
+                       if( !n) return;\r
+                       jumpPage( '' + parseFloat( n) === n ? parseFloat( n) : -1);\r
+                       e.stopPropagation();\r
+                       return false;                           \r
                }\r
                return WINDOWS_CONTROL.createWindow(\r
-                       this,\r
                        {\r
                                onInit: function(){\r
                                        instance = this;\r
-                                       jqAjaxContents = this.$.find( '.window-body').addClass( 'loading').css( { height: this.bodyHeight()});\r
+                                       jqAjaxContents = this.$.find( '.window-body').addClass( 'loading');\r
                                        delete this.onInit;\r
                                },\r
-                               onFirstOpen: onFirstOpen,\r
-                               onResize: function( w, h){\r
-                                       jqAjaxContents && jqAjaxContents.css( { height: h});\r
+                               onFirstOpen: function( _w, _h){\r
+                                       jqAjaxContents.css( { height: _h});\r
+                                       onAjaxStart();\r
+                                       delete this.onFirstOpen;\r
                                },\r
-                               setAjaxContent: function( html){\r
-                                       \r
-                                       delete this.onLoadAjaxContent;\r
+                               onResize: function( _w, _h){\r
+                                       jqAjaxContents && jqAjaxContents.css( { height: _h});\r
                                }\r
                        },\r
                        null, 'Help', 0, 215, 400, 350, false, true, true, 300, 300\r
@@ -1566,9 +1646,12 @@ pettanr.editor = ( function(){
 \r
 /* ----------------------------------------\r
  * GRID_CONTROL\r
+ *  - control\r
+ *  - panelResizeListener\r
  */\r
        var GRID_CONTROL = ( function(){\r
                var ELM_GRID = document.getElementById( 'grid'),\r
+                       BG_URL = "url('images/grid.gif')",\r
                        jqGrid,\r
                        visible = false;\r
 \r
@@ -1577,6 +1660,12 @@ pettanr.editor = ( function(){
                                jqGrid = $( ELM_GRID);\r
                                delete GRID_CONTROL.init;\r
                        },\r
+                       open: function(){\r
+                               GRID_CONTROL.init && GRID_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
                        onPanelResize: function( _panelX, _panelY){\r
                                ELM_GRID.style.backgroundPosition = [ _panelX % 10, 'px ', _panelY % 10, 'px'].join( '');\r
                                ELM_GRID.style.height = windowH +'px';\r
@@ -1592,17 +1681,19 @@ pettanr.editor = ( function(){
                                \r
                                visible = !visible;\r
                                \r
-                               if( visible === true && !ELM_GRID.style.backgroundImage){\r
-                                       ELM_GRID.style.backgroundImage = "url('images/grid.gif')";\r
+                               if( visible === true && BG_URL !== null){\r
+                                       ELM_GRID.style.backgroundImage = BG_URL;\r
+                                       BG_URL = null;\r
                                }\r
                                return visible;                         \r
                        }\r
                }\r
        })();\r
                \r
-       /*\r
-        *      WHITE_GLASS_CONTROL\r
-        */     \r
+/* ----------------------------------------\r
+ * WHITE_GLASS_CONTROL\r
+ *  - panelResizeListener\r
+ */\r
        var WHITE_GLASS_CONTROL = ( function(){\r
                var styleTop = document.getElementById( 'whiteGlass-top').style,\r
                        styleLeft = document.getElementById( 'whiteGlass-left').style,\r
@@ -1638,8 +1729,11 @@ pettanr.editor = ( function(){
        })();\r
 \r
 \r
-/*\r
+/* ----------------------------------------\r
  * PANEL_CONTROL\r
+ *  - controler\r
+ *  - mouseEventListener\r
+ * \r
  * panel-border の表示と onPanelResize の通知.\r
  * panel drag.\r
  * \r
@@ -1655,6 +1749,8 @@ pettanr.editor = ( function(){
                        isDragging = false,\r
                        isDraggable = false;\r
                \r
+               pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
+               \r
                function onSpaceUpdate(e){\r
                        if( e.type === 'keyup'){\r
                                currentListener === null && updateMouseCursor( '');\r
@@ -1666,18 +1762,17 @@ pettanr.editor = ( function(){
                }\r
                \r
                return {\r
-                       init: function( _panelW, _panelH, _borderSize){\r
+                       open: function( _panelW, _panelH, _borderSize){\r
                                panelW = _panelW || DEFAULT_PANEL_WIDTH;\r
                                panelH = _panelH || DEFAULT_PANEL_HEIGHT;\r
-                               panelX = Math.floor( ( windowW -panelW) /2);\r
-                               panelY = Math.floor( ( windowH -panelH) /2);\r
+                               //panelX = Math.floor( ( windowW -panelW) /2);\r
+                               //panelY = Math.floor( ( windowH -panelH) /2);\r
                                borderSize = _borderSize !== undefined ? _borderSize : borderSize;\r
                                \r
-                               pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
-                               \r
-                               setTimeout( PANEL_CONTROL.resize, 0);\r
+                               //setTimeout( PANEL_CONTROL.resize, 0);\r
+                       },\r
+                       close: function(){\r
                                \r
-                               delete PANEL_CONTROL.init;\r
                        },\r
                        x: function(){\r
                                return panelX;\r
@@ -1735,9 +1830,9 @@ pettanr.editor = ( function(){
                }\r
        })();\r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
- * panel resizer\r
+/* --------------------------------------------------------------------------------------------\r
+ * PanelResizerClass\r
+ *  - mouseEventListener\r
  */\r
        var PanelResizerClass = function( ID, isTop){\r
                var ELM = document.getElementById( ID),\r
@@ -1759,9 +1854,6 @@ pettanr.editor = ( function(){
                }\r
                        \r
                return {\r
-                       busy: function(){\r
-                               return isDragging;\r
-                       },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
                                var _x = _mouseX -panelX,\r
                                        _y = _mouseY -panelY;\r
@@ -1799,7 +1891,7 @@ pettanr.editor = ( function(){
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
                                if( isDragging !== true) return;\r
-                               ( startY !== panelY || startH !== panelH) && HISTORY.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, panelY, NaN, panelH]);\r
+                               ( startY !== panelY || startH !== panelH) && HISTORY_CONTROL.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, panelY, NaN, panelH]);\r
                                isDragging = false;\r
                                MOUSE_CURSOR( '');\r
                        },\r
@@ -1824,14 +1916,16 @@ pettanr.editor = ( function(){
                \r
        PanelResizerClass = undefined;\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * CONSOLE_CONTROLER\r
+ */\r
        var CONSOLE_CONTROLER = ( function(){\r
                var LAYER_BACK_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer back', 'ctrl + B', layerBack, false, true, false),\r
                        LAYER_FORWARD_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'layer forward', 'ctrl + F', layerForward, false, false, false),\r
                        DELETE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'delete', 'ctrl + D', del, false, true, true),\r
                        EDIT_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'Edit Text', 'ctrl + E', edit, false, true, false),\r
                        CHANGE_BUTTON = MENU_BAR_CONTROL.EDIT.createSelection( 'change', 'ctrl + U', change, false, false, true),\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        jqStage,\r
                        jqConsoleParent,\r
                        jqConsoleWrapper,\r
@@ -1866,18 +1960,18 @@ pettanr.editor = ( function(){
                }\r
                function layerBack(){\r
                        if( currentElement === null) return;\r
-                       COMIC_ELEMENT_CONTROL.replaceComicElement( currentElement, false);\r
-                       updateInfomation();\r
-                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplaceObject, [ currentElement, true], [ currentElement, false]);\r
+                       if( COMIC_ELEMENT_CONTROL.replace( currentElement, false) === false) return;\r
+                       INFOMATION_WINDOW.update( currentElement);\r
+                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplace, [ currentElement, true], [ currentElement, false]);\r
                        var _z = currentElement.z;\r
                        LAYER_BACK_BUTTON.visible( _z > 0);\r
                        LAYER_FORWARD_BUTTON.visible( _z < COMIC_ELEMENT_ARRAY.length -1);\r
                }\r
                function layerForward(){\r
                        if( currentElement === null) return;\r
-                       COMIC_ELEMENT_CONTROL.replaceComicElement( currentElement, true);\r
-                       updateInfomation();\r
-                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplaceObject, [ currentElement, false], [ currentElement, true]);\r
+                       if( COMIC_ELEMENT_CONTROL.replace( currentElement, true) === false) return;\r
+                       INFOMATION_WINDOW.update( currentElement);\r
+                       SAVE( COMIC_ELEMENT_CONTROL.restoreReplace, [ currentElement, false], [ currentElement, true]);\r
                        var _z = currentElement.z;\r
                        LAYER_BACK_BUTTON.visible( _z > 0);\r
                        LAYER_FORWARD_BUTTON.visible( _z < COMIC_ELEMENT_ARRAY.length -1);\r
@@ -1885,8 +1979,8 @@ pettanr.editor = ( function(){
                function del(){\r
                        if( currentElement === null) return;\r
                        buttonBackOrForward( true);\r
-                       COMIC_ELEMENT_CONTROL.removeComicElement( currentElement);\r
-                       SAVE( COMIC_ELEMENT_CONTROL.restoreComicElement, [ true, currentElement], [ false, currentElement], true);\r
+                       COMIC_ELEMENT_CONTROL.remove( currentElement);\r
+                       SAVE( COMIC_ELEMENT_CONTROL.restore, [ true, currentElement], [ false, currentElement], true);\r
                        COMIC_ELEMENT_OPERATION_MANAGER.hide();\r
                }\r
                function edit(){\r
@@ -1987,7 +2081,10 @@ pettanr.editor = ( function(){
                }\r
        })();\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * TAIL_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
        var TAIL_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        ELM_MOVER = document.getElementById( 'balloon-tail-mover'),\r
@@ -2059,7 +2156,7 @@ pettanr.editor = ( function(){
                                                _mouseY > 0 ? 90 : -90\r
                                );\r
                                currentText && currentText.angle( balloonA);\r
-                               COMIC_ELEMENT_OPERATION_MANAGER.updateInfomation( undefined, undefined, undefined, balloonA);\r
+                               INFOMATION_WINDOW.update( currentText);\r
                        },\r
                        onFinish: function(){\r
                                startA !== currentText.angle() && COMIC_ELEMENT_OPERATION_MANAGER.saveStatus( x, y, w, h, startA);\r
@@ -2072,8 +2169,13 @@ pettanr.editor = ( function(){
                                currentText = null;\r
                        }\r
                }\r
-       })(),\r
-       RESIZE_OPERATOR = ( function(){\r
+       })();\r
+\r
+/* --------------------------------------------------------------------------------------------\r
+ * RESIZE_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
+       var RESIZE_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        GRID_ENABLED = GRID_CONTROL.enabled;\r
                \r
@@ -2125,14 +2227,20 @@ pettanr.editor = ( function(){
                        y = _y !== undefined ? _y : y;\r
                        w = _w !== undefined ? _w : w;\r
                        h = _h !== undefined ? _h : h;\r
-                       elmResizerContainerStyle.left = x +'px';\r
-                       elmResizerContainerStyle.top = y +'px';\r
-                       elmResizerContainerStyle.width = w +'px';\r
-                       elmResizerContainerStyle.height = h +'px';\r
-                       elmResizerTopStyle.left = FLOOR( w /2 -10 /2) +'px';\r
-                       elmResizerLeftStyle.top = FLOOR( h /2 -10 /2) +'px';\r
-                       elmResizerRightStyle.top = FLOOR( h /2 -10 /2) +'px';\r
-                       elmResizerBottomStyle.left = FLOOR( w /2 -10 /2) +'px';\r
+                       try {\r
+                               elmResizerContainerStyle.left = x +'px';\r
+                               elmResizerContainerStyle.top = y +'px';\r
+                               elmResizerContainerStyle.width = w +'px';\r
+                               elmResizerContainerStyle.height = h +'px';\r
+                               elmResizerTopStyle.left = FLOOR( w /2 -10 /2) +'px';\r
+                               elmResizerLeftStyle.top = FLOOR( h /2 -10 /2) +'px';\r
+                               elmResizerRightStyle.top = FLOOR( h /2 -10 /2) +'px';\r
+                               elmResizerBottomStyle.left = FLOOR( w /2 -10 /2) +'px';                         \r
+                       } catch(e){\r
+                               alert( [x, y, w, h].join( ','));\r
+                               return;\r
+                       }\r
+\r
                        \r
                        POSITION_ARRAY.splice( 0, POSITION_ARRAY.length);\r
                        POSITION_ARRAY.push(\r
@@ -2168,17 +2276,17 @@ pettanr.editor = ( function(){
                        currentElement.resize( x, y, w, h);\r
                        currentIsTextElement === true && TAIL_OPERATOR.update( w, h);\r
                        CONSOLE_CONTROLER.show( currentElement, w, h);\r
-                       COMIC_ELEMENT_OPERATION_MANAGER.updateInfomation( x, y, undefined, undefined, w, h);\r
+                       INFOMATION_WINDOW.update( currentElement);\r
                }\r
                \r
-               function flip( _flipV, _flipH){\r
+               function flip( _flipH, _flipV){\r
                        var p = CURSOR_AND_FLIP[ currentIndex];\r
                        currentIndex = _flipH === true || _flipV === true ? p[\r
                                        _flipH === true && _flipV === true ? 'vh' : ( _flipH === true ? 'h' : 'v')\r
                                ] : currentIndex;\r
                        MOUSE_CURSOR( CURSOR_AND_FLIP[ currentIndex].cursor);\r
                        elmResizerContainer.className = 'current-resizer-is-' +currentIndex;\r
-                       currentElement.flip( _flipV, _flipH);\r
+                       currentElement.flip( _flipH, _flipV);\r
                }\r
                return {\r
                        update: draw,\r
@@ -2262,45 +2370,45 @@ pettanr.editor = ( function(){
                                        }\r
                                }\r
                                \r
-                               if( _w >= MIN_OBJECT_SIZE && _h >= MIN_OBJECT_SIZE){\r
+                               if( _w >= MIN_ELEMENT_SIZE && _h >= MIN_ELEMENT_SIZE){\r
                                        \r
                                } else \r
-                               if( _w >= -MIN_OBJECT_SIZE && _h >= -MIN_OBJECT_SIZE){\r
+                               if( _w >= -MIN_ELEMENT_SIZE && _h >= -MIN_ELEMENT_SIZE){\r
                                        //return;\r
-                                       if( _w < MIN_OBJECT_SIZE){\r
-                                               //_x += Math.abs( MIN_OBJECT_SIZE -_w);\r
+                                       if( _w < MIN_ELEMENT_SIZE){\r
+                                               //_x += Math.abs( MIN_ELEMENT_SIZE -_w);\r
                                                _x = currentX;\r
-                                               _w = MIN_OBJECT_SIZE;\r
+                                               _w = MIN_ELEMENT_SIZE;\r
                                        }\r
-                                       if( _h < MIN_OBJECT_SIZE){\r
-                                               //_y += Math.abs( MIN_OBJECT_SIZE -_h);\r
+                                       if( _h < MIN_ELEMENT_SIZE){\r
+                                               //_y += Math.abs( MIN_ELEMENT_SIZE -_h);\r
                                                _y = currentY;\r
-                                               _h = MIN_OBJECT_SIZE;\r
+                                               _h = MIN_ELEMENT_SIZE;\r
                                        }\r
                                } else \r
                                if( currentElement.type === COMIC_ELEMENT_TYPE_TEXT){\r
                                        return;\r
                                } else \r
-                               if( _w < -MIN_OBJECT_SIZE || _h < -MIN_OBJECT_SIZE){\r
+                               if( _w < -MIN_ELEMENT_SIZE || _h < -MIN_ELEMENT_SIZE){\r
 \r
-                                       if( _w < -MIN_OBJECT_SIZE && _h > MIN_OBJECT_SIZE){\r
+                                       if( _w < -MIN_ELEMENT_SIZE && _h > MIN_ELEMENT_SIZE){\r
                                        // flipH\r
                                                _memoryX = _x;\r
                                                baseX = _x = _x +_w;\r
                                                baseY = _y;\r
                                                baseW = _w = _memoryX -_x;\r
                                                baseH = _h;\r
-                                               flip( false, true);\r
+                                               flip( true, false);\r
                                                flipV = currentElement.flipV();\r
                                        } else \r
-                                       if( _w > MIN_OBJECT_SIZE && _h < -MIN_OBJECT_SIZE){\r
+                                       if( _w > MIN_ELEMENT_SIZE && _h < -MIN_ELEMENT_SIZE){\r
                                        // flipV\r
                                                _memoryY = _y;\r
                                                baseX = _x;\r
                                                baseY = _y = _y +_h;\r
                                                baseW = _w;\r
                                                baseH = _h = _memoryY -_y;\r
-                                               flip( true, false);\r
+                                               flip( false, true);\r
                                                flipH = currentElement.flipH();\r
                                        } else {\r
                                        // flipVH\r
@@ -2360,8 +2468,13 @@ pettanr.editor = ( function(){
                        onShiftUpdate: update,\r
                        onCtrlUpdate: update\r
                }\r
-       })(),\r
-       POSITION_OPERATOR = ( function(){\r
+       })();\r
+\r
+/* --------------------------------------------------------------------------------------------\r
+ * POSITION_OPERATOR\r
+ *  - comicElementOperator\r
+ */\r
+       var POSITION_OPERATOR = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
                        GRID_ENABLED = GRID_CONTROL.enabled;\r
                \r
@@ -2376,7 +2489,7 @@ pettanr.editor = ( function(){
                        y = _y !== undefined ? _y : y;\r
                        RESIZE_OPERATOR.update( x, y);\r
                        currentElement.resize( x, y);\r
-                       COMIC_ELEMENT_OPERATION_MANAGER.updateInfomation( x, y);\r
+                       INFOMATION_WINDOW.update( currentElement);\r
                }\r
                \r
                return {\r
@@ -2417,13 +2530,12 @@ pettanr.editor = ( function(){
        })();\r
 \r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+/* --------------------------------------------------------------------------------------------\r
  * COMIC_ELEMENT_OPERATION_MANAGER\r
  */\r
        var COMIC_ELEMENT_OPERATION_MANAGER = ( function(){\r
                var     MOUSE_CURSOR = updateMouseCursor,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        GRID_ENABLED = GRID_CONTROL.enabled,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        currentIsTextElement = false,\r
@@ -2441,23 +2553,7 @@ pettanr.editor = ( function(){
                                RESIZE_OPERATOR.update( currentx, currenty, currentw, currenth);\r
                                currentIsTextElement === true && TAIL_OPERATOR.update( currentw, currenth, angle);\r
                                CONSOLE_CONTROLER.show( currentElement, currentw, currenth);\r
-                               updateInfomation( currentx, currenty, currentElement.z, angle, currentw, currenth);\r
-                       }\r
-                       function updateInfomation( _x, _y, _z, _a, _w, _h, keepAspect){\r
-                               _w = _w !== undefined ? _w : currentw;\r
-                               _h = _h !== undefined ? _h : currenth;\r
-                               INFOMATION_WINDOW.update(\r
-                                       currentElement === null ? -1 : currentElement.type,\r
-                                       _x !== undefined ? _x : currentx,\r
-                                       _y !== undefined ? _y : currenty,\r
-                                       _z !== undefined ? _z : ( currentElement === null ? '*' : currentElement.z),\r
-                                       _a !== undefined ? Math.floor( _a) : ( currentIsTextElement === true ? Math.floor( angle) : '-'),\r
-                                       _w,\r
-                                       _h,\r
-                                       currentElement === null || currentIsTextElement === true ? '-' : ( currentElement.actualW() === 0 ? '?' : Math.floor( _w / currentElement.actualW() *100)),\r
-                                       currentElement === null || currentIsTextElement === true ? '-' : ( currentElement.actualH() === 0 ? '?' : Math.floor( _h / currentElement.actualH() *100)),\r
-                                       currentElement === null || currentIsTextElement === true ? '-' : currentElement.keepAspect\r
-                               );\r
+                               INFOMATION_WINDOW.update( currentElement);\r
                        }\r
                        function show( _currentElement){\r
                                currentElement === null && RESIZE_OPERATOR.show( _currentElement);\r
@@ -2476,15 +2572,34 @@ pettanr.editor = ( function(){
                                        );\r
                                }\r
                        }\r
-                       function hide(){\r
+\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
+                               currentOperator !== null && currentOperator.onShiftUpdate && currentOperator.onShiftUpdate();\r
+                       });\r
+                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function( e){\r
+                               currentOperator !== null && currentOperator.onCtrlUpdate && currentOperator.onCtrlUpdate();\r
+                       });\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function( e){\r
+                               currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
+                               currentOperator = null;\r
+                       });\r
+               return {\r
+                       open: function(){\r
+                               this.hide();\r
+                       },\r
+                       close: function(){\r
+                               \r
+                       },\r
+                       hide: function(){\r
                                currentElement !== null && RESIZE_OPERATOR.hide();\r
                                currentElement = null;\r
                                MOUSE_CURSOR( '');\r
                                TAIL_OPERATOR.hide();\r
                                CONSOLE_CONTROLER.hide();\r
-                               updateInfomation();\r
-                       }\r
-                       function restoreState( arg){\r
+                               INFOMATION_WINDOW.update( null);\r
+                       },\r
+                       resize: resize,\r
+                       restoreState: function( arg){\r
                                if( arg && arg.length !== 8) return;\r
                                var _currentElement = arg[ 0],\r
                                        _x = arg[ 1], _y = arg[ 2], _w = arg[ 3], _h = arg[ 4],\r
@@ -2497,8 +2612,8 @@ pettanr.editor = ( function(){
                                currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
                                currentOperator = null;\r
                                currentElement === _currentElement ? resize( _x, _y, _w, _h, _a) : show( _currentElement);\r
-                       }\r
-                       function saveComicElementStatus( startX, startY, startW, startH, startA, startFilpV, startFilpH){\r
+                       },\r
+                       saveStatus: function( startX, startY, startW, startH, startA, startFilpV, startFilpH){\r
                                startX = startX !== undefined ? startX : currentx;\r
                                startY = startY !== undefined ? startY : currenty;\r
                                startW = startW !== undefined ? startW : currentw;\r
@@ -2506,58 +2621,14 @@ pettanr.editor = ( function(){
                                startA = startA !== undefined ? startA : angle;\r
                                startFilpV = startFilpV !== undefined ? startFilpV : flipV;\r
                                startFilpH = startFilpH !== undefined ? startFilpH : flipH;\r
-                               currentElement && SAVE( restoreState,\r
+                               currentElement && SAVE( COMIC_ELEMENT_OPERATION_MANAGER.restoreState,\r
                                        [ currentElement, startX, startY, startW, startH, startA, startFilpV, startFilpH],\r
                                        [ currentElement, currentx, currenty, currentw, currenth, angle, flipV, flipH]\r
                                );\r
-                       }\r
-                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
-                               currentOperator !== null && currentOperator.onShiftUpdate && currentOperator.onShiftUpdate();\r
-                       });\r
-                       pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function(){\r
-                               currentOperator !== null && currentOperator.onCtrlUpdate && currentOperator.onCtrlUpdate();\r
-                       });\r
-                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function(){\r
-                               currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
-                               currentOperator = null;\r
-                       });\r
-               return {\r
-                       init: function(){\r
-                               hide();\r
-                               delete COMIC_ELEMENT_OPERATION_MANAGER.init;\r
                        },\r
-                       hide: hide,\r
-                       resize: resize,\r
-                       restoreState: restoreState,\r
-                       updateInfomation: updateInfomation,\r
-                       saveStatus: saveComicElementStatus,\r
                        busy: function(){\r
                                return currentOperator !== null;\r
                        },\r
-                       hitareaX: function( _comicElement, _x){\r
-                               if( _comicElement === currentElement){\r
-                                       var _consoleX = CONSOLE_CONTROLER.x();\r
-                                       return currentx +( _consoleX < 0 ? _consoleX : 0) -HIT_AREA;\r
-                               }\r
-                               return _x -HIT_AREA;\r
-                       },\r
-                       hitareaY: function( _comicElement, _y){\r
-                               return _y -HIT_AREA;\r
-                       },\r
-                       hitareaW: function( _comicElement, _w){\r
-                               if( _comicElement === currentElement){\r
-                                       var _consoleW = CONSOLE_CONTROLER.w();\r
-                                       return ( _consoleW < currentw ? currentw : _consoleW) +HIT_AREA *2;\r
-                               }\r
-                               return _w +HIT_AREA *2;\r
-                       },\r
-                       hitareaH: function( _comicElement, _h){\r
-                               if( _comicElement === currentElement){\r
-                                       var _consoleY = CONSOLE_CONTROLER.y();\r
-                                       return ( _consoleY < currenth ? currenth : _consoleY +CONSOLE_CONTROLER.h()) +HIT_AREA *2;\r
-                               }\r
-                               return _h +HIT_AREA *2;\r
-                       },\r
                        hitTest: function( _mouseX, _mouseY, _comicElement){\r
                                var _x, _y, _w, _h;\r
                                if( _comicElement === currentElement){\r
@@ -2621,10 +2692,6 @@ pettanr.editor = ( function(){
                        h: h,                                   \r
                        z: z,\r
                        timing: timing,\r
-                       hitareaX: function(){ return OPERATOR.hitareaX( this, this.x);},\r
-                       hitareaY: function(){ return OPERATOR.hitareaY( this, this.y);},\r
-                       hitareaW: function(){ return OPERATOR.hitareaW( this, this.w);},\r
-                       hitareaH: function(){ return OPERATOR.hitareaH( this, this.h);},\r
                        hitTest: function( _mouseX, _mouseY){ return OPERATOR.hitTest(  _mouseX, _mouseY, this);},\r
                        shift: function( _shiftX, _shiftY){\r
                                update( this.x +_shiftX, this.y +_shiftY);\r
@@ -2643,8 +2710,8 @@ pettanr.editor = ( function(){
                        }\r
                }\r
        };\r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+\r
+/* --------------------------------------------------------------------------------------------\r
  * ImageElementClass\r
  */\r
        var     jqImageElementOrigin;\r
@@ -2653,7 +2720,7 @@ pettanr.editor = ( function(){
                \r
                var JQ_WRAPPER = jqImageElementOrigin.clone( true),\r
                        OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        reversibleImage = null,\r
                        actualW = 0, actualH = 0,\r
@@ -2779,12 +2846,9 @@ pettanr.editor = ( function(){
  */\r
 \r
 \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
+/* --------------------------------------------------------------------------------------------\r
  * TextElementClass\r
  * \r
- * ELM はpettanr.domで書き出したものを突っ込むcreateの場合\r
- * \r
  * type\r
  * 0.none\r
  * 1.speach balloon\r
@@ -2807,7 +2871,7 @@ pettanr.editor = ( function(){
                        TEXT_ELM = JQ_WRAPPER.find( 'td,.speach-inner').eq( 0),\r
                        OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
-                       SAVE = HISTORY.saveState,\r
+                       SAVE = HISTORY_CONTROL.saveState,\r
                        instance;\r
                        \r
                JQ_WRAPPER.find( 'img').eq( 0).replaceWith( XBROWSER_BALLOON.elm);\r
@@ -2934,21 +2998,22 @@ pettanr.editor = ( function(){
                                        ].join( '');\r
                                },\r
                                getAsXML: function(){}\r
-                               \r
                        }\r
                );\r
        }\r
 \r
-\r
+/* --------------------------------------------------------------------------------------------\r
+ * COMIC_ELEMENT_CONTROL\r
+ *  - mouseEventListener\r
+ */\r
        var COMIC_ELEMENT_CONTROL = ( function(){\r
-               var     SAVE = HISTORY.saveState,\r
+               var     SAVE = HISTORY_CONTROL.saveState,\r
                        ELM_CONTAINER = document.getElementById( 'comic-element-container'),\r
                        currentElement = null,\r
                        currentLockTest = false,\r
                        currentLock = false,\r
                        panelX, panelY, panelW, panelH,\r
                        startX, startY;\r
-       \r
        /*\r
         * append, remove, replace\r
         * \r
@@ -2993,14 +3058,14 @@ pettanr.editor = ( function(){
                                COMIC_ELEMENT_ARRAY[ insertIndex].$.before( _jqElm.fadeIn());\r
                                COMIC_ELEMENT_ARRAY.splice( insertIndex, 0, _comicElement);\r
                        }\r
-                       numberingComicElement();\r
+                       renumber();\r
                }\r
                function removeComicElement( _comicElement) {\r
                        var l = COMIC_ELEMENT_ARRAY.length;\r
                        for( var i=0; i<l; ++i){\r
                                if( COMIC_ELEMENT_ARRAY[ i] === _comicElement){\r
                                        COMIC_ELEMENT_ARRAY.splice( i, 1);\r
-                                       numberingComicElement();\r
+                                       renumber();\r
                                        _comicElement.$.stop().css( {\r
                                                filter:         '',\r
                                                opacity:        ''\r
@@ -3022,7 +3087,7 @@ pettanr.editor = ( function(){
                 * COMIC_ELEMENT_ARRAY の順番を基準に、zの再計算\r
                 * jqElmの並び替え。\r
                 */\r
-               function numberingComicElement(){\r
+               function renumber(){\r
                        var l = COMIC_ELEMENT_ARRAY.length,\r
                                _comicElement, jqElm, jqNext;\r
                        for( var i=0; i < l; ++i){\r
@@ -3042,19 +3107,20 @@ pettanr.editor = ( function(){
                                        }\r
                                        return -1;\r
                                })();\r
-                       if( i === -1) return;\r
+                       if( i === -1) return false;\r
                        if( goForward === true){\r
-                               if( i === 0) return;\r
+                               if( i === 0) return false;\r
                                COMIC_ELEMENT_ARRAY.splice( i, 1);\r
                                COMIC_ELEMENT_ARRAY.splice( i -1, 0, _comicElement);\r
                        } else {\r
-                               if( i === l -1) return;\r
+                               if( i === l -1) return false;\r
                                COMIC_ELEMENT_ARRAY.splice( i, 1);\r
                                COMIC_ELEMENT_ARRAY.splice( i +1, 0, _comicElement);\r
                        }\r
-                       numberingComicElement();\r
+                       renumber();\r
+                       return true;\r
                }\r
-               function restoreReplaceObject( arg){\r
+               function restoreReplaceElement( arg){\r
                        replaceComicElement( arg[ 0], arg[ 1]);\r
                }\r
                \r
@@ -3070,10 +3136,18 @@ pettanr.editor = ( function(){
                                \r
                                delete COMIC_ELEMENT_CONTROL.init;\r
                        },\r
-                       removeComicElement: removeComicElement,\r
-                       restoreComicElement: restoreComicElement,\r
-                       replaceComicElement: replaceComicElement,\r
-                       restoreReplaceObject: restoreReplaceObject,\r
+                       open: function(){\r
+                               COMIC_ELEMENT_CONTROL.init && COMIC_ELEMENT_CONTROL.init();\r
+                       },\r
+                       close: function(){\r
+                               while( COMIC_ELEMENT_ARRAY.length > 0){\r
+                                       COMIC_ELEMENT_ARRAY.shift().destroy();\r
+                               }\r
+                       },\r
+                       remove: removeComicElement,\r
+                       restore: restoreComicElement,\r
+                       replace: replaceComicElement,\r
+                       restoreReplace: restoreReplaceElement,\r
                        onPanelResize : function ( _panelX, _panelY, _panelW, _panelH, isResizerTopAction){\r
                        /*\r
                         * リサイズが、ResizerTopによって行われた場合、comicElementのyを動かして見かけ上動かないようにする。\r
@@ -3135,8 +3209,9 @@ pettanr.editor = ( function(){
                        onMouseUp: function( _mouseX, _mouseY){\r
                                var ret = currentElement !== null && currentElement.busy() === true;\r
                                ret === true && currentElement.onMouseUp( _mouseX -startX || panelX, _mouseY -startY || panelY);\r
-                               RESIZE_OPERATOR.lock( currentLockTest);\r
-                               currentLock = currentLockTest;\r
+                               currentLock = currentLockTest === true && currentElement.hitTest( _mouseX -panelX, _mouseY -panelY) === true;\r
+                               RESIZE_OPERATOR.lock( currentLock);\r
+                               INFOMATION_WINDOW.lock( currentLock);\r
                                return ret;\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
@@ -3155,12 +3230,13 @@ pettanr.editor = ( function(){
                                h = h || 150; //ActualHeight\r
                                x = x || Math.floor( panelW /2 -w /2);\r
                                y = y || Math.floor( panelH /2 -h /2);\r
-                               IMAGE_GROUP_EXPROLER.show( function( _url, _w, _h){\r
-                                       var _comicElement = ImageElementClass.apply( {}, [ _url, imagesetID, x, y, z || -1, w, h, COMIC_ELEMENT_ARRAY.length]);\r
+                               function onImageSelect( _url, _w, _h){\r
+                                       var _comicElement = new ImageElementClass( _url, imagesetID, x, y, z || -1, _w, _h, COMIC_ELEMENT_ARRAY.length);\r
                                        appendComicElement( _comicElement);\r
                                        _comicElement.animate( undefined, undefined, _w, _h);\r
-                                       SAVE( restoreComicElement, [ false, _comicElement], [ true, _comicElement], true);\r
-                               });\r
+                                       SAVE( restoreComicElement, [ false, _comicElement], [ true, _comicElement], true);                                      \r
+                               }\r
+                               IMAGE_GROUP_EXPROLER.show( onImageSelect);\r
                        },\r
                        createTextElement: function( type, angle, text, x, y, z, w, h){\r
                                type = type || 0;\r
@@ -3313,38 +3389,23 @@ pettanr.editor = ( function(){
        return {\r
                init: function( _option){\r
                        option = _option;\r
+                       \r
                },\r
                firstOpen: function(){\r
-                       var jqWindow = pettanr.jqWindow();\r
-                       windowW = jqWindow.width();\r
-                       windowH = jqWindow.height();\r
-                       \r
-                       jqEditor = $( '#editor');\r
-\r
                /*\r
                 * MOUSE_LISTENER_ARRAY は、表示順に格納.手前の要素が最初\r
                 * MENU_BAR_CONTROL,\r
                 * WINDOW_CONTROL,\r
                 * COMIC_ELEMENT_CONTROL,\r
                 * PANEL_CONTROL\r
-                * .busy() === true なら、そのままonMouseMove()にイベントを流す.これはArrayの後ろから、奥の表示要素から\r
+                * .busy() === true なら、そのままonMouseMove()にイベントを流す.\r
                 * onMouseMove()に流してみて、false が帰れば、次にリスナーにも流す.\r
                 */\r
                        MOUSE_LISTENER_ARRAY.push( MENU_BAR_CONTROL, WINDOWS_CONTROL, PANEL_RESIZER_TOP, PANEL_RESIZER_BOTTOM, COMIC_ELEMENT_CONTROL, PANEL_CONTROL);\r
-\r
-                       HISTORY.init();\r
-                       \r
-                       WINDOWS_CONTROL.init();\r
                        \r
-                       GRID_CONTROL.init();\r
-                       PANEL_CONTROL.init();\r
                        CONSOLE_CONTROLER.init();\r
-                       COMIC_ELEMENT_OPERATION_MANAGER.init();\r
-                       COMIC_ELEMENT_CONTROL.init();\r
-                       \r
-                       // last\r
-                       MENU_BAR_CONTROL.init();\r
                        \r
+                       OUTPUT_CONSOLE.init();\r
                        TEXT_EDITOR_CONTROL.init();\r
                        IMAGE_GROUP_EXPROLER.init();\r
 \r
@@ -3367,22 +3428,50 @@ pettanr.editor = ( function(){
                        \r
                        delete pettanr.editor.firstOpen;\r
                },\r
-               onOpen: function( _option){\r
-                       pettanr.editor.firstOpen !== undefined && pettanr.editor.firstOpen();\r
-\r
-                       // HISTORY.onOpen();\r
-                       // WINDOWS_CONTROL.onOpen();\r
-                       // COMIC_ELEMENT_CONTROL.onOpen();\r
-                       // MENU_BAR_CONTROL.onOpen();\r
-                       // TEXT_EDITOR_CONTROL.onOpen();\r
-                       // IMAGE_GROUP_EXPROLER.onOpen();\r
-               },\r
-               onClose: function(){\r
-               },\r
-               onWindowResize: function( _windowW, _windowH){\r
-                       windowW = _windowW;\r
-                       windowH = _windowH;\r
+               onOpen: function( _w, _h, _file){\r
+                       if( pettanr.file.isFileInstance( _file) === true){\r
+                               // pettanr.file.isPettanFileInstance( _file) === true\r
+                               // \r
+                       }\r
+                       jqEditor = jqEditor || $( '#editor');\r
+                       \r
+                       HISTORY_CONTROL.open();\r
+                       \r
+                       WINDOWS_CONTROL.open();\r
+                       \r
+                       GRID_CONTROL.open();\r
+                       PANEL_CONTROL.open();\r
+                       \r
+                       COMIC_ELEMENT_OPERATION_MANAGER.open();\r
+                       COMIC_ELEMENT_CONTROL.open();\r
                        \r
+                       // last\r
+                       MENU_BAR_CONTROL.open();\r
+                       \r
+                       pettanr.editor.firstOpen !== undefined && pettanr.editor.firstOpen();\r
+                       \r
+                       windowW = _w;\r
+                       windowH = _h;\r
+                       pettanr.editor.onWindowResize( _w, _h );\r
+               },\r
+               onClose: function(){\r
+                       HISTORY_CONTROL.close();\r
+                       \r
+                       WINDOWS_CONTROL.close();\r
+                       \r
+                       GRID_CONTROL.close();\r
+                       PANEL_CONTROL.close();\r
+                       \r
+                       COMIC_ELEMENT_OPERATION_MANAGER.close();\r
+                       COMIC_ELEMENT_CONTROL.close();\r
+                       \r
+                       // last\r
+                       MENU_BAR_CONTROL.open();\r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+                       windowW = _windowW || windowW;\r
+                       windowH = _windowH || windowH;\r
+                       if( pettanr.editor.firstOpen) return;\r
                        /*\r
                         * ieは +'px'が不要みたい\r
                         */\r
@@ -3397,3 +3486,776 @@ pettanr.editor = ( function(){
                MIN_HEIGHT:     320\r
        }\r
 })();\r
+\r
+// create hidden iframe\r
+// write script\r
+// setInterval\r
+pettanr.proxy = ( function(){\r
+       \r
+       function FormProxy( formJsUrl, callback){\r
+               var timer = null,\r
+                       iWin, idoc;\r
+\r
+               pettanr.util.createIframe( 'id00000', onCreateIframe);\r
+               \r
+               function onCreateIframe( _iframe){\r
+                       iWin = _iframe.contentWindow;\r
+                       idoc = _iframe.contentWindow.document;\r
+\r
+                       idoc.open();\r
+                       idoc.write( '<body>');\r
+                       idoc.writeln( '<script type="text\/javascript" src="' + pettanr.CONST.JQUERY_URL+ '"><\/script>');\r
+                       idoc.close();\r
+\r
+                       timer = window.setInterval( detect, 250 );\r
+               }\r
+               function detect(){\r
+                       if( iWin.jQuery){\r
+                               window.clearInterval( timer );\r
+                               //callback( idoc);\r
+                               iWin.jQuery( iWin).ready( onJQueryReady );\r
+                       }\r
+               }\r
+               function onJQueryReady(){\r
+                       callback( idoc);\r
+               }\r
+       }\r
+       \r
+       return {\r
+               createFormProxy: function( _formJsUrl, _callback){\r
+                       new FormProxy( _formJsUrl, _callback);\r
+               }\r
+       }\r
+       \r
+})();\r
+\r
+\r
+pettanr.comicConsole = ( function(){\r
+       var COMIC_CONSOLE = ( function(){\r
+               var jqWrap,\r
+                       ID = 'comicConsole',\r
+                       elmWrap = document.getElementById( 'comic-console-wrapper' ),\r
+                       elmHeader = document.getElementById( 'comic-console-header' ),\r
+                       elmProgress = document.getElementById( 'comic-console-progress' ),\r
+                       inputTitle, inputW, inputH, inputVisible, inputEditable,\r
+                       elmUploader = null,\r
+                       elmScript = null\r
+                       elmIframe = null,\r
+                       elmForm = null,\r
+                       timer = null,\r
+                       isUploading = false;\r
+               //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK);\r
+               \r
+               function clickOK(){\r
+                       if( !elmForm || !elmIframe || isUploading === true ) return false;\r
+                       // validate\r
+                       isUploading = true;\r
+                       elmProgress.innerHTML = '■';\r
+                       copyAndSubmit();\r
+               }\r
+\r
+                       function copyAndSubmit(){\r
+                               var _inputList = elmForm.getElementsByTagName( 'input' ),\r
+                                       _input, _name;\r
+                               for( var i=0, l= _inputList.length; i<l; ++i){\r
+                                       _input = _inputList[ i ];\r
+                                       _name = _input.name;\r
+                                       if( _name === 'comic[title]'){\r
+                                               _input.value = inputTitle.value();\r
+                                       } else\r
+                                       if( _name === 'comic[width]'){\r
+                                               _input.value = inputW.value();\r
+                                       } else\r
+                                       if( _name === 'comic[height]'){\r
+                                               _input.value = inputH.value();\r
+                                       }\r
+                               }\r
+                               var _selectList = elmForm.getElementsByTagName( 'select' ),\r
+                                       _select, _name, _optionList;\r
+                               for( i=0, l= _selectList.length; i<l; ++i){\r
+                                       _select = _selectList[ i ];\r
+                                       _name = _select.name;\r
+                                       _optionList = _select.getElementsByTagName( 'option' )\r
+                                       if( _name === 'comic[visible]'){\r
+                                               _select.selectedIndex = 1;\r
+                                       } else\r
+                                       if( _name === 'comic[editable]'){\r
+                                               _select.selectedIndex = 0;\r
+                                       }\r
+                               }\r
+                               try {\r
+                                       elmForm.submit();\r
+                               } catch( e){\r
+                                       elmProgress.innerHTML = 'submit() err..';\r
+                                       isUploading = false;\r
+                                       setTimeout( clickCancel , 3000);\r
+                                       return;\r
+                               }\r
+                               if( pettanr.ua.isIE){\r
+                                       elmIframe.onreadystatechange = detectIframe;\r
+                               } else {\r
+                                       elmIframe.onload = onIframeUpdate;\r
+                               }\r
+                               elmProgress.innerHTML = 'uploading..';\r
+                       }\r
+               /*\r
+                * ie の 場合、readyState をチェック.\r
+                */\r
+                               function detectIframe(){\r
+                           if ( elmIframe.readyState === 'complete') {\r
+                               elmIframe.onreadystatechange = new Function();\r
+                               elmIframe.onreadystatechange = null;\r
+                               onIframeUpdate();\r
+                           }\r
+                               }\r
+                                       function onIframeUpdate(){\r
+                                               elmIframe.onload = null;\r
+                                               ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();\r
+                                               elmIframe = null;\r
+                                               elmProgress.innerHTML = 'success!';\r
+                                               setTimeout( clickCancel , 1000);\r
+                                               isUploading = false;\r
+                                       }\r
+                               \r
+               function clickCancel(){\r
+                       if( isUploading === true) return false;\r
+                       pettanr.overlay.hide();\r
+                       COMIC_CONSOLE.onClose();\r
+               }\r
+               function detectForm(){\r
+                       elmForm = elmUploader.getElementsByTagName( 'form' )[ 0 ];\r
+                       if( elmForm){\r
+                               window.clearInterval( timer);\r
+                               timer = null;\r
+                               pettanr.util.createIframe( 'targetFrameCreateComic', onCreateIframe );\r
+                               elmProgress.innerHTML = 'create iframe';\r
+                       }\r
+               }\r
+               function onCreateIframe( _iframe ){\r
+                       elmUploader.appendChild( _iframe );\r
+                       elmIframe = _iframe;\r
+                       elmForm.target = _iframe.name;\r
+                       elmProgress.innerHTML = '';\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#comic-console-wrapper').hide();\r
+                               $( '#comic-console-post-button').click( clickOK );\r
+                               $( '#comic-console-cancel-button').click( clickCancel );\r
+                               \r
+                               var CREATER = pettanr.form.createInputText;//pettanr.key.createEditableText;\r
+                               inputTitle    = CREATER( document.getElementById( 'comic-console-title'), null, ID);\r
+                               inputW        = CREATER( document.getElementById( 'comic-console-width'), null, ID);\r
+                               inputH        = CREATER( document.getElementById( 'comic-console-height'), null, ID);\r
+                               inputVisible  = CREATER( document.getElementById( 'comic-console-visible'), null, ID);\r
+                               inputEditable = CREATER( document.getElementById( 'comic-console-editable'), null, ID);\r
+                               \r
+                               delete COMIC_CONSOLE.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( w, h){\r
+                               jqWrap.show();\r
+\r
+                               pettanr.overlay.show( COMIC_CONSOLE );\r
+                               \r
+                               inputTitle.start();\r
+                               \r
+                               elmUploader = document.createElement( 'div');\r
+                               elmUploader.id = "newcomic";\r
+                               elmUploader.style.cssText = 'height:1px;line-height:1px;visibility:hidden;overflow:hidden;';\r
+                               elmWrap.appendChild( elmUploader);\r
+                               \r
+                               var elmScript = document.createElement( 'script');\r
+                               elmScript.type = 'text\/javascript';\r
+                               elmScript.src = pettanr.CONST.CREATE_COMIC_JS;\r
+                               elmWrap.appendChild( elmScript);\r
+                               \r
+                               elmProgress.innerHTML = 'loading form.';\r
+                               \r
+                               if( timer === null){\r
+                                       timer = window.setInterval( detectForm, 250);\r
+                               }\r
+                               \r
+                               COMIC_CONSOLE.onWindowResize( w, h);\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( _windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( _windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );\r
+                       },\r
+                       onClose: function(){\r
+                               elmForm !== null && $( elmUploader ).remove();\r
+                               elmForm  = null;\r
+                               isUploading = false;\r
+                               \r
+                               if( elmScript !== null ){\r
+                                       document.body.removeChild( elmScript);\r
+                                       elmScript = null;                                       \r
+                               }\r
+                               if( timer !== null){\r
+                                       window.clearInterval( timer);\r
+                                       timer = null;\r
+                               }\r
+                               \r
+                               jqWrap.hide();\r
+                       },\r
+                       ID: ID\r
+               }\r
+       })();\r
+       \r
+       return {\r
+               init: function(){\r
+                       COMIC_CONSOLE.init();\r
+                       delete pettanr.comicConsole.init;\r
+               },\r
+               onOpen: function( _w, _h, _file){\r
+                       if( pettanr.driver.isPettanrFileInstance( _file ) === true && _file.getType() === pettanr.driver.FILE_TYPE.COMIC){\r
+                               // _data = _file.read();\r
+                       }\r
+               },\r
+               onClose: function(){\r
+                       \r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+               },\r
+               _quickAccessShow: function(){\r
+                       jqWindow = pettanr.jqWindow();\r
+                       var w = jqWindow.width(),\r
+                               h = jqWindow.height();\r
+                       COMIC_CONSOLE.show( w, h);\r
+               }\r
+       }\r
+})();\r
+\r
+pettanr.uploadConsole = ( function(){\r
+       var UPLOAD_CONSOLE = ( function(){\r
+               var jqWrap, windowW, windowH,\r
+                       ID = 'uploadConsole',\r
+                       TARGET_FRAME_NAME = 'targetFrame',\r
+                       elmContainer = document.getElementById( 'uploader'),\r
+                       elmProgress = document.getElementById( 'upload-console-progress'),\r
+                       timer = null,\r
+                       elmScript = null,\r
+                       elmForm = null,\r
+                       elmFile = null,\r
+                       elmIframe = null,\r
+                       isUploading = false;\r
+               /*\r
+                * upload ボタンが押されたらまず iframe をつくる.
+                */\r
+               function clickOK(){\r
+                       if( !elmForm || !elmIframe || isUploading === true ) return false;\r
+                       if( elmFile.value.length === 0) return false;\r
+                       elmProgress.innerHTML = 'uploading.';\r
+                       isUploading = true;\r
+                       submit();\r
+                       return false;\r
+               }\r
+               /*\r
+                * form の target に iframe を指定したのち submit();
+                */\r
+                       function submit(){\r
+                               try {\r
+                                       elmForm.submit();\r
+                               } catch( e){\r
+                                       elmProgress.innerHTML = 'submit() err..';\r
+                                       isUploading = false;\r
+                                       setTimeout( clickCancel , 3000);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if( pettanr.ua.isIE){\r
+                                       elmIframe.onreadystatechange = detectIframe;\r
+                               } else {\r
+                                       elmIframe.onload = onLoad;\r
+                               }\r
+                               elmProgress.innerHTML = 'uploading..';\r
+                       }\r
+               /*\r
+                * ie の 場合、readyState をチェック.
+                */\r
+                               function detectIframe(){\r
+                           if ( elmIframe.readyState === 'complete') {\r
+                               elmIframe.onreadystatechange = new Function();\r
+                               elmIframe.onreadystatechange = null;\r
+                               onLoad();\r
+                           }\r
+                               }\r
+                                       function onLoad(){\r
+                                               elmIframe.onload = null;\r
+                                               ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();\r
+                                               elmProgress.innerHTML = 'success!';\r
+                                               setTimeout( clickCancel , 1000);\r
+                                               isUploading = false;\r
+                                       }\r
+               \r
+               function detectForm(){\r
+                       elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];\r
+                       if( elmForm){\r
+                               var _inputList = elmForm.getElementsByTagName( 'input' ),\r
+                                       _input;\r
+                               for( var i=0, l= _inputList.length; i<l; ++i){\r
+                                       _input = _inputList[ i ];\r
+                                       if( _input.type === 'file'){\r
+                                               elmFile = _input;\r
+                                       }\r
+                                       if( _input.type === 'submit'){\r
+                                               _input.style.display = 'none';\r
+                                       }\r
+                               }\r
+                               window.clearInterval( timer);\r
+                               timer = null;\r
+                               pettanr.util.createIframe( TARGET_FRAME_NAME, onCreateIframe);\r
+                               elmProgress.innerHTML = 'create iframe';\r
+                       }\r
+               }\r
+               function onCreateIframe( _iframe ){\r
+                       elmContainer.appendChild( _iframe );\r
+                       elmIframe = _iframe;\r
+                       elmForm.target = _iframe.name;\r
+                       elmProgress.innerHTML = '';\r
+                       UPLOAD_CONSOLE.onWindowResize( windowW, windowH );\r
+               }\r
+               /*\r
+                * 
+                */\r
+               function clickCancel(){\r
+                       if( isUploading === true) return false;\r
+                       pettanr.overlay.hide();\r
+                       UPLOAD_CONSOLE.onClose();\r
+                       return false;\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#upload-console-wrapper').hide();\r
+                               $( '#upload-console-post-button').click( clickOK );\r
+                               $( '#upload-console-cancel-button').click( clickCancel );\r
+\r
+                               delete UPLOAD_CONSOLE.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( w, h){\r
+                               /*\r
+                                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
+                                */                             \r
+                               elmScript = document.createElement( 'script');\r
+                               elmScript.type = 'text\/javascript';\r
+                               elmScript.src = pettanr.CONST.UPLOAD_PICTURE_JS;\r
+                               document.body.appendChild( elmScript);\r
+                               \r
+                               jqWrap.show();\r
+                               pettanr.overlay.show( UPLOAD_CONSOLE );\r
+\r
+                               if( timer === null){\r
+                                       timer = window.setInterval( detectForm, 250);\r
+                               }\r
+                               \r
+                               elmProgress.innerHTML = 'loading form.';\r
+                               \r
+                               UPLOAD_CONSOLE.onWindowResize( w, h);\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               windowW = _windowW;\r
+                               windowH = _windowH;\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( _windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( _windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );\r
+                       },\r
+                       onClose: function(){\r
+                               elmForm !== null && $( elmContainer.children ).remove();\r
+                               elmForm = elmFile = elmIframe = null;\r
+                               isUploading = false;\r
+                               \r
+                               if( elmScript !== null ){\r
+                                       document.body.removeChild( elmScript);\r
+                                       elmScript = null;                                       \r
+                               }\r
+                               if( timer !== null){\r
+                                       window.clearInterval( timer);\r
+                                       timer = null;\r
+                               }\r
+                               jqWrap.hide();\r
+                       },\r
+                       ID: ID\r
+               }\r
+       })();\r
+       \r
+       return {\r
+               init: function(){\r
+                       UPLOAD_CONSOLE.init();\r
+                       delete pettanr.comicConsole.init;\r
+               },\r
+               onOpen: function( _w, _h, _file){\r
+                       if( pettanr.driver.isPettanrFileInstance( _file ) === true && _file.getType() === pettanr.driver.FILE_TYPE.COMIC){\r
+                               // _data = _file.read();\r
+                       }\r
+               },\r
+               onClose: function(){\r
+                       \r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+               },\r
+               _quickAccessShow: function(){\r
+                       jqWindow = pettanr.jqWindow();\r
+                       var w = jqWindow.width(),\r
+                               h = jqWindow.height();\r
+                       UPLOAD_CONSOLE.show( w, h);\r
+               }\r
+       }\r
+})();\r
+\r
+pettanr.panelConsole = ( function(){\r
+       var PANEL_CONSOLE = ( function(){\r
+               var jqWrap, windowW, windowH,\r
+                       ID = 'panelConsole',\r
+                       TARGET_FRAME_NAME = 'targetFrameCreateNewPanel',\r
+                       elmContainer = document.getElementById( 'newpanel'),\r
+                       elmProgress = document.getElementById( 'panel-console-progress'),\r
+                       timer = null,\r
+                       elmScript = null,\r
+                       elmForm = null,\r
+                       elmIframe = null,\r
+                       isUploading = false;\r
+               /*\r
+                * upload ボタンが押されたらまず iframe をつくる.\r
+                */\r
+               function clickOK(){\r
+                       if( !elmForm || !elmIframe || isUploading === true ) return false;\r
+                       elmProgress.innerHTML = 'uploading.';\r
+                       isUploading = true;\r
+                       submit();\r
+                       return false;\r
+               }\r
+               /*\r
+                * form の target に iframe を指定したのち submit();\r
+                */\r
+                       function submit(){\r
+                               try {\r
+                                       elmForm.submit();\r
+                               } catch( e){\r
+                                       elmProgress.innerHTML = 'submit() err..';\r
+                                       isUploading = false;\r
+                                       setTimeout( clickCancel , 3000);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if( pettanr.ua.isIE){\r
+                                       elmIframe.onreadystatechange = detectIframe;\r
+                               } else {\r
+                                       elmIframe.onload = onLoad;\r
+                               }\r
+                               elmProgress.innerHTML = 'uploading..';\r
+                       }\r
+               /*\r
+                * ie の 場合、readyState をチェック.\r
+                */\r
+                               function detectIframe(){\r
+                           if ( elmIframe.readyState === 'complete') {\r
+                               elmIframe.onreadystatechange = new Function();\r
+                               elmIframe.onreadystatechange = null;\r
+                               onLoad();\r
+                           }\r
+                               }\r
+                                       function onLoad(){\r
+                                               elmIframe.onload = null;\r
+                                               ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();\r
+                                               elmProgress.innerHTML = 'success!';\r
+                                               setTimeout( clickCancel , 1000);\r
+                                               isUploading = false;\r
+                                       }\r
+               \r
+               function detectForm(){\r
+                       elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];\r
+                       if( elmForm){\r
+                               var _inputList = elmForm.getElementsByTagName( 'input' ),\r
+                                       _input;\r
+                               for( var i=0, l= _inputList.length; i<l; ++i){\r
+                                       _input = _inputList[ i ];\r
+                                       if( _input.type === 'submit'){\r
+                                               _input.style.display = 'none';\r
+                                       }\r
+                               }\r
+                               window.clearInterval( timer);\r
+                               timer = null;\r
+                               pettanr.util.createIframe( TARGET_FRAME_NAME, onCreateIframe);\r
+                               elmProgress.innerHTML = 'create iframe';\r
+                       }\r
+               }\r
+               function onCreateIframe( _iframe ){\r
+                       elmContainer.appendChild( _iframe );\r
+                       elmIframe = _iframe;\r
+                       elmForm.target = _iframe.name;\r
+                       elmProgress.innerHTML = '';\r
+                       PANEL_CONSOLE.onWindowResize( windowW, windowH );\r
+               }\r
+               /*\r
+                * \r
+                */\r
+               function clickCancel(){\r
+                       if( isUploading === true) return false;\r
+                       pettanr.overlay.hide();\r
+                       PANEL_CONSOLE.onClose();\r
+                       return false;\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#panel-console-wrapper').hide();\r
+                               $( '#panel-console-post-button').click( clickOK );\r
+                               $( '#panel-console-cancel-button').click( clickCancel );\r
+\r
+                               delete PANEL_CONSOLE.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( w, h){\r
+                               /*\r
+                                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.\r
+                                */                             \r
+                               elmScript = document.createElement( 'script');\r
+                               elmScript.type = 'text\/javascript';\r
+                               elmScript.src = pettanr.CONST.CREATE_PANEL_JS;\r
+                               document.body.appendChild( elmScript);\r
+                               \r
+                               jqWrap.show();\r
+                               pettanr.overlay.show( PANEL_CONSOLE );\r
+\r
+                               if( timer === null){\r
+                                       timer = window.setInterval( detectForm, 250 );\r
+                               }\r
+                               \r
+                               elmProgress.innerHTML = 'loading form.';\r
+                               \r
+                               PANEL_CONSOLE.onWindowResize( w, h );\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH){\r
+                               windowW = _windowW;\r
+                               windowH = _windowH;\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( _windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( _windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );\r
+                       },\r
+                       onClose: function(){\r
+                               elmForm !== null && $( elmContainer.children ).remove();\r
+                               elmForm = elmIframe = null;\r
+                               isUploading = false;\r
+                               \r
+                               if( elmScript !== null ){\r
+                                       document.body.removeChild( elmScript);\r
+                                       elmScript = null;                                       \r
+                               }\r
+                               if( timer !== null){\r
+                                       window.clearInterval( timer);\r
+                                       timer = null;\r
+                               }\r
+                               jqWrap.hide();\r
+                       },\r
+                       ID: ID\r
+               }\r
+       })();\r
+       \r
+       return {\r
+               init: function(){\r
+                       PANEL_CONSOLE.init();\r
+                       delete pettanr.comicConsole.init;\r
+               },\r
+               onOpen: function( _w, _h, _file ){\r
+                       \r
+               },\r
+               onClose: function(){\r
+                       \r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+               },\r
+               _quickAccessShow: function(){\r
+                       jqWindow = pettanr.jqWindow();\r
+                       var w = jqWindow.width(),\r
+                               h = jqWindow.height();\r
+                       PANEL_CONSOLE.show( w, h);\r
+               }\r
+       }\r
+})();\r
+\r
+pettanr.artistConsole = ( function(){\r
+       var ARTIST_CONSOLE = ( function(){\r
+               var jqWrap, windowW, windowH,\r
+                       ID = 'artistConsole',\r
+                       TARGET_FRAME_NAME = 'targetFrameRegisterArtist',\r
+                       elmContainer = document.getElementById( 'register'),\r
+                       elmProgress = document.getElementById( 'artist-console-progress'),\r
+                       timer = null,\r
+                       elmScript = null,\r
+                       elmForm = null,\r
+                       elmIframe = null,\r
+                       isUploading = false;\r
+               /*\r
+                * upload ボタンが押されたらまず iframe をつくる.\r
+                */\r
+               function clickOK(){\r
+                       if( !elmForm || !elmIframe || isUploading === true ) return false;\r
+                       elmProgress.innerHTML = 'uploading.';\r
+                       isUploading = true;\r
+                       submit();\r
+                       return false;\r
+               }\r
+               /*\r
+                * form の target に iframe を指定したのち submit();\r
+                */\r
+                       function submit(){\r
+                               try {\r
+                                       elmForm.submit();\r
+                               } catch( e){\r
+                                       elmProgress.innerHTML = 'submit() err..';\r
+                                       isUploading = false;\r
+                                       setTimeout( clickCancel , 3000);\r
+                                       return;\r
+                               }\r
+                               \r
+                               if( pettanr.ua.isIE){\r
+                                       elmIframe.onreadystatechange = detectIframe;\r
+                               } else {\r
+                                       elmIframe.onload = onLoad;\r
+                               }\r
+                               elmProgress.innerHTML = 'uploading..';\r
+                       }\r
+               /*\r
+                * ie の 場合、readyState をチェック.\r
+                */\r
+                               function detectIframe(){\r
+                           if ( elmIframe.readyState === 'complete') {\r
+                               elmIframe.onreadystatechange = new Function();\r
+                               elmIframe.onreadystatechange = null;\r
+                               onLoad();\r
+                           }\r
+                               }\r
+                                       function onLoad(){\r
+                                               elmIframe.onload = null;\r
+                                               ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();\r
+                                               elmProgress.innerHTML = 'success!';\r
+                                               setTimeout( clickCancel , 1000);\r
+                                               isUploading = false;\r
+                                       }\r
+               \r
+               function detectForm(){\r
+                       elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];\r
+                       if( elmForm){\r
+                               var _inputList = elmForm.getElementsByTagName( 'input' ),\r
+                                       _input;\r
+                               for( var i=0, l= _inputList.length; i<l; ++i){\r
+                                       _input = _inputList[ i ];\r
+                                       if( _input.type === 'submit'){\r
+                                               _input.style.display = 'none';\r
+                                       }\r
+                               }\r
+                               window.clearInterval( timer);\r
+                               timer = null;\r
+                               pettanr.util.createIframe( TARGET_FRAME_NAME, onCreateIframe);\r
+                               elmProgress.innerHTML = 'create iframe';\r
+                       }\r
+               }\r
+               function onCreateIframe( _iframe ){\r
+                       elmContainer.appendChild( _iframe );\r
+                       elmIframe = _iframe;\r
+                       elmForm.target = _iframe.name;\r
+                       elmProgress.innerHTML = '';\r
+                       ARTIST_CONSOLE.onWindowResize( windowW, windowH );\r
+               }\r
+               /*\r
+                * \r
+                */\r
+               function clickCancel(){\r
+                       if( isUploading === true) return false;\r
+                       pettanr.overlay.hide();\r
+                       ARTIST_CONSOLE.onClose();\r
+                       return false;\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               this.jqWrap = jqWrap = $( '#artist-console-wrapper').hide();\r
+                               $( '#artist-console-post-button').click( clickOK );\r
+                               $( '#artist-console-cancel-button').click( clickCancel );\r
+\r
+                               delete ARTIST_CONSOLE.init;\r
+                       },\r
+                       jqWrap: null,\r
+                       show: function( w, h){\r
+                               /*\r
+                                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.\r
+                                */                             \r
+                               elmScript = document.createElement( 'script');\r
+                               elmScript.type = 'text\/javascript';\r
+                               elmScript.src = pettanr.CONST.REGISTER_ARTIST_JS;\r
+                               document.body.appendChild( elmScript);\r
+                               \r
+                               jqWrap.show();\r
+                               pettanr.overlay.show( ARTIST_CONSOLE );\r
+\r
+                               if( timer === null){\r
+                                       timer = window.setInterval( detectForm, 250 );\r
+                               }\r
+                               \r
+                               elmProgress.innerHTML = 'loading form.';\r
+                               \r
+                               ARTIST_CONSOLE.onWindowResize( w, h );\r
+                       },\r
+                       onWindowResize: function( _windowW, _windowH ){\r
+                               windowW = _windowW;\r
+                               windowH = _windowH;\r
+                               jqWrap.css(\r
+                                       {\r
+                                               left:   Math.floor( ( _windowW -jqWrap.width()) /2),\r
+                                               top:    Math.floor( ( _windowH -jqWrap.height()) /2)\r
+                                       }\r
+                               );\r
+                       },\r
+                       onClose: function(){\r
+                               elmForm !== null && $( elmContainer.children ).remove();\r
+                               elmForm = elmIframe = null;\r
+                               isUploading = false;\r
+                               \r
+                               if( elmScript !== null ){\r
+                                       document.body.removeChild( elmScript);\r
+                                       elmScript = null;                                       \r
+                               }\r
+                               if( timer !== null){\r
+                                       window.clearInterval( timer);\r
+                                       timer = null;\r
+                               }\r
+                               jqWrap.hide();\r
+                       },\r
+                       ID: ID\r
+               }\r
+       })();\r
+       \r
+       return {\r
+               init: function(){\r
+                       ARTIST_CONSOLE.init();\r
+                       delete pettanr.comicConsole.init;\r
+               },\r
+               onOpen: function( _w, _h, _option ){\r
+                       \r
+               },\r
+               onClose: function(){\r
+                       \r
+               },\r
+               onWindowResize: function( _windowW, _windowH){\r
+               },\r
+               _quickAccessShow: function(){\r
+                       jqWindow = pettanr.jqWindow();\r
+                       var w = jqWindow.width(),\r
+                               h = jqWindow.height();\r
+                       ARTIST_CONSOLE.show( w, h);\r
+               }\r
+       }\r
+})();
\ No newline at end of file