/*
 * Ext JS Library 2.2
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * licensing@extjs.com
 * 
 * http://extjs.com/license
 */

Ext = {version:"2.2"};
window["undefined"] = window["undefined"];
Ext.apply = function(C, D, B)
{
   if (B)
   {
      Ext.apply(C, B)
   }
   if (C && D && typeof D == "object")
   {
      for (var A in D)
      {
         C[A] = D[A]
      }
   }
   return C
};
(function()
{
   var idSeed = 0;
   var ua = navigator.userAgent.toLowerCase();
   var isStrict = document.compatMode == "CSS1Compat",isOpera = ua.indexOf("opera") > -1,isSafari = (/webkit|khtml/).test(ua),isSafari3 = isSafari && ua.indexOf("webkit/5") != -1,isIE = !isOpera && ua.indexOf("msie") > -1,isIE7 = !isOpera && ua.indexOf("msie 7") > -1,isGecko = !isSafari && ua.indexOf("gecko") > -1,isGecko3 = !isSafari && ua.indexOf("rv:1.9") > -1,isBorderBox = isIE && !isStrict,isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1),isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1),isAir = (ua.indexOf("adobeair") != -1),isLinux = (ua.indexOf("linux") != -1),isSecure = window.location.href.toLowerCase().indexOf("https") === 0;
   if (isIE && !isIE7)
   {
      try
      {
         document.execCommand("BackgroundImageCache", false, true)
      }
      catch(e)
      {
      }
   }
   Ext.apply(Ext, {isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/" + "/extjs.com/s.gif",emptyFn:function()
   {
   },applyIf:function(o, c)
   {
      if (o && c)
      {
         for (var p in c)
         {
            if (typeof o[p] == "undefined")
            {
               o[p] = c[p]
            }
         }
      }
      return o
   },addBehaviors:function(o)
   {
      if (!Ext.isReady)
      {
         Ext.onReady(function()
         {
            Ext.addBehaviors(o)
         });
         return
      }
      var cache = {};
      for (var b in o)
      {
         var parts = b.split("@");
         if (parts[1])
         {
            var s = parts[0];
            if (!cache[s])
            {
               cache[s] = Ext.select(s)
            }
            cache[s].on(parts[1], o[b])
         }
      }
      cache = null
   },id:function(el, prefix)
   {
      prefix = prefix || "ext-gen";
      el = Ext.getDom(el);
      var id = prefix + (++idSeed);
      return el ? (el.id ? el.id : (el.id = id)) : id
   },extend:function()
   {
      var io = function(o)
      {
         for (var m in o)
         {
            this[m] = o[m]
         }
      };
      var oc = Object.prototype.constructor;
      return function(sb, sp, overrides)
      {
         if (typeof sp == "object")
         {
            overrides = sp;
            sp = sb;
            sb = overrides.constructor != oc ? overrides.constructor : function()
            {
               sp.apply(this, arguments)
            }
         }
         var F = function()
         {
         },sbp,spp = sp.prototype;
         F.prototype = spp;
         sbp = sb.prototype = new F();
         sbp.constructor = sb;
         sb.superclass = spp;
         if (spp.constructor == oc)
         {
            spp.constructor = sp
         }
         sb.override = function(o)
         {
            Ext.override(sb, o)
         };
         sbp.override = io;
         Ext.override(sb, overrides);
         sb.extend = function(o)
         {
            Ext.extend(sb, o)
         };
         return sb
      }
   }(),override:function(origclass, overrides)
   {
      if (overrides)
      {
         var p = origclass.prototype;
         for (var method in overrides)
         {
            p[method] = overrides[method]
         }
      }
   },namespace:function()
   {
      var a = arguments,o = null,i,j,d,rt;
      for (i = 0; i < a.length; ++i)
      {
         d = a[i].split(".");
         rt = d[0];
         eval("if (typeof " + rt + " == \"undefined\"){" + rt + " = {};} o = " + rt + ";");
         for (j = 1; j < d.length; ++j)
         {
            o[d[j]] = o[d[j]] || {};
            o = o[d[j]]
         }
      }
   },urlEncode:function(o)
   {
      if (!o)
      {
         return""
      }
      var buf = [];
      for (var key in o)
      {
         var ov = o[key],k = encodeURIComponent(key);
         var type = typeof ov;
         if (type == "undefined")
         {
            buf.push(k, "=&")
         }
         else
         {
            if (type != "function" && type != "object")
            {
               buf.push(k, "=", encodeURIComponent(ov), "&")
            }
            else
            {
               if (Ext.isArray(ov))
               {
                  if (ov.length)
                  {
                     for (var i = 0,len = ov.length; i < len; i++)
                     {
                        buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? "" : ov[i]), "&")
                     }
                  }
                  else
                  {
                     buf.push(k, "=&")
                  }
               }
            }
         }
      }
      buf.pop();
      return buf.join("")
   },urlDecode:function(string, overwrite)
   {
      if (!string || !string.length)
      {
         return{}
      }
      var obj = {};
      var pairs = string.split("&");
      var pair,name,value;
      for (var i = 0,len = pairs.length; i < len; i++)
      {
         pair = pairs[i].split("=");
         name = decodeURIComponent(pair[0]);
         value = decodeURIComponent(pair[1]);
         if (overwrite !== true)
         {
            if (typeof obj[name] == "undefined")
            {
               obj[name] = value
            }
            else
            {
               if (typeof obj[name] == "string")
               {
                  obj[name] = [obj[name]];
                  obj[name].push(value)
               }
               else
               {
                  obj[name].push(value)
               }
            }
         }
         else
         {
            obj[name] = value
         }
      }
      return obj
   },each:function(array, fn, scope)
   {
      if (typeof array.length == "undefined" || typeof array == "string")
      {
         array = [array]
      }
      for (var i = 0,len = array.length; i < len; i++)
      {
         if (fn.call(scope || array[i], array[i], i, array) === false)
         {
            return i
         }
      }
   },combine:function()
   {
      var as = arguments,l = as.length,r = [];
      for (var i = 0; i < l; i++)
      {
         var a = as[i];
         if (Ext.isArray(a))
         {
            r = r.concat(a)
         }
         else
         {
            if (a.length !== undefined && !a.substr)
            {
               r = r.concat(Array.prototype.slice.call(a, 0))
            }
            else
            {
               r.push(a)
            }
         }
      }
      return r
   },escapeRe:function(s)
   {
      return s.replace(/([.*+?^${}()|[\]\/\\])/g, "\\$1")
   },callback:function(cb, scope, args, delay)
   {
      if (typeof cb == "function")
      {
         if (delay)
         {
            cb.defer(delay, scope, args || [])
         }
         else
         {
            cb.apply(scope, args || [])
         }
      }
   },getDom:function(el)
   {
      if (!el || !document)
      {
         return null
      }
      return el.dom ? el.dom : (typeof el == "string" ? document.getElementById(el) : el)
   },getDoc:function()
   {
      return Ext.get(document)
   },getBody:function()
   {
      return Ext.get(document.body || document.documentElement)
   },getCmp:function(id)
   {
      return Ext.ComponentMgr.get(id)
   },num:function(v, defaultValue)
   {
      if (typeof v != "number")
      {
         return defaultValue
      }
      return v
   },destroy:function()
   {
      for (var i = 0,a = arguments,len = a.length; i < len; i++)
      {
         var as = a[i];
         if (as)
         {
            if (typeof as.destroy == "function")
            {
               as.destroy()
            }
            else
            {
               if (as.dom)
               {
                  as.removeAllListeners();
                  as.remove()
               }
            }
         }
      }
   },removeNode:isIE ? function()
   {
      var d;
      return function(n)
      {
         if (n && n.tagName != "BODY")
         {
            d = d || document.createElement("div");
            d.appendChild(n);
            d.innerHTML = ""
         }
      }
   }() : function(n)
   {
      if (n && n.parentNode && n.tagName != "BODY")
      {
         n.parentNode.removeChild(n)
      }
   },type:function(o)
   {
      if (o === undefined || o === null)
      {
         return false
      }
      if (o.htmlElement)
      {
         return"element"
      }
      var t = typeof o;
      if (t == "object" && o.nodeName)
      {
         switch (o.nodeType)
            {case 1:return"element";case 3:return(/\S/).test(o.nodeValue) ? "textnode" : "whitespace"}
      }
      if (t == "object" || t == "function")
      {
         switch (o.constructor)
            {case Array:return"array";case RegExp:return"regexp"}
         if (typeof o.length == "number" && typeof o.item == "function")
         {
            return"nodelist"
         }
      }
      return t
   },isEmpty:function(v, allowBlank)
   {
      return v === null || v === undefined || (!allowBlank ? v === "" : false)
   },value:function(v, defaultValue, allowBlank)
   {
      return Ext.isEmpty(v, allowBlank) ? defaultValue : v
   },isArray:function(v)
   {
      return v && typeof v.length == "number" && typeof v.splice == "function"
   },isDate:function(v)
   {
      return v && typeof v.getFullYear == "function"
   },isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari && !isSafari3,isIE:isIE,isIE6:isIE && !isIE7,isIE7:isIE7,isGecko:isGecko,isGecko2:isGecko && !isGecko3,isGecko3:isGecko3,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE && !isIE7) || (isMac && isGecko && !isGecko3))});
   Ext.ns = Ext.namespace
})();
Ext.ns("Ext", "Ext.util", "Ext.grid", "Ext.dd", "Ext.tree", "Ext.data", "Ext.form", "Ext.menu", "Ext.state", "Ext.lib", "Ext.layout", "Ext.app", "Ext.ux");
Ext.apply(Function.prototype, {createCallback:function()
{
   var A = arguments;
   var B = this;
   return function()
   {
      return B.apply(window, A)
   }
},createDelegate:function(C, B, A)
{
   var D = this;
   return function()
   {
      var F = B || arguments;
      if (A === true)
      {
         F = Array.prototype.slice.call(arguments, 0);
         F = F.concat(B)
      }
      else
      {
         if (typeof A == "number")
         {
            F = Array.prototype.slice.call(arguments, 0);
            var E = [A,0].concat(B);
            Array.prototype.splice.apply(F, E)
         }
      }
      return D.apply(C || window, F)
   }
},defer:function(C, E, B, A)
{
   var D = this.createDelegate(E, B, A);
   if (C)
   {
      return setTimeout(D, C)
   }
   D();
   return 0
},createSequence:function(B, A)
{
   if (typeof B != "function")
   {
      return this
   }
   var C = this;
   return function()
   {
      var D = C.apply(this || window, arguments);
      B.apply(A || this || window, arguments);
      return D
   }
},createInterceptor:function(B, A)
{
   if (typeof B != "function")
   {
      return this
   }
   var C = this;
   return function()
   {
      B.target = this;
      B.method = C;
      if (B.apply(A || this || window, arguments) === false)
      {
         return
      }
      return C.apply(this || window, arguments)
   }
}});
Ext.applyIf(String, {escape:function(A)
{
   return A.replace(/('|\\)/g, "\\$1")
},leftPad:function(D, B, C)
{
   var A = new String(D);
   if (!C)
   {
      C = " "
   }
   while (A.length < B)
   {
      A = C + A
   }
   return A.toString()
},format:function(B)
{
   var A = Array.prototype.slice.call(arguments, 1);
   return B.replace(/\{(\d+)\}/g, function(C, D)
   {
      return A[D]
   })
}});
String.prototype.toggle = function(B, A)
{
   return this == B ? A : B
};
String.prototype.trim = function()
{
   var A = /^\s+|\s+$/g;
   return function()
   {
      return this.replace(A, "")
   }
}();
Ext.applyIf(Number.prototype, {constrain:function(B, A)
{
   return Math.min(Math.max(this, B), A)
}});
Ext.applyIf(Array.prototype, {indexOf:function(C)
{
   for (var B = 0,A = this.length; B < A; B++)
   {
      if (this[B] == C)
      {
         return B
      }
   }
   return -1
},remove:function(B)
{
   var A = this.indexOf(B);
   if (A != -1)
   {
      this.splice(A, 1)
   }
   return this
}});
Date.prototype.getElapsed = function(A)
{
   return Math.abs((A || new Date()).getTime() - this.getTime())
};
(function()
{
   var B;
   Ext.lib.Dom = {getViewWidth:function(E)
   {
      return E ? this.getDocumentWidth() : this.getViewportWidth()
   },getViewHeight:function(E)
   {
      return E ? this.getDocumentHeight() : this.getViewportHeight()
   },getDocumentHeight:function()
   {
      var E = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight :
              document.documentElement.scrollHeight;
      return Math.max(E, this.getViewportHeight())
   },getDocumentWidth:function()
   {
      var E = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
      return Math.max(E, this.getViewportWidth())
   },getViewportHeight:function()
   {
      if (Ext.isIE)
      {
         return Ext.isStrict ? document.documentElement.clientHeight : document.body.clientHeight
      }
      else
      {
         return self.innerHeight
      }
   },getViewportWidth:function()
   {
      if (Ext.isIE)
      {
         return Ext.isStrict ? document.documentElement.clientWidth : document.body.clientWidth
      }
      else
      {
         return self.innerWidth
      }
   },isAncestor:function(F, G)
   {
      F = Ext.getDom(F);
      G = Ext.getDom(G);
      if (!F || !G)
      {
         return false
      }
      if (F.contains && !Ext.isSafari)
      {
         return F.contains(G)
      }
      else
      {
         if (F.compareDocumentPosition)
         {
            return !!(F.compareDocumentPosition(G) & 16)
         }
         else
         {
            var E = G.parentNode;
            while (E)
            {
               if (E == F)
               {
                  return true
               }
               else
               {
                  if (!E.tagName || E.tagName.toUpperCase() == "HTML")
                  {
                     return false
                  }
               }
               E = E.parentNode
            }
            return false
         }
      }
   },getRegion:function(E)
   {
      return Ext.lib.Region.getRegion(E)
   },getY:function(E)
   {
      return this.getXY(E)[1]
   },getX:function(E)
   {
      return this.getXY(E)[0]
   },getXY:function(G)
   {
      var F,K,M,N,J = (document.body || document.documentElement);
      G = Ext.getDom(G);
      if (G == J)
      {
         return[0,0]
      }
      if (G.getBoundingClientRect)
      {
         M = G.getBoundingClientRect();
         N = C(document).getScroll();
         return[M.left + N.left,M.top + N.top]
      }
      var O = 0,L = 0;
      F = G;
      var E = C(G).getStyle("position") == "absolute";
      while (F)
      {
         O += F.offsetLeft;
         L += F.offsetTop;
         if (!E && C(F).getStyle("position") == "absolute")
         {
            E = true
         }
         if (Ext.isGecko)
         {
            K = C(F);
            var P = parseInt(K.getStyle("borderTopWidth"), 10) || 0;
            var H = parseInt(K.getStyle("borderLeftWidth"), 10) || 0;
            O += H;
            L += P;
            if (F != G && K.getStyle("overflow") != "visible")
            {
               O += H;
               L += P
            }
         }
         F = F.offsetParent
      }
      if (Ext.isSafari && E)
      {
         O -= J.offsetLeft;
         L -= J.offsetTop
      }
      if (Ext.isGecko && !E)
      {
         var I = C(J);
         O += parseInt(I.getStyle("borderLeftWidth"), 10) || 0;
         L += parseInt(I.getStyle("borderTopWidth"), 10) || 0
      }
      F = G.parentNode;
      while (F && F != J)
      {
         if (!Ext.isOpera || (F.tagName != "TR" && C(F).getStyle("display") != "inline"))
         {
            O -= F.scrollLeft;
            L -= F.scrollTop
         }
         F = F.parentNode
      }
      return[O,L]
   },setXY:function(E, F)
   {
      E = Ext.fly(E, "_setXY");
      E.position();
      var G = E.translatePoints(F);
      if (F[0] !== false)
      {
         E.dom.style.left = G.left + "px"
      }
      if (F[1] !== false)
      {
         E.dom.style.top = G.top + "px"
      }
   },setX:function(F, E)
   {
      this.setXY(F, [E,false])
   },setY:function(E, F)
   {
      this.setXY(E, [false,F])
   }};
   Ext.lib.Event = function()
   {
      var F = false;
      var G = [];
      var K = [];
      var I = 0;
      var H = [];
      var E = 0;
      var J = null;
      return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function()
      {
         if (!this._interval)
         {
            var L = this;
            var M = function()
            {
               L._tryPreloadAttach()
            };
            this._interval = setInterval(M, this.POLL_INTERVAL)
         }
      },onAvailable:function(N, L, O, M)
      {
         H.push({id:N,fn:L,obj:O,override:M,checkReady:false});
         I = this.POLL_RETRYS;
         this.startInterval()
      },addListener:function(Q, M, P)
      {
         Q = Ext.getDom(Q);
         if (!Q || !P)
         {
            return false
         }
         if ("unload" == M)
         {
            K[K.length] = [Q,M,P];
            return true
         }
         var O = function(R)
         {
            return typeof Ext != "undefined" ? P(Ext.lib.Event.getEvent(R)) : false
         };
         var L = [Q,M,P,O];
         var N = G.length;
         G[N] = L;
         this.doAdd(Q, M, O, false);
         return true
      },removeListener:function(S, O, R)
      {
         var Q,N;
         S = Ext.getDom(S);
         if (!R)
         {
            return this.purgeElement(S, false, O)
         }
         if ("unload" == O)
         {
            for (Q = 0,N = K.length; Q < N; Q++)
            {
               var M = K[Q];
               if (M && M[0] == S && M[1] == O && M[2] == R)
               {
                  K.splice(Q, 1);
                  return true
               }
            }
            return false
         }
         var L = null;
         var P = arguments[3];
         if ("undefined" == typeof P)
         {
            P = this._getCacheIndex(S, O, R)
         }
         if (P >= 0)
         {
            L = G[P]
         }
         if (!S || !L)
         {
            return false
         }
         this.doRemove(S, O, L[this.WFN], false);
         delete G[P][this.WFN];
         delete G[P][this.FN];
         G.splice(P, 1);
         return true
      },getTarget:function(N, M)
      {
         N = N.browserEvent || N;
         var L = N.target || N.srcElement;
         return this.resolveTextNode(L)
      },resolveTextNode:function(L)
      {
         if (Ext.isSafari && L && 3 == L.nodeType)
         {
            return L.parentNode
         }
         else
         {
            return L
         }
      },getPageX:function(M)
      {
         M = M.browserEvent || M;
         var L = M.pageX;
         if (!L && 0 !== L)
         {
            L = M.clientX || 0;
            if (Ext.isIE)
            {
               L += this.getScroll()[1]
            }
         }
         return L
      },getPageY:function(L)
      {
         L = L.browserEvent || L;
         var M = L.pageY;
         if (!M && 0 !== M)
         {
            M = L.clientY || 0;
            if (Ext.isIE)
            {
               M += this.getScroll()[0]
            }
         }
         return M
      },getXY:function(L)
      {
         L = L.browserEvent || L;
         return[this.getPageX(L),this.getPageY(L)]
      },getRelatedTarget:function(M)
      {
         M = M.browserEvent || M;
         var L = M.relatedTarget;
         if (!L)
         {
            if (M.type == "mouseout")
            {
               L = M.toElement
            }
            else
            {
               if (M.type == "mouseover")
               {
                  L = M.fromElement
               }
            }
         }
         return this.resolveTextNode(L)
      },getTime:function(N)
      {
         N = N.browserEvent || N;
         if (!N.time)
         {
            var M = new Date().getTime();
            try
            {
               N.time = M
            }
            catch(L)
            {
               this.lastError = L;
               return M
            }
         }
         return N.time
      },stopEvent:function(L)
      {
         this.stopPropagation(L);
         this.preventDefault(L)
      },stopPropagation:function(L)
      {
         L = L.browserEvent || L;
         if (L.stopPropagation)
         {
            L.stopPropagation()
         }
         else
         {
            L.cancelBubble = true
         }
      },preventDefault:function(L)
      {
         L = L.browserEvent || L;
         if (L.preventDefault)
         {
            L.preventDefault()
         }
         else
         {
            L.returnValue = false
         }
      },getEvent:function(M)
      {
         var L = M || window.event;
         if (!L)
         {
            var N = this.getEvent.caller;
            while (N)
            {
               L = N.arguments[0];
               if (L && Event == L.constructor)
               {
                  break
               }
               N = N.caller
            }
         }
         return L
      },getCharCode:function(L)
      {
         L = L.browserEvent || L;
         return L.charCode || L.keyCode || 0
      },_getCacheIndex:function(Q, N, P)
      {
         for (var O = 0,M = G.length; O < M; ++O)
         {
            var L = G[O];
            if (L && L[this.FN] == P && L[this.EL] == Q && L[this.TYPE] == N)
            {
               return O
            }
         }
         return -1
      },elCache:{},getEl:function(L)
      {
         return document.getElementById(L)
      },clearCache:function()
      {
      },_load:function(M)
      {
         F = true;
         var L = Ext.lib.Event;
         if (Ext.isIE)
         {
            L.doRemove(window, "load", L._load)
         }
      },_tryPreloadAttach:function()
      {
         if (this.locked)
         {
            return false
         }
         this.locked = true;
         var R = !F;
         if (!R)
         {
            R = (I > 0)
         }
         var Q = [];
         for (var M = 0,L = H.length; M < L; ++M)
         {
            var P = H[M];
            if (P)
            {
               var O = this.getEl(P.id);
               if (O)
               {
                  if (!P.checkReady || F || O.nextSibling || (document && document.body))
                  {
                     var N = O;
                     if (P.override)
                     {
                        if (P.override === true)
                        {
                           N = P.obj
                        }
                        else
                        {
                           N = P.override
                        }
                     }
                     P.fn.call(N, P.obj);
                     H[M] = null
                  }
               }
               else
               {
                  Q.push(P)
               }
            }
         }
         I = (Q.length === 0) ? 0 : I - 1;
         if (R)
         {
            this.startInterval()
         }
         else
         {
            clearInterval(this._interval);
            this._interval = null
         }
         this.locked = false;
         return true
      },purgeElement:function(P, Q, N)
      {
         var R = this.getListeners(P, N);
         if (R)
         {
            for (var O = 0,L = R.length; O < L; ++O)
            {
               var M = R[O];
               this.removeListener(P, M.type, M.fn)
            }
         }
         if (Q && P && P.childNodes)
         {
            for (O = 0,L = P.childNodes.length; O < L; ++O)
            {
               this.purgeElement(P.childNodes[O], Q, N)
            }
         }
      },getListeners:function(M, R)
      {
         var P = [],L;
         if (!R)
         {
            L = [G,K]
         }
         else
         {
            if (R == "unload")
            {
               L = [K]
            }
            else
            {
               L = [G]
            }
         }
         for (var O = 0; O < L.length; ++O)
         {
            var T = L[O];
            if (T && T.length > 0)
            {
               for (var Q = 0,S = T.length; Q < S; ++Q)
               {
                  var N = T[Q];
                  if (N && N[this.EL] === M && (!R || R === N[this.TYPE]))
                  {
                     P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.ADJ_SCOPE],index:Q})
                  }
               }
            }
         }
         return(P.length) ? P : null
      },_unload:function(S)
      {
         var R = Ext.lib.Event,P,O,M,L,N;
         for (P = 0,L = K.length; P < L; ++P)
         {
            M = K[P];
            if (M)
            {
               var Q = window;
               if (M[R.ADJ_SCOPE])
               {
                  if (M[R.ADJ_SCOPE] === true)
                  {
                     Q = M[R.OBJ]
                  }
                  else
                  {
                     Q = M[R.ADJ_SCOPE]
                  }
               }
               M[R.FN].call(Q, R.getEvent(S), M[R.OBJ]);
               K[P] = null;
               M = null;
               Q = null
            }
         }
         K = null;
         if (G && G.length > 0)
         {
            O = G.length;
            while (O)
            {
               N = O - 1;
               M = G[N];
               if (M)
               {
                  R.removeListener(M[R.EL], M[R.TYPE], M[R.FN], N)
               }
               O = O - 1
            }
            M = null;
            R.clearCache()
         }
         R.doRemove(window, "unload", R._unload)
      },getScroll:function()
      {
         var L = document.documentElement,M = document.body;
         if (L && (L.scrollTop || L.scrollLeft))
         {
            return[L.scrollTop,L.scrollLeft]
         }
         else
         {
            if (M)
            {
               return[M.scrollTop,M.scrollLeft]
            }
            else
            {
               return[0,0]
            }
         }
      },doAdd:function()
      {
         if (window.addEventListener)
         {
            return function(O, M, N, L)
            {
               O.addEventListener(M, N, (L))
            }
         }
         else
         {
            if (window.attachEvent)
            {
               return function(O, M, N, L)
               {
                  O.attachEvent("on" + M, N)
               }
            }
            else
            {
               return function()
               {
               }
            }
         }
      }(),doRemove:function()
      {
         if (window.removeEventListener)
         {
            return function(O, M, N, L)
            {
               O.removeEventListener(M, N, (L))
            }
         }
         else
         {
            if (window.detachEvent)
            {
               return function(N, L, M)
               {
                  N.detachEvent("on" + L, M)
               }
            }
            else
            {
               return function()
               {
               }
            }
         }
      }()}
   }();
   var D = Ext.lib.Event;
   D.on = D.addListener;
   D.un = D.removeListener;
   if (document && document.body)
   {
      D._load()
   }
   else
   {
      D.doAdd(window, "load", D._load)
   }
   D.doAdd(window, "unload", D._unload);
   D._tryPreloadAttach();
   Ext.lib.Ajax = {request:function(K, I, E, J, F)
   {
      if (F)
      {
         var G = F.headers;
         if (G)
         {
            for (var H in G)
            {
               if (G.hasOwnProperty(H))
               {
                  this.initHeader(H, G[H], false)
               }
            }
         }
         if (F.xmlData)
         {
            if (!G || !G["Content-Type"])
            {
               this.initHeader("Content-Type", "text/xml", false)
            }
            K = (K ? K : (F.method ? F.method : "POST"));
            J = F.xmlData
         }
         else
         {
            if (F.jsonData)
            {
               if (!G || !G["Content-Type"])
               {
                  this.initHeader("Content-Type", "application/json", false)
               }
               K = (K ? K : (F.method ? F.method : "POST"));
               J = typeof F.jsonData == "object" ? Ext.encode(F.jsonData) : F.jsonData
            }
         }
      }
      return this.asyncRequest(K, I, E, J)
   },serializeForm:function(F)
   {
      if (typeof F == "string")
      {
         F = (document.getElementById(F) || document.forms[F])
      }
      var G,E,H,J,K = "",M = false;
      for (var L = 0; L < F.elements.length; L++)
      {
         G = F.elements[L];
         J = F.elements[L].disabled;
         E = F.elements[L].name;
         H = F.elements[L].value;
         if (!J && E)
         {
            switch (G.type)
               {case"select-one":case"select-multiple":for (var I = 0; I < G.options.length; I++)
            {
               if (G.options[I].selected)
               {
                  if (Ext.isIE)
                  {
                     K += encodeURIComponent(E) + "=" + encodeURIComponent(G.options[I].attributes["value"].specified ?
                                                                           G.options[I].value : G.options[I].text) + "&"
                  }
                  else
                  {
                     K += encodeURIComponent(E) + "=" + encodeURIComponent(G.options[I].hasAttribute("value") ?
                                                                           G.options[I].value : G.options[I].text) + "&"
                  }
               }
            }break;case"radio":case"checkbox":if (G.checked)
            {
               K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&"
            }break;case"file":case undefined:case"reset":case"button":break;case"submit":if (M == false)
            {
               K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&";
               M = true
            }break;default:K += encodeURIComponent(E) + "=" + encodeURIComponent(H) + "&";break}
         }
      }
      K = K.substr(0, K.length - 1);
      return K
   },headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded; charset=UTF-8",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(E)
   {
      this.activeX.unshift(E)
   },setDefaultPostHeader:function(E)
   {
      this.useDefaultHeader = E
   },setDefaultXhrHeader:function(E)
   {
      this.useDefaultXhrHeader = E
   },setPollingInterval:function(E)
   {
      if (typeof E == "number" && isFinite(E))
      {
         this.pollInterval = E
      }
   },createXhrObject:function(I)
   {
      var H,E;
      try
      {
         E = new XMLHttpRequest();
         H = {conn:E,tId:I}
      }
      catch(G)
      {
         for (var F = 0; F < this.activeX.length; ++F)
         {
            try
            {
               E = new ActiveXObject(this.activeX[F]);
               H = {conn:E,tId:I};
               break
            }
            catch(G)
            {
            }
         }
      }
      finally
      {
         return H
      }
   },getConnectionObject:function()
   {
      var F;
      var G = this.transactionId;
      try
      {
         F = this.createXhrObject(G);
         if (F)
         {
            this.transactionId++
         }
      }
      catch(E)
      {
      }
      finally
      {
         return F
      }
   },asyncRequest:function(I, F, H, E)
   {
      var G = this.getConnectionObject();
      if (!G)
      {
         return null
      }
      else
      {
         G.conn.open(I, F, true);
         if (this.useDefaultXhrHeader)
         {
            if (!this.defaultHeaders["X-Requested-With"])
            {
               this.initHeader("X-Requested-With", this.defaultXhrHeader, true)
            }
         }
         if (E && this.useDefaultHeader && (!this.hasHeaders || !this.headers["Content-Type"]))
         {
            this.initHeader("Content-Type", this.defaultPostHeader)
         }
         if (this.hasDefaultHeaders || this.hasHeaders)
         {
            this.setHeader(G)
         }
         this.handleReadyState(G, H);
         G.conn.send(E || null);
         return G
      }
   },handleReadyState:function(F, G)
   {
      var E = this;
      if (G && G.timeout)
      {
         this.timeout[F.tId] = window.setTimeout(function()
         {
            E.abort(F, G, true)
         }, G.timeout)
      }
      this.poll[F.tId] = window.setInterval(function()
      {
         if (F.conn && F.conn.readyState == 4)
         {
            window.clearInterval(E.poll[F.tId]);
            delete E.poll[F.tId];
            if (G && G.timeout)
            {
               window.clearTimeout(E.timeout[F.tId]);
               delete E.timeout[F.tId]
            }
            E.handleTransactionResponse(F, G)
         }
      }, this.pollInterval)
   },handleTransactionResponse:function(I, J, E)
   {
      if (!J)
      {
         this.releaseObject(I);
         return
      }
      var G,F;
      try
      {
         if (I.conn.status !== undefined && I.conn.status != 0)
         {
            G = I.conn.status
         }
         else
         {
            G = 13030
         }
      }
      catch(H)
      {
         G = 13030
      }
      if (G >= 200 && G < 300)
      {
         F = this.createResponseObject(I, J.argument);
         if (J.success)
         {
            if (!J.scope)
            {
               J.success(F)
            }
            else
            {
               J.success.apply(J.scope, [F])
            }
         }
      }
      else
      {
         switch (G)
            {case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:F = this.createExceptionObject(I.tId, J.argument, (
            E ? E : false));if (J.failure)
         {
            if (!J.scope)
            {
               J.failure(F)
            }
            else
            {
               J.failure.apply(J.scope, [F])
            }
         }break;default:F = this.createResponseObject(I, J.argument);if (J.failure)
         {
            if (!J.scope)
            {
               J.failure(F)
            }
            else
            {
               J.failure.apply(J.scope, [F])
            }
         }}
      }
      this.releaseObject(I);
      F = null
   },createResponseObject:function(E, K)
   {
      var H = {};
      var M = {};
      try
      {
         var G = E.conn.getAllResponseHeaders();
         var J = G.split("\n");
         for (var I = 0; I < J.length; I++)
         {
            var F = J[I].indexOf(":");
            if (F != -1)
            {
               M[J[I].substring(0, F)] = J[I].substring(F + 2)
            }
         }
      }
      catch(L)
      {
      }
      H.tId = E.tId;
      H.status = E.conn.status;
      H.statusText = E.conn.statusText;
      H.getResponseHeader = M;
      H.getAllResponseHeaders = G;
      H.responseText = E.conn.responseText;
      H.responseXML = E.conn.responseXML;
      if (typeof K !== undefined)
      {
         H.argument = K
      }
      return H
   },createExceptionObject:function(L, H, E)
   {
      var J = 0;
      var K = "communication failure";
      var G = -1;
      var F = "transaction aborted";
      var I = {};
      I.tId = L;
      if (E)
      {
         I.status = G;
         I.statusText = F
      }
      else
      {
         I.status = J;
         I.statusText = K
      }
      if (H)
      {
         I.argument = H
      }
      return I
   },initHeader:function(E, H, G)
   {
      var F = (G) ? this.defaultHeaders : this.headers;
      if (F[E] === undefined)
      {
         F[E] = H
      }
      else
      {
         F[E] = H + "," + F[E]
      }
      if (G)
      {
         this.hasDefaultHeaders = true
      }
      else
      {
         this.hasHeaders = true
      }
   },setHeader:function(E)
   {
      if (this.hasDefaultHeaders)
      {
         for (var F in this.defaultHeaders)
         {
            if (this.defaultHeaders.hasOwnProperty(F))
            {
               E.conn.setRequestHeader(F, this.defaultHeaders[F])
            }
         }
      }
      if (this.hasHeaders)
      {
         for (var F in this.headers)
         {
            if (this.headers.hasOwnProperty(F))
            {
               E.conn.setRequestHeader(F, this.headers[F])
            }
         }
         this.headers = {};
         this.hasHeaders = false
      }
   },resetDefaultHeaders:function()
   {
      delete this.defaultHeaders;
      this.defaultHeaders = {};
      this.hasDefaultHeaders = false
   },abort:function(F, G, E)
   {
      if (this.isCallInProgress(F))
      {
         F.conn.abort();
         window.clearInterval(this.poll[F.tId]);
         delete this.poll[F.tId];
         if (E)
         {
            delete this.timeout[F.tId]
         }
         this.handleTransactionResponse(F, G, true);
         return true
      }
      else
      {
         return false
      }
   },isCallInProgress:function(E)
   {
      if (E.conn)
      {
         return E.conn.readyState != 4 && E.conn.readyState != 0
      }
      else
      {
         return false
      }
   },releaseObject:function(E)
   {
      E.conn = null;
      E = null
   },activeX:["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]};
   Ext.lib.Region = function(G, H, E, F)
   {
      this.top = G;
      this[1] = G;
      this.right = H;
      this.bottom = E;
      this.left = F;
      this[0] = F
   };
   Ext.lib.Region.prototype = {contains:function(E)
   {
      return(E.left >= this.left && E.right <= this.right && E.top >= this.top && E.bottom <= this.bottom)
   },getArea:function()
   {
      return((this.bottom - this.top) * (this.right - this.left))
   },intersect:function(I)
   {
      var G = Math.max(this.top, I.top);
      var H = Math.min(this.right, I.right);
      var E = Math.min(this.bottom, I.bottom);
      var F = Math.max(this.left, I.left);
      if (E >= G && H >= F)
      {
         return new Ext.lib.Region(G, H, E, F)
      }
      else
      {
         return null
      }
   },union:function(I)
   {
      var G = Math.min(this.top, I.top);
      var H = Math.max(this.right, I.right);
      var E = Math.max(this.bottom, I.bottom);
      var F = Math.min(this.left, I.left);
      return new Ext.lib.Region(G, H, E, F)
   },constrainTo:function(E)
   {
      this.top = this.top.constrain(E.top, E.bottom);
      this.bottom = this.bottom.constrain(E.top, E.bottom);
      this.left = this.left.constrain(E.left, E.right);
      this.right = this.right.constrain(E.left, E.right);
      return this
   },adjust:function(G, F, E, H)
   {
      this.top += G;
      this.left += F;
      this.right += H;
      this.bottom += E;
      return this
   }};
   Ext.lib.Region.getRegion = function(H)
   {
      var J = Ext.lib.Dom.getXY(H);
      var G = J[1];
      var I = J[0] + H.offsetWidth;
      var E = J[1] + H.offsetHeight;
      var F = J[0];
      return new Ext.lib.Region(G, I, E, F)
   };
   Ext.lib.Point = function(E, F)
   {
      if (Ext.isArray(E))
      {
         F = E[1];
         E = E[0]
      }
      this.x = this.right = this.left = this[0] = E;
      this.y = this.top = this.bottom = this[1] = F
   };
   Ext.lib.Point.prototype = new Ext.lib.Region();
   Ext.lib.Anim = {scroll:function(H, F, I, J, E, G)
   {
      return this.run(H, F, I, J, E, G, Ext.lib.Scroll)
   },motion:function(H, F, I, J, E, G)
   {
      return this.run(H, F, I, J, E, G, Ext.lib.Motion)
   },color:function(H, F, I, J, E, G)
   {
      return this.run(H, F, I, J, E, G, Ext.lib.ColorAnim)
   },run:function(I, F, K, L, E, H, G)
   {
      G = G || Ext.lib.AnimBase;
      if (typeof L == "string")
      {
         L = Ext.lib.Easing[L]
      }
      var J = new G(I, F, K, L);
      J.animateX(function()
      {
         Ext.callback(E, H)
      });
      return J
   }};
   function C(E)
   {
      if (!B)
      {
         B = new Ext.Element.Flyweight()
      }
      B.dom = E;
      return B
   }
   if (Ext.isIE)
   {
      function A()
      {
         var E = Function.prototype;
         delete E.createSequence;
         delete E.defer;
         delete E.createDelegate;
         delete E.createCallback;
         delete E.createInterceptor;
         window.detachEvent("onunload", A)
      }
      window.attachEvent("onunload", A)
   }
   Ext.lib.AnimBase = function(F, E, G, H)
   {
      if (F)
      {
         this.init(F, E, G, H)
      }
   };
   Ext.lib.AnimBase.prototype = {toString:function()
   {
      var E = this.getEl();
      var F = E.id || E.tagName;
      return("Anim " + F)
   },patterns:{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},doMethod:function(E, G, F)
   {
      return this.method(this.currentFrame, G, F - G, this.totalFrames)
   },setAttribute:function(E, G, F)
   {
      if (this.patterns.noNegatives.test(E))
      {
         G = (G > 0) ? G : 0
      }
      Ext.fly(this.getEl(), "_anim").setStyle(E, G + F)
   },getAttribute:function(E)
   {
      var G = this.getEl();
      var I = C(G).getStyle(E);
      if (I !== "auto" && !this.patterns.offsetUnit.test(I))
      {
         return parseFloat(I)
      }
      var F = this.patterns.offsetAttribute.exec(E) || [];
      var J = !!(F[3]);
      var H = !!(F[2]);
      if (H || (C(G).getStyle("position") == "absolute" && J))
      {
         I = G["offset" + F[0].charAt(0).toUpperCase() + F[0].substr(1)]
      }
      else
      {
         I = 0
      }
      return I
   },getDefaultUnit:function(E)
   {
      if (this.patterns.defaultUnit.test(E))
      {
         return"px"
      }
      return""
   },animateX:function(G, E)
   {
      var F = function()
      {
         this.onComplete.removeListener(F);
         if (typeof G == "function")
         {
            G.call(E || this, this)
         }
      };
      this.onComplete.addListener(F, this);
      this.animate()
   },setRuntimeAttribute:function(F)
   {
      var K;
      var G;
      var H = this.attributes;
      this.runtimeAttributes[F] = {};
      var J = function(L)
      {
         return(typeof L !== "undefined")
      };
      if (!J(H[F]["to"]) && !J(H[F]["by"]))
      {
         return false
      }
      K = (J(H[F]["from"])) ? H[F]["from"] : this.getAttribute(F);
      if (J(H[F]["to"]))
      {
         G = H[F]["to"]
      }
      else
      {
         if (J(H[F]["by"]))
         {
            if (K.constructor == Array)
            {
               G = [];
               for (var I = 0,E = K.length; I < E; ++I)
               {
                  G[I] = K[I] + H[F]["by"][I]
               }
            }
            else
            {
               G = K + H[F]["by"]
            }
         }
      }
      this.runtimeAttributes[F].start = K;
      this.runtimeAttributes[F].end = G;
      this.runtimeAttributes[F].unit = (J(H[F].unit)) ? H[F]["unit"] : this.getDefaultUnit(F)
   },init:function(G, L, K, E)
   {
      var F = false;
      var H = null;
      var J = 0;
      G = Ext.getDom(G);
      this.attributes = L || {};
      this.duration = K || 1;
      this.method = E || Ext.lib.Easing.easeNone;
      this.useSeconds = true;
      this.currentFrame = 0;
      this.totalFrames = Ext.lib.AnimMgr.fps;
      this.getEl = function()
      {
         return G
      };
      this.isAnimated = function()
      {
         return F
      };
      this.getStartTime = function()
      {
         return H
      };
      this.runtimeAttributes = {};
      this.animate = function()
      {
         if (this.isAnimated())
         {
            return false
         }
         this.currentFrame = 0;
         this.totalFrames = (this.useSeconds) ? Math.ceil(Ext.lib.AnimMgr.fps * this.duration) : this.duration;
         Ext.lib.AnimMgr.registerElement(this)
      };
      this.stop = function(O)
      {
         if (O)
         {
            this.currentFrame = this.totalFrames;
            this._onTween.fire()
         }
         Ext.lib.AnimMgr.stop(this)
      };
      var N = function()
      {
         this.onStart.fire();
         this.runtimeAttributes = {};
         for (var O in this.attributes)
         {
            this.setRuntimeAttribute(O)
         }
         F = true;
         J = 0;
         H = new Date()
      };
      var M = function()
      {
         var Q = {duration:new Date() - this.getStartTime(),currentFrame:this.currentFrame};
         Q.toString = function()
         {
            return("duration: " + Q.duration + ", currentFrame: " + Q.currentFrame)
         };
         this.onTween.fire(Q);
         var P = this.runtimeAttributes;
         for (var O in P)
         {
            this.setAttribute(O, this.doMethod(O, P[O].start, P[O].end), P[O].unit)
         }
         J += 1
      };
      var I = function()
      {
         var O = (new Date() - H) / 1000;
         var P = {duration:O,frames:J,fps:J / O};
         P.toString = function()
         {
            return("duration: " + P.duration + ", frames: " + P.frames + ", fps: " + P.fps)
         };
         F = false;
         J = 0;
         this.onComplete.fire(P)
      };
      this._onStart = new Ext.util.Event(this);
      this.onStart = new Ext.util.Event(this);
      this.onTween = new Ext.util.Event(this);
      this._onTween = new Ext.util.Event(this);
      this.onComplete = new Ext.util.Event(this);
      this._onComplete = new Ext.util.Event(this);
      this._onStart.addListener(N);
      this._onTween.addListener(M);
      this._onComplete.addListener(I)
   }};
   Ext.lib.AnimMgr = new function()
   {
      var G = null;
      var F = [];
      var E = 0;
      this.fps = 1000;
      this.delay = 1;
      this.registerElement = function(J)
      {
         F[F.length] = J;
         E += 1;
         J._onStart.fire();
         this.start()
      };
      this.unRegister = function(K, J)
      {
         K._onComplete.fire();
         J = J || I(K);
         if (J != -1)
         {
            F.splice(J, 1)
         }
         E -= 1;
         if (E <= 0)
         {
            this.stop()
         }
      };
      this.start = function()
      {
         if (G === null)
         {
            G = setInterval(this.run, this.delay)
         }
      };
      this.stop = function(L)
      {
         if (!L)
         {
            clearInterval(G);
            for (var K = 0,J = F.length; K < J; ++K)
            {
               if (F[0].isAnimated())
               {
                  this.unRegister(F[0], 0)
               }
            }
            F = [];
            G = null;
            E = 0
         }
         else
         {
            this.unRegister(L)
         }
      };
      this.run = function()
      {
         for (var L = 0,J = F.length; L < J; ++L)
         {
            var K = F[L];
            if (!K || !K.isAnimated())
            {
               continue
            }
            if (K.currentFrame < K.totalFrames || K.totalFrames === null)
            {
               K.currentFrame += 1;
               if (K.useSeconds)
               {
                  H(K)
               }
               K._onTween.fire()
            }
            else
            {
               Ext.lib.AnimMgr.stop(K, L)
            }
         }
      };
      var I = function(L)
      {
         for (var K = 0,J = F.length; K < J; ++K)
         {
            if (F[K] == L)
            {
               return K
            }
         }
         return -1
      };
      var H = function(K)
      {
         var N = K.totalFrames;
         var M = K.currentFrame;
         var L = (K.currentFrame * K.duration * 1000 / K.totalFrames);
         var J = (new Date() - K.getStartTime());
         var O = 0;
         if (J < K.duration * 1000)
         {
            O = Math.round((J / L - 1) * K.currentFrame)
         }
         else
         {
            O = N - (M + 1)
         }
         if (O > 0 && isFinite(O))
         {
            if (K.currentFrame + O >= N)
            {
               O = N - (M + 1)
            }
            K.currentFrame += O
         }
      }
   };
   Ext.lib.Bezier = new function()
   {
      this.getPosition = function(I, H)
      {
         var J = I.length;
         var G = [];
         for (var F = 0; F < J; ++F)
         {
            G[F] = [I[F][0],I[F][1]]
         }
         for (var E = 1; E < J; ++E)
         {
            for (F = 0; F < J - E; ++F)
            {
               G[F][0] = (1 - H) * G[F][0] + H * G[parseInt(F + 1, 10)][0];
               G[F][1] = (1 - H) * G[F][1] + H * G[parseInt(F + 1, 10)][1]
            }
         }
         return[G[0][0],G[0][1]]
      }
   };
   (function()
   {
      Ext.lib.ColorAnim = function(I, H, J, K)
      {
         Ext.lib.ColorAnim.superclass.constructor.call(this, I, H, J, K)
      };
      Ext.extend(Ext.lib.ColorAnim, Ext.lib.AnimBase);
      var F = Ext.lib;
      var G = F.ColorAnim.superclass;
      var E = F.ColorAnim.prototype;
      E.toString = function()
      {
         var H = this.getEl();
         var I = H.id || H.tagName;
         return("ColorAnim " + I)
      };
      E.patterns.color = /color$/i;
      E.patterns.rgb = /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;
      E.patterns.hex = /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;
      E.patterns.hex3 = /^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;
      E.patterns.transparent = /^transparent|rgba\(0, 0, 0, 0\)$/;
      E.parseColor = function(H)
      {
         if (H.length == 3)
         {
            return H
         }
         var I = this.patterns.hex.exec(H);
         if (I && I.length == 4)
         {
            return[parseInt(I[1], 16),parseInt(I[2], 16),parseInt(I[3], 16)]
         }
         I = this.patterns.rgb.exec(H);
         if (I && I.length == 4)
         {
            return[parseInt(I[1], 10),parseInt(I[2], 10),parseInt(I[3], 10)]
         }
         I = this.patterns.hex3.exec(H);
         if (I && I.length == 4)
         {
            return[parseInt(I[1] + I[1], 16),parseInt(I[2] + I[2], 16),parseInt(I[3] + I[3], 16)]
         }
         return null
      };
      E.getAttribute = function(H)
      {
         var J = this.getEl();
         if (this.patterns.color.test(H))
         {
            var K = C(J).getStyle(H);
            if (this.patterns.transparent.test(K))
            {
               var I = J.parentNode;
               K = C(I).getStyle(H);
               while (I && this.patterns.transparent.test(K))
               {
                  I = I.parentNode;
                  K = C(I).getStyle(H);
                  if (I.tagName.toUpperCase() == "HTML")
                  {
                     K = "#fff"
                  }
               }
            }
         }
         else
         {
            K = G.getAttribute.call(this, H)
         }
         return K
      };
      E.doMethod = function(I, M, J)
      {
         var L;
         if (this.patterns.color.test(I))
         {
            L = [];
            for (var K = 0,H = M.length; K < H; ++K)
            {
               L[K] = G.doMethod.call(this, I, M[K], J[K])
            }
            L = "rgb(" + Math.floor(L[0]) + "," + Math.floor(L[1]) + "," + Math.floor(L[2]) + ")"
         }
         else
         {
            L = G.doMethod.call(this, I, M, J)
         }
         return L
      };
      E.setRuntimeAttribute = function(I)
      {
         G.setRuntimeAttribute.call(this, I);
         if (this.patterns.color.test(I))
         {
            var K = this.attributes;
            var M = this.parseColor(this.runtimeAttributes[I].start);
            var J = this.parseColor(this.runtimeAttributes[I].end);
            if (typeof K[I]["to"] === "undefined" && typeof K[I]["by"] !== "undefined")
            {
               J = this.parseColor(K[I].by);
               for (var L = 0,H = M.length; L < H; ++L)
               {
                  J[L] = M[L] + J[L]
               }
            }
            this.runtimeAttributes[I].start = M;
            this.runtimeAttributes[I].end = J
         }
      }
   })();
   Ext.lib.Easing = {easeNone:function(F, E, H, G)
   {
      return H * F / G + E
   },easeIn:function(F, E, H, G)
   {
      return H * (F /= G) * F + E
   },easeOut:function(F, E, H, G)
   {
      return -H * (F /= G) * (F - 2) + E
   },easeBoth:function(F, E, H, G)
   {
      if ((F /= G / 2) < 1)
      {
         return H / 2 * F * F + E
      }
      return -H / 2 * ((--F) * (F - 2) - 1) + E
   },easeInStrong:function(F, E, H, G)
   {
      return H * (F /= G) * F * F * F + E
   },easeOutStrong:function(F, E, H, G)
   {
      return -H * ((F = F / G - 1) * F * F * F - 1) + E
   },easeBothStrong:function(F, E, H, G)
   {
      if ((F /= G / 2) < 1)
      {
         return H / 2 * F * F * F * F + E
      }
      return -H / 2 * ((F -= 2) * F * F * F - 2) + E
   },elasticIn:function(G, E, K, J, F, I)
   {
      if (G == 0)
      {
         return E
      }
      if ((G /= J) == 1)
      {
         return E + K
      }
      if (!I)
      {
         I = J * 0.3
      }
      if (!F || F < Math.abs(K))
      {
         F = K;
         var H = I / 4
      }
      else
      {
         var H = I / (2 * Math.PI) * Math.asin(K / F)
      }
      return -(F * Math.pow(2, 10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I)) + E
   },elasticOut:function(G, E, K, J, F, I)
   {
      if (G == 0)
      {
         return E
      }
      if ((G /= J) == 1)
      {
         return E + K
      }
      if (!I)
      {
         I = J * 0.3
      }
      if (!F || F < Math.abs(K))
      {
         F = K;
         var H = I / 4
      }
      else
      {
         var H = I / (2 * Math.PI) * Math.asin(K / F)
      }
      return F * Math.pow(2, -10 * G) * Math.sin((G * J - H) * (2 * Math.PI) / I) + K + E
   },elasticBoth:function(G, E, K, J, F, I)
   {
      if (G == 0)
      {
         return E
      }
      if ((G /= J / 2) == 2)
      {
         return E + K
      }
      if (!I)
      {
         I = J * (0.3 * 1.5)
      }
      if (!F || F < Math.abs(K))
      {
         F = K;
         var H = I / 4
      }
      else
      {
         var H = I / (2 * Math.PI) * Math.asin(K / F)
      }
      if (G < 1)
      {
         return -0.5 * (F * Math.pow(2, 10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I)) + E
      }
      return F * Math.pow(2, -10 * (G -= 1)) * Math.sin((G * J - H) * (2 * Math.PI) / I) * 0.5 + K + E
   },backIn:function(F, E, I, H, G)
   {
      if (typeof G == "undefined")
      {
         G = 1.70158
      }
      return I * (F /= H) * F * ((G + 1) * F - G) + E
   },backOut:function(F, E, I, H, G)
   {
      if (typeof G == "undefined")
      {
         G = 1.70158
      }
      return I * ((F = F / H - 1) * F * ((G + 1) * F + G) + 1) + E
   },backBoth:function(F, E, I, H, G)
   {
      if (typeof G == "undefined")
      {
         G = 1.70158
      }
      if ((F /= H / 2) < 1)
      {
         return I / 2 * (F * F * (((G *= (1.525)) + 1) * F - G)) + E
      }
      return I / 2 * ((F -= 2) * F * (((G *= (1.525)) + 1) * F + G) + 2) + E
   },bounceIn:function(F, E, H, G)
   {
      return H - Ext.lib.Easing.bounceOut(G - F, 0, H, G) + E
   },bounceOut:function(F, E, H, G)
   {
      if ((F /= G) < (1 / 2.75))
      {
         return H * (7.5625 * F * F) + E
      }
      else
      {
         if (F < (2 / 2.75))
         {
            return H * (7.5625 * (F -= (1.5 / 2.75)) * F + 0.75) + E
         }
         else
         {
            if (F < (2.5 / 2.75))
            {
               return H * (7.5625 * (F -= (2.25 / 2.75)) * F + 0.9375) + E
            }
         }
      }
      return H * (7.5625 * (F -= (2.625 / 2.75)) * F + 0.984375) + E
   },bounceBoth:function(F, E, H, G)
   {
      if (F < G / 2)
      {
         return Ext.lib.Easing.bounceIn(F * 2, 0, H, G) * 0.5 + E
      }
      return Ext.lib.Easing.bounceOut(F * 2 - G, 0, H, G) * 0.5 + H * 0.5 + E
   }};
   (function()
   {
      Ext.lib.Motion = function(K, J, L, M)
      {
         if (K)
         {
            Ext.lib.Motion.superclass.constructor.call(this, K, J, L, M)
         }
      };
      Ext.extend(Ext.lib.Motion, Ext.lib.ColorAnim);
      var H = Ext.lib;
      var I = H.Motion.superclass;
      var F = H.Motion.prototype;
      F.toString = function()
      {
         var J = this.getEl();
         var K = J.id || J.tagName;
         return("Motion " + K)
      };
      F.patterns.points = /^points$/i;
      F.setAttribute = function(J, L, K)
      {
         if (this.patterns.points.test(J))
         {
            K = K || "px";
            I.setAttribute.call(this, "left", L[0], K);
            I.setAttribute.call(this, "top", L[1], K)
         }
         else
         {
            I.setAttribute.call(this, J, L, K)
         }
      };
      F.getAttribute = function(J)
      {
         if (this.patterns.points.test(J))
         {
            var K = [I.getAttribute.call(this, "left"),I.getAttribute.call(this, "top")]
         }
         else
         {
            K = I.getAttribute.call(this, J)
         }
         return K
      };
      F.doMethod = function(J, N, K)
      {
         var M = null;
         if (this.patterns.points.test(J))
         {
            var L = this.method(this.currentFrame, 0, 100, this.totalFrames) / 100;
            M = H.Bezier.getPosition(this.runtimeAttributes[J], L)
         }
         else
         {
            M = I.doMethod.call(this, J, N, K)
         }
         return M
      };
      F.setRuntimeAttribute = function(S)
      {
         if (this.patterns.points.test(S))
         {
            var K = this.getEl();
            var M = this.attributes;
            var J;
            var O = M["points"]["control"] || [];
            var L;
            var P,R;
            if (O.length > 0 && !Ext.isArray(O[0]))
            {
               O = [O]
            }
            else
            {
               var N = [];
               for (P = 0,R = O.length; P < R; ++P)
               {
                  N[P] = O[P]
               }
               O = N
            }
            Ext.fly(K, "_anim").position();
            if (G(M["points"]["from"]))
            {
               Ext.lib.Dom.setXY(K, M["points"]["from"])
            }
            else
            {
               Ext.lib.Dom.setXY(K, Ext.lib.Dom.getXY(K))
            }
            J = this.getAttribute("points");
            if (G(M["points"]["to"]))
            {
               L = E.call(this, M["points"]["to"], J);
               var Q = Ext.lib.Dom.getXY(this.getEl());
               for (P = 0,R = O.length; P < R; ++P)
               {
                  O[P] = E.call(this, O[P], J)
               }
            }
            else
            {
               if (G(M["points"]["by"]))
               {
                  L = [J[0] + M["points"]["by"][0],J[1] + M["points"]["by"][1]];
                  for (P = 0,R = O.length; P < R; ++P)
                  {
                     O[P] = [J[0] + O[P][0],J[1] + O[P][1]]
                  }
               }
            }
            this.runtimeAttributes[S] = [J];
            if (O.length > 0)
            {
               this.runtimeAttributes[S] = this.runtimeAttributes[S].concat(O)
            }
            this.runtimeAttributes[S][this.runtimeAttributes[S].length] = L
         }
         else
         {
            I.setRuntimeAttribute.call(this, S)
         }
      };
      var E = function(J, L)
      {
         var K = Ext.lib.Dom.getXY(this.getEl());
         J = [J[0] - K[0] + L[0],J[1] - K[1] + L[1]];
         return J
      };
      var G = function(J)
      {
         return(typeof J !== "undefined")
      }
   })();
   (function()
   {
      Ext.lib.Scroll = function(I, H, J, K)
      {
         if (I)
         {
            Ext.lib.Scroll.superclass.constructor.call(this, I, H, J, K)
         }
      };
      Ext.extend(Ext.lib.Scroll, Ext.lib.ColorAnim);
      var F = Ext.lib;
      var G = F.Scroll.superclass;
      var E = F.Scroll.prototype;
      E.toString = function()
      {
         var H = this.getEl();
         var I = H.id || H.tagName;
         return("Scroll " + I)
      };
      E.doMethod = function(H, K, I)
      {
         var J = null;
         if (H == "scroll")
         {
            J = [this.method(this.currentFrame, K[0], I[0] - K[0], this.totalFrames),this.method(this.currentFrame, K[1], I[1] - K[1], this.totalFrames)]
         }
         else
         {
            J = G.doMethod.call(this, H, K, I)
         }
         return J
      };
      E.getAttribute = function(H)
      {
         var J = null;
         var I = this.getEl();
         if (H == "scroll")
         {
            J = [I.scrollLeft,I.scrollTop]
         }
         else
         {
            J = G.getAttribute.call(this, H)
         }
         return J
      };
      E.setAttribute = function(H, K, J)
      {
         var I = this.getEl();
         if (H == "scroll")
         {
            I.scrollLeft = K[0];
            I.scrollTop = K[1]
         }
         else
         {
            G.setAttribute.call(this, H, K, J)
         }
      }
   })()
})();

