Upgrade to ExtJS 3.2.0 - Released 03/30/2010
[extjs.git] / adapter / ext / ext-base-debug.js
index 8d0a32a..82c8e02 100644 (file)
@@ -1,6 +1,6 @@
 /*!
- * Ext JS Library 3.1.1
- * Copyright(c) 2006-2010 Ext JS, LLC
+ * Ext JS Library 3.2.0
+ * Copyright(c) 2006-2010 Ext JS, Inc.
  * licensing@extjs.com
  * http://www.extjs.com/license
  */
@@ -19,7 +19,7 @@ Ext = {
      * The version of the framework
      * @type String
      */
-    version : '3.1.1'
+    version : '3.2.0'
 };
 
 /**
@@ -665,7 +665,7 @@ function(el){
          * @return {Boolean}
          */
         isElement : function(v) {
-            return !!v && v.tagName;
+            return v ? !!v.tagName : false;
         },
 
         /**
@@ -1202,9 +1202,9 @@ ImageComponent = Ext.extend(Ext.BoxComponent, {
     }
 });
          * </code></pre> 
-         * @param {Object} The destination object.
-         * @param {Object} The source object.
-         * @param {Array/String} Either an Array of property names, or a comma-delimited list
+         * @param {Object} dest The destination object.
+         * @param {Object} source The source object.
+         * @param {Array/String} names Either an Array of property names, or a comma-delimited list
          * of property names to copy.
          * @return {Object} The modified object.
         */
@@ -1404,7 +1404,7 @@ Ext.invoke(Ext.query("p"), "getAttribute", "id");
          * </code></pre>
          * @param {Array|NodeList} arr The Array of items to invoke the method on.
          * @param {String} methodName The method name to invoke.
