OSDN Git Service

version 0.5.16, start working system.DHTML.anime()
authoritozyun <itozyun@gmail.com>
Fri, 14 Sep 2012 00:17:08 +0000 (09:17 +0900)
committeritozyun <itozyun@gmail.com>
Fri, 14 Sep 2012 00:17:08 +0000 (09:17 +0900)
18 files changed:
0.5.x/index.html
0.5.x/javascripts/peta.apps.js
0.5.x/javascripts/peta.common.js
0.5.x/javascripts/system.js
0.5.x/json/panels.json
0.5.x/stylesheets/peta.apps.css
0.5.x/stylesheets/system.css
0.5.x/test/activex.html
0.5.x/test/comic-html-structure.html
0.5.x/test/dynamic-comic-html.html
0.5.x/test/html2comic_0.1.html
0.5.x/test/index.html
0.5.x/test/svg.html
0.5.x/test/transform.html
0.5.x/test/type.html
0.5.x/test/useragent.html
0.5.x/test/vertical-center.html
0.5.x/work.html

index 6a7be56..ea2aaf8 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" --><!-- InstanceEndEditable -->\r
 </body>\r
 <!-- InstanceEnd --></html>\r
index 3622d1a..f11646b 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * pettanR peta.apps.js
- *   version 0.5.8
+ *   version 0.5.15
  *   
  * author:
  *   itozyun
@@ -8,8 +8,7 @@
  *   3-clause BSD
  */
 
