OSDN Git Service

add libs.js & finder_path_shadow.gif
authoritozyun <itozyun@gmail.com>
Sat, 12 Jan 2013 05:53:18 +0000 (14:53 +0900)
committeritozyun <itozyun@gmail.com>
Sat, 12 Jan 2013 05:53:18 +0000 (14:53 +0900)
app/assets/images/finder_path_shadow.gif [new file with mode: 0644]
app/assets/javascripts/libs.js [new file with mode: 0644]

diff --git a/app/assets/images/finder_path_shadow.gif b/app/assets/images/finder_path_shadow.gif
new file mode 100644 (file)
index 0000000..3c2f688
Binary files /dev/null and b/app/assets/images/finder_path_shadow.gif differ
diff --git a/app/assets/javascripts/libs.js b/app/assets/javascripts/libs.js
new file mode 100644 (file)
index 0000000..a21377f
--- /dev/null
@@ -0,0 +1,1749 @@
+/*\r
+ * pettanR libs.js\r
+ *   version 0.5.39\r
+ * \r
+ * \r
+ * Type\r
+ * \r
+ * UA\r
+ * \r
+ * Util\r
+ * \r
+ * CSS\r
+ * \r
+ */\r
+\r
+if( !( 'console' in window ) ){\r
+       window[ 'console' ] = { log : function(){} };\r
+}\r
+\r
+var getFunctionName = function( f ){\r
+    return 'name' in f\r
+        ? f.name\r
+        : (''+f).replace(/^\s*function\s*([^\(]*)[\S\s]+$/im, '$1');\r
+};\r
+\r
+/*\r
+ * http://d.hatena.ne.jp/hir90/20080620/1213987444\r
+ */\r
+       String.prototype.repeat = function( num){\r
+               var str = "" + this;\r
+               var ans = '';\r
+               if( num < 0) return 'error';\r
+               while( num){\r
+                       if( num&1) ans += str;\r
+                       num = num>>1;\r
+                       str += str;\r
+               }\r
+               return ans;\r
+       }\r
+\r
+/*\r
+ * http://pettanr.sourceforge.jp/test/type.html\r
+ */\r
+       var Type = {\r
+               isObject : function(v) {\r
+                       return v !== null && typeof v === 'object';\r
+               },\r
+               isFunction : function(v) {\r
+                       return typeof v === 'function';\r
+               },\r
+               isArray : function(v) {\r
+                       return Object.prototype.toString.call(v) === '[object Array]';\r
+               },\r
+               isBoolean : function(v) {\r
+                       return typeof v === 'boolean';\r
+               },\r
+               isString : function(v) {\r
+                       return typeof v === 'string';\r
+               },\r
+               isNumber : function(v) {\r
+                       return typeof v === 'number';\r
+               },\r
+               isFinite : function(v){\r
+                       return Type.isNumber(v) === true && isFinite(v);\r
+               },\r
+               isHTMLElement : function(v){\r
+                       if( 'HTMLElement' in window ){\r
+                               Type.isHTMLElement = function(v){\r
+                                       return v instanceof HTMLElement;\r
+                               };\r
+                       } else {\r
+                               Type.isHTMLElement = function(v) {\r
+                                       if( Type.isObject(v) === false ){\r
+                                               return false;\r
+                                       };\r
+                                       var r;\r
+                                       if(v && v.nodeType === 1 ){\r
+                                               try {\r
+                                                       r = v.cloneNode(false);\r
+                                               } catch(n){\r
+                                                       return false;\r
+                                               };\r
+                                               if(r === v) return false;\r
+                                               try{\r
+                                                       r.nodeType = 9;\r
+                                                       return r.nodeType === 1;\r
+                                               } catch(n){};\r
+                                               return true;\r
+                                       };\r
+                                       return false;\r
+                               };\r
+                       };\r
+                       return Type.isHTMLElement(v);\r
+               },\r
+               /*\r
+               isElementCollection : function(v) {\r
+                       return (Object.prototype.toString.call(v) === "[object HTMLCollection]");\r
+               },\r
+               */\r
+               isNull : function(v) {\r
+                       return v === null;\r
+               },\r
+               isUndefined : function(v) {\r
+                       return typeof v === 'undefined';\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
+ *   extend( baseInstance, extend)\r
+ *   cleanCommentNode()\r
+ *   cleanElement()\r
+ *   getElementSize( _elm)\r
+ *   getImageSize()\r
+ *   getAbsolutePath()\r
+ *   getGrobalObjectName()\r
+ * \r
+ */\r
+       var Util = ( function( window, document, undefined ){\r
+               var body = document.getElementsByTagName( 'body' )[ 0 ];\r
+                       \r
+               var ELM_SIZE_GETTER = ( function(){\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
+                               \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
+               var UNIT_RATIO = ( function( elm ){\r
+                               var ret = {},\r
+                                       unit,\r
+                                       units = 'cm,mm,in,pt,pc'.split( ',' ),\r
+                                       i     = units.length;\r
+                               \r
+                               body.appendChild( elm );\r
+                               \r
+                               for( ; i; ){\r
+                                       unit = units[ --i ];\r
+                                       elm.style.width = 1000 + unit;\r
+                                       ret[ unit ] = elm.offsetWidth / 1000;\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, base,\r
+                                       list = 'xx-large,x-large,large,larger,medium,small,smaller,x-small,xx-small'.split( ',' ),\r
+                                       i = list.length;\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( ; i; ){\r
+                                       size = list[ --i ];\r
+                                       elm.style.fontSize = size;\r
+                                       ret[ size ] = 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.cleanCommentNode();\r
+                       \r
+                       /* clean noscript */\r
+\r
+                       var noscripts = Util.copyArray( document.getElementsByTagName( 'noscript' ) ),\r
+                               ns,\r
+                               i = noscripts.length;\r
+                       for( ; i; ){\r
+                               ns = noscripts[ --i ];\r
+                               ns.parentNode && ns.parentNode.removeChild( ns );\r
+                       };\r
+               }, 0 );\r
+               \r
+               function clone( src ) {\r
+                       var ret;\r
+                       if( Type.isArray(src) === true ){\r
+                               ret = [];\r
+                       } else\r
+                       if( Type.isObject(src) === true ){\r
+                               ret = {};\r
+                       } else\r
+                       if( Type.isNumber(src) === true || Type.isString(src) === true || Type.isBoolean( src ) === true ){\r
+                               return src;\r
+                       } else {\r
+                               return null;\r
+                       };\r
+                       for( var key in src ){\r
+                               ret[ key ] = clone( src[ key ]);\r
+                       };\r
+                       return ret;\r
+               };\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( target, extend ){\r
+                               for( var key in extend ){\r
+                                       if( Type.isUndefined( target[ key ] ) === true ){\r
+                                               target[ key ] = extend[ key ];\r
+                                       } else\r
+                                       if( typeof target[ key ] === typeof extend[ key ] ){\r
+                                               target[ key ] = extend[ key ];\r
+                                       } else {\r
+                                               alert( 'extend error' );\r
+                                       };\r
+                               };\r
+                               return target;\r
+                       },\r
+                       copy: function( objOrArray ){\r
+                               return clone( objOrArray );\r
+                       },\r
+                       cleanCommentNode: 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 _array, _elm, j, _css,\r
+                                   i = CLEAN_TARGET_ELEMENT.length;\r
+                               for( ; 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.cleanCommentNode( _targetElm );\r
+                               \r
+                               if( UA.isIE === false ) return;\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
+                               i, camelized;\r
+                           if( l === 1 ) return parts[ 0 ];\r
+                       \r
+                           camelized = cssProp.charAt(0) === '-'\r
+                             ? parts[ 0 ].charAt( 0 ).toUpperCase() + parts[ 0 ].substring( 1 )\r
+                             : parts[ 0 ];\r
+                       \r
+                           for( 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
+                                       return {\r
+                                               width:  0,\r
+                                               height: 0\r
+                                       };\r
+                               };\r
+                               var     parentElm   = _elm.parentNode,\r
+                                       prevElm     = _elm.previousSibling,\r
+                                       nextElm     = _elm.nextSibling,\r
+                                       displayNone = _elm.style.display === 'none';\r
+                               if( displayNone === true ) _elm.style.display = 'block';\r
+                               \r
+                               body.appendChild( ELM_SIZE_GETTER );\r
+                               ELM_SIZE_GETTER.appendChild( _elm );\r
+                               \r
+                               var ret = {\r
+                                       width:          _elm.offsetWidth,\r
+                                       height:         _elm.offsetHeight\r
+                               };\r
+                               if( displayNone === true ) _elm.style.display = 'none';\r
+                               if( nextElm ){\r
+                                       parentElm.insertBefore( _elm, nextElm );\r
+                               } else          \r
+                               if( prevElm && prevElm.nextSibling ){\r
+                                       parentElm.insertBefore( _elm, prevElm.nextSibling );\r
+                               } else {\r
+                                       parentElm && parentElm.appendChild( _elm );\r
+                               };\r
+                               body.removeChild( ELM_SIZE_GETTER );\r
+                               \r
+                               return ret;\r
+                       },\r
+                       getImageSize: function( img ){\r
+                               var     parentElm   = img.parentNode,\r
+                                       prevElm     = img.previousSibling,\r
+                                       nextElm     = img.nextSibling,\r
+                                       displayNone = img.style.display === 'none';\r
+                               if( displayNone === true ) img.style.display = '';\r
+                               \r
+                               body.appendChild( ELM_SIZE_GETTER );\r
+                               ELM_SIZE_GETTER.appendChild( img );\r
+                               \r
+                               var size = getActualDimension( img );\r
+                               \r
+                               if( displayNone === true ) img.style.display = 'none';\r
+                               if( nextElm ){\r
+                                       parentElm.insertBefore( img, nextElm );\r
+                               } else          \r
+                               if( prevElm && prevElm.nextSibling ){\r
+                                       parentElm.insertBefore( img, prevElm.nextSibling );\r
+                               } else {\r
+                                       parentElm && parentElm.appendChild( img );\r
+                               }\r
+                               body.removeChild( ELM_SIZE_GETTER );\r
+                               \r
+                       /* LICENSE: MIT\r
+                        * AUTHOR: uupaa.js@gmail.com\r
+                        */\r
+                               function getActualDimension(image) {\r
+                                       var run, mem, w, h, key = "actual";\r
+                               \r
+                               // for Firefox, Safari, Google Chrome\r
+                                       if( "naturalWidth" in image ){\r
+                                               return {\r
+                                                       width:  image.naturalWidth,\r
+                                                       height: image.naturalHeight\r
+                                               };\r
+                                       };\r
+                               \r
+                                       if( "src" in image ){ // HTMLImageElement\r
+                                               if (image[key] && image[key].src === image.src) {\r
+                                                       return image[key];\r
+                                               };\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
+                                                       run.height = "auto";\r
+                                                       w = image.width;\r
+                                                       h = image.height;\r
+                                                       run.width  = mem.w; // restore\r
+                                                       run.height = mem.h;\r
+                                               } else { // for Opera and Other\r
+                                                       mem = { w: image.width, h: image.height }; // keep current style\r
+                                                       image.removeAttribute("width");\r
+                                                       image.removeAttribute("height");\r
+                                                       w = image.width;\r
+                                                       h = image.height;\r
+                                                       image.width  = mem.w; // restore\r
+                                                       image.height = mem.h;\r
+                                               };\r
+                                               return image[key] = { width: w, height: h, src: image.src }; // bond\r
+                                       };\r
+                                       // HTMLCanvasElement\r
+                                       return { width: image.width, height: image.height };\r
+                               };\r
+                               \r
+                               return size;\r
+                       },\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
+                               // need html, body { fontfamily: "MS PGothic", "MS Gothic" } for ie6.\r
+                               var     destx    = _elm.offsetLeft,\r
+                                       desty    = _elm.offsetTop,\r
+                                       thisNode = _elm,\r
+                                       body     = document.body;\r
+                               while( thisNode.offsetParent && thisNode !== body ){\r
+                                       thisNode = thisNode.offsetParent;\r
+                                       destx += thisNode.offsetLeft;\r
+                                       desty += thisNode.offsetTop;\r
+                               };\r
+                               return {\r
+                                       x:      destx,\r
+                                       y:      desty\r
+                               };\r
+                       },\r
+                       contain: function( parent, child ){\r
+                               function find( node ){\r
+                                       var children = node.childNodes,\r
+                                               i = 0,\r
+                                               l = children.length,\r
+                                               elm;\r
+                                       for( ; i<l; ++i ){\r
+                                               elm = children[ i ];\r
+                                               if( elm === child ) return true;\r
+                                               if( elm.nodeType === 1 && find( elm ) === true ) return true;\r
+                                       };\r
+                                       return false;\r
+                               };\r
+                               return find( parent );\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
+                                       _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
+                               for( var i = _children.length; i; ){\r
+                                       if( _children[ --i ] === _child ) return i;\r
+                               };\r
+                               return -1;\r
+                       },\r
+                       hasClassName: function( _elm, _className ){\r
+                               var cnames  = ( _elm.className || '' ).split( ' ' ),\r
+                                       _cnames = _className.split( ' ' ),\r
+                                       cname,\r
+                                       i = _cnames.length;\r
+                               for( ; 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
+                                       var sp = ' ';\r
+                                       var _array = ( _elm.className || '' ).replace( /\s+/g, sp ).split( sp );\r
+                                       _array.push( _className );\r
+                                       _elm.className = _array.join( sp );\r
+                               };\r
+                       },\r
+                       removeClass: function( _elm, _className ){\r
+                               var sp     = ' ',\r
+                                       _array = _elm.className.replace( /\s+/g, sp ).split( sp ),\r
+                                       i      = Util.getIndex( _array, _className );\r
+                               if( i !== -1 ){\r
+                                       _array.splice( i, 1 );\r
+                                       _elm.className = _array.join( sp );\r
+                               };\r
+                       },\r
+                       toggleClass: function( _elm, _className, _switch ){\r
+                               if( Type.isBoolean( _switch ) === true ){\r
+                                       _switch === true ? Util.addClass( _elm, _className ) : Util.removeClass( _elm, _className );\r
+                               } else {\r
+                                       Util.hasClassName( _elm, _className ) === false ? Util.addClass( _elm, _className ) : Util.removeClass( _elm, _className );\r
+                               };\r
+                       },\r
+                       removeAllChildren: function ( _elm ){\r
+                               while( _elm.firstChild ){\r
+                                       remove( _elm.firstChild );\r
+                               }\r
+                               function remove( _node ){\r
+                                       while( _node.firstChild){\r
+                                               remove( _node.firstChild);\r
+                                       }\r
+                                       _node.parentNode && _node.parentNode.removeChild( _node);\r
+                               }\r
+                       },\r
+                       getIndex: function( _array, _element ){\r
+                               if( Array.prototype.indexof ){\r
+                                       Util.getIndex = function( _array, _element ){\r
+                                               return _array.indexof( _element );\r
+                                       };\r
+                               } else {\r
+                                       Util.getIndex = function( _array, _element ){\r
+                                               var i = _array.length;\r
+                                               for( ; 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 l = _array.length,\r
+                                       ret = new Array( l ),\r
+                                       i = 0;\r
+                               for( ; i<l; ++i ){\r
+                                       ret[ i ] = _array[ i ];\r
+                               };\r
+                               return ret;\r
+                       },\r
+                       /*\r
+                        * \r
+                        */\r
+                       createGlobalUniqueName: function(){\r
+                               var randomKey = null;\r
+                               while( true ){\r
+                                       randomKey = '_uniqueName'+(''+Math.random()).replace(/\./,'');\r
+                                       if( typeof window[randomKey] === 'undefined'){\r
+                                               break;\r
+                                       }\r
+                               }\r
+                               return randomKey;\r
+                       },\r
+                       createIframe: function( id, callback, hide ){\r
+                               var ua = UA;\r
+                   var el = document.createElement( ua.isIE ? '<iframe name="' + id + '" frameborder="0" scrolling="no">' : 'iframe');\r
+       \r
+                   if( ua.isIE ){\r
+                                       el.onreadystatechange = function(){\r
+                               if( this.readyState === "complete" ){\r
+                                   this.onreadystatechange = new Function();\r
+                                   this.onreadystatechange = null;\r
+                                   setTimeout( asynkCallback, 0 );\r
+                               };\r
+                          };\r
+                   } else {\r
+                       // iron(chrome) の場合、append の前に onload を指定しないと onload が呼ばれない\r
+                       el.onload = function(){\r
+                                               el.onload = null;\r
+                                               setTimeout( asynkCallback, 0 );\r
+                                       };\r
+                               };\r
+       \r
+                               document.body.appendChild( el );\r
+                   el.id = el.name = id;\r
+                   el.setAttribute( 'name', id );\r
+                   if( hide === true )el.style.cssText = 'width:1px;height:1px;visibility:hidden;position:absolute;top:1px;left:1px;';\r
+                               // http://d.hatena.ne.jp/onozaty/20070830/p1\r
+                               // [JavaScript]IE6ではJavaScriptで動的に作成したiframeに対してsubmitできない(IE7は未確認) ->解決\r
+                               el.contentWindow.name = id;                                     \r
+                   \r
+                   window[ id ] = el;\r
+\r
+                               function asynkCallback(){\r
+                                       callback( el );\r
+                               };\r
+                       }\r
+               };\r
+       })( window, document );\r
+\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 _special;\r
+       })();\r
+       \r
+       function cssToObject( css ){\r
+               var ret      = {}, i, nv, n, v,\r
+                       parse    = Util.parse,\r
+                       isNumber = Type.isNumber,\r
+                       camelize = Util.camelize;\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[ 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
+               var 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
+                               i    = rgb.length;\r
+                       for( ; 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 ){\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, i;\r
+                       \r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       all = this.style[ name + widthOrColor ].split( ' ' );\r
+                       \r
+                       for( 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, i, l;\r
+                       \r
+                       if( ret.isValid() === true ) return ret;\r
+                       ret.clear();\r
+                       all = this.style[ name ].split( ' ' );\r
+                       \r
+                       for( 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
+       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
+               getStyleProperty : function( elm, property ){\r
+                   if( document.defaultView && document.defaultView.getComputedStyle ){\r
+                       CSS.getStyleProperty = function( elm, property ){\r
+                               var obj      = document.defaultView.getComputedStyle( elm, '' ),\r
+                                       style    = {},\r
+                                       wrapped,\r
+                                       fontSize = 'fontSize',\r
+                                       number   = PARAMS.percent[ property ] || PARAMS.offset[ property ] || PARAMS.size[ property ] || PARAMS.color[ property ] || PARAMS.region[ property ] || PARAMS.special[ property ],\r
+                                       css, nv, n, v, i;\r
+                                       \r
+                               if( obj.cssText ){\r
+                                               css = obj.cssText.split( ';' );\r
+                                               for( i = css.length; i; ){\r
+                                                       nv = css[ --i ].split( ':' ); // filter の場合, progid: がくる\r
+                                                       n  = Util.camelize( nv.shift() );\r
+                                                       if( n === property && number === false ) return nv.join( '' );\r
+                                                       if( n === property || n === fontSize ){\r
+                                                               v = nv.join( '' );\r
+                                                               while( v.charAt( 0 ) === ' ' ) v = v.substr( 1 );\r
+                                                               style[ n ] = v;\r
+                                                               if( style[ property ] && style[ fontSize ] ) break;\r
+                                                       };\r
+                                               };\r
+                               } else {\r
+                                       if( number === false ) return obj[ property ];\r
+                                       \r
+                                       style[ property ] = obj[ property ];\r
+                                       if( !style[ property ] ) style[ property ] = obj[ Util.uncamelize( property ) ];\r
+                                       style[ fontSize ] = obj[ fontSize ];\r
+                                       if( !style[ fontSize ] ) style[ fontSize ] = obj[ Util.uncamelize( fontSize ) ];\r
+                               };\r
+                               \r
+                               wrapped = CSS.getWrappedStyle( elm, style );\r
+                               \r
+                               return wrapped.get( property );\r
+                       };\r
+                   } else {\r
+                       CSS.getStyleProperty = function( elm, property ){\r
+                               var obj      = elm.currentStyle,\r
+                                       style    = {},\r
+                                       wrapped,\r
+                                       fontSize = 'fontSize',\r
+                                       number   = PARAMS.percent[ property ] || PARAMS.offset[ property ] || PARAMS.size[ property ] || PARAMS.color[ property ] || PARAMS.region[ property ] || PARAMS.special[ property ];\r
+                               if( number === false ) return obj[ property ];\r
+                               \r
+                               style[ property ] = obj[ property ];\r
+                               if( !style[ property ] ) style[ property ] = obj[ Util.uncamelize( property ) ];\r
+                               style[ fontSize ] = obj[ fontSize ];\r
+                               if( !style[ fontSize ] ) style[ fontSize ] = obj[ Util.uncamelize( fontSize ) ];\r
+                               \r
+                               wrapped = CSS.getWrappedStyle( elm, style );\r
+                               \r
+                               return wrapped.get( property );\r
+                       };\r
+                   };\r
+                   return CSS.getStyleProperty( elm, property );\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
+/* original:\r
+ *   susie-t, http://d.hatena.ne.jp/susie-t/20070218/1171760841\r
+ */\r
+var Position = {\r
+       positionedOffset : function( element ){\r
+               var valueT  = 0,\r
+                       valueL  = 0,\r
+                       include = Position.isIncludeBorder,\r
+                       minus   = Position.isMinusBodyBorder,\r
+                       body    = document.body,\r
+                       parent, border, p;\r
+               do {\r
+                       valueT += element.offsetTop || 0;\r
+                       valueL += element.offsetLeft || 0;\r
+                       parent  = element.offsetParent;\r
+                       if( !include ){\r
+                               border  = Position.getBorder( parent );\r
+                               valueT += border[0];\r
+                               valueL += border[1];\r
+                               if( parent === body && minus ){\r
+                                       valueT += border[0];\r
+                                       valueL += border[1];\r
+                               };\r
+                       };\r
+                       if( parent === body ) break;\r
+                       if( parent ){\r
+                               p = CSS.getStyleProperty( parent, 'position' );\r
+                               // p = CSS.getComputedStyle( parent ).position;\r
+                               if( p === 'relative' || p === 'absolute' ) break;\r
+                       };\r
+               } while( element = parent );\r
+               return [ valueL, valueT ];\r
+       },\r
+       page : function( forElement ){\r
+               var valueT  = 0,\r
+                       valueL  = 0,\r
+                       include = Position.isIncludeBorder,\r
+                       minus   = Position.isMinusBodyBorder,\r
+                       body    = document.body,\r
+                       element = forElement,\r
+                       parent;\r
+               do {\r
+                       valueT += element.offsetTop || 0;\r
+                       valueL += element.offsetLeft || 0;\r
+                       parent  = element.offsetParent;\r
+                       if( !include ){\r
+                               border  = Position.getBorder( parent );\r
+                               valueT += border[1];\r
+                               valueL += border[0];\r
+                               if( parent === body && minus ){\r
+                                       valueT += border[0];\r
+                                       valueL += border[1];\r
+                               };\r
+                       };\r
+                       // Safari fix\r
+                       if( parent === body && CSS.getStyleProperty( element, 'position' ) === 'absolute' ){\r
+                               break;  \r
+                       };\r
+               } while( element = parent );\r
+\r
+               element = forElement;\r
+               do {\r
+                       valueT -= element.scrollTop || 0;\r
+                       valueL -= element.scrollLeft || 0;\r
+               } while( element = element.parentNode );\r
+\r
+               return [ valueL, valueT ];\r
+       },\r
+       getBorder : function( element ){\r
+               if( element === null ){\r
+                       return [ 0, 0 ];\r
+               };\r
+               /**\r
+               var top        = 0,\r
+                       left       = 0,\r
+                       dhtmlStyle = CSS.getWrappedStyle( element );\r
+                       compStyle  = CSS.getComputedStyle( element );\r
+               if( compStyle.borderTopStyle !== 'none' ){\r
+                       top = dhtmlStyle.get( 'borderTopWidth' ).toPx();//parseInt( Element.getStyle( element, 'border-top-width' ) );\r
+               };\r
+               if( compStyle.borderLeftStyle !== 'none' ){\r
+                       left = dhtmlStyle.get( 'borderLeftWidth' ).toPx();//parseInt( Element.getStyle( element, 'border-left-width' ) );\r
+               };\r
+               */\r
+               var top        = 0,\r
+                       left       = 0;\r
+               if( CSS.getStyleProperty( element, 'borderTopStyle' ) !== 'none' ){\r
+                       top  = CSS.getStyleProperty( element, 'borderTopWidth' ).toPx();\r
+               };\r
+               if( CSS.getStyleProperty( element, 'borderLeftStyle' ) !== 'none' ){\r
+                       left = CSS.getStyleProperty( element, 'borderLeftWidth' ).toPx();\r
+               };\r
+               \r
+               return [ left || 0, top || 0 ];\r
+       },\r
+       isIncludeBorder : ( function() {\r
+               var parent = document.createElement( 'div' );\r
+               document.body.appendChild( parent );\r
+               parent.style.cssText = 'border:solid blue 10px; padding:0px; position:absolute; visibility:hidden;';\r
+               \r
+               var child  = document.createElement( 'div' );\r
+               parent.appendChild( child );\r
+               var ret = child.offsetTop === 0 ? false : true;\r
+\r
+               document.body.removeChild( parent );\r
+\r
+               return ret;\r
+       })(),\r
+       isMinusBodyBorder : ( function(){\r
+               return document.body.offsetTop < CSS.getWrappedStyle( document.body ).get( 'marginTop' ).toPx();\r
+               // return document.body.offsetTop < CSS.getStyleProperty( document.body, 'marginTop' ).toPx();  \r
+       })(),\r
+       cumulativeOffset : function( element ){\r
+               if( /Konqueror|Safari|KHTML/.test( navigator.userAgent ) ){\r
+                       Position.cumulativeOffset = function( element ){\r
+                               var valueT  = 0,\r
+                                       valueL  = 0,\r
+                                       include = Position.isIncludeBorder,\r
+                                       minus   = Position.isMinusBodyBorder,\r
+                                       body    = document.body,\r
+                                       parent, border;\r
+                               do {\r
+                                       valueT += element.offsetTop || 0;\r
+                                       valueL += element.offsetLeft || 0;\r
+                                       parent  = element.offsetParent;\r
+                                       if( !include ){\r
+                                               border = Position.getBorder( parent );\r
+                                               valueT += border[1];\r
+                                               valueL += border[0];\r
+                                               if( parent === body && minus ){\r
+                                                       valueT += border[0];\r
+                                                       valueL += border[1];\r
+                                               };\r
+                                       };\r
+                                       if( parent === body && CSS.getStyleProperty( element, 'position' ) === 'absolute' ){\r
+                                               break;  \r
+                                       };\r
+                                       element = parent;\r
+                               } while ( element );\r
+               \r
+                               return [ valueL, valueT ];\r
+                       };\r
+               } else {\r
+                       Position.cumulativeOffset = function( element ){\r
+                               var valueT  = 0,\r
+                                       valueL  = 0,\r
+                                       include = Position.isIncludeBorder,\r
+                                       minus   = Position.isMinusBodyBorder,\r
+                                       body    = document.body,\r
+                                       parent, border;\r
+                               do {\r
+                                       valueT += element.offsetTop || 0;\r
+                                       valueL += element.offsetLeft || 0;\r
+                                       parent  = element.offsetParent;\r
+                                       if( !include ){\r
+                                               border  = Position.getBorder( parent );\r
+                                               valueT += border[1];\r
+                                               valueL += border[0];\r
+                                               if( parent === body && minus ){\r
+                                                       valueT += border[0];\r
+                                                       valueL += border[1];\r
+                                               };\r
+                                       };\r
+                                       element = parent;\r
+                               } while( element );\r
+                               return [ valueL, valueT ];\r
+                       };                      \r
+               };\r
+               return Position.cumulativeOffset( element );\r
+       }\r
+};\r
+\r
+\r