-         * @param {Anything} ... Arguments to send into the method invocation.
+         * @param {...*} args Arguments to send into the method invocation.
          * @return {Array} The results of invoking the method on each item in the array.
          */
         invoke : function(arr, methodName){
@@ -1728,6 +1728,7 @@ Ext.TaskMgr.start({
 });
 
  * </code></pre>
+ * <p>See the {@link #start} method for details about how to configure a task object.</p>
  * Also see {@link Ext.util.DelayedTask}. 
  * 
  * @constructor
@@ -1799,21 +1800,25 @@ Ext.util.TaskRunner = function(interval){
     /**
      * Starts a new task.
      * @method start
-     * @param {Object} task A config object that supports the following properties:<ul>
-     * <li><code>run</code> : Function<div class="sub-desc">The function to execute each time the task is run. The
-     * function will be called at each interval and passed the <code>args</code> argument if specified.  If a
-     * particular scope is required, be sure to specify it using the <code>scope</code> argument.</div></li>
+     * @param {Object} task <p>A config object that supports the following properties:<ul>
+     * <li><code>run</code> : Function<div class="sub-desc"><p>The function to execute each time the task is invoked. The
+     * function will be called at each interval and passed the <code>args</code> argument if specified, and the
+     * current invocation count if not.</p>
+     * <p>If a particular scope (<code>this</code> reference) is required, be sure to specify it using the <code>scope</code> argument.</p>
+     * <p>Return <code>false</code> from this function to terminate the task.</p></div></li>
      * <li><code>interval</code> : Number<div class="sub-desc">The frequency in milliseconds with which the task
-     * should be executed.</div></li>
+     * should be invoked.</div></li>
      * <li><code>args</code> : Array<div class="sub-desc">(optional) An array of arguments to be passed to the function
-     * specified by <code>run</code>.</div></li>
+     * specified by <code>run</code>. If not specified, the current invocation count is passed.</div></li>
      * <li><code>scope</code> : Object<div class="sub-desc">(optional) The scope (<tt>this</tt> reference) in which to execute the
      * <code>run</code> function. Defaults to the task config object.</div></li>
-     * <li><code>duration</code> : Number<div class="sub-desc">(optional) The length of time in milliseconds to execute
+     * <li><code>duration</code> : Number<div class="sub-desc">(optional) The length of time in milliseconds to invoke
      * the task before stopping automatically (defaults to indefinite).</div></li>
-     * <li><code>repeat</code> : Number<div class="sub-desc">(optional) The number of times to execute the task before
+     * <li><code>repeat</code> : Number<div class="sub-desc">(optional) The number of times to invoke the task before
      * stopping automatically (defaults to indefinite).</div></li>
-     * </ul>
+     * </ul></p>
+     * <p>Before each invocation, Ext injects the property <code>taskRunCount</code> into the task object so
+     * that calculations based on the repeat count can be performed.</p>
      * @return {Object} The task
      */
     this.start = function(task){
@@ -1867,172 +1872,173 @@ var task = {
 }
 Ext.TaskMgr.start(task);
 </code></pre>
+ * <p>See the {@link #start} method for details about how to configure a task object.</p>
  * @singleton
  */
-Ext.TaskMgr = new Ext.util.TaskRunner();(function(){\r
-       var libFlyweight;\r
-       \r
-       function fly(el) {\r
-        if (!libFlyweight) {\r
-            libFlyweight = new Ext.Element.Flyweight();\r
-        }\r
-        libFlyweight.dom = el;\r
-        return libFlyweight;\r
-    }\r
-    \r
-    (function(){\r
-       var doc = document,\r
-               isCSS1 = doc.compatMode == "CSS1Compat",\r
-               MAX = Math.max,         \r
-        ROUND = Math.round,\r
-               PARSEINT = parseInt;\r
-               \r
-       Ext.lib.Dom = {\r
-           isAncestor : function(p, c) {\r
-                   var ret = false;\r
-                       \r
-                       p = Ext.getDom(p);\r
-                       c = Ext.getDom(c);\r
-                       if (p && c) {\r
-                               if (p.contains) {\r
-                                       return p.contains(c);\r
-                               } else if (p.compareDocumentPosition) {\r
-                                       return !!(p.compareDocumentPosition(c) & 16);\r
-                               } else {\r
-                                       while (c = c.parentNode) {\r
-                                               ret = c == p || ret;                                    \r
-                                       }\r
-                               }                   \r
-                       }       \r
-                       return ret;\r
-               },\r
-               \r
-        getViewWidth : function(full) {\r
-            return full ? this.getDocumentWidth() : this.getViewportWidth();\r
-        },\r
-\r
-        getViewHeight : function(full) {\r
-            return full ? this.getDocumentHeight() : this.getViewportHeight();\r
-        },\r
-\r
-        getDocumentHeight: function() {            \r
-            return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight());\r
-        },\r
-\r
-        getDocumentWidth: function() {            \r
-            return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth());\r
-        },\r
-\r
-        getViewportHeight: function(){\r
-               return Ext.isIE ? \r
-                          (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :\r
-                          self.innerHeight;\r
-        },\r
-\r
-        getViewportWidth : function() {\r
-               return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth :\r
-                          Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;\r
-        },\r
-        \r
-        getY : function(el) {\r
-            return this.getXY(el)[1];\r
-        },\r
-\r
-        getX : function(el) {\r
-            return this.getXY(el)[0];\r
-        },\r
-\r
-        getXY : function(el) {\r
-            var p, \r
-               pe, \r
-               b,\r
-               bt, \r
-               bl,     \r
-               dbd,            \r
-               x = 0,\r
-               y = 0, \r
-               scroll,\r
-               hasAbsolute, \r
-               bd = (doc.body || doc.documentElement),\r
-               ret = [0,0];\r
-               \r
-            el = Ext.getDom(el);\r
-\r
-            if(el != bd){\r
-                   if (el.getBoundingClientRect) {\r
-                       b = el.getBoundingClientRect();\r
-                       scroll = fly(document).getScroll();\r
-                       ret = [ROUND(b.left + scroll.left), ROUND(b.top + scroll.top)];\r
-                   } else {  \r
-                           p = el;             \r
-                           hasAbsolute = fly(el).isStyle("position", "absolute");\r
-               \r
-                           while (p) {\r
-                                   pe = fly(p);                \r
-                               x += p.offsetLeft;\r
-                               y += p.offsetTop;\r
-               \r
-                               hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");\r
-                                               \r
-                               if (Ext.isGecko) {                                  \r
-                                   y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0;\r
-                                   x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0;        \r
-               \r
-                                   if (p != el && !pe.isStyle('overflow','visible')) {\r
-                                       x += bl;\r
-                                       y += bt;\r
-                                   }\r
-                               }\r
-                               p = p.offsetParent;\r
-                           }\r
-               \r
-                           if (Ext.isSafari && hasAbsolute) {\r
-                               x -= bd.offsetLeft;\r
-                               y -= bd.offsetTop;\r
-                           }\r
-               \r
-                           if (Ext.isGecko && !hasAbsolute) {\r
-                               dbd = fly(bd);\r
-                               x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0;\r
-                               y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0;\r
-                           }\r
-               \r
-                           p = el.parentNode;\r
-                           while (p && p != bd) {\r
-                               if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {\r
-                                   x -= p.scrollLeft;\r
-                                   y -= p.scrollTop;\r
-                               }\r
-                               p = p.parentNode;\r
-                           }\r
-                           ret = [x,y];\r
-                   }\r
-               }\r
-            return ret\r
-        },\r
-\r
-        setXY : function(el, xy) {\r
-            (el = Ext.fly(el, '_setXY')).position();\r
-            \r
-            var pts = el.translatePoints(xy),\r
-               style = el.dom.style,\r
-               pos;                    \r
-            \r
-            for (pos in pts) {             \r
-                   if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px"\r
-            }\r
-        },\r
-\r
-        setX : function(el, x) {\r
-            this.setXY(el, [x, false]);\r
-        },\r
-\r
-        setY : function(el, y) {\r
-            this.setXY(el, [false, y]);\r
-        }\r
-    };\r
-})();Ext.lib.Dom.getRegion = function(el) {\r
-    return Ext.lib.Region.getRegion(el);\r
+Ext.TaskMgr = new Ext.util.TaskRunner();(function(){
+       var libFlyweight;
+       
+       function fly(el) {
+        if (!libFlyweight) {
+            libFlyweight = new Ext.Element.Flyweight();
+        }
+        libFlyweight.dom = el;
+        return libFlyweight;
+    }
+    
+    (function(){
+       var doc = document,
+               isCSS1 = doc.compatMode == "CSS1Compat",
+               MAX = Math.max,         
+        ROUND = Math.round,
+               PARSEINT = parseInt;
+               
+       Ext.lib.Dom = {
+           isAncestor : function(p, c) {
+                   var ret = false;
+                       
+                       p = Ext.getDom(p);
+                       c = Ext.getDom(c);
+                       if (p && c) {
+                               if (p.contains) {
+                                       return p.contains(c);
+                               } else if (p.compareDocumentPosition) {
+                                       return !!(p.compareDocumentPosition(c) & 16);
+                               } else {
+                                       while (c = c.parentNode) {
+                                               ret = c == p || ret;                                    
+                                       }
+                               }                   
+                       }       
+                       return ret;
+               },
+               
+        getViewWidth : function(full) {
+            return full ? this.getDocumentWidth() : this.getViewportWidth();
+        },
+
+        getViewHeight : function(full) {
+            return full ? this.getDocumentHeight() : this.getViewportHeight();
+        },
+
+        getDocumentHeight: function() {            
+            return MAX(!isCSS1 ? doc.body.scrollHeight : doc.documentElement.scrollHeight, this.getViewportHeight());
+        },
+
+        getDocumentWidth: function() {            
+            return MAX(!isCSS1 ? doc.body.scrollWidth : doc.documentElement.scrollWidth, this.getViewportWidth());
+        },
+
+        getViewportHeight: function(){
+               return Ext.isIE ? 
+                          (Ext.isStrict ? doc.documentElement.clientHeight : doc.body.clientHeight) :
+                          self.innerHeight;
+        },
+
+        getViewportWidth : function() {
+               return !Ext.isStrict && !Ext.isOpera ? doc.body.clientWidth :
+                          Ext.isIE ? doc.documentElement.clientWidth : self.innerWidth;
+        },
+        
+        getY : function(el) {
+            return this.getXY(el)[1];
+        },
+
+        getX : function(el) {
+            return this.getXY(el)[0];
+        },
+
+        getXY : function(el) {
+            var p, 
+               pe, 
+               b,
+               bt, 
+               bl,     
+               dbd,            
+               x = 0,
+               y = 0, 
+               scroll,
+               hasAbsolute, 
+               bd = (doc.body || doc.documentElement),
+               ret = [0,0];
+               
+            el = Ext.getDom(el);
+
+            if(el != bd){
+                   if (el.getBoundingClientRect) {
+                       b = el.getBoundingClientRect();
+                       scroll = fly(document).getScroll();
+                       ret = [ROUND(b.left + scroll.left), ROUND(b.top + scroll.top)];
+                   } else {  
+                           p = el;             
+                           hasAbsolute = fly(el).isStyle("position", "absolute");
+               
+                           while (p) {
+                                   pe = fly(p);                
+                               x += p.offsetLeft;
+                               y += p.offsetTop;
+               
+                               hasAbsolute = hasAbsolute || pe.isStyle("position", "absolute");
+                                               
+                               if (Ext.isGecko) {                                  
+                                   y += bt = PARSEINT(pe.getStyle("borderTopWidth"), 10) || 0;
+                                   x += bl = PARSEINT(pe.getStyle("borderLeftWidth"), 10) || 0;        
+               
+                                   if (p != el && !pe.isStyle('overflow','visible')) {
+                                       x += bl;
+                                       y += bt;
+                                   }
+                               }
+                               p = p.offsetParent;
+                           }
+               
+                           if (Ext.isSafari && hasAbsolute) {
+                               x -= bd.offsetLeft;
+                               y -= bd.offsetTop;
+                           }
+               
+                           if (Ext.isGecko && !hasAbsolute) {
+                               dbd = fly(bd);
+                               x += PARSEINT(dbd.getStyle("borderLeftWidth"), 10) || 0;
+                               y += PARSEINT(dbd.getStyle("borderTopWidth"), 10) || 0;
+                           }
+               
+                           p = el.parentNode;
+                           while (p && p != bd) {
+                               if (!Ext.isOpera || (p.tagName != 'TR' && !fly(p).isStyle("display", "inline"))) {
+                                   x -= p.scrollLeft;
+                                   y -= p.scrollTop;
+                               }
+                               p = p.parentNode;
+                           }
+                           ret = [x,y];
+                   }
+               }
+            return ret
+        },
+
+        setXY : function(el, xy) {
+            (el = Ext.fly(el, '_setXY')).position();
+            
+            var pts = el.translatePoints(xy),
+               style = el.dom.style,
+               pos;                    
+            
+            for (pos in pts) {             
+                   if(!isNaN(pts[pos])) style[pos] = pts[pos] + "px"
+            }
+        },
+
+        setX : function(el, x) {
+            this.setXY(el, [x, false]);
+        },
+
+        setY : function(el, y) {
+            this.setXY(el, [false, y]);
+        }
+    };
+})();Ext.lib.Dom.getRegion = function(el) {
+    return Ext.lib.Region.getRegion(el);
 };Ext.lib.Event = function() {
     var loadComplete = false,
         unloadListeners = {},
@@ -2369,7 +2375,6 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){
                 }
             };
 
-            unloadListeners = null;
             Ext.EventManager._unload();
 
             doRemove(win, UNLOAD, EU._unload);
@@ -2389,1230 +2394,1239 @@ Ext.TaskMgr = new Ext.util.TaskRunner();(function(){
 
     return pub;
 }();
-/*\r
-* Portions of this file are based on pieces of Yahoo User Interface Library\r
-* Copyright (c) 2007, Yahoo! Inc. All rights reserved.\r
-* YUI licensed under the BSD License:\r
-* http://developer.yahoo.net/yui/license.txt\r
-*/\r
-Ext.lib.Ajax = function() {     \r
-    var activeX = ['MSXML2.XMLHTTP.3.0',\r
-                   'MSXML2.XMLHTTP',\r
-                   'Microsoft.XMLHTTP'],\r
-        CONTENTTYPE = 'Content-Type';\r
-                   \r
-    // private\r
-    function setHeader(o) {\r
-        var conn = o.conn,\r
-            prop;\r
-        \r
-        function setTheHeaders(conn, headers){\r
-            for (prop in headers) {\r
-                if (headers.hasOwnProperty(prop)) {\r
-                    conn.setRequestHeader(prop, headers[prop]);\r
-                }\r
-            }   \r
-        }       \r
-        \r
-        if (pub.defaultHeaders) {\r
-            setTheHeaders(conn, pub.defaultHeaders);\r
-        }\r
-\r
-        if (pub.headers) {\r
-            setTheHeaders(conn, pub.headers);\r
-            delete pub.headers;                \r
-        }\r
-    }    \r
-    \r
-    // private\r
-    function createExceptionObject(tId, callbackArg, isAbort, isTimeout) {          \r
-        return {\r
-            tId : tId,\r
-            status : isAbort ? -1 : 0,\r
-            statusText : isAbort ? 'transaction aborted' : 'communication failure',\r
-            isAbort: isAbort,\r
-            isTimeout: isTimeout,\r
-            argument : callbackArg\r
-        };\r
-    }  \r
-    \r
-    // private \r
-    function initHeader(label, value) {         \r
-        (pub.headers = pub.headers || {})[label] = value;                       \r
-    }\r
-    \r
-    // private\r
-    function createResponseObject(o, callbackArg) {\r
-        var headerObj = {},\r
-            headerStr,              \r
-            conn = o.conn,\r
-            t,\r
-            s;\r
-\r
-        try {\r
-            headerStr = o.conn.getAllResponseHeaders();   \r
-            Ext.each(headerStr.replace(/\r\n/g, '\n').split('\n'), function(v){\r
-                t = v.indexOf(':');\r
-                if(t >= 0){\r
-                    s = v.substr(0, t).toLowerCase();\r
-                    if(v.charAt(t + 1) == ' '){\r
-                        ++t;\r
-                    }\r
-                    headerObj[s] = v.substr(t + 1);\r
-                }\r
-            });\r
-        } catch(e) {}\r
-                    \r
-        return {\r
-            tId : o.tId,\r
-            status : conn.status,\r
-            statusText : conn.statusText,\r
-            getResponseHeader : function(header){return headerObj[header.toLowerCase()];},\r
-            getAllResponseHeaders : function(){return headerStr},\r
-            responseText : conn.responseText,\r
-            responseXML : conn.responseXML,\r
-            argument : callbackArg\r
-        };\r
-    }\r
-    \r
-    // private\r
-    function releaseObject(o) {\r
-        o.conn = null;\r
-        o = null;\r
-    }        \r
-    \r
-    // private\r
-    function handleTransactionResponse(o, callback, isAbort, isTimeout) {\r
-        if (!callback) {\r
-            releaseObject(o);\r
-            return;\r
-        }\r
-\r
-        var httpStatus, responseObject;\r
-\r
-        try {\r
-            if (o.conn.status !== undefined && o.conn.status != 0) {\r
-                httpStatus = o.conn.status;\r
-            }\r
-            else {\r
-                httpStatus = 13030;\r
-            }\r
-        }\r
-        catch(e) {\r
-            httpStatus = 13030;\r
-        }\r
-\r
-        if ((httpStatus >= 200 && httpStatus < 300) || (Ext.isIE && httpStatus == 1223)) {\r
-            responseObject = createResponseObject(o, callback.argument);\r
-            if (callback.success) {\r
-                if (!callback.scope) {\r
-                    callback.success(responseObject);\r
-                }\r
-                else {\r
-                    callback.success.apply(callback.scope, [responseObject]);\r
-                }\r
-            }\r
-        }\r
-        else {\r
-            switch (httpStatus) {\r
-                case 12002:\r
-                case 12029:\r
-                case 12030:\r
-                case 12031:\r
-                case 12152:\r
-                case 13030:\r
-                    responseObject = createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false), isTimeout);\r
-                    if (callback.failure) {\r
-                        if (!callback.scope) {\r
-                            callback.failure(responseObject);\r
-                        }\r
-                        else {\r
-                            callback.failure.apply(callback.scope, [responseObject]);\r
-                        }\r
-                    }\r
-                    break;\r
-                default:\r
-                    responseObject = createResponseObject(o, callback.argument);\r
-                    if (callback.failure) {\r
-                        if (!callback.scope) {\r
-                            callback.failure(responseObject);\r
-                        }\r
-                        else {\r
-                            callback.failure.apply(callback.scope, [responseObject]);\r
-                        }\r
-                    }\r
-            }\r
-        }\r
-\r
-        releaseObject(o);\r
-        responseObject = null;\r
-    }  \r
-    \r
-    // private\r
-    function handleReadyState(o, callback){\r
-    callback = callback || {};\r
-        var conn = o.conn,\r
-            tId = o.tId,\r
-            poll = pub.poll,\r
-            cbTimeout = callback.timeout || null;\r
-\r
-        if (cbTimeout) {\r
-            pub.timeout[tId] = setTimeout(function() {\r
-                pub.abort(o, callback, true);\r
-            }, cbTimeout);\r
-        }\r
-\r
-        poll[tId] = setInterval(\r
-            function() {\r
-                if (conn && conn.readyState == 4) {\r
-                    clearInterval(poll[tId]);\r
-                    poll[tId] = null;\r
-\r
-                    if (cbTimeout) {\r
-                        clearTimeout(pub.timeout[tId]);\r
-                        pub.timeout[tId] = null;\r
-                    }\r
-\r
-                    handleTransactionResponse(o, callback);\r
-                }\r
-            },\r
-            pub.pollInterval);\r
-    }\r
-    \r
-    // private\r
-    function asyncRequest(method, uri, callback, postData) {\r
-        var o = getConnectionObject() || null;\r
-\r
-        if (o) {\r
-            o.conn.open(method, uri, true);\r
-\r
-            if (pub.useDefaultXhrHeader) {                    \r
-                initHeader('X-Requested-With', pub.defaultXhrHeader);\r
-            }\r
-\r
-            if(postData && pub.useDefaultHeader && (!pub.headers || !pub.headers[CONTENTTYPE])){\r
-                initHeader(CONTENTTYPE, pub.defaultPostHeader);\r
-            }\r
-\r
-            if (pub.defaultHeaders || pub.headers) {\r
-                setHeader(o);\r
-            }\r
-\r
-            handleReadyState(o, callback);\r
-            o.conn.send(postData || null);\r
-        }\r
-        return o;\r
-    }\r
-    \r
-    // private\r
-    function getConnectionObject() {\r
-        var o;          \r
-\r
-        try {\r
-            if (o = createXhrObject(pub.transactionId)) {\r
-                pub.transactionId++;\r
-            }\r
-        } catch(e) {\r
-        } finally {\r
-            return o;\r
-        }\r
-    }\r
-       \r
-    // private\r
-    function createXhrObject(transactionId) {\r
-        var http;\r
-            \r
-        try {\r
-            http = new XMLHttpRequest();                \r
-        } catch(e) {\r
-            for (var i = 0; i < activeX.length; ++i) {              \r
-                try {\r
-                    http = new ActiveXObject(activeX[i]);                        \r
-                    break;\r
-                } catch(e) {}\r
-            }\r
-        } finally {\r
-            return {conn : http, tId : transactionId};\r
-        }\r
-    }\r
-         \r
-    var pub = {\r
-        request : function(method, uri, cb, data, options) {\r
-            if(options){\r
-                var me = this,              \r
-                    xmlData = options.xmlData,\r
-                    jsonData = options.jsonData,\r
-                    hs;\r
-                    \r
-                Ext.applyIf(me, options);           \r
-                \r
-                if(xmlData || jsonData){\r
-                    hs = me.headers;\r
-                    if(!hs || !hs[CONTENTTYPE]){\r
-                        initHeader(CONTENTTYPE, xmlData ? 'text/xml' : 'application/json');\r
-                    }\r
-                    data = xmlData || (!Ext.isPrimitive(jsonData) ? Ext.encode(jsonData) : jsonData);\r
-                }\r
-            }                       \r
-            return asyncRequest(method || options.method || "POST", uri, cb, data);\r
-        },\r
-\r
-        serializeForm : function(form) {\r
-            var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements,\r
-                hasSubmit = false,\r
-                encoder = encodeURIComponent,\r
-                element,\r
-                options, \r
-                name, \r
-                val,                \r
-                data = '',\r
-                type;\r
-                \r
-            Ext.each(fElements, function(element) {                 \r
-                name = element.name;                 \r
-                type = element.type;\r
-                \r
-                if (!element.disabled && name){\r
-                    if(/select-(one|multiple)/i.test(type)) {\r
-                        Ext.each(element.options, function(opt) {\r
-                            if (opt.selected) {\r
-                                data += String.format("{0}={1}&", encoder(name), encoder((opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttribute('value') !== null) ? opt.value : opt.text));\r
-                            }                               \r
-                        });\r
-                    } else if(!/file|undefined|reset|button/i.test(type)) {\r
-                            if(!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)){\r
-                                \r
-                                data += encoder(name) + '=' + encoder(element.value) + '&';                     \r
-                                hasSubmit = /submit/i.test(type);    \r
-                            }                       \r
-                    } \r
-                }\r
-            });            \r
-            return data.substr(0, data.length - 1);\r
-        },\r
-        \r
-        useDefaultHeader : true,\r
-        defaultPostHeader : 'application/x-www-form-urlencoded; charset=UTF-8',\r
-        useDefaultXhrHeader : true,\r
-        defaultXhrHeader : 'XMLHttpRequest',        \r
-        poll : {},\r
-        timeout : {},\r
-        pollInterval : 50,\r
-        transactionId : 0,\r
-        \r
-//  This is never called - Is it worth exposing this?               \r
-//          setProgId : function(id) {\r
-//              activeX.unshift(id);\r
-//          },\r
-\r
-//  This is never called - Is it worth exposing this?   \r
-//          setDefaultPostHeader : function(b) {\r
-//              this.useDefaultHeader = b;\r
-//          },\r
-        \r
-//  This is never called - Is it worth exposing this?   \r
-//          setDefaultXhrHeader : function(b) {\r
-//              this.useDefaultXhrHeader = b;\r
-//          },\r
-\r
-//  This is never called - Is it worth exposing this?           \r
-//          setPollingInterval : function(i) {\r
-//              if (typeof i == 'number' && isFinite(i)) {\r
-//                  this.pollInterval = i;\r
-//              }\r
-//          },\r
-        \r
-//  This is never called - Is it worth exposing this?\r
-//          resetDefaultHeaders : function() {\r
-//              this.defaultHeaders = null;\r
-//          },\r
-    \r
-            abort : function(o, callback, isTimeout) {\r
-                var me = this,\r
-                    tId = o.tId,\r
-                    isAbort = false;\r
-                \r
-                if (me.isCallInProgress(o)) {\r
-                    o.conn.abort();\r
-                    clearInterval(me.poll[tId]);\r
-                    me.poll[tId] = null;\r
-                    clearTimeout(pub.timeout[tId]);\r
-                    me.timeout[tId] = null;\r
-                    \r
-                    handleTransactionResponse(o, callback, (isAbort = true), isTimeout);                \r
-                }\r
-                return isAbort;\r
-            },\r
-    \r
-            isCallInProgress : function(o) {\r
-                // if there is a connection and readyState is not 0 or 4\r
-                return o.conn && !{0:true,4:true}[o.conn.readyState];           \r
-            }\r
-        };\r
-        return pub;\r
-    }();       Ext.lib.Region = function(t, r, b, l) {\r
-               var me = this;\r
-        me.top = t;\r
-        me[1] = t;\r
-        me.right = r;\r
-        me.bottom = b;\r
-        me.left = l;\r
-        me[0] = l;\r
-    };\r
-\r
-    Ext.lib.Region.prototype = {\r
-        contains : function(region) {\r
-               var me = this;\r
-            return ( region.left >= me.left &&\r
-                     region.right <= me.right &&\r
-                     region.top >= me.top &&\r
-                     region.bottom <= me.bottom );\r
-\r
-        },\r
-\r
-        getArea : function() {\r
-               var me = this;\r
-            return ( (me.bottom - me.top) * (me.right - me.left) );\r
-        },\r
-\r
-        intersect : function(region) {\r
-            var me = this,\r
-               t = Math.max(me.top, region.top),\r
-               r = Math.min(me.right, region.right),\r
-               b = Math.min(me.bottom, region.bottom),\r
-               l = Math.max(me.left, region.left);\r
-\r
-            if (b >= t && r >= l) {\r
-                return new Ext.lib.Region(t, r, b, l);\r
-            }\r
-        },\r
-        \r
-        union : function(region) {\r
-               var me = this,\r
-               t = Math.min(me.top, region.top),\r
-               r = Math.max(me.right, region.right),\r
-               b = Math.max(me.bottom, region.bottom),\r
-               l = Math.min(me.left, region.left);\r
-\r
-            return new Ext.lib.Region(t, r, b, l);\r
-        },\r
-\r
-        constrainTo : function(r) {\r
-               var me = this;\r
-            me.top = me.top.constrain(r.top, r.bottom);\r
-            me.bottom = me.bottom.constrain(r.top, r.bottom);\r
-            me.left = me.left.constrain(r.left, r.right);\r
-            me.right = me.right.constrain(r.left, r.right);\r
-            return me;\r
-        },\r
-\r
-        adjust : function(t, l, b, r) {\r
-               var me = this;\r
-            me.top += t;\r
-            me.left += l;\r
-            me.right += r;\r
-            me.bottom += b;\r
-            return me;\r
-        }\r
-    };\r
-\r
-    Ext.lib.Region.getRegion = function(el) {\r
-        var p = Ext.lib.Dom.getXY(el),\r
-               t = p[1],\r
-               r = p[0] + el.offsetWidth,\r
-               b = p[1] + el.offsetHeight,\r
-               l = p[0];\r
-\r
-        return new Ext.lib.Region(t, r, b, l);\r
-    }; Ext.lib.Point = function(x, y) {\r
-        if (Ext.isArray(x)) {\r
-            y = x[1];\r
-            x = x[0];\r
-        }\r
-        var me = this;\r
-        me.x = me.right = me.left = me[0] = x;\r
-        me.y = me.top = me.bottom = me[1] = y;\r
-    };\r
-\r
-    Ext.lib.Point.prototype = new Ext.lib.Region();\r
-(function(){    \r
-    var EXTLIB = Ext.lib,\r
-        noNegatives = /width|height|opacity|padding/i,\r
-        offsetAttribute = /^((width|height)|(top|left))$/,\r
-        defaultUnit = /width|height|top$|bottom$|left$|right$/i,\r
-        offsetUnit =  /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i,\r
-        isset = function(v){\r
-            return typeof v !== 'undefined';\r
-        },\r
-        now = function(){\r
-            return new Date();    \r
-        };\r
-        \r
-    EXTLIB.Anim = {\r
-        motion : function(el, args, duration, easing, cb, scope) {\r
-            return this.run(el, args, duration, easing, cb, scope, Ext.lib.Motion);\r
-        },\r
-\r
-        run : function(el, args, duration, easing, cb, scope, type) {\r
-            type = type || Ext.lib.AnimBase;\r
-            if (typeof easing == "string") {\r
-                easing = Ext.lib.Easing[easing];\r
-            }\r
-            var anim = new type(el, args, duration, easing);\r
-            anim.animateX(function() {\r
-                if(Ext.isFunction(cb)){\r
-                    cb.call(scope);\r
-                }\r
-            });\r
-            return anim;\r
-        }\r
-    };\r
-    \r
-    EXTLIB.AnimBase = function(el, attributes, duration, method) {\r
-        if (el) {\r
-            this.init(el, attributes, duration, method);\r
-        }\r
-    };\r
-\r
-    EXTLIB.AnimBase.prototype = {\r
-        doMethod: function(attr, start, end) {\r
-            var me = this;\r
-            return me.method(me.curFrame, start, end - start, me.totalFrames);\r
-        },\r
-\r
-\r
-        setAttr: function(attr, val, unit) {\r
-            if (noNegatives.test(attr) && val < 0) {\r
-                val = 0;\r
-            }\r
-            Ext.fly(this.el, '_anim').setStyle(attr, val + unit);\r
-        },\r
-\r
-\r
-        getAttr: function(attr) {\r
-            var el = Ext.fly(this.el),\r
-                val = el.getStyle(attr),\r
-                a = offsetAttribute.exec(attr) || []\r
-\r
-            if (val !== 'auto' && !offsetUnit.test(val)) {\r
-                return parseFloat(val);\r
-            }\r
-\r
-            return (!!(a[2]) || (el.getStyle('position') == 'absolute' && !!(a[3]))) ? el.dom['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)] : 0;\r
-        },\r
-\r
-\r
-        getDefaultUnit: function(attr) {\r
-            return defaultUnit.test(attr) ? 'px' : '';\r
-        },\r
-\r
-        animateX : function(callback, scope) {\r
-            var me = this,\r
-                f = function() {\r
-                me.onComplete.removeListener(f);\r
-                if (Ext.isFunction(callback)) {\r
-                    callback.call(scope || me, me);\r
-                }\r
-            };\r
-            me.onComplete.addListener(f, me);\r
-            me.animate();\r
-        },\r
-\r
-\r
-        setRunAttr: function(attr) {            \r
-            var me = this,\r
-                a = this.attributes[attr],\r
-                to = a.to,\r
-                by = a.by,\r
-                from = a.from,\r
-                unit = a.unit,\r
-                ra = (this.runAttrs[attr] = {}),\r
-                end;\r
-\r
-            if (!isset(to) && !isset(by)){\r
-                return false;\r
-            }\r
-\r
-            var start = isset(from) ? from : me.getAttr(attr);\r
-            if (isset(to)) {\r
-                end = to;\r
-            }else if(isset(by)) {\r
-                if (Ext.isArray(start)){\r
-                    end = [];\r
-                                       for(var i=0,len=start.length; i<len; i++) {\r
-                                               end[i] = start[i] + by[i];\r
-                                       }\r
-                }else{\r
-                    end = start + by;\r
-                }\r
-            }\r
-\r
-            Ext.apply(ra, {\r
-                start: start,\r
-                end: end,\r
-                unit: isset(unit) ? unit : me.getDefaultUnit(attr)\r
-            });\r
-        },\r
-\r
-\r
-        init: function(el, attributes, duration, method) {\r
-            var me = this,\r
-                actualFrames = 0,\r
-                mgr = EXTLIB.AnimMgr;\r
-                \r
-            Ext.apply(me, {\r
-                isAnimated: false,\r
-                startTime: null,\r
-                el: Ext.getDom(el),\r
-                attributes: attributes || {},\r
-                duration: duration || 1,\r
-                method: method || EXTLIB.Easing.easeNone,\r
-                useSec: true,\r
-                curFrame: 0,\r
-                totalFrames: mgr.fps,\r
-                runAttrs: {},\r
-                animate: function(){\r
-                    var me = this,\r
-                        d = me.duration;\r
-                    \r
-                    if(me.isAnimated){\r
-                        return false;\r
-                    }\r
-\r
-                    me.curFrame = 0;\r
-                    me.totalFrames = me.useSec ? Math.ceil(mgr.fps * d) : d;\r
-                    mgr.registerElement(me); \r
-                },\r
-                \r
-                stop: function(finish){\r
-                    var me = this;\r
-                \r
-                    if(finish){\r
-                        me.curFrame = me.totalFrames;\r
-                        me._onTween.fire();\r
-                    }\r
-                    mgr.stop(me);\r
-                }\r
-            });\r
-\r
-            var onStart = function(){\r
-                var me = this,\r
-                    attr;\r
-                \r
-                me.onStart.fire();\r
-                me.runAttrs = {};\r
-                for(attr in this.attributes){\r
-                    this.setRunAttr(attr);\r
-                }\r
-\r
-                me.isAnimated = true;\r
-                me.startTime = now();\r
-                actualFrames = 0;\r
-            };\r
-\r
-\r
-            var onTween = function(){\r
-                var me = this;\r
-\r
-                me.onTween.fire({\r
-                    duration: now() - me.startTime,\r
-                    curFrame: me.curFrame\r
-                });\r
-\r
-                var ra = me.runAttrs;\r
-                for (var attr in ra) {\r
-                    this.setAttr(attr, me.doMethod(attr, ra[attr].start, ra[attr].end), ra[attr].unit);\r
-                }\r
-\r
-                ++actualFrames;\r
-            };\r
-\r
-            var onComplete = function() {\r
-                var me = this,\r
-                    actual = (now() - me.startTime) / 1000,\r
-                    data = {\r
-                        duration: actual,\r
-                        frames: actualFrames,\r
-                        fps: actualFrames / actual\r
-                    };\r
-\r
-                me.isAnimated = false;\r
-                actualFrames = 0;\r
-                me.onComplete.fire(data);\r
-            };\r
-\r
-            me.onStart = new Ext.util.Event(me);\r
-            me.onTween = new Ext.util.Event(me);            \r
-            me.onComplete = new Ext.util.Event(me);\r
-            (me._onStart = new Ext.util.Event(me)).addListener(onStart);\r
-            (me._onTween = new Ext.util.Event(me)).addListener(onTween);\r
-            (me._onComplete = new Ext.util.Event(me)).addListener(onComplete); \r
-        }\r
-    };\r
-\r
-\r
-    Ext.lib.AnimMgr = new function() {\r
-        var me = this,\r
-            thread = null,\r
-            queue = [],\r
-            tweenCount = 0;\r
-\r
-\r
-        Ext.apply(me, {\r
-            fps: 1000,\r
-            delay: 1,\r
-            registerElement: function(tween){\r
-                queue.push(tween);\r
-                ++tweenCount;\r
-                tween._onStart.fire();\r
-                me.start();\r
-            },\r
-            \r
-            unRegister: function(tween, index){\r
-                tween._onComplete.fire();\r
-                index = index || getIndex(tween);\r
-                if (index != -1) {\r
-                    queue.splice(index, 1);\r
-                }\r
-\r
-                if (--tweenCount <= 0) {\r
-                    me.stop();\r
-                }\r
-            },\r
-            \r
-            start: function(){\r
-                if(thread === null){\r
-                    thread = setInterval(me.run, me.delay);\r
-                }\r
-            },\r
-            \r
-            stop: function(tween){\r
-                if(!tween){\r
-                    clearInterval(thread);\r
-                    for(var i = 0, len = queue.length; i < len; ++i){\r
-                        if(queue[0].isAnimated){\r
-                            me.unRegister(queue[0], 0);\r
-                        }\r
-                    }\r
-\r
-                    queue = [];\r
-                    thread = null;\r
-                    tweenCount = 0;\r
-                }else{\r
-                    me.unRegister(tween);\r
-                }\r
-            },\r
-            \r
-            run: function(){\r
-                var tf, i, len, tween;\r
-                for(i = 0, len = queue.length; i<len; i++) {\r
-                    tween = queue[i];\r
-                    if(tween && tween.isAnimated){\r
-                        tf = tween.totalFrames;\r
-                        if(tween.curFrame < tf || tf === null){\r
-                            ++tween.curFrame;\r
-                            if(tween.useSec){\r
-                                correctFrame(tween);\r
-                            }\r
-                            tween._onTween.fire();\r
-                        }else{\r
-                            me.stop(tween);\r
-                        }\r
-                    }                   \r
-                }\r
-            }\r
-        });\r
-\r
-        var getIndex = function(anim) {\r
-            var i, len;\r
-            for(i = 0, len = queue.length; i<len; i++) {\r
-                if(queue[i] === anim) {\r
-                    return i;\r
-                }\r
-            }\r
-            return -1;\r
-        };\r
-\r
-        var correctFrame = function(tween) {\r
-            var frames = tween.totalFrames,\r
-                frame = tween.curFrame,\r
-                duration = tween.duration,\r
-                expected = (frame * duration * 1000 / frames),\r
-                elapsed = (now() - tween.startTime),\r
-                tweak = 0;\r
-\r
-            if(elapsed < duration * 1000){\r
-                tweak = Math.round((elapsed / expected - 1) * frame);\r
-            }else{\r
-                tweak = frames - (frame + 1);\r
-            }\r
-            if(tweak > 0 && isFinite(tweak)){\r
-                if(tween.curFrame + tweak >= frames){\r
-                    tweak = frames - (frame + 1);\r
-                }\r
-                tween.curFrame += tweak;\r
-            }\r
-        };\r
-    };\r
-\r
-    EXTLIB.Bezier = new function() {\r
-\r
-        this.getPosition = function(points, t) {\r
-            var n = points.length,\r
-                tmp = [],\r
-                c = 1 - t, \r
-                i,\r
-                j;\r
-\r
-            for (i = 0; i < n; ++i) {\r
-                tmp[i] = [points[i][0], points[i][1]];\r
-            }\r
-\r
-            for (j = 1; j < n; ++j) {\r
-                for (i = 0; i < n - j; ++i) {\r
-                    tmp[i][0] = c * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];\r
-                    tmp[i][1] = c * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1];\r
-                }\r
-            }\r
-\r
-            return [ tmp[0][0], tmp[0][1] ];\r
-\r
-        };\r
-    };\r
-\r
-\r
-    EXTLIB.Easing = {\r
-        easeNone: function (t, b, c, d) {\r
-            return c * t / d + b;\r
-        },\r
-\r
-\r
-        easeIn: function (t, b, c, d) {\r
-            return c * (t /= d) * t + b;\r
-        },\r
-\r
-\r
-        easeOut: function (t, b, c, d) {\r
-            return -c * (t /= d) * (t - 2) + b;\r
-        }\r
-    };\r
-\r
-    (function() {\r
-        EXTLIB.Motion = function(el, attributes, duration, method) {\r
-            if (el) {\r
-                EXTLIB.Motion.superclass.constructor.call(this, el, attributes, duration, method);\r
-            }\r
-        };\r
-\r
-        Ext.extend(EXTLIB.Motion, Ext.lib.AnimBase);\r
-\r
-        var superclass = EXTLIB.Motion.superclass,\r
-            proto = EXTLIB.Motion.prototype,\r
-            pointsRe = /^points$/i;\r
-\r
-        Ext.apply(EXTLIB.Motion.prototype, {\r
-            setAttr: function(attr, val, unit){\r
-                var me = this,\r
-                    setAttr = superclass.setAttr;\r
-                    \r
-                if (pointsRe.test(attr)) {\r
-                    unit = unit || 'px';\r
-                    setAttr.call(me, 'left', val[0], unit);\r
-                    setAttr.call(me, 'top', val[1], unit);\r
-                } else {\r
-                    setAttr.call(me, attr, val, unit);\r
-                }\r
-            },\r
-            \r
-            getAttr: function(attr){\r
-                var me = this,\r
-                    getAttr = superclass.getAttr;\r
-                    \r
-                return pointsRe.test(attr) ? [getAttr.call(me, 'left'), getAttr.call(me, 'top')] : getAttr.call(me, attr);\r
-            },\r
-            \r
-            doMethod: function(attr, start, end){\r
-                var me = this;\r
-                \r
-                return pointsRe.test(attr)\r
-                        ? EXTLIB.Bezier.getPosition(me.runAttrs[attr], me.method(me.curFrame, 0, 100, me.totalFrames) / 100)\r
-                        : superclass.doMethod.call(me, attr, start, end);\r
-            },\r
-            \r
-            setRunAttr: function(attr){\r
-                if(pointsRe.test(attr)){\r
-                    \r
-                    var me = this,\r
-                        el = this.el,\r
-                        points = this.attributes.points,\r
-                        control = points.control || [],\r
-                        from = points.from,\r
-                        to = points.to,\r
-                        by = points.by,\r
-                        DOM = EXTLIB.Dom,\r
-                        start,\r
-                        i,\r
-                        end,\r
-                        len,\r
-                        ra;\r
-                  \r
-\r
-                    if(control.length > 0 && !Ext.isArray(control[0])){\r
-                        control = [control];\r
-                    }else{\r
-                        /*\r
-                        var tmp = [];\r
-                        for (i = 0,len = control.length; i < len; ++i) {\r
-                            tmp[i] = control[i];\r
-                        }\r
-                        control = tmp;\r
-                        */\r
-                    }\r
-\r
-                    Ext.fly(el, '_anim').position();\r
-                    DOM.setXY(el, isset(from) ? from : DOM.getXY(el));\r
-                    start = me.getAttr('points');\r
-\r
-\r
-                    if(isset(to)){\r
-                        end = translateValues.call(me, to, start);\r
-                        for (i = 0,len = control.length; i < len; ++i) {\r
-                            control[i] = translateValues.call(me, control[i], start);\r
-                        }\r
-                    } else if (isset(by)) {\r
-                        end = [start[0] + by[0], start[1] + by[1]];\r
-\r
-                        for (i = 0,len = control.length; i < len; ++i) {\r
-                            control[i] = [ start[0] + control[i][0], start[1] + control[i][1] ];\r
-                        }\r
-                    }\r
-\r
-                    ra = this.runAttrs[attr] = [start];\r
-                    if (control.length > 0) {\r
-                        ra = ra.concat(control);\r
-                    }\r
-\r
-                    ra[ra.length] = end;\r
-                }else{\r
-                    superclass.setRunAttr.call(this, attr);\r
-                }\r
-            }\r
-        });\r
-\r
-        var translateValues = function(val, start) {\r
-            var pageXY = EXTLIB.Dom.getXY(this.el);\r
-            return [val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + start[1]];\r
-        };\r
-    })();\r
-})();// Easing functions\r
-(function(){\r
-       // shortcuts to aid compression\r
-       var abs = Math.abs,\r
-               pi = Math.PI,\r
-               asin = Math.asin,\r
-               pow = Math.pow,\r
-               sin = Math.sin,\r
-               EXTLIB = Ext.lib;\r
-               \r
-    Ext.apply(EXTLIB.Easing, {\r
-        \r
-        easeBoth: function (t, b, c, d) {\r
-               return ((t /= d / 2) < 1)  ?  c / 2 * t * t + b  :  -c / 2 * ((--t) * (t - 2) - 1) + b;               \r
-        },\r
-        \r
-        easeInStrong: function (t, b, c, d) {\r
-            return c * (t /= d) * t * t * t + b;\r
-        },\r
-\r
-        easeOutStrong: function (t, b, c, d) {\r
-            return -c * ((t = t / d - 1) * t * t * t - 1) + b;\r
-        },\r
-\r
-        easeBothStrong: function (t, b, c, d) {\r
-            return ((t /= d / 2) < 1)  ?  c / 2 * t * t * t * t + b  :  -c / 2 * ((t -= 2) * t * t * t - 2) + b;\r
-        },\r
-\r
-        elasticIn: function (t, b, c, d, a, p) {\r
-               if (t == 0 || (t /= d) == 1) {\r
-                return t == 0 ? b : b + c;\r
-            }              \r
-            p = p || (d * .3);             \r
-\r
-                       var s;\r
-                       if (a >= abs(c)) {\r
-                               s = p / (2 * pi) * asin(c / a);\r
-                       } else {\r
-                               a = c;\r
-                               s = p / 4;\r
-                       }\r
-       \r
-            return -(a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b;\r
-                     \r
-        },     \r
-       \r
-               elasticOut: function (t, b, c, d, a, p) {\r
-               if (t == 0 || (t /= d) == 1) {\r
-                return t == 0 ? b : b + c;\r
-            }              \r
-            p = p || (d * .3);             \r
-\r
-                       var s;\r
-                       if (a >= abs(c)) {\r
-                               s = p / (2 * pi) * asin(c / a);\r
-                       } else {\r
-                               a = c;\r
-                               s = p / 4;\r
-                       }\r
-       \r
-            return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p) + c + b;       \r
-        },     \r
-       \r
-        elasticBoth: function (t, b, c, d, a, p) {\r
-            if (t == 0 || (t /= d / 2) == 2) {\r
-                return t == 0 ? b : b + c;\r
-            }                          \r
-                   \r
-            p = p || (d * (.3 * 1.5));                     \r
-\r
-            var s;\r
-            if (a >= abs(c)) {\r
-                   s = p / (2 * pi) * asin(c / a);\r
-            } else {\r
-                   a = c;\r
-                s = p / 4;\r
-            }\r
-\r
-            return t < 1 ?\r
-                       -.5 * (a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b :\r
-                    a * pow(2, -10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p) * .5 + c + b;\r
-        },\r
-\r
-        backIn: function (t, b, c, d, s) {\r
-            s = s ||  1.70158;                     \r
-            return c * (t /= d) * t * ((s + 1) * t - s) + b;\r
-        },\r
-\r
-\r
-        backOut: function (t, b, c, d, s) {\r
-            if (!s) {\r
-                s = 1.70158;\r
-            }\r
-            return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\r
-        },\r
-\r
-\r
-        backBoth: function (t, b, c, d, s) {\r
-            s = s || 1.70158;              \r
-\r
-            return ((t /= d / 2 ) < 1) ?\r
-                    c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b :                 \r
-                       c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;\r
-        },\r
-\r
-\r
-        bounceIn: function (t, b, c, d) {\r
-            return c - EXTLIB.Easing.bounceOut(d - t, 0, c, d) + b;\r
-        },\r
-\r
-\r
-        bounceOut: function (t, b, c, d) {\r
-        if ((t /= d) < (1 / 2.75)) {\r
-                return c * (7.5625 * t * t) + b;\r
-            } else if (t < (2 / 2.75)) {\r
-                return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;\r
-            } else if (t < (2.5 / 2.75)) {\r
-                return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;\r
-            }\r
-            return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;\r
-        },\r
-\r
-\r
-        bounceBoth: function (t, b, c, d) {\r
-            return (t < d / 2) ?\r
-                   EXTLIB.Easing.bounceIn(t * 2, 0, c, d) * .5 + b : \r
-                  EXTLIB.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;\r
-        }\r
-    });\r
-})();\r
-\r
-(function() {\r
-    var EXTLIB = Ext.lib;\r
-       // Color Animation\r
-       EXTLIB.Anim.color = function(el, args, duration, easing, cb, scope) {\r
-           return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.ColorAnim);\r
-       }\r
-       \r
-    EXTLIB.ColorAnim = function(el, attributes, duration, method) {\r
-        EXTLIB.ColorAnim.superclass.constructor.call(this, el, attributes, duration, method);\r
-    };\r
-\r
-    Ext.extend(EXTLIB.ColorAnim, EXTLIB.AnimBase);\r
-\r
-    var superclass = EXTLIB.ColorAnim.superclass,\r
-       colorRE = /color$/i,\r
-       transparentRE = /^transparent|rgba\(0, 0, 0, 0\)$/,\r
-        rgbRE = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,\r
-        hexRE= /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,\r
-        hex3RE = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,\r
-        isset = function(v){\r
-            return typeof v !== 'undefined';\r
-        }\r
-               \r
-       // private      \r
-    function parseColor(s) {   \r
-        var pi = parseInt,\r
-            base,\r
-            out = null,\r
-            c;\r
-        \r
-           if (s.length == 3) {\r
-            return s;\r
-        }\r
-               \r
-        Ext.each([hexRE, rgbRE, hex3RE], function(re, idx){\r
-            base = (idx % 2 == 0) ? 16 : 10;\r
-            c = re.exec(s);\r
-            if(c && c.length == 4){\r
-                out = [pi(c[1], base), pi(c[2], base), pi(c[3], base)];\r
-                return false;\r
-            }\r
-        });\r
-        return out;\r
-    }  \r
-\r
-    Ext.apply(EXTLIB.ColorAnim.prototype, {\r
-        getAttr : function(attr) {\r
-            var me = this,\r
-                el = me.el,\r
-                val;                \r
-            if(colorRE.test(attr)){\r
-                while(el && transparentRE.test(val = Ext.fly(el).getStyle(attr))){\r
-                    el = el.parentNode;\r
-                    val = "fff";\r
-                }\r
-            }else{\r
-                val = superclass.getAttr.call(me, attr);\r
-            }\r
-            return val;\r
-        },\r
-\r
-        doMethod : function(attr, start, end) {\r
-            var me = this,\r
-               val,\r
-               floor = Math.floor,\r
-                               i, \r
-                len,\r
-                v;            \r
-\r
-            if(colorRE.test(attr)){\r
-                val = [];\r
-                               \r
-                               for(i = 0, len = start.length; i < len; i++) {\r
-                                       v = start[i];\r
-                                       val[i] = superclass.doMethod.call(me, attr, v, end[i]);\r
-                               }\r
-                val = 'rgb(' + floor(val[0]) + ',' + floor(val[1]) + ',' + floor(val[2]) + ')';\r
-            }else{\r
-                val = superclass.doMethod.call(me, attr, start, end);\r
-            }\r
-            return val;\r
-        },\r
-\r
-        setRunAttr : function(attr) {\r
-            var me = this,\r
-                a = me.attributes[attr],\r
-                to = a.to,\r
-                by = a.by,\r
-                ra;\r
-                \r
-            superclass.setRunAttr.call(me, attr);\r
-            ra = me.runAttrs[attr];\r
-            if(colorRE.test(attr)){\r
-                var start = parseColor(ra.start),\r
-                    end = parseColor(ra.end);\r
-\r
-                if(!isset(to) && isset(by)){\r
-                    end = parseColor(by);\r
-                                       for(var i=0,len=start.length; i<len; i++) {\r
-                                               end[i] = start[i] + end[i];\r
-                                       }\r
-                }\r
-                ra.start = start;\r
-                ra.end = end;\r
-            }\r
-        }\r
-       });\r
-})();  \r
-\r
-       \r
-(function() {\r
-           // Scroll Animation \r
-    var EXTLIB = Ext.lib;\r
-       EXTLIB.Anim.scroll = function(el, args, duration, easing, cb, scope) {          \r
-           return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.Scroll);\r
-       }\r
-       \r
-    EXTLIB.Scroll = function(el, attributes, duration, method) {\r
-        if(el){\r
-            EXTLIB.Scroll.superclass.constructor.call(this, el, attributes, duration, method);\r
-        }\r
-    };\r
-\r
-    Ext.extend(EXTLIB.Scroll, EXTLIB.ColorAnim);\r
-\r
-    var superclass = EXTLIB.Scroll.superclass,\r
-       SCROLL = 'scroll';\r
-\r
-    Ext.apply(EXTLIB.Scroll.prototype, {\r
-\r
-        doMethod : function(attr, start, end) {\r
-            var val,\r
-               me = this,\r
-               curFrame = me.curFrame,\r
-               totalFrames = me.totalFrames;\r
-\r
-            if(attr == SCROLL){\r
-                val = [me.method(curFrame, start[0], end[0] - start[0], totalFrames),\r
-                       me.method(curFrame, start[1], end[1] - start[1], totalFrames)];\r
-            }else{\r
-                val = superclass.doMethod.call(me, attr, start, end);\r
-            }\r
-            return val;\r
-        },\r
-\r
-        getAttr : function(attr) {\r
-            var me = this;\r
-\r
-            if (attr == SCROLL) {\r
-                return [me.el.scrollLeft, me.el.scrollTop];\r
-            }else{\r
-                return superclass.getAttr.call(me, attr);\r
-            }\r
-        },\r
-\r
-        setAttr : function(attr, val, unit) {\r
-            var me = this;\r
-\r
-            if(attr == SCROLL){\r
-                me.el.scrollLeft = val[0];\r
-                me.el.scrollTop = val[1];\r
-            }else{\r
-                superclass.setAttr.call(me, attr, val, unit);\r
-            }\r
-        }\r
-    });\r
-})();  \r
-       if(Ext.isIE) {\r
-        function fnCleanUp() {\r
-            var p = Function.prototype;\r
-            delete p.createSequence;\r
-            delete p.defer;\r
-            delete p.createDelegate;\r
-            delete p.createCallback;\r
-            delete p.createInterceptor;\r
-\r
-            window.detachEvent("onunload", fnCleanUp);\r
-        }\r
-        window.attachEvent("onunload", fnCleanUp);\r
-    }\r
+/*
+* Portions of this file are based on pieces of Yahoo User Interface Library
+* Copyright (c) 2007, Yahoo! Inc. All rights reserved.
+* YUI licensed under the BSD License:
+* http://developer.yahoo.net/yui/license.txt
+*/
+Ext.lib.Ajax = function() {
+    var activeX = ['MSXML2.XMLHTTP.3.0',
+                   'MSXML2.XMLHTTP',
+                   'Microsoft.XMLHTTP'],
+        CONTENTTYPE = 'Content-Type';
+
+    // private
+    function setHeader(o) {
+        var conn = o.conn,
+            prop;
+
+        function setTheHeaders(conn, headers){
+            for (prop in headers) {
+                if (headers.hasOwnProperty(prop)) {
+                    conn.setRequestHeader(prop, headers[prop]);
+                }
+            }
+        }
+
+        if (pub.defaultHeaders) {
+            setTheHeaders(conn, pub.defaultHeaders);
+        }
+
+        if (pub.headers) {
+            setTheHeaders(conn, pub.headers);
+            delete pub.headers;
+        }
+    }
+
+    // private
+    function createExceptionObject(tId, callbackArg, isAbort, isTimeout) {
+        return {
+            tId : tId,
+            status : isAbort ? -1 : 0,
+            statusText : isAbort ? 'transaction aborted' : 'communication failure',
+            isAbort: isAbort,
+            isTimeout: isTimeout,
+            argument : callbackArg
+        };
+    }
+
+    // private
+    function initHeader(label, value) {
+        (pub.headers = pub.headers || {})[label] = value;
+    }
+
+    // private
+    function createResponseObject(o, callbackArg) {
+        var headerObj = {},
+            headerStr,
+            conn = o.conn,
+            t,
+            s,
+            // see: https://prototype.lighthouseapp.com/projects/8886/tickets/129-ie-mangles-http-response-status-code-204-to-1223
+            isBrokenStatus = conn.status == 1223;
+
+        try {
+            headerStr = o.conn.getAllResponseHeaders();
+            Ext.each(headerStr.replace(/\r\n/g, '\n').split('\n'), function(v){
+                t = v.indexOf(':');
+                if(t >= 0){
+                    s = v.substr(0, t).toLowerCase();
+                    if(v.charAt(t + 1) == ' '){
+                        ++t;
+                    }
+                    headerObj[s] = v.substr(t + 1);
+                }
+            });
+        } catch(e) {}
+
+        return {
+            tId : o.tId,
+            // Normalize the status and statusText when IE returns 1223, see the above link.
+            status : isBrokenStatus ? 204 : conn.status,
+            statusText : isBrokenStatus ? 'No Content' : conn.statusText,
+            getResponseHeader : function(header){return headerObj[header.toLowerCase()];},
+            getAllResponseHeaders : function(){return headerStr},
+            responseText : conn.responseText,
+            responseXML : conn.responseXML,
+            argument : callbackArg
+        };
+    }
+
+    // private
+    function releaseObject(o) {
+        if (o.tId) {
+            pub.conn[o.tId] = null;
+        }
+        o.conn = null;
+        o = null;
+    }
+
+    // private
+    function handleTransactionResponse(o, callback, isAbort, isTimeout) {
+        if (!callback) {
+            releaseObject(o);
+            return;
+        }
+
+        var httpStatus, responseObject;
+
+        try {
+            if (o.conn.status !== undefined && o.conn.status != 0) {
+                httpStatus = o.conn.status;
+            }
+            else {
+                httpStatus = 13030;
+            }
+        }
+        catch(e) {
+            httpStatus = 13030;
+        }
+
+        if ((httpStatus >= 200 && httpStatus < 300) || (Ext.isIE && httpStatus == 1223)) {
+            responseObject = createResponseObject(o, callback.argument);
+            if (callback.success) {
+                if (!callback.scope) {
+                    callback.success(responseObject);
+                }
+                else {
+                    callback.success.apply(callback.scope, [responseObject]);
+                }
+            }
+        }
+        else {
+            switch (httpStatus) {
+                case 12002:
+                case 12029:
+                case 12030:
+                case 12031:
+                case 12152:
+                case 13030:
+                    responseObject = createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false), isTimeout);
+                    if (callback.failure) {
+                        if (!callback.scope) {
+                            callback.failure(responseObject);
+                        }
+                        else {
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+                    break;
+                default:
+                    responseObject = createResponseObject(o, callback.argument);
+                    if (callback.failure) {
+                        if (!callback.scope) {
+                            callback.failure(responseObject);
+                        }
+                        else {
+                            callback.failure.apply(callback.scope, [responseObject]);
+                        }
+                    }
+            }
+        }
+
+        releaseObject(o);
+        responseObject = null;
+    }
+
+    // private
+    function handleReadyState(o, callback){
+    callback = callback || {};
+        var conn = o.conn,
+            tId = o.tId,
+            poll = pub.poll,
+            cbTimeout = callback.timeout || null;
+
+        if (cbTimeout) {
+            pub.conn[tId] = conn;
+            pub.timeout[tId] = setTimeout(function() {
+                pub.abort(o, callback, true);
+            }, cbTimeout);
+        }
+
+        poll[tId] = setInterval(
+            function() {
+                if (conn && conn.readyState == 4) {
+                    clearInterval(poll[tId]);
+                    poll[tId] = null;
+
+                    if (cbTimeout) {
+                        clearTimeout(pub.timeout[tId]);
+                        pub.timeout[tId] = null;
+                    }
+
+                    handleTransactionResponse(o, callback);
+                }
+            },
+            pub.pollInterval);
+    }
+
+    // private
+    function asyncRequest(method, uri, callback, postData) {
+        var o = getConnectionObject() || null;
+
+        if (o) {
+            o.conn.open(method, uri, true);
+
+            if (pub.useDefaultXhrHeader) {
+                initHeader('X-Requested-With', pub.defaultXhrHeader);
+            }
+
+            if(postData && pub.useDefaultHeader && (!pub.headers || !pub.headers[CONTENTTYPE])){
+                initHeader(CONTENTTYPE, pub.defaultPostHeader);
+            }
+
+            if (pub.defaultHeaders || pub.headers) {
+                setHeader(o);
+            }
+
+            handleReadyState(o, callback);
+            o.conn.send(postData || null);
+        }
+        return o;
+    }
+
+    // private
+    function getConnectionObject() {
+        var o;
+
+        try {
+            if (o = createXhrObject(pub.transactionId)) {
+                pub.transactionId++;
+            }
+        } catch(e) {
+        } finally {
+            return o;
+        }
+    }
+
+    // private
+    function createXhrObject(transactionId) {
+        var http;
+
+        try {
+            http = new XMLHttpRequest();
+        } catch(e) {
+            for (var i = 0; i < activeX.length; ++i) {
+                try {
+                    http = new ActiveXObject(activeX[i]);
+                    break;
+                } catch(e) {}
+            }
+        } finally {
+            return {conn : http, tId : transactionId};
+        }
+    }
+
+    var pub = {
+        request : function(method, uri, cb, data, options) {
+            if(options){
+                var me = this,
+                    xmlData = options.xmlData,
+                    jsonData = options.jsonData,
+                    hs;
+
+                Ext.applyIf(me, options);
+
+                if(xmlData || jsonData){
+                    hs = me.headers;
+                    if(!hs || !hs[CONTENTTYPE]){
+                        initHeader(CONTENTTYPE, xmlData ? 'text/xml' : 'application/json');
+                    }
+                    data = xmlData || (!Ext.isPrimitive(jsonData) ? Ext.encode(jsonData) : jsonData);
+                }
+            }
+            return asyncRequest(method || options.method || "POST", uri, cb, data);
+        },
+
+        serializeForm : function(form) {
+            var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements,
+                hasSubmit = false,
+                encoder = encodeURIComponent,
+                element,
+                options,
+                name,
+                val,
+                data = '',
+                type;
+
+            Ext.each(fElements, function(element) {
+                name = element.name;
+                type = element.type;
+
+                if (!element.disabled && name){
+                    if(/select-(one|multiple)/i.test(type)) {
+                        Ext.each(element.options, function(opt) {
+                            if (opt.selected) {
+                                data += String.format("{0}={1}&", encoder(name), encoder((opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttribute('value') !== null) ? opt.value : opt.text));
+                            }
+                        });
+                    } else if(!/file|undefined|reset|button/i.test(type)) {
+                            if(!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)){
+
+                                data += encoder(name) + '=' + encoder(element.value) + '&';
+                                hasSubmit = /submit/i.test(type);
+                            }
+                    }
+                }
+            });
+            return data.substr(0, data.length - 1);
+        },
+
+        useDefaultHeader : true,
+        defaultPostHeader : 'application/x-www-form-urlencoded; charset=UTF-8',
+        useDefaultXhrHeader : true,
+        defaultXhrHeader : 'XMLHttpRequest',
+        poll : {},
+        timeout : {},
+        conn: {},
+        pollInterval : 50,
+        transactionId : 0,
+
+//  This is never called - Is it worth exposing this?
+//          setProgId : function(id) {
+//              activeX.unshift(id);
+//          },
+
+//  This is never called - Is it worth exposing this?
+//          setDefaultPostHeader : function(b) {
+//              this.useDefaultHeader = b;
+//          },
+
+//  This is never called - Is it worth exposing this?
+//          setDefaultXhrHeader : function(b) {
+//              this.useDefaultXhrHeader = b;
+//          },
+
+//  This is never called - Is it worth exposing this?
+//          setPollingInterval : function(i) {
+//              if (typeof i == 'number' && isFinite(i)) {
+//                  this.pollInterval = i;
+//              }
+//          },
+
+//  This is never called - Is it worth exposing this?
+//          resetDefaultHeaders : function() {
+//              this.defaultHeaders = null;
+//          },
+
+        abort : function(o, callback, isTimeout) {
+            var me = this,
+                tId = o.tId,
+                isAbort = false;
+
+            if (me.isCallInProgress(o)) {
+                o.conn.abort();
+                clearInterval(me.poll[tId]);
+                me.poll[tId] = null;
+                clearTimeout(pub.timeout[tId]);
+                me.timeout[tId] = null;
+
+                handleTransactionResponse(o, callback, (isAbort = true), isTimeout);
+            }
+            return isAbort;
+        },
+
+        isCallInProgress : function(o) {
+            // if there is a connection and readyState is not 0 or 4
+            return o.conn && !{0:true,4:true}[o.conn.readyState];
+        }
+    };
+    return pub;
+}();   Ext.lib.Region = function(t, r, b, l) {
+               var me = this;
+        me.top = t;
+        me[1] = t;
+        me.right = r;
+        me.bottom = b;
+        me.left = l;
+        me[0] = l;
+    };
+
+    Ext.lib.Region.prototype = {
+        contains : function(region) {
+               var me = this;
+            return ( region.left >= me.left &&
+                     region.right <= me.right &&
+                     region.top >= me.top &&
+                     region.bottom <= me.bottom );
+
+        },
+
+        getArea : function() {
+               var me = this;
+            return ( (me.bottom - me.top) * (me.right - me.left) );
+        },
+
+        intersect : function(region) {
+            var me = this,
+               t = Math.max(me.top, region.top),
+               r = Math.min(me.right, region.right),
+               b = Math.min(me.bottom, region.bottom),
+               l = Math.max(me.left, region.left);
+
+            if (b >= t && r >= l) {
+                return new Ext.lib.Region(t, r, b, l);
+            }
+        },
+        
+        union : function(region) {
+               var me = this,
+               t = Math.min(me.top, region.top),
+               r = Math.max(me.right, region.right),
+               b = Math.max(me.bottom, region.bottom),
+               l = Math.min(me.left, region.left);
+
+            return new Ext.lib.Region(t, r, b, l);
+        },
+
+        constrainTo : function(r) {
+               var me = this;
+            me.top = me.top.constrain(r.top, r.bottom);
+            me.bottom = me.bottom.constrain(r.top, r.bottom);
+            me.left = me.left.constrain(r.left, r.right);
+            me.right = me.right.constrain(r.left, r.right);
+            return me;
+        },
+
+        adjust : function(t, l, b, r) {
+               var me = this;
+            me.top += t;
+            me.left += l;
+            me.right += r;
+            me.bottom += b;
+            return me;
+        }
+    };
+
+    Ext.lib.Region.getRegion = function(el) {
+        var p = Ext.lib.Dom.getXY(el),
+               t = p[1],
+               r = p[0] + el.offsetWidth,
+               b = p[1] + el.offsetHeight,
+               l = p[0];
+
+        return new Ext.lib.Region(t, r, b, l);
+    }; Ext.lib.Point = function(x, y) {
+        if (Ext.isArray(x)) {
+            y = x[1];
+            x = x[0];
+        }
+        var me = this;
+        me.x = me.right = me.left = me[0] = x;
+        me.y = me.top = me.bottom = me[1] = y;
+    };
+
+    Ext.lib.Point.prototype = new Ext.lib.Region();
+(function(){
+    var EXTLIB = Ext.lib,
+        noNegatives = /width|height|opacity|padding/i,
+        offsetAttribute = /^((width|height)|(top|left))$/,
+        defaultUnit = /width|height|top$|bottom$|left$|right$/i,
+        offsetUnit =  /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i,
+        isset = function(v){
+            return typeof v !== 'undefined';
+        },
+        now = function(){
+            return new Date();
+        };
+
+    EXTLIB.Anim = {
+        motion : function(el, args, duration, easing, cb, scope) {
+            return this.run(el, args, duration, easing, cb, scope, Ext.lib.Motion);
+        },
+
+        run : function(el, args, duration, easing, cb, scope, type) {
+            type = type || Ext.lib.AnimBase;
+            if (typeof easing == "string") {
+                easing = Ext.lib.Easing[easing];
+            }
+            var anim = new type(el, args, duration, easing);
+            anim.animateX(function() {
+                if(Ext.isFunction(cb)){
+                    cb.call(scope);
+                }
+            });
+            return anim;
+        }
+    };
+
+    EXTLIB.AnimBase = function(el, attributes, duration, method) {
+        if (el) {
+            this.init(el, attributes, duration, method);
+        }
+    };
+
+    EXTLIB.AnimBase.prototype = {
+        doMethod: function(attr, start, end) {
+            var me = this;
+            return me.method(me.curFrame, start, end - start, me.totalFrames);
+        },
+
+
+        setAttr: function(attr, val, unit) {
+            if (noNegatives.test(attr) && val < 0) {
+                val = 0;
+            }
+            Ext.fly(this.el, '_anim').setStyle(attr, val + unit);
+        },
+
+
+        getAttr: function(attr) {
+            var el = Ext.fly(this.el),
+                val = el.getStyle(attr),
+                a = offsetAttribute.exec(attr) || [];
+
+            if (val !== 'auto' && !offsetUnit.test(val)) {
+                return parseFloat(val);
+            }
+
+            return (!!(a[2]) || (el.getStyle('position') == 'absolute' && !!(a[3]))) ? el.dom['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)] : 0;
+        },
+
+
+        getDefaultUnit: function(attr) {
+            return defaultUnit.test(attr) ? 'px' : '';
+        },
+
+        animateX : function(callback, scope) {
+            var me = this,
+                f = function() {
+                me.onComplete.removeListener(f);
+                if (Ext.isFunction(callback)) {
+                    callback.call(scope || me, me);
+                }
+            };
+            me.onComplete.addListener(f, me);
+            me.animate();
+        },
+
+
+        setRunAttr: function(attr) {
+            var me = this,
+                a = this.attributes[attr],
+                to = a.to,
+                by = a.by,
+                from = a.from,
+                unit = a.unit,
+                ra = (this.runAttrs[attr] = {}),
+                end;
+
+            if (!isset(to) && !isset(by)){
+                return false;
+            }
+
+            var start = isset(from) ? from : me.getAttr(attr);
+            if (isset(to)) {
+                end = to;
+            }else if(isset(by)) {
+                if (Ext.isArray(start)){
+                    end = [];
+                    for(var i=0,len=start.length; i<len; i++) {
+                        end[i] = start[i] + by[i];
+                    }
+                }else{
+                    end = start + by;
+                }
+            }
+
+            Ext.apply(ra, {
+                start: start,
+                end: end,
+                unit: isset(unit) ? unit : me.getDefaultUnit(attr)
+            });
+        },
+
+
+        init: function(el, attributes, duration, method) {
+            var me = this,
+                actualFrames = 0,
+                mgr = EXTLIB.AnimMgr;
+
+            Ext.apply(me, {
+                isAnimated: false,
+                startTime: null,
+                el: Ext.getDom(el),
+                attributes: attributes || {},
+                duration: duration || 1,
+                method: method || EXTLIB.Easing.easeNone,
+                useSec: true,
+                curFrame: 0,
+                totalFrames: mgr.fps,
+                runAttrs: {},
+                animate: function(){
+                    var me = this,
+                        d = me.duration;
+
+                    if(me.isAnimated){
+                        return false;
+                    }
+
+                    me.curFrame = 0;
+                    me.totalFrames = me.useSec ? Math.ceil(mgr.fps * d) : d;
+                    mgr.registerElement(me);
+                },
+
+                stop: function(finish){
+                    var me = this;
+
+                    if(finish){
+                        me.curFrame = me.totalFrames;
+                        me._onTween.fire();
+                    }
+                    mgr.stop(me);
+                }
+            });
+
+            var onStart = function(){
+                var me = this,
+                    attr;
+
+                me.onStart.fire();
+                me.runAttrs = {};
+                for(attr in this.attributes){
+                    this.setRunAttr(attr);
+                }
+
+                me.isAnimated = true;
+                me.startTime = now();
+                actualFrames = 0;
+            };
+
+
+            var onTween = function(){
+                var me = this;
+
+                me.onTween.fire({
+                    duration: now() - me.startTime,
+                    curFrame: me.curFrame
+                });
+
+                var ra = me.runAttrs;
+                for (var attr in ra) {
+                    this.setAttr(attr, me.doMethod(attr, ra[attr].start, ra[attr].end), ra[attr].unit);
+                }
+
+                ++actualFrames;
+            };
+
+            var onComplete = function() {
+                var me = this,
+                    actual = (now() - me.startTime) / 1000,
+                    data = {
+                        duration: actual,
+                        frames: actualFrames,
+                        fps: actualFrames / actual
+                    };
+
+                me.isAnimated = false;
+                actualFrames = 0;
+                me.onComplete.fire(data);
+            };
+
+            me.onStart = new Ext.util.Event(me);
+            me.onTween = new Ext.util.Event(me);
+            me.onComplete = new Ext.util.Event(me);
+            (me._onStart = new Ext.util.Event(me)).addListener(onStart);
+            (me._onTween = new Ext.util.Event(me)).addListener(onTween);
+            (me._onComplete = new Ext.util.Event(me)).addListener(onComplete);
+        }
+    };
+
+
+    Ext.lib.AnimMgr = new function() {
+        var me = this,
+            thread = null,
+            queue = [],
+            tweenCount = 0;
+
+
+        Ext.apply(me, {
+            fps: 1000,
+            delay: 1,
+            registerElement: function(tween){
+                queue.push(tween);
+                ++tweenCount;
+                tween._onStart.fire();
+                me.start();
+            },
+
+            unRegister: function(tween, index){
+                tween._onComplete.fire();
+                index = index || getIndex(tween);
+                if (index != -1) {
+                    queue.splice(index, 1);
+                }
+
+                if (--tweenCount <= 0) {
+                    me.stop();
+                }
+            },
+
+            start: function(){
+                if(thread === null){
+                    thread = setInterval(me.run, me.delay);
+                }
+            },
+
+            stop: function(tween){
+                if(!tween){
+                    clearInterval(thread);
+                    for(var i = 0, len = queue.length; i < len; ++i){
+                        if(queue[0].isAnimated){
+                            me.unRegister(queue[0], 0);
+                        }
+                    }
+
+                    queue = [];
+                    thread = null;
+                    tweenCount = 0;
+                }else{
+                    me.unRegister(tween);
+                }
+            },
+
+            run: function(){
+                var tf, i, len, tween;
+                for(i = 0, len = queue.length; i<len; i++) {
+                    tween = queue[i];
+                    if(tween && tween.isAnimated){
+                        tf = tween.totalFrames;
+                        if(tween.curFrame < tf || tf === null){
+                            ++tween.curFrame;
+                            if(tween.useSec){
+                                correctFrame(tween);
+                            }
+                            tween._onTween.fire();
+                        }else{
+                            me.stop(tween);
+                        }
+                    }
+                }
+            }
+        });
+
+        var getIndex = function(anim) {
+            var i, len;
+            for(i = 0, len = queue.length; i<len; i++) {
+                if(queue[i] === anim) {
+                    return i;
+                }
+            }
+            return -1;
+        };
+
+        var correctFrame = function(tween) {
+            var frames = tween.totalFrames,
+                frame = tween.curFrame,
+                duration = tween.duration,
+                expected = (frame * duration * 1000 / frames),
+                elapsed = (now() - tween.startTime),
+                tweak = 0;
+
+            if(elapsed < duration * 1000){
+                tweak = Math.round((elapsed / expected - 1) * frame);
+            }else{
+                tweak = frames - (frame + 1);
+            }
+            if(tweak > 0 && isFinite(tweak)){
+                if(tween.curFrame + tweak >= frames){
+                    tweak = frames - (frame + 1);
+                }
+                tween.curFrame += tweak;
+            }
+        };
+    };
+
+    EXTLIB.Bezier = new function() {
+
+        this.getPosition = function(points, t) {
+            var n = points.length,
+                tmp = [],
+                c = 1 - t,
+                i,
+                j;
+
+            for (i = 0; i < n; ++i) {
+                tmp[i] = [points[i][0], points[i][1]];
+            }
+
+            for (j = 1; j < n; ++j) {
+                for (i = 0; i < n - j; ++i) {
+                    tmp[i][0] = c * tmp[i][0] + t * tmp[parseInt(i + 1, 10)][0];
+                    tmp[i][1] = c * tmp[i][1] + t * tmp[parseInt(i + 1, 10)][1];
+                }
+            }
+
+            return [ tmp[0][0], tmp[0][1] ];
+
+        };
+    };
+
+
+    EXTLIB.Easing = {
+        easeNone: function (t, b, c, d) {
+            return c * t / d + b;
+        },
+
+
+        easeIn: function (t, b, c, d) {
+            return c * (t /= d) * t + b;
+        },
+
+
+        easeOut: function (t, b, c, d) {
+            return -c * (t /= d) * (t - 2) + b;
+        }
+    };
+
+    (function() {
+        EXTLIB.Motion = function(el, attributes, duration, method) {
+            if (el) {
+                EXTLIB.Motion.superclass.constructor.call(this, el, attributes, duration, method);
+            }
+        };
+
+        Ext.extend(EXTLIB.Motion, Ext.lib.AnimBase);
+
+        var superclass = EXTLIB.Motion.superclass,
+            proto = EXTLIB.Motion.prototype,
+            pointsRe = /^points$/i;
+
+        Ext.apply(EXTLIB.Motion.prototype, {
+            setAttr: function(attr, val, unit){
+                var me = this,
+                    setAttr = superclass.setAttr;
+
+                if (pointsRe.test(attr)) {
+                    unit = unit || 'px';
+                    setAttr.call(me, 'left', val[0], unit);
+                    setAttr.call(me, 'top', val[1], unit);
+                } else {
+                    setAttr.call(me, attr, val, unit);
+                }
+            },
+
+            getAttr: function(attr){
+                var me = this,
+                    getAttr = superclass.getAttr;
+
+                return pointsRe.test(attr) ? [getAttr.call(me, 'left'), getAttr.call(me, 'top')] : getAttr.call(me, attr);
+            },
+
+            doMethod: function(attr, start, end){
+                var me = this;
+
+                return pointsRe.test(attr)
+                        ? EXTLIB.Bezier.getPosition(me.runAttrs[attr], me.method(me.curFrame, 0, 100, me.totalFrames) / 100)
+                        : superclass.doMethod.call(me, attr, start, end);
+            },
+
+            setRunAttr: function(attr){
+                if(pointsRe.test(attr)){
+
+                    var me = this,
+                        el = this.el,
+                        points = this.attributes.points,
+                        control = points.control || [],
+                        from = points.from,
+                        to = points.to,
+                        by = points.by,
+                        DOM = EXTLIB.Dom,
+                        start,
+                        i,
+                        end,
+                        len,
+                        ra;
+
+
+                    if(control.length > 0 && !Ext.isArray(control[0])){
+                        control = [control];
+                    }else{
+                        /*
+                        var tmp = [];
+                        for (i = 0,len = control.length; i < len; ++i) {
+                            tmp[i] = control[i];
+                        }
+                        control = tmp;
+                        */
+                    }
+
+                    Ext.fly(el, '_anim').position();
+                    DOM.setXY(el, isset(from) ? from : DOM.getXY(el));
+                    start = me.getAttr('points');
+
+
+                    if(isset(to)){
+                        end = translateValues.call(me, to, start);
+                        for (i = 0,len = control.length; i < len; ++i) {
+                            control[i] = translateValues.call(me, control[i], start);
+                        }
+                    } else if (isset(by)) {
+                        end = [start[0] + by[0], start[1] + by[1]];
+
+                        for (i = 0,len = control.length; i < len; ++i) {
+                            control[i] = [ start[0] + control[i][0], start[1] + control[i][1] ];
+                        }
+                    }
+
+                    ra = this.runAttrs[attr] = [start];
+                    if (control.length > 0) {
+                        ra = ra.concat(control);
+                    }
+
+                    ra[ra.length] = end;
+                }else{
+                    superclass.setRunAttr.call(this, attr);
+                }
+            }
+        });
+
+        var translateValues = function(val, start) {
+            var pageXY = EXTLIB.Dom.getXY(this.el);
+            return [val[0] - pageXY[0] + start[0], val[1] - pageXY[1] + start[1]];
+        };
+    })();
+})();// Easing functions
+(function(){
+    // shortcuts to aid compression
+    var abs = Math.abs,
+        pi = Math.PI,
+        asin = Math.asin,
+        pow = Math.pow,
+        sin = Math.sin,
+        EXTLIB = Ext.lib;
+
+    Ext.apply(EXTLIB.Easing, {
+
+        easeBoth: function (t, b, c, d) {
+            return ((t /= d / 2) < 1)  ?  c / 2 * t * t + b  :  -c / 2 * ((--t) * (t - 2) - 1) + b;
+        },
+
+        easeInStrong: function (t, b, c, d) {
+            return c * (t /= d) * t * t * t + b;
+        },
+
+        easeOutStrong: function (t, b, c, d) {
+            return -c * ((t = t / d - 1) * t * t * t - 1) + b;
+        },
+
+        easeBothStrong: function (t, b, c, d) {
+            return ((t /= d / 2) < 1)  ?  c / 2 * t * t * t * t + b  :  -c / 2 * ((t -= 2) * t * t * t - 2) + b;
+        },
+
+        elasticIn: function (t, b, c, d, a, p) {
+            if (t == 0 || (t /= d) == 1) {
+                return t == 0 ? b : b + c;
+            }
+            p = p || (d * .3);
+
+            var s;
+            if (a >= abs(c)) {
+                s = p / (2 * pi) * asin(c / a);
+            } else {
+                a = c;
+                s = p / 4;
+            }
+
+            return -(a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b;
+
+        },
+
+        elasticOut: function (t, b, c, d, a, p) {
+            if (t == 0 || (t /= d) == 1) {
+                return t == 0 ? b : b + c;
+            }
+            p = p || (d * .3);
+
+            var s;
+            if (a >= abs(c)) {
+                s = p / (2 * pi) * asin(c / a);
+            } else {
+                a = c;
+                s = p / 4;
+            }
+
+            return a * pow(2, -10 * t) * sin((t * d - s) * (2 * pi) / p) + c + b;
+        },
+
+        elasticBoth: function (t, b, c, d, a, p) {
+            if (t == 0 || (t /= d / 2) == 2) {
+                return t == 0 ? b : b + c;
+            }
+
+            p = p || (d * (.3 * 1.5));
+
+            var s;
+            if (a >= abs(c)) {
+                s = p / (2 * pi) * asin(c / a);
+            } else {
+                a = c;
+                s = p / 4;
+            }
+
+            return t < 1 ?
+                    -.5 * (a * pow(2, 10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p)) + b :
+                    a * pow(2, -10 * (t -= 1)) * sin((t * d - s) * (2 * pi) / p) * .5 + c + b;
+        },
+
+        backIn: function (t, b, c, d, s) {
+            s = s ||  1.70158;
+            return c * (t /= d) * t * ((s + 1) * t - s) + b;
+        },
+
+
+        backOut: function (t, b, c, d, s) {
+            if (!s) {
+                s = 1.70158;
+            }
+            return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
+        },
+
+
+        backBoth: function (t, b, c, d, s) {
+            s = s || 1.70158;
+
+            return ((t /= d / 2 ) < 1) ?
+                    c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b :
+                    c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b;
+        },
+
+
+        bounceIn: function (t, b, c, d) {
+            return c - EXTLIB.Easing.bounceOut(d - t, 0, c, d) + b;
+        },
+
+
+        bounceOut: function (t, b, c, d) {
+        if ((t /= d) < (1 / 2.75)) {
+                return c * (7.5625 * t * t) + b;
+            } else if (t < (2 / 2.75)) {
+                return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
+            } else if (t < (2.5 / 2.75)) {
+                return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
+            }
+            return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
+        },
+
+
+        bounceBoth: function (t, b, c, d) {
+            return (t < d / 2) ?
+                    EXTLIB.Easing.bounceIn(t * 2, 0, c, d) * .5 + b :
+                    EXTLIB.Easing.bounceOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b;
+        }
+    });
+})();
+
+(function() {
+    var EXTLIB = Ext.lib;
+    // Color Animation
+    EXTLIB.Anim.color = function(el, args, duration, easing, cb, scope) {
+        return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.ColorAnim);
+    }
+
+    EXTLIB.ColorAnim = function(el, attributes, duration, method) {
+        EXTLIB.ColorAnim.superclass.constructor.call(this, el, attributes, duration, method);
+    };
+
+    Ext.extend(EXTLIB.ColorAnim, EXTLIB.AnimBase);
+
+    var superclass = EXTLIB.ColorAnim.superclass,
+        colorRE = /color$/i,
+        transparentRE = /^transparent|rgba\(0, 0, 0, 0\)$/,
+        rgbRE = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
+        hexRE= /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
+        hex3RE = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i,
+        isset = function(v){
+            return typeof v !== 'undefined';
+        };
+
+    // private
+    function parseColor(s) {
+        var pi = parseInt,
+            base,
+            out = null,
+            c;
+
+        if (s.length == 3) {
+            return s;
+        }
+
+        Ext.each([hexRE, rgbRE, hex3RE], function(re, idx){
+            base = (idx % 2 == 0) ? 16 : 10;
+            c = re.exec(s);
+            if(c && c.length == 4){
+                out = [pi(c[1], base), pi(c[2], base), pi(c[3], base)];
+                return false;
+            }
+        });
+        return out;
+    }
+
+    Ext.apply(EXTLIB.ColorAnim.prototype, {
+        getAttr : function(attr) {
+            var me = this,
+                el = me.el,
+                val;
+            if(colorRE.test(attr)){
+                while(el && transparentRE.test(val = Ext.fly(el).getStyle(attr))){
+                    el = el.parentNode;
+                    val = "fff";
+                }
+            }else{
+                val = superclass.getAttr.call(me, attr);
+            }
+            return val;
+        },
+
+        doMethod : function(attr, start, end) {
+            var me = this,
+                val,
+                floor = Math.floor,
+                i,
+                len,
+                v;
+
+            if(colorRE.test(attr)){
+                val = [];
+                end = end || [];
+
+                for(i = 0, len = start.length; i < len; i++) {
+                    v = start[i];
+                    val[i] = superclass.doMethod.call(me, attr, v, end[i]);
+                }
+                val = 'rgb(' + floor(val[0]) + ',' + floor(val[1]) + ',' + floor(val[2]) + ')';
+            }else{
+                val = superclass.doMethod.call(me, attr, start, end);
+            }
+            return val;
+        },
+
+        setRunAttr : function(attr) {
+            var me = this,
+                a = me.attributes[attr],
+                to = a.to,
+                by = a.by,
+                ra;
+
+            superclass.setRunAttr.call(me, attr);
+            ra = me.runAttrs[attr];
+            if(colorRE.test(attr)){
+                var start = parseColor(ra.start),
+                    end = parseColor(ra.end);
+
+                if(!isset(to) && isset(by)){
+                    end = parseColor(by);
+                    for(var i=0,len=start.length; i<len; i++) {
+                        end[i] = start[i] + end[i];
+                    }
+                }
+                ra.start = start;
+                ra.end = end;
+            }
+        }
+    });
+})();
+
+
+(function() {
+    // Scroll Animation
+    var EXTLIB = Ext.lib;
+    EXTLIB.Anim.scroll = function(el, args, duration, easing, cb, scope) {
+        return EXTLIB.Anim.run(el, args, duration, easing, cb, scope, EXTLIB.Scroll);
+    };
+
+    EXTLIB.Scroll = function(el, attributes, duration, method) {
+        if(el){
+            EXTLIB.Scroll.superclass.constructor.call(this, el, attributes, duration, method);
+        }
+    };
+
+    Ext.extend(EXTLIB.Scroll, EXTLIB.ColorAnim);
+
+    var superclass = EXTLIB.Scroll.superclass,
+        SCROLL = 'scroll';
+
+    Ext.apply(EXTLIB.Scroll.prototype, {
+
+        doMethod : function(attr, start, end) {
+            var val,
+                me = this,
+                curFrame = me.curFrame,
+                totalFrames = me.totalFrames;
+
+            if(attr == SCROLL){
+                val = [me.method(curFrame, start[0], end[0] - start[0], totalFrames),
+                       me.method(curFrame, start[1], end[1] - start[1], totalFrames)];
+            }else{
+                val = superclass.doMethod.call(me, attr, start, end);
+            }
+            return val;
+        },
+
+        getAttr : function(attr) {
+            var me = this;
+
+            if (attr == SCROLL) {
+                return [me.el.scrollLeft, me.el.scrollTop];
+            }else{
+                return superclass.getAttr.call(me, attr);
+            }
+        },
+
+        setAttr : function(attr, val, unit) {
+            var me = this;
+
+            if(attr == SCROLL){
+                me.el.scrollLeft = val[0];
+                me.el.scrollTop = val[1];
+            }else{
+                superclass.setAttr.call(me, attr, val, unit);
+            }
+        }
+    });
+})();  
+       if(Ext.isIE) {
+        function fnCleanUp() {
+            var p = Function.prototype;
+            delete p.createSequence;
+            delete p.defer;
+            delete p.createDelegate;
+            delete p.createCallback;
+            delete p.createInterceptor;
+
+            window.detachEvent("onunload", fnCleanUp);
+        }
+        window.attachEvent("onunload", fnCleanUp);
+    }
 })();
\ No newline at end of file