OSDN Git Service

pettanr 0.4.1
authoritozyun <itozyun@git.sourceforge.jp>
Sun, 29 Jan 2012 11:30:15 +0000 (20:30 +0900)
committeritozyun <itozyun@git.sourceforge.jp>
Sun, 29 Jan 2012 11:30:15 +0000 (20:30 +0900)
0.4.x/common.css
0.4.x/common.js
0.4.x/icons.gif [deleted file]
0.4.x/system.js
0.4.x/work.css
0.4.x/work.html
0.4.x/work.js

index cddf53b..b1cabcb 100644 (file)
@@ -3,7 +3,7 @@
  * \r
  *   common.css\r
  * \r
- *   version 0.1.0\r
+ *   version 0.4.1\r
  *\r
  */\r
 \r
@@ -464,7 +464,7 @@ version: 2.7.0
        \r
        img.img-flip-h { /* 左右反転 */\r
                transform:                              scale( -1, 1);\r
-               -o-transform:                   scaleX( -1, 1);\r
+               -o-transform:                   scale( -1, 1);\r
                -ms-transform:                  scale( -1, 1);\r
                -moz-transform:                 scale( -1, 1);\r
                -webkit-transform:              scale( -1, 1);\r
@@ -479,7 +479,7 @@ version: 2.7.0
        \r
        img.img-flip-vh { /* 上下左右反転 */\r
                transform:                              scale( -1, -1);\r
-               -o-transform:                   scaleY( -1, -1);\r
+               -o-transform:                   scale( -1, -1);\r
                -ms-transform:                  scale( -1, -1);\r
                -moz-transform:                 scale( -1, -1);\r
                -webkit-transform:              scale( -1, -1);\r
index e067704..5424edb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR common.js\r
- *   version 0.1.0\r
+ *   version 0.4.1\r
  * \r
  * author: itozyun\r
  */\r
@@ -40,7 +40,7 @@ var pettanr = ( function(){
                IS_DEBUG = IS_LOCAL === true || URL_PARAMS.debug === true,\r
                jqWindow , jqDocument , jqBody;\r
        return {\r
-               version: '0.4.0',\r
+               version: '0.4.1',\r
                init: function(){\r
                        jqWindow = $( window);\r
                        jqDocument = $( document);\r
@@ -329,7 +329,7 @@ pettanr.util = ( function(){
                                                return;\r
                                        }\r
                                }\r
-                               img = document.createElement( 'IMG'); //var img = new Image(); ではieでimgのsizeが取れない、、、removeChildも失敗し、imgSizeGetterにimgが残る\r
+                               img = document.createElement( 'img'); //var img = new Image(); ではieでimgのsizeが取れない、、、removeChildも失敗し、imgSizeGetterにimgが残る\r
                                img.finish = false;\r
                                img.onabort = img.onerror = function() {\r
                                        if (img.finish) { return; }\r
@@ -524,13 +524,14 @@ pettanr.ua = ( function(){
 pettanr.CONST = ( function(){\r
        var isLocal = pettanr.LOCAL === true || pettanr.URL_PARAMS.exjson === false;\r
        return {\r
-               ORIGINAL_PICTURES_JSON_URL: ( isLocal === true ? 'images\/' : 'http:\/\/pettanr.heroku.com\/') + 'original_pictures.json'\r
+               URL_ORIGINAL_PICTURES_JSON: ( isLocal === true ? 'json\/' : 'http:\/\/pettanr.heroku.com\/') + 'original_pictures.json',\r
+               URL_PANELS_JSON:                        ( isLocal === true ? 'json\/' : 'http:\/\/pettanr.heroku.com\/') + 'panels.json'\r
        }\r
 })();\r
 \r
 \r
 pettanr.view = ( function(){\r
-       /* create iframe overlay of user console */\r
+       /* create iframe overlay for user console */\r
        var location = document.location.pathname,\r
                isWorkPage = location.indexOf( '\/work.html') !== -1 || location.indexOf( '\work.html') !== -1,\r
                deep =  location.indexOf( '\/diary\/') !== -1 ||\r
@@ -543,12 +544,12 @@ pettanr.view = ( function(){
        if( isWorkPage === false){\r
                LoginUserNavi = ( function(){\r
                        var _body = document.body,\r
-                               _root = document.getElementsByTagName( 'HTML')[ 0],\r
+                               _root = document.getElementsByTagName( 'html')[ 0],\r
                                filter,\r
                                iframe, visible = false;\r
                        return {\r
                                init: function( viewIndex){\r
-                                       filter = document.createElement( 'DIV');\r
+                                       filter = document.createElement( 'div');\r
                                        filter.style.position = 'absolute';\r
                                        filter.style.left = filter.style.top = '0px';\r
                                        filter.style.width = filter.style.height ='100%';\r
@@ -1172,7 +1173,7 @@ pettanr.key = ( function(){
                                index = EDITABLE_TEXT_TABLE[ GROUP_ID].length,\r
                                instance,\r
                                enabled = true,\r
-                               A = $( '<a href="#" onclick="return false;"></a>').html( value).click( function(e){\r
+                               A = $( '<a href="#"></a>').html( value).click( function(e){\r
                                        instance = instance || EDITABLE_TEXT_TABLE[ GROUP_ID][ index];\r
                                        EDITABLE_TEXT_CONTROL.start( instance);                                                         \r
                                        A.hide();\r
@@ -1435,6 +1436,161 @@ pettanr.key = ( function(){
        }\r
 })();\r
 \r
+/*\r
+ * pettanr.form\r
+ * \r
+ * keyEventRellay\r
+ *  form -> overlay -> view\r
+ * 
+ */\r
+pettanr.form = ( function(){\r
+       var     FORM_GROUP_TABLE = {},\r
+               currentID = null,\r
+               currentItem = null,\r
+               ELM_INPUT_TEXT = document.createElement( 'input');\r
+       ELM_INPUT_TEXT.type = 'text';\r
+               \r
+       var InputTextClass = function( WRAPPER_ELM, ON_UPDATE_FUNCTION, GROUP_ID, validater){\r
+               validater = typeof validater === 'function' ? validater : null;\r
+               \r
+               var elmValue,\r
+                       value,\r
+                       index = EDITABLE_TEXT_TABLE[ GROUP_ID].length,\r
+                       instance,\r
+                       focus = false,\r
+                       visible = true,\r
+                       enabled = true,\r
+                       elmA;\r
+               var _nodes = WRAPPER_ELM.getElementsByTagName('*'),\r
+                       l = nodes.length,\r
+                       _elm;\r
+               for(var i=0; i<l; ++i){\r
+                       _elm = _nodes[ i];\r
+                       if( _elm.nodeType === 1 && _elm.className.indexof('editable-value') !== -1){\r
+                               elmValue = _elm;\r
+                       }\r
+               }\r
+               if( elmValue === undefined){\r
+                       alert( 'error!');\r
+               }\r
+               value = elmValue.innerHTML;\r
+               elmValue.className += ' editable-text';\r
+               \r
+               elmA = elmAOrigin.cloneNode( true);\r
+               elmValue.appendChild( elmA);\r
+               elmA.onclick = onClick;\r
+               \r
+               function onClick(){\r
+                       start( instance);\r
+                       elmA.style.display = 'none';\r
+                       elmValue.appendChild( ELM_INPUT_TEXT);\r
+                       ELM_INPUT_TEXT.value = value;\r
+                       ELM_INPUT_TEXT.focus();\r
+                       ELM_INPUT_TEXT.select();\r
+                       return false;\r
+               }\r
+               \r
+               return {\r
+                       init: function(){\r
+                               instance = this;\r
+                               delete this.init;\r
+                       },\r
+                       update: function( _value){\r
+                               value = _value !== undefined ? _value : value;\r
+                               //A.html( value);\r
+                               //jqInput && jqInput.val( value);\r
+                               currentText === instance && this.finish();\r
+                       },\r
+                       start: function(){\r
+                               onClick();\r
+                       },\r
+                       finish: function( keep){\r
+                               var _newValue = ELM_INPUT_TEXT.value,\r
+                                       _validated = validater !== null ? '' + validater( _newValue) : _newValue;\r
+                               _newValue = keep !== true ? _validated : value;\r
+\r
+                               elmValue.removeChild( ELM_INPUT_TEXT);\r
+                               \r
+                               elmA.innerHTML = _newValue;\r
+                               elmA.style.display = 'block';\r
+                               \r
+                               ON_UPDATE_FUNCTION && _newValue !== value && ON_UPDATE_FUNCTION( _newValue, value);\r
+                               finish( instance);                                      \r
+                       },\r
+                       enabled: function(){\r
+                               return enabled;\r
+                       },\r
+                       index : index,\r
+                       groupID: GROUP_ID\r
+               }\r
+       }\r
+\r
+\r
+       function start( _currentItem){\r
+               currentItem !== _currentItem && currentItem && currentItem.finish();\r
+               currentItem = _currentItem;\r
+       }\r
+       function finish( _currentItem){\r
+               if( currentItem !== _currentItem) return;\r
+               currentItem = null;\r
+       }\r
+       function keyEventRellay( e){\r
+               if( e.type === 'keyup') return false;\r
+               if( currentItem === null) return false;\r
+               \r
+               var keyCode = e.keyCode;\r
+               if( keyCode === 13 || keyCode === 27 || keyCode === 9 || keyCode === 18 || e.altKey === true){ // 13.return 27.esc 9.tab 18.alt\r
+                       var _groupID = currentItem.groupID,\r
+                               _index = currentItem.index;\r
+                       currentItem.finish( keyCode === 27);\r
+                       keyCode === 9 && _groupID && tabShift( _groupID, _index, e.shiftKey === true ? -1 : 1);\r
+                       keyCode === 13 && _groupID && tabShift( _groupID, _index, 1);\r
+               }\r
+               return true;\r
+       }\r
+       function tabShift( _groupID, _index, _way){\r
+               var GROUP_ARRAY = EDITABLE_TEXT_TABLE[ _groupID] || [],\r
+                       l = GROUP_ARRAY.length,\r
+                       i = _index +_way;\r
+               if( l < 2) return;\r
+               while( i !== _index){\r
+                       i = i < 0 ?\r
+                               l -1 :\r
+                               i === l ? 0 : i; // 0 < i < l\r
+                       if( GROUP_ARRAY[ i].enabled() === true) break;\r
+                       i += _way;\r
+               }\r
+               if( i === _index) return;\r
+               setTimeout( GROUP_ARRAY[ i].start, 0);\r
+       }\r
+\r
+       return {\r
+               init: function(){},\r
+               focus: function(){\r
+                       return currentItem !== null; \r
+               },\r
+               createInputText: function( _elm, _onUpdate, _groupID, _validater){\r
+                       if( _groupID && !FORM_GROUP_TABLE[ _groupID]){\r
+                               FORM_GROUP_TABLE[ _groupID] = [];\r
+                       }\r
+                       var ret = new InputTextClass( _elm, _onUpdate, _groupID, _validater);\r
+                       ret.init();\r
+                       _groupID && FORM_GROUP_TABLE[ _groupID].push( ret);\r
+                       return ret;\r
+               },\r
+               createCheckBox: function(){\r
+                       \r
+               },\r
+               createButton: function(){\r
+                       \r
+               },\r
+               createListBox: function(){\r
+                       \r
+               }\r
+       }\r
+})();\r
+\r
+\r
 /* ----------------------------------------\r
  * Vector Support\r
  * \r
diff --git a/0.4.x/icons.gif b/0.4.x/icons.gif
deleted file mode 100644 (file)
index 4759cc8..0000000
Binary files a/0.4.x/icons.gif and /dev/null differ
index b1f1a2d..973291b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR system.js
- *   version 0.4.0
+ *   version 0.4.1
  *   
  * author:
  *   itozyun
@@ -38,12 +38,11 @@ pettanr.file = ( function(){
        var TREE_TYPE_IS_COMIC = 1,
                TREE_TYPE_IS_IMAGE = 2,
                FILE_TYPE_IS_FOLDER = 1,
-               FILE_TYPE_IS_FOLDER_FOR_PANEL = 2,
-               FILE_TYPE_IS_FOLDER_FOR_IMAGE = 3,
-               FILE_TYPE_IS_PANEL = 10,
-               FILE_TYPE_IS_IMAGE = 11,
-               FILE_TYPE_IS_HTML = 12,
-               FILE_TYPE_IS_SETTING = 13,
+               FILE_TYPE_IS_COMIC = 10,
+               FILE_TYPE_IS_PANEL = 11,
+               FILE_TYPE_IS_IMAGE = 20,
+               FILE_TYPE_IS_HTML = 30,
+               FILE_TYPE_IS_SETTING = 40,
                FOLDER_TYPE_IS_COMIC = 1,
                FILE_STATE_IS_UNKNOWN = 0,
                FILE_STATE_IS_OK = 1,
@@ -100,6 +99,7 @@ pettanr.file = ( function(){
                                        _ticket.onLoad( _ticket.data, _data);
                                },
                                error:          function(){
+                                       ++numError;
                                        _ticket.onError( _ticket.data);
                                }
                        });
@@ -122,6 +122,8 @@ pettanr.file = ( function(){
                }
        })();
 
+
+
        var FILE_CONTROLER = ( function(){
                var EVENT_LISTENER_RESISTER = [],
                        TREE_ARRAY = [],
@@ -137,7 +139,9 @@ pettanr.file = ( function(){
                                },
                                EVENT_LISTENER_ARRAY = [],
                                rootFile,
+                               rootFileData,
                                currentFile,
+                               currentFileData,
                                instance;
                                
                        TREE_ACCESS_ARRAY.push( ACCESS);
@@ -227,13 +231,23 @@ pettanr.file = ( function(){
                /**
                 * _access.DATA === FILEDATA_RESITER[uid]
                 */
-               function getFileDataAccess( UIDorFILE){
+               function getFileDataAccess( UIDorFILEorFILEDATA){
                        var l = FILEDATA_ACCESS.length,
-                               _file = typeof UIDorFILE === 'number' ? FILEDATA_RESITER[ UIDorFILE] : UIDorFILE,
-                               _uid = _file && _file.getUID ? _file.getUID() : -1,
-                               _data = _uid !== -1 ? FILEDATA_RESITER[ _uid] : null,
+                               _uid,
+                               _data,
                                _access;
-                       if( _data === null) return null;
+                       
+                       if( typeof UIDorFILEorFILEDATA === 'number'){
+                               _data = FILEDATA_RESITER[ UIDorFILEorFILEDATA] || null;
+                       } else
+                       if( UIDorFILEorFILEDATA.getUID){
+                               _uid = UIDorFILEorFILEDATA.getUID();
+                               _data = FILEDATA_RESITER[ _uid] || null;
+                       } else {
+                               _data = UIDorFILEorFILEDATA;
+                       }
+                       
+                       if( _data === null || !_data) return null;
                        for(var i=0; i<l; ++i){
                                _access = FILEDATA_ACCESS[ i];
                                if( _access.DATA === _data) return _access;
@@ -258,43 +272,42 @@ pettanr.file = ( function(){
                                _data.children = [];
                        }
                        var _children = _data.children,
+                               _childType = _data.childType,
                                _newData,
                                _rFolderData,
-                               _artistFolderData = getFolderDataByResourceID( 'Artists', buildResourceID( _data.json, 'artist'), true),
-                               _artistFolder = new FileClass( SYSTEM_TREE, _file, _artistFolderData);
-                       if( !_artistFolderData.children){
-                               _artistFolderData.children = [];
-                       }
-                       if( _file.isChildFile( _artistFolderData) === false){
-                               _children.push( _artistFolderData);
-                       }
+                               _artistFolderData, _artistFolder,
+                               _comicFolderData, _comicFolder,
+                               _authorFolderData, _authorFolder;
+
                        for(var i=0; i<l; ++i){
-                               _newData = buildFileData( _json[ i], _data.json);
-                               FILEDATA_RESITER.push( _newData);
-                               //_children.push( _newData);
+                               _newData = buildFileData( _json[ i], _data.json, _childType);
                                if( _newData.rID){
-                                       _rFolderData = getFolderDataByResourceID( 'Pictures', buildResourceID( _data.json, 'img'), true);
-                                       if( _file.isChildFile( _rFolderData) === false){
-                                               _children.push( _rFolderData);
-                                       }
-                                       if( !_rFolderData.children){
-                                               _rFolderData.children = [];
-                                       }
+                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _data.json, _childType), _childType, _file);
                                        _rFolderData.children.push( _newData);
                                }
                                if( _newData.artist){
-                                       _rFolderData = getFolderDataByResourceID( _newData.artist.name, buildResourceID( _artistFolderData.rID, _newData.artist.id), true);
-                                       if( _artistFolder.isChildFile( _rFolderData) === false){
-                                               _artistFolderData.children.push( _rFolderData);
-                                       }
-                                       if( !_rFolderData.children){
-                                               _rFolderData.children = [];
-                                       }
+                                       _artistFolderData = _artistFolderData || getFolderDataByResourceID( buildResourceID( _data.json, 'artist'), 'Artists', _file);
+                                       _artistFolder = _artistFolder || new FileClass( SYSTEM_TREE, _file, _artistFolderData);
+                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _artistFolderData.rID, '' +_newData.artist.id), _newData.artist.name, _artistFolder);
+                                       _rFolderData.children.push( _newData);
+                               }
+                               if( _newData.comic){
+                                       _comicFolderData = _comicFolderData || getFolderDataByResourceID( buildResourceID( _data.json, 'comic'), 'Comics', _file);
+                                       _comicFolder = _comicFolder || new FileClass( SYSTEM_TREE, _file, _comicFolderData);
+                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _comicFolderData.rID, '' +_newData.comic.id), _newData.comic.title, _comicFolder);
+                                       _rFolderData.children.push( _newData);
+                               }       
+                               if( _newData.author){
+                                       _authorFolderData = _authorFolderData || getFolderDataByResourceID( buildResourceID( _data.json, 'author'), 'Author', _file);
+                                       _authorFolder = _authorFolder || new FileClass( SYSTEM_TREE, _file, _authorFolderData);
+                                       _rFolderData = getFolderDataByResourceID( buildResourceID( _authorFolderData.rID, '' +_newData.author.id), _newData.author.name, _authorFolder);
                                        _rFolderData.children.push( _newData);
                                }
                        }
                        delete _data.json;
-                       _artistFolder.collect();
+                       _artistFolder && _artistFolder.collect();
+                       _comicFolder && _comicFolder.collect();
+                       _authorFolder && _authorFolder.collect();
                        _access.fileEventChatcher( new FileEventClass( FILE_EVENT_GET_SEQENTIAL_FILES, _file, 'children', null));
                }
                function onErrorJson( _file){
@@ -304,39 +317,90 @@ pettanr.file = ( function(){
                                _data.state = FILE_STATE_IS_ERROR;
                        }
                }
-               function buildFileData( _data, _url){
+               function buildFileData( _data, _url, _type){
                        if( !_data.name){
                                _data.name = [ _data.id, _data.ext].join( '.');
                        }
-                       _data.type = FILE_TYPE_IS_IMAGE;
-                       _data.thumbnail = 'thumbnail/' + _data.name;
+                       _data.type = _type;
+                       
+                       if( _type === FILE_TYPE_IS_IMAGE){
+                               _data.thumbnail = 'thumbnail/' + _data.name;
+                       }
                        
-                       var _rID = buildResourceID( _url, 'img');
+                       var _rID = buildResourceID( _url, _type);
                        if( _rID !== null){
                                _data.rID = _rID + _data.id;
                                FILEDATA_HAS_rID_RESISTER[ _data.rID] = _data;
                        }
+                       
+                       FILEDATA_RESITER.push( _data);
+                       
                        return _data;
                }
                function buildResourceID( _url, _type){
                        if( _url === null) return null;
-                       return [ _url.replace(/https?:\/\/([^\/]*).*/, '$1'), _type].join('_');
+                       var _typeStr;
+                       
+                       if( typeof _type !== 'number'){
+                               _typeStr = _type
+                       } else
+                       if( _type === FILE_TYPE_IS_IMAGE){
+                               _typeStr = 'image';
+                       } else
+                       if( _type === FILE_TYPE_IS_COMIC){
+                               _typeStr = 'comic';
+                       }
+                       if( _type === FILE_TYPE_IS_PANEL){
+                               _typeStr = 'panel';
+                       }
+                       return [ _url.replace(/https?:\/\/([^\/]*).*/, '$1'), _typeStr].join('_');
                }
        /**
-        * getFileByResourceID( id, create)
+        * getFileByResourceID( _rID, opt_name, opt_folder)
+        * opt 指定で 新しいフォルダの作成
         * rID を持つ Object は {} にも格納.
         */
-               function getFolderDataByResourceID( _name, _rID, _create){
+               function getFolderDataByResourceID( _rID, opt_name, opt_folder){
                        if( FILEDATA_HAS_rID_RESISTER[ _rID]){
                                return FILEDATA_HAS_rID_RESISTER[ _rID];
                        }
+                       if( !opt_name && !opt_folder) return;
+                       
+                       var _fileName;
+                       
+                       if( typeof opt_name === 'string'){
+                               _fileName = opt_name;
+                       } else
+                       if( opt_name === FILE_TYPE_IS_IMAGE){
+                               _fileName = 'Pictures';
+                       } else
+                       if( opt_name === FILE_TYPE_IS_COMIC){
+                               _fileName = 'Comics';
+                       } else
+                       if( opt_name === FILE_TYPE_IS_PANEL){
+                               _fileName = 'Panels';
+                       } else {
+                               _fileName = opt_name.toString();
+                       }
+                       
                        var _newData = {
-                               name:           _name,
+                               name:           _fileName,
                                type:           FILE_TYPE_IS_FOLDER,
-                               rID:            _rID
+                               rID:            _rID,
+                               children:       []
                        };
                        FILEDATA_RESITER.push( _newData);
                        FILEDATA_HAS_rID_RESISTER[ _rID] = _newData;
+                       
+                       if( opt_folder && opt_folder.isChildFile( _newData) === false){
+                               var _access = getFileDataAccess( opt_folder),
+                                       _data = _access !== null ? _access.DATA : null;
+                               _access === null && alert( _rID)
+                               if( _data !== null){
+                                       _data.children.push( _newData);
+                               }
+                       }
+                       
                        return _newData;
                }
                
@@ -359,6 +423,13 @@ pettanr.file = ( function(){
                                var _access = getFileDataAccess( _file);
                                return _access !== null ? _access.DATA : null;
                        },
+                       getUID: function ( _filedata){
+                               var l = FILEDATA_RESITER.length;
+                               for( var i=0; i<l; ++i){
+                                       if( FILEDATA_RESITER[ i] === _filedata) return i;
+                               }
+                               return -1;
+                       },
                        getSeqentialFiles: function( _file){
                                var _data = this.getFileData( _file),
                                        _json = _data ? _data.json : null;
@@ -436,10 +507,16 @@ pettanr.file = ( function(){
                        data.children = [];
                }
                var TYPE = data.type,
-                       UID = FILEDATA_ACCESS.length,
+                       uid = FILE_CONTROLER.getUID( data),
                        CHILDREN = data.children,
                        instance;
                
+               if( uid === -1){
+                       //alert( 'invalid uid');
+                       uid = FILEDATA_RESITER.length;
+                       FILEDATA_RESITER.push( data);
+               }
+               
                FILEDATA_ACCESS.push(
                        {
                                TYPE:                           TYPE,
@@ -474,7 +551,7 @@ pettanr.file = ( function(){
                                return data.thumbnail || null;
                        },
                        getUID: function(){
-                               return UID;
+                               return uid;
                        },
                        getState: function(){
                                return data.state !== undefined ? data.state : FILE_STATE_IS_OK;
@@ -557,20 +634,32 @@ pettanr.file = ( function(){
                IMAGE_FILEDATA = {
                        name:           'image root',
                        type:           FILE_TYPE_IS_FOLDER,
-                       json:           pettanr.CONST.ORIGINAL_PICTURES_JSON_URL,
+                       json:           pettanr.CONST.URL_ORIGINAL_PICTURES_JSON,
                        children:       [
                                {
                                        name:           'My Pictures',
                                        type:           FILE_TYPE_IS_FOLDER,
-                                       children:       []
+                                       children:       [],
+                                       childType:      FILE_TYPE_IS_IMAGE
                                }
-                       ]
+                       ],
+                       childType:      FILE_TYPE_IS_IMAGE
                },
                COMIC_FILEDATA = {
                        name:           'comic root',
-                       type:           FILE_TYPE_IS_FOLDER
+                       type:           FILE_TYPE_IS_FOLDER,
+                       json:           pettanr.CONST.URL_PANELS_JSON,
+                       children:       [
+                               {
+                                       name:           'My Comics',
+                                       type:           FILE_TYPE_IS_FOLDER,
+                                       children:       [],
+                                       childType:      FILE_TYPE_IS_COMIC
+                               }
+                       ],
+                       childType:      FILE_TYPE_IS_PANEL
                };
-       FILEDATA_RESITER.push( ROOT_FILEDATA, IMAGE_FILEDATA, IMAGE_FILEDATA.children[0], COMIC_FILEDATA);
+       //FILEDATA_RESITER.push( ROOT_FILEDATA, IMAGE_FILEDATA, IMAGE_FILEDATA.children[0], COMIC_FILEDATA);
        ROOT_FILEDATA.children.push( COMIC_FILEDATA, IMAGE_FILEDATA);
 
        var SYSTEM_TREE = FILE_CONTROLER.createTree( ROOT_FILEDATA),
@@ -616,7 +705,13 @@ pettanr.finder = ( function(){
                        ELM_WRAPPER = ELM_ORIGIN_FINDER_ICON.cloneNode( true),
                        ELM_THUMBNAIL = ELM_WRAPPER.getElementsByTagName( 'div')[0],
                        ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'div')[1],
-                       file, w, index, style, instansce;
+                       file, w, index, style, instansce, callback;
+               
+               ELM_WRAPPER.onclick = onClick;
+               function onClick(){
+                       callback( index);
+               }
+
                
                function draw(){
                        var _thumb = file.getThumbnail();
@@ -639,7 +734,7 @@ pettanr.finder = ( function(){
                }
                
                return {
-                       init: function( _file, _elmContainer, _w, _index, _style){
+                       init: function( _file, _elmContainer, _w, _index, _style, _callback){
                                instansce = this;
                                if( elmContainer !== _elmContainer){
                                        _elmContainer.appendChild( ELM_WRAPPER);
@@ -653,6 +748,7 @@ pettanr.finder = ( function(){
                                        index = _index;
                                        resize();
                                }
+                               callback = _callback;
                        },
                        elm: ELM_WRAPPER,
                        index: function( _index){
@@ -680,8 +776,9 @@ pettanr.finder = ( function(){
                var elmContainer,
                        ELM_WRAPPER = ELM_ORIGIN_FINDER_LOCATION_ITEM.cloneNode( true),
                        ELM_FILENAME = ELM_WRAPPER.getElementsByTagName( 'a')[0],
-                       file, w, index, instansce;
-
+                       file, w, index, instansce,
+                       callback;
+               ELM_WRAPPER.onclick = onClick;
                function draw(){
                        ELM_FILENAME.className = 'file-icon-' +file.TYPE();
                        ELM_FILENAME.innerHTML = file.getName();
@@ -689,9 +786,12 @@ pettanr.finder = ( function(){
                function resize( index){
                        ELM_WRAPPER.style.left = (index * 90) +'px';
                }
+               function onClick(){
+                       callback( index);
+               }
 
                return {
-                       init: function( _file, _elmContainer, _index){
+                       init: function( _file, _elmContainer, _index, _callback){
                                instansce = this;
                                if( elmContainer !== _elmContainer){
                                        _elmContainer.appendChild( ELM_WRAPPER);
@@ -705,6 +805,7 @@ pettanr.finder = ( function(){
                                        index = _index;
                                        resize( index);
                                }
+                               callback = _callback;
                        },
                        elm: ELM_WRAPPER,
                        index: function( _index){
@@ -754,9 +855,9 @@ pettanr.finder = ( function(){
                        for(var i=0; i<l; ++i){
                                _file = i !== l-1 ? tree.getParentFileAt( i) : tree.getCurrentFile();
                                if( i < m){
-                                       BREAD_ARRAY[ i].init( _file, elmLocation, i);
+                                       BREAD_ARRAY[ i].init( _file, elmLocation, i, onHeadClick);
                                } else {
-                                       BREAD_ARRAY.push( getBreadcrumb( _file, elmLocation, i));
+                                       BREAD_ARRAY.push( getBreadcrumb( _file, elmLocation, i, onHeadClick));
                                }
                        }
                        while( l < BREAD_ARRAY.length){
@@ -768,20 +869,17 @@ pettanr.finder = ( function(){
 
                        for( i=0; i<l; ++i){
                                if( i < m){
-                                       ICON_ARRAY[ i].init( _file.getChildFileByIndex( i), elmBody, w, i, style);
+                                       ICON_ARRAY[ i].init( _file.getChildFileByIndex( i), elmBody, w, i, style, onBodyClick);
                                } else {
-                                       ICON_ARRAY.push( getFinderIcon( _file.getChildFileByIndex( i), elmBody, w, i, style));
+                                       ICON_ARRAY.push( getFinderIcon( _file.getChildFileByIndex( i), elmBody, w, i, style, onBodyClick));
                                }
                        }
                        while( l < ICON_ARRAY.length){
                                ICON_ARRAY.pop().collect();
                        }
                }
-               function onHeadClick( e){
-                       var _mouseX = e.pageX -headX,
-                               _mouseY = e.pageY -headY,
-                               i = Math.floor( _mouseX /breadW),
-                               l = BREAD_ARRAY.length -1;
+               function onHeadClick( i){
+                       var l = BREAD_ARRAY.length -1;
                        if( i < l){
                                var _file = tree.getParentFileAt( i);
                                if( _file !== null){
@@ -790,11 +888,8 @@ pettanr.finder = ( function(){
                                }
                        }
                }
-               function onBodyClick( e){
-                       var _mouseX = e.pageX,
-                               _mouseY = e.pageY -bodyY,
-                               i = Math.floor( _mouseY /iconH),
-                               l = ICON_ARRAY.length;
+               function onBodyClick( i){
+                       var l = ICON_ARRAY.length;
                        if( i < l){
                                var _file = tree.getCurrentFile().getChildFileByIndex( i);
                                if( _file !== null && _file.TYPE() === pettanr.file.FILE_TYPE_IS_FOLDER){
@@ -807,8 +902,8 @@ pettanr.finder = ( function(){
                return {
                        init: function(){
                                ELM_CONTAINER.appendChild( elmContainer);
-                               $( elmLocation).click( onHeadClick);
-                               $( elmContainer).click( onBodyClick);
+                               //$( elmLocation).click( onHeadClick);
+                               //$( elmContainer).click( onBodyClick);
                                var position = pettanr.util.getAbsolutePosition( elmLocation);
                                headX = position.x;
                                headY = position.y;
@@ -822,30 +917,30 @@ pettanr.finder = ( function(){
                        onClose: function(){
                                
                        },
-                       onWindowResize: function(){
+                       onWindowResize: function( _w, _h){
                                
                        }
                }
        }
-       function getFinderIcon( _file, _elmContainer, w, index, style){
+       function getFinderIcon( _file, _elmContainer, w, index, style, callback){
                var _icon;
                if( FINDER_ICON_POOL.length > 0){
                        _icon = FINDER_ICON_POOL.shift();
                } else {
                        _icon = new FinderIconClass();
                }
-               _icon.init( _file, _elmContainer, w, index, style);
+               _icon.init( _file, _elmContainer, w, index, style, callback);
                return _icon;
        }
        
-       function getBreadcrumb( _file, _elmContainer, index){
+       function getBreadcrumb( _file, _elmContainer, index, callback){
                var _bread;
                if( BREAD_OBJECT_POOL.length > 0){
                        _bread = BREAD_OBJECT_POOL.shift();
                } else {
                        _bread = new BreadcrumbClass();
                }
-               _bread.init( _file, _elmContainer, index);
+               _bread.init( _file, _elmContainer, index, callback);
                return _bread;
        }
 
@@ -863,7 +958,8 @@ pettanr.finder = ( function(){
 
 pettanr.gallery = ( function(){
        var finder,
-               elmContainer = document.getElementById( 'gallery');
+               elmContainer = document.getElementById( 'gallery'),
+               option;
                
        return {
                init: function( _option){
@@ -882,8 +978,36 @@ pettanr.gallery = ( function(){
                onClose: function(){
                        finder.onClose();
                },
-               onWindowResize: function(){
-                       finder.onWindowResize();
+               onWindowResize: function( _w, _h){
+                       finder.onWindowResize( _w, _h);
+               }
+       }
+})();
+
+pettanr.cabinet = ( function(){
+       var finder,
+               elmContainer = document.getElementById( 'cabinet'),
+               option;
+               
+       return {
+               init: function( _option){
+                       option = _option;
+                       delete pettanr.cabinet.init;
+               },
+               firstOpen: function(){
+                       finder = pettanr.finder.createFinder( elmContainer, pettanr.file.TREE_TYPE_IS_COMIC);
+                       delete pettanr.cabinet.firstOpen;
+               },
+               onOpen: function(){
+                       pettanr.cabinet.firstOpen !== undefined && pettanr.cabinet.firstOpen();
+                       finder.onOpen();
+                       
+               },
+               onClose: function(){
+                       finder.onClose();
+               },
+               onWindowResize: function( _w, _h){
+                       finder.onWindowResize( _w, _h);
                }
        }
 })();
@@ -900,5 +1024,6 @@ pettanr.fn( pettanr.editor);
 pettanr.fn( pettanr.file);
 pettanr.fn( pettanr.finder);
 pettanr.fn( pettanr.gallery);
+pettanr.fn( pettanr.cabinet);
 
 $(window).ready( pettanr.init);
index 887adb7..1c8f486 100644 (file)
@@ -3,7 +3,7 @@
  * \r
  *   work.css\r
  * \r
- *   version 0.4.0\r
+ *   version 0.4.1\r
  *\r
  */\r
        \r
        \r
        /*  panel\r
        --------------------------------------------------------------------------------------*/\r
-               #panel-border {\r
+               #panel-tools-container {\r
                        position:       absolute;\r
                        border:         2px solid #333;\r
                }\r
                                top:                            -5px;\r
                                left:                           50%;\r
                        }\r
+                       .current-resizer-is-0 #comic-element-resizer-top {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-left {\r
                                top:                            50%;\r
                                left:                           -5px;\r
                        }\r
+                       .current-resizer-is-1 #comic-element-resizer-left {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-right {\r
                                top:                            50%;\r
                                right:                          -5px;\r
                        }\r
+                       .current-resizer-is-2 #comic-element-resizer-right {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-bottom {\r
                                bottom:                         -5px;\r
                                left:                           50%;\r
                        }\r
+                       .current-resizer-is-3 #comic-element-resizer-bottom {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-top-left {\r
                                top:                            -5px;\r
                                left:                           -5px;\r
                        }\r
+                       .current-resizer-is-4 #comic-element-resizer-top-left {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-top-right {\r
                                top:                            -5px;\r
                                right:                          -5px;\r
                        }\r
+                       .current-resizer-is-5 #comic-element-resizer-top-right {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-bottom-left {\r
                                bottom:                         -5px;\r
                                left:                           -5px;\r
                        }\r
+                       .current-resizer-is-6 #comic-element-resizer-bottom-left {\r
+                               background-color:       #f66;\r
+                       }\r
                        #comic-element-resizer-bottom-right {\r
                                bottom:                         -5px;\r
                                right:                          -5px;\r
-                       }               \r
+                       }\r
+                       .current-resizer-is-7 #comic-element-resizer-bottom-right {\r
+                               background-color:       #f66;\r
+                       }\r
        /*  panel-resizer\r
        --------------------------------------------------------------------------------------*/        \r
                #panel-resizer-top,\r
                                        height:                                 25px;\r
                                        line-height:                    25px;\r
                                        float:                                  left;\r
-                                       background-image:               url(icons.gif);\r
+                                       background-image:               url('sprite.gif');\r
                                        background-repeat:              no-repeat;\r
                                        background-position:    0 0;\r
                                        cursor:                                 pointer;\r
                                }\r
                                #hide-text-tail-button {\r
-                                       background-position:    -25px -25px;\r
+                                       background-position:    -30px -30px;\r
                                }\r
                                #change-image-button,\r
                                #change-text-style-button {\r
-                                       background-position:    -25px 0;\r
+                                       background-position:    -30px 0;\r
                                }                       \r
                                #layer-back-button,\r
                                #back-text-button {\r
-                                       background-position:    -50px 0;\r
+                                       background-position:    -60px 0;\r
                                }\r
                                #layer-forward-button,\r
                                #forward-text-button {\r
-                                       background-position:    -50px -25px;\r
+                                       background-position:    -60px -30px;\r
                                }\r
                                #delete-image-button,\r
                                #delete-text-button {\r
-                                       background-position:    0 -25px;\r
+                                       background-position:    0 -30px;\r
                                }\r
                        \r
                .console-out #comic-element-consol-wrapper-when-out {\r
                        left:                           10px;\r
                        width:                          200px;\r
                        height:                         200px;\r
+                       border-bottom:          1px solid #999;\r
                        background-color:       #fff;\r
                        box-shadow:                     1px 4px 9px #333;\r
                        -moz-box-shadow:        1px 4px 9px #333;\r
                        -webkit-box-shadow:     1px 4px 9px #333;\r
                        filter:                         progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9);\r
                }\r
+\r
                        .window-header,\r
                        .window-close-button {\r
                                font-size:                              12px;\r
                                text-align:                             center;\r
                                padding-top:                    8px;\r
                                padding-bottom:                 6px;\r
-                               background-color:               #333;                                   \r
+                               background-color:               #333;\r
                        }\r
                                .window-close-button {\r
                                        position:                               absolute;\r
                        }\r
                        .window-body {\r
                                position:                               relative;\r
-                               overflow:                               hidden;\r
                                border-left:                    1px solid #aaa;\r
                                *border-left:                   1px solid #ccc;\r
                                border-right:                   1px solid #999;\r
-                               border-bottom:                  1px solid #999;\r
                        }\r
 \r
                        html>/**/body .window-body {  \r
                                border-left /***/:              1px solid #ccc\9;\r
                        }\r
 \r
-                       .window-resize-button {\r
+                       .window-footer {\r
+                               width:                                  100%;\r
+                               height:                                 20px;\r
+                               background-color:               #333;\r
                                position:                               absolute;\r
+                               left:                                   0;\r
                                bottom:                                 0;\r
-                               right:                                  0;\r
-                               border-bottom:                  20px solid #aaa;\r
-                               border-left:                    20px solid transparent;\r
-                               _border-left:                   20px solid #fff;\r
-                               line-height:                    0;\r
-                               height:                                 0;\r
-                               width:                                  0;\r
-                               text-indent:                    -9999px;\r
-                               text-align:                             center;\r
-                               cursor:                                 pointer;\r
                        }\r
+                               .window-resize-button {\r
+                                       position:                               absolute;\r
+                                       top:                                    0;\r
+                                       right:                                  0;\r
+                                       background-image:               url('sprite.gif');\r
+                                       background-repeat:              no-repeat;\r
+                                       background-position:    -70px -60px;\r
+                                       width:                                  20px;\r
+                                       height:                                 20px;\r
+                                       line-height:                    20px;\r
+                                       text-indent:                    -9999px;\r
+                                       text-align:                             center;\r
+                                       cursor:                                 pointer;\r
+                               }\r
                        \r
                        /*\r
                         * page contents\r
                .finder-icon .file-type-2 {\r
                        background-image:                       url('folder_album.png');\r
                }\r
+               .finder-icon .file-type-11 {\r
+                       background-image:                       url('folder_album.png');\r
+               }               \r
                .has-thumbnail {\r
                        background-image:                       url('folder_album.png');\r
                }\r
index 72b0544..f057975 100644 (file)
@@ -51,6 +51,7 @@
                                        <h2>Wellcome to pettanR!</h2>\r
                                        <p>Hello, xxxxx.</p>\r
                                        <p>This page is login user console.</p>\r
+                                       <a href="#" onclick="pettanr.view.show('editor')">boot editor</a>\r
                                </div>\r
                                \r
                        <!-- setting -->\r
@@ -94,7 +95,6 @@
                        \r
                <!-- comic list -->\r
                        <div id="cabinet" class="console-page">\r
-                               <a onclick="pettanr.view.show( 'editor');return false;" href="#">Edit This panel</a>\r
                                <div id="cabinet-container" class="finder-container"></div>\r
                        </div>\r
                        \r
                                <div id="whiteGlass-bottom"></div>\r
                        </div>\r
                        \r
-               <!-- コマの枠の表示 -->\r
-                       <div id="panel-border">\r
+               <!-- コマ操作ツール-->\r
+                       <div id="panel-tools-container">\r
                        <!-- コマの高さの変更ボタン -->\r
                                <div id="panel-resizer-top">▲</div>\r
                                <div id="panel-resizer-bottom">▼</div>\r
                                                <div id="comic-element-consol-tail"></div>\r
                                                <div id="comic-element-consol-wrapper-when-out">\r
                                                        <div id="image-element-consol">\r
-                                                               <div id="change-image-button"></div>\r
-                                                               <div id="layer-back-button">&lt;B</div>\r
-                                                               <div id="delete-image-button">x</div>\r
-                                                               <div id="layer-forward-button">F&gt;</div>\r
+                                                               <div id="change-image-button"></div>\r
+                                                               <div id="layer-back-button"></div>\r
+                                                               <div id="delete-image-button"></div>\r
+                                                               <div id="layer-forward-button"></div>\r
                                                        </div>\r
                                                        <div id="text-element-consol">\r
-                                                               <div id="edit-text-button">E</div>\r
-                                                               <div id="change-text-style-button"></div>\r
-                                                               <div id="back-text-button">&lt;B</div>\r
-                                                               <div id="delete-text-button">x</div>\r
-                                                               <div id="hide-text-tail-button">x{</div>\r
-                                                               <div id="forward-text-button">F&gt;</div>\r
+                                                               <div id="edit-text-button"></div>\r
+                                                               <div id="change-text-style-button"></div>\r
+                                                               <div id="back-text-button"></div>\r
+                                                               <div id="delete-text-button"></div>\r
+                                                               <div id="hide-text-tail-button"></div>\r
+                                                               <div id="forward-text-button"></div>\r
                                                        </div>\r
                                                </div>\r
                                        </div>\r
                                        <div class="window-close-button">x</div>\r
                                        <div class="window-body clearfix">\r
                                                <div class="window-body-insert-position"></div>\r
+                                       </div>\r
+                                       <div class="window-footer">\r
                                                <div class="window-resize-button">/</div>\r
                                        </div>\r
                                </div>\r
                                <div id="toolbox-popup-help-button">?</div>\r
                                <div id="toolbox-post-button">post</div>\r
                        </script>\r
-                       \r
+               \r
+               <!-- image explorer -->\r
+                       <script id="image-exproler" type="text/x-jquery-tmpl">\r
+                               <div id="image-exproler-container" class="finder-container"></div>\r
+                       </script>\r
                </div>\r
        <!-- Editor -->\r
                \r
index d699449..99e0025 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR work.js\r
- *   version 0.4.0\r
+ *   version 0.4.1\r
  *   \r
  * author:\r
  *   itozyun\r
@@ -43,8 +43,6 @@
                        return pettanr.ua.isIE === true ? this.LINE_FEED_CODE_TEXTAREA : pre.innerHTML; // ie ??                                \r
                })();\r
 \r
-\r
-\r
 /* ----------------------------------------\r
  *   pettanr.editor\r
  *    - MENU_BAR_CONTROL\r
  *    - INFOMATION_WINDOW\r
  *    - TOOL_BOX_WINDOW\r
  *    - HELP_DOCUMENTS_WINDOW\r
- *    - CANVAS_CONTROL\r
- *       - GRID_CONTROL\r
- *       - WHITE_GLASS_CONTROL\r
- *       - PANEL_CONTROL\r
- *       - COMIC_ELEMENT_CONTROL\r
- *          - PanelResizerClass\r
- *          - COMIC_ELEMENT_OPERATOR\r
- *             - TAIL_CONTROLER\r
- *          - ImageElementClass\r
- *          - TextElementClass\r
+ *    - PANEL_CONTROL\r
+ *    - GRID_CONTROL\r
+ *    - WHITE_GLASS_CONTROL\r
+ *    - PANEL_CONTROL\r
+ *    \r
+ * \r
+ *    - PanelResizerClass\r
+ *    - PANEL_RESIZER_TOP\r
+ *    - PANEL_RESIZER_BOTTOM\r
+ *    - CONSOLE_CONTROLER\r
+ * \r
+ *    - TAIL_OPERATOR\r
+ *    - RESIZE_OPERATOR\r
+ *    - POSITION_OPERATOR\r
+ *    - COMIC_ELEMENT_OPERATION_MANAGER\r
+ *      \r
+ *    - ImageElementClass\r
+ *    - TextElementClass\r
+ * \r
+ *    - COMIC_ELEMENT_CONTROL\r
+ * \r
  * \r
  */\r
 pettanr.editor = ( function(){\r
+\r
        var COMIC_ELEMENT_TYPE_IMAGE = 0,\r
                COMIC_ELEMENT_TYPE_TEXT = 1,\r
                MOUSE_LISTENER_ARRAY = [],\r
+               COMIC_ELEMENT_ARRAY = [],\r
                ELM_MOUSE_EVENT_CHATCHER = document.getElementById( 'mouse-operation-catcher'),\r
+               MIN_PANEL_HEIGHT = 20,\r
+               MIN_OBJECT_SIZE = 19,\r
+               MOUSE_HIT_AREA = 10,\r
                jqMouseEventChacher,\r
                jqEditor,\r
                windowW, windowH,\r
                currentListener = null,\r
                currentCursor = '',\r
-               option;\r
+               option,\r
+               log;\r
 \r
 /* ----------------------------------------\r
  * MENU BAR\r
@@ -92,23 +107,22 @@ pettanr.editor = ( function(){
  *          kbd shortcut\r
  */\r
        var MENU_BAR_CONTROL = ( function(){\r
-               var BAR_ID = 'menu-bar',\r
-                       ELM_BAR = document.getElementById( BAR_ID),\r
+               var ELM_BAR = document.getElementById( 'menu-bar'),\r
                        ELM_ITEM_CLASSNAME = 'menu-bar-item',\r
                        ELM_ITEM_ORIGN = ( function(){\r
-                               var ret = document.createElement( 'DIV'),\r
-                                       div = document.createElement( 'DIV'),\r
-                                       ul = document.createElement( 'UL');\r
+                               var ret = document.createElement( 'div'),\r
+                                       div = document.createElement( 'div'),\r
+                                       ul = document.createElement( 'ul');\r
                                ret.className = ELM_ITEM_CLASSNAME;\r
                                ret.appendChild( div);\r
                                ret.appendChild( ul);\r
                                return ret;\r
                        })(),\r
                        ELM_SELECTION_ORIGN = ( function(){\r
-                               var ret = document.createElement( 'LI'),\r
-                                       a = document.createElement( 'A'),\r
-                                       span = document.createElement( 'SPAN'),\r
-                                       key = document.createElement( 'KBD');\r
+                               var ret = document.createElement( 'li'),\r
+                                       a = document.createElement( 'a'),\r
+                                       span = document.createElement( 'span'),\r
+                                       key = document.createElement( 'kbd');\r
                                a.appendChild( span);\r
                                a.appendChild( key);\r
                                ret.appendChild( a);\r
@@ -119,35 +133,35 @@ pettanr.editor = ( function(){
                        ITEM_ARRAY = [],\r
                        barH = pettanr.util.getElementSize( ELM_BAR).height,\r
                        itemW = pettanr.util.getElementSize( ELM_ITEM_ORIGN).width,\r
-                       selectionW = pettanr.util.getElementSize( ELM_ITEM_ORIGN.getElementsByTagName( 'UL')[ 0]).width,\r
+                       selectionW = pettanr.util.getElementSize( ELM_ITEM_ORIGN.getElementsByTagName( 'ul')[ 0]).width,\r
                        jqStage, jqBar;\r
                ELM_BAR.style.top = ( -barH) +'px';\r
 \r
                var MenubarSelectionClass = function( container, title, shortcut, visible, separateAfter){\r
                        var ELM_WRAPPER = ELM_SELECTION_ORIGN.cloneNode( true),\r
-                               ELM_TITLE = ELM_WRAPPER.getElementsByTagName( 'SPAN')[ 0];\r
-                       updateTitle( title);\r
-                       updateVisible( visible);\r
+                               ELM_TITLE = ELM_WRAPPER.getElementsByTagName( 'span')[ 0],\r
+                               elmShortcut = ELM_WRAPPER.getElementsByTagName( 'kbd')[ 0];\r
+                               \r
+                       if( shortcut){\r
+                               elmShortcut.innerHTML = shortcut;\r
+                       } else {\r
+                               elmShortcut.parentNode.removeChild( elmShortcut);\r
+                       }\r
+                       elmShortcut = null;\r
                        \r
-                       ( function(){\r
-                               var ELM_SHORTCUT = ELM_WRAPPER.getElementsByTagName( 'KBD')[ 0];\r
-                               if( shortcut){\r
-                                       ELM_SHORTCUT.innerHTML = shortcut;\r
-                               } else {\r
-                                       ELM_SHORTCUT.parentNode.removeChild( ELM_SHORTCUT);\r
-                               }                               \r
-                       })();\r
-\r
                        container.appendChild( ELM_WRAPPER);\r
                        \r
+                       updateTitle( title);\r
+                       updateVisible( visible);\r
+                       \r
                        function updateTitle( _title){\r
                                ELM_TITLE.innerHTML = title = _title;\r
                        }\r
                        function updateVisible( _visible){\r
-                               _visible !== undefined && ( function(){\r
+                               if( _visible !== undefined){\r
                                        visible = !!_visible;\r
                                        ELM_WRAPPER.className = visible === true ? '' : 'disabled';\r
-                               })();\r
+                               };\r
                        }\r
                        return {\r
                                elm: ELM_WRAPPER,\r
@@ -165,8 +179,8 @@ pettanr.editor = ( function(){
 \r
                var MenuBarItemClass = function( title, opt_callbackArray){\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
+                               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
                                numSelection = 0,\r
@@ -180,7 +194,7 @@ pettanr.editor = ( function(){
                                var that = this,\r
                                        i = ( function(){\r
                                                var parent = that.parentNode,\r
-                                                       children = parent.getElementsByTagName( 'LI'),\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
@@ -216,7 +230,7 @@ pettanr.editor = ( function(){
                                        var ret = MenubarSelectionClass.apply( {}, [ ELM_SELECTION, title, shortcut, visible, separateAfter]),\r
                                                before = SELECTION_CALLBACK_ARRAY.length > 0 ? SELECTION_CALLBACK_ARRAY[ SELECTION_CALLBACK_ARRAY.length -1] : null;\r
                                        SELECTION_CALLBACK_ARRAY.push( callback);\r
-                                       if( ( separateBefore === true && before) || ( before && before.separateAfter === true)){\r
+                                       if( before !== null && ( separateBefore === true || before.separateAfter === true)){\r
                                                ret.elm.style.borderTop = '1px solid #ccc';\r
                                        }\r
                                        return ret;\r
@@ -233,7 +247,7 @@ pettanr.editor = ( function(){
                return {\r
                        init: function(){\r
                                jqStage = jqEditor;\r
-                               jqBar = $( '#' +BAR_ID).animate( { top: 0});\r
+                               jqBar = $( ELM_BAR).animate( { top: 0});\r
 \r
                                var l = ITEM_ARRAY.length;\r
                                for( var i=0; i<l; ++i){\r
@@ -281,7 +295,7 @@ pettanr.editor = ( function(){
                                        createAjaxSelection: function( callback){\r
                                                var elmLoading = document.createElement( 'li'),\r
                                                        that = this,\r
-                                                       elmSelection = this.elm.getElementsByTagName( 'UL')[ 0];\r
+                                                       elmSelection = this.elm.getElementsByTagName( 'ul')[ 0];\r
                                                elmSelection.appendChild( elmLoading);\r
                                                elmLoading.className = 'loading';\r
                                                elmLoading.style.height = '90px';                                                       \r
@@ -898,10 +912,11 @@ pettanr.editor = ( function(){
                                        null, onMenuClick, true\r
                                ),\r
                                jqStage,\r
-                               jqWrapper, jqHeader, elmBody, elmBodyStyle,\r
+                               jqWrapper, jqHeader, jqFooter = null,\r
+                               elmBody, elmBodyStyle,\r
                                startX, startY, startW, startH,\r
-                               xOffset, yOffset,\r
-                               headerH, bodyH,\r
+                               offsetX, offsetY,\r
+                               headerH, bodyH, footerH = 0,\r
                                isDragging = false,\r
                                isResizing = false,\r
                                bodyIsTachable = false,\r
@@ -911,20 +926,24 @@ pettanr.editor = ( function(){
                                visible === true ? instance.close() : instance.open();\r
                        }\r
                        function update( _x, _y, _w, _h){\r
-                               ( w !== _w || h !== _h) && instance.onResize && instance.onResize( _w, _h);\r
-                               x = _x !== undefined ? _x : x;\r
-                               y = _y !== undefined ? _y : y;\r
-                               w = _w !== undefined ? _w : w;\r
-                               h = _h !== undefined ? _h : h;\r
-                               y = y > MENU_BAR_CONTROL.h ? y : MENU_BAR_CONTROL.h;\r
+                               _x = _x !== undefined ? _x : x;\r
+                               _y = _y !== undefined ? _y : y;\r
+                               _y = _y > MENU_BAR_CONTROL.h ? _y : MENU_BAR_CONTROL.h;\r
+                               _w = _w !== undefined ? _w : w;\r
+                               _h = _h !== undefined ? _h : h;\r
                                jqWrapper.css( {\r
-                                       left:           x,\r
-                                       top:            y,\r
-                                       width:          w,\r
-                                       height:         h\r
+                                       left:           _x,\r
+                                       top:            _y,\r
+                                       width:          _w,\r
+                                       height:         _h\r
                                });\r
-                               bodyH = h -headerH;\r
+                               bodyH = _h -headerH -footerH;\r
                                elmBodyStyle.height = bodyH +'px';\r
+                               ( w !== _w || h !== _h) && instance.onResize && instance.onResize( _w, bodyH);\r
+                               x = _x;\r
+                               y = _y;\r
+                               w = _w;\r
+                               h = _h;\r
                        }\r
                        function bodyBackOrForward( isBack){\r
                                if( !instance) return;\r
@@ -933,7 +952,7 @@ pettanr.editor = ( function(){
                                elmBodyStyle.left =             isBack === true ? 0  : x +'px';\r
                                elmBodyStyle.top =              isBack === true ? 0  : y +headerH +'px';\r
                                elmBodyStyle.width =    isBack === true ? '' : ( w -WINDOW_BODY_BODER_SIZE *2) +'px';\r
-                               bodyIsTachable === isBack && isBack === true ? jqWrapper.append( elmBody) : jqStage.append( elmBody);\r
+                               bodyIsTachable === isBack && isBack === true ? jqHeader.after( elmBody) : jqStage.append( elmBody);\r
                                bodyIsTachable = !isBack;\r
                        }\r
                        function onWindowResize( e){\r
@@ -943,8 +962,8 @@ pettanr.editor = ( function(){
                                startY = y;\r
                                startW = w;\r
                                startH = h;\r
-                               xOffset = e.pageX;\r
-                               yOffset = e.pageY;\r
+                               offsetX = e.pageX;\r
+                               offsetY = e.pageY;\r
                                MOUSE_CURSOR( 'nw-resize');\r
                                e.stopPropagation();\r
                                return false;\r
@@ -952,7 +971,7 @@ pettanr.editor = ( function(){
                        return {\r
                                init: function( jqContainer){\r
                                        /*\r
-                                        * setTimeout で呼ばれるグローバルメソッドは、this でなく instance を使う.\r
+                                        * setTimeout で呼ばれるグローバルメソッド内では、this でなく instance を使う.\r
                                         */\r
                                        instance = this;\r
                                        \r
@@ -969,6 +988,7 @@ pettanr.editor = ( function(){
                                        headerH = pettanr.util.getElementSize( jqHeader.get( 0)).height;\r
                                        elmBody = jqWrapper.children( '.window-body').get( 0);\r
                                        elmBodyStyle = elmBody.style;\r
+                                       \r
                                        if( bodyTempleteID) {\r
                                                jqWrapper.find( '.window-body-insert-position').replaceWith( $( $( '#' +bodyTempleteID).remove().html()));\r
                                        } else {\r
@@ -985,16 +1005,17 @@ pettanr.editor = ( function(){
                                h: function(){ return h;},\r
                                $: null,\r
                                title: function( _title){\r
-                                       _title !== undefined && jqHeader.html( _title);\r
-                                       title = _title || title;\r
+                                       typeof _title === 'string' && jqHeader.html( _title);\r
+                                       title = typeof _title === 'string' ? _title : title;\r
                                        return title;\r
                                },\r
                                visible: visible,\r
                                firstOpen: function(){\r
                                        if( RESIZE_BUTTON_ENABLED === true){\r
-                                               jqWrapper.find( '.window-resize-button').eq( 0).mousedown( onWindowResize);\r
+                                               footerH = pettanr.util.getElementSize( jqWrapper.find( '.window-footer').get( 0)).height;\r
+                                               //jqWrapper.find( '.window-resize-button').eq( 0).mousedown( onWindowResize);\r
                                        } else {\r
-                                               jqWrapper.find( '.window-resize-button').remove();\r
+                                               jqWrapper.find( '.window-footer').remove();\r
                                        }\r
                                        update( x, y, w, h);\r
                                        \r
@@ -1026,27 +1047,41 @@ pettanr.editor = ( function(){
                                },\r
                                bodyBackOrForward: bodyBackOrForward,\r
                                onMouseDown: function( _mouseX, _mouseY){\r
+                                       if( RESIZE_BUTTON_ENABLED === true && x +w -20 <= _mouseX && _mouseX < x +w && y +headerH +bodyH < _mouseY && _mouseY <= y +h){\r
+                                               bodyBackOrForward( true);\r
+                                               isResizing = true;\r
+                                               startX = x;\r
+                                               startY = y;\r
+                                               startW = w;\r
+                                               startH = h;\r
+                                               offsetX = _mouseX;\r
+                                               offsetY = _mouseY;\r
+                                               MOUSE_CURSOR( 'nw-resize');\r
+                                               return;\r
+                                       }\r
+                                       \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
                                                return;\r
                                        }\r
+                                       \r
                                        isDragging = true;\r
                                        MOUSE_CURSOR( 'move');                          \r
                                        startX = x;\r
                                        startY = y;\r
                                        startW = w;\r
                                        startH = h;\r
-                                       xOffset = _mouseX;\r
-                                       yOffset = _mouseY;\r
+                                       offsetX = _mouseX;\r
+                                       offsetY = _mouseY;\r
                                },\r
                                onMouseUp: function( _mouseX, _mouseY){\r
                                        isDragging = isResizing = false;\r
                                        MOUSE_CURSOR( '');\r
                                },\r
                                onMouseMove: function( _mouseX, _mouseY){\r
-                                       var _updateX = _mouseX -xOffset,\r
-                                               _updateY = _mouseY -yOffset;\r
+                                       var _updateX = _mouseX -offsetX,\r
+                                               _updateY = _mouseY -offsetY;\r
                                        \r
                                        if( isResizing === true){\r
                                                var _w = startW +_updateX,\r
@@ -1205,7 +1240,6 @@ pettanr.editor = ( function(){
  */\r
        var TOOL_BOX_WINDOW = ( function(){\r
                var addImageButton, addTextButton, editBgButton, switchGridButton, popupHelpButton, postButton,\r
-                       gridSwitchFunction,\r
                        instance;\r
                        \r
                pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 73, false, true, addImage);\r
@@ -1228,7 +1262,7 @@ pettanr.editor = ( function(){
                        return false;\r
                }\r
                function switchGrid( e){\r
-                       setTimeout( gridSwitchFunction, 0);\r
+                       setTimeout( GRID_CONTROL.update, 0);\r
                        e && e.preventDefault();\r
                        return false;\r
                }\r
@@ -1262,14 +1296,42 @@ pettanr.editor = ( function(){
                                        postButton = $( '#toolbox-post-button');\r
                                        \r
                                        delete this.onFirstOpen;\r
-                               },\r
-                               setGridSwitchFunction: function( _gridSwitchFunction){\r
-                                       gridSwitchFunction = _gridSwitchFunction || gridSwitchFunction;\r
                                }\r
                        },\r
                        'toolbox-window', 'Tool box', 0, 215, 110, 290, true\r
                );\r
        })();\r
+       \r
+       \r
+/* ----------------------------------------\r
+ * IMAGE_EXPROLER\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
+                                       delete this.onFirstOpen;\r
+                               },\r
+                               onOpen: function(){\r
+                                       finder.onOpen();\r
+                               },\r
+                               onResize: function( _w, _h){\r
+                                       finder.onWindowResize( _w, _h);\r
+                               }\r
+                       },\r
+                       'image-exproler', 'Album', 0, 215, 400, 350, false, true, true, 300, 300\r
+               );\r
+       })();\r
+       \r
+       \r
 /* ----------------------------------------\r
  * INFOMATION_WINDOW\r
  */                    \r
@@ -1308,7 +1370,7 @@ pettanr.editor = ( function(){
                                },\r
                                onResize: function( w, h){\r
                                        jqComicElementInformation && jqComicElementInformation.css( {\r
-                                               height: this.bodyHeight()\r
+                                               height: h\r
                                        });\r
                                },\r
                                update: function( _elementType, x, y, z, a, w, h, wPercent, hPercent, keepAspect){\r
@@ -1380,11 +1442,11 @@ pettanr.editor = ( function(){
                                        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
+                                                       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
@@ -1435,7 +1497,7 @@ pettanr.editor = ( function(){
                                                                var that = this,\r
                                                                        parent = this.parentNode,\r
                                                                        i = ( function(){\r
-                                                                               var children = parent.getElementsByTagName( 'A'),\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
@@ -1491,7 +1553,7 @@ pettanr.editor = ( function(){
                                },\r
                                onFirstOpen: onFirstOpen,\r
                                onResize: function( w, h){\r
-                                       jqAjaxContents && jqAjaxContents.css( { height: this.bodyHeight()});\r
+                                       jqAjaxContents && jqAjaxContents.css( { height: h});\r
                                },\r
                                setAjaxContent: function( html){\r
                                        \r
@@ -1506,33 +1568,34 @@ pettanr.editor = ( function(){
  * GRID_CONTROL\r
  */\r
        var GRID_CONTROL = ( function(){\r
-               var elmGrid = document.getElementById( 'grid'),\r
-                       jQGrid,\r
+               var ELM_GRID = document.getElementById( 'grid'),\r
+                       jqGrid,\r
                        visible = false;\r
-               \r
-               function update(){\r
-                       jQGrid.css( {\r
-                               opacity:        '',\r
-                               fliter:         ''\r
-                       }).stop()[ visible === true ? 'fadeOut' : 'fadeIn']();\r
-                       visible = !visible;\r
-                       if( visible === true && !elmGrid.style.backgroundImage){\r
-                               elmGrid.style.backgroundImage = "url('grid.gif')";\r
-                       }\r
-                       return visible;\r
-               }\r
+\r
                return {\r
                        init: function(){\r
-                               jQGrid = $( elmGrid);\r
-                               TOOL_BOX_WINDOW.setGridSwitchFunction( update);\r
+                               jqGrid = $( ELM_GRID);\r
                                delete GRID_CONTROL.init;\r
                        },\r
-                       onCanvasResize: function( _canvasX, _canvasY){\r
-                               elmGrid.style.backgroundPosition = [ _canvasX % 10, 'px ', _canvasY % 10, 'px'].join( '');\r
-                               elmGrid.style.height = windowH +'px';\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
                        },\r
                        enabled: function(){\r
                                return visible;\r
+                       },\r
+                       update: function(){\r
+                               jqGrid.css( {\r
+                                       opacity:        '',\r
+                                       fliter:         ''\r
+                               }).stop()[ visible === true ? 'fadeOut' : 'fadeIn']();\r
+                               \r
+                               visible = !visible;\r
+                               \r
+                               if( visible === true && !ELM_GRID.style.backgroundImage){\r
+                                       ELM_GRID.style.backgroundImage = "url('grid.gif')";\r
+                               }\r
+                               return visible;                         \r
                        }\r
                }\r
        })();\r
@@ -1545,130 +1608,121 @@ pettanr.editor = ( function(){
                        styleLeft = document.getElementById( 'whiteGlass-left').style,\r
                        styleRight = document.getElementById( 'whiteGlass-right').style,\r
                        styleBottom = document.getElementById( 'whiteGlass-bottom').style;\r
-               function resize( _canvasX, _canvasY, _canvasW, _canvasH){\r
-                       var     _w = _canvasW,\r
-                               _h = _canvasH,\r
-                               marginTop = _canvasY,\r
-                               marginBottom = windowH -_h -marginTop,\r
-                               marginX = _canvasX,\r
-                               rightWidth = windowW -_w -marginX;\r
-                       \r
-                       styleTop.height = ( marginTop < 0 ? 0 : marginTop) +'px';\r
-                       \r
-                       styleLeft.top = marginTop +'px';\r
-                       styleLeft.width = ( marginX < 0 ? 0 : marginX) +'px';\r
-                       styleLeft.height = ( _h + marginBottom) +'px';\r
-                       \r
-                       styleRight.top = marginTop +'px';\r
-                       styleRight.left = _w +marginX +'px';\r
-                       styleRight.width = ( rightWidth < 0 ? 0 : rightWidth) +'px';\r
-                       styleRight.height = ( _h + marginBottom) +'px';\r
-                       \r
-                       styleBottom.top = ( _h +marginTop) +'px';\r
-                       styleBottom.left = marginX +'px';\r
-                       styleBottom.width = _w +'px';\r
-                       styleBottom.height = ( marginBottom < 0 ? 0 : marginBottom) +'px';\r
-               }\r
+\r
                return {\r
-                       onCanvasResize: resize\r
+                       onPanelResize: function( _panelX, _panelY, _panelW, _panelH){\r
+                               var     _w = _panelW,\r
+                                       _h = _panelH,\r
+                                       marginTop = _panelY,\r
+                                       marginBottom = windowH -_h -marginTop,\r
+                                       marginX = _panelX,\r
+                                       rightWidth = windowW -_w -marginX;\r
+                               \r
+                               styleTop.height = ( marginTop < 0 ? 0 : marginTop) +'px';\r
+                               \r
+                               styleLeft.top = marginTop +'px';\r
+                               styleLeft.width = ( marginX < 0 ? 0 : marginX) +'px';\r
+                               styleLeft.height = ( _h + marginBottom) +'px';\r
+                               \r
+                               styleRight.top = marginTop +'px';\r
+                               styleRight.left = _w +marginX +'px';\r
+                               styleRight.width = ( rightWidth < 0 ? 0 : rightWidth) +'px';\r
+                               styleRight.height = ( _h + marginBottom) +'px';\r
+                               \r
+                               styleBottom.top = ( _h +marginTop) +'px';\r
+                               styleBottom.left = marginX +'px';\r
+                               styleBottom.width = _w +'px';\r
+                               styleBottom.height = ( marginBottom < 0 ? 0 : marginBottom) +'px';\r
+                       }\r
                }\r
        })();\r
 \r
 \r
-       var MIN_PANEL_HEIGHT = 20,\r
-               RESIZER_BORDER_WIDTH = 1;\r
-\r
 /*\r
  * PANEL_CONTROL\r
+ * panel-border の表示と onPanelResize の通知.\r
+ * \r
  */\r
        var PANEL_CONTROL = ( function(){\r
-               var DEFAULT_PANEL_WIDTH = 400,\r
+               var ELM_PANEL = document.getElementById('panel-tools-container'),\r
+                       ELM_PANEL_STYLE = ELM_PANEL.style,\r
+                       DEFAULT_PANEL_WIDTH = 400,\r
                        DEFAULT_PANEL_HEIGHT = 300,\r
-                       BORDER_WIDTH = 2,\r
-                       canvasW, canvasH, canvasX, canvasY,\r
-                       xOffset, yOffset, startCanvasX, startCanvasY,\r
+                       borderSize = 2,\r
+                       panelW, panelH, panelX, panelY,\r
+                       offsetX, offsetY, startX, startY,\r
                        isDragging = false,\r
-                       isCanvasDraggble = false;                       \r
-               \r
-               var     panelElm, borderWidth;\r
-               \r
-               function resize( isResizerTopAction, _x, _y, _w, _h){\r
-                       canvasX = _x !== undefined ? _x : canvasX;\r
-                       canvasY = _y !== undefined ? _y : canvasY;\r
-                       canvasW = _w !== undefined ? _w : canvasW;\r
-                       canvasH = _h !== undefined ? _h : canvasH;\r
-                       \r
-                       panelElm.css( {\r
-                               left:   canvasX -BORDER_WIDTH,\r
-                               top:    canvasY -BORDER_WIDTH,\r
-                               width:  canvasW,\r
-                               height: canvasH\r
-                       });\r
-                       \r
-                       PANEL_RESIZER_TOP.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
-                       PANEL_RESIZER_BOTTOM.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
-                       GRID_CONTROL.onCanvasResize( canvasX, canvasY);\r
-                       WHITE_GLASS_CONTROL.onCanvasResize( canvasX, canvasY, canvasW, canvasH);\r
-                       COMIC_ELEMENT_CONTROL.onCanvasResize( canvasX, canvasY, canvasW, canvasH, isResizerTopAction === true);\r
-               }\r
+                       isDraggable = false;\r
                \r
                function onSpaceUpdate(e){\r
                        if( e.type === 'keyup'){\r
                                currentListener === null && updateMouseCursor( '');\r
-                               isCanvasDraggble = false;\r
+                               isDraggable = false;\r
                        } else {\r
                                currentListener === null && updateMouseCursor( 'move');\r
-                               isCanvasDraggble = true;\r
+                               isDraggable = true;\r
                        }\r
                }\r
                \r
                return {\r
-                       init: function( _canvasW, _canvasH){\r
-                               panelElm = $( '#panel-border');\r
-                               borderWidth = panelElm.css( 'border-width');\r
-\r
-                               canvasW = _canvasW || DEFAULT_PANEL_WIDTH;\r
-                               canvasH = _canvasH || DEFAULT_PANEL_HEIGHT;\r
-                               canvasX = Math.floor( ( windowW -canvasW) /2);\r
-                               canvasY = Math.floor( ( windowH -canvasH) /2);\r
-\r
+                       init: 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
+                               borderSize = _borderSize !== undefined ? _borderSize : borderSize;\r
+                               \r
                                pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 32, false, false, onSpaceUpdate);\r
-\r
-                               COMIC_ELEMENT_CONTROL.init( canvasX, canvasY, canvasW, canvasH);\r
                                \r
-                               setTimeout( resize, 0);\r
+                               setTimeout( PANEL_CONTROL.resize, 0);\r
                                \r
                                delete PANEL_CONTROL.init;\r
                        },\r
                        x: function(){\r
-                               return canvasX;\r
+                               return panelX;\r
                        },\r
                        y: function(){\r
-                               return canvasY;\r
+                               return panelY;\r
+                       },\r
+                       resize: function( isResizerTopAction, _x, _y, _w, _h){\r
+                               panelX = _x !== undefined ? _x : panelX;\r
+                               panelY = _y !== undefined ? _y : panelY;\r
+                               panelW = _w !== undefined ? _w : panelW;\r
+                               panelH = _h !== undefined ? _h : panelH;\r
+                               \r
+                               ELM_PANEL_STYLE.left    = ( panelX -borderSize) +'px';\r
+                               ELM_PANEL_STYLE.top             = ( panelY -borderSize) +'px';\r
+                               ELM_PANEL_STYLE.width   = panelW +'px';\r
+                               ELM_PANEL_STYLE.height  = panelH +'px';\r
+                               \r
+                               PANEL_RESIZER_TOP.onPanelResize( panelX, panelY, panelW, panelH);\r
+                               PANEL_RESIZER_BOTTOM.onPanelResize( panelX, panelY, panelW, panelH);\r
+                               GRID_CONTROL.onPanelResize( panelX, panelY);\r
+                               WHITE_GLASS_CONTROL.onPanelResize( panelX, panelY, panelW, panelH);\r
+                               COMIC_ELEMENT_CONTROL.onPanelResize( panelX, panelY, panelW, panelH, isResizerTopAction === true);\r
                        },\r
-                       resize: resize,\r
                        onWindowResize: function( _windowW, _windowH){\r
-                               canvasX = Math.floor(( _windowW - canvasW) / 2);\r
-                               canvasY = Math.floor(( _windowH - canvasH) / 2);\r
-                               resize();\r
+                               panelX = Math.floor(( _windowW - panelW) / 2);\r
+                               panelY = Math.floor(( _windowH - panelH) / 2);\r
+                               PANEL_CONTROL.resize();\r
                        },\r
                        onMouseMove: function( _mouseX, _mouseY){\r
-                               if( isCanvasDraggble === true && isDragging === true){\r
-                                       resize( false, startCanvasX +_mouseX -xOffset, startCanvasY +_mouseY -yOffset);\r
+                               if( isDraggable === true && isDragging === true){\r
+                                       PANEL_CONTROL.resize( false, startX +_mouseX -offsetX, startY +_mouseY -offsetY);\r
                                }\r
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
-                               if( isCanvasDraggble === true){\r
+                               if( isDraggable === true){\r
                                        isDragging = false;\r
                                        updateMouseCursor( '');\r
                                }\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
-                               if( isCanvasDraggble === true){\r
-                                       xOffset = _mouseX;\r
-                                       yOffset = _mouseY;\r
-                                       startCanvasX = canvasX;\r
-                                       startCanvasY = canvasY;\r
+                               if( isDraggable === true){\r
+                                       offsetX = _mouseX;\r
+                                       offsetY = _mouseY;\r
+                                       startX = panelX;\r
+                                       startY = panelY;\r
                                        isDragging = true;\r
                                        updateMouseCursor( 'move');\r
                                        return true;\r
@@ -1692,14 +1746,14 @@ pettanr.editor = ( function(){
                        y = isTop === true ? ( -5 -RESIZER_HEIGHT -BORDER_WIDTH) : 0,\r
                        w,\r
                        h = RESIZER_HEIGHT,\r
-                       canvasX, canvasY, canvasW, canvasH,\r
-                       yOffset, startY, startH,\r
+                       panelX, panelY, panelW, panelH,\r
+                       offsetY, startY, startH,\r
                        isDragging = false,\r
                        MOUSE_CURSOR = updateMouseCursor;\r
                        \r
                function restoreState( arg){\r
                        if( arg && arg.length > 3){\r
-                               PANEL_CONTROL.resize( isTop, arg[ 0] || canvasX, arg[ 1] || canvasY, arg[ 2] || canvasW, arg[ 3] || canvasH);\r
+                               PANEL_CONTROL.resize( isTop, arg[ 0] || panelX, arg[ 1] || panelY, arg[ 2] || panelW, arg[ 3] || panelH);\r
                        }\r
                }\r
                        \r
@@ -1708,35 +1762,35 @@ pettanr.editor = ( function(){
                                return isDragging;\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
-                               var _x = _mouseX -canvasX,\r
-                                       _y = _mouseY -canvasY;\r
+                               var _x = _mouseX -panelX,\r
+                                       _y = _mouseY -panelY;\r
                                if( _x < x || x + w < _x || _y < y || y + h < _y) return false;\r
-                               yOffset = _y;\r
-                               startY = canvasY;\r
-                               startH = canvasH;\r
+                               offsetY = _y;\r
+                               startY = panelY;\r
+                               startH = panelH;\r
                                isDragging = true;\r
                                MOUSE_CURSOR( 'n-resize');\r
                                return true;\r
                        },\r
                        onMouseMove: function( _mouseX, _mouseY){\r
-                               var _x = _mouseX -canvasX,\r
-                                       _y = _mouseY -canvasY;\r
+                               var _x = _mouseX -panelX,\r
+                                       _y = _mouseY -panelY;\r
                                if( isDragging !== true){\r
                                        if( _x < x || x + w < _x || _y < y || y + h < _y) return false;\r
-                                       COMIC_ELEMENT_OPERATOR.hide();\r
+                                       COMIC_ELEMENT_OPERATION_MANAGER.hide();\r
                                        MOUSE_CURSOR( 'pointer');\r
                                        return true;\r
                                } else {\r
-                                       var move = _y -yOffset;\r
+                                       var move = _y -offsetY;\r
                                        if( isTop === true){\r
-                                               if( canvasH - move < MIN_PANEL_HEIGHT){\r
-                                                       move = canvasH -MIN_PANEL_HEIGHT;\r
+                                               if( panelH - move < MIN_PANEL_HEIGHT){\r
+                                                       move = panelH -MIN_PANEL_HEIGHT;\r
                                                }\r
-                                               PANEL_CONTROL.resize( true, canvasX, canvasY + move, canvasW, canvasH - move);\r
+                                               PANEL_CONTROL.resize( true, panelX, panelY + move, panelW, panelH - move);\r
                                        } else {\r
                                                var _h = startH +move;\r
-                                               if( 0 < _h && _h < windowH -canvasY -RESIZER_HEIGHT -5 -BORDER_WIDTH){\r
-                                                       PANEL_CONTROL.resize( false, canvasX, canvasY, canvasW, _h < MIN_PANEL_HEIGHT ? MIN_PANEL_HEIGHT : _h);\r
+                                               if( 0 < _h && _h < windowH -panelY -RESIZER_HEIGHT -5 -BORDER_WIDTH){\r
+                                                       PANEL_CONTROL.resize( false, panelX, panelY, panelW, _h < MIN_PANEL_HEIGHT ? MIN_PANEL_HEIGHT : _h);\r
                                                }\r
                                        }\r
                                }\r
@@ -1744,23 +1798,23 @@ pettanr.editor = ( function(){
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
                                if( isDragging !== true) return;\r
-                               ( startY !== canvasY || startH !== canvasH) && HISTORY.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, canvasY, NaN, canvasH]);\r
+                               ( startY !== panelY || startH !== panelH) && HISTORY.saveState( restoreState, [ NaN, startY, NaN, startH], [ NaN, panelY, NaN, panelH]);\r
                                isDragging = false;\r
                                MOUSE_CURSOR( '');\r
                        },\r
                        busy: function(){\r
                                return isDragging\r
                        },\r
-                       onCanvasResize: function( _x, _y, _w, _h){\r
-                               canvasX = _x;\r
-                               canvasY = _y;\r
-                               if( canvasW !== _w){\r
+                       onPanelResize: function( _x, _y, _w, _h){\r
+                               panelX = _x;\r
+                               panelY = _y;\r
+                               if( panelW !== _w){\r
                                        ELM.style.width = ( _w +2) +'px';\r
-                                       canvasW = _w;\r
+                                       panelW = _w;\r
                                }\r
-                               canvasH = _h;\r
-                               y = isTop === true ? y : ( canvasH +5 +BORDER_WIDTH);\r
-                               w = canvasW +2;\r
+                               panelH = _h;\r
+                               y = isTop === true ? y : ( panelH +5 +BORDER_WIDTH);\r
+                               w = panelW +2;\r
                        }\r
                }\r
        };\r
@@ -1768,569 +1822,600 @@ pettanr.editor = ( function(){
                PANEL_RESIZER_BOTTOM = PanelResizerClass.apply( {}, [ 'panel-resizer-bottom', false]);\r
                \r
        PanelResizerClass = undefined;\r
-/*\r
- *       - COMIC_ELEMENT_CONTROL\r
- *          - PanelResizerClass\r
- *          - COMIC_ELEMENT_OPERATOR\r
- *          - AbstractComicElement\r
- *          - ImageElementClass\r
- *          - TextElementClass\r
-*/\r
 \r
-       var MIN_OBJECT_SIZE = 19,\r
-               MOUSE_HIT_AREA = 10,\r
-               SAVE = HISTORY.saveState,\r
-               log,\r
-               DRAGGABLE_ELEMENT_ARRAY = [];// PANEL_RESIZER_TOP, PANEL_RESIZER_BOTTOM\r
-       \r
-/*\r
- * --------------------------------------------------------------------------------------------\r
- * COMIC_ELEMENT_OPERATOR\r
- */\r
-       var COMIC_ELEMENT_OPERATOR = ( function(){\r
-               var     MOUSE_CURSOR = updateMouseCursor,\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
-                       INFOMATION = INFOMATION_WINDOW.update,\r
-                       GRID_ENABLED = GRID_CONTROL.enabled,\r
-                       HIT_AREA = MOUSE_HIT_AREA,\r
-                       currentIsTextElement = false,\r
-                       currentControler = null,\r
+                       jqStage,\r
+                       jqConsoleParent,\r
+                       jqConsoleWrapper,\r
+                       jqConsoleTail,\r
+                       jqImgConsole, jqTextConsole,\r
                        currentElement = null,\r
-                       currentx, currenty, currentw, currenth, angle, flipV, flipH,\r
-                       COMIC_ELEMENT_CONSOLE = ( 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
-                                       jqStage,\r
-                                       jqConsoleParent,\r
-                                       jqConsoleWrapper,\r
-                                       jqConsoleTail,\r
-                                       jqImgConsole, jqTextConsole,\r
-                                       currentElement = null,\r
-                                       currentType = -1,\r
-                                       visible = false,\r
-                                       imgConsoleWidth, imgConsoleHeight,\r
-                                       textConsoleWidth, textConsoleHeight,\r
-                                       consoleWidth, consoleHeight,\r
-                                       consoleX, consoleY,\r
-                                       tailSize = 10,\r
-                                       buttonClickable = false;\r
+                       currentType = -1,\r
+                       visible = false,\r
+                       imgConsoleWidth, imgConsoleHeight,\r
+                       textConsoleWidth, textConsoleHeight,\r
+                       consoleWidth, consoleHeight,\r
+                       consoleX, consoleY,\r
+                       tailSize = 10,\r
+                       buttonClickable = false;\r
+               \r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 66, false, true, layerBack);\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 70, false, true, layerForward);\r
+               \r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 68, false, true, del);\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 69, false, true, edit);\r
+               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 85, false, true, change);\r
+               \r
+               function buttonBackOrForward( isBack){\r
+                       var     offest = jqConsoleWrapper.offset();\r
+                       jqConsoleWrapper.css( {\r
+                               position:       isBack === true ? '' : 'absolute',\r
+                               left:           isBack === true ? consoleX  : offest.left,\r
+                               top:            isBack === true ? consoleY  : offest.top\r
+                       });\r
+                       buttonClickable === isBack && ( isBack === true ? jqConsoleParent : jqStage).append( jqConsoleWrapper);\r
+                       buttonClickable = !isBack;\r
+               }\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
+                       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
+                       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 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_OPERATION_MANAGER.hide();\r
+               }\r
+               function edit(){\r
+                       if( currentElement === null || currentElement.type !== COMIC_ELEMENT_TYPE_TEXT) return;\r
+                       TEXT_EDITOR_CONTROL.show( currentElement);\r
+                       buttonBackOrForward( true);\r
+               }\r
+               function change(){\r
+                       if( currentElement === null) return;\r
+                       buttonBackOrForward( true);\r
+                       IMAGE_GROUP_EXPROLER.show( currentElement.url);\r
+               }\r
+               return {\r
+                       init: function(){\r
+                               jqStage = jqEditor;\r
+                               jqConsoleTail = $( '#comic-element-consol-tail');\r
+                               jqImgConsole = $( '#image-element-consol').hide();\r
+                               var imgConsoleSize = pettanr.util.getElementSize( jqImgConsole.get( 0));\r
+                               imgConsoleWidth = imgConsoleSize.width;\r
+                               imgConsoleHeight = imgConsoleSize.height;\r
                                \r
-                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 66, false, true, layerBack);\r
-                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 70, false, true, layerForward);\r
+                               jqTextConsole = $( '#text-element-consol').hide();\r
+                               var textConsoleSize = pettanr.util.getElementSize( jqTextConsole.get( 0));\r
+                               textConsoleWidth = textConsoleSize.width;\r
+                               textConsoleHeight = textConsoleSize.height;\r
                                \r
-                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 68, false, true, del);\r
-                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 69, false, true, edit);\r
-                               pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 85, false, true, change);\r
+                               jqConsoleWrapper = $( '#comic-element-consol-wrapper').hide();\r
+                               jqConsoleParent = jqConsoleWrapper.parent();\r
                                \r
-                               function buttonBackOrForward( isBack){\r
-                                       var     offest = jqConsoleWrapper.offset();\r
-                                       jqConsoleWrapper.css( {\r
-                                               position:       isBack === true ? '' : 'absolute',\r
-                                               left:           isBack === true ? consoleX  : offest.left,\r
-                                               top:            isBack === true ? consoleY  : offest.top\r
-                                       });\r
-                                       buttonClickable === isBack && ( isBack === true ? jqConsoleParent : jqStage).append( jqConsoleWrapper);\r
-                                       buttonClickable = !isBack;\r
-                               }\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
-                                       var _z = currentElement.z;\r
-                                       LAYER_BACK_BUTTON.visible( _z > 0);\r
-                                       LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_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
-                                       var _z = currentElement.z;\r
-                                       LAYER_BACK_BUTTON.visible( _z > 0);\r
-                                       LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_ELEMENT_ARRAY.length -1);\r
-                               }\r
-                               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_OPERATOR.hide();\r
+                               $( '#edit-text-button').click( edit);\r
+                               $( '#delete-image-button, #delete-text-button').click( del);\r
+                               $( '#change-image-button').click( change);\r
+                               $( '#layer-forward-button, #forward-text-button').click( layerForward);\r
+                               $( '#layer-back-button, #back-text-button').click( layerBack);\r
+                                                                                       \r
+                               delete CONSOLE_CONTROLER.init;\r
+                       },\r
+                       show: function( _currentElement, _w, _h){\r
+                               visible === false && jqConsoleWrapper.show();\r
+                               visible = true;\r
+                               currentElement = _currentElement;\r
+                               var _currentType = _currentElement.type,\r
+                                       _z = _currentElement.z;\r
+                               if( currentType !== _currentType){\r
+                                       currentType = _currentType;\r
+                                       jqImgConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_IMAGE);\r
+                                       jqTextConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
+                                       consoleWidth = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleWidth : textConsoleWidth;\r
+                                       consoleHeight = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleHeight : textConsoleHeight;\r
                                }\r
-                               function edit(){\r
-                                       if( currentElement === null || currentElement.type !== COMIC_ELEMENT_TYPE_TEXT) return;\r
-                                       TEXT_EDITOR_CONTROL.show( currentElement);\r
-                                       buttonBackOrForward( true);\r
+                               consoleX = Math.floor( ( _w -consoleWidth) /2);\r
+                               \r
+                               LAYER_BACK_BUTTON.visible( _z > 0);\r
+                               LAYER_FORWARD_BUTTON.visible( _z < COMIC_ELEMENT_ARRAY.length -1);\r
+                               DELETE_BUTTON.visible( true);\r
+                               EDIT_BUTTON.visible( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
+                               CHANGE_BUTTON.visible( false);\r
+                               \r
+                               if( _w > consoleWidth * 1.5 && _h > consoleHeight * 1.5){\r
+                                       consoleY = Math.floor( ( _h -consoleHeight) /2);\r
+                                       jqConsoleWrapper.css( {\r
+                                               left:                   consoleX,\r
+                                               top:                    consoleY\r
+                                       }).removeClass( 'console-out');\r
+                               } else {\r
+                                       consoleY = _h +tailSize;\r
+                                       jqConsoleWrapper.css( {\r
+                                               left:                   consoleX,\r
+                                               top:                    consoleY\r
+                                       }).addClass( 'console-out');\r
                                }\r
-                               function change(){\r
-                                       if( currentElement === null) return;\r
-                                       buttonBackOrForward( true);\r
-                                       IMAGE_GROUP_EXPROLER.show( currentElement.url);\r
+                       },\r
+                       hide: function (){\r
+                               visible === true && jqConsoleWrapper.hide();\r
+                               visible = false;\r
+                               currentElement = null;\r
+                               LAYER_BACK_BUTTON.visible( false);\r
+                               LAYER_FORWARD_BUTTON.visible( false);\r
+                               DELETE_BUTTON.visible( false);\r
+                               EDIT_BUTTON.visible( false);\r
+                               CHANGE_BUTTON.visible( false);\r
+                       },\r
+                       x: function(){ return consoleX;},\r
+                       y: function(){ return consoleY;},\r
+                       w: function(){ return consoleWidth;},\r
+                       h: function(){ return consoleHeight;},\r
+                       onMouseMove: function( _mouseX, _mouseY){\r
+                               if( consoleX > _mouseX || consoleY > _mouseY || consoleX +consoleWidth < _mouseX || consoleY +consoleHeight < _mouseY){\r
+                                       buttonClickable === true && buttonBackOrForward( true);\r
+                                       return false;\r
                                }\r
-                               return {\r
-                                       init: function(){\r
-                                               jqStage = jqEditor;\r
-                                               jqConsoleTail = $( '#comic-element-consol-tail');\r
-                                               jqImgConsole = $( '#image-element-consol').hide();\r
-                                               var imgConsoleSize = pettanr.util.getElementSize( jqImgConsole.get( 0));\r
-                                               imgConsoleWidth = imgConsoleSize.width;\r
-                                               imgConsoleHeight = imgConsoleSize.height;\r
-                                               \r
-                                               jqTextConsole = $( '#text-element-consol').hide();\r
-                                               var textConsoleSize = pettanr.util.getElementSize( jqTextConsole.get( 0));\r
-                                               textConsoleWidth = textConsoleSize.width;\r
-                                               textConsoleHeight = textConsoleSize.height;\r
-                                               \r
-                                               jqConsoleWrapper = $( '#comic-element-consol-wrapper').hide();\r
-                                               jqConsoleParent = jqConsoleWrapper.parent();\r
-                                               \r
-                                               $( '#edit-text-button').click( edit);\r
-                                               $( '#delete-image-button, #delete-text-button').click( del);\r
-                                               $( '#change-image-button').click( change);\r
-                                               $( '#layer-forward-button, #forward-text-button').click( layerForward);\r
-                                               $( '#layer-back-button, #back-text-button').click( layerBack);\r
-                                                                                                       \r
-                                               delete COMIC_ELEMENT_CONSOLE.init;\r
-                                       },\r
-                                       show: function( _currentElement, _w, _h){\r
-                                               visible === false && jqConsoleWrapper.show();\r
-                                               visible = true;\r
-                                               currentElement = _currentElement;\r
-                                               var _currentType = _currentElement.type,\r
-                                                       _z = _currentElement.z;\r
-                                               if( currentType !== _currentType){\r
-                                                       currentType = _currentType;\r
-                                                       jqImgConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_IMAGE);\r
-                                                       jqTextConsole.toggle( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
-                                                       consoleWidth = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleWidth : textConsoleWidth;\r
-                                                       consoleHeight = _currentType === COMIC_ELEMENT_TYPE_IMAGE ? imgConsoleHeight : textConsoleHeight;\r
-                                               }\r
-                                               consoleX = Math.floor( ( _w -consoleWidth) /2);\r
-                                               \r
-                                               LAYER_BACK_BUTTON.visible( _z > 0);\r
-                                               LAYER_FORWARD_BUTTON.visible( _z < DRAGGABLE_ELEMENT_ARRAY.length -1);\r
-                                               DELETE_BUTTON.visible( true);\r
-                                               EDIT_BUTTON.visible( _currentType === COMIC_ELEMENT_TYPE_TEXT);\r
-                                               CHANGE_BUTTON.visible( false);\r
-                                               \r
-                                               if( _w > consoleWidth * 1.5 && _h > consoleHeight * 1.5){\r
-                                                       consoleY = Math.floor( ( _h -consoleHeight) /2);\r
-                                                       jqConsoleWrapper.css( {\r
-                                                               left:                   consoleX,\r
-                                                               top:                    consoleY\r
-                                                       }).removeClass( 'console-out');\r
-                                               } else {\r
-                                                       consoleY = _h +tailSize;\r
-                                                       jqConsoleWrapper.css( {\r
-                                                               left:                   consoleX,\r
-                                                               top:                    consoleY\r
-                                                       }).addClass( 'console-out');\r
-                                               }\r
-                                       },\r
-                                       hide: function (){\r
-                                               visible === true && jqConsoleWrapper.hide();\r
-                                               visible = false;\r
-                                               currentElement = null;\r
-                                               LAYER_BACK_BUTTON.visible( false);\r
-                                               LAYER_FORWARD_BUTTON.visible( false);\r
-                                               DELETE_BUTTON.visible( false);\r
-                                               EDIT_BUTTON.visible( false);\r
-                                               CHANGE_BUTTON.visible( false);\r
-                                       },\r
-                                       x: function(){ return consoleX;},\r
-                                       y: function(){ return consoleY;},\r
-                                       w: function(){ return consoleWidth;},\r
-                                       h: function(){ return consoleHeight;},\r
-                                       onMouseMove: function( _mouseX, _mouseY){\r
-                                               if( consoleX > _mouseX || consoleY > _mouseY || consoleX +consoleWidth < _mouseX || consoleY +consoleHeight < _mouseY){\r
-                                                       buttonClickable === true && buttonBackOrForward( true);\r
-                                                       return false;\r
-                                               }\r
-                                               buttonClickable === false && buttonBackOrForward( false);\r
-                                               return true;\r
-                                       },\r
-                                       onMouseOut: function( _mouseX, _mouseY){\r
-                                               buttonClickable === true && buttonBackOrForward( true);\r
-                                       }\r
+                               buttonClickable === false && buttonBackOrForward( false);\r
+                               return true;\r
+                       },\r
+                       onMouseOut: function( _mouseX, _mouseY){\r
+                               buttonClickable === true && buttonBackOrForward( true);\r
+                       }\r
+               }\r
+       })();\r
+\r
+\r
+       var TAIL_OPERATOR = ( function(){\r
+               var     MOUSE_CURSOR = updateMouseCursor,\r
+                       ELM_MOVER = document.getElementById( 'balloon-tail-mover'),\r
+                       SIZE = pettanr.util.getElementSize( ELM_MOVER).width,\r
+                       SIN = Math.sin,\r
+                       COS = Math.cos,\r
+                       ATAN = Math.atan,\r
+                       FLOOR = Math.floor,\r
+                       DEG_TO_RAD = Math.PI / 180,\r
+                       RAD_TO_DEG = 1 /DEG_TO_RAD,\r
+                       currentText = null,\r
+                       tailX, tailY,\r
+                       x, y, w, h,\r
+                       balloonW, balloonH, balloonA, radA,\r
+                       visible = false,\r
+                       startA;\r
+               \r
+               return {\r
+                       update: function ( _w, _h, _a){\r
+                               balloonW = _w !== undefined ? _w : balloonW;\r
+                               balloonH = _h !== undefined ? _h : balloonH;\r
+                               balloonA = _a !== undefined ? _a : balloonA;\r
+                               radA = balloonA *DEG_TO_RAD;\r
+                               tailX = FLOOR( ( ( COS( radA) /2 +0.5) *( balloonW +SIZE)) -SIZE /2);\r
+                               tailY = FLOOR( ( ( SIN( radA) /2 +0.5) *( balloonH +SIZE)) -SIZE /2);\r
+                               ELM_MOVER.style.left = tailX +'px';\r
+                               ELM_MOVER.style.top = tailY +'px';\r
+                               //log.html( [ balloonW, balloonH, balloonA].join());\r
+                       },\r
+                       show: function( _currentText){\r
+                               /*\r
+                                * visibilityのほうがいい, display:none だと ie で描画が狂う\r
+                                */\r
+                               ELM_MOVER.style.visibility = '';\r
+                               this.update( _currentText.w, _currentText.h, _currentText.angle());\r
+                               currentText = _currentText;\r
+                       },\r
+                       hitTest: function( _mouseX, _mouseY){\r
+                               var _x = tailX -SIZE /2,\r
+                                       _y = tailY -SIZE /2;\r
+                                       ret = _x <= _mouseX && _y <= _mouseY && _x +SIZE >= _mouseX && _y +SIZE >= _mouseY;\r
+                               ret === true && MOUSE_CURSOR( 'move');\r
+                               return ret;\r
+                       },\r
+                       hide: function(){\r
+                               ELM_MOVER.style.visibility = 'hidden';\r
+                               currentText = null;\r
+                       },\r
+                       onStart: function( _currentText, _mouseX, _mouseY){\r
+                               if( _currentText.type !== COMIC_ELEMENT_TYPE_TEXT) return false;\r
+                               x = _currentText.x;\r
+                               y = _currentText.y;\r
+                               if( this.hitTest( _mouseX -x, _mouseY -y) === true){\r
+                                       w = _currentText.w;\r
+                                       h = _currentText.h;\r
+                                       currentText = _currentText;\r
+                                       startA = _currentText.angle();\r
+                                       return true;\r
                                }\r
-                       })(),\r
-                       TAIL_CONTROLER = ( function(){\r
-                               var     ELM_MOVER = document.getElementById( 'balloon-tail-mover'),\r
-                                       SIZE = pettanr.util.getElementSize( ELM_MOVER).width,\r
-                                       SIN = Math.sin,\r
-                                       COS = Math.cos,\r
-                                       ATAN = Math.atan,\r
-                                       FLOOR = Math.floor,\r
-                                       DEG_TO_RAD = Math.PI / 180,\r
-                                       RAD_TO_DEG = 1 /DEG_TO_RAD,\r
-                                       currentText = null,\r
-                                       tailX, tailY,\r
-                                       balloonW, balloonH, balloonA, radA,\r
-                                       visible = false,\r
-                                       startA;\r
+                               return false;\r
+                       },\r
+                       onDrag: function( _mouseX, _mouseY){\r
+                               _mouseX = _mouseX -x -w /2;\r
+                               _mouseY = _mouseY -y -h /2; //Balloonの中心を0,0とする座標系に変換\r
                                \r
-                               function draw( _w, _h, _a){\r
-                                       balloonW = _w !== undefined ? _w : balloonW;\r
-                                       balloonH = _h !== undefined ? _h : balloonH;\r
-                                       balloonA = _a !== undefined ? _a : balloonA;\r
-                                       radA = balloonA *DEG_TO_RAD;\r
-                                       tailX = FLOOR( ( ( COS( radA) /2 +0.5) *( balloonW +SIZE)) -SIZE /2);\r
-                                       tailY = FLOOR( ( ( SIN( radA) /2 +0.5) *( balloonH +SIZE)) -SIZE /2);\r
-                                       ELM_MOVER.style.left = tailX +'px';\r
-                                       ELM_MOVER.style.top = tailY +'px';\r
-                                       log.html( [ balloonW, balloonH, balloonA].join());\r
+                               this.update( w, h,\r
+                                       _mouseX !== 0 ?\r
+                                               ATAN( _mouseY /_mouseX) *RAD_TO_DEG +( _mouseX < 0 ? 180 : 0) :\r
+                                               _mouseY > 0 ? 90 : -90\r
+                               );\r
+                               currentText && currentText.angle( balloonA);\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.updateInfomation( undefined, undefined, undefined, balloonA);\r
+                       },\r
+                       onFinish: function(){\r
+                               startA !== currentText.angle() && COMIC_ELEMENT_OPERATION_MANAGER.saveStatus( x, y, w, h, startA);\r
+                               startA !== currentText.angle() && COMIC_ELEMENT_OPERATION_MANAGER.resize( x, y, w, h, currentText.angle());\r
+                               currentText = null;\r
+                       },\r
+                       onCancel: function(){\r
+                               currentText.angle( startA);\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.resize( x, y, w, h, startA);\r
+                               currentText = null;\r
+                       }\r
+               }\r
+       })(),\r
+       RESIZE_OPERATOR = ( function(){\r
+               var     MOUSE_CURSOR = updateMouseCursor,\r
+                       GRID_ENABLED = GRID_CONTROL.enabled;\r
+               \r
+               var     HIT_AREA = MOUSE_HIT_AREA,\r
+                       POSITION_ARRAY = [],\r
+                       FLOOR = Math.floor,\r
+                       CURSOR_AND_FLIP = [\r
+                               { cursor:       'n-resize',             v: 3},\r
+                               { cursor:       'e-resize',             h: 2},\r
+                               { cursor:       'e-resize',             h: 1},\r
+                               { cursor:       'n-resize',             v: 0},\r
+                               { cursor:       'nw-resize',    h: 5, v: 6, vh: 7},\r
+                               { cursor:       'ne-resize',    h: 4, v: 7, vh: 6},\r
+                               { cursor:       'ne-resize',    h: 7, v: 4, vh: 5},\r
+                               { cursor:       'nw-resize',    h: 6, v: 5, vh: 4}\r
+                       ],\r
+                       elmResizerContainer = document.getElementById( 'comic-element-resizer-container'),\r
+                       elmResizerContainerStyle = elmResizerContainer.style,\r
+                       elmResizerTopStyle = document.getElementById( 'comic-element-resizer-top').style,\r
+                       elmResizerLeftStyle = document.getElementById( 'comic-element-resizer-left').style,\r
+                       elmResizerRightStyle = document.getElementById( 'comic-element-resizer-right').style,\r
+                       elmResizerBottomStyle = document.getElementById( 'comic-element-resizer-bottom').style,\r
+                       x, y, w, h,\r
+                       currentIndex = -1,\r
+                       currentElement,\r
+                       currentIsTextElement = false;\r
+               \r
+               elmResizerContainerStyle.display = 'none';\r
+               \r
+               var RESIZE_WORK_ARRAY = [\r
+                               { x:    0, w:    0, y:  1, h:   -1}, //top\r
+                               { x:    1, w:   -1, y:  0, h:    0}, //left\r
+                               { x:    0, w:    1, y:  0, h:    0}, //right\r
+                               { x:    0, w:    0, y:  0, h:    1}, //bottom\r
+                               { x:    1, w:   -1, y:  1, h:   -1}, //top-left\r
+                               { x:    0, w:    1, y:  1, h:   -1}, //top-right\r
+                               { x:    1, w:   -1, y:  0, h:    1}, //bottom-left\r
+                               { x:    0, w:    1, y:  0, h:    1}  //bottom-right\r
+                       ],\r
+                       startX, startY, startW, startH, startFilpV, startFilpH, startAspect,\r
+                       baseX, baseY, baseW, baseH,\r
+                       currentX, currentY, currentW, currentH,\r
+                       offsetX, offsetY,\r
+                       error = 0;\r
+               \r
+               function draw( _x, _y, _w, _h){\r
+                       x = _x !== undefined ? _x : x;\r
+                       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
+                       \r
+                       POSITION_ARRAY.splice( 0, POSITION_ARRAY.length);\r
+                       POSITION_ARRAY.push(\r
+                               {x:     x +5,                                   y:      y -HIT_AREA,            w:      w -5 *2,                h:      HIT_AREA +5},\r
+                               {x: x -HIT_AREA,                        y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
+                               {x: x +w -5,                            y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
+                               {x:     x +5,                                   y:      y +h -5,                        w:      w -5 *2,                h:      HIT_AREA +5},\r
+                               {x:     x -HIT_AREA,                    y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                               {x: x +w -HIT_AREA,                     y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                               {x:     x -HIT_AREA,                    y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
+                               {x:     x +w -5,                                y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5}\r
+                       );\r
+               }\r
+               \r
+               function update( _x, _y, _w, _h){\r
+                       x = _x !== undefined ? _x : currentX;\r
+                       y = _y !== undefined ? _y : currentY;\r
+                       w = _w !== undefined ? _w : currentW;\r
+                       h = _h !== undefined ? _h : currentH;\r
+                       \r
+                       if( currentIsTextElement === false && currentIndex > 3 && pettanr.key.shiftEnabled() === true){\r
+                               if( startAspect >= 1){\r
+                                       _w = w;\r
+                                       w = Math.floor( startAspect * h);\r
+                                       x = x +( currentIndex % 2 === 0 ? _w -w : 0);\r
+                               } else {\r
+                                       _h = h;\r
+                                       h = Math.floor( w / startAspect);\r
+                                       y = y + ( currentIndex <= 5 ? _h -h : 0);\r
                                }\r
-                               function hitTest( _mouseX, _mouseY){\r
-                                       var _x = tailX -SIZE /2,\r
-                                               _y = tailY -SIZE /2;\r
-                                               ret = currentIsTextElement === true && _x <= _mouseX && _y <= _mouseY && _x +SIZE >= _mouseX && _y +SIZE >= _mouseY;\r
-                                       ret === true && MOUSE_CURSOR( 'move');\r
-                                       return ret;\r
+                       }\r
+                       draw( x, y, w, h);\r
+                       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
+               }\r
+               \r
+               function flip( _flipV, _flipH){\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
+               }\r
+               return {\r
+                       update: draw,\r
+                       index: function( _mouseX, _mouseY){\r
+                               var     p;\r
+                               for( var i=4; i<8; i++){\r
+                                       p = POSITION_ARRAY[ i];\r
+                                       if( p.x <= _mouseX && p.y <= _mouseY && p.x + p.w >= _mouseX && p.y +p.h >= _mouseY){\r
+                                               MOUSE_CURSOR( CURSOR_AND_FLIP[ i].cursor);\r
+                                               elmResizerContainer.className = 'current-resizer-is-' +i;\r
+                                               return currentIndex = i;\r
+                                       }\r
                                }\r
-                               return {\r
-                                       update: draw,\r
-                                       show: function( _currentText){\r
-                                               /*\r
-                                                * visibilityのほうがいい, display:none だと ie で描画が狂う\r
-                                                */\r
-                                               ELM_MOVER.style.visibility = '';\r
-                                               draw( _currentText.w, _currentText.h, _currentText.angle());\r
-                                               currentText = _currentText;\r
-                                       },\r
-                                       hitTest: hitTest,\r
-                                       hide: function(){\r
-                                               ELM_MOVER.style.visibility = 'hidden';\r
-                                               currentText = null;\r
-                                       },\r
-                                       onStart: function( _currentText, _mouseX, _mouseY){\r
-                                               if( hitTest( _mouseX -currentx, _mouseY -currenty) === true){\r
-                                                       currentText = _currentText;\r
-                                                       startA = _currentText.angle();\r
-                                                       return true;\r
-                                               }\r
-                                               currentText = null;\r
-                                               return false;\r
-                                       },\r
-                                       onDrag: function( _mouseX, _mouseY){\r
-                                               _mouseX = _mouseX -currentText.x -currentw /2;\r
-                                               _mouseY = _mouseY -currentText.y -currenth /2; //Balloonの中心を0,0とする座標系に変換\r
-                                               \r
-                                               draw( currentw, currenth,\r
-                                                       _mouseX !== 0 ?\r
-                                                               ATAN( _mouseY /_mouseX) *RAD_TO_DEG +( _mouseX < 0 ? 180 : 0) :\r
-                                                               _mouseY > 0 ? 90 : -90\r
-                                               );\r
-                                               currentText && currentText.angle( balloonA);\r
-                                               updateInfomation( undefined, undefined, undefined, balloonA);\r
-                                       },\r
-                                       onFinish: function(){\r
-                                               startA !== currentText.angle() && saveComicElementStatus( currentx, currenty, currentw, currenth, startA);\r
-                                               startA !== currentText.angle() && resize( undefined, undefined, undefined, undefined, currentText.angle());\r
-                                               currentText = null;\r
-                                       },\r
-                                       onCancel: function(){\r
-                                               resize( undefined, undefined, undefined, undefined, startA);\r
+                               for( var i=0; i<4; i++){\r
+                                       p = POSITION_ARRAY[ i];\r
+                                       if( p.x <= _mouseX && p.y <= _mouseY && p.x + p.w >= _mouseX && p.y +p.h >= _mouseY){\r
+                                               MOUSE_CURSOR( CURSOR_AND_FLIP[ i].cursor);\r
+                                               elmResizerContainer.className = 'current-resizer-is-' +i;\r
+                                               return currentIndex = i;\r
                                        }\r
                                }\r
-                       })(),\r
-                       RESIZE_CONTROLER = ( function(){\r
-                               var POSITION_ARRAY = [],\r
-                                       FLOOR = Math.floor,\r
-                                       CURSOR_AND_FLIP = [\r
-                                               { cursor:       'n-resize',             v: 3},\r
-                                               { cursor:       'e-resize',             h: 2},\r
-                                               { cursor:       'e-resize',             h: 1},\r
-                                               { cursor:       'n-resize',             v: 0},\r
-                                               { cursor:       'nw-resize',    h: 5, v: 6, vh: 7},\r
-                                               { cursor:       'ne-resize',    h: 4, v: 7, vh: 6},\r
-                                               { cursor:       'ne-resize',    h: 7, v: 4, vh: 5},\r
-                                               { cursor:       'nw-resize',    h: 6, v: 5, vh: 4}\r
-                                       ],      \r
-                                       elmResizerContainerStyle = document.getElementById( 'comic-element-resizer-container').style,\r
-                                       elmResizerTopStyle = document.getElementById( 'comic-element-resizer-top').style,\r
-                                       elmResizerLeftStyle = document.getElementById( 'comic-element-resizer-left').style,\r
-                                       elmResizerRightStyle = document.getElementById( 'comic-element-resizer-right').style,\r
-                                       elmResizerBottomStyle = document.getElementById( 'comic-element-resizer-bottom').style,\r
-                                       x, y, w, h,\r
-                                       currentIndex = -1,\r
-                                       currentElement,\r
-                                       currentIsTextElement = false;\r
-                               \r
+                               MOUSE_CURSOR( '');\r
+                               elmResizerContainer.className = '';\r
+                               return -1;\r
+                       },\r
+                       show: function( _currentElement){\r
+                               currentElement = _currentElement;\r
+                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
+                               elmResizerContainerStyle.display = '';\r
+                       },\r
+                       hide: function(){\r
+                               currentElement = null;\r
                                elmResizerContainerStyle.display = 'none';\r
-                               \r
-                               var RESIZE_WORK_ARRAY = [\r
-                                               { x:    0, w:    0, y:  1, h:   -1}, //top\r
-                                               { x:    1, w:   -1, y:  0, h:    0}, //left\r
-                                               { x:    0, w:    1, y:  0, h:    0}, //right\r
-                                               { x:    0, w:    0, y:  0, h:    1}, //bottom\r
-                                               { x:    1, w:   -1, y:  1, h:   -1}, //top-left\r
-                                               { x:    0, w:    1, y:  1, h:   -1}, //top-right\r
-                                               { x:    1, w:   -1, y:  0, h:    1}, //bottom-left\r
-                                               { x:    0, w:    1, y:  0, h:    1}  //bottom-right\r
-                                       ],\r
-                                       startX, startY, startW, startH, startFilpV, startFilpH, startAspect,\r
-                                       baseX, baseY, baseW, baseH,\r
-                                       currentX, currentY, currentW, currentH,\r
-                                       resultX, resultY, resultW, resultH,\r
-                                       xOffset, yOffset,\r
-                                       error = 0;\r
-                               \r
-                               function draw( _x, _y, _w, _h){\r
-                                       x = _x !== undefined ? _x : x;\r
-                                       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
-                                       \r
-                                       POSITION_ARRAY.splice( 0, POSITION_ARRAY.length);\r
-                                       POSITION_ARRAY.push(\r
-                                               {x:     x +5,                                   y:      y -HIT_AREA,            w:      w -5 *2,                h:      HIT_AREA +5},\r
-                                               {x: x -HIT_AREA,                        y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
-                                               {x: x +w -5,                            y:      y +HIT_AREA +5,         w:      HIT_AREA +5,    h:      h -5 *2},\r
-                                               {x:     x +5,                                   y:      y +h -5,                        w:      w -5 *2,                h:      HIT_AREA +5},\r
-                                               {x:     x -HIT_AREA,                    y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
-                                               {x: x +w -HIT_AREA,                     y:      y -HIT_AREA,            w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
-                                               {x:     x -HIT_AREA,                    y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5},\r
-                                               {x:     x +w -5,                                y:      y +h -5,                        w:      HIT_AREA +5,    h:      HIT_AREA +5}\r
-                                       );\r
+                       },\r
+                       onStart: function( _currentElement, _mouseX, _mouseY){\r
+                               currentElement = _currentElement;\r
+                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
+                               if( _currentElement.keepSize === true) return false;\r
+                               currentIndex = this.index( _mouseX, _mouseY);\r
+                               if( currentIndex === -1) return false;\r
+                               offsetX = _mouseX;\r
+                               offsetY = _mouseY;\r
+                               startX = baseX = _currentElement.x;\r
+                               startY = baseY = _currentElement.y;\r
+                               startW = baseW = _currentElement.w;\r
+                               startH = baseH = _currentElement.h;\r
+                               if( _currentElement.type === COMIC_ELEMENT_TYPE_IMAGE){\r
+                                       startFilpV = _currentElement.flipV();\r
+                                       startFilpH = _currentElement.flipH();                                                   \r
                                }\r
-                               \r
-                               function update( _x, _y, _w, _h){\r
-                                       resultX = _x !== undefined ? _x : currentX;\r
-                                       resultY = _y !== undefined ? _y : currentY;\r
-                                       resultW = _w !== undefined ? _w : currentW;\r
-                                       resultH = _h !== undefined ? _h : currentH;\r
+                               startAspect = startW /startH;\r
+                               return true;\r
+                       },\r
+                       onDrag: function( _mouseX, _mouseY){\r
+                               var com = RESIZE_WORK_ARRAY[ currentIndex],\r
+                                       moveX = _mouseX -offsetX,\r
+                                       moveY = _mouseY -offsetY,\r
+                                       _x, _y, _w, _h,\r
+                                       _updated,\r
+                                       _thisError = 0;\r
                                        \r
-                                       if( currentIsTextElement === false && currentIndex > 3 && pettanr.key.shiftEnabled() === true){\r
-                                               if( startAspect >= 1){\r
-                                                       _w = resultW;\r
-                                                       resultW = Math.floor( startAspect * resultH);\r
-                                                       resultX = resultX +( currentIndex % 2 === 0 ? _w -resultW : 0);\r
-                                               } else {\r
-                                                       _h = resultH;\r
-                                                       resultH = Math.floor( resultW / startAspect);\r
-                                                       resultY = resultY + ( currentIndex <= 5 ? _h -resultH : 0);\r
-                                               }\r
-                                       }\r
-                                       draw( resultX, resultY, resultW, resultH);\r
-                                       currentElement.resize( resultX, resultY, resultW, resultH);\r
-                                       currentIsTextElement === true && TAIL_CONTROLER.update( resultW, resultH);\r
-                                       COMIC_ELEMENT_CONSOLE.show( currentElement, resultW, resultH);\r
-                                       updateInfomation( resultX, resultY, undefined, undefined, resultW, resultH);\r
-                               }\r
-                               function getIndex( _mouseX, _mouseY){\r
-                                       var     p,\r
-                                               l = POSITION_ARRAY.length;\r
-                                       for( var i=0; i<l; i++){\r
-                                               p = POSITION_ARRAY[ i];\r
-                                               if( p.x <= _mouseX && p.y <= _mouseY && p.x + p.w >= _mouseX && p.y +p.h >= _mouseY){\r
-                                                       MOUSE_CURSOR( CURSOR_AND_FLIP[ i].cursor);\r
-                                                       return currentIndex = i;\r
-                                               }\r
+                               var _memoryX = 0,\r
+                                       _memoryY = 0;\r
+                               /*\r
+                                * Opera 11+ often forget values, why ??
+                                */\r
+                               while( _x === undefined || _y === undefined || _w === undefined || _h === undefined){\r
+                                       com = RESIZE_WORK_ARRAY[ currentIndex];\r
+                                       moveX = _mouseX -offsetX;\r
+                                       moveY = _mouseY -offsetY;\r
+                                       _x = baseX +moveX *com.x;\r
+                                       _y = baseY +moveY *com.y;\r
+                                       _w = baseW +moveX *com.w;\r
+                                       _h = baseH +moveY *com.h;\r
+                                       _updated = moveX !== 0 || moveY !== 0;\r
+                                       ++_thisError;\r
+                                       if( _thisError > 9999){\r
+                                               ++error\r
+                                               //alert( 'opera error' +error);\r
+                                               this.onCancel;\r
+                                               return;\r
                                        }\r
-                                       return -1;\r
                                }\r
-                               function flip( _flipV, _flipH){\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
-                                       currentElement.flip( _flipV, _flipH);\r
-                               }\r
-                               return {\r
-                                       x: function(){ return x;},\r
-                                       y: function(){ return y;},\r
-                                       w: function(){ return w;},\r
-                                       h: function(){ return h;},\r
-                                       update: draw,\r
-                                       index: getIndex,\r
-                                       show: function( _currentElement){\r
-                                               currentElement = _currentElement;\r
-                                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
-                                               elmResizerContainerStyle.display = '';\r
-                                       },\r
-                                       hide: function(){\r
-                                               currentElement = null;\r
-                                               elmResizerContainerStyle.display = 'none';\r
-                                       },\r
-                                       onStart: function( _currentElement, _mouseX, _mouseY){\r
-                                               currentElement = _currentElement;\r
-                                               currentIsTextElement = _currentElement.type === COMIC_ELEMENT_TYPE_TEXT;\r
-                                               if( _currentElement.keepSize === true) return false;\r
-                                               currentIndex = getIndex( _mouseX, _mouseY);\r
-                                               if( currentIndex === -1) return false;\r
-                                               xOffset = _mouseX;\r
-                                               yOffset = _mouseY;\r
-                                               startX = baseX = x = _currentElement.x;\r
-                                               startY = baseY = y = _currentElement.y;\r
-                                               startW = baseW = w = _currentElement.w;\r
-                                               startH = baseH = h = _currentElement.h;\r
-                                               startFilpV = flipV;\r
-                                               startFilpH = flipH;\r
-                                               startAspect = startW /startH;\r
-                                               return true;\r
-                                       },\r
-                                       onDrag: function( _mouseX, _mouseY){\r
-                                               var com = RESIZE_WORK_ARRAY[ currentIndex],\r
-                                                       moveX = _mouseX -xOffset,\r
-                                                       moveY = _mouseY -yOffset,\r
-                                                       _x = baseX +moveX *com.x,\r
-                                                       _y = baseY +moveY *com.y,\r
-                                                       _w = baseW +moveX *com.w,\r
-                                                       _h = baseH +moveY *com.h,\r
-                                                       _updated = moveX !== 0 || moveY !== 0;\r
-                                               \r
-                                               // opera がときどき baseH の値を忘れる ??\r
-                                               if( _x === undefined || _y === undefined || _w === undefined || _h === undefined){\r
-                                                       ++error;\r
-                                                       return;\r
-                                               }\r
-                                               \r
-                                               if( _w >= MIN_OBJECT_SIZE && _h >= MIN_OBJECT_SIZE){\r
-                                                       \r
-                                               } else \r
-                                               if( _w >= -MIN_OBJECT_SIZE && _h >= -MIN_OBJECT_SIZE){\r
-                                                       return;\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
-                                                       var __x = 0,\r
-                                                               __y = 0;\r
-                                                       if( _w < -MIN_OBJECT_SIZE && _h > MIN_OBJECT_SIZE){\r
-                                                       // flipH\r
-                                                               __x = _x;\r
-                                                               baseX = _x = _x +_w;\r
-                                                               baseY = _y;\r
-                                                               baseW = _w = __x -_x;\r
-                                                               baseH = _h;\r
-                                                               flip( false, true);\r
-                                                               flipV = currentElement.flipV();\r
-                                                       } else \r
-                                                       if( _w > MIN_OBJECT_SIZE && _h < -MIN_OBJECT_SIZE){\r
-                                                       // flipV\r
-                                                               __y = _y;\r
-                                                               baseX = _x;\r
-                                                               baseY = _y = _y +_h;\r
-                                                               baseW = _w;\r
-                                                               baseH = _h = __y -_y;\r
-                                                               flip( true, false);\r
-                                                               flipH = currentElement.flipH();\r
-                                                       } else {\r
-                                                       // flipVH\r
-                                                               __x = _x;\r
-                                                               __y = _y;\r
-                                                               baseX = _x = _x +_w;\r
-                                                               baseY = _y = _y +_h;\r
-                                                               baseW = _w = __x -_x;\r
-                                                               baseH = _h = __y -_y;\r
-                                                               flip( true, true);\r
-                                                               flipV = currentElement.flipV();\r
-                                                               flipH = currentElement.flipH();\r
-                                                       }\r
-                                                       _updated = true;\r
-                                                       xOffset = _mouseX;\r
-                                                       yOffset = _mouseY;      \r
-                                               }\r
-                                               currentX = _x;\r
-                                               currentY = _y;\r
-                                               currentW = _w;\r
-                                               currentH = _h;\r
-                                               _updated === true && update( _x, _y, _w, _h);\r
-                                               \r
-                                               log.html( [\r
-                                                               'currentIndex:', currentIndex, \r
-                                                               'baseW', baseW, 'baseH', baseH,'<br>',\r
-                                                               'mouse', _mouseX, _mouseY,'<br>',\r
-                                                               'move', moveX, moveY,'<br>',\r
-                                                               'xy', _x, _y, 'wh',_w, _h,'<br>',\r
-                                                               'com.w', com.w, 'com.h', com.h,'<br>',\r
-                                                               'current',currentW, currentH,'<br>',\r
-                                                               'result', resultY, resultH,\r
-                                                               'err', error\r
-                                               ].join( ' , '));\r
-                                       },\r
-                                       onFinish: function(){\r
-                                               MOUSE_CURSOR( '');\r
-                                               if( resultW === startW && resultH === startH && resultX === startX && resultY === startY) return;\r
-                                               resize( resultX, resultY, resultW, resultH);\r
-                                               currentElement.resize( resultX, resultY, resultW, resultH);\r
-                                               saveComicElementStatus( startX, startY, startW, startH, angle, startFilpV, startFilpH);\r
-                                       },\r
-                                       onCancel: function(){\r
-                                               MOUSE_CURSOR( '');\r
-                                               resize( startX, startY, startW, startH);\r
-                                               currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
-                                                       currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :\r
-                                                       currentElement.animate( startX, startY, startW, startH, angle);\r
-                                       },\r
-                                       onShiftUpdate: update,\r
-                                       onCtrlUpdate: update\r
-                               }\r
-                       })(),\r
-                       POSITION_CONTROLER = ( function(){\r
-                               var currentElement,\r
-                                       startX, startY,\r
-                                       x, currentY,\r
-                                       xOffset, yOffset,\r
-                                       isCopy = false;\r
                                \r
-                               function update( _x, _y){\r
-                                       x = _x !== undefined ? _x : x;\r
-                                       y = _y !== undefined ? _y : y;\r
-                                       RESIZE_CONTROLER.update( x, y);\r
-                                       currentElement.resize( x, y);\r
-                                       updateInfomation( x, y);                                                        \r
+                               if( _w >= MIN_OBJECT_SIZE && _h >= MIN_OBJECT_SIZE){\r
+                                       \r
+                               } else \r
+                               if( _w >= -MIN_OBJECT_SIZE && _h >= -MIN_OBJECT_SIZE){\r
+                                       //return;\r
+                                       _w = _w < MIN_OBJECT_SIZE ? MIN_OBJECT_SIZE : _w;\r
+                                       _h = _h < MIN_OBJECT_SIZE ? MIN_OBJECT_SIZE : _h;\r
+                                       _x = currentX;\r
+                                       _y = currentY;\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
+\r
+                                       if( _w < -MIN_OBJECT_SIZE && _h > MIN_OBJECT_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
+                                               flipV = currentElement.flipV();\r
+                                       } else \r
+                                       if( _w > MIN_OBJECT_SIZE && _h < -MIN_OBJECT_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
+                                               flipH = currentElement.flipH();\r
+                                       } else {\r
+                                       // flipVH\r
+                                               _memoryX = _x;\r
+                                               _memoryY = _y;\r
+                                               baseX = _x = _x +_w;\r
+                                               baseY = _y = _y +_h;\r
+                                               baseW = _w = _memoryX -_x;\r
+                                               baseH = _h = _memoryY -_y;\r
+                                               flip( true, true);\r
+                                               flipV = currentElement.flipV();\r
+                                               flipH = currentElement.flipH();\r
+                                       }\r
+                                       _updated = true;\r
+                                       offsetX = _mouseX;\r
+                                       offsetY = _mouseY;      \r
                                }\r
+                               currentX = _x;\r
+                               currentY = _y;\r
+                               currentW = _w;\r
+                               currentH = _h;\r
+                               _updated === true && update( _x, _y, _w, _h);\r
                                \r
-                               return {\r
-                                       onStart: function( _currentElement, _mouseX, _mouseY){\r
-                                               currentElement = _currentElement;\r
-                                               xOffset = _mouseX;\r
-                                               yOffset = _mouseY;\r
-                                               startX = x = currentx;\r
-                                               startY = y = currenty;\r
-                                               MOUSE_CURSOR( 'move');\r
-                                       },\r
-                                       onDrag: function( _mouseX, _mouseY){\r
-                                               var moveX = _mouseX -xOffset,\r
-                                                       moveY = _mouseY -yOffset,\r
-                                                       _x = currentx +moveX,\r
-                                                       _y = currenty +moveY;\r
-                                               if( GRID_ENABLED() === true){\r
-                                                       _x = Math.floor( _x / 10) * 10;\r
-                                                       _y = Math.floor( _y / 10) * 10;\r
-                                               }\r
-                                               update( _x, _y);\r
-                                       },\r
-                                       onFinish: function(){\r
-                                               MOUSE_CURSOR( '');\r
-                                               if( x === startX && y === startY) return;\r
-                                               resize( x, y);\r
-                                               currentElement.resize( x, y);\r
-                                               saveComicElementStatus( startX, startY);\r
-                                       },\r
-                                       onCancel: function(){\r
-                                               MOUSE_CURSOR( '');\r
-                                               resize( startX, startY);\r
-                                               currentElement.animate( startX, startY);\r
-                                       },\r
-                                       onShiftUpdate: update,\r
-                                       onCtrlUpdate: update\r
+                               log.html( [\r
+                                               'currentIndex:', currentIndex, \r
+                                               'baseW', baseW, 'baseH', baseH,'<br>',\r
+                                               'mouse', _mouseX, _mouseY,'<br>',\r
+                                               'move', moveX, moveY,'<br>',\r
+                                               'xy', _x, _y, 'wh',_w, _h,'<br>',\r
+                                               'com.w', com.w, 'com.h', com.h,'<br>',\r
+                                               'current',currentW, currentH,'<br>',\r
+                                               'result', y, h,\r
+                                               'err', error\r
+                               ].join( ' , '));\r
+                       },\r
+                       onFinish: function(){\r
+                               MOUSE_CURSOR( '');\r
+                               if( w === startW && h === startH && x === startX && y === startY) return;\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.resize( x, y, w, h);\r
+                               currentElement.resize( x, y, w, h);\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.saveStatus( startX, startY, startW, startH, undefined, startFilpV, startFilpH);\r
+                       },\r
+                       onCancel: function(){\r
+                               MOUSE_CURSOR( '');\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.resize( startX, startY, startW, startH);\r
+                               currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
+                                       currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :\r
+                                       currentElement.animate( startX, startY, startW, startH, angle);\r
+                       },\r
+                       onShiftUpdate: update,\r
+                       onCtrlUpdate: update\r
+               }\r
+       })(),\r
+       POSITION_OPERATOR = ( function(){\r
+               var     MOUSE_CURSOR = updateMouseCursor,\r
+                       GRID_ENABLED = GRID_CONTROL.enabled;\r
+               \r
+               var currentElement,\r
+                       startX, startY,\r
+                       x, y,\r
+                       offsetX, offsetY,\r
+                       isCopy = false;\r
+               \r
+               function update( _x, _y){\r
+                       x = _x !== undefined ? _x : x;\r
+                       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
+               }\r
+               \r
+               return {\r
+                       onStart: function( _currentElement, _mouseX, _mouseY){\r
+                               currentElement = _currentElement;\r
+                               offsetX = _mouseX;\r
+                               offsetY = _mouseY;\r
+                               startX = x = _currentElement.x;\r
+                               startY = y = _currentElement.y;\r
+                               MOUSE_CURSOR( 'move');\r
+                       },\r
+                       onDrag: function( _mouseX, _mouseY){\r
+                               var moveX = _mouseX -offsetX,\r
+                                       moveY = _mouseY -offsetY,\r
+                                       _x = startX +moveX,\r
+                                       _y = startY +moveY;\r
+                               if( GRID_ENABLED() === true){\r
+                                       _x = Math.floor( _x / 10) * 10;\r
+                                       _y = Math.floor( _y / 10) * 10;\r
                                }\r
-                       })();\r
+                               update( _x, _y);\r
+                       },\r
+                       onFinish: function(){\r
+                               MOUSE_CURSOR( '');\r
+                               if( x === startX && y === startY) return;\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.resize( x, y);\r
+                               currentElement.resize( x, y);\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.saveStatus( startX, startY);\r
+                       },\r
+                       onCancel: function(){\r
+                               MOUSE_CURSOR( '');\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.resize( startX, startY);\r
+                               currentElement.animate( startX, startY);\r
+                       },\r
+                       onShiftUpdate: update,\r
+                       onCtrlUpdate: update\r
+               }\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
+                       GRID_ENABLED = GRID_CONTROL.enabled,\r
+                       HIT_AREA = MOUSE_HIT_AREA,\r
+                       currentIsTextElement = false,\r
+                       currentOperator = null,\r
+                       currentElement = null,\r
+                       currentx, currenty, currentw, currenth, angle, flipV, flipH;\r
 \r
                        function resize( _x, _y, _w, _h, _angle){\r
                                currentx = _x !== undefined ? _x : currentx;\r
@@ -2339,15 +2424,15 @@ pettanr.editor = ( function(){
                                currenth = _h !== undefined ? _h : currenth;\r
                                angle = _angle !== undefined ? _angle : angle;\r
 \r
-                               RESIZE_CONTROLER.update( currentx, currenty, currentw, currenth);\r
-                               currentIsTextElement === true && TAIL_CONTROLER.update( currentw, currenth, angle);\r
-                               COMIC_ELEMENT_CONSOLE.show( currentElement, currentw, currenth);\r
+                               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(\r
+                               INFOMATION_WINDOW.update(\r
                                        currentElement === null ? -1 : currentElement.type,\r
                                        _x !== undefined ? _x : currentx,\r
                                        _y !== undefined ? _y : currenty,\r
@@ -2361,12 +2446,12 @@ pettanr.editor = ( function(){
                                );\r
                        }\r
                        function show( _currentElement){\r
-                               currentElement === null && RESIZE_CONTROLER.show( _currentElement);\r
+                               currentElement === null && RESIZE_OPERATOR.show( _currentElement);\r
                                if( currentElement !== _currentElement){\r
                                        currentElement = _currentElement;\r
                                        \r
                                        currentIsTextElement = ( _currentElement.type === COMIC_ELEMENT_TYPE_TEXT);\r
-                                       currentIsTextElement === true ? TAIL_CONTROLER.show( _currentElement) : TAIL_CONTROLER.hide();\r
+                                       currentIsTextElement === true ? TAIL_OPERATOR.show( _currentElement) : TAIL_OPERATOR.hide();\r
                                        \r
                                        flipV = currentIsTextElement === false ? _currentElement.flipV() : 0;\r
                                        flipH = currentIsTextElement === false ? _currentElement.flipH() : 0;\r
@@ -2378,11 +2463,11 @@ pettanr.editor = ( function(){
                                }\r
                        }\r
                        function hide(){\r
-                               currentElement !== null && RESIZE_CONTROLER.hide();\r
+                               currentElement !== null && RESIZE_OPERATOR.hide();\r
                                currentElement = null;\r
                                MOUSE_CURSOR( '');\r
-                               TAIL_CONTROLER.hide();\r
-                               COMIC_ELEMENT_CONSOLE.hide();\r
+                               TAIL_OPERATOR.hide();\r
+                               CONSOLE_CONTROLER.hide();\r
                                updateInfomation();\r
                        }\r
                        function restoreState( arg){\r
@@ -2391,12 +2476,12 @@ pettanr.editor = ( function(){
                                        _x = arg[ 1], _y = arg[ 2], _w = arg[ 3], _h = arg[ 4],\r
                                        _a = arg[ 5],\r
                                        _flipV = arg[ 6], _flipH = arg[ 7];\r
-                               if( !_currentElement && !currentControler) return;\r
+                               if( !_currentElement && !currentOperator) return;\r
                                _currentElement.type === COMIC_ELEMENT_TYPE_IMAGE ?\r
                                        _currentElement.animate( _x, _y, _w, _h, _flipV, _flipH) :\r
                                        _currentElement.animate( _x, _y, _w, _h, _a);\r
-                               currentControler !== null && currentControler.onCancel && currentControler.onCancel();\r
-                               currentControler = null;\r
+                               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
@@ -2413,28 +2498,31 @@ pettanr.editor = ( function(){
                                );\r
                        }\r
                        pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 16, undefined, undefined, function( e){\r
-                               currentControler !== null && currentControler.onShiftUpdate && currentControler.onShiftUpdate();\r
+                               currentOperator !== null && currentOperator.onShiftUpdate && currentOperator.onShiftUpdate();\r
                        });\r
                        pettanr.key.addKeyUpdateEvent( pettanr.view.EDITOR, 17, undefined, undefined, function(){\r
-                               currentControler !== null && currentControler.onCtrlUpdate && currentControler.onCtrlUpdate();\r
+                               currentOperator !== null && currentOperator.onCtrlUpdate && currentOperator.onCtrlUpdate();\r
                        });\r
                        pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 27, false, false, function(){\r
-                               currentControler !== null && currentControler.onCancel && currentControler.onCancel();\r
-                               currentControler = null;\r
+                               currentOperator !== null && currentOperator.onCancel && currentOperator.onCancel();\r
+                               currentOperator = null;\r
                        });\r
                return {\r
                        init: function(){\r
-                               COMIC_ELEMENT_CONSOLE.init();\r
                                hide();\r
-                               delete COMIC_ELEMENT_OPERATOR.init;\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 currentControler !== null;\r
+                               return currentOperator !== null;\r
                        },\r
                        hitareaX: function( _comicElement, _x){\r
                                if( _comicElement === currentElement){\r
-                                       var _consoleX = COMIC_ELEMENT_CONSOLE.x();\r
+                                       var _consoleX = CONSOLE_CONTROLER.x();\r
                                        return currentx +( _consoleX < 0 ? _consoleX : 0) -HIT_AREA;\r
                                }\r
                                return _x -HIT_AREA;\r
@@ -2444,51 +2532,54 @@ pettanr.editor = ( function(){
                        },\r
                        hitareaW: function( _comicElement, _w){\r
                                if( _comicElement === currentElement){\r
-                                       var _consoleW = COMIC_ELEMENT_CONSOLE.w();\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 = COMIC_ELEMENT_CONSOLE.y();\r
-                                       return ( _consoleY < currenth ? currenth : _consoleY +COMIC_ELEMENT_CONSOLE.h()) +HIT_AREA *2;\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
                        onMouseDown: function( _currentElement, _mouseX, _mouseY){\r
                                //show( _currentElement);\r
-                               if( currentIsTextElement === true && TAIL_CONTROLER.onStart( _currentElement, _mouseX, _mouseY) === true){\r
-                                       currentControler = TAIL_CONTROLER;\r
+                               if( currentIsTextElement === true && TAIL_OPERATOR.onStart( _currentElement, _mouseX, _mouseY) === true){\r
+                                       currentOperator = TAIL_OPERATOR;\r
                                } else\r
-                               if( RESIZE_CONTROLER.onStart( _currentElement, _mouseX, _mouseY) === true){\r
-                                       currentControler = RESIZE_CONTROLER;\r
+                               if( RESIZE_OPERATOR.onStart( _currentElement, _mouseX, _mouseY) === true){\r
+                                       currentOperator = RESIZE_OPERATOR;\r
                                } else {\r
-                                       POSITION_CONTROLER.onStart( _currentElement, _mouseX, _mouseY)\r
-                                       currentControler = POSITION_CONTROLER;\r
+                                       POSITION_OPERATOR.onStart( _currentElement, _mouseX, _mouseY)\r
+                                       currentOperator = POSITION_OPERATOR;\r
                                }\r
                        },\r
                        onMouseMove: function( _currentElement, _mouseX, _mouseY){\r
                                show( _currentElement);\r
-                               if( currentControler !== null){\r
-                                       currentControler.onDrag( _mouseX, _mouseY);                                             \r
-                               } else {\r
-                                       currentElement && COMIC_ELEMENT_CONSOLE.onMouseMove( _mouseX -currentx, _mouseY -currenty);\r
-                                       TAIL_CONTROLER.hitTest( _mouseX -currentx, _mouseY -currenty) === false && RESIZE_CONTROLER.index( _mouseX, _mouseY) === -1 && MOUSE_CURSOR( '');\r
+                               if( currentOperator !== null){\r
+                                       currentOperator.onDrag( _mouseX, _mouseY);                                              \r
+                               } else\r
+                               if( currentElement !== null){\r
+                                       CONSOLE_CONTROLER.onMouseMove( _mouseX -currentx, _mouseY -currenty);\r
+                                       if( currentIsTextElement === false || TAIL_OPERATOR.hitTest( _mouseX -currentx, _mouseY -currenty) === false){\r
+                                               RESIZE_OPERATOR.index( _mouseX, _mouseY);\r
+                                       }\r
                                }\r
                        },\r
                        onMouseUp: function( _currentElement, _mouseX, _mouseY){\r
-                               currentControler !== null && currentControler.onFinish();\r
-                               currentControler = null;\r
+                               currentOperator !== null && currentOperator.onFinish();\r
+                               currentOperator = null;\r
                        }\r
                }\r
        })();\r
        /*\r
-        *  // COMIC_ELEMENT_OPERATOR\r
+        *  // COMIC_ELEMENT_OPERATION_MANAGER\r
         */\r
 \r
        var AbstractComicElement = function( JQ_WAPPER, COMIC_ELM_TYPE, update, x, y, w, h, z, timing){\r
-               var OPERATOR = COMIC_ELEMENT_OPERATOR;\r
+               var OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER;\r
                return {\r
                        $: JQ_WAPPER,\r
                        type: COMIC_ELM_TYPE,\r
@@ -2528,7 +2619,7 @@ pettanr.editor = ( function(){
                jqImageElementOrigin = jqImageElementOrigin || $( $( '#imgElementTemplete').remove().html());\r
                \r
                var JQ_WRAPPER = jqImageElementOrigin.clone( true),\r
-                       OPERATOR = COMIC_ELEMENT_OPERATOR,\r
+                       OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
                        SAVE = HISTORY.saveState,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        reversibleImage = null,\r
@@ -2678,7 +2769,7 @@ pettanr.editor = ( function(){
                var JQ_WRAPPER = jqTextElementOrigin.clone( true),\r
                        XBROWSER_BALLOON = pettanr.balloon.createBalloon( w, h, a, type),\r
                        TEXT_ELM = JQ_WRAPPER.find( 'td,.speach-inner').eq( 0),\r
-                       OPERATOR = COMIC_ELEMENT_OPERATOR,\r
+                       OPERATOR = COMIC_ELEMENT_OPERATION_MANAGER,\r
                        HIT_AREA = MOUSE_HIT_AREA,\r
                        SAVE = HISTORY.saveState,\r
                        instance;\r
@@ -2814,8 +2905,10 @@ pettanr.editor = ( function(){
 \r
 \r
        var COMIC_ELEMENT_CONTROL = ( function(){\r
-               var     currentElement = null,\r
-                       canvasX, canvasY, canvasW, canvasH,\r
+               var     SAVE = HISTORY.saveState,\r
+                       ELM_CONTAINER = document.getElementById( 'comic-element-container'),\r
+                       currentElement = null,\r
+                       panelX, panelY, panelW, panelH,\r
                        startX, startY;\r
        \r
        /*\r
@@ -2830,9 +2923,9 @@ pettanr.editor = ( function(){
         * \r
         * append comicElement\r
         * 1. 新しい comicElement の z-position を得る\r
-        * 2. z の同じ comicElementを見つけ、その前に加える。または一番先頭へ。(DRAGGABLE_ELEMENT_ARRAY)\r
-        *    zが大きいほど、DRAGGABLE_ELEMENT_ARRAYの先頭へ。\r
-        * 3. dom位置は、DRAGGABLE_ELEMENT_ARRAY とは反対に、前のものほど後ろへ。\r
+        * 2. z の同じ comicElementを見つけ、その前に加える。または一番先頭へ。(COMIC_ELEMENT_ARRAY)\r
+        *    zが大きいほど、COMIC_ELEMENT_ARRAYの先頭へ。\r
+        * 3. dom位置は、COMIC_ELEMENT_ARRAY とは反対に、前のものほど後ろへ。\r
         * \r
         * \r
         * remove comicElement\r
@@ -2842,42 +2935,45 @@ pettanr.editor = ( function(){
                function appendComicElement( _comicElement) {\r
                        _comicElement.init && _comicElement.init();\r
                        var z = _comicElement.z,\r
-                               l = DRAGGABLE_ELEMENT_ARRAY.length;\r
-                       _comicElement.$.stop().css( {\r
-                               filter:         '',\r
-                               opacity:        ''\r
-                       });\r
-                       if( z === undefined || z === NaN || z < 0 || z >= l){\r
-                               DRAGGABLE_ELEMENT_ARRAY.unshift( _comicElement);\r
-                               comicElementContainer.append( _comicElement.$.fadeIn());\r
+                               l = COMIC_ELEMENT_ARRAY.length,\r
+                               _jqElm = _comicElement.$.stop().css( {\r
+                                       filter:         '',\r
+                                       opacity:        ''\r
+                               });\r
+                       if( typeof z !== 'number' || z < 0 || z >= l){\r
+                               COMIC_ELEMENT_ARRAY.unshift( _comicElement);\r
+                               ELM_CONTAINER.appendChild( _jqElm.get( 0));\r
+                               _jqElm.fadeIn();\r
                        } else {\r
-                               var insertIndex = ( function(){\r
-                                               for( var ret = 0; ret < l; ++ret){\r
-                                                       if( DRAGGABLE_ELEMENT_ARRAY[ ret].z <= z) return ret +1;\r
-                                               }\r
-                                               return 0;\r
-                                       })();\r
-                               DRAGGABLE_ELEMENT_ARRAY[ insertIndex -1].$.after( _comicElement.$.fadeIn());\r
-                               DRAGGABLE_ELEMENT_ARRAY.splice( insertIndex, 0, _comicElement);\r
+                               var insertIndex = 0;\r
+                               for( var i = 0; i < l; ++i){\r
+                                       if( COMIC_ELEMENT_ARRAY[ i].z <= z){\r
+                                               insertIndex = i;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               COMIC_ELEMENT_ARRAY[ insertIndex].$.before( _jqElm.fadeIn());\r
+                               COMIC_ELEMENT_ARRAY.splice( insertIndex, 0, _comicElement);\r
                        }\r
-                       sortComicElement();\r
+                       numberingComicElement();\r
                }\r
                function removeComicElement( _comicElement) {\r
-                       var l = DRAGGABLE_ELEMENT_ARRAY.length;\r
+                       var l = COMIC_ELEMENT_ARRAY.length;\r
                        for( var i=0; i<l; ++i){\r
-                               if( DRAGGABLE_ELEMENT_ARRAY[ i] === _comicElement){\r
-                                       DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
-                                       sortComicElement();\r
+                               if( COMIC_ELEMENT_ARRAY[ i] === _comicElement){\r
+                                       COMIC_ELEMENT_ARRAY.splice( i, 1);\r
+                                       numberingComicElement();\r
                                        _comicElement.$.stop().css( {\r
                                                filter:         '',\r
                                                opacity:        ''\r
-                                       }).fadeOut( function(){\r
-                                               this.parentNode.removeChild( this);\r
-                                       });\r
+                                       }).fadeOut( onFadeOut);\r
                                        currentElement = currentElement === _comicElement ? null : currentElement;\r
                                        return;\r
                                }\r
                        }\r
+                       function onFadeOut(){\r
+                               this.parentNode.removeChild( this);\r
+                       }\r
                }\r
                function restoreComicElement( arg){\r
                        var isAppend = arg[ 0],\r
@@ -2885,40 +2981,40 @@ pettanr.editor = ( function(){
                        isAppend === true ? appendComicElement( comicElement) : removeComicElement( comicElement);\r
                }\r
                /*\r
-                * DRAGGABLE_ELEMENT_ARRAY の順番を基準に、zの再計算\r
+                * COMIC_ELEMENT_ARRAY の順番を基準に、zの再計算\r
                 * jqElmの並び替え。\r
                 */\r
-               function sortComicElement(){\r
-                       var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+               function numberingComicElement(){\r
+                       var l = COMIC_ELEMENT_ARRAY.length,\r
                                _comicElement, jqElm, jqNext;\r
                        for( var i=0; i < l; ++i){\r
-                               _comicElement = DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                               _comicElement = COMIC_ELEMENT_ARRAY[ i];\r
                                jqElm = _comicElement.$;\r
                                jqNext && jqNext.before( jqElm);\r
-                               _comicElement.z = l -i +1;\r
+                               _comicElement.z = l -i -1;\r
                                jqNext = jqElm;\r
                        }\r
                }\r
                function replaceComicElement( _comicElement, goForward){\r
-                       // DRAGGABLE_ELEMENT_ARRAYの再構築\r
-                       var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                       // COMIC_ELEMENT_ARRAYの再構築\r
+                       var l = COMIC_ELEMENT_ARRAY.length,\r
                                i = ( function(){\r
                                        for( var ret = 0; ret < l; ++ret){\r
-                                               if( DRAGGABLE_ELEMENT_ARRAY[ ret] === _comicElement) return ret;\r
+                                               if( COMIC_ELEMENT_ARRAY[ ret] === _comicElement) return ret;\r
                                        }\r
                                        return -1;\r
                                })();\r
                        if( i === -1) return;\r
                        if( goForward === true){\r
                                if( i === 0) return;\r
-                               DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
-                               DRAGGABLE_ELEMENT_ARRAY.splice( i -1, 0, _comicElement);\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
-                               DRAGGABLE_ELEMENT_ARRAY.splice( i, 1);\r
-                               DRAGGABLE_ELEMENT_ARRAY.splice( i +1, 0, _comicElement);\r
+                               COMIC_ELEMENT_ARRAY.splice( i, 1);\r
+                               COMIC_ELEMENT_ARRAY.splice( i +1, 0, _comicElement);\r
                        }\r
-                       sortComicElement();\r
+                       numberingComicElement();\r
                }\r
                function restoreReplaceObject( arg){\r
                        replaceComicElement( arg[ 0], arg[ 1]);\r
@@ -2926,21 +3022,13 @@ pettanr.editor = ( function(){
                \r
                return {\r
                        init: function( _x, _y, _w, _h){\r
-                       /*\r
-                        * comic-element\r
-                        */\r
-                               comicElementContainer = $( '#comic-element-container');\r
                                \r
                                appendComicElement( ImageElementClass.apply( {}, [ 'images/13.gif', 'penchan', 10, 10, 0, 100, 140, 0]));\r
                                appendComicElement( TextElementClass.apply( {}, [ 0, 270, 'Hello', 50, 70, 1, 200, 160, 1]));\r
-                               \r
-                               COMIC_ELEMENT_OPERATOR.init( updateMouseCursor);\r
                        /*\r
                         * \r
                         */\r
                                log = $( '#operation-catcher-log');\r
-\r
-                               this.onCanvasResize( _x, _y, _w, _h);\r
                                \r
                                delete COMIC_ELEMENT_CONTROL.init;\r
                        },\r
@@ -2948,34 +3036,32 @@ pettanr.editor = ( function(){
                        restoreComicElement: restoreComicElement,\r
                        replaceComicElement: replaceComicElement,\r
                        restoreReplaceObject: restoreReplaceObject,\r
-                       onCanvasResize : function ( _canvasX, _canvasY, _canvasW, _canvasH, isResizerTopAction){\r
+                       onPanelResize : function ( _panelX, _panelY, _panelW, _panelH, isResizerTopAction){\r
                        /*\r
                         * リサイズが、ResizerTopによって行われた場合、comicElementのyを動かして見かけ上動かないようにする。\r
                         */                                     \r
                                if( isResizerTopAction === true){\r
-                                       var     _shiftX = _canvasW -canvasW,\r
-                                               _shiftY = _canvasH -canvasH,\r
-                                               l = DRAGGABLE_ELEMENT_ARRAY.length;\r
+                                       var     _shiftX = _panelW -panelW,\r
+                                               _shiftY = _panelH -panelH,\r
+                                               l = COMIC_ELEMENT_ARRAY.length;\r
                                        for( var i = 0; i < l; i++){\r
-                                               DRAGGABLE_ELEMENT_ARRAY[ i].shift( _shiftX, _shiftY);\r
+                                               COMIC_ELEMENT_ARRAY[ i].shift( _shiftX, _shiftY);\r
                                        }\r
                                }\r
-                               canvasX = _canvasX;\r
-                               canvasY = _canvasY;\r
-                               canvasW = _canvasW;\r
-                               canvasH = _canvasH;\r
+                               panelX = _panelX;\r
+                               panelY = _panelY;\r
+                               panelW = _panelW;\r
+                               panelH = _panelH;\r
                                \r
-                               comicElementContainer.css( {\r
-                                       width:  _canvasW,\r
-                                       height: _canvasH,\r
-                                       left:   _canvasX,\r
-                                       top:    _canvasY\r
-                               });\r
+                               ELM_CONTAINER.style.width       = _panelW +'px';\r
+                               ELM_CONTAINER.style.height      = _panelH +'px';\r
+                               ELM_CONTAINER.style.left        = _panelX +'px';\r
+                               ELM_CONTAINER.style.top         = _panelY +'px';\r
                        },\r
                        onMouseMove: function( _mouseX, _mouseY){\r
-                               var l = DRAGGABLE_ELEMENT_ARRAY.length,\r
-                                       _X = _mouseX -canvasX,\r
-                                       _Y = _mouseY -canvasY,\r
+                               var l = COMIC_ELEMENT_ARRAY.length,\r
+                                       _X = _mouseX -panelX,\r
+                                       _Y = _mouseY -panelY,\r
                                        _elm, _x, _y;\r
                                        \r
                                if( currentElement !== null){\r
@@ -2991,7 +3077,7 @@ pettanr.editor = ( function(){
                                        }\r
                                }\r
                                for( var i=0; i<l; i++){\r
-                                       _elm = DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                       _elm = COMIC_ELEMENT_ARRAY[ i];\r
                                        _x = _elm.hitareaX();\r
                                        _y = _elm.hitareaY();\r
                                        // hitTest\r
@@ -3003,19 +3089,19 @@ pettanr.editor = ( function(){
                                        }\r
                                }\r
                                currentElement = null;                                                  \r
-                               COMIC_ELEMENT_OPERATOR.hide();\r
+                               COMIC_ELEMENT_OPERATION_MANAGER.hide();\r
                                log.html( [ _X, _Y, _x, _y].join( ','));\r
                                return false;\r
                        },\r
                        onMouseUp: function( _mouseX, _mouseY){\r
                                var ret = currentElement !== null && currentElement.busy() === true;\r
-                               ret === true && currentElement.onMouseUp( _mouseX -startX || canvasX, _mouseY -startY || canvasY);\r
+                               ret === true && currentElement.onMouseUp( _mouseX -startX || panelX, _mouseY -startY || panelY);\r
                                startX = startY = NaN;\r
                                return ret;\r
                        },\r
                        onMouseDown: function( _mouseX, _mouseY){\r
-                               startX = canvasX;\r
-                               startY = canvasY;\r
+                               startX = panelX;\r
+                               startY = panelY;\r
                                currentElement !== null && currentElement.onMouseDown( _mouseX -startX, _mouseY -startY);\r
                                return currentElement !== null;\r
                        },\r
@@ -3025,10 +3111,10 @@ pettanr.editor = ( function(){
                        createImageElement: function( url, imagesetID, x, y, z, w, h){\r
                                w = w || 200; //ActualWidth\r
                                h = h || 150; //ActualHeight\r
-                               x = x || Math.floor( canvasW /2 -w /2);\r
-                               y = y || Math.floor( canvasH /2 -h /2);\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, DRAGGABLE_ELEMENT_ARRAY.length]);\r
+                                       var _comicElement = ImageElementClass.apply( {}, [ _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
@@ -3040,9 +3126,9 @@ pettanr.editor = ( function(){
                                text = text || '';\r
                                w = w || 200;\r
                                h = h || 150;\r
-                               x = x || Math.floor( canvasW /2 -w /2 +Math.random() *10);\r
-                               y = y || Math.floor( canvasH /2 -h /2 +Math.random() *10);\r
-                               var _comicElement = TextElementClass.apply( {}, [ type, angle, text, x, y, z || -1, w, h, DRAGGABLE_ELEMENT_ARRAY.length]);\r
+                               x = x || Math.floor( panelW /2 -w /2 +Math.random() *10);\r
+                               y = y || Math.floor( panelH /2 -h /2 +Math.random() *10);\r
+                               var _comicElement = TextElementClass.apply( {}, [ type, angle, text, x, y, z || -1, w, h, COMIC_ELEMENT_ARRAY.length]);\r
                                TEXT_EDITOR_CONTROL.show( _comicElement, function( _comicElement){\r
                                        appendComicElement( _comicElement);\r
                                        SAVE( restoreComicElement, [ false, _comicElement], [ true, _comicElement], true);\r
@@ -3050,7 +3136,7 @@ pettanr.editor = ( function(){
                        },\r
                        getAsHTML: function( isAbsoluteUrl, isXHTML){\r
                                var HTML_ARRAY = [],\r
-                                       l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                                       l = COMIC_ELEMENT_ARRAY.length,\r
                                        _timing = 0,\r
                                        _comicElement;\r
 \r
@@ -3062,9 +3148,9 @@ pettanr.editor = ( function(){
                                function getComicElementByTiming(){\r
                                        while( _timing < l *2){\r
                                                for(var i=0; i<l; ++i){\r
-                                                       if( _timing === DRAGGABLE_ELEMENT_ARRAY[ i].timing){\r
+                                                       if( _timing === COMIC_ELEMENT_ARRAY[ i].timing){\r
                                                                ++_timing;\r
-                                                               return DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                                               return COMIC_ELEMENT_ARRAY[ i];\r
                                                        }\r
                                                }\r
                                                ++_timing;\r
@@ -3075,7 +3161,7 @@ pettanr.editor = ( function(){
                                        [\r
                                                '<div class="panel" ',\r
                                                        'style="',\r
-                                                               'height:', canvasH, 'px;',\r
+                                                               'height:', panelH, 'px;',\r
                                                                'background-color:', ';',\r
                                                        '"',\r
                                                '>'\r
@@ -3089,7 +3175,7 @@ pettanr.editor = ( function(){
                                var JSON_STRING_ARRAY = [],\r
                                        IMAGE_ARRAY = [],\r
                                        BALLOON_ARRAY = [],\r
-                                       l = DRAGGABLE_ELEMENT_ARRAY.length,\r
+                                       l = COMIC_ELEMENT_ARRAY.length,\r
                                        _timing = 0,\r
                                        _comicElement,\r
                                        cr = pettanr.LINE_FEED_CODE_TEXTAREA;\r
@@ -3104,9 +3190,9 @@ pettanr.editor = ( function(){
                                function getComicElementByTiming(){\r
                                        while( _timing < l *2){\r
                                                for(var i=0; i<l; ++i){\r
-                                                       if( _timing === DRAGGABLE_ELEMENT_ARRAY[ i].timing){\r
+                                                       if( _timing === COMIC_ELEMENT_ARRAY[ i].timing){\r
                                                                ++_timing;\r
-                                                               return DRAGGABLE_ELEMENT_ARRAY[ i];\r
+                                                               return COMIC_ELEMENT_ARRAY[ i];\r
                                                        }\r
                                                }\r
                                                ++_timing;\r
@@ -3123,8 +3209,8 @@ pettanr.editor = ( function(){
                                                        '"y": ', 0, ',', cr,\r
                                                        '"z": ', 0, ',', cr,\r
                                                        '"t": ', 0, ',', cr,\r
-                                                   '"width": ', canvasW, ',', cr,\r
-                                                   '"height": ', canvasH, ',', cr,\r
+                                                   '"width": ', panelW, ',', cr,\r
+                                                   '"height": ', panelH, ',', cr,\r
                                                    '"panel_pictures_attributes": {', cr,\r
                                                        IMAGE_ARRAY.join( ',' +cr), cr,\r
                                                    '},', cr,\r
@@ -3193,37 +3279,39 @@ pettanr.editor = ( function(){
                        \r
                        jqEditor = $( '#editor');\r
 \r
-                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 96, false, true, centering);\r
-                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 48, false, true, centering);\r
-\r
                /*\r
                 * MOUSE_LISTENER_ARRAY は、表示順に格納.手前の要素が最初\r
                 * MENU_BAR_CONTROL,\r
                 * WINDOW_CONTROL,\r
                 * COMIC_ELEMENT_CONTROL,\r
-                * CANVAS_CONTROL\r
+                * PANEL_CONTROL\r
                 * .busy() === true なら、そのままonMouseMove()にイベントを流す.これはArrayの後ろから、奥の表示要素から\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
-                       MENU_BAR_CONTROL.EDIT.createSelection( 'centering', 'ctrl + 0', centering, true, true, true);\r
                        \r
                        WINDOWS_CONTROL.init();\r
                        \r
                        GRID_CONTROL.init();\r
-                       // WHITE_GLASS_CONTROL.init();\r
                        PANEL_CONTROL.init();\r
-                       //COMIC_ELEMENT_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
-                       \r
-                       \r
                        TEXT_EDITOR_CONTROL.init();\r
                        IMAGE_GROUP_EXPROLER.init();\r
+\r
+               /*\r
+                * centering
+                */\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 96, false, true, centering);  // ctrl + 0\r
+                       pettanr.key.addKeyDownEvent( pettanr.view.EDITOR, 48, false, true, centering);  // ctrl + 0\r
+                       MENU_BAR_CONTROL.EDIT.createSelection( 'centering', 'ctrl + 0', centering, true, true, true);\r
                /*\r
                 * jqMouseEventChacher は透明な要素で、\r
                 * マウスイベントをcurrentElement(currentElement)に伝えるのが仕事\r