-( function( pettanr, gOS, window, undefined ){
-
+( function( pettanr, gOS, window, document, undefined ){
 /*
  * PettanR service driver.
  */
                        
                        function onLoadJson( _file, _json ){
                                var _access = FileAPI.getFileDataAccess( _file ),
-                                       _data = _access !== null ? _access.DATA : null,
-                                       l;
+                                       _data = _access !== null ? _access.DATA : null;
                                if( _data === null ){
-                                       onErrorJson( _file);
+                                       onErrorJson( _file );
                                        return;
                                }
                                _data.state = Const.FILE.STATE.OK;
                                
                                if( Type.isArray( _json ) === true ){
-                                       l = _json.length;
-                                       if( l === 0) return;
-                                       for( var i=0; i<l; ++i ){
-                                               buildFileData( _json[ i], _data);
+                                       for( var i=0, l = _json.length; i<l; ++i ){
+                                               buildFileData( _json[ i ], _data );
                                        };
                                } else
-                               if( _json.id ){
+                               if( Type.isNumber( _json.id ) === true ){
                                        buildFileData( _json, _data );
                                };
-                               _file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, _file, 'children', null) );
+                               _file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, _file, 'children', null ) );
                        };
                        function onErrorJson( _file ){ 
                                var _data = FileAPI.getFileData( _file);
                                if( _data !== null){
                                        _data.state = Const.FILE.STATE.ERROR;
                                };
+                               _file.dispatchEvent( FileAPI.createFileEvent( Const.FILE.EVENT.GET_SEQENTIAL_FILES, _file, 'children', null ) );
                        };
                        function buildFileData( _data, _parent ){
                                var _array, i, l;
                                // Panel
-                               if( _parent === FILE_DATA_PANELS_ROOT ){
+                               if( _parent === FILE_DATA_PANELS_ROOT || _parent === FILE_DATA_MY_PANELS_ROOT ){
                                        _data.type = FILE_TYPE.PANEL;
                                        _array = PANEL_ARRAY;
                                } else
                                };
                                
                                _data.driver = Driver;
-                               
+                               // alert( ' _array ' + _data.id + Type.isNumber( _data.id ) );
                                // _array に _data を格納 または 上書き
-                               if( typeof _data.id === 'number' && _data.id > 0 ){
-                                       var _id = _data.id - 1,
-                                               __data = _array[ _id ],
+                               if( Type.isNumber( _data.id ) === true && _data.id > 0 ){
+                                       var _id       = _data.id - 1,
+                                               __data    = _array[ _id ],
                                                _reserved = Const.FILE.DATA_PROPERTY_RESERVED.join( ', ' );
                                        if( __data ){
-                                               for( var key in _data){
+                                               for( var key in _data ){
                                                        if( _reserved.indexOf( key ) === -1 ){
                                                                __data[ key ] = _data[ key ];
                                                        };
                                                _array[ _id ] = _data;
                                        };
                                } else {
-                                       alert( 'error' );
+                                       // alert( 'error' + _parent.name + ' ' + _data.id );
                                };
                
                                // Author
                                if( _parent.type === FILE_TYPE.COMIC || _parent === FILE_DATA_COMICS_ROOT ){
                                        var _panels = _data.stories,
                                                _panel;
-                                       if( _panels && Type.isArray( _panels ) === true ){
+                                       if( Type.isArray( _panels ) === true ){
                                                
                                                for( i=0, l=_panels.length; i<l; ++i ){
                                                        _panel = buildFileData( _panels[ i ], FILE_DATA_PANELS_ROOT );
                                                _author.id === MyAuthorID && addChildData( FILE_DATA_MY_COMICS_ROOT, _data );
                                        };
                                        if( _parent === FILE_DATA_COMICS_ROOT ){
-                                               addChildData( FILE_DATA_LATEST_COMICS, _data);
+                                               addChildData( FILE_DATA_LATEST_COMICS, _data );
                                        };
                                } else
                                // Panel
-                               if( _parent === FILE_DATA_PANELS_ROOT ){
-                                       _data.comic = getResource( COMIC_ARRAY, _data.comic_id );
+                               if( _parent === FILE_DATA_PANELS_ROOT || _parent === FILE_DATA_MY_PANELS_ROOT ){
+                                        _data.comic && buildFileData( _data.comic, FILE_DATA_COMICS_ROOT );
+                                       _data.author && buildFileData( _data.author, FILE_DATA_AUTHOR_ROOT );
+                                       
+                                       _data.comic  = getResource( COMIC_ARRAY, _data.comic_id );
                                        _data.author = getResource( AUTHOR_ARRAY, _data.author_id );
-               
+                                       
                                        // picture data をファイルに取り出し
                                        var _elements = _data.panel_elements,
                                                _elm;
                                        if( Type.isArray( _elements ) === true ){
-                                               for( i=0, l=_elements.length; i<l; ++i){
+                                               for( i=0, l=_elements.length; i<l; ++i ){
                                                        _elm = _elements[ i];
                                                        if( _elm.resource_picture ){
                                                                _elm.resource_picture = buildFileData( _elm.resource_picture, FILE_DATA_PICTURE_ROOT ); // 上記参照切れに備えてここで上書き
                                                        };
                                                };
                                        };
+                                       _data.publish === 1 && addChildData( FILE_DATA_LATEST_PANELS, _data );
+                                       _data.author_id === MyAuthorID && addChildData( FILE_DATA_MY_PANELS_ROOT, _data );
                                } else
                                // Picture
                                if( _data.type == FILE_TYPE.PICTURE ){
                                return _data;
                        };
                        function addChildData( _parent, _child ){
-                               if( Type.isArray( _parent.children ) === false){
+                               if( Type.isArray( _parent.children ) === false ){
                                        _parent.children = [];
                                };
                                Util.getIndex( _parent.children, _child ) === -1 && _parent.children.push( _child );
                                        return [ _data.id, _data.ext ].join( '.' );
                                } else
                                if( _type === FILE_TYPE.PANEL ){
-                                       return [ _data.t, ':', _data.comic.title ].join( '' );
+                                       return [ 'id:' + _data.id + ', ' + ( _data.t || '' ) + ':', _data.comic ? _data.comic.title : 'no comic' ].join( '' );
                                } else
                                if( _type === FILE_TYPE.COMIC ){
                                        return _data.title;
                                var _data = FileAPI.getFileData( _file ),
                                        _type = _data !== null ? _data.type : null;
                                if( _type === FILE_TYPE.PICTURE ){
-                                       return { image: [ pettanr.CONST.RESOURCE_PICTURE_PATH, 'thumbnail/', _data.id, '.', _data.ext ].join( '' )};
+                                       return { image: [ pettanr.CONST.THUMBNAIL_PATH, _data.id, '.', _data.ext ].join( '' )};
                                };
                                if( _data === FILE_DATA_COMICS_ROOT ){
                                        return { className: 'file-type-cabinet' };
                        type:           FILE_TYPE.FOLDER,
                        children:       []
                },
+               FILE_DATA_LATEST_PANELS = {
+                       name:           'Latest Panels',
+                       type:           FILE_TYPE.FOLDER,
+                       children:       []
+               },
+               FILE_DATA_MY_PANELS_ROOT = {
+                       name:           'My Panels',
+                       type:           FILE_TYPE.FOLDER,
+                       children:       [],
+                       driver:         Driver,
+                       json:           pettanr.CONST.URL_MY_PANELS_JSON
+               },
                FILE_DATA_MY_PICTURES_ROOT = {
                        name:           'My Pictures',
                        type:           FILE_TYPE.FOLDER,
                BASIC_LICENSES = 'cc_by,cc_nc,cc_nd,cc_sa,keep_aspect_ratio,no_convert,no_flip,no_resize'.split( ',');
        FILE_DATA_SERVICE_ROOT.children.push( FILE_DATA_COMICS_ROOT, FILE_DATA_PICTURE_ROOT, FILE_DATA_PANELS_ROOT, FILE_DATA_LISENCE_ROOT, FILE_DATA_BALLOON_ROOT );
        FILE_DATA_COMICS_ROOT.children.push( FILE_DATA_MY_COMICS_ROOT, FILE_DATA_LATEST_COMICS, FILE_DATA_AUTHOR_ROOT );
+       FILE_DATA_PANELS_ROOT.children.push( FILE_DATA_LATEST_PANELS, FILE_DATA_MY_PANELS_ROOT );
        FILE_DATA_PICTURE_ROOT.children.push( FILE_DATA_MY_PICTURES_ROOT, FILE_DATA_ARTIST_ROOT );
        
        FileAPI.createFolderUnderRoot( FILE_DATA_SERVICE_ROOT );
@@ -630,8 +645,8 @@ if( pettanr.DEBUG === true){
  */
 var PremiumSatge = gOS.registerApplication( function(){
        var BASE_PATH      = pettanr.CONST.RESOURCE_PICTURE_PATH,
-               THUMB_PATH     = BASE_PATH, // + 'thumbnail/',
-               LIMIT_FILESIZE = 1024 * 10,
+               THUMB_PATH     = pettanr.CONST.THUMBNAIL_PATH,
+               LIMIT_FILESIZE = 1024 * 100,
                ICON_ARRAY     = [];
                
        var self             = this,
@@ -1522,17 +1537,16 @@ var Editor = gOS.registerApplication( function(){
                        Editor.shutdown();
                };
                function onSave(){
-                       var model = Model.createPanel( {
+                       PanelConsole.boot( Model.createPanel( {
                                comicID           : comicID,
                                panelID           : panelID,
                                panelTimming      : panelTimming,
                                panelW            : PANEL_CONTROL.w,
                                panelH            : PANEL_CONTROL.h,
                                borderSize        : 2,
-                               panelElementArray : PANEL_ELEMENT_ARRAY
-                       } );
-                       PanelConsole.boot( model.getJsonPostString().replace( /\n/g, '' ) );
-                       model.destroy();
+                               panelElementArray : PANEL_ELEMENT_ARRAY,
+                               publish           : true
+                       } ) );
                };
                function onSaveQuit(){
                        // Editor.shutdown();
@@ -2016,8 +2030,7 @@ var Editor = gOS.registerApplication( function(){
                        ui, inputX, inputY, inputZ, inputA, inputW, inputH, inputAspectRatio,
                        inputPercentW, inputPercentH,
                        currentPanelElement = null,
-                       currentElementType = -1,
-                       currentLock = false;
+                       currentElementType = -1;
 
                return WINDOWS_CONTROL.createWindow(
                        {
@@ -2045,8 +2058,6 @@ var Editor = gOS.registerApplication( function(){
                                        });
                                },
                                update: function( currentElement ){
-                                       if( currentLock === true && currentElement === null ) return;
-
                                        var _elementType = currentElement === null ? -1 : currentElement.type,
                                                x = currentElement !== null ? currentElement.x : 0,
                                                y = currentElement !== null ? currentElement.y : 0,
@@ -2097,10 +2108,6 @@ var Editor = gOS.registerApplication( function(){
                                        } else {
                                                
                                        }
-                               },
-                               lock: function( _currentLock ){
-                                       currentLock = !!_currentLock;
-                                       INFOMATION_WINDOW.bodyBackOrForward( !currentLock );
                                }
                        },
                        'infomation-window', 'Infomation', 0, 30, 200, 180, true
@@ -2807,7 +2814,6 @@ var Editor = gOS.registerApplication( function(){
                        baseX, baseY, baseW, baseH,
                        currentX, currentY, currentW, currentH,
                        offsetX, offsetY,
-                       lock  = false,
                        error = 0;
                
                function draw( _x, _y, _w, _h ){
@@ -2822,10 +2828,10 @@ var Editor = gOS.registerApplication( function(){
                                elmResizerContainerStyle.height = _h + 'px';
                                elmResizerTopStyle.left = elmResizerBottomStyle.left = FLOOR( _w / 2 - 5 ) + 'px';
                                elmResizerLeftStyle.top = elmResizerRightStyle.top   = FLOOR( _h / 2 - 5 ) + 'px';
-                       } catch(e){
+                       } catch( e ){
                                alert( [x, y, w, h].join( ','));
                                return;
-                       }
+                       };
                        
                        POSITION_ARRAY.splice( 0, POSITION_ARRAY.length );
                        POSITION_ARRAY.push(
@@ -2838,7 +2844,7 @@ var Editor = gOS.registerApplication( function(){
                                {x:     _x -HIT_AREA,                   y:      _y +_h -5,                      w:      HIT_AREA +5,    h:      HIT_AREA +5},
                                {x:     _x +_w -5,                              y:      _y +_h -5,                      w:      HIT_AREA +5,    h:      HIT_AREA +5}
                        );
-               }
+               };
                
                function update( _x, _y, _w, _h ){
                        var __w, __h;
@@ -2960,10 +2966,10 @@ var Editor = gOS.registerApplication( function(){
                                        _h = _h !== undefined ? _h : baseH +moveY *com.h;
                                        error += _thisError === 0 ? 0 : 1;
                                        ++_thisError;
-                                       if( _thisError > 9999){
+                                       if( _thisError > 9999 ){
                                                ++error
                                                //alert( 'opera error' +error);
-                                               this.onCancel;
+                                               this.onCancel();
                                                return;
                                        }
                                }
@@ -3056,13 +3062,6 @@ var Editor = gOS.registerApplication( function(){
                                        currentElement.animate( startX, startY, startW, startH, startFilpV, startFilpH) :
                                        currentElement.animate( startX, startY, startW, startH, angle);
                        },
-                       lock: function( _lock ){
-                               if( _lock !== undefined){
-                                       elmResizerContainerStyle.borderColor = _lock === true ? 'blue' : '';
-                                       lock = _lock;
-                               }
-                               return lock;
-                       },
                        onShiftUpdate: update,
                        onCtrlUpdate: update
                }
@@ -3529,8 +3528,6 @@ var Editor = gOS.registerApplication( function(){
        var PANEL_ELEMENT_CONTROL = ( function(){
                var     elmContainer,
                        currentElement  = null,
-                       currentLockTest = false,
-                       currentLock     = false,
                        panelX, panelY, panelW, panelH,
                        startX, startY;
        /*
@@ -3686,7 +3683,6 @@ var Editor = gOS.registerApplication( function(){
                                        _elm = currentElement;
                                        
                                if( _elm !== null ){
-                                       currentLockTest = currentLockTest === true && _x === 0 && _y === 0;
                                        if( _elm.busy() === true ){
                                                _elm.mousemove( _x, _y );
                                                return true;
@@ -3695,10 +3691,6 @@ var Editor = gOS.registerApplication( function(){
                                                _elm.mousemove( _x, _y ); // cursor
                                                return true;
                                        }
-                                       if( currentLock === true ){
-                                               currentLockTest = true;
-                                               return true;
-                                       }
                                };
                                for( var i=0; i<l; ++i ){
                                        _elm = PANEL_ELEMENT_ARRAY[ i ];
@@ -3716,9 +3708,6 @@ var Editor = gOS.registerApplication( function(){
                        mouseup: function( _mouseX, _mouseY ){
                                var ret = currentElement !== null && currentElement.busy() === true;
                                ret === true && currentElement.mouseup( _mouseX -startX || panelX, _mouseY -startY || panelY );
-                               currentLock = currentLockTest === true && currentElement.hitTest( _mouseX -panelX, _mouseY -panelY ) === true;
-                               RESIZE_OPERATOR.lock( currentLock );
-                               INFOMATION_WINDOW.lock( currentLock );
                                return ret;
                        },
                        mousedown: function( _mouseX, _mouseY ){
@@ -3726,7 +3715,6 @@ var Editor = gOS.registerApplication( function(){
                                startY = panelY;
                                if( currentElement === null) return false
                                currentElement.mousedown( _mouseX -startX, _mouseY -startY);
-                               currentLockTest = true;
                                return true;
                        },
                        busy: function(){
@@ -4125,145 +4113,157 @@ var Editor = gOS.registerApplication( function(){
        };
 }, false, true, 'Panel Editor', 'paneleditor', null, '#2D89F0' );
 
+var FormApplicationHelper = function( app ){
+       app.isUploading = false;
+       app.elmProgress = null;
+       app.elmUploader = null;
+       app.elmScript   = null;
+       app.elmIframe   = null;
+       app.elmForm     = null;
+       app.fetchScript = function(){
+               app.elmProgress    = document.getElementById( app.elmProgressID );
+               
+               if( !( app.elmUploader = document.getElementById( app.elmUploaderID ) ) ){
+                       app.elmUploader    = document.createElement( 'div' );
+                       app.rootElement.appendChild( app.elmUploader );
+                       app.elmUploader.id = app.elmUploaderID;
+                       if( app.hideUploader === true ){
+                               app.elmUploader.style.cssText = 'height:1px;line-height:1px;visibility:hidden;overflow:hidden;';
+                       };                      
+               };
+               
+               app.elmScript        = document.createElement( 'script' );
+               document.body.appendChild( app.elmScript );
+               app.elmScript.type   = 'text\/javascript';
+               app.elmScript.src    = app.scriptSrc;
+               
+               app.elmProgress.innerHTML = 'loading form.';
+               
+               app.addTimer( app.detectForm, 250 );
+               
+               delete app.fetchScript;
+       };
+       app.detectForm = function(){
+               app.elmForm = app.elmUploader.getElementsByTagName( 'form' )[ 0 ];
+               if( !app.elmForm ) return;
+               
+               app.removeTimer( app.detectForm );
+               Util.createIframe( 'targetFrame', app.onCreateIframe );
+               app.elmProgress.innerHTML = 'create iframe';
+               
+               delete app.detectForm;
+       };
+       app.onCreateIframe = function( _iframe ){
+               app.elmUploader.appendChild( _iframe );
+               app.elmIframe             = _iframe;
+               app.elmForm.target        = _iframe.name;
+               app.elmProgress.innerHTML = '';
+               app.onFormReady && app.onFormReady();
+               
+               delete app.onCreateIframe;
+       };
+       app.submit = function(){
+               app.elmProgress.innerHTML = 'submit!';
+               try {
+                       app.elmForm.submit();
+                       app.isUploading = true;
+               } catch( e ){
+                       app.elmProgress.innerHTML = 'submit err..';
+                       app.submitError && app.submitError();
+                       return;
+               };
+               if( app.detectIframe ){
+                       app.elmIframe.onreadystatechange = app.detectIframe;
+               } else {
+                       app.elmIframe.onload = app.onIframeUpdate;
+               };
+               app.elmProgress.innerHTML = 'uploading..';
+               
+               delete app.submit;
+       };
+       if( UA.isIE ){
+               app.detectIframe = function(){
+               if ( this.readyState !== 'complete' ) return;
+               this.onreadystatechange = new Function();
+               this.onreadystatechange = null;
+               app.onIframeUpdate();
+               delete app.detectIframe;
+               };              
+       };
+       app.onIframeUpdate = function(){
+               app.elmIframe.onload = null;
+               try {
+                       console.log( ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
+                       console.log( ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow )[ 'current_author' ] );
+               } catch(e){
+                       
+               };
+               ( app.elmIframe.contentWindow || app.elmIframe.contentDocument.parentWindow ).close();
+               app.elmIframe = null;
+               app.elmProgress.innerHTML = 'success!';
+               app.isUploading = false;
+               app.submitSuccess && app.submitSuccess();
+               delete app.onIframeUpdate;
+       };
+       app.destroyHelper = function(){
+               app = null;
+       };
+};
 
 var ComicConsole = gOS.registerApplication( function(){
        var elmHeader, elmProgress,
-               winW, winH,
+               windowW, windowH,
                inputTitle, inputW, inputH,
                comboboxVisible, // comboboxEditable,
                buttonSubmit, buttonCancel,
-               elmUploader = null,
-               elmScript   = null,
-               elmIframe   = null,
-               elmForm     = null,
-               isUploading = false,
-               instance    = this;
-       //pettanr.key.addKeyDownEvent( ID, 69, false, false, clickOK);
-       
+               app         = this;
+
        function clickOK(){
-               if( !elmForm || !elmIframe || isUploading === true ) return false;
+               if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
                // validate
-               isUploading = true;
-               elmProgress.innerHTML = '■';
-               copyAndSubmit();
-       };
 
-               function copyAndSubmit(){
-                       var _inputList = elmForm.getElementsByTagName( 'input' ),
-                               _input, _name;
-                       for( var i = _inputList.length; i; ){
-                               _input = _inputList[ --i ];
-                               _name = _input.name;
-                               if( _name === 'comic[title]'){
-                                       _input.value = inputTitle.value();
-                               } else
-                               if( _name === 'comic[width]'){
-                                       _input.value = inputW.value();
-                               } else
-                               if( _name === 'comic[height]'){
-                                       _input.value = inputH.value();
-                               };
-                       };
-                       var _selectList = elmForm.getElementsByTagName( 'select' ),
-                               _select, _optionList;
-                       for( i = _selectList.length; i; ){
-                               _select = _selectList[ --i ];
-                               _name = _select.name;
-                               _optionList = _select.getElementsByTagName( 'option' )
-                               if( _name === 'comic[visible]'){
-                                       _select.selectedIndex = comboboxVisible.selectIndex();
-                               } else
-                               if( _name === 'comic[editable]'){
-                                       // _select.selectedIndex = comboboxEditable.selectIndex();
-                               };
-                       };
-                       try {
-                               elmForm.submit();
-                       } catch( e ){
-                               elmProgress.innerHTML = 'submit() err..';
-                               isUploading = false;
-                               instance.addTimer( clickCancel , 3000, true );
-                               return;
-                       };
-                       if( UA.isIE ){
-                               elmIframe.onreadystatechange = detectIframe;
-                       } else {
-                               elmIframe.onload = onIframeUpdate;
+               var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+                       _input, _name;
+               for( var i = _inputList.length; i; ){
+                       _input = _inputList[ --i ];
+                       _name = _input.name;
+                       if( _name === 'comic[title]' ){
+                               _input.value = inputTitle.value();
+                       } else
+                       if( _name === 'comic[width]' ){
+                               _input.value = inputW.value();
+                       } else
+                       if( _name === 'comic[height]' ){
+                               _input.value = inputH.value();
                        };
-                       elmProgress.innerHTML = 'uploading..';
                };
-       /*
-        * ie の 場合、readyState をチェック.
-        */
-                       function detectIframe(){
-                   if ( elmIframe.readyState === 'complete' ){
-                       elmIframe.onreadystatechange = new Function();
-                       elmIframe.onreadystatechange = null;
-                       onIframeUpdate();
-                   };
-                       };
-                               function onIframeUpdate(){
-                                       elmIframe.onload = null;
-                                       try {
-                                               console.log( ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
-                                       } catch(e){
-                                               
-                                       }
-                                       
-                                       ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
-                                       elmIframe = null;
-                                       elmProgress.innerHTML = 'success!';
-                                       instance.addTimer( clickCancel , 1000 );
-                                       isUploading = false;
-                               };
-                       
-       function clickCancel(){
-               if( isUploading === true ) return false;
-               ComicConsole.shutdown();
-       };
-       function detectForm(){
-               elmForm = elmUploader.getElementsByTagName( 'form' )[ 0 ];
-               if( elmForm ){
-                       var selectList = elmForm.getElementsByTagName( 'select' ),
-                               select,
-                               j, m,
-                               optionList, option;
-                       for( var i=0, l=selectList.length; i<l; ++i ){
-                               select = selectList[ i ];
-                               optionList = select.getElementsByTagName( 'option' );
-                               for( j=0, m=optionList.length; j<m; ++j ){
-                                       option = optionList[ j ];
-                                       if( select.name === 'comic[visible]' ){
-                                               comboboxVisible.createOption( option.innerHTML, option.value, option.selected );
-                                       } else
-                                       if( select.name === 'comic[editable]' ){
-                                               // comboboxEditable.createOption( option.innerHTML, option.value, option.selected );
-                                       };
-                               };
+               var _selectList = app.elmForm.getElementsByTagName( 'select' ),
+                       _select, _optionList;
+               for( i = _selectList.length; i; ){
+                       _select = _selectList[ --i ];
+                       _name = _select.name;
+                       _optionList = _select.getElementsByTagName( 'option' )
+                       if( _name === 'comic[visible]' ){
+                               _select.selectedIndex = comboboxVisible.selectIndex();
+                       } else
+                       if( _name === 'comic[editable]' ){
+                               // _select.selectedIndex = comboboxEditable.selectIndex();
                        };
-                       
-                       instance.removeTimer( detectForm );
-                       Util.createIframe( 'targetFrameCreateComic', onCreateIframe );
-                       elmProgress.innerHTML = 'create iframe';
-                       
-                       instance.onPaneResize( winW, winH );
-                       inputTitle.focus();
                };
+               app.submit();
        };
-       function onCreateIframe( _iframe ){
-               elmUploader.appendChild( _iframe );
-               elmIframe             = _iframe;
-               elmForm.target        = _iframe.name;
-               elmProgress.innerHTML = '';
+       function clickCancel(){
+               if( app.isUploading === true ) return false;
+               ComicConsole.shutdown();
        };
 
        /* grobal method */
        this.MIN_WIDTH   = 320;
        this.MIN_HEIGHT  = 320;
        this.onInit = function(){
-               instance.rootElement.id = 'comic-console-wrapper';
-               instance.rootElement.className = 'console-wrapper';
-               instance.rootElement.innerHTML = [
+               app.rootElement.id = 'comic-console-wrapper';
+               app.rootElement.className = 'console-wrapper';
+               app.rootElement.innerHTML = [
                        '<div id="comic-console-header" class="console-header">Create New Comic</div>',
                        '<div id="comic-console" class="console-inner">',
                                '<div id="comic-console-title" class="field">',
@@ -4294,12 +4294,48 @@ var ComicConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
-               instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               
+               delete app.onInit;
+       };
+       this.elmProgressID   = 'comic-console-progress';
+       this.elmUploaderID   = 'newcomic';
+       this.elmIframeName   = 'targetFrameCreateComic'
+       this.scriptSrc       = pettanr.CONST.CREATE_COMIC_JS;
+       this.hideUploader    = true;
+       FormApplicationHelper( this );
+       this.onFormReady     = function(){
+               app.onPaneResize( windowW, windowH );
+               
+               var selectList = app.elmForm.getElementsByTagName( 'select' ),
+                       select,
+                       j, m,
+                       optionList, option;
+               for( var i=0, l=selectList.length; i<l; ++i ){
+                       select = selectList[ i ];
+                       optionList = select.getElementsByTagName( 'option' );
+                       for( j=0, m=optionList.length; j<m; ++j ){
+                               option = optionList[ j ];
+                               if( select.name === 'comic[visible]' ){
+                                       comboboxVisible.createOption( option.innerHTML, option.value, option.selected );
+                               } else
+                               if( select.name === 'comic[editable]' ){
+                                       // comboboxEditable.createOption( option.innerHTML, option.value, option.selected );
+                               };
+                       };
+               };
+               inputTitle.focus();
                
-               delete instance.onInit;
+               delete app.onFoemReady;
+       };
+       this.submitError = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
+       this.submitSuccess = function(){
+               app.addTimer( clickCancel , 5000, true );
        };
        this.onOpen = function( w, h ){
-               var ui           = instance.createUIGroup();
+               var ui           = app.createUIGroup();
                
                inputTitle       = ui.createInputText( document.getElementById( 'comic-console-title') );
                inputW           = ui.createInputText( document.getElementById( 'comic-console-width') );
@@ -4309,128 +4345,38 @@ var ComicConsole = gOS.registerApplication( function(){
                buttonSubmit     = ui.createButton( document.getElementById( 'comic-console-post-button'), clickOK );
                buttonCancel     = ui.createButton( document.getElementById( 'comic-console-cancel-button'), clickCancel );
                
-               elmHeader        = document.getElementById( 'comic-console-header' );
-               elmProgress      = document.getElementById( 'comic-console-progress' );
-               
-               elmUploader      = document.createElement( 'div' );
-               instance.rootElement.appendChild( elmUploader );
-               elmUploader.id   = 'newcomic';
-               elmUploader.style.cssText = 'height:1px;line-height:1px;visibility:hidden;overflow:hidden;';
-               
-               elmScript        = document.createElement( 'script' );
-               document.body.appendChild( elmScript );
-               elmScript.type   = 'text\/javascript';
-               elmScript.src    = pettanr.CONST.CREATE_COMIC_JS;
-               
-               elmProgress.innerHTML = 'loading form.';
-               
-               instance.addTimer( detectForm, 250 );
-               instance.onPaneResize( w, h );
-               
-               delete instance.onOpen;
+               app.onPaneResize( w, h );
+               app.fetchScript();
+               delete app.onOpen;
        };
        this.onPaneResize = function( _w, _h ){
-               winW = _w;
-               winH = _h;
-               instance.rootElement.style.cssText = [
-                       'left:', Math.floor( ( _w - instance.rootElement.offsetWidth  ) /2 ), 'px;',
-                       'top:',  Math.floor( ( _h- instance.rootElement.offsetHeight ) /2 ), 'px;'
+               windowW = _w;
+               windowH = _h;
+               app.rootElement.style.cssText = [
+                       'left:', Math.floor( ( _w - app.rootElement.offsetWidth  ) /2 ), 'px;',
+                       'top:',  Math.floor( ( _h- app.rootElement.offsetHeight ) /2 ), 'px;'
                ].join( '' );
        };
        this.onClose = function(){
-               elmHeader = elmProgress = elmForm  = elmUploader = instance = null;
-               isUploading = false;
+               app.destroyHelper();
+               app = inputTitle = inputW = inputH = comboboxVisible = buttonSubmit = buttonCancel = null;
        };
 }, true, true, 'Comic Console', 'comicConsole', null, '#D44A26' );
 
 var UploadConsole = gOS.registerApplication( function(){
        var windowW, windowH,
-               TARGET_FRAME_NAME = 'targetFrame',
-               elmContainer,
-               elmProgress,
-               elmScript   = null,
-               elmForm     = null,
-               elmFile     = null,
-               elmIframe   = null,
-               isUploading = false,
-               instance    = this;
-       /*
-        * upload ボタンが押されたらまず iframe をつくる.
-        */
+               buttonSubmit, buttonCancel,
+               elmFile,
+               app = this;
+
        function clickOK(){
-               if( !elmForm || !elmIframe || isUploading === true ) return false;
+               if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
                if( elmFile.value.length === 0 ) return false;
-               elmProgress.innerHTML = 'uploading.';
-               isUploading = true;
-               submit();
+               app.submit();
                return false;
        };
-       /*
-        * form の target に iframe を指定したのち submit();
-        */
-               function submit(){
-                       try {
-                               elmForm.submit();
-                       } catch( e){
-                               elmProgress.innerHTML = 'submit() err..';
-                               isUploading = false;
-                               instance.addTimer( clickCancel , 3000, true );
-                               return;
-                       };
-                       
-                       if( UA.isIE){
-                               elmIframe.onreadystatechange = detectIframe;
-                       } else {
-                               elmIframe.onload = onLoad;
-                       };
-                       elmProgress.innerHTML = 'uploading..';
-               };
-       /*
-        * ie の 場合、readyState をチェック.
-        */
-                       function detectIframe(){
-                   if ( elmIframe.readyState === 'complete') {
-                       elmIframe.onreadystatechange = new Function();
-                       elmIframe.onreadystatechange = null;
-                       onLoad();
-                   };
-                       };
-                               function onLoad(){
-                                       elmIframe.onload = null;
-                                       ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
-                                       elmProgress.innerHTML = 'success!';
-                                       instance.addTimer( clickCancel , 1000 );
-                                       isUploading = false;
-                               };
-       
-       function detectForm(){
-               elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
-               if( elmForm ){
-                       var _inputList = elmForm.getElementsByTagName( 'input' ),
-                               _input;
-                       for( var i = _inputList.length; i; ){
-                               _input = _inputList[ --i ];
-                               if( _input.type === 'file' ){
-                                       elmFile = _input;
-                               };
-                               if( _input.type === 'submit' ){
-                                       _input.style.display = 'none';
-                               };
-                       };
-                       instance.removeTimer( detectForm );
-                       Util.createIframe( TARGET_FRAME_NAME, onCreateIframe );
-                       elmProgress.innerHTML = 'create iframe';
-               };
-       };
-       function onCreateIframe( _iframe ){
-               elmContainer.appendChild( _iframe );
-               elmIframe = _iframe;
-               elmForm.target = _iframe.name;
-               elmProgress.innerHTML = '';
-               instance.onPaneResize( windowW, windowH );
-       };
        function clickCancel(){
-               if( isUploading === true ) return false;
+               if( app.isUploading === true ) return false;
                UploadConsole.shutdown();
                return false;
        };
@@ -4439,9 +4385,9 @@ var UploadConsole = gOS.registerApplication( function(){
        this.MIN_WIDTH   = 320;
        this.MIN_HEIGHT  = 320;
        this.onInit = function(){
-               instance.rootElement.id = 'upload-console-wrapper';
-               instance.rootElement.className = 'console-wrapper';
-               instance.rootElement.innerHTML = [
+               app.rootElement.id = 'upload-console-wrapper';
+               app.rootElement.className = 'console-wrapper';
+               app.rootElement.innerHTML = [
                        '<div id="upload-console-header" class="console-header">Upload Picture</div>',
                        '<div id="upload-console" class="console-inner">',
                                '<div id="uploader"></div>',
@@ -4453,136 +4399,83 @@ var UploadConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
-               instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
                
-               delete instance.onInit;
-       }
+               delete app.onInit;
+       };
+       this.elmProgressID   = 'upload-console-progress';
+       this.elmUploaderID   = 'uploader';
+       this.elmIframeName   = 'targetFrameUpload'
+       this.scriptSrc       = pettanr.CONST.UPLOAD_PICTURE_JS;
+       this.hideUploader    = false;
+       FormApplicationHelper( this );
+       this.onFormReady     = function(){
+               app.onPaneResize( windowW, windowH );
+
+               var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+                       _input;
+               for( var i = _inputList.length; i; ){
+                       _input = _inputList[ --i ];
+                       if( _input.type === 'file' ){
+                               elmFile = _input;
+                       } else
+                       if( _input.type === 'submit' ){
+                               _input.style.display = 'none';
+                       };
+               };
+               delete app.onFoemReady;
+       };
+       this.submitError = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
+       this.submitSuccess = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
        this.onOpen = function( w, h ){
-               elmContainer = document.getElementById( 'uploader' );
-               elmProgress  = document.getElementById( 'upload-console-progress' );
-               
-               instance.addMouseEventListener( document.getElementById( 'upload-console-post-button' ), 'click', clickOK );
-               instance.addMouseEventListener( document.getElementById( 'upload-console-cancel-button' ), 'click', clickCancel );
-               /*
-                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
-                */                             
-               elmScript      = document.createElement( 'script' );
-               document.body.appendChild( elmScript );
-               elmScript.type = 'text\/javascript';
-               elmScript.src  = pettanr.CONST.UPLOAD_PICTURE_JS;
+               var ui           = app.createUIGroup();
+               buttonSubmit     = ui.createButton( document.getElementById( 'upload-console-post-button'), clickOK );
+               buttonCancel     = ui.createButton( document.getElementById( 'upload-console-cancel-button'), clickCancel );
 
-               instance.addTimer( detectForm, 250 );
-               instance.onPaneResize( w, h );
-               
-               elmProgress.innerHTML = 'loading form.';
+               app.onPaneResize( w, h );
+               app.fetchScript();
        };
        this.onPaneResize = function( _windowW, _windowH){
                windowW = _windowW;
                windowH = _windowH;
-               instance.rootElement.style.cssText = [
-                       'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth  ) /2 ), 'px;',
-                       'top:',  Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+               app.rootElement.style.cssText = [
+                       'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth  ) /2 ), 'px;',
+                       'top:',  Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
                ].join( '' );
-       }
+       };
        this.onClose = function(){
-               elmHeader = elmProgress = elmForm  = elmUploader = instance = null;
-               isUploading = false;
-       }
+               app.destroyHelper();
+               app = elmFile = buttonSubmit = buttonCancel = null;
+       };
 }, true, true, 'Upload Console', 'uploadConsole', null, '#01A31C' );
 
 var ArtistConsole = gOS.registerApplication( function(){
        var windowW, windowH,
-               TARGET_FRAME_NAME = 'targetFrameRegisterArtist',
-               elmContainer, elmProgress,
-               elmScript   = null,
-               elmForm     = null,
-               elmIframe   = null,
-               isUploading = false,
-               instance    = this;
-       /*
-        * upload ボタンが押されたらまず iframe をつくる.
-        */
+               buttonSubmit, buttonCancel,
+               app = this;
+
        function clickOK(){
-               if( !elmForm || !elmIframe || isUploading === true ) return false;
-               elmProgress.innerHTML = 'uploading.';
-               isUploading = true;
-               submit();
+               if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
+               app.submit();
                return false;
-       }
-       /*
-        * form の target に iframe を指定したのち submit();
-        */
-               function submit(){
-                       try {
-                               elmForm.submit();
-                       } catch( e){
-                               elmProgress.innerHTML = 'submit() err..';
-                               isUploading = false;
-                               instance.addTimer( clickCancel , 3000, true );
-                               return;
-                       }
-                       
-                       if( UA.isIE){
-                               elmIframe.onreadystatechange = detectIframe;
-                       } else {
-                               elmIframe.onload = onLoad;
-                       }
-                       elmProgress.innerHTML = 'uploading..';
-               }
-       /*
-        * ie の 場合、readyState をチェック.
-        */
-                       function detectIframe(){
-                   if ( elmIframe.readyState === 'complete' ){
-                       elmIframe.onreadystatechange = new Function();
-                       elmIframe.onreadystatechange = null;
-                       onLoad();
-                   }
-                       }
-                               function onLoad(){
-                                       elmIframe.onload = null;
-                                       ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
-                                       elmProgress.innerHTML = 'success!';
-                                       instance.addTimer( clickCancel , 1000, true );
-                                       isUploading = false;
-                               }
-       
-       function detectForm(){
-               elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
-               if( elmForm){
-                       var _inputList = elmForm.getElementsByTagName( 'input' ),
-                               _input;
-                       for( var i = _inputList.length; i; ){
-                               _input = _inputList[ --i ];
-                               if( _input.type === 'submit' ){
-                                       _input.style.display = 'none';
-                               }
-                       }
-                       instance.removeTimer( detectForm );
-                       Util.createIframe( TARGET_FRAME_NAME, onCreateIframe);
-                       elmProgress.innerHTML = 'create iframe';
-               }
-       }
-       function onCreateIframe( _iframe ){
-               elmContainer.appendChild( _iframe );
-               elmIframe = _iframe;
-               elmForm.target = _iframe.name;
-               elmProgress.innerHTML = '';
-               instance.onPaneResize( windowW, windowH );
-       }
+       };
        function clickCancel(){
-               if( isUploading === true) return false;
+               if( app.isUploading === true) return false;
                ArtistConsole.shutdown();
                return false;
-       }
+       };
 
        /* grobal method */
        this.MIN_WIDTH   = 320;
        this.MIN_HEIGHT  = 320;
        this.onInit = function(){
-               instance.rootElement.id = 'artist-console-wrapper';
-               instance.rootElement.className = 'console-wrapper';
-               instance.rootElement.innerHTML = [
+               app.rootElement.id = 'artist-console-wrapper';
+               app.rootElement.className = 'console-wrapper';
+               app.rootElement.innerHTML = [
                        '<div id="artist-console-header" class="console-header">Register Artist</div>',
                        '<div id="artist-console" class="console-inner">',
                                '<div id="register"></div>',
@@ -4594,40 +4487,54 @@ var ArtistConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
                
-               instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
                
-               delete instance.onInit;
+               delete app.onInit;
+       };
+       this.elmProgressID   = 'artist-console-progress';
+       this.elmUploaderID   = 'register';
+       this.elmIframeName   = 'targetFrameArtistRegister'
+       this.scriptSrc       = pettanr.CONST.REGISTER_ARTIST_JS;
+       this.hideUploader    = false;
+       FormApplicationHelper( this );
+       this.onFormReady     = function(){
+               app.onPaneResize( windowW, windowH );
+
+               var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+                       _input;
+               for( var i = _inputList.length; i; ){
+                       _input = _inputList[ --i ];
+                       if( _input.type === 'submit' ){
+                               _input.style.display = 'none';
+                       };
+               };
+               delete app.onFoemReady;
+       };
+       this.submitError = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
+       this.submitSuccess = function(){
+               app.addTimer( clickCancel , 5000, true );
        };
        this.onOpen = function( w, h ){
-               elmContainer = document.getElementById( 'register');
-               elmProgress  = document.getElementById( 'artist-console-progress');
-               
-               instance.addMouseEventListener( document.getElementById( 'artist-console-post-button' ), 'click', clickOK );
-               instance.addMouseEventListener( document.getElementById( 'artist-console-cancel-button' ), 'click', clickCancel );
-               /*
-                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
-                */                             
-               elmScript = document.createElement( 'script' );
-               document.body.appendChild( elmScript );
-               elmScript.type = 'text\/javascript';
-               elmScript.src = pettanr.CONST.REGISTER_ARTIST_JS;
+               var ui           = app.createUIGroup();
+               buttonSubmit     = ui.createButton( document.getElementById( 'artist-console-post-button'), clickOK );
+               buttonCancel     = ui.createButton( document.getElementById( 'artist-console-cancel-button'), clickCancel );
 
-               instance.addTimer( detectForm, 250 );
-               instance.onPaneResize( w, h );
-               
-               elmProgress.innerHTML = 'loading form.';
+               app.onPaneResize( w, h );
+               app.fetchScript();
        };
        this.onPaneResize = function( _windowW, _windowH ){
                windowW = _windowW;
                windowH = _windowH;
-               instance.rootElement.style.cssText = [
-                       'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth  ) /2 ), 'px;',
-                       'top:',  Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+               app.rootElement.style.cssText = [
+                       'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth  ) /2 ), 'px;',
+                       'top:',  Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
                ].join( '' );
        };
        this.onClose = function(){
-               elmHeader = elmProgress = elmForm  = elmUploader = instance = null;
-               isUploading = false;
+               app.destroyHelper();
+               app = buttonSubmit = buttonCancel = null;
        };
 }, true, true, 'Artist Console', 'artistConsole', null, '#FFC40D' );
 
@@ -4635,13 +4542,14 @@ var ArtistConsole = gOS.registerApplication( function(){
 var Model = ( function(){
        
        var PanelModelClass = function( panel ){
-               var comicID           = panel.comicID,
-                       panelID           = panel.panelID,
-                       panelTimming      = panel.panelTimming,
+               var comicID           = panel.comicID || -1,
+                       panelID           = panel.panelID || -1,
+                       panelTimming      = panel.panelTimming || -1,
                        panelW            = panel.panelW,
                        panelH            = panel.panelH,
                        borderSize        = panel.borderSize,
                        panelElementArray = panel.panelElementArray,
+                       publish           = panel.publish,
                        timing            = 0;
                        
                function getPanelElementByTiming(){
@@ -4779,24 +4687,24 @@ var Model = ( function(){
                        };
                        return [
                                '{', cr,
-                                       //'"panel": {', cr,
-                                               //'"id": ',               panelID, ',', cr,
-                                           '"width": ',            panelW, ',', cr,
-                                           '"height": ',           panelH, ',', cr,
-                                           '"border": ',           borderSize, ',', cr,
-                                           // '"comic_id": ',         comicID, ',', cr,
-                                           // '"picture_id": 1,', cr,
-                                               '"x": ',                0, ',', cr,
-                                               '"y": ',                0, ',', cr,
-                                               '"z": ',                1, ',', cr,
-                                               // '"t": ',                             panelTimming, ',', cr,
-                                           '"panel_pictures_attributes": {', cr,
-                                               IMAGE_ARRAY.join( ',' + cr ), cr,
-                                           '},', cr,
-                                           '"speech_balloons_attributes": {', cr,
-                                               BALLOON_ARRAY.join( ',' + cr ), cr,
-                                           '}', cr,
-                                       //'}', cr,
+                                       panelID !== -1 ? ( '"id": ' + panelID + ',' + cr ) : '',
+                                       comicID !== -1 ? ( '"comic_id": ' + comicID + ',' + cr ) : '',
+                                   '"width": ',            panelW, ',', cr,
+                                   '"height": ',           panelH, ',', cr,
+                                   '"border": ',           borderSize, ',', cr,
+                                   
+                                   // '"picture_id": 1,', cr,
+                                       '"x": ',                0, ',', cr,
+                                       '"y": ',                0, ',', cr,
+                                       '"z": ',                1, ',', cr,
+                                       panelTimming !== -1 ? ( '"t": ' + panelTimming + ',' + cr ) : '',
+                                   '"panel_pictures_attributes": {', cr,
+                                       IMAGE_ARRAY.join( ',' + cr ), cr,
+                                   '},', cr,
+                                   '"speech_balloons_attributes": {', cr,
+                                       BALLOON_ARRAY.join( ',' + cr ), cr,
+                                   '}', ',', cr,
+                                   '"publish": ',           ( publish === true ? 1 : 0 ), cr,
                                '}'
                        ].join( '' );
                };
@@ -4862,6 +4770,9 @@ var Model = ( function(){
                        
                        return HTML_ARRAY.join( pettanr.LINE_FEED_CODE_TEXTAREA );
                };
+               this.publish = function( v ){
+                       return publish = Type.isBoolean( v ) === true ? v : publish;
+               };
                this.destroy = function(){
                        panel = panelElementArray = null;
                };
@@ -4883,7 +4794,7 @@ var OutputConsole = gOS.registerApplication( function(){
                windowW, windowH,
                timing   = 0,
                comicID, panelID, panelTimming, panelW, panelH, borderSize, panelElementArray,
-               instance = this,
+               app      = this,
                model    = null;
        
        function clickOK(){
@@ -4922,9 +4833,9 @@ var OutputConsole = gOS.registerApplication( function(){
        this.MIN_WIDTH   = 320;
        this.MIN_HEIGHT  = 320;
        this.onInit = function(){
-               instance.rootElement.id = 'output-console-wrapper';
-               instance.rootElement.className = 'console-wrapper';
-               instance.rootElement.innerHTML = [
+               app.rootElement.id = 'output-console-wrapper';
+               app.rootElement.className = 'console-wrapper';
+               app.rootElement.innerHTML = [
                        '<div id="output-console-header" class="console-header">Output Console</div>',
                        '<div id="output-console" class="console-inner">',
                                '<div id="output-console-format" class="field">',
@@ -4940,14 +4851,14 @@ var OutputConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
 
-               instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
 
-               delete instance.onInit;
+               delete app.onInit;
        };
        this.onOpen = function( _w, _h, _comicID, _panelID, _panelTimming, _panelW, _panelH, _borderSize, _panelElementArray ){
                elmOutputArea = document.getElementById( 'output-area' );
                
-               var ui = instance.createUIGroup();
+               var ui = app.createUIGroup();
                comboboxFormat = ui.createCombobox( document.getElementById( 'output-console-format' ), formatUpdate );
                
                for( var i=0; FORMAT_LIST[ 0 ]; ++i ){
@@ -4956,7 +4867,10 @@ var OutputConsole = gOS.registerApplication( function(){
                inputOption    = ui.createInputText( document.getElementById( 'output-console-option' ), null );
                // buttonPost     = ui.createButton( document.getElementById( 'output-console-post-button' ), clickPost );
                buttonClose    = ui.createButton( document.getElementById( 'output-console-close-button' ), clickClose );
-               instance.onPaneResize( _w, _h );
+               
+               app.onPaneResize( _w, _h );
+               
+               comboboxFormat.focus( true );
                
                model = Model.createPanel( {
                        comicID           : _comicID,
@@ -4965,7 +4879,8 @@ var OutputConsole = gOS.registerApplication( function(){
                        panelW            : _panelW,
                        panelH            : _panelH,
                        borderSize        : _borderSize,
-                       panelElementArray : _panelElementArray
+                       panelElementArray : _panelElementArray,
+                       publish           : true
                } );
                
                formatUpdate();
@@ -4973,9 +4888,9 @@ var OutputConsole = gOS.registerApplication( function(){
        this.onPaneResize = function( _windowW, _windowH ){
                windowW = _windowW;
                windowH = _windowH;
-               instance.rootElement.style.cssText = [
-                       'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth  ) /2 ), 'px;',
-                       'top:',  Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+               app.rootElement.style.cssText = [
+                       'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth  ) /2 ), 'px;',
+                       'top:',  Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
                ].join( '' );
        };
        this.onClose = function(){
@@ -4988,109 +4903,46 @@ var OutputConsole = gOS.registerApplication( function(){
 
 var PanelConsole = gOS.registerApplication( function(){
        var windowW, windowH,
-               TARGET_FRAME_NAME = 'targetFrameCreateNewPanel',
-               elmContainer, elmProgress,
-               elmScript = null,
-               elmForm = null,
-               elmIframe = null,
-               isUploading = false,
-               instance = this,
-               json;
+               comboboxPublish, buttonPost, buttonClose,
+               elmInput,
+               app         = this,
+               model       = null;
+               
        /*
         * upload ボタンが押されたらまず iframe をつくる.
         */
        function clickOK(){
-               if( !elmForm || !elmIframe || isUploading === true ) return false;
-               elmProgress.innerHTML = 'uploading.';
-               isUploading = true;
-               submit();
+               if( !app.elmForm || !app.elmIframe || app.isUploading === true ) return false;
+               app.submit();
                return false;
        }
-       /*
-        * form の target に iframe を指定したのち submit();
-        */
-               function submit(){
-                       try {
-                               elmForm.submit();
-                       } catch( e ){
-                               elmProgress.innerHTML = 'submit() err..';
-                               isUploading = false;
-                               instance.addTimer( clickCancel , 3000, true );
-                               return;
-                       }
-                       
-                       if( UA.isIE ){
-                               elmIframe.onreadystatechange = detectIframe;
-                       } else {
-                               elmIframe.onload = onLoad;
-                       }
-                       elmProgress.innerHTML = 'uploading..';
-               }
-       /*
-        * ie の 場合、readyState をチェック.
-        */
-                       function detectIframe(){
-                   if ( elmIframe.readyState === 'complete' ){
-                       elmIframe.onreadystatechange = new Function();
-                       elmIframe.onreadystatechange = null;
-                       onLoad();
-                   };
-                       };
-                               function onLoad(){
-                                       try {
-                                               console.log( ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).document.body.innerHTML );
-                                       } catch(e){
-                                               
-                                       }
-                                       elmIframe.onload = null;
-                                       ( elmIframe.contentWindow || elmIframe.contentDocument.parentWindow ).close();
-                                       elmProgress.innerHTML = 'success!';
-                                       instance.addTimer( clickCancel , 1000, true );
-                                       isUploading = false;
-                               };
-       
-       function detectForm(){
-               elmForm = elmContainer.getElementsByTagName( 'form' )[ 0 ];
-               if( elmForm){
-                       var _inputList = elmForm.getElementsByTagName( 'input' ),
-                               _input;
-                       for( var i = _inputList.length; i; ){
-                               _input = _inputList[ --i ];
-                               if( _input.type === 'submit' ){
-                                       _input.style.display = 'none';
-                               };
-                               if( _input.name === 'json' && Type.isString( json ) === true ){
-                                       _input.value = json;
-                               };
-                       };
-                       instance.removeTimer( detectForm );
-                       Util.createIframe( TARGET_FRAME_NAME, onCreateIframe );
-                       elmProgress.innerHTML = 'create iframe';
-               };
-       };
-       function onCreateIframe( _iframe ){
-               elmContainer.appendChild( _iframe );
-               elmIframe = _iframe;
-               elmForm.target = _iframe.name;
-               elmProgress.innerHTML = '';
-               instance.onPaneResize( windowW, windowH );
-       };
+
        function clickCancel(){
-               if( isUploading === true) return false;
+               if( app.isUploading === true ) return false;
                PanelConsole.shutdown();
                return false;
        };
+       function publishUpdate(){
+               if( model ){
+                       model.publish( comboboxPublish.selectIndex() === 1 );
+                       elmInput.value = model.getJsonPostString().replace( /\n/g, '' );                        
+               };
+       };
 
        /* grobal method */
        this.MIN_WIDTH   = 320;
        this.MIN_HEIGHT  = 320;
        this.onInit = function(){
-               instance.rootElement.id = 'panel-console-wrapper';
-               instance.rootElement.className = 'console-wrapper';
-               instance.rootElement.innerHTML = [
+               app.rootElement.id = 'panel-console-wrapper';
+               app.rootElement.className = 'console-wrapper';
+               app.rootElement.innerHTML = [
                        '<div id="panel-console-header" class="console-header">Create New Panel (dev)</div>',
                        '<div id="panel-console" class="console-inner">',
                                '<div id="newpanel"></div>',
+                               '<div id="panel-console-publish" class="field">',
+                                       '<span class="field-label">Publish:</span>',
+                                       '<span id="panel-console-publish-value" class="combobox"></span>',
+                               '</div>',
                                '<div class="console-button-container">',
                                        '<div id="panel-console-post-button" class="button console-submit-button">post</div>',
                                        '<div id="panel-console-cancel-button" class="button console-cancel-button">cancel</div>',
@@ -5099,44 +4951,72 @@ var PanelConsole = gOS.registerApplication( function(){
                        '</div>'
                ].join( '' );
 
-               instance.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
+               app.fetchCSS( pettanr.CONST.URL_PETA_APPS_CSS );
 
-               delete instance.onInit;
-       }
-       this.onOpen = function( w, h, _json ){
-               elmContainer = document.getElementById( 'newpanel' );
-               elmProgress  = document.getElementById( 'panel-console-progress' );
-               
-               instance.addMouseEventListener( document.getElementById( 'panel-console-post-button' ), 'click', clickOK );
-               instance.addMouseEventListener( document.getElementById( 'panel-console-cancel-button' ), 'click', clickCancel );
-               /*
-                * ie 6, 7 で fadeIn 中の要素に appendChild すると クラッシュするので、document.body に追加.
-                */                             
-               elmScript = document.createElement( 'script' );
-               document.body.appendChild( elmScript );
-               elmScript.type = 'text\/javascript';
-               elmScript.src  = pettanr.CONST.CREATE_PANEL_JS;
+               delete app.onInit;
+       };
+       this.elmProgressID   = 'panel-console-progress';
+       this.elmUploaderID   = 'newpanel';
+       this.elmIframeName   = 'targetFrameNewPanel'
+       this.scriptSrc       = pettanr.CONST.CREATE_PANEL_JS;
+       this.hideUploader    = false;
+       FormApplicationHelper( this );
+       this.onFormReady     = function(){
+               app.onPaneResize( windowW, windowH );
 
-               instance.addTimer( detectForm, 250 );
-               instance.onPaneResize( w, h );
+               var _inputList = app.elmForm.getElementsByTagName( 'input' ),
+                       _input;
+               for( var i = _inputList.length; i; ){
+                       _input = _inputList[ --i ];
+                       if( _input.type === 'submit' ){
+                               _input.style.display = 'none';
+                       };
+                       if( _input.name === 'json' ){
+                               elmInput     = _input;
+                               publishUpdate();
+                       };
+               };
+               
+               delete app.onFoemReady;
+       };
+       this.submitError = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
+       this.submitSuccess = function(){
+               app.addTimer( clickCancel , 5000, true );
+       };
+       this.onOpen = function( w, h, _model ){
+               var ui  = app.createUIGroup(),
+                       elm = document.getElementById( 'panel-console-publish' );
+               if( _model ){
+                       comboboxPublish  = ui.createCombobox( elm, publishUpdate );
+                       comboboxPublish.createOption( 'only me', '0', _model.publish() === false );
+                       comboboxPublish.createOption( 'publish', '1', _model.publish() === true );
+                       model = _model;
+               } else {
+                       elm.parentNode.removeChild( elm );
+               };
                
-               json = _json;
+               buttonPost       = ui.createButton( document.getElementById( 'panel-console-post-button' ), clickOK );
+               buttonClose      = ui.createButton( document.getElementById( 'panel-console-cancel-button' ), clickCancel );
                
-               elmProgress.innerHTML = 'loading form.';
+               app.onPaneResize( w, h );
+               app.fetchScript();
        };
        this.onPaneResize = function( _windowW, _windowH ){
                windowW = _windowW;
                windowH = _windowH;
-               instance.rootElement.style.cssText = [
-                       'left:', Math.floor( ( _windowW - instance.rootElement.offsetWidth  ) /2 ), 'px;',
-                       'top:',  Math.floor( ( _windowH - instance.rootElement.offsetHeight ) /2 ), 'px;'
+               app.rootElement.style.cssText = [
+                       'left:', Math.floor( ( _windowW - app.rootElement.offsetWidth  ) /2 ), 'px;',
+                       'top:',  Math.floor( ( _windowH - app.rootElement.offsetHeight ) /2 ), 'px;'
                ].join( '' );
        };
        this.onClose = function(){
-               elmHeader = elmProgress = elmForm  = elmUploader = instance = null;
-               isUploading = false;
+               app.destroyHelper();
+               model && model.destroy();
+               app = model = comboboxPublish = buttonPost = buttonClose = elmInput = null;
        };
 }, true, true, 'Panel Console', 'panelConsole', null, '#603CBA' );
 
 
-})( pettanr, gOS, window );
+})( pettanr, gOS, window, document );
index 458809a..19b96eb 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
  * pettanR peta.common.js\r
- *   version 0.5.8\r
+ *   version 0.5.14\r
  * \r
  *   author:\r
  *     itozyun\r
@@ -89,8 +89,11 @@ pettanr.CONST = ( function(){
                URL_RESOURCE_PICTURES_JSON: ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'resource_pictures.json',\r
                URL_COMICS_JSON:                        ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'comics.json',\r
                URL_PANELS_JSON:                        ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'panels.json',\r
+               URL_MY_PANELS_JSON:                     ( SERVER_SUPPORT === false ? 'json\/' : PETTANR_ROOT_PATH ) + 'home\/panel.json',\r
                NS_PETTANR_COMIC:                       'pettanr-comic',\r
-               RESOURCE_PICTURE_PATH:          ( SERVER_SUPPORT === false ? RELATIVE : PETTANR_ROOT_PATH ) + 'resource_pictures\/',\r
+               THUMBNAIL_PATH:             SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/thumbnail\/' : PETTANR_ROOT_PATH + 'resource_pictures\/',\r
+               RESOURCE_PICTURE_PATH:          SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'resource_pictures\/full\/',\r
+               PANEL_PICTURE_PATH:                 SERVER_SUPPORT === false ? RELATIVE + 'resource_pictures\/' : PETTANR_ROOT_PATH + 'pictures\/',\r
                SYSTEM_PICTURE_PATH:            ( SERVER_SUPPORT === false ? RELATIVE : PETTANR_ROOT_PATH ) + 'system_pictures\/',\r
                CREATE_COMIC_JS:                        SERVER_SUPPORT === false ? 'js\/create_new_comic.js' : PETTANR_ROOT_PATH + 'comics\/new.js',\r
                CREATE_PANEL_JS:                        SERVER_SUPPORT === false ? 'js\/create_new_panel.js' : PETTANR_ROOT_PATH + 'panels\/new.js',\r
@@ -592,7 +595,7 @@ pettanr.image = ( function(){
                                elmWrap.appendChild( vmlImg );\r
                }\r
                this.destroy = function(){\r
-                       instance.destroy;\r
+                       delete instance.destroy;\r
                        \r
                        vmlImg !== null && elmWrap.removeChild( vmlImg );\r
                        retryTimer !== null && window.clearTimeout( retryTimer );\r
@@ -623,7 +626,7 @@ pettanr.image = ( function(){
 pettanr.bind = ( function(){\r
        var BIND_WORKER_ARRAY = [],\r
                NAMESPACE_CLASSNAME = pettanr.CONST.NS_PETTANR_COMIC + '-',\r
-               RESOURCE_PICTURE_PATH = pettanr.CONST.RESOURCE_PICTURE_PATH,\r
+               PICTURE_PATH = pettanr.CONST.PANEL_PICTURE_PATH,\r
                ELM_DETECT_WIDTH = ( function(){\r
                        var ret = document.createElement( 'div');\r
                        ret.style.cssText = 'width: auto;height: 0;padding: 0;margin: 0;display: block;visibility: hidden;float: none;position: static;';\r
@@ -706,7 +709,7 @@ pettanr.bind = ( function(){
                                _rPic = _comicElement.resource_picture;\r
                                if( _rPic ){\r
                                        _rImg = pettanr.image.createReversibleImage(\r
-                                                       [ RESOURCE_PICTURE_PATH, _rPic.id, '.', _rPic.ext ].join( ''),\r
+                                                       [ PICTURE_PATH, _rPic.id, '.', _rPic.ext ].join( ''),\r
                                                        _comicElement.width, _comicElement.height\r
                                                );\r
                                        _elmImg = _rImg.elm;\r
@@ -844,199 +847,6 @@ pettanr.bind = ( function(){
        }\r
 })();\r
 \r
-var VisualEffect = ( function(){\r
-       \r
-       var ANIMATION_TICKET_ARRAY = [],\r
-               fpms = 50,\r
-               TIMER = null,\r
-               FILTER = 'filter',\r
-               OPACITY = 'opacity',\r
-               REG_ALPHA = /alpha\([^)]*\)/i,\r
-               CORON = ':',\r
-               EMPTY = '',\r
-               SEMICORON = ';';\r
-       \r
-       function startAnimation( _elm, _cssObject, _onComplete, _onEnterFrame, _numFrames){\r
-               var _ticket;\r
-               for( var i=0, l=ANIMATION_TICKET_ARRAY.length; i<l; ++i){\r
-                       _ticket = ANIMATION_TICKET_ARRAY[ i];\r
-                       if( _ticket.elm === _elm) {\r
-                               _ticket.destroy();\r
-                               break;\r
-                       }\r
-               }\r
-               //  coputedStyle と _cssObject を比較して , 一致及び非数は削除しつつ コピー\r
-               //  filter opacity の追加 REG_ALPHA.test( _value ) ? _value.replace( REG_ALPHA, opacity ) : _value + " " + opacity\r
-               /*\r
-                * cssObject をまわす\r
-                * 非数は削除\r
-                * cssText と一致も削除\r
-                * coputedStyle と一致も削除\r
-                * updateTraget ととして記録\r
-                * 初期値を cssObject としてセット\r
-                * cssTest にセット zoom もセット\r
-                */\r
-               \r
-               //\r
-               /*\r
-                       var style = elem.style,\r
-                               currentStyle = elem.currentStyle,\r
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",\r
-                               filter = currentStyle && currentStyle.filter || style.filter || "";\r
-\r
-                       // IE has trouble with opacity if it does not have layout\r
-                       // Force it by setting the zoom level\r
-                       style.zoom = 1;\r
-                */\r
-               \r
-               var _currentParameters = [],\r
-                       _offsetParameters = [],\r
-                       _endParameters = [],\r
-                       _targetAttributes = [];\r
-               \r
-               ANIMATION_TICKET_ARRAY.push( new AnimationTaskClass(\r
-                       _elm,\r
-                       _currentParameters, _offsetParameters, _endParameters, _targetAttributes,\r
-                       typeof _onComplete === 'function' ? _onComplete : null,\r
-                       typeof _onEnterFrame === 'function' ? _onEnterFrame : null,\r
-                       _numFrames\r
-               ));\r
-               \r
-               if( TIMER === null){\r
-                       TIMER = window.setInterval( onEnterFrame, fpms);\r
-               }\r
-       }\r
-       function onEnterFrame(){\r
-               var _ticket,\r
-                       i = 0;\r
-               while( i<ANIMATION_TICKET_ARRAY.length){\r
-                       _ticket = ANIMATION_TICKET_ARRAY[ i];\r
-                       if( _ticket.onEnterFrame() === true){\r
-                               _ticket.destroy();\r
-                               ANIMATION_TICKET_ARRAY.splice( i, 1);\r
-                       } else {\r
-                               ++i;\r
-                       }\r
-               }\r
-               if( ANIMATION_TICKET_ARRAY.length === 0){\r
-                       window.clearInterval( TIMER);\r
-                       TIMER = null;\r
-               }\r
-       }\r
-       function updateCss( _elm, _updateParameters, _targetAttributes, _numAttributes){\r
-               if( _numAttributes > 1){\r
-                       var _cssTexts = _elm.style.cssText.split( ';'), _css,\r
-                               _separate,\r
-                               _cssObject = {}, _target, _value, _number, _px,\r
-                               j;\r
-                       for(var i=0, l=_cssTexts.length; i<l; ++i){\r
-                               _css = _cssTexts[ i];\r
-                               _separate = _css.indexOf( ':');\r
-                               if( _separate >= 3){\r
-                                       _target = _css.substr( 0, _separate +1);\r
-                                       _value = _css.substr( _separate +1);\r
-                                       /*\r
-                                        * ie filter\r
-                                        */\r
-                                       if( _target === FILTER){\r
-                                               for( j=0; j<_numAttributes; ++j){\r
-                                                       if( _targetAttributes[ j] === OPACITY){\r
-                                                               _cssTexts[ i] = [\r
-                                                                               _target, ':',\r
-                                                                               _value.replace( REG_ALPHA, "alpha(opacity=" + _updateParameters[ j] * 100 + ")")\r
-                                                                       ].join( '');\r
-                                                               break;\r
-                                                       }\r
-                                               }\r
-                                       /*\r
-                                        * other\r
-                                        */\r
-                                       } else {\r
-                                               _number = '' + parseFloat( _value);\r
-                                               _px = _value.indexOf( _number);\r
-                                               _px = _px > 0 ? _value.substr( _px + _number.length) : '';\r
-                                               for( j=0; j<_numAttributes; ++j){\r
-                                                       if( _targetAttributes[ j] === _target){\r
-                                                               _cssTexts[ i] = [ _target, ':', _updateParameters[ j], _px].join( '');\r
-                                                               break;\r
-                                                       }\r
-                                               }                                               \r
-                                       }\r
-                               }\r
-                       }\r
-                       _elm.style.cssText = _cssTexts.join( ';');\r
-                       return; \r
-               }\r
-               /*\r
-                * 一度に update する Attributes が少ない場合、cssText は使用しない.\r
-                */\r
-       }\r
-       \r
-       var AnimationTaskClass = function( ELM, currentParameters, offsetParameters, endParameters, targetAttributes, onComplete, onEnterFrame, numFrames){\r
-               var l = targetAttributes.length;\r
-               return {\r
-                       elm:    ELM,\r
-                       onEnterFrame: function(){\r
-                               var _updateCss = {}, i;\r
-                               if( numFrames === 1){\r
-                                       for( i=0; i<l; ++i){\r
-                                               _updateCss[ targetAttributes[ i]] = endParameters[ i];\r
-                                               ++i;\r
-                                       }\r
-                                       updateCss( ELM, currentParameters, targetAttributes, l);\r
-                                       onComplete !== null && onComplete();\r
-                               } else {\r
-                                       for( i=0; i<l; ++i){\r
-                                               _updateCss[ targetAttributes[ i]] = currentParameters[ i] = Math.floor( currentParameters[ i] + offsetParameters[ i]);\r
-                                               ++i;\r
-                                       }\r
-                                       updateCss( ELM, currentParameters, targetAttributes, l);\r
-                                       onEnterFrame !== null && onEnterFrame( _updateCss);\r
-                               }\r
-                               --numFrames;\r
-                               return numFrames === 0;\r
-                       },\r
-                       destroy: function(){\r
-                               ELM = onComplete = onEnterFrame = null;\r
-                       }\r
-               }\r
-       }\r
-       \r
-       var VisualEffectClass = function( ELM){\r
-               var isHtmlElement;\r
-               \r
-               function registerAnime( _cssObject, _onComplete, _onEnterFrame, _time){\r
-                       var _numFrames = Math.floor( _time / fpms);\r
-                       startAnimation( ELM, _cssObject, _onComplete, _onEnterFrame, _numFrames);\r
-               }\r
-               function startFadeIn(){\r
-                       \r
-               }\r
-               function startFadeOut(){\r
-                       \r
-               }\r
-               function update( _x, _y, _w, _h){\r
-                       var _cssText = ELM.style.cssText;\r
-                       \r
-               }\r
-               \r
-               this.anime = registerAnime;\r
-               this.fadeIn = startFadeIn;\r
-               this.fadeOut = startFadeOut;\r
-               this.update = update;\r
-       }\r
-       \r
-       return {\r
-               createVisualEffect: function( _elm){\r
-                       return new VisualEffectClass( _elm);\r
-               },\r
-               isInstanceOfVisualEffect: function( _instance){\r
-                       return _instance instanceof VisualEffectClass;\r
-               }\r
-       }\r
-})();\r
-\r
-\r
 \r
 /*\r
  *  Google Analytics\r
index efd5da9..adb6ac0 100644 (file)
@@ -1,13 +1,15 @@
 /*\r
  * pettanR system.js\r
- *   version 0.5.9\r
+ *   version 0.5.16\r
  * \r
  * \r
  * Type\r
  * \r
+ * UA\r
+ * \r
  * Util\r
  * \r
- * UA\r
+ * CSS\r
  * \r
  * gadgetOS\r
  *   author:\r
                }\r
        };\r
 \r
+/*\r
+ * UA\r
+ * \r
+ *   detect userAgent\r
+ *   detect plug in\r
+ */\r
+       var UA = ( function(){\r
+               var ua = (function(){\r
+                               var acme = {};\r
+                               \r
+                               var n    = navigator;\r
+                               var dua  = n.userAgent;\r
+                               var dav  = n.appVersion;\r
+                               var tv   = parseFloat(dav);\r
+                               acme.isOpera  = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
+                               acme.isKhtml  = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
+                               acme.isWebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
+                               acme.isChrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
+                               acme.isGecko  = (dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, '$1$2' )) : undefined;\r
+                               var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
+                               if(index && !acme.isChrome){\r
+                                       acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
+                                       if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
+                                               acme.isSafari = 2;\r
+                                       }\r
+                               }\r
+                               if(document.all && !acme.isOpera){\r
+                                       acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
+                               }\r
+                               \r
+                               return acme;\r
+                       })(),\r
+                       isIE = navigator.userAgent.toLowerCase().indexOf( 'msie') !== -1,\r
+                       ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
+                       ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
+                       isStanderdMode = document.compatMode === 'CSS1Compat',\r
+                       ActiveX = ( function(){\r
+                               if( isIE === false || ieVersion > 8 ) return false;\r
+                               var     b = document.body,\r
+                                       c = b.className || '',\r
+                                       x,\r
+                                       ret = undefined, //pettanr.URL_PARAMS.ActiveX,\r
+                                       ns = 'pettanr-ActiveX-',\r
+                                       enabled = 'enabled',\r
+                                       disabled = 'disabled';\r
+                               if( ret !== true && ret !== false){\r
+                                       if( b.className.indexOf( ns + enabled ) !== -1 )  return true;\r
+                                       if( b.className.indexOf( ns + disabled ) !== -1 ) return false;\r
+                                       x = document.createElement( 'div' );\r
+                                       b.appendChild(x);\r
+                                       x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
+                                       ret = x.offsetHeight > 1;\r
+                                       b.removeChild(x);\r
+                               }\r
+                               b.className += [ c !== '' ? ' ' : c, ns, ret === true ? enabled : disabled ].join( '');\r
+                               return ret;\r
+                       })(),\r
+                       VML = ( function(){\r
+                               if( ActiveX === false || isIE === false || ieVersion > 8) return false;\r
+                               var globalObjectName = 'detect_activex',//Util.createGlobalUniqueName(),\r
+                                       script,\r
+                                       id = 'detectVML';\r
+                               document.write( [ '<!--[if gte vml 1]><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                               if( window[ globalObjectName ] === 1 ){\r
+                                       script = document.getElementById( id );\r
+                                       script.parentNode.removeChild( script );\r
+                                       window[ globalObjectName ] = null;\r
+                                       return true;\r
+                               }\r
+                               return false;\r
+                       })(),\r
+                       isStandAloneMode = ( function(){\r
+                               if( isIE === false) return false;\r
+                               if( VML === true) return false;\r
+                               var globalObjectName = 'detect_standalone', //Util.createGlobalUniqueName(),\r
+                                       script,\r
+                                       id = 'detectStandAlone';\r
+                               document.write( [ '<!--[if IE ', Math.floor( ieVersion ), ']><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
+                               if( window[globalObjectName] === 1){\r
+                                       script = document.getElementById( id);\r
+                                       script.parentNode.removeChild( script);\r
+                                       window[globalObjectName] = null;\r
+                                       return false;\r
+                               }\r
+                               return true;\r
+                       })();\r
+               return {\r
+                       IE:                                     ua.isIE,\r
+                       GECKO:                          ua.isGecko,\r
+                       OPERA:                          ua.isOpera,\r
+                       KHTML:                          ua.isKhtml,\r
+                       WEBKIT:                         ua.isWebKit,\r
+                       CHROME:                         ua.isChrome,\r
+                       isIE:                           isIE,\r
+                       ieVersion:                      ieVersion,\r
+                       ieRenderingVersion:     ieRenderingVersion,\r
+                       isStanderdMode:         isStanderdMode,\r
+                       ACTIVEX:            ActiveX,\r
+                       VML:                VML,\r
+                       STANDALONE:         isStandAloneMode,\r
+                       VENDER_PREFIX: ( function() {\r
+                               var ua = navigator.userAgent.toLowerCase();\r
+                               if ( ua.indexOf('opera') !== -1 ){\r
+                                       return 'O';\r
+                               } else if ( ua.indexOf('msie') !== -1 ){\r
+                                       return 'ms';\r
+                               } else if ( ua.indexOf('webkit') !== -1 ){\r
+                                       return 'webkit';\r
+                               } else if ( navigator.product === 'Gecko' ){\r
+                                       return 'Moz';\r
+                               }\r
+                               return '';\r
+                       })(),\r
+                       startVML: function(){\r
+                               delete UA.startVML;\r
+                               if( UA.VML !== true) return false;\r
+                               if (!document.namespaces["v"]) {\r
+                               document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");\r
+                           }\r
+                           document.createStyleSheet().cssText = "v\:shape,v\:image{behavior:url(#default#VML);display:block;};";\r
+                       }\r
+               }\r
+       })();\r
+\r
+\r
 /* ----------------------------------------------------\r
  * Util\r
  * \r
  *   getGrobalObjectName()\r
  * \r
  */\r
-       var Util = ( function(){\r
-               var doc  = window.document,\r
-                       body = doc.getElementsByTagName( 'body' )[ 0 ];\r
+       var Util = ( function( window, document, undefined ){\r
+               var body = document.getElementsByTagName( 'body' )[ 0 ];\r
                        \r
                var ELM_SIZE_GETTER = ( function(){\r
-                               var ret = doc.createElement( 'DIV' );\r
+                               var ret = document.createElement( 'div' );\r
                                body.appendChild( ret );\r
                                \r
-                               ret.id         = 'elmSizeGetter';\r
-                               ret.style.cssText  = 'position:absolute;left:0;top:-9999px;visibility:hidden';\r
+                               ret.id            = 'elmSizeGetter';\r
+                               ret.style.cssText = 'position:absolute;left:0;top:-9999px;visibility:hidden';\r
                                \r
                                body.removeChild( ret );\r
                                return ret;\r
                        })(),\r
                        CLEAN_TARGET_ELEMENT = 'script,style,object,applet,embed,iframe,frame,base,bgsound,frameset,listing'.split( ',' );\r
                \r
-               /* clean comment node */\r
-               cleanCommnetNode();\r
-               \r
-               /* clean noscript */\r
-               ( function(){\r
-                       var nodeNoscript = doc.getElementsByTagName( 'noscript' ),\r
-                               noscript;\r
-                       for( var i=0; i<nodeNoscript.length; ++i ){\r
-                               noscript = nodeNoscript[i];\r
-                               noscript.parentNode && noscript.parentNode.removeChild( noscript );\r
-                       };\r
-               })();\r
-       \r
-               function cleanCommnetNode( _targetElm ){\r
-                       search( _targetElm || body );\r
-                       \r
-                       function search( _elm ){\r
-                               if( !_elm ) return;\r
-                               if( _elm.nodeType === 8 ){\r
-                                       _elm.parentNode.removeChild( _elm );\r
-                                       return;\r
+               var UNIT_RATIO = ( function( elm ){\r
+                               var ret = {},\r
+                                       unit,\r
+                                       units = 'cm,mm,in,pt,pc'.split( ',' );\r
+                               \r
+                               body.appendChild( elm );\r
+                               \r
+                               for( var i=units.length; i; ){\r
+                                       unit = units[ --i ];\r
+                                       elm.style.width = 1000 + unit;\r
+                                       ret[ unit ] = elm.offsetWidth / 1000;\r
                                };\r
-                               var i, l, _children = _elm.childNodes, _array = [];\r
-                               if( _children && typeof _children.length === 'number' ){\r
-                                       // liveNode > array\r
-                                       for( i=0, l=_children.length; i<l; ++i ){\r
-                                               _array.push( _children[ i ] );\r
-                                       };\r
-                                       while( _array.length !== 0 ){\r
-                                               search( _array.shift() );\r
-                                       };\r
+                               elm.style.cssText = '';\r
+                               \r
+                               body.removeChild( elm );\r
+                               return ret;\r
+                       })( ELM_SIZE_GETTER );\r
+                       \r
+               var FONT_SIZE_RATIO = ( function( elm ){\r
+                               var ret = {},\r
+                                       size,\r
+                                       list = 'xx-large,x-large,large,larger,medium,small,smaller,x-small,xx-small'.split( ',' );\r
+                               \r
+                               body.appendChild( elm );\r
+                               elm.style.cssText = 'font-size:100px;line-height:1em;';\r
+                               elm.appendChild( document.createTextNode( 'X' ) );\r
+                               \r
+                               base = elm.offsetHeight;\r
+                               \r
+                               for( var i = list.length; i; ){\r
+                                       size = list[ --i ];\r
+                                       elm.style.fontSize = size;\r
+                                       ret[ size ] = elm.offsetHeight;// / base;\r
                                };\r
+                               \r
+                               elm.style.cssText = '';\r
+                               elm.removeChild( elm.firstChild );\r
+                               body.removeChild( elm );\r
+                               return ret;\r
+                       })( ELM_SIZE_GETTER );\r
+               \r
+               var REG_LARGE = /[A-Z]/g;\r
+               \r
+               /* clean comment node */\r
+               window.setTimeout( function(){\r
+                       Util.cleanCommnetNode();\r
+                       \r
+                       /* clean noscript */\r
+\r
+                       var noscripts = Util.copyArray( document.getElementsByTagName( 'noscript' ) ),\r
+                               ns;\r
+                       for( var i = noscripts.length; i; ){\r
+                               ns = noscripts[ --i ];\r
+                               ns.parentNode && ns.parentNode.removeChild( ns );\r
                        };\r
-               };\r
+               }, 0 );\r
                \r
                return {\r
+                       parse: function( v ){\r
+                               if( Type.isString( v ) === true ){\r
+                                       if( v === 'true' )      return true;\r
+                                       if( v === 'false' )     return false;\r
+                                       if( v === 'null' )      return null;\r
+                                       if( v === 'undefined' ) return undefined;\r
+                                       if( v === 'NaN' )       return NaN;\r
+                                       if( v === '' )          return v;\r
+                                       var _v = v.split( ' ' ).join( '' ),\r
+                                               n = _v - 0;\r
+                                       if( '' + n === _v || '' + n === '0' + _v  ) return n - 0;\r
+                               };\r
+                               return v;\r
+                       },\r
                        extend: function( baseInstance, extend ){\r
                                for( var key in extend ){\r
                                        if( Type.isUndefined( baseInstance[ key ] ) === true ){\r
                                                baseInstance[ key ] = extend[ key ];\r
                                        } else {\r
                                                alert( 'extend error' );\r
-                                       }\r
-                               }\r
+                                       };\r
+                               };\r
                                return baseInstance;\r
                        },      \r
-                       cleanCommnetNode: cleanCommnetNode,\r
+                       cleanCommnetNode: function ( _targetElm ){\r
+                               search( _targetElm || body );\r
+                               \r
+                               function search( _elm ){\r
+                                       if( !_elm ) return;\r
+                                       if( _elm.nodeType === 8 ){\r
+                                               _elm.parentNode.removeChild( _elm );\r
+                                               return;\r
+                                       };\r
+                                       if( _elm.nodeType === 1 ){\r
+                                               var _array = Util.copyArray( _elm.childNodes ); // liveNode > array\r
+                                               while( _array.length > 0 ) search( _array.shift() );\r
+                                       };\r
+                               };\r
+                       },\r
                        cleanElement: function( _targetElm ){\r
-                               var _nodes, _elm, _array, j, m;\r
-                               for( var i=0, l=CLEAN_TARGET_ELEMENT.length; i<l; ++i){\r
-                                       _nodes = _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ i]);\r
-                                       _array = [];\r
-                                       for( j=0, m = _nodes.length; j<m; ++j){\r
-                                               _array.push( _nodes[ j]);\r
-                                       }\r
-                                       for( j=0, m = _array.length; j<m; ++j){\r
-                                               _elm = _nodes[ j];\r
-                                               _elm.parentNode && _elm.parentNode.removeChild( _elm);\r
-                                       }\r
-                               }\r
-                               cleanCommnetNode( _targetElm );\r
+                               var _array, _elm, j, _css;\r
+                               for( var i = CLEAN_TARGET_ELEMENT.length; i; ){\r
+                                       _array = Util.copyArray( _targetElm.getElementsByTagName( CLEAN_TARGET_ELEMENT[ --i ] ) );\r
+                                       for( j = _array.length; j; ){\r
+                                               _elm = _nodes[ --j ];\r
+                                               _elm.parentNode && _elm.parentNode.removeChild( _elm );\r
+                                       };\r
+                               };\r
+                               Util.cleanCommnetNode( _targetElm );\r
+                               \r
                                if( UA.isIE === false ) return;\r
-                               _nodes = _targetElm.all || _targetElm.getElementsByName( '*' );\r
-                               for( i=0, l = _nodes.length; i<l; ++i){\r
-                                       _elm = _nodes[ i ];\r
-                                       _elm.style.filter = '';\r
-                                       _elm.style.behavior = '';\r
-                               }\r
+                               _nodes = _targetElm.all || _targetElm.getElementsByTagName( '*' );\r
+                               for( i = _nodes.length; i; ){\r
+                                       _elm = _nodes[ --i ];\r
+                                       _css = Util.getInlineStyle( _elm );\r
+                                       _css.filter   = null;\r
+                                       _css.behavior = null;\r
+                                       _elm.style.cssText = Util.toCssText( _css );\r
+                               };\r
+                       },\r
+                       camelize: function( cssProp ){\r
+                           var parts = cssProp.split( ' ' ).join( '' ).split( '-' ),\r
+                               l     = parts.length;\r
+                           if( l === 1 ) return parts[ 0 ];\r
+                       \r
+                           var camelized = cssProp.charAt(0) === '-'\r
+                             ? parts[ 0 ].charAt( 0 ).toUpperCase() + parts[ 0 ].substring( 1 )\r
+                             : parts[ 0 ];\r
+                       \r
+                           for( var i = 1; i < l; ++i ){\r
+                               camelized += parts[ i ].charAt( 0 ).toUpperCase() + parts[ i ].substring( 1 );\r
+                           };\r
+                           return camelized;\r
+                       },\r
+                       uncamelize: function( str ){\r
+                               return str.split( ' ' ).join( '' ).replace( REG_LARGE, '-$&' ).toLowerCase();\r
+                       },\r
+                       pxTo: function( _px, _unit ){\r
+                               return _px / ( UNIT_RATIO[ _unit ] || 1 );\r
+                       },\r
+                       toPx: function( x, _unit ){\r
+                               return x * ( UNIT_RATIO[ _unit ] || 1 );\r
+                       },\r
+                       absoluteFontSizeToPx: function( fontsize ){\r
+                               return FONT_SIZE_RATIO[ fontsize ] || 0;\r
                        },\r
                        getElementSize: function( _elm ){\r
                                if( Type.isHTMLElement( _elm ) === false ){\r
                                                if (image[key] && image[key].src === image.src) {\r
                                                        return image[key];\r
                                                };\r
-                                               if( doc.uniqueID ){ // for IE\r
+                                               if( document.uniqueID ){ // for IE\r
                                                        run = image.runtimeStyle;\r
                                                        mem = { w: run.width, h: run.height }; // keep runtimeStyle\r
                                                        run.width  = "auto"; // override\r
                                \r
                                return size;\r
                        },\r
-                       getAbsolutePath: function( path) {\r
-                               var e = document.createElement("div");\r
-                               e.innerHTML = '<a href=\"' + path + '\" />';\r
-                               return e.firstChild.href;\r
+                       getAbsolutePath: function( path ){\r
+                               var elm = document.createElement('div');\r
+                               body.appendChild( elm );\r
+                               elm.innerHTML = '<a href=\"' + path + '\" />';\r
+                               body.removeChild( elm );\r
+                               return elm.firstChild.href;\r
                        },\r
                        getAbsolutePosition: function( _elm ){\r
                                // Find the destination's position\r
                        },\r
                        pullHtmlAsTemplete: function( html ){\r
                                var elm = document.createElement( 'div' );\r
+                               body.appendChild( elm );\r
                                elm.innerHTML = html;\r
+                               body.removeChild( elm );\r
                                return elm.firstChild;\r
                        },\r
                        getElementsByClassName: function( _elm, _className, opt_tagName ){\r
-                               var _all = !opt_tagName || opt_tagName === '*',\r
-                                       _nodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*' )) : _elm.getElementsByTagName( opt_tagName ),\r
-                                       _node, _classes, ret = [];\r
-                               for( var i=0, l = _nodes.length; i<l; ++i ){\r
-                                       _node = _nodes[ i ];\r
-                                       _node.nodeType === 1 && Util.hasClassName( _node, _className ) === true && ret.push( _node );\r
-                               }\r
-                               return ret;\r
-                               \r
-                               var sp = ' ', cn,\r
-                                       _cnames = _className.replace( /\s+/g, sp ).split( sp ),\r
-                                       _nodes = Util.copyArray( _livenodes );\r
-                               \r
-                               for( var i = _cnames.length; i; ){\r
-                                       cn = _cnames[ --i ];\r
-                                       for( var j = _nodes.length; j > 0; ){\r
-                                               _node = _nodes[ --j ];\r
-                                               if( _node.nodeType !== 1 || Util.hasClassName( _node, cn ) === false ){\r
-                                                       _nodes.split( j, 1 );\r
-                                                       --j;\r
-                                               };\r
+                               var _all       = !opt_tagName || opt_tagName === '*',\r
+                                       _livenodes = _all === true ? ( _elm.all || _elm.getElementsByTagName( '*' )) : _elm.getElementsByTagName( opt_tagName ),\r
+                                       _nodes     = Util.copyArray( _livenodes );\r
+                               for( var j = 0; j < _nodes.length; ){\r
+                                       _node = _nodes[ j ];\r
+                                       if( _node.nodeType !== 1 || Util.hasClassName( _node, _className ) === false ){\r
+                                               _nodes.splice( j, 1 );\r
+                                       } else {\r
+                                               ++j;\r
                                        };\r
                                };\r
+                               return _nodes;\r
                        },\r
                        getChildIndex: function( _parent, _child ){\r
-                               var _children = _parent.getElementsByTagName( _child.tagName ),\r
-                                       l = _children.length;\r
-                               for( var i=0; i<l; ++i ){\r
-                                       if( _children[ i ] === _child ) return i;\r
+                               var _children = _parent.getElementsByTagName( _child.tagName );\r
+                               for( var i = _children.length; i; ){\r
+                                       if( _children[ --i ] === _child ) return i;\r
                                };\r
                                return -1;\r
                        },\r
                        hasClassName: function( _elm, _className ){\r
-                               return Util.getIndex( ( _elm.className || '' ).split( ' ' ), _className ) !== -1;\r
+                               var cnames  = ( _elm.className || '' ).split( ' ' ),\r
+                                       _cnames = _className.split( ' ' ),\r
+                                       cname;\r
+                               for( var i = _cnames.length; i; ){\r
+                                       cname = _cnames[ --i ];\r
+                                       if( cname === '' ) continue;\r
+                                       if( Util.getIndex( cnames, cname ) === -1 ) return false;\r
+                               };\r
+                               return true;\r
                        },\r
                        addClass: function( _elm, _className ){\r
                                if( Util.hasClassName( _elm, _className ) === false ){\r
                                        _node.parentNode && _node.parentNode.removeChild( _node);\r
                                }\r
                        },\r
-                       getIndex: function( _array, _element){\r
+                       getIndex: function( _array, _element ){\r
                                if( Array.prototype.indexof ){\r
-                                       Util.getIndex = function( _array, _element){\r
-                                               return _array.indexof( _element);\r
-                                       }\r
+                                       Util.getIndex = function( _array, _element ){\r
+                                               return _array.indexof( _element );\r
+                                       };\r
                                } else {\r
-                                       Util.getIndex = function( _array, _element){\r
-                                               for( var i=0, l = _array.length; i<l; ++i){\r
-                                                       if( _array[ i] === _element) return i;\r
-                                               }\r
-                                               return -1;                                      \r
-                                       }\r
-                               }\r
-                               return Util.getIndex( _array, _element);\r
+                                       Util.getIndex = function( _array, _element ){\r
+                                               for( var i = _array.length; i; ){\r
+                                                       if( _array[ --i ] === _element ) return i;\r
+                                               };\r
+                                               return -1;\r
+                                       };\r
+                               };\r
+                               return Util.getIndex( _array, _element );\r
                        },\r
                        copyArray: function( _array ){\r
-                               var ret = new Array( l );\r
-                               for( var i=0, l = _array.length; i<l; ++i ){\r
+                               var l = _array.length,\r
+                                       ret = new Array( l );\r
+                               for( var i=0; i<l; ++i ){\r
                                        ret[ i ] = _array[ i ];\r
                                }\r
                                return ret;\r
                         */\r
                        createGlobalUniqueName: function(){\r
                                var randomKey = null;\r
-                               while(true) {\r
+                               while( true ){\r
                                        randomKey = '_uniqueName'+(''+Math.random()).replace(/\./,'');\r
                                        if( typeof window[randomKey] === 'undefined'){\r
                                                break;\r
                                        callback( el );\r
                                };\r
                        }\r
-               }\r
-       })();\r
+               };\r
+       })( window, document );\r
 \r
 \r
-/*\r
- * UA\r
- * \r
- *   detect userAgent\r
- *   detect plug in\r
- */\r
-       var UA = ( function(){\r
-               var ua = (function(){\r
-                               var acme = {};\r
-                               \r
-                               var n    = navigator;\r
-                               var dua  = n.userAgent;\r
-                               var dav  = n.appVersion;\r
-                               var tv   = parseFloat(dav);\r
-                               acme.isOpera  = (dua.indexOf("Opera") >= 0) ? tv: undefined;\r
-                               acme.isKhtml  = (dav.indexOf("Konqueror") >= 0) ? tv : undefined;\r
-                               acme.isWebKit = parseFloat(dua.split("WebKit\/")[1]) || undefined;\r
-                               acme.isChrome = parseFloat(dua.split("Chrome\/")[1]) || undefined;\r
-                               acme.isGecko  = (dua.indexOf("Gecko\/") >= 0) ? parseFloat(dua.split("rv:")[1].replace( /^(\d*\.\d*)\.(\d*)/, '$1$2' )) : undefined;\r
-                               var index = Math.max(dav.indexOf("WebKit"), dav.indexOf("Safari"), 0);\r
-                               if(index && !acme.isChrome){\r
-                                       acme.isSafari = parseFloat(dav.split("Version/")[1]);\r
-                                       if(!acme.isSafari || parseFloat(dav.substr(index + 7)) <= 419.3){\r
-                                               acme.isSafari = 2;\r
-                                       }\r
-                               }\r
-                               if(document.all && !acme.isOpera){\r
-                                       acme.isIE = parseFloat(dav.split("MSIE ")[1]) || undefined;\r
-                               }\r
+var CSS = ( function( window, documwnt, undefined ){\r
+       var     CORON                  = ':',\r
+               EMPTY                  = '',\r
+               SEMICORON              = ';';\r
+               UNITS                  = 'px,cm,mm,in,pt,pc,em,%'.split( ',' ),\r
+               CLIP_SEPARATOR         = UA.isIE === true && UA.ieVersion < 8 ? ' ' : ',';\r
+\r
+       var SPECIAL = ( function(){\r
+               var _special = {};\r
+               if( UA.isIE === true && UA.ieVersion < 9 ){\r
+                       if( UA.ACTIVEX === true ){\r
+                               // _special.opacity    = 'ActiveXOpacity';\r
+                               _special.setFilters = function( style ){\r
+                                       var filters = ( style.filter || '' ).split( ') ' ),\r
+                                               data    = {},\r
+                                               i       = filters.length,\r
+                                               filter, names, props, prop, j, l, key, v;\r
+                                       for( ; i; ){\r
+                                               filter   = filters[ --i ].split( ' ' ).join( '' ).split( '(' );\r
+                                               if( filter.length !== 2 ) continue;\r
+                                               names    = filter[ 0 ].split( '.' ); // progid:DXImageTransform.Microsoft.Shadow(color=#666666,direction=120,strength=9)\r
+                                               props    = filter[ 1 ].split( ',' ); // \r
+                                               filter   = {};\r
+                                               for( j = 0, l = props.length; j < l; ++j ){\r
+                                                       prop = props[ j ].split( '=' );\r
+                                                       key  = prop[ 0 ].toLowerCase();\r
+                                                       v    = prop[ 1 ];\r
+                                                       filter[ key ] = v; //v.charAt( 0 ) === '#' ? v : parseInt( v );\r
+                                               };\r
+                                               data[ names[ names.length - 1 ] ] = filter;\r
+                                       };\r
+                                       \r
+                                       style.filter  = data;\r
+                                       style.opacity = data.alpha && data.alpha.opacity ? data.alpha.opacity / 100 : 1;\r
+                               };\r
+                               _special.hasLayout = function( elm ){\r
+                                       return elm.currentStyle.hasLayout;\r
+                               };\r
+                       } else {\r
+                               _special.opacity = null;\r
+                       };\r
+               } else {\r
+                       var style = document.documentElement.style;\r
+                       _special.opacity = style.opacity          !== undefined ? 'opacity' : \r
+                                                       style.MozOpacity          !== undefined ? 'MozOpacity' :\r
+                                                       style.KhtmlOpacity        !== undefined ? 'KhtmlOpacity' :\r
+                                                       style[ '-khtml-opacity' ] !== undefined ? 'KhtmlOpacity' : null;\r
+\r
+                       // if( style.backgroundPositionX === undefined ){\r
+                               _special.setBackgroundPositionXY = function( style ){\r
+                                       var bgp = ( style.backgroundPosition || '' ).split( ' ' );\r
+                                       style.backgroundPositionX = bgp[ 0 ] || 0;\r
+                                       style.backgroundPositionY = bgp[ 1 ] || 0;\r
+                               };\r
+                       // };\r
+                       if( style.clipTop === undefined && style[ 'clip-top' ] === undefined ){\r
+                               _special.setClipTopRightBottomLeft = function( style ){\r
+                                       var clip = style.clip || '';\r
+                                       if( clip.indexOf( 'rect(' ) === -1 ){\r
+                                               style.clipTop    = 0;\r
+                                               style.clipRight  = 0;\r
+                                               style.clipBottom = 0;\r
+                                               style.clipLeft   = 0;\r
+                                               return;\r
+                                       };\r
+                                       clip = clip.split( '(' )[ 1 ].split( ')' )[ 0 ].split( clip.indexOf( ',' ) !== -1 ? ',' : ' ' );\r
+                                       ret.clipTop    = clip[ 0 ];\r
+                                       ret.clipRight  = clip[ 1 ];\r
+                                       ret.clipBottom = clip[ 2 ];\r
+                                       ret.clipLeft   = clip[ 3 ];\r
+                               };\r
+                       };\r
+               };\r
                                \r
-                               return acme;\r
-                       })(),\r
-                       isIE = navigator.userAgent.toLowerCase().indexOf( 'msie') !== -1,\r
-                       ieVersion = isIE === true ? parseInt( navigator.appVersion.toLowerCase().replace( /.*msie[ ]/, '').match( /^[0-9]+/)) : 0,\r
-                       ieRenderingVersion = ieVersion === 8 ? document.documentMode : ieVersion,\r
-                       isStanderdMode = document.compatMode === 'CSS1Compat',\r
-                       ActiveX = ( function(){\r
-                               if( isIE === false || ieVersion > 8 ) return false;\r
-                               var     b = document.body,\r
-                                       c = b.className || '',\r
-                                       x,\r
-                                       ret = undefined, //pettanr.URL_PARAMS.ActiveX,\r
-                                       ns = 'pettanr-ActiveX-',\r
-                                       enabled = 'enabled',\r
-                                       disabled = 'disabled';\r
-                               if( ret !== true && ret !== false){\r
-                                       if( Util.hasClassName( b, ns + enabled) === true )  return true;\r
-                                       if( Util.hasClassName( b, ns + disabled) === true ) return false;\r
-                                       x = document.createElement( 'div' );\r
-                                       b.appendChild(x);\r
-                                       x.style.cssText = 'width:1px;height:1px;line-height:1px;filter:progid:DXImageTransform.Microsoft.Shadow()';\r
-                                       ret = x.offsetHeight > 1;\r
-                                       b.removeChild(x);\r
-                               }\r
-                               b.className += [ c !== '' ? ' ' : c, ns, ret === true ? enabled : disabled ].join( '');\r
-                               return ret;\r
-                       })(),\r
-                       VML = ( function(){\r
-                               if( ActiveX === false || isIE === false || ieVersion > 8) return false;\r
-                               var globalObjectName = Util.createGlobalUniqueName(),\r
-                                       script,\r
-                                       id = 'detectVML';\r
-                               document.write( [ '<!--[if gte vml 1]><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
-                               if( window[globalObjectName] === 1){\r
-                                       script = document.getElementById( id);\r
-                                       script.parentNode.removeChild( script);\r
-                                       window[globalObjectName] = null;\r
-                                       return true;\r
-                               }\r
-                               return false;\r
-                       })(),\r
-                       isStandAloneMode = ( function(){\r
-                               if( isIE === false) return false;\r
-                               if( VML === true) return false;\r
-                               var globalObjectName = Util.createGlobalUniqueName(),\r
-                                       script,\r
-                                       id = 'detectStandAlone';\r
-                               document.write( [ '<!--[if IE ', Math.floor( ieVersion ), ']><script id="', id, '">window', '.', globalObjectName, '=1;<\/script><![endif]-->'].join( ''));\r
-                               if( window[globalObjectName] === 1){\r
-                                       script = document.getElementById( id);\r
-                                       script.parentNode.removeChild( script);\r
-                                       window[globalObjectName] = null;\r
-                                       return false;\r
-                               }\r
-                               return true;\r
-                       })();\r
-               return {\r
-                       IE:                                     ua.isIE,\r
-                       GECKO:                          ua.isGecko,\r
-                       OPERA:                          ua.isOpera,\r
-                       KHTML:                          ua.isKhtml,\r
-                       WEBKIT:                         ua.isWebKit,\r
-                       CHROME:                         ua.isChrome,\r
-                       isIE:                           isIE,\r
-                       ieVersion:                      ieVersion,\r
-                       ieRenderingVersion:     ieRenderingVersion,\r
-                       isStanderdMode:         isStanderdMode,\r
-                       ACTIVEX:            ActiveX,\r
-                       VML:                VML,\r
-                       STANDALONE:         isStandAloneMode,\r
-                       VENDER_PREFIX: ( function() {\r
-                               var ua = navigator.userAgent.toLowerCase();\r
-                               if ( ua.indexOf('opera') !== -1 ){\r
-                                       return 'O';\r
-                               } else if ( ua.indexOf('msie') !== -1 ){\r
-                                       return 'ms';\r
-                               } else if ( ua.indexOf('webkit') !== -1 ){\r
-                                       return 'webkit';\r
-                               } else if ( navigator.product === 'Gecko' ){\r
-                                       return 'Moz';\r
-                               }\r
-                               return '';\r
-                       })(),\r
-                       startVML: function(){\r
-                               delete UA.startVML;\r
-                               if( UA.VML !== true) return false;\r
-                               if (!document.namespaces["v"]) {\r
-                               document.namespaces.add("v", "urn:schemas-microsoft-com:vml", "#default#VML");\r
-                           }\r
-                           document.createStyleSheet().cssText = "v\:shape,v\:image{behavior:url(#default#VML);display:block;};";\r
-                       }\r
+               return _special;\r
+       })();\r
+       \r
+       function cssToObject( css ){\r
+               var ret = {}, i, nv, n, v, parse = Util.parse, isNumber = Type.isNumber;\r
+               if( Type.isString( css ) === true ){\r
+                       css = css.split( ';' );\r
+                       for( i = css.length; i; ){\r
+                               nv    = css[ --i ].split( ':' ); // filter の場合, progid: がくる\r
+                               n     = nv.shift();\r
+                               if( isNumber( parse( n ) ) === true ) continue;\r
+                               v     = nv.join( '' );\r
+                               while( v.charAt( 0 ) === ' ' ) v = v.substr( 1 );\r
+                               ret[ Util.camelize( n ) ] = parse( v );\r
+                       };\r
+               } else {\r
+                       for( n in css ){\r
+                               if( Type.isNumber( parse( n ) ) === false ) ret[ n ] = parse( css[ n ] );\r
+                       };\r
+               };\r
+\r
+               if( SPECIAL.setFilters ){\r
+                       SPECIAL.setFilters( ret );\r
+               } else {\r
+                       ret.opacity = SPECIAL.opacity !== null ? ret[ SPECIAL.opacity ] : 1;\r
+               };\r
+               \r
+               SPECIAL.setBackgroundPositionXY && SPECIAL.setBackgroundPositionXY( ret );\r
+               SPECIAL.setClipTopRightBottomLeft && SPECIAL.setClipTopRightBottomLeft( ret );\r
+               \r
+               return ret;\r
+       };\r
+\r
+       var COLOR = ( function(){\r
+               var ret = {}, v, name,\r
+                       list = [\r
+                               0, 'BLACK',\r
+                               parseInt( 'FF0000', 16 ), 'RED',\r
+                               parseInt( '00FF00', 16 ), 'LIME',\r
+                               parseInt( '0000FF', 16 ), 'BLUE',\r
+                               parseInt( 'FFFF00', 16 ), 'YELLOW',\r
+                               parseInt( '00FFFF', 16 ), 'AQUA or CYAN',\r
+                               parseInt( 'FF00FF', 16 ), 'FUCHSIA or MAGENTA',\r
+                               parseInt( 'FFFFFF', 16 ), 'WHITE',\r
+                               parseInt( '008000', 16 ), 'GREEN',\r
+                               parseInt( '800080', 16 ), 'PURPLE',\r
+                               parseInt( '800000', 16 ), 'MAROON',\r
+                               parseInt( '000080', 16 ), 'NAVY',\r
+                               parseInt( '808000', 16 ), 'OLIVE',\r
+                               parseInt( '008080', 16 ), 'TEAL',\r
+                               parseInt( '808080', 16 ), 'GRAY',\r
+                               parseInt( 'C0C0C0', 16 ), 'SILVER',\r
+                               parseInt( '696969', 16 ), 'DIMGRAY',\r
+                               parseInt( '708090', 16 ), 'SLATEGRAY',\r
+                               parseInt( 'A9A9A9', 16 ), 'DARKGRAY',\r
+                               parseInt( 'DCDCDC', 16 ), 'GAINSBORO',\r
+                               parseInt( '191970', 16 ), 'MIDNIGHTBLUE',\r
+                               parseInt( '6A5ACD', 16 ), 'SLATEBLUE',\r
+                               parseInt( '0000CD', 16 ), 'MEDIUMBLUE',\r
+                               parseInt( '4169E1', 16 ), 'ROYALBLUE',\r
+                               parseInt( '1E90FF', 16 ), 'DODGERBLUE',\r
+                               parseInt( '87CEEB', 16 ), 'SKYBLUE',\r
+                               parseInt( '4682B4', 16 ), 'STEELBLUE',\r
+                               parseInt( 'ADD8E6', 16 ), 'LIGHTBLUE',\r
+                               parseInt( 'AFEEEE', 16 ), 'PALETURQUOISE',\r
+                               parseInt( '40E0D0', 16 ), 'TURQUOISE',\r
+                               parseInt( 'E0FFFF', 16 ), 'LIGHTCYAN',\r
+                               parseInt( '7FFFD4', 16 ), 'AQUAMARINE',\r
+                               parseInt( '006400', 16 ), 'DARKGREEN',\r
+                               parseInt( '2E8B57', 16 ), 'SEAGREEN',\r
+                               parseInt( '90EE90', 16 ), 'LIGHTGREEN',\r
+                               parseInt( '7FFF00', 16 ), 'CHARTREUSE',\r
+                               parseInt( 'ADFF2F', 16 ), 'GREENYELLOW',\r
+                               parseInt( '32CD32', 16 ), 'LIMEGREEN',\r
+                               parseInt( '9ACD32', 16 ), 'YELLOWGREEN',\r
+                               parseInt( '6B8E23', 16 ), 'OLIVEDRAB',\r
+                               parseInt( 'BCB76B', 16 ), 'DARKKHAKI',\r
+                               parseInt( 'EEE8AA', 16 ), 'PALEGOLDENROD',\r
+                               parseInt( 'FFFFE0', 16 ), 'LIGHTYELLOW',\r
+                               parseInt( 'FFD700', 16 ), 'GOLD',\r
+                               parseInt( 'DAA520', 16 ), 'GOLDENROD',\r
+                               parseInt( 'B8860B', 16 ), 'DARKGOLDENROD',\r
+                               parseInt( 'BC8F8F', 16 ), 'ROSYBROWN',\r
+                               parseInt( 'CD5C5C', 16 ), 'INDIANRED',\r
+                               parseInt( '8B4513', 16 ), 'SADDLEBROWN',\r
+                               parseInt( 'A0522D', 16 ), 'SIENNA',\r
+                               parseInt( 'CD853F', 16 ), 'PERU',\r
+                               parseInt( 'DEB887', 16 ), 'BURLYWOOD',\r
+                               parseInt( 'F5F5DC', 16 ), 'BEIGE',\r
+                               parseInt( 'F5DEB3', 16 ), 'WHEAT',\r
+                               parseInt( 'F4A460', 16 ), 'SANDYBROWN',\r
+                               parseInt( 'D2B48C', 16 ), 'TAN',\r
+                               parseInt( 'D2691E', 16 ), 'CHOCOLATE',\r
+                               parseInt( 'B22222', 16 ), 'FIREBRICK',\r
+                               parseInt( 'A52A2A', 16 ), 'BROWN',\r
+                               parseInt( 'FA8072', 16 ), 'SALMON',\r
+                               parseInt( 'FFA500', 16 ), 'ORANGE',\r
+                               parseInt( 'FF7F50', 16 ), 'CORAL',\r
+                               parseInt( 'FF6347', 16 ), 'TOMATO',\r
+                               parseInt( 'FF69B4', 16 ), 'HOTPINK',\r
+                               parseInt( 'FFC0CB', 16 ), 'PINK',\r
+                               parseInt( 'FF1493', 16 ), 'DEEPPINK',\r
+                               parseInt( 'DB7093', 16 ), 'PALEVIOLETRED',\r
+                               parseInt( 'EE82EE', 16 ), 'VIOLET',\r
+                               parseInt( 'DDA0DD', 16 ), 'PLUM',\r
+                               parseInt( 'DA70D6', 16 ), 'ORCHILD',\r
+                               parseInt( '9400D3', 16 ), 'DARKVIOLET',\r
+                               parseInt( '8A2BE2', 16 ), 'BLUEVIOLET',\r
+                               parseInt( '9370DB', 16 ), 'MEDIUMPURPLE',\r
+                               parseInt( 'D8BFD8', 16 ), 'THISTLE',\r
+                               parseInt( 'E6E6FA', 16 ), 'LAVENDER',\r
+                               parseInt( 'FFE4E1', 16 ), 'MISTYROSE',\r
+                               parseInt( 'FFFFF0', 16 ), 'IVORY',\r
+                               parseInt( 'FFFACD', 16 ), 'LEMONCHIFFON'\r
+                       ];\r
+               for( i=list.length; i; ){\r
+                       v    = list[ --i ];\r
+                       name = list[ --i ];\r
+                       ret[ name ] = v;\r
+               };\r
+               return ret;\r
+       })();\r
+       \r
+       var PARAMS = ( function(){\r
+               ret = {};\r
+               register( ret.percent = {},\r
+                       'marginBottom,marginLeft,marginRight,marginTop,paddingBottom,paddingLeft,paddingRight,paddingTop,fontSize,textIndent'\r
+               );\r
+               register( ret.offset = {},\r
+                       'height,width,bottom,left,right,top'\r
+               );              \r
+               register( ret.size = {},\r
+                       'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth,letterSpacing'\r
+               );\r
+               register( ret.color = {},\r
+                       'backgroundColor,borderBottomColor,borderLeftColor,borderRightColor,borderTopColor,color'\r
+               );\r
+               register( ret.region = {},\r
+                       'margin,padding,borderWidth,borderColor'\r
+               );              \r
+               register( ret.special = {},\r
+                       'clip,backgroundPosition,opacity,lineHeight,zIndex'\r
+               );\r
+               register( ret.unit = {}, 'px,cm,mm,in,pt,pc,em,%' );\r
+               \r
+               register( ret.margin = {}, 'marginBottom,marginLeft,marginRight,marginTop,paddingBottom' );\r
+               register( ret.padding = {}, 'paddingBottom,paddingLeft,paddingRight,paddingTop' );\r
+               register( ret.borderWidth = {}, 'borderBottomWidth,borderLeftWidth,borderRightWidth,borderTopWidth' );\r
+               register( ret.borderColor = {}, 'borderBottomColor,borderLeftColor,borderRightColor,borderTopColor' );\r
+               \r
+               function register( obj, params ){\r
+                       params = params.split( ',' );\r
+                       for( var i=params.length; i; ) obj[ params[ --i ] ] = true;\r
+               };\r
+               return ret;\r
+       })();\r
+       \r
+       /*\r
+        * \r
+        */\r
+       var PropertyClass = function( name, value, unit, pxPerEm ){\r
+               this.name    = name;\r
+               this.value   = value;\r
+               this.unit    = unit;\r
+               this.pxPerEm = pxPerEm; // XXpx = 1em;\r
+       };\r
+       PropertyClass.prototype = {\r
+               name:    '',\r
+               value:   0,\r
+               pxPerEm: 12, // 1em === ??px\r
+               unit:    '',\r
+               equal: function( prop ){\r
+                       if( this.unit === prop.unit ){\r
+                               return this.value === prop.value;\r
+                       };\r
+                       return Math.abs( this._toPx() - prop._toPx() ) < 1;\r
+               },\r
+               convert: function( prop ){\r
+                       var u = prop.unit, v;\r
+                       if( this.unit === u ) return;\r
+                       this.value = v = this._toPx();\r
+                       this.unit  = u;\r
+                       if( u !== px ){\r
+                               this.value = u === 'em' ? v / this.pxPerEm : Util.pxTo( v, u );\r
+                       };\r
+               },\r
+               setValue: function( v ){\r
+                       this.value = v;\r
+               },\r
+               getValue: function(){\r
+                       return this.value;\r
+               },\r
+               getOffset: function( prop ){\r
+                       return prop.value - this.value;\r
+               },\r
+               getUnit: function(){\r
+                       return this.unit;\r
+               },\r
+               getValueText: function(){\r
+                       return this.value === 0 ? '0' : this.value + this.unit;\r
+               },\r
+               clear: function(){\r
+                       var t = this, p;\r
+                       for( p in t ){\r
+                               if( t.hasOwnProperty && !t.hasOwnProperty( p ) ) continue;\r
+                               delete t[ p ];\r
+                       };\r
+               },\r
+               _toPx: function(){\r
+                       var v = this.value, u = this.unit;\r
+                       if( u === px )   return v;\r
+                       if( u === 'em' ) return v * this.pxPerEm;\r
+                       if( u === '' && this.name === 'lineHeight' ) return v * this.pxPerEm;\r
+                       return Util.toPx( v, u );\r
+               },\r
+               isValid: function( t ){\r
+                       t = t || this;\r
+                       var n = t.name,\r
+                               v = t.value,\r
+                               u = t.unit,\r
+                               z = u !== '' ? true : v === 0;\r
+                       if( PARAMS.percent[ n ] === true ) return z;\r
+                       if( PARAMS.offset[ n ] === true  ) return z;\r
+                       if( PARAMS.size[ n ] === true  )   return z && u !== '%';\r
+                       if( PARAMS.special[ n ] === true  ){\r
+                               if( n === 'lineHeight' ) return true;\r
+                               if( n === 'opacity' )    return 0 <= v && v <= 1 && u === '';\r
+                               if( n === 'zIndex'  )    return u === '';\r
+                       };\r
+                       return false;\r
+               }\r
+       };\r
+       \r
+       /**\r
+        * backgroundPosition, clip\r
+        */\r
+       var PropertyGroupClass = function( name ){\r
+               this.name  = name;\r
+               this.props = [];\r
+               for( var i = 1, l = arguments.length; i<l; ++i ){\r
+                       this.props.push( arguments[ i ] );\r
+               };\r
+       };\r
+       \r
+       /**\r
+        * margin, padding, borderWidth, borderColor\r
+        */\r
+       var FrexiblePropertyClass = function( name ){\r
+               this.name  = name;\r
+               this.props = [];\r
+               for( var i = 1, l = arguments.length; i<l; ++i ){\r
+                       this.props.push( arguments[ i ] );\r
+               };\r
+               // top, bottom, left, right, topbottom, leftright, all\r
+       };\r
+       FrexiblePropertyClass.prototype = PropertyGroupClass.prototype = {\r
+               name:    '',\r
+               equal: function( prop ){\r
+                       var ps = this.props, i = ps.length;\r
+                       for( ; i; ){\r
+                               --i;\r
+                               if( ps[ i ].equal( prop[ i ] ) === false ) return false;\r
+                       };\r
+                       return true;\r
+               },\r
+               convert: function( prop ){\r
+                       var ps = this.props, i = ps.length;\r
+                       for( ; i; ){\r
+                               --i;\r
+                               ps[ i ].convert( prop[ i ] );\r
+                       };\r
+               },\r
+               setValue: function( ary ){\r
+                       var ps = this.props, i = 0, l = ps.length;\r
+                       for( ; i<l; ++i ){\r
+                               ps[ i ].setValue( ary[ i ] );\r
+                       };\r
+               },\r
+               getValue: function(){\r
+                       var ret = [], ps = this.props, i = 0, l = ps.length;\r
+                       for( ; i<l; ++i ){\r
+                               ret.push( ps[ i ].getValue() );\r
+                       };\r
+                       return ret;\r
+               },\r
+               getOffset: function( prop ){\r
+                       var ret = [],\r
+                               ps  = this.props,\r
+                               _ps = prop.props,\r
+                               i   = 0,\r
+                               l = ps.length;\r
+                       for( ; i<l; ++i ){\r
+                               ret.push( ps[ i ].getOffset( _ps[ i ] ) );\r
+                       };\r
+                       return ret;\r
+               },\r
+               getUnit: function(){\r
+                       var ret = [], ps = this.props, i = 0, l = ps.length;\r
+                       for( ; i<l; ++i ){\r
+                               ret.push( ps[ i ].getUnit() );\r
+                       };\r
+                       return ret;\r
+               },\r
+               getValueText: function(){\r
+                       var ret = [], ps = this.props, i = 0, l = ps.length;\r
+                       for( ; i<l; ++i ){\r
+                               ret.push( ps[ i ].getValueText() );\r
+                       };                      \r
+                       if( this.name === 'clip' ){\r
+                               return 'rect(' + ret.join( CLIP_SEPARATOR ) + ')';\r
+                       };\r
+                       return ret.join( ' ' );\r
+               },\r
+               clear: function(){\r
+                       var ps = this.props, i = ps.length;\r
+                       for( ; i; ){\r
+                               ps[ --i ].clear();\r
+                       };\r
+                       delete this.name;\r
+                       delete this.props;\r
+               },\r
+               isValid: function( t ){\r
+                       t = t || this;\r
+                       var ps = t.props, i = ps.length;\r
+                       for( ; i; ){\r
+                               --i;\r
+                               if( ps[ i ].isValid() === false ) return false;\r
+                       };\r
+                       return true;\r
+               }\r
+       };\r
+\r
+       var ColorPropertyClass = function( name, r, g, b, pct ){\r
+               this.name = name;\r
+               this.r    = r;\r
+               this.g    = g;\r
+               this.b    = b;\r
+               this.pct  = pct;\r
+       };\r
+       ColorPropertyClass.prototype = {\r
+               name:    '',\r
+               equal: function( prop ){\r
+                       if( this.pct === prop.pct ){\r
+                               return this.r === prop.r && this.g === prop.g && this.b === prop.b;\r
+                       };\r
+                       var rgb  = this._toPct(),\r
+                               _rgb = prop._toPct();\r
+                       for( var i = rgb.length; i; ){\r
+                               --i;\r
+                               if( Math.abs( rgb[ i ] - _rgb[ i ] ) > 1 ) return false;\r
+                       };\r
+                       return true;\r
+               },\r
+               convert: function( prop ){\r
+                       var u = prop.pct;\r
+                       if( this.pct === u ) return;\r
+                       var x    = u === true ? 100 / 255 : 2.55;\r
+                       this.r  *= x;\r
+                       this.g  *= x;\r
+                       this.b  *= x;\r
+                       this.pct = u;\r
+               },\r
+               setValue: function( rgb ){\r
+                       this.r = rgb[ 0 ];\r
+                       this.g = rgb[ 1 ];\r
+                       this.b = rgb[ 2 ];\r
+               },\r
+               getValue: function(){\r
+                       return [ this.r, this.g, this.b ];\r
+               },\r
+               getOffset: function( prop ){\r
+                       return [ prop.r - this.r, prop.g - this.g, prop.b - this.b ];\r
+               },\r
+               getUnit: function(){\r
+                       return this.pct === true ? '%' : '';\r
+               },\r
+               getValueText: function(){\r
+                       if( this.pct === true ){\r
+                               return [ 'rgb(', this.r, '%,', this.g, '%,', this.b, '%)' ].join( '' );\r
+                       };\r
+                       var round = Math.round;\r
+                       //return [ 'rgb(', round( this.r ), ',', round( this.g ), ',', round( this.b ), ')' ].join( '' );\r
+                       \r
+                       var rgb   = '00000' + ( ( round( this.r ) << 16 ) + ( round( this.g ) << 8 ) + round( this.b ) ).toString( 16 );\r
+                       return '#' + rgb.substr( rgb.length - 6 );\r
+               },\r
+               clear: function(){\r
+                       var t = this, p;\r
+                       for( p in t ){\r
+                               if( t.hasOwnProperty && !t.hasOwnProperty( p ) ) continue;\r
+                               delete t[ p ];\r
+                       };\r
+               },\r
+               _toPct: function(){\r
+                       if( this.pct === true ) return [ this.r, this.g, this.b ];\r
+                       return [ this.r / 2.55, this.g / 2.55, this.b / 2.55 ];\r
+               },\r
+               isValid: function( t ){\r
+                       var isFinite = window.isFinite;\r
+                       if( !isFinite( this.r ) || !isFinite( this.g ) || !isFinite( this.b ) ) return false;\r
+                       if( 0 > this.r || 0 > this.g || 0 > this.b ) return false;\r
+                       if( this.pct === true ){\r
+                               return this.r <= 100 && this.g <= 100 && this.b <= 100;\r
+                       };\r
+                       return this.r <= 255 && this.g <= 255 && this.b <= 255;\r
+               }\r
+       };\r
+       \r
+       var isString       = Type.isString,\r
+               isNumber       = Type.isNumber;\r
+       var REG_UINIT      = /.*\d(\w{1,2})?/,\r
+               $1             = '$1',\r
+               px             = 'px',\r
+               REG_XXXXXX     = /^#[\da-fA-F]{6}?/,\r
+               REG_XXX        = /^#[\da-fA-F]{3}?/;\r
+       \r
+       var WrappedStyleClass = function( elm, style, pxPerEm ){\r
+               this.elm     = elm;\r
+               this.style   = style;\r
+               this.pxPerEm = this.get( 'fontSize' )._toPx();\r
+       };\r
+\r
+       WrappedStyleClass.prototype = {\r
+               get: function( p ){\r
+                       if( PARAMS.special[ p ] === true || PARAMS.region[ p ] === true ){\r
+                               if( p === 'clip' )        return this.getClip();\r
+                               if( p === 'margin' )      return this.getMarginPaddingBorder( p );\r
+                               if( p === 'padding' )     return this.getMarginPaddingBorder( p );\r
+                               if( p === 'borderWidth' ) return this.getMarginPaddingBorder( 'border', 'Width' );\r
+                               if( p === 'borderColor' ) return this.getBorderColor( 'borderColor' );\r
+                               if( p === 'backgroundPosition' ) return this.getBackgroundPosition( p );\r
+                               // opacity, zindex, lineHeight\r
+                               return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x ), this.pxPerEm );\r
+                       };\r
+                       var x = this.style[ p ], e, v, u;\r
+                       if( PARAMS.offset[ p ] === true ){\r
+                               return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+                               /*\r
+                               e = this.elm;\r
+                               if( p === 'width'  ) v = e.offsetWidth;\r
+                               if( p === 'height' ) v = e.offsetHeight;\r
+                               if( p === 'top'    ) v = e.offsetTop;\r
+                               if( p === 'bottom' ) v = e.offsetBottom;\r
+                               if( p === 'left'   ) v = e.offsetLeft;\r
+                               if( p === 'right'  ) v = e.offsetRight;\r
+                               u = this.getUnit( x, p );\r
+                               // alert( p + this.pxTo( v, u ) + u )\r
+                               return new PropertyClass( p, this.pxTo( v, u ), u, this.pxPerEm ); */\r
+                       };\r
+                       if( p === 'fontSize' ){ // xx-small 等\r
+                               v = Util.absoluteFontSizeToPx( x );\r
+                               if( v !== 0 ){\r
+                                       return new PropertyClass( p, v, px, this.pxPerEm );\r
+                               };\r
+                       };                      \r
+                       if( PARAMS.percent[ p ] === true ){\r
+                               // alert( p + ' , ' + x + ' , ' + this.getUnit( x, p ) )\r
+                               return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+                       };\r
+                       if( PARAMS.size[ p ] === true ){\r
+                               return new PropertyClass( p, this.getValue( x, p ), this.getUnit( x, p ), this.pxPerEm );\r
+                       };\r
+                       if( PARAMS.color[ p ] === true ){\r
+                               return this.getColor( x, p );\r
+                       };\r
+               },\r
+               pxTo: function( px, unit ){\r
+                       if( unit === 'em' ) return px / this.pxPerEm;\r
+                       return Util.pxTo( px, unit );\r
+               },\r
+               getValue: function( x, p ){\r
+                       if( isString( x ) === true ){\r
+                               return parseInt( x );\r
+                       } else\r
+                       if( isNumber( x ) === true ){\r
+                               return x;\r
+                       };\r
+                       return 0;\r
+               },\r
+               getUnit: function( x, p ){\r
+                       var u;\r
+                       if( isString( x ) === true ){\r
+                               u = x.replace( REG_UINIT, $1 );\r
+                               if( p === 'lineHeight' ) return u;\r
+                               if( PARAMS.unit[ u ] !== true ) return px;\r
+                               return u;\r
+                       };\r
+                       return px;\r
+               },\r
+               getColor: function( x, p ){\r
+                       var rgb = COLOR[ x.toUpperCase() ],\r
+                               pct = false,\r
+                               r   = 0,\r
+                               g   = 0,\r
+                               b   = 0;\r
+                       if( isNumber( rgb ) === true ){\r
+                               r = ( rgb & 0xff0000 ) >> 16;\r
+                               g = ( rgb & 0xff00 ) >> 8;\r
+                               b = ( rgb & 0xff );\r
+                       } else\r
+                       if( x.match( REG_XXXXXX ) ){\r
+                               r = parseInt( x.charAt( 1 ) + x.charAt( 2 ), 16 );\r
+                               g = parseInt( x.charAt( 3 ) + x.charAt( 4 ), 16 );\r
+                               b = parseInt( x.charAt( 5 ) + x.charAt( 6 ), 16 );\r
+                               //alert( x + ' g: ' + g )\r
+                       } else                  \r
+                       if( x.match( REG_XXX ) ){\r
+                               r = parseInt( x.charAt( 1 ) + x.charAt( 1 ), 16 );\r
+                               g = parseInt( x.charAt( 2 ) + x.charAt( 2 ), 16 );\r
+                               b = parseInt( x.charAt( 3 ) + x.charAt( 3 ), 16 );\r
+                       } else\r
+                       if( x.indexOf( 'rgb(' ) === 0 ){\r
+                               rgb = x.substr( 4 ).split( ',' );\r
+                               r = parseFloat( rgb[ 0 ] );\r
+                               g = parseFloat( rgb[ 1 ] );\r
+                               b = parseFloat( rgb[ 2 ] );\r
+                               if( x.indexOf( '%' ) !== -1 ){\r
+                                       pct = true;\r
+                               };\r
+                       } else {\r
+                               r = 255;\r
+                               g = 255;\r
+                               b = 255;\r
+                       };\r
+                       return new ColorPropertyClass( p, r, g, b, pct );\r
+               },\r
+               getClip: function( name ){\r
+                       // rect(...)    クリップします。<top>, <bottom> は上端からの、 <right>, <left> は左端からのオフセットで指定します。Internet Explorer 4~7 では、カンマの代わりにスペースで区切る必要があります。\r
+                       // position:absolute または position:fixed を適用した要素に対してのみ有効です。\r
+                       var top    = this.get( name + 'Top' ),\r
+                               right  = this.get( name + 'Right' ),\r
+                               bottom = this.get( name + 'Bottom' ),\r
+                               left   = this.get( name + 'Left' ),\r
+                               ret    = new PropertyGroupClass( name, top, right, bottom, left );\r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       all    = this.style[ name ].split( '(' )[ 1 ].split( ')' )[ 0 ].split( CLIP_SEPARATOR );\r
+                       return new PropertyGroupClass( name,\r
+                               new PropertyClass( name + 'Top',    all[ 0 ], px, this.pxPerEm ),\r
+                               new PropertyClass( name + 'Right',  all[ 1 ], px, this.pxPerEm ),\r
+                               new PropertyClass( name + 'Bottom', all[ 2 ], px, this.pxPerEm ),\r
+                               new PropertyClass( name + 'Left',   all[ 3 ], px, this.pxPerEm )\r
+                       );\r
+               },\r
+               getBackgroundPosition: function( name ){\r
+                       var x   = this.get( name + 'X' ),\r
+                               y   = this.get( name + 'Y' ),\r
+                               ret = new PropertyGroupClass( name, x, y ),\r
+                               xy;\r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       xy  = this.style[ name ].split( ' ' );\r
+                       return new PropertyGroupClass( name,\r
+                               new PropertyClass( name + 'X', this.getValue( xy[ 0 ] ), this.getUnit( xy[ 0 ] ), this.pxPerEm ),\r
+                               new PropertyClass( name + 'Y', this.getValue( xy[ 1 ] ), this.getUnit( xy[ 1 ] ), this.pxPerEm )\r
+                       );\r
+               },\r
+               getMarginPaddingBorder: function( name, widthOrColor ){\r
+                       widthOrColor = widthOrColor || '';\r
+                       var _class = PropertyClass;\r
+                               top    = this.get( name + 'Top' + widthOrColor ),\r
+                               right  = this.get( name + 'Right' + widthOrColor ),\r
+                               bottom = this.get( name + 'Bottom' + widthOrColor ),\r
+                               left   = this.get( name + 'Left' + widthOrColor ),\r
+                               ret    = new FrexiblePropertyClass( name, top, right, bottom, left ),\r
+                               all, x, v, u;\r
+                       \r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       all = this.style[ name + widthOrColor ].split( ' ' );\r
+                       \r
+                       for( var i=0, l=all.length; i<l; ++i ){\r
+                               x = all[ i ];\r
+                               v = this.getValue( x );\r
+                               u = this.getUnit( x );\r
+                               if( l === 4 ){\r
+                                       if( i === 0 ) top    = new _class( name + 'Top' +    widthOrColor, v, u, this.pxPerEm );\r
+                                       if( i === 1 ) right  = new _class( name + 'Right' +  widthOrColor, v, u, this.pxPerEm );\r
+                                       if( i === 2 ) bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+                                       if( i === 3 ) left   = new _class( name + 'Left' +   widthOrColor, v, u, this.pxPerEm );\r
+                               } else\r
+                               if( l === 3 ){\r
+                                       if( i === 0 ) top    = new _class( name + 'Top' + widthOrColor, v, u, this.pxPerEm );\r
+                                       if( i === 1 ){\r
+                                               right  = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+                                               left   = new _class( name + 'Left'  + widthOrColor, v, u, this.pxPerEm );\r
+                                       } else\r
+                                       if( i === 2 ) bottom = new _class( name + 'Bottom' + widthOrColor , v, u, this.pxPerEm );\r
+                               } else\r
+                               if( l === 2 ){\r
+                                       if( i === 0 ){\r
+                                               top    = new _class( name + 'Top'    + widthOrColor, v, u, this.pxPerEm );\r
+                                               bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+                                       } else\r
+                                       if( i === 1 ){\r
+                                               right  = new _class( name + 'Right' + widthOrColor, v, u, this.pxPerEm );\r
+                                               left   = new _class( name + 'Left'  + widthOrColor, v, u, this.pxPerEm );\r
+                                       };\r
+                               } else\r
+                               if( l === 1 ){\r
+                                       top    = new _class( name + 'Top'    + widthOrColor, v, u, this.pxPerEm );\r
+                                       bottom = new _class( name + 'Bottom' + widthOrColor, v, u, this.pxPerEm );\r
+                                       right  = new _class( name + 'Right'  + widthOrColor, v, u, this.pxPerEm );\r
+                                       left   = new _class( name + 'Left'   + widthOrColor, v, u, this.pxPerEm );\r
+                               };\r
+                       };\r
+                       return new FrexiblePropertyClass( name, top, right, bottom, left );\r
+               },\r
+               getBorderColor: function( name ){\r
+                       var getColor = this.getColor;\r
+                               top      = this.get( name + 'TopColor' ),\r
+                               right    = this.get( name + 'RightColor' ),\r
+                               bottom   = this.get( name + 'BottomColor' ),\r
+                               left     = this.get( name + 'LeftColor' ),\r
+                               ret      = new FrexiblePropertyClass( name, top, right, bottom, left ),\r
+                               all, x;\r
+                       \r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       all = this.style[ name ].split( ' ' );\r
+                       \r
+                       for( var i=0, l=all.length; i<l; ++i ){\r
+                               x = all[ i ];\r
+                               if( l === 4 ){\r
+                                       if( i === 0 ) top    = getColor( x, name + 'Top' );\r
+                                       if( i === 1 ) right  = getColor( x, name + 'Right' );\r
+                                       if( i === 2 ) bottom = getColor( x, name + 'Bottom' );\r
+                                       if( i === 3 ) left   = getColor( x, name + 'Left' );\r
+                               } else\r
+                               if( l === 3 ){\r
+                                       if( i === 0 ) top    = getColor( x, name + 'Top' );\r
+                                       if( i === 1 ){\r
+                                               right  = getColor( x, name + 'Right' );\r
+                                               left   = getColor( x, name + 'Left' );\r
+                                       } else\r
+                                       if( i === 2 ) bottom = getColor( x, name + 'Bottom' );\r
+                               } else\r
+                               if( l === 2 ){\r
+                                       if( i === 0 ){\r
+                                               top    = getColor( x, name + 'Top' );\r
+                                               bottom = getColor( x, name + 'Bottom' );\r
+                                       } else\r
+                                       if( i === 1 ){\r
+                                               right  = getColor( x, name + 'Right' );\r
+                                               left   = getColor( x, name + 'Left' );\r
+                                       };\r
+                               } else\r
+                               if( l === 1 ){\r
+                                       top    = getColor( x, name + 'Top' );\r
+                                       bottom = getColor( x, name + 'Bottom' );\r
+                                       right  = getColor( x, name + 'Right' );\r
+                                       left   = getColor( x, name + 'Left' );\r
+                               };\r
+                       };\r
+                       return new FrexiblePropertyClass( name, top, right, bottom, left );\r
+               },\r
+               clear: function(){\r
+                       var t = this, p;\r
+                       for( p in t ){\r
+                               if( t.hasOwnProperty && !t.hasOwnProperty( p ) ) continue;\r
+                               delete t[ p ];\r
+                       };\r
                }\r
-       })();\r
-\r
+       };\r
+       function camelizeHash( obj ){\r
+               var p, _p;\r
+               for( p in obj ){\r
+                       _p = Util.camelize( p );\r
+                       if( _p === p ) continue;\r
+                       obj[ _p ] = obj[ _p ] || obj[ p ];\r
+                       delete obj[ p ];\r
+               };\r
+       };\r
+       \r
+       return {\r
+               getWrappedStyle: function( elm, opt_css ){\r
+                       opt_css && camelizeHash( opt_css );\r
+                       return new WrappedStyleClass( elm, opt_css || CSS.getComputedStyle( elm ) );\r
+               },\r
+               getInlineStyle: function( _elm ){\r
+                       return cssToObject( _elm.style.cssText );\r
+               },\r
+               getComputedStyle: function( elm ){\r
+                       /* if( window.getComputedStyle ){\r
+                       CSS.getComputedStyle = function( elm ){\r
+                               return cssToObject( window.getComputedStyle( elm, '' ) );\r
+                       };\r
+                       } else */\r
+                   if( document.defaultView && document.defaultView.getComputedStyle ){\r
+                       CSS.getComputedStyle = function( elm ){\r
+                               var obj = document.defaultView.getComputedStyle( elm, '' );\r
+                               return cssToObject( obj.cssText || obj );\r
+                       };\r
+                   } else {\r
+                       CSS.getComputedStyle = function( elm ){\r
+                               return cssToObject( elm.currentStyle );\r
+                       };\r
+                   };\r
+                   return CSS.getComputedStyle( elm );\r
+               },\r
+               toCssText: function( _css ){\r
+                       var ret = [], v;\r
+                       for( var p in _css ){\r
+                               if( PARAMS.margin[ p ] === true && _css.margin ) continue;\r
+                               if( PARAMS.padding[ p ] === true && _css.padding ) continue;\r
+                               if( PARAMS.borderWidth[ p ] === true && _css.borderWidth ) continue;\r
+                               if( PARAMS.borderColor[ p ] === true && _css.borderColor ) continue;\r
+                               v = _css[ p ];\r
+                               v && ret.push( [ Util.uncamelize( p ), v ].join( ':' ) );\r
+                       };\r
+                       return ret.join( ';' );\r
+               }\r
+       };\r
+       \r
+})( window, document );\r
 \r
 \r
 /* ----------------------------------------------------\r
  * \r
  */    \r
 \r
-( function( window, undefined ){\r
+( function( window, document, undefined ){\r
        \r
        var doc            = window.document;\r
        var body           = doc.getElementsByTagName( 'body' )[ 0 ]; //( doc.compatMode || '' ) !== 'CSS1Compat' ? doc.body : doc.documentElement;// \r
@@ -1436,31 +2303,31 @@ var File = ( function(){
                        var _data = FILE_CONTROLER.getFileData( _file ),\r
                                _type = _data.type,\r
                                _className = '';\r
-                       if( _type === Const.FILE.TYPE.FOLDER){\r
+                       if( _type === Const.FILE.TYPE.FOLDER ){\r
                                _className = 'folder';\r
                        } else\r
-                       if( _type === Const.FILE.TYPE.IMAGE){\r
+                       if( _type === Const.FILE.TYPE.IMAGE ){\r
                                \r
                        } else\r
-                       if( _type === Const.FILE.TYPE.TEXT){\r
+                       if( _type === Const.FILE.TYPE.TEXT ){\r
                                \r
                        } else\r
-                       if( _type === Const.FILE.TYPE.HTML){\r
+                       if( _type === Const.FILE.TYPE.HTML ){\r
                                \r
                        } else\r
-                       if( _type === Const.FILE.TYPE.CSV){\r
+                       if( _type === Const.FILE.TYPE.CSV ){\r
                                \r
                        } else\r
-                       if( _type === Const.FILE.TYPE.JSON){\r
+                       if( _type === Const.FILE.TYPE.JSON ){\r
                                \r
                        } else\r
-                       if( _type === Const.FILE.TYPE.XML){\r
+                       if( _type === Const.FILE.TYPE.XML ){\r
                                \r
-                       }\r
+                       };\r
                        return {\r
                                image:          null,\r
                                className:      ' file-type-' + _className\r
-                       }\r
+                       };\r
                };\r
                this.getSummary = function( _file ){\r
                        var _data = FILE_CONTROLER.getFileData( _file ),\r
@@ -1516,7 +2383,6 @@ var File = ( function(){
                                }\r
                                for( var key in src ){\r
                                        if( Util.getIndex( protects, key ) === -1 ){\r
-                                               //alert( key )\r
                                                ret[ key ] = clone( src[ key ]);\r
                                        }\r
                                }\r
@@ -1668,6 +2534,7 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
        this.init = function(){\r
                phase = 1;\r
                self  = this;\r
+               appClass === Page.appClass && Page.show();\r
                self.onInit();\r
                phase = 2;\r
        };\r
@@ -1737,6 +2604,9 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                self.rootElement = null;\r
                \r
                Application.shutdown( self, isOverlay );\r
+               \r
+               appClass === Page.appClass && Page.hide();\r
+               \r
                self = appClass = uiList = null;\r
                \r
                phase = 6;\r
@@ -1756,6 +2626,9 @@ var AbstractApplication = function( displayName, appClass, isOverlay ){
                _class.prototype = new AbstractBasicPane();\r
                return new _class( _options );\r
        };\r
+       this.createDHTML = function( _elm ){\r
+               return DHTML.create( self, _elm );\r
+       };\r
        this.fetchCSS = function( _url, opt_onload, opt_onerror ){\r
                if( phase === 1 ){\r
                        ++fetchResource;\r
@@ -2034,33 +2907,34 @@ var Application = ( function(){
        })();\r
 \r
        var Page = ( function(){\r
-               var pageNodes = [];\r
-\r
-               var ref;\r
-               \r
-               var ignoreTagList = [ 'script', 'noscript' ];\r
+               var pageNodes = [],\r
+                       appClass, ref,\r
+                       ignoreTagList = [ 'script', 'noscript', 'style' ];\r
                \r
                var MemoryClass = function( node ){\r
-                       var _nodeType = node.nodeType;\r
-                       if( _nodeType === 1 && Util.getIndex( ignoreTagList, node.tagName.toLowerCase() ) === -1 ){\r
-                               this.node    = node;\r
-                               this.type    = _nodeType;\r
-                               this.display = node.style.display;\r
-                       } else\r
-                       if( _nodeType === 3 ){\r
-                               if( node.data.replace( /\s/g, '' ).length !== 0 ){\r
-                                       this.node    = node;\r
-                                       this.type    = _nodeType;\r
-                                       this.before  = pageNodes.length === 0 ? null : pageNodes[ pageNodes.length - 1 ].node;\r
-                               } else {\r
-                                       body.removeChild( node );\r
-                               }\r
-                       } else {\r
-                               // body.removeChild( node );\r
-                               return false;\r
-                       };\r
+                       this.node = node;\r
                };\r
                MemoryClass.prototype = {\r
+                       init: function(){\r
+                               var node      = this.node,\r
+                                       _nodeType = node.nodeType;\r
+                               if( _nodeType === 1 && Util.getIndex( ignoreTagList, node.tagName.toLowerCase() ) === -1 ){\r
+                                       this.type    = _nodeType;\r
+                                       this.display = node.style.display;\r
+                               } else\r
+                               if( _nodeType === 3 ){\r
+                                       if( node.data.replace( /\s/g, '' ).length !== 0 ){\r
+                                               this.type    = _nodeType;\r
+                                               this.before  = pageNodes.length === 0 ? null : pageNodes[ pageNodes.length - 1 ].node;\r
+                                       } else {\r
+                                               body.removeChild( node );\r
+                                               return false;\r
+                                       }\r
+                               } else {\r
+                                       // body.removeChild( node );\r
+                                       return false;\r
+                               };\r
+                       },\r
                        show: function(){\r
                                if( this.type === 1 ){\r
                                        if( this.display ){\r
@@ -2077,6 +2951,9 @@ var Application = ( function(){
                                };\r
                        },\r
                        hide: function(){\r
+                               if( !this.node.parentNode ){\r
+                                       return;\r
+                               };\r
                                if( this.type === 1 ){\r
                                        this.node.style.display = 'none';\r
                                } else {\r
@@ -2091,46 +2968,50 @@ var Application = ( function(){
                                        _mem;\r
                                for( var i = 0, l = _children.length; i<l; ++i ){\r
                                        _mem = new MemoryClass( _children[ i ] );\r
-                                       _mem.node && pageNodes.push( _mem );\r
+                                       _mem.init() !== false && pageNodes.push( _mem );\r
                                };\r
                                if( pageNodes.length !== 0 ){\r
-                                       ref = Application.register( function(){\r
-                                               var self     = this,\r
-                                                       winW     = 0,\r
-                                                       winH     = 0,\r
-                                                       tailList = [],\r
-                                                       elmContainer, elmHeader;\r
-                                               \r
-                                               this.bgColor     = '#ffffff';\r
-                                               this.MIN_WIDTH   = 320;\r
-                                               this.MIN_HEIGHT  = 320;\r
-                                               this.onInit = function(){\r
-                                                       for( var i=0, l = pageNodes.length; i < l; ++i ){\r
-                                                               pageNodes[ i ].show();\r
-                                                       };\r
-                                                       KeyEvent.add( self, Const.KEY.EVENT.KEY_DOWN, ref.shutdown, 27 ); // 27.esc\r
-                                               };\r
-                                               this.onOpen = function( _w, _h ){\r
-                       \r
-                                               };\r
-                                               this.onPaneResize = function( _w, _h ){\r
+                                       if( Type.isFunction( gOS.PageApplicationClass ) === true ){\r
+                                               Page.appClass = gOS.PageApplicationClass;\r
+                                               Page.appClass.bgColor    = Page.appClass.bgColor    || '#ffffff';\r
+                                               Page.appClass.MIN_WIDTH  = Page.appClass.MIN_WIDTH  || 240;\r
+                                               Page.appClass.MIN_HEIGHT = Page.appClass.MIN_HEIGHT || 240;\r
+                                       } else {\r
+                                               Page.appClass = function(){\r
+                                                       var self     = this;\r
                                                        \r
-                                               };\r
-                                               this.onClose = function(){\r
-                                                       for( var i=0, l = pageNodes.length; i < l; ++i ){\r
-                                                               pageNodes[ i ].hide();\r
+                                                       this.bgColor      = '#ffffff';\r
+                                                       this.MIN_WIDTH    = 200;\r
+                                                       this.MIN_HEIGHT   = 200;\r
+                                                       this.onInit       = function(){};\r
+                                                       this.onOpen       = function( _w, _h ){\r
+                                                               KeyEvent.add( self, Const.KEY.EVENT.KEY_DOWN, ref.shutdown, 27 ); // 27.esc\r
                                                        };\r
+                                                       this.onPaneResize = function( _w, _h ){};\r
+                                                       this.onClose      = function(){};\r
                                                };\r
-                                       }, false, true, doc.title, 'page', null, '#999999' );\r
+                                       };\r
+                                       ref = Application.register( Page.appClass, false, true, document.title, 'page', null, Page.appClass.tailColor || '#999999' );\r
                                };\r
                                delete Page.onReady;\r
                        },\r
+                       show: function(){\r
+                               for( var i = pageNodes.length; i; ){\r
+                                       pageNodes[ --i ].show();\r
+                               };\r
+                       },\r
+                       hide: function(){\r
+                               for( var i = pageNodes.length; i; ){\r
+                                       pageNodes[ --i ].hide();\r
+                               };                              \r
+                       },\r
                        boot: function(){\r
                                ref && ref.boot();\r
                        },\r
                        registered: function(){\r
                                return !!ref;\r
-                       }\r
+                       },\r
+                       appClass: null\r
                }\r
        })();\r
 \r
@@ -2143,7 +3024,7 @@ var Application = ( function(){
  * \r
  *  clientX\r
  *  ウインドウ座標とは、現在のブラウザのウインドウの、ドキュメントを表示している部分の左上原点とした座標である。\r
- *  問題は、ウインドウは、必ずしもドキュメント全体を表示するとは限らない。スクロールと呼ばれるUIによって、ドキュメントの一部だけを表示しているかもしれない。
+ *  問題は、ウインドウは、必ずしもドキュメント全体を表示するとは限らない。スクロールと呼ばれるUIによって、ドキュメントの一部だけを表示しているかもしれない。\r
  */\r
        var XBrowserEvent = ( function(){\r
                var wrappedHandlerClass,\r
@@ -2178,10 +3059,10 @@ var Application = ( function(){
                                this.screenX       = e.screenX;\r
                                this.screenY       = e.screenY;\r
                                \r
+                               this.keyCode       = e.keyCode;\r
                                this.altKey        = e.altKey;\r
                                this.ctrlKey       = e.ctrlKey;\r
                                this.shiftKey      = e.shiftKey;\r
-                               this.charCode      = e.keyCode;\r
                                \r
                                this.wheelDelta    = e.wheelDelta;\r
                                \r
@@ -2364,55 +3245,61 @@ var Application = ( function(){
        };\r
 \r
 var ReadyEvent = ( function(){\r
-       var timer  = null,\r
-               script = null,\r
-               ticketReady,\r
+       var ticketReady,\r
                ticketLoad;\r
 \r
-       function detect(){\r
+       function webkitDetect(){\r
                var state = document.readyState;\r
                if( state === 'loaded' || state === 'complete' ){\r
-                       timer && window.clearInterval( timer );\r
+                       SystemTimer.remove( SUPER_USER_KEY, webkitDetect );\r
                        timer = null;\r
                        onReady();\r
-               }\r
-       }\r
+               };\r
+       };\r
        function ieDetect(){\r
-               if( this.readyState === 'loaded' || this.readyState === 'complete' ){\r
+               if( this.readyState === 'complete' ){ // this.readyState === 'loaded' || \r
                        this.onreadystatechange = new Function();\r
                        this.onreadystatechange = null;\r
-                       this.parentNode.removeChild( this );\r
-                       script = null;\r
+                       AsyncCall.remove( SUPER_USER_KEY, ieScroll );\r
                        onReady();\r
-               }\r
-       }\r
-       \r
+               };\r
+       };\r
+       function ieScroll(){\r
+               try {\r
+                       document.documentElement.doScroll( 'left' );\r
+               } catch( e ){\r
+                       AsyncCall.add( SUPER_USER_KEY, ieScroll );\r
+                       return;\r
+               };\r
+               // no errors, fire\r
+               document.onreadystatechange = new Function();\r
+               document.onreadystatechange = null;\r
+               onReady();              \r
+       };\r
+               \r
        function onReady(){\r
+               ticketReady && ticketReady.destroy();\r
+               ticketLoad  && ticketLoad.destroy();\r
+               ticketReady = ticketLoad = null;\r
                Page.onReady();\r
                if( Page.registered() === true ){\r
                        Page.boot();\r
                } else {\r
                        Home.boot();\r
-               }\r
-               ticketReady && ticketReady.destroy();\r
-               ticketLoad  && ticketLoad.destroy();\r
-               ticketReady = ticketLoad = null;\r
-       }\r
+               };\r
+       };\r
        \r
        // Apple WebKit (Safari, OmniWeb, ...)\r
        if( doc.readyState && !!UA.WEBKIT ){\r
-               timer = window.setInterval( detect, 50 );\r
-       } else\r
-       if( document.readyState && UA.isIE && UA.ieVersion < 9 ){\r
-               document.write('<script type="text/javascript" defer="defer" id="ieDOMContentLoaded" src="' +\r
-                       ( ( window.location.protocol === 'https:' ) ? '://0' : 'javascript:void(0)' ) +\r
-                       '"><\/script>');\r
-               script = document.getElementById( 'ieDOMContentLoaded' );\r
-               script.onreadystatechange = ieDetect;\r
+               SystemTimer.add( SUPER_USER_KEY, webkitDetect, 50 );\r
+       /* } else\r
+               if( document.readyState && UA.isIE && UA.ieVersion < 9 ){\r
+               ieScroll();\r
+               document.onreadystatechange = ieDetect; */\r
        } else {\r
-               ticketReady = new EventTicketClass( doc, 'DOMContentLoaded', onReady );\r
-               ticketLoad  = new EventTicketClass( doc, 'load', onReady );\r
-       }\r
+               ticketReady = new EventTicketClass( document, 'DOMContentLoaded', onReady );\r
+               ticketLoad  = new EventTicketClass( window, 'load', onReady );\r
+       };\r
 })();\r
 \r
 \r
@@ -2492,7 +3379,7 @@ var ResizeEvent = ( function(){
 \r
 /* =====================================================\r
  *  MouseEvent\r
- * 
+ * \r
  */\r
        var MouseEvent = ( function(){\r
                var CLICK_OFFSET   = 2 * 2;             \r
@@ -2727,8 +3614,8 @@ var ResizeEvent = ( function(){
  */\r
 var KeyEvent = ( function(){\r
        var EVENT_LIST_MAP = [],\r
-               LOCK_UP      = [],\r
-               LOCK_DOWN    = [],\r
+               LOCK_UP        = [],\r
+               LOCK_DOWN      = [],\r
                application    = null,\r
                currentList    = null;\r
 \r
@@ -2747,12 +3634,13 @@ var KeyEvent = ( function(){
        function onKeyChange( e ){\r
                var cancel         = false,\r
                        type           = e.type,\r
-                       key            = e.keyCode || e.charCode || e.which,\r
+                       key            = e.keyCode, // || e.which,\r
                        shift          = Type.isBoolean( e.shiftKey ) === true ? e.shiftKey : ( e.modifiers & Event.SHIFT_MASK ),\r
                        ctrl           = Type.isBoolean( e.ctrlKey  ) === true ? e.ctrlKey  : ( e.modifiers & Event.CONTROL_MASK ),\r
                        lock           = type === 'keyup' ? LOCK_UP : LOCK_DOWN;\r
+                       \r
                // block chattering\r
-               if( Util.getIndex( lock, key ) !== -1 ) return false;\r
+               if( Util.getIndex( lock, key ) !== -1 ) return;\r
                lock.push( key );\r
                AsyncCall.add( SUPER_USER_KEY, unlock, [ lock, key ] );\r
                \r
@@ -2764,7 +3652,6 @@ var KeyEvent = ( function(){
                };\r
                for( var i=currentList.length, t; t = currentList[ --i ]; ){\r
                        if( Type.isFunction( t[ type ] ) === true && t.keyCode === key && ( t.shift === undefined || t.shift === shift ) && ( t.ctrl === undefined || t.ctrl === ctrl )){\r
-                               \r
                                AsyncCall.add( t.apiuser, t[ type ], e );\r
                                cancel = true;\r
                        };\r
@@ -2776,7 +3663,7 @@ var KeyEvent = ( function(){
        \r
        if( UA.isIE === true && UA.ieRenderingVersion < 9 ){\r
                keyPress = function( e ){\r
-                       var key = e.charCode;\r
+                       var key = e.keyCode;\r
                        if( key === 13 || key === 27 ){\r
                                e.type = 'keydown';\r
                                return onKeyChange( e );\r
@@ -2869,11 +3756,12 @@ var KeyEvent = ( function(){
                /*\r
                 * currentListener\r
                 *  currrentApplication ( overlay Application ) or\r
-                *  superuser ( UI )
+                *  superuser ( UI )\r
                 */\r
                updateCurrentListener: function( _apiuser ){\r
                        application = _apiuser;\r
-                       currentList = EVENT_LIST_MAP[ _apiuser.getUID() ] || [];\r
+                       var _uid    = _apiuser.getUID();\r
+                       currentList = EVENT_LIST_MAP[ _uid ] || ( EVENT_LIST_MAP[ _uid ] = [] );\r
                        \r
                        var _ticket,\r
                                _down = false,\r
@@ -2884,7 +3772,7 @@ var KeyEvent = ( function(){
                                if( _down && _up ) break;\r
                        }\r
                        if( _down === true ){\r
-                               keydownTicket = new EventTicketClass( doc, 'keydown', onKeyChange );\r
+                               keydownTicket = new EventTicketClass( document, 'keydown', onKeyChange );\r
                                keypressTicket = keyPress !== null ? new EventTicketClass( doc, 'keypress', keyPress ) : null;\r
                        } else {\r
                                keydownTicket && keydownTicket.destroy();\r
@@ -2892,14 +3780,14 @@ var KeyEvent = ( function(){
                                keydownTicket = keypressTicket = null;\r
                        }\r
                        if( _up === true ){\r
-                               keyupTicket   = new EventTicketClass( doc, 'keyup', onKeyChange );\r
+                               keyupTicket   = new EventTicketClass( document, 'keyup', onKeyChange );\r
                        } else {\r
                                keyupTicket && keyupTicket.destroy();\r
                                keyupTicket = null;\r
                        }\r
                        \r
                        if( _down === true || _up === true ){\r
-                               focusTicket   = new EventTicketClass( doc, 'mouseenter', window.focus );\r
+                               focusTicket   = new EventTicketClass( document, 'mouseenter', window.focus );\r
                        } else {\r
                                focusTicket && focusTicket.destroy();\r
                                focusTicket = null;\r
@@ -2916,7 +3804,7 @@ var KeyEvent = ( function(){
 \r
 /**\r
  * \r
- * http://thudjs.tumblr.com/post/637855087/stylesheet-onload-or-lack-thereof
+ * http://thudjs.tumblr.com/post/637855087/stylesheet-onload-or-lack-thereof\r
  */\r
 \r
 var Css = ( function(){\r
@@ -3081,7 +3969,7 @@ var Css = ( function(){
 \r
 \r
 /* ----------------------------------------\r
- * 
+ * \r
  */\r
 \r
 var Overlay = ( function(){\r
@@ -3201,6 +4089,7 @@ var UI = ( function(){
                windowH     = 0;\r
 \r
        var CLASSNAME_COMBOBOX_OPTION = 'combobox-option',\r
+               CLASSNAME_COMBOBOX_OPTION_CURRENT = CLASSNAME_COMBOBOX_OPTION + ' combobox-option-current',\r
                ELM_A_ORIGIN = ( function(){\r
                        var ret = document.createElement( 'a' );\r
                        ret.href = '#';\r
@@ -3252,8 +4141,8 @@ var UI = ( function(){
                        focus = true;\r
                        start( apiuser, uiGroup, instance );\r
                        elmA.style.display = 'none';\r
-                       elmValue.appendChild( ELM_INPUT_TEXT );\r
                        \r
+                       elmValue.appendChild( ELM_INPUT_TEXT );\r
                        ELM_INPUT_TEXT.value = value;\r
                        ELM_INPUT_TEXT.focus();\r
                        ELM_INPUT_TEXT.select();\r
@@ -3291,6 +4180,7 @@ var UI = ( function(){
                                elmValue.removeChild( ELM_INPUT_TEXT );\r
                        }\r
                        MouseEvent.remove( apiuser, elmWrapper );\r
+                       \r
                        apiuser = uiGroup = elmWrapper = elmValue = elmA = onUpdate = validater = instance = null;\r
                };\r
                instance.value( value );\r
@@ -3341,52 +4231,6 @@ var UI = ( function(){
                };\r
        };\r
 \r
-       var FileInputClass = function( apiuser, uiGroup, elmWrapper, onUpdate, validater, elmFileInput ){\r
-               var elmFilePath = Util.getElementsByClassName( elmWrapper, 'file-path' )[ 0 ],\r
-                       focus       = false,\r
-                       visible     = true,\r
-                       enabled     = true,\r
-                       index       = GROUP_ID ? itemList[ GROUP_ID ].length : -1,\r
-                       value,\r
-                       instance;\r
-               elmFileInput = elmWrapper.getElementsByTagName('input')[0] || elmFileInput || document.createElement( 'input');\r
-               elmFileInput.type = 'file';\r
-               elmFileInput.style.visivility = 'hidden';\r
-\r
-               elmWrapper.onclick = onClick;\r
-               elmFileInput.onchange = onChange;\r
-               \r
-               function onChange(){\r
-                       elmFilePath.innerHTML = elmFileInput.value;\r
-               }\r
-               return {\r
-                       init: function(){\r
-                               instance = this;\r
-                               delete this.init;\r
-                       },\r
-                       focus: function( e ){\r
-                               focus = true;\r
-                               start( apiuser, uiGroup, instance );\r
-                               elmFileInput.click();\r
-                               return false;\r
-                       },\r
-                       blur: function( keep ){\r
-                               focus = false;\r
-                       },\r
-                       enabled: function(){\r
-                               return enabled;\r
-                       },\r
-                       visible: function( _visible ){\r
-                               if( Type.isBoolean( _visible ) === true ){\r
-                                       elmWrapper.style.display = _visible ? '' : 'none';\r
-                                       visible = _visible;\r
-                               };\r
-                               return visible;\r
-                       },\r
-                       index : index\r
-               }\r
-       }\r
-\r
        var ComboBoxClass = function( apiuser, uiGroup, elmWrapper, onUpdate ){\r
                var elmBox     = Util.getElementsByClassName( elmWrapper, 'combobox' )[ 0 ],\r
                        elmA       = ELM_COMBOBOX.cloneNode( true ),\r
@@ -3450,26 +4294,24 @@ var UI = ( function(){
                };\r
                this.createOption = function( _displayValue, _value, _isSelected ){\r
                        var option = null,\r
-                               _option,\r
-                               _index;\r
-                       _value = _value || _displayValue;\r
-                       for( var i = 0, l = optionList.length; i < l; ++i ){\r
-                               _option = optionList[ i ];\r
+                               _option, i;\r
+                       _value      = _value || _displayValue;\r
+                       _isSelected = !!_isSelected;\r
+                       for( i = optionList.length; i; ){\r
+                               _option = optionList[ --i ];\r
                                if( _value === _option.value ){\r
                                        option = _option;\r
-                                       _index = i;\r
-                               } else {\r
-                                       _option.current = _option.value === _value;\r
-                               }\r
-                       }\r
-                       if( option === null ){\r
-                               option = new OptionClass( instance, _displayValue, _value, _isSelected );\r
-                               _index = optionList.length;\r
-                               optionList.push( option );\r
-                       }\r
+                                       break;\r
+                               };\r
+                       };\r
                        if( _isSelected === true ){\r
+                               index = optionList.length;\r
                                elmValue.data = _displayValue;\r
-                       }\r
+                       };                      \r
+                       if( option === null ){\r
+                               option = new OptionDataClass( _displayValue, _value, _isSelected );\r
+                               optionList.push( option );\r
+                       };\r
                };\r
                this.destroy = function(){\r
                        instance.blur();\r
@@ -3479,9 +4321,9 @@ var UI = ( function(){
                };\r
                MouseEvent.add( apiuser, elmWrapper, 'click', instance.focus );\r
        };\r
-       var OptionClass = function( combobox, displayValue, value, isCurrent ){\r
+       var OptionDataClass = function( displayValue, value, isCurrent ){\r
                this.displayValue = displayValue;\r
-               this.value        = value = value || displayValue;\r
+               this.value        = value || displayValue;\r
                this.current      = isCurrent;\r
                displayValue = value = null;\r
        };\r
@@ -3499,27 +4341,31 @@ var UI = ( function(){
                                return ret;\r
                        })();\r
 \r
-               var OptionClass = function( apiuser, option ){\r
-                       this.elm  = ELM_OPTION_ORIGIN.cloneNode( true );\r
-                       this.data = option;\r
-                       this.current = function( _current ){\r
-                               this.elm.className = CLASSNAME_COMBOBOX_OPTION;\r
-                               option.current = _current;\r
-                               currentOption  = this;\r
-                       };\r
-                       this.destroy = function(){\r
-                               MouseEvent.remove( apiuser, this.elm );\r
-                               apiuser = option = null;\r
+               var OptionClass = function( option ){\r
+                       this.elm     = ELM_OPTION_ORIGIN.cloneNode( true );\r
+                       this.data    = option;\r
+                       this.init();\r
+               };\r
+               OptionClass.prototype = {\r
+                       init: function(){\r
+                               ELM_OPTION_WRAPPER.appendChild( this.elm );\r
+                               this.elm.firstChild.data = this.data.displayValue;\r
+                               this.current( this.data.current );\r
+                               MouseEvent.add( SUPER_USER_KEY, this.elm, 'mousedown', onOptionSelect );// onclick では 選択ボックス 隠すように body に設定した onmouseup が先に動いてしまう!\r
+                       },\r
+                       current: function( _current ){\r
+                               this.elm.className = _current === true ? CLASSNAME_COMBOBOX_OPTION_CURRENT : CLASSNAME_COMBOBOX_OPTION;\r
+                               this.data.current  = _current;\r
+                               currentOption      = _current === true ? this : currentOption;\r
+                       },\r
+                       destroy: function(){\r
+                               MouseEvent.remove( SUPER_USER_KEY, this.elm );\r
+                               Util.removeAllChildren( this.elm );\r
                                ELM_OPTION_WRAPPER.removeChild( this.elm );\r
                                delete this.elm;\r
                                delete this.data;\r
-                       };\r
-                       \r
-                       ELM_OPTION_WRAPPER.appendChild( this.elm );\r
-                       this.elm.firstChild.data = option.displayValue;\r
-                       this.current( option.current );\r
-                       MouseEvent.add( SUPER_USER_KEY, this.elm, 'mousedown', onOptionSelect );// onclick では 選択ボックス 隠すように body に設定した onmouseup が先に動いてしまう!\r
-               }\r
+                       }\r
+               };\r
                \r
                function onOptionSelect( e ){\r
                        for( var i = 0, l = OPTION_LIST.length, _option; i < l; ++i){\r
@@ -3530,7 +4376,7 @@ var UI = ( function(){
                                        break;\r
                                };\r
                        };\r
-                       return false;                   \r
+                       return false;\r
                };\r
                \r
                var OPTION_LIST     = [],\r
@@ -3570,7 +4416,7 @@ var UI = ( function(){
                };\r
                function change( e ){\r
                        var l   = OPTION_LIST.length,\r
-                               i   = currentIndex + e.keyCode === 40 ? 1 : -1;\r
+                               i   = currentIndex + ( e.keyCode === 40 ? -1 : 1 );\r
                        if( currentCombobox === null || l < 2 ) return;\r
                        i = i < 0 ?\r
                                        l - 1 :\r
@@ -3588,9 +4434,9 @@ var UI = ( function(){
                                elm             = _combobox.elm;\r
                                \r
                                for( var i = 0, l = _optionList.length; i<l; ++i ){\r
-                                       OPTION_LIST.unshift( new OptionClass( _apiuser, _optionList[ i ] ) );\r
+                                       OPTION_LIST.unshift( new OptionClass( _optionList[ i ] ) );\r
                                };\r
-                               MouseEvent.add( SUPER_USER_KEY, doc, 'mouseup', bodyMouseupHandler );\r
+                               MouseEvent.add( SUPER_USER_KEY, document, 'mouseup', bodyMouseupHandler );\r
                                KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, change, 38 );\r
                                KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, change, 40 );\r
                                //KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onEnter, 13 );\r
@@ -3600,6 +4446,8 @@ var UI = ( function(){
                                \r
                                updateCurrrentOption( _combobox.value(), false );\r
                                updateWrapperPosition();\r
+                               \r
+                               SystemTimer.add( SUPER_USER_KEY, updateWrapperPosition, 500 );\r
                        },\r
                        hide: function( _combobox ){\r
                                if( currentCombobox !== _combobox || currentCombobox === null ) return;\r
@@ -3617,6 +4465,8 @@ var UI = ( function(){
                                //KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onEnter );\r
                                //KeyEvent.updateCurrentListener( apiuser );\r
                                \r
+                               SystemTimer.remove( SUPER_USER_KEY, updateWrapperPosition, 500 );\r
+                               \r
                                apiuser         = null;\r
                                currentCombobox = null;\r
                                currentOption   = null;\r
@@ -3641,10 +4491,10 @@ var UI = ( function(){
        var UIGroupClass = function( apiuser ){\r
                var self        = this,\r
                        itemList    = [],\r
-                       currentItem = null,\r
                        windowW, windowH;\r
 \r
                this.focus = function( _value ){\r
+                       /*\r
                        if( _value === true ){\r
                                if( currentItem ){\r
                                        start( apiuser, self, currentItem );\r
@@ -3656,8 +4506,9 @@ var UI = ( function(){
                        if( _value === false ){\r
                                finish( apiuser, self, currentItem );\r
                        } else\r
+                       */\r
                        if( _value && Util.getIndex( itemList, _value ) !== -1 ){\r
-                               currentItem = _value;\r
+                               // currentItem = _value;\r
                                currentList = itemList;\r
                        };\r
                        return currentUi === self; \r
@@ -3704,28 +4555,35 @@ var UI = ( function(){
                        var _item;\r
                        while( _item = itemList.shift() ){\r
                                _item.destroy();\r
-                       }\r
+                       };\r
+                       if( currentUi === this ){\r
+                               currentItem = null;\r
+                               currentUi   = null;\r
+                               currentUser = null;\r
+                               currentList = null;\r
+                       };\r
+                       apiuser = self = null;\r
                };\r
        };\r
        \r
        function start( _apiuser, _uigroup, _item ){\r
                if( currentItem !== _item ){\r
+                       currentUi !== _uigroup && currentUi && currentUi.blur();\r
+                       \r
                        currentItem !== null && currentItem.blur();\r
                        \r
-                       if( currentUser !== _apiuser ) {\r
-                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
-                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
-                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown,  9 );\r
-                               KeyEvent.updateCurrentListener( SUPER_USER_KEY );\r
-                       };\r
-                       if( currentUi !== _uigroup ){\r
-                               currentUi && currentUi.blur();\r
-                       };\r
                        currentUser = _apiuser;\r
                        currentUi   = _uigroup;\r
                        currentItem = _item;\r
                        \r
                        _uigroup.focus( _item );\r
+                       \r
+                       // if( currentUser !== _apiuser ) {\r
+                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
+                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
+                               KeyEvent.add( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown,  9 );\r
+                               KeyEvent.updateCurrentListener( SUPER_USER_KEY );\r
+                       // };\r
                };\r
        }\r
        function finish( _apiuser, _uigroup, _item ){\r
@@ -3735,6 +4593,7 @@ var UI = ( function(){
                        currentUser = null;\r
                        currentUi   = null;\r
                        currentItem = null;\r
+                       currentList = null;\r
                        \r
                        KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 13 );\r
                        KeyEvent.remove( SUPER_USER_KEY, Const.KEY.EVENT.KEY_DOWN, onKeyDown, 27 );\r
@@ -3745,7 +4604,7 @@ var UI = ( function(){
 \r
        function onKeyDown( e ){\r
                if( currentItem === null ) return true;\r
-               var keyCode = e.keyCode || e.charCode,\r
+               var keyCode = e.keyCode,\r
                        _index  = Util.getIndex( currentList, currentItem );\r
                if( keyCode === 13 || keyCode === 27 || keyCode === 9 || keyCode === 18 || e.altKey === true ){ // 13.return 27.esc 9.tab 18.alt\r
                        keyCode === 9  && tabShift( _index, e.shiftKey === true ? -1 : 1 );\r
@@ -3844,7 +4703,7 @@ var Finder = ( function(){
                                        '<a href="#" class="finder-icon-console-editor-apps"></a>',\r
                                        '<a href="#" class="finder-icon-console-viewer-apps"></a>',\r
                                '</div>',\r
-                       '</div>',\r
+                       '</div>'\r
                ] ).join( '' );\r
        })();\r
 \r
@@ -3861,7 +4720,7 @@ var Finder = ( function(){
                                        '<div class="finder-action-switch button">action</div>',\r
                                '</div>',\r
                                '<div class="finder-body"></div>',\r
-                       '</div>',\r
+                       '</div>'\r
                ].join( '' ) ),\r
                ICON_HEIGHT                     = Util.getElementSize( ELM_ORIGIN_FINDER_ICON ).height,\r
                ICON_CLASSNAME                  = 'finder-icon-thumbnail',\r
@@ -4213,8 +5072,205 @@ var Finder = ( function(){
 })();\r
 \r
 \r
+/*\r
+ * -- len, %\r
+ * marginBottom, marginLeft, marginRight, marginTop, margin\r
+ * padding, paddingBottom, paddingLeft, paddingRight, paddingTop\r
+ * fontSize, textIndent\r
+ * height, width\r
+ * bottom, left, right, top                    (len, %)\r
+ *\r
+ * -- len\r
+ * borderBottomWidth, borderLeftWidth, borderRightWidth, borderTopWidth, borderWidth,\r
+ * letterSpacing\r
+ *\r
+ * -- color\r
+ * backgroundColor\r
+ * borderBottomColor, borderLeftColor, borderRightColor, borderTopColor, borderColor\r
+ * color\r
+ *\r
+ * -- special\r
+ * clip                        rect(0px, 40px, 40px, 0px);\r
+ * backgroundPosition  (len, %)\r
+ * opacity\r
+ * lineHeight          (len, %, num)\r
+ * zIndex                      ( order )\r
+ */\r
+\r
+var DHTML = ( function(){\r
+       \r
+       var ANIMATION_TICKET_ARRAY = [],\r
+               fpms                   = 50,\r
+               round                  = Math.round,\r
+               cround                 = function ( v ){ return round( v * 100 ) / 100 };\r
+       \r
+       function startAnimation( _elm, _cssObject, _onComplete, _onEnterFrame, _numFrames ){\r
+               var _ticket, i = ANIMATION_TICKET_ARRAY.length;\r
+               for( ; i; ){\r
+                       _ticket = ANIMATION_TICKET_ARRAY[ --i ];\r
+                       if( _ticket.elm === _elm ){\r
+                               return;\r
+                       };\r
+               };\r
+               \r
+               var _currentValues     = [],\r
+                       _offsetValues      = [],\r
+                       _endValues         = [],\r
+                       _targetProperties  = [],\r
+                       _units             = [];\r
+               var target, current,\r
+                       inlineStyle    = CSS.getInlineStyle( _elm ),\r
+                       currentStyle   = CSS.getWrappedStyle( _elm ),\r
+                       targetStyle    = CSS.getWrappedStyle( _elm, _cssObject );\r
+                       targetStyle.pxPerEm = currentStyle.get( 'fontSize' )._toPx();\r
+               for( var p in _cssObject ){\r
+                       p       = Util.camelize( p );\r
+                       target  = targetStyle.get( p );\r
+                       current = currentStyle.get( p );\r
+\r
+                       if( target.isValid() === false || current.isValid() === false || current.equal( target ) !== false ){\r
+                               target.clear();\r
+                               current.clear();\r
+                               continue;\r
+                       };\r
+                       \r
+                       current.convert( target );\r
+                       // alert( current.getValue() + ' , ' + target.getValue() )\r
+                       _currentValues.push( current.getValue() );\r
+                       _offsetValues.push( current.getOffset( target ) );\r
+                       _endValues.push( target.getValue() );\r
+                       _targetProperties.push( p );\r
+                       _units.push( target.getUnit() );\r
+\r
+                       // IE has trouble with opacity if it does not have layout\r
+                       // Force it by setting the zoom level                   \r
+                       if( p === 'opacity' && SPECIAL.hasLayout ){\r
+                               if( SPECIAL.hasLayout( _elm ) === false ) inlineStyle.zoom = 1;\r
+                               inlineStyle.filter = current.getValueText();\r
+                       } else {\r
+                               inlineStyle[ p ]   = current.getValueText();\r
+                       };\r
+                       \r
+                       target.clear();\r
+                       current.clear();\r
+               };\r
+               \r
+               var i, _cssTextArray = [];\r
+               for( i = 0; i < _numFrames; ++i ){\r
+                       if( i < _numFrames - 1 ){\r
+                               tickValue( _currentValues, _offsetValues, _numFrames );\r
+                               createCssText( _currentValues, _targetProperties, targetStyle, inlineStyle, _cssTextArray );\r
+                       } else {\r
+                               createCssText( _endValues, _targetProperties, targetStyle, inlineStyle, _cssTextArray );\r
+                       };\r
+               };\r
+               \r
+               ANIMATION_TICKET_ARRAY.push( new AnimationTaskClass(\r
+                       _elm, _cssTextArray,\r
+                       Type.isFunction( _onComplete ) === true   ? _onComplete   : null,\r
+                       Type.isFunction( _onEnterFrame ) === true ? _onEnterFrame : null,\r
+                       _numFrames\r
+               ) );\r
+               \r
+               currentStyle.clear();\r
+               targetStyle.clear();            \r
+               SystemTimer.add( SUPER_USER_KEY, onEnterFrame, 1000 / fpms );\r
+       };\r
+       \r
+       function tickValue( current, offset, numFrames ){\r
+               if( Type.isArray( current ) === true ){\r
+                       var ret, i = current.length;\r
+                       for( ; i; ){\r
+                               --i;\r
+                               ret = tickValue( current[ i ], offset[ i ], numFrames );\r
+                               if( Type.isNumber( ret ) === true ) current[ i ] = ret;\r
+                       };\r
+               } else {\r
+                       return current + offset / numFrames;\r
+               };\r
+       };\r
+       function createCssText( update, props, style, inline, cssTextArray ){\r
+               var prop;\r
+               for( var i = props.length; i; ){\r
+                       prop = style.get( props[ --i ] );\r
+                       prop.setValue( update[ i ] );\r
+                       inline[ Util.uncamelize( prop.name ) ] = prop.getValueText();\r
+                       //if( prop.name === 'backgroundColor' ) alert( prop.getValueText() + '|' + update[ i ].join( ',') )\r
+                       prop.clear();\r
+               };\r
+               cssTextArray.push( CSS.toCssText( inline ) );\r
+       };\r
+       \r
+       function onEnterFrame(){\r
+               var _ticket, l,\r
+                       i = 0;\r
+               while( i < ANIMATION_TICKET_ARRAY.length ){\r
+                       _ticket = ANIMATION_TICKET_ARRAY[ i ];\r
+                       l       = _ticket.cssTexts.length;\r
+                       _ticket.elm.style.cssText = _ticket.cssTexts.shift();\r
+                       if( l === 1 ){\r
+                               _ticket.onComplete && _ticket.onComplete();\r
+                               delete _ticket.elm;\r
+                               delete _ticket.cssTexts;\r
+                               delete _ticket.onComplete;\r
+                               delete _ticket.onEnterFrame;\r
+                               delete _ticket.numFrame;\r
+                               ANIMATION_TICKET_ARRAY.splice( i, 1 );\r
+                       } else {\r
+                               _ticket.onEnterFrame && _ticket.onEnterFrame( l / _ticket.numFrame );\r
+                               ++i;\r
+                       };\r
+               };\r
+               if( ANIMATION_TICKET_ARRAY.length === 0 ){\r
+                       SystemTimer.remove( SUPER_USER_KEY, onEnterFrame );\r
+               };\r
+       };\r
+       \r
+       var AnimationTaskClass = function( elm, cssTexts, onEnterFrame, onComplete, numFrame ){\r
+               this.elm          = elm;\r
+               this.cssTexts     = cssTexts;\r
+               this.onEnterFrame = onEnterFrame;\r
+               this.onComplete   = onComplete;\r
+               this.numFrame     = numFrame;\r
+       };\r
+       \r
+       var VisualEffectClass = function( elm ){\r
+               var isHtmlElement;\r
+               \r
+               function registerAnime( _cssObject, _onComplete, _onEnterFrame, _time ){\r
+                       var _numFrames = Math.floor( _time / fpms );\r
+                       startAnimation( elm, _cssObject, _onComplete, _onEnterFrame, _numFrames );\r
+               };\r
+               function startFadeIn(){\r
+                       \r
+               };\r
+               function startFadeOut(){\r
+                       \r
+               };\r
+               function update( _x, _y, _w, _h ){\r
+                       var _cssText = elm.style.cssText;\r
+                       \r
+               };\r
+               \r
+               this.anime   = registerAnime;\r
+               this.fadeIn  = startFadeIn;\r
+               this.fadeOut = startFadeOut;\r
+               this.update  = update;\r
+       };\r
+       \r
+       return {\r
+               create: function( application, _elm ){\r
+                       return new VisualEffectClass( _elm );\r
+               },\r
+               isInstanceOfVisualEffect: function( _instance){\r
+                       return _instance instanceof VisualEffectClass;\r
+               }\r
+       }\r
+})();\r
+\r
+\r
 /* --------------------------------------------\r
- * 
+ * \r
  */\r
 \r
        Application.onCurrentApplicationChange( SUPER_USER_KEY );\r
@@ -4232,11 +5288,11 @@ var Finder = ( function(){
 \r
 \r
 /* ---------------------------------------------\r
- * broadcast to global
+ * broadcast to global\r
  */\r
        window.gOS = {};\r
        \r
        gOS.registerApplication = Application.register;\r
        gOS.registerDriver      = File.registerDriver;\r
        \r
-})( window );\r
+})( window, document );\r
index 80bb581..24fdbdc 100644 (file)
@@ -1,26 +1,26 @@
 [\r
     {\r
         "author": {\r
-            "id": 1\r
-            "name": "no name"\r
+            "id": 2\r
+            "name": "Tester"\r
         }, \r
-        "author_id": 1\r
+        "author_id": 2\r
         "border": 1, \r
         "comic": {\r
-            "author_id": 1\r
+            "author_id": 2\r
             "created_at": "2012-01-06T07:39:55Z", \r
             "editable": 0, \r
             "height": 200, \r
-            "id": 1, \r
-            "title": "コミック作るテスト", \r
+            "id": 11\r
+            "title": "コミック作るテスト  1", \r
             "updated_at": "2012-01-06T07:39:55Z", \r
             "visible": 0, \r
             "width": 400\r
         },\r
-        "comic_id": 1, \r
+        "comic_id": 11\r
         "created_at": "2012-01-06T07:40:25Z",\r
         "height": 200, \r
-        "id": 1, \r
+        "id": 101\r
         "resource_picture_id": 1, \r
         "t": 1, \r
         "updated_at": "2012-01-06T07:40:25Z", \r
         "y": 0, \r
         "z": 1\r
     }, \r
-    {\r
-        "author": {\r
-            "id": 1, \r
-            "name": "no name"\r
-        }, \r
+    {  \r
         "author_id": 1, \r
         "border": 1, \r
         "comic": {\r
-            "author_id": 1\r
+            "author_id": 2\r
             "created_at": "2012-01-06T07:39:55Z", \r
             "editable": 0, \r
             "height": 200, \r
-            "id": 1, \r
-            "title": "コミック作るテスト", \r
+            "id": 12\r
+            "title": "コミック作るテスト  2", \r
             "updated_at": "2012-01-06T07:39:55Z", \r
             "visible": 0, \r
             "width": 400\r
-        }, \r
-        "comic_id": 1, \r
+        },\r
+        "comic_id": 12\r
         "created_at": "2012-01-10T08:23:36Z", \r
         "height": 300, \r
-        "id": 2, \r
+        "id": 102, \r
         "resource_picture_id": 1, \r
         "t": 2, \r
         "updated_at": "2012-01-10T08:23:36Z", \r
         "z": 0\r
     }, \r
     {\r
-        "author": {\r
-            "id": 1, \r
-            "name": "Tester"\r
-        }, \r
         "author_id": 1, \r
-        "border": 1, \r
-        "comic": {\r
-            "author_id": 1, \r
-            "created_at": "2012-01-06T07:39:55Z", \r
-            "editable": 0, \r
-            "height": 200, \r
-            "id": 1, \r
-            "title": "コミック作るテスト", \r
-            "updated_at": "2012-01-06T07:39:55Z", \r
-            "visible": 0, \r
-            "width": 400\r
-        }, \r
-        "comic_id": 1, \r
+        "border": 1,  \r
+        "comic_id": 11, \r
         "created_at": "2012-01-10T08:25:41Z", \r
         "height": 300, \r
-        "id": 3, \r
+        "id": 103, \r
         "resource_picture_id": 1, \r
         "t": 3, \r
         "updated_at": "2012-01-10T08:25:41Z", \r
         "z": 0\r
     }, \r
     {\r
-        "author": {\r
-            "id": 1, \r
-            "name": "Tester"\r
-        }, \r
         "author_id": 1, \r
         "border": 1, \r
         "comic": {\r
-            "author_id": 1\r
+            "author_id": 2\r
             "created_at": "2012-01-06T07:39:55Z", \r
             "editable": 0, \r
             "height": 200, \r
-            "id": 2\r
-            "title": "コミック作るテスト,2", \r
+            "id": 13\r
+            "title": "コミック作るテスト 3", \r
             "updated_at": "2012-01-06T07:39:55Z", \r
             "visible": 0, \r
             "width": 400\r
         }, \r
-        "comic_id": 2, \r
+        "comic_id": 13,\r
         "created_at": "2012-01-10T08:25:41Z", \r
         "height": 300, \r
-        "id": 3\r
+        "id": 104\r
         "resource_picture_id": 1, \r
         "t": 3, \r
         "updated_at": "2012-01-10T08:25:41Z", \r
index 393e9a8..c61ab59 100644 (file)
@@ -1,7 +1,7 @@
 @charset "UTF-8";\r
 \r
 /* pettanR peta.apps.css\r
- *   version 0.5.5\r
+ *   version 0.5.12\r
  * \r
  *   author:\r
  *     itozyun\r
                                                        width:                  180px;\r
                                                        text-align:             center;\r
                                                }\r
+\r
+               /*  Panel Console\r
+               --------------------------------------------------------------------------------------*/                        \r
+               #panel-console-publish-value {\r
+                                                       width:                  180px;\r
+                                                       text-align:             center; \r
+               }\r
+                                               \r
                /*  Comic Reader\r
                --------------------------------------------------------------------------------------*/\r
                #comic-reader-wrapper {}\r
                                }\r
                                .pettanr-ActiveX-enabled .comic-reader-shadow {\r
                                        filter:                         alpha(opacity=50);\r
-                                       -ms-filter:                     alpha(opacity=50);                      \r
+                                       -ms-filter:                     "alpha(opacity=50)";\r
                                }\r
                                .pettanr-ActiveX-disabled .comic-reader-shadow {\r
                                        background:                     transparent url( "../images/black_50pct.png" ) repeat 0 0;\r
index e637d5c..a803d7a 100644 (file)
@@ -1,7 +1,7 @@
 @charset "UTF-8";\r
 \r
 /* pettanR system.css\r
- *   version 0.5.5\r
+ *   version 0.5.11\r
  * \r
  *   author:\r
  *     itozyun
                                text-decoration:        none;\r
                                *cursor:                        pointer;\r
                        }\r
-                       .current-option a,\r
-                       .current-option a:link,\r
-                       .current-option a:visited {\r
+                       a.combobox-option-current,\r
+                       a.combobox-option-current:link,\r
+                       a.combobox-option-current:visited {\r
                                color:                          #e6e6ef;\r
                                background-color:       #66f;\r
                                text-decoration:        none;\r
index 536a201..da3a1e3 100644 (file)
@@ -170,9 +170,9 @@ x.style.cssText = 'width:1px;height:1px;<ins>line-height:1px;</ins>filter:progid
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
        <script type="text/javascript">\r
                var container = document.getElementById( 'box-container'),\r
index e2466b9..7b86ced 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
 <!-- InstanceEndEditable -->\r
 </body>\r
index 4779623..35470fa 100644 (file)
@@ -183,15 +183,17 @@ button.onclick = function(){
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shCore.js"></script>\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shBrushJScript.js"></script>\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shBrushXml.js"></script>\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shBrushCss.js"></script>\r
-       <link type="text/css" rel="stylesheet" href="../lib/syntaxhighlighter/styles/shCoreDefault.css">\r
+       <script type="text/javascript" src="../javascripts/jquery-1.6.2.min.js"></script>\r
+       <script type="text/javascript" src="../javascripts/system.js"></script>\r
+       <script type="text/javascript" src="../javascripts/peta.common.js"></script>\r
        <script type="text/javascript">\r
                SyntaxHighlighter.all();\r
                \r
index db39a7b..95b2f1d 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shCore.js"></script>\r
        <script type="text/javascript" src="../lib/syntaxhighlighter/scripts/shBrushJScript.js"></script>\r
index 5f95398..7116835 100644 (file)
@@ -44,7 +44,7 @@
                                        <dl class="dl-table clearfix">\r
                                                <dt><a href="comic-html-structure.html">html structure</a></dt>\r
                                                <dd>マンガ状コンテンツを表示するための html + css の調査.</dd>\r
-                                               <dt><a href="dynamic-comic-html.html">dynamic html</a></dt>\r
+                                               <dt><a href="dynamic-comic-html.html">動的コミック</a></dt>\r
                                                <dd>js によるコミック html の動的書き出しテスト.</dd>\r
                                                <dt><a href="vertical-center.html">vertical center</a></dt>\r
                                                <dd>上下中央配置テスト</dd>\r
                                        </dl>\r
                                        <h3>javascript テスト</h3>\r
                                        <dl class="dl-table clearfix">\r
-                                               <dt><a href="activex.html">detect activex</a></dt>\r
+                                               <dt><a href="dhtml-anime.html">DHTML アニメ</a></dt>\r
+                                               <dd>system.js のDHTML アニメーション.</dd>\r
+                                               <dt><a href="activex.html">detect ActiveX</a></dt>\r
                                                <dd>ActiveX が有効か?を js で調べる.</dd>\r
                                                <dt><a href="type.html">[js] Type</a></dt>\r
                                                <dd>javascript の型判定のテスト</dd>\r
                                                <dt><a href="pointingdevice.html">[js]ポインティングデバイス</a></dt>\r
                                                <dd>[js]ポインティングデバイス</dd>\r
+                                               <dt><a href="computed-style.html">[js]computedStyle</a></dt>\r
+                                               <dd>[js]computedStyle</dd>\r
                                        </dl>\r
                                </div>\r
                                <!-- InstanceEndEditable -->\r
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" --><!-- InstanceEndEditable -->\r
 </body>\r
 <!-- InstanceEnd --></html>\r
index 45e1cbf..9b591b3 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
                <script type="text/javascript" src="../javascripts/system.js"></script>\r
                <script type="text/javascript">\r
index 3dfc012..a314016 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" --><!-- InstanceEndEditable -->\r
 </body>\r
 <!-- InstanceEnd --></html>\r
index 10e001d..33614bb 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
                <script type="text/javascript">\r
 /**\r
index ae50bf2..da2b4e8 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" -->\r
                <script type="text/javascript">\r
 \r
index 6aeb2f7..9c3b44d 100644 (file)
             <div id="copyright">Copyright (c) 2011-2012 pettanR team, some rights reserved.</div>\r
         </div><!-- #EndLibraryItem -->\r
        </div>\r
-               <script type="text/javascript">\r
-                       var has_server_support = false;\r
-               </script>\r
+       <script type="text/javascript">\r
+               var has_server_support = false;\r
+       </script>\r
 <!-- InstanceBeginEditable name="script" --><!-- InstanceEndEditable -->\r
 </body>\r
 <!-- InstanceEnd --></html>\r
index 538ed9a..d2b3641 100644 (file)
@@ -9,7 +9,6 @@
                <title>Login User Console | pettanR</title>
                <link rel="stylesheet" type="text/css" href="stylesheets/peta.common.css">
                <link rel="stylesheet" type="text/css" href="stylesheets/system.css">
-               <link rel="stylesheet" type="text/css" href="stylesheets/peta.apps.css">
        </head>
        <body>
                <script type="text/javascript" src="javascripts/jquery-1.6.2.min.js"></script>