ext-all-debug.js
上传用户:chliyg
上传日期:2016-05-15
资源大小:3196k
文件大小:951k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. /*
  2.  * Ext JS Library 2.2
  3.  * Copyright(c) 2006-2008, Ext JS, LLC.
  4.  * licensing@extjs.com
  5.  * 
  6.  * http://extjs.com/license
  7.  */
  8. Ext.DomHelper = function(){     var tempTableEl = null;     var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;     var tableRe = /^table|tbody|tr|td$/i;         var createHtml = function(o){         if(typeof o == 'string'){             return o;         }         var b = "";         if (Ext.isArray(o)) {             for (var i = 0, l = o.length; i < l; i++) {                 b += createHtml(o[i]);             }             return b;         }         if(!o.tag){             o.tag = "div";         }         b += "<" + o.tag;         for(var attr in o){             if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;             if(attr == "style"){                 var s = o["style"];                 if(typeof s == "function"){                     s = s.call();                 }                 if(typeof s == "string"){                     b += ' style="' + s + '"';                 }else if(typeof s == "object"){                     b += ' style="';                     for(var key in s){                         if(typeof s[key] != "function"){                             b += key + ":" + s[key] + ";";                         }                     }                     b += '"';                 }             }else{                 if(attr == "cls"){                     b += ' class="' + o["cls"] + '"';                 }else if(attr == "htmlFor"){                     b += ' for="' + o["htmlFor"] + '"';                 }else{                     b += " " + attr + '="' + o[attr] + '"';                 }             }         }         if(emptyTags.test(o.tag)){             b += "/>";         }else{             b += ">";             var cn = o.children || o.cn;             if(cn){                 b += createHtml(cn);             } else if(o.html){                 b += o.html;             }             b += "</" + o.tag + ">";         }         return b;     };              var createDom = function(o, parentNode){         var el;         if (Ext.isArray(o)) {                                   el = document.createDocumentFragment();             for(var i = 0, l = o.length; i < l; i++) {                 createDom(o[i], el);             }         } else if (typeof o == "string") {                     el = document.createTextNode(o);         } else {             el = document.createElement(o.tag||'div');             var useSet = !!el.setAttribute;             for(var attr in o){                 if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;                 if(attr=="cls"){                     el.className = o["cls"];                 }else{                     if(useSet) el.setAttribute(attr, o[attr]);                     else el[attr] = o[attr];                 }             }             Ext.DomHelper.applyStyles(el, o.style);             var cn = o.children || o.cn;             if(cn){                 createDom(cn, el);             } else if(o.html){                 el.innerHTML = o.html;             }         }         if(parentNode){            parentNode.appendChild(el);         }         return el;     };     var ieTable = function(depth, s, h, e){         tempTableEl.innerHTML = [s, h, e].join('');         var i = -1, el = tempTableEl;         while(++i < depth){             el = el.firstChild;         }         return el;     };         var ts = '<table>',         te = '</table>',         tbs = ts+'<tbody>',         tbe = '</tbody>'+te,         trs = tbs + '<tr>',         tre = '</tr>'+tbe;          var insertIntoTable = function(tag, where, el, html){         if(!tempTableEl){             tempTableEl = document.createElement('div');         }         var node;         var before = null;         if(tag == 'td'){             if(where == 'afterbegin' || where == 'beforeend'){                 return;             }             if(where == 'beforebegin'){                 before = el;                 el = el.parentNode;             } else{                 before = el.nextSibling;                 el = el.parentNode;             }             node = ieTable(4, trs, html, tre);         }         else if(tag == 'tr'){             if(where == 'beforebegin'){                 before = el;                 el = el.parentNode;                 node = ieTable(3, tbs, html, tbe);             } else if(where == 'afterend'){                 before = el.nextSibling;                 el = el.parentNode;                 node = ieTable(3, tbs, html, tbe);             } else{                 if(where == 'afterbegin'){                     before = el.firstChild;                 }                 node = ieTable(4, trs, html, tre);             }         } else if(tag == 'tbody'){             if(where == 'beforebegin'){                 before = el;                 el = el.parentNode;                 node = ieTable(2, ts, html, te);             } else if(where == 'afterend'){                 before = el.nextSibling;                 el = el.parentNode;                 node = ieTable(2, ts, html, te);             } else{                 if(where == 'afterbegin'){                     before = el.firstChild;                 }                 node = ieTable(3, tbs, html, tbe);             }         } else{             if(where == 'beforebegin' || where == 'afterend'){                 return;             }             if(where == 'afterbegin'){                 before = el.firstChild;             }             node = ieTable(2, ts, html, te);         }         el.insertBefore(node, before);         return node;     };     return {          useDom : false,          markup : function(o){         return createHtml(o);     },          applyStyles : function(el, styles){         if(styles){            el = Ext.fly(el);            if(typeof styles == "string"){                var re = /s?([a-z-]*):s?([^;]*);?/gi;                var matches;                while ((matches = re.exec(styles)) != null){                    el.setStyle(matches[1], matches[2]);                }            }else if (typeof styles == "object"){                for (var style in styles){                   el.setStyle(style, styles[style]);                }            }else if (typeof styles == "function"){                 Ext.DomHelper.applyStyles(el, styles.call());            }         }     },          insertHtml : function(where, el, html){         where = where.toLowerCase();         if(el.insertAdjacentHTML){             if(tableRe.test(el.tagName)){                 var rs;                 if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){                     return rs;                 }             }             switch(where){                 case "beforebegin":                     el.insertAdjacentHTML('BeforeBegin', html);                     return el.previousSibling;                 case "afterbegin":                     el.insertAdjacentHTML('AfterBegin', html);                     return el.firstChild;                 case "beforeend":                     el.insertAdjacentHTML('BeforeEnd', html);                     return el.lastChild;                 case "afterend":                     el.insertAdjacentHTML('AfterEnd', html);                     return el.nextSibling;             }             throw 'Illegal insertion point -> "' + where + '"';         }         var range = el.ownerDocument.createRange();         var frag;         switch(where){              case "beforebegin":                 range.setStartBefore(el);                 frag = range.createContextualFragment(html);                 el.parentNode.insertBefore(frag, el);                 return el.previousSibling;              case "afterbegin":                 if(el.firstChild){                     range.setStartBefore(el.firstChild);                     frag = range.createContextualFragment(html);                     el.insertBefore(frag, el.firstChild);                     return el.firstChild;                 }else{                     el.innerHTML = html;                     return el.firstChild;                 }             case "beforeend":                 if(el.lastChild){                     range.setStartAfter(el.lastChild);                     frag = range.createContextualFragment(html);                     el.appendChild(frag);                     return el.lastChild;                 }else{                     el.innerHTML = html;                     return el.lastChild;                 }             case "afterend":                 range.setStartAfter(el);                 frag = range.createContextualFragment(html);                 el.parentNode.insertBefore(frag, el.nextSibling);                 return el.nextSibling;             }             throw 'Illegal insertion point -> "' + where + '"';     },          insertBefore : function(el, o, returnElement){         return this.doInsert(el, o, returnElement, "beforeBegin");     },          insertAfter : function(el, o, returnElement){         return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");     },          insertFirst : function(el, o, returnElement){         return this.doInsert(el, o, returnElement, "afterBegin", "firstChild");     },         doInsert : function(el, o, returnElement, pos, sibling){         el = Ext.getDom(el);         var newNode;         if(this.useDom){             newNode = createDom(o, null);             (sibling === "firstChild" ? el : el.parentNode).insertBefore(newNode, sibling ? el[sibling] : el);         }else{             var html = createHtml(o);             newNode = this.insertHtml(pos, el, html);         }         return returnElement ? Ext.get(newNode, true) : newNode;     },          append : function(el, o, returnElement){         el = Ext.getDom(el);         var newNode;         if(this.useDom){             newNode = createDom(o, null);             el.appendChild(newNode);         }else{             var html = createHtml(o);             newNode = this.insertHtml("beforeEnd", el, html);         }         return returnElement ? Ext.get(newNode, true) : newNode;     },          overwrite : function(el, o, returnElement){         el = Ext.getDom(el);         el.innerHTML = createHtml(o);         return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;     },          createTemplate : function(o){         var html = createHtml(o);         return new Ext.Template(html);     }     }; }(); Ext.Template = function(html){     var a = arguments;     if(Ext.isArray(html)){         html = html.join("");     }else if(a.length > 1){         var buf = [];         for(var i = 0, len = a.length; i < len; i++){             if(typeof a[i] == 'object'){                 Ext.apply(this, a[i]);             }else{                 buf[buf.length] = a[i];             }         }         html = buf.join('');     }          this.html = html;     if(this.compiled){         this.compile();     } }; Ext.Template.prototype = {          applyTemplate : function(values){         if(this.compiled){             return this.compiled(values);         }         var useF = this.disableFormats !== true;         var fm = Ext.util.Format, tpl = this;         var fn = function(m, name, format, args){             if(format && useF){                 if(format.substr(0, 5) == "this."){                     return tpl.call(format.substr(5), values[name], values);                 }else{                     if(args){                                                                                                 var re = /^s*['"](.*)["']s*$/;                         args = args.split(',');                         for(var i = 0, len = args.length; i < len; i++){                             args[i] = args[i].replace(re, "$1");                         }                         args = [values[name]].concat(args);                     }else{                         args = [values[name]];                     }                     return fm[format].apply(fm, args);                 }             }else{                 return values[name] !== undefined ? values[name] : "";             }         };         return this.html.replace(this.re, fn);     },          set : function(html, compile){         this.html = html;         this.compiled = null;         if(compile){             this.compile();         }         return this;     },          disableFormats : false,          re : /{([w-]+)(?::([w.]*)(?:((.*?)?))?)?}/g,          compile : function(){         var fm = Ext.util.Format;         var useF = this.disableFormats !== true;         var sep = Ext.isGecko ? "+" : ",";         var fn = function(m, name, format, args){             if(format && useF){                 args = args ? ',' + args : "";                 if(format.substr(0, 5) != "this."){                     format = "fm." + format + '(';                 }else{                     format = 'this.call("'+ format.substr(5) + '", ';                     args = ", values";                 }             }else{                 args= ''; format = "(values['" + name + "'] == undefined ? '' : ";             }             return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";         };         var body;                 if(Ext.isGecko){             body = "this.compiled = function(values){ return '" +                    this.html.replace(/\/g, '\\').replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn) +                     "';};";         }else{             body = ["this.compiled = function(values){ return ['"];             body.push(this.html.replace(/\/g, '\\').replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn));             body.push("'].join('');};");             body = body.join('');         }         eval(body);         return this;     },         call : function(fnName, value, allValues){         return this[fnName](value, allValues);     },          insertFirst: function(el, values, returnElement){         return this.doInsert('afterBegin', el, values, returnElement);     },          insertBefore: function(el, values, returnElement){         return this.doInsert('beforeBegin', el, values, returnElement);     },          insertAfter : function(el, values, returnElement){         return this.doInsert('afterEnd', el, values, returnElement);     },          append : function(el, values, returnElement){         return this.doInsert('beforeEnd', el, values, returnElement);     },     doInsert : function(where, el, values, returnEl){         el = Ext.getDom(el);         var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));         return returnEl ? Ext.get(newNode, true) : newNode;     },          overwrite : function(el, values, returnElement){         el = Ext.getDom(el);         el.innerHTML = this.applyTemplate(values);         return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;     } }; Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate; Ext.DomHelper.Template = Ext.Template; Ext.Template.from = function(el, config){     el = Ext.getDom(el);     return new Ext.Template(el.value || el.innerHTML, config || ''); };
  9. Ext.DomQuery = function(){
  10.     var cache = {}, simpleCache = {}, valueCache = {};
  11.     var nonSpace = /S/;
  12.     var trimRe = /^s+|s+$/g;
  13.     var tplRe = /{(d+)}/g;
  14.     var modeRe = /^(s?[/>+~]s?|s|$)/;
  15.     var tagTokenRe = /^(#)?([w-*]+)/;
  16.     var nthRe = /(d*)n+?(d*)/, nthRe2 = /D/;
  17.     function child(p, index){
  18.         var i = 0;
  19.         var n = p.firstChild;
  20.         while(n){
  21.             if(n.nodeType == 1){
  22.                if(++i == index){
  23.                    return n;
  24.                }
  25.             }
  26.             n = n.nextSibling;
  27.         }
  28.         return null;
  29.     };
  30.     function next(n){
  31.         while((n = n.nextSibling) && n.nodeType != 1);
  32.         return n;
  33.     };
  34.     function prev(n){
  35.         while((n = n.previousSibling) && n.nodeType != 1);
  36.         return n;
  37.     };
  38.     function children(d){
  39.         var n = d.firstChild, ni = -1;
  40.       while(n){
  41.           var nx = n.nextSibling;
  42.           if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
  43.               d.removeChild(n);
  44.           }else{
  45.               n.nodeIndex = ++ni;
  46.           }
  47.           n = nx;
  48.       }
  49.       return this;
  50.   };
  51.     function byClassName(c, a, v){
  52.         if(!v){
  53.             return c;
  54.         }
  55.         var r = [], ri = -1, cn;
  56.         for(var i = 0, ci; ci = c[i]; i++){
  57.             if((' '+ci.className+' ').indexOf(v) != -1){
  58.                 r[++ri] = ci;
  59.             }
  60.         }
  61.         return r;
  62.     };
  63.     function attrValue(n, attr){
  64.         if(!n.tagName && typeof n.length != "undefined"){
  65.             n = n[0];
  66.         }
  67.         if(!n){
  68.             return null;
  69.         }
  70.         if(attr == "for"){
  71.             return n.htmlFor;
  72.         }
  73.         if(attr == "class" || attr == "className"){
  74.             return n.className;
  75.         }
  76.         return n.getAttribute(attr) || n[attr];
  77.     };
  78.     function getNodes(ns, mode, tagName){
  79.         var result = [], ri = -1, cs;
  80.         if(!ns){
  81.             return result;
  82.         }
  83.         tagName = tagName || "*";
  84.         if(typeof ns.getElementsByTagName != "undefined"){
  85.             ns = [ns];
  86.         }
  87.         if(!mode){
  88.             for(var i = 0, ni; ni = ns[i]; i++){
  89.                 cs = ni.getElementsByTagName(tagName);
  90.                 for(var j = 0, ci; ci = cs[j]; j++){
  91.                     result[++ri] = ci;
  92.                 }
  93.             }
  94.         }else if(mode == "/" || mode == ">"){
  95.             var utag = tagName.toUpperCase();
  96.             for(var i = 0, ni, cn; ni = ns[i]; i++){
  97.                 cn = ni.children || ni.childNodes;
  98.                 for(var j = 0, cj; cj = cn[j]; j++){
  99.                     if(cj.nodeName == utag || cj.nodeName == tagName  || tagName == '*'){
  100.                         result[++ri] = cj;
  101.                     }
  102.                 }
  103.             }
  104.         }else if(mode == "+"){
  105.             var utag = tagName.toUpperCase();
  106.             for(var i = 0, n; n = ns[i]; i++){
  107.                 while((n = n.nextSibling) && n.nodeType != 1);
  108.                 if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){
  109.                     result[++ri] = n;
  110.                 }
  111.             }
  112.         }else if(mode == "~"){
  113.             for(var i = 0, n; n = ns[i]; i++){
  114.                 while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));
  115.                 if(n){
  116.                     result[++ri] = n;
  117.                 }
  118.             }
  119.         }
  120.         return result;
  121.     };
  122.     function concat(a, b){
  123.         if(b.slice){
  124.             return a.concat(b);
  125.         }
  126.         for(var i = 0, l = b.length; i < l; i++){
  127.             a[a.length] = b[i];
  128.         }
  129.         return a;
  130.     }
  131.     function byTag(cs, tagName){
  132.         if(cs.tagName || cs == document){
  133.             cs = [cs];
  134.         }
  135.         if(!tagName){
  136.             return cs;
  137.         }
  138.         var r = [], ri = -1;
  139.         tagName = tagName.toLowerCase();
  140.         for(var i = 0, ci; ci = cs[i]; i++){
  141.             if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
  142.                 r[++ri] = ci;
  143.             }
  144.         }
  145.         return r;
  146.     };
  147.     function byId(cs, attr, id){
  148.         if(cs.tagName || cs == document){
  149.             cs = [cs];
  150.         }
  151.         if(!id){
  152.             return cs;
  153.         }
  154.         var r = [], ri = -1;
  155.         for(var i = 0,ci; ci = cs[i]; i++){
  156.             if(ci && ci.id == id){
  157.                 r[++ri] = ci;
  158.                 return r;
  159.             }
  160.         }
  161.         return r;
  162.     };
  163.     function byAttribute(cs, attr, value, op, custom){
  164.         var r = [], ri = -1, st = custom=="{";
  165.         var f = Ext.DomQuery.operators[op];
  166.         for(var i = 0, ci; ci = cs[i]; i++){
  167.             var a;
  168.             if(st){
  169.                 a = Ext.DomQuery.getStyle(ci, attr);
  170.             }
  171.             else if(attr == "class" || attr == "className"){
  172.                 a = ci.className;
  173.             }else if(attr == "for"){
  174.                 a = ci.htmlFor;
  175.             }else if(attr == "href"){
  176.                 a = ci.getAttribute("href", 2);
  177.             }else{
  178.                 a = ci.getAttribute(attr);
  179.             }
  180.             if((f && f(a, value)) || (!f && a)){
  181.                 r[++ri] = ci;
  182.             }
  183.         }
  184.         return r;
  185.     };
  186.     function byPseudo(cs, name, value){
  187.         return Ext.DomQuery.pseudos[name](cs, value);
  188.     };
  189.                    var isIE = window.ActiveXObject ? true : false;
  190.               eval("var batch = 30803;");
  191.     var key = 30803;
  192.     function nodupIEXml(cs){
  193.         var d = ++key;
  194.         cs[0].setAttribute("_nodup", d);
  195.         var r = [cs[0]];
  196.         for(var i = 1, len = cs.length; i < len; i++){
  197.             var c = cs[i];
  198.             if(!c.getAttribute("_nodup") != d){
  199.                 c.setAttribute("_nodup", d);
  200.                 r[r.length] = c;
  201.             }
  202.         }
  203.         for(var i = 0, len = cs.length; i < len; i++){
  204.             cs[i].removeAttribute("_nodup");
  205.         }
  206.         return r;
  207.     }
  208.     function nodup(cs){
  209.         if(!cs){
  210.             return [];
  211.         }
  212.         var len = cs.length, c, i, r = cs, cj, ri = -1;
  213.         if(!len || typeof cs.nodeType != "undefined" || len == 1){
  214.             return cs;
  215.         }
  216.         if(isIE && typeof cs[0].selectSingleNode != "undefined"){
  217.             return nodupIEXml(cs);
  218.         }
  219.         var d = ++key;
  220.         cs[0]._nodup = d;
  221.         for(i = 1; c = cs[i]; i++){
  222.             if(c._nodup != d){
  223.                 c._nodup = d;
  224.             }else{
  225.                 r = [];
  226.                 for(var j = 0; j < i; j++){
  227.                     r[++ri] = cs[j];
  228.                 }
  229.                 for(j = i+1; cj = cs[j]; j++){
  230.                     if(cj._nodup != d){
  231.                         cj._nodup = d;
  232.                         r[++ri] = cj;
  233.                     }
  234.                 }
  235.                 return r;
  236.             }
  237.         }
  238.         return r;
  239.     }
  240.     function quickDiffIEXml(c1, c2){
  241.         var d = ++key;
  242.         for(var i = 0, len = c1.length; i < len; i++){
  243.             c1[i].setAttribute("_qdiff", d);
  244.         }
  245.         var r = [];
  246.         for(var i = 0, len = c2.length; i < len; i++){
  247.             if(c2[i].getAttribute("_qdiff") != d){
  248.                 r[r.length] = c2[i];
  249.             }
  250.         }
  251.         for(var i = 0, len = c1.length; i < len; i++){
  252.            c1[i].removeAttribute("_qdiff");
  253.         }
  254.         return r;
  255.     }
  256.     function quickDiff(c1, c2){
  257.         var len1 = c1.length;
  258.         if(!len1){
  259.             return c2;
  260.         }
  261.         if(isIE && c1[0].selectSingleNode){
  262.             return quickDiffIEXml(c1, c2);
  263.         }
  264.         var d = ++key;
  265.         for(var i = 0; i < len1; i++){
  266.             c1[i]._qdiff = d;
  267.         }
  268.         var r = [];
  269.         for(var i = 0, len = c2.length; i < len; i++){
  270.             if(c2[i]._qdiff != d){
  271.                 r[r.length] = c2[i];
  272.             }
  273.         }
  274.         return r;
  275.     }
  276.     function quickId(ns, mode, root, id){
  277.         if(ns == root){
  278.            var d = root.ownerDocument || root;
  279.            return d.getElementById(id);
  280.         }
  281.         ns = getNodes(ns, mode, "*");
  282.         return byId(ns, null, id);
  283.     }
  284.     return {
  285.         getStyle : function(el, name){
  286.             return Ext.fly(el).getStyle(name);
  287.         },
  288.         
  289.         compile : function(path, type){
  290.             type = type || "select";
  291.             var fn = ["var f = function(root){n var mode; ++batch; var n = root || document;n"];
  292.             var q = path, mode, lq;
  293.             var tk = Ext.DomQuery.matchers;
  294.             var tklen = tk.length;
  295.             var mm;
  296.                          var lmode = q.match(modeRe);
  297.             if(lmode && lmode[1]){
  298.                 fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";';
  299.                 q = q.replace(lmode[1], "");
  300.             }
  301.                          while(path.substr(0, 1)=="/"){
  302.                 path = path.substr(1);
  303.             }
  304.             while(q && lq != q){
  305.                 lq = q;
  306.                 var tm = q.match(tagTokenRe);
  307.                 if(type == "select"){
  308.                     if(tm){
  309.                         if(tm[1] == "#"){
  310.                             fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
  311.                         }else{
  312.                             fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
  313.                         }
  314.                         q = q.replace(tm[0], "");
  315.                     }else if(q.substr(0, 1) != '@'){
  316.                         fn[fn.length] = 'n = getNodes(n, mode, "*");';
  317.                     }
  318.                 }else{
  319.                     if(tm){
  320.                         if(tm[1] == "#"){
  321.                             fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
  322.                         }else{
  323.                             fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
  324.                         }
  325.                         q = q.replace(tm[0], "");
  326.                     }
  327.                 }
  328.                 while(!(mm = q.match(modeRe))){
  329.                     var matched = false;
  330.                     for(var j = 0; j < tklen; j++){
  331.                         var t = tk[j];
  332.                         var m = q.match(t.re);
  333.                         if(m){
  334.                             fn[fn.length] = t.select.replace(tplRe, function(x, i){
  335.                                                     return m[i];
  336.                                                 });
  337.                             q = q.replace(m[0], "");
  338.                             matched = true;
  339.                             break;
  340.                         }
  341.                     }
  342.                                          if(!matched){
  343.                         throw 'Error parsing selector, parsing failed at "' + q + '"';
  344.                     }
  345.                 }
  346.                 if(mm[1]){
  347.                     fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";';
  348.                     q = q.replace(mm[1], "");
  349.                 }
  350.             }
  351.             fn[fn.length] = "return nodup(n);n}";
  352.             eval(fn.join(""));
  353.             return f;
  354.         },
  355.         
  356.         select : function(path, root, type){
  357.             if(!root || root == document){
  358.                 root = document;
  359.             }
  360.             if(typeof root == "string"){
  361.                 root = document.getElementById(root);
  362.             }
  363.             var paths = path.split(",");
  364.             var results = [];
  365.             for(var i = 0, len = paths.length; i < len; i++){
  366.                 var p = paths[i].replace(trimRe, "");
  367.                 if(!cache[p]){
  368.                     cache[p] = Ext.DomQuery.compile(p);
  369.                     if(!cache[p]){
  370.                         throw p + " is not a valid selector";
  371.                     }
  372.                 }
  373.                 var result = cache[p](root);
  374.                 if(result && result != document){
  375.                     results = results.concat(result);
  376.                 }
  377.             }
  378.             if(paths.length > 1){
  379.                 return nodup(results);
  380.             }
  381.             return results;
  382.         },
  383.         
  384.         selectNode : function(path, root){
  385.             return Ext.DomQuery.select(path, root)[0];
  386.         },
  387.         
  388.         selectValue : function(path, root, defaultValue){
  389.             path = path.replace(trimRe, "");
  390.             if(!valueCache[path]){
  391.                 valueCache[path] = Ext.DomQuery.compile(path, "select");
  392.             }
  393.             var n = valueCache[path](root);
  394.             n = n[0] ? n[0] : n;
  395.             var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
  396.             return ((v === null||v === undefined||v==='') ? defaultValue : v);
  397.         },
  398.         
  399.         selectNumber : function(path, root, defaultValue){
  400.             var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
  401.             return parseFloat(v);
  402.         },
  403.         
  404.         is : function(el, ss){
  405.             if(typeof el == "string"){
  406.                 el = document.getElementById(el);
  407.             }
  408.             var isArray = Ext.isArray(el);
  409.             var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
  410.             return isArray ? (result.length == el.length) : (result.length > 0);
  411.         },
  412.         
  413.         filter : function(els, ss, nonMatches){
  414.             ss = ss.replace(trimRe, "");
  415.             if(!simpleCache[ss]){
  416.                 simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
  417.             }
  418.             var result = simpleCache[ss](els);
  419.             return nonMatches ? quickDiff(result, els) : result;
  420.         },
  421.         
  422.         matchers : [{
  423.                 re: /^.([w-]+)/,
  424.                 select: 'n = byClassName(n, null, " {1} ");'
  425.             }, {
  426.                 re: /^:([w-]+)(?:(((?:[^s>/]*|.*?))))?/,
  427.                 select: 'n = byPseudo(n, "{1}", "{2}");'
  428.             },{
  429.                 re: /^(?:([[{])(?:@)?([w-]+)s?(?:(=|.=)s?['"]?(.*?)["']?)?[]}])/,
  430.                 select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
  431.             }, {
  432.                 re: /^#([w-]+)/,
  433.                 select: 'n = byId(n, null, "{1}");'
  434.             },{
  435.                 re: /^@([w-]+)/,
  436.                 select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
  437.             }
  438.         ],
  439.         
  440.         operators : {
  441.             "=" : function(a, v){
  442.                 return a == v;
  443.             },
  444.             "!=" : function(a, v){
  445.                 return a != v;
  446.             },
  447.             "^=" : function(a, v){
  448.                 return a && a.substr(0, v.length) == v;
  449.             },
  450.             "$=" : function(a, v){
  451.                 return a && a.substr(a.length-v.length) == v;
  452.             },
  453.             "*=" : function(a, v){
  454.                 return a && a.indexOf(v) !== -1;
  455.             },
  456.             "%=" : function(a, v){
  457.                 return (a % v) == 0;
  458.             },
  459.             "|=" : function(a, v){
  460.                 return a && (a == v || a.substr(0, v.length+1) == v+'-');
  461.             },
  462.             "~=" : function(a, v){
  463.                 return a && (' '+a+' ').indexOf(' '+v+' ') != -1;
  464.             }
  465.         },
  466.         
  467.         pseudos : {
  468.             "first-child" : function(c){
  469.                 var r = [], ri = -1, n;
  470.                 for(var i = 0, ci; ci = n = c[i]; i++){
  471.                     while((n = n.previousSibling) && n.nodeType != 1);
  472.                     if(!n){
  473.                         r[++ri] = ci;
  474.                     }
  475.                 }
  476.                 return r;
  477.             },
  478.             "last-child" : function(c){
  479.                 var r = [], ri = -1, n;
  480.                 for(var i = 0, ci; ci = n = c[i]; i++){
  481.                     while((n = n.nextSibling) && n.nodeType != 1);
  482.                     if(!n){
  483.                         r[++ri] = ci;
  484.                     }
  485.                 }
  486.                 return r;
  487.             },
  488.             "nth-child" : function(c, a) {
  489.                 var r = [], ri = -1;
  490.                 var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);
  491.                 var f = (m[1] || 1) - 0, l = m[2] - 0;
  492.                 for(var i = 0, n; n = c[i]; i++){
  493.                     var pn = n.parentNode;
  494.                     if (batch != pn._batch) {
  495.                         var j = 0;
  496.                         for(var cn = pn.firstChild; cn; cn = cn.nextSibling){
  497.                             if(cn.nodeType == 1){
  498.                                cn.nodeIndex = ++j;
  499.                             }
  500.                         }
  501.                         pn._batch = batch;
  502.                     }
  503.                     if (f == 1) {
  504.                         if (l == 0 || n.nodeIndex == l){
  505.                             r[++ri] = n;
  506.                         }
  507.                     } else if ((n.nodeIndex + l) % f == 0){
  508.                         r[++ri] = n;
  509.                     }
  510.                 }
  511.                 return r;
  512.             },
  513.             "only-child" : function(c){
  514.                 var r = [], ri = -1;;
  515.                 for(var i = 0, ci; ci = c[i]; i++){
  516.                     if(!prev(ci) && !next(ci)){
  517.                         r[++ri] = ci;
  518.                     }
  519.                 }
  520.                 return r;
  521.             },
  522.             "empty" : function(c){
  523.                 var r = [], ri = -1;
  524.                 for(var i = 0, ci; ci = c[i]; i++){
  525.                     var cns = ci.childNodes, j = 0, cn, empty = true;
  526.                     while(cn = cns[j]){
  527.                         ++j;
  528.                         if(cn.nodeType == 1 || cn.nodeType == 3){
  529.                             empty = false;
  530.                             break;
  531.                         }
  532.                     }
  533.                     if(empty){
  534.                         r[++ri] = ci;
  535.                     }
  536.                 }
  537.                 return r;
  538.             },
  539.             "contains" : function(c, v){
  540.                 var r = [], ri = -1;
  541.                 for(var i = 0, ci; ci = c[i]; i++){
  542.                     if((ci.textContent||ci.innerText||'').indexOf(v) != -1){
  543.                         r[++ri] = ci;
  544.                     }
  545.                 }
  546.                 return r;
  547.             },
  548.             "nodeValue" : function(c, v){
  549.                 var r = [], ri = -1;
  550.                 for(var i = 0, ci; ci = c[i]; i++){
  551.                     if(ci.firstChild && ci.firstChild.nodeValue == v){
  552.                         r[++ri] = ci;
  553.                     }
  554.                 }
  555.                 return r;
  556.             },
  557.             "checked" : function(c){
  558.                 var r = [], ri = -1;
  559.                 for(var i = 0, ci; ci = c[i]; i++){
  560.                     if(ci.checked == true){
  561.                         r[++ri] = ci;
  562.                     }
  563.                 }
  564.                 return r;
  565.             },
  566.             "not" : function(c, ss){
  567.                 return Ext.DomQuery.filter(c, ss, true);
  568.             },
  569.             "any" : function(c, selectors){
  570.                 var ss = selectors.split('|');
  571.                 var r = [], ri = -1, s;
  572.                 for(var i = 0, ci; ci = c[i]; i++){
  573.                     for(var j = 0; s = ss[j]; j++){
  574.                         if(Ext.DomQuery.is(ci, s)){
  575.                             r[++ri] = ci;
  576.                             break;
  577.                         }
  578.                     }
  579.                 }
  580.                 return r;
  581.             },
  582.             "odd" : function(c){
  583.                 return this["nth-child"](c, "odd");
  584.             },
  585.             "even" : function(c){
  586.                 return this["nth-child"](c, "even");
  587.             },
  588.             "nth" : function(c, a){
  589.                 return c[a-1] || [];
  590.             },
  591.             "first" : function(c){
  592.                 return c[0] || [];
  593.             },
  594.             "last" : function(c){
  595.                 return c[c.length-1] || [];
  596.             },
  597.             "has" : function(c, ss){
  598.                 var s = Ext.DomQuery.select;
  599.                 var r = [], ri = -1;
  600.                 for(var i = 0, ci; ci = c[i]; i++){
  601.                     if(s(ss, ci).length > 0){
  602.                         r[++ri] = ci;
  603.                     }
  604.                 }
  605.                 return r;
  606.             },
  607.             "next" : function(c, ss){
  608.                 var is = Ext.DomQuery.is;
  609.                 var r = [], ri = -1;
  610.                 for(var i = 0, ci; ci = c[i]; i++){
  611.                     var n = next(ci);
  612.                     if(n && is(n, ss)){
  613.                         r[++ri] = ci;
  614.                     }
  615.                 }
  616.                 return r;
  617.             },
  618.             "prev" : function(c, ss){
  619.                 var is = Ext.DomQuery.is;
  620.                 var r = [], ri = -1;
  621.                 for(var i = 0, ci; ci = c[i]; i++){
  622.                     var n = prev(ci);
  623.                     if(n && is(n, ss)){
  624.                         r[++ri] = ci;
  625.                     }
  626.                 }
  627.                 return r;
  628.             }
  629.         }
  630.     };
  631. }();
  632. Ext.query = Ext.DomQuery.select;
  633. Ext.util.Observable = function(){          if(this.listeners){         this.on(this.listeners);         delete this.listeners;     } }; Ext.util.Observable.prototype = {          fireEvent : function(){         if(this.eventsSuspended !== true){             var ce = this.events[arguments[0].toLowerCase()];             if(typeof ce == "object"){                 return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));             }         }         return true;     },         filterOptRe : /^(?:scope|delay|buffer|single)$/,          addListener : function(eventName, fn, scope, o){         if(typeof eventName == "object"){             o = eventName;             for(var e in o){                 if(this.filterOptRe.test(e)){                     continue;                 }                 if(typeof o[e] == "function"){                                         this.addListener(e, o[e], o.scope,  o);                 }else{                                         this.addListener(e, o[e].fn, o[e].scope, o[e]);                 }             }             return;         }         o = (!o || typeof o == "boolean") ? {} : o;         eventName = eventName.toLowerCase();         var ce = this.events[eventName] || true;         if(typeof ce == "boolean"){             ce = new Ext.util.Event(this, eventName);             this.events[eventName] = ce;         }         ce.addListener(fn, scope, o);     },          removeListener : function(eventName, fn, scope){         var ce = this.events[eventName.toLowerCase()];         if(typeof ce == "object"){             ce.removeListener(fn, scope);         }     },          purgeListeners : function(){         for(var evt in this.events){             if(typeof this.events[evt] == "object"){                  this.events[evt].clearListeners();             }         }     },          relayEvents : function(o, events){         var createHandler = function(ename){             return function(){                 return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));             };         };         for(var i = 0, len = events.length; i < len; i++){             var ename = events[i];             if(!this.events[ename]){ this.events[ename] = true; };             o.on(ename, createHandler(ename), this);         }     },          addEvents : function(o){         if(!this.events){             this.events = {};         }         if(typeof o == 'string'){             for(var i = 0, a = arguments, v; v = a[i]; i++){                 if(!this.events[a[i]]){                     this.events[a[i]] = true;                 }             }         }else{             Ext.applyIf(this.events, o);         }     },          hasListener : function(eventName){         var e = this.events[eventName];         return typeof e == "object" && e.listeners.length > 0;     },          suspendEvents : function(){         this.eventsSuspended = true;     },          resumeEvents : function(){         this.eventsSuspended = false;     },                 getMethodEvent : function(method){         if(!this.methodEvents){             this.methodEvents = {};         }         var e = this.methodEvents[method];         if(!e){             e = {};             this.methodEvents[method] = e;             e.originalFn = this[method];             e.methodName = method;             e.before = [];             e.after = [];             var returnValue, v, cancel;             var obj = this;             var makeCall = function(fn, scope, args){                 if((v = fn.apply(scope || obj, args)) !== undefined){                     if(typeof v === 'object'){                         if(v.returnValue !== undefined){                             returnValue = v.returnValue;                         }else{                             returnValue = v;                         }                         if(v.cancel === true){                             cancel = true;                         }                     }else if(v === false){                         cancel = true;                     }else {                         returnValue = v;                     }                 }             }             this[method] = function(){                 returnValue = v = undefined; cancel = false;                 var args = Array.prototype.slice.call(arguments, 0);                 for(var i = 0, len = e.before.length; i < len; i++){                     makeCall(e.before[i].fn, e.before[i].scope, args);                     if(cancel){                         return returnValue;                     }                 }                 if((v = e.originalFn.apply(obj, args)) !== undefined){                     returnValue = v;                 }                 for(var i = 0, len = e.after.length; i < len; i++){                     makeCall(e.after[i].fn, e.after[i].scope, args);                     if(cancel){                         return returnValue;                     }                 }                 return returnValue;             };         }         return e;     },         beforeMethod : function(method, fn, scope){         var e = this.getMethodEvent(method);         e.before.push({fn: fn, scope: scope});     },         afterMethod : function(method, fn, scope){         var e = this.getMethodEvent(method);         e.after.push({fn: fn, scope: scope});     },     removeMethodListener : function(method, fn, scope){         var e = this.getMethodEvent(method);         for(var i = 0, len = e.before.length; i < len; i++){             if(e.before[i].fn == fn && e.before[i].scope == scope){                 e.before.splice(i, 1);                 return;             }         }         for(var i = 0, len = e.after.length; i < len; i++){             if(e.after[i].fn == fn && e.after[i].scope == scope){                 e.after.splice(i, 1);                 return;             }         }     } }; Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener; Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener; Ext.util.Observable.capture = function(o, fn, scope){     o.fireEvent = o.fireEvent.createInterceptor(fn, scope); }; Ext.util.Observable.releaseCapture = function(o){     o.fireEvent = Ext.util.Observable.prototype.fireEvent; }; (function(){     var createBuffered = function(h, o, scope){         var task = new Ext.util.DelayedTask();         return function(){             task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));         };     };     var createSingle = function(h, e, fn, scope){         return function(){             e.removeListener(fn, scope);             return h.apply(scope, arguments);         };     };     var createDelayed = function(h, o, scope){         return function(){             var args = Array.prototype.slice.call(arguments, 0);             setTimeout(function(){                 h.apply(scope, args);             }, o.delay || 10);         };     };     Ext.util.Event = function(obj, name){         this.name = name;         this.obj = obj;         this.listeners = [];     };     Ext.util.Event.prototype = {         addListener : function(fn, scope, options){             scope = scope || this.obj;             if(!this.isListening(fn, scope)){                 var l = this.createListener(fn, scope, options);                 if(!this.firing){                     this.listeners.push(l);                 }else{                     this.listeners = this.listeners.slice(0);                     this.listeners.push(l);                 }             }         },         createListener : function(fn, scope, o){             o = o || {};             scope = scope || this.obj;             var l = {fn: fn, scope: scope, options: o};             var h = fn;             if(o.delay){                 h = createDelayed(h, o, scope);             }             if(o.single){                 h = createSingle(h, this, fn, scope);             }             if(o.buffer){                 h = createBuffered(h, o, scope);             }             l.fireFn = h;             return l;         },         findListener : function(fn, scope){             scope = scope || this.obj;             var ls = this.listeners;             for(var i = 0, len = ls.length; i < len; i++){                 var l = ls[i];                 if(l.fn == fn && l.scope == scope){                     return i;                 }             }             return -1;         },         isListening : function(fn, scope){             return this.findListener(fn, scope) != -1;         },         removeListener : function(fn, scope){             var index;             if((index = this.findListener(fn, scope)) != -1){                 if(!this.firing){                     this.listeners.splice(index, 1);                 }else{                     this.listeners = this.listeners.slice(0);                     this.listeners.splice(index, 1);                 }                 return true;             }             return false;         },         clearListeners : function(){             this.listeners = [];         },         fire : function(){             var ls = this.listeners, scope, len = ls.length;             if(len > 0){                 this.firing = true;                 var args = Array.prototype.slice.call(arguments, 0);                 for(var i = 0; i < len; i++){                     var l = ls[i];                     if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){                         this.firing = false;                         return false;                     }                 }                 this.firing = false;             }             return true;         }     }; })(); Ext.EventManager = function(){     var docReadyEvent, docReadyProcId, docReadyState = false;     var resizeEvent, resizeTask, textEvent, textSize;     var E = Ext.lib.Event;     var D = Ext.lib.Dom;         var xname = 'Ex' + 't';     var elHash = {};     var addListener = function(el, ename, fn, wrap, scope){         var id = Ext.id(el);         if(!elHash[id]){             elHash[id] = {};         }         var es = elHash[id];         if(!es[ename]){             es[ename] = [];         }         var ls = es[ename];         ls.push({             id: id,             ename: ename,             fn: fn,             wrap: wrap,             scope: scope         });          E.on(el, ename, wrap);         if(ename == "mousewheel" && el.addEventListener){             el.addEventListener("DOMMouseScroll", wrap, false);             E.on(window, 'unload', function(){                 el.removeEventListener("DOMMouseScroll", wrap, false);             });         }         if(ename == "mousedown" && el == document){             Ext.EventManager.stoppedMouseDownEvent.addListener(wrap);         }     }     var removeListener = function(el, ename, fn, scope){         el = Ext.getDom(el);         var id = Ext.id(el), es = elHash[id], wrap;         if(es){             var ls = es[ename], l;             if(ls){                 for(var i = 0, len = ls.length; i < len; i++){                     l = ls[i];                     if(l.fn == fn && (!scope || l.scope == scope)){                         wrap = l.wrap;                         E.un(el, ename, wrap);                         ls.splice(i, 1);                         break;                     }                 }             }         }         if(ename == "mousewheel" && el.addEventListener && wrap){             el.removeEventListener("DOMMouseScroll", wrap, false);         }         if(ename == "mousedown" && el == document && wrap){             Ext.EventManager.stoppedMouseDownEvent.removeListener(wrap);         }     }     var removeAll = function(el){         el = Ext.getDom(el);         var id = Ext.id(el), es = elHash[id], ls;         if(es){             for(var ename in es){                 if(es.hasOwnProperty(ename)){                     ls = es[ename];                     for(var i = 0, len = ls.length; i < len; i++){                         E.un(el, ename, ls[i].wrap);                         ls[i] = null;                     }                 }                 es[ename] = null;             }             delete elHash[id];         }     }      var fireDocReady = function(){         if(!docReadyState){             docReadyState = Ext.isReady = true;             if(Ext.isGecko || Ext.isOpera) {                 document.removeEventListener("DOMContentLoaded", fireDocReady, false);             }         }         if(docReadyProcId){             clearInterval(docReadyProcId);             docReadyProcId = null;         }         if(docReadyEvent){             docReadyEvent.fire();             docReadyEvent.clearListeners();        }     };     var initDocReady = function(){         docReadyEvent = new Ext.util.Event();         if(Ext.isReady){             return;         }                 E.on(window, 'load', fireDocReady);         if(Ext.isGecko || Ext.isOpera) {             document.addEventListener('DOMContentLoaded', fireDocReady, false);         }         else if(Ext.isIE){             docReadyProcId = setInterval(function(){                 try{                                         Ext.isReady || (document.documentElement.doScroll('left'));                 }catch(e){                     return;                 }                 fireDocReady();              }, 5); document.onreadystatechange = function(){ if(document.readyState == 'complete'){ document.onreadystatechange = null; fireDocReady(); }             };         }         else if(Ext.isSafari){             docReadyProcId = setInterval(function(){                 var rs = document.readyState;                 if(rs == 'complete') {                     fireDocReady();                  }             }, 10);         }     };     var createBuffered = function(h, o){         var task = new Ext.util.DelayedTask(h);         return function(e){                         e = new Ext.EventObjectImpl(e);             task.delay(o.buffer, h, null, [e]);         };     };     var createSingle = function(h, el, ename, fn, scope){         return function(e){             Ext.EventManager.removeListener(el, ename, fn, scope);             h(e);         };     };     var createDelayed = function(h, o){         return function(e){                         e = new Ext.EventObjectImpl(e);             setTimeout(function(){                 h(e);             }, o.delay || 10);         };     };     var listen = function(element, ename, opt, fn, scope){         var o = (!opt || typeof opt == "boolean") ? {} : opt;         fn = fn || o.fn; scope = scope || o.scope;         var el = Ext.getDom(element);         if(!el){             throw "Error listening for "" + ename + '". Element "' + element + '" doesn't exist.';         }         var h = function(e){                         if(!window[xname]){                 return;             }             e = Ext.EventObject.setEvent(e);             var t;             if(o.delegate){                 t = e.getTarget(o.delegate, el);                 if(!t){                     return;                 }             }else{                 t = e.target;             }             if(o.stopEvent === true){                 e.stopEvent();             }             if(o.preventDefault === true){                e.preventDefault();             }             if(o.stopPropagation === true){                 e.stopPropagation();             }             if(o.normalized === false){                 e = e.browserEvent;             }             fn.call(scope || el, e, t, o);         };         if(o.delay){             h = createDelayed(h, o);         }         if(o.single){             h = createSingle(h, el, ename, fn, scope);         }         if(o.buffer){             h = createBuffered(h, o);         }         addListener(el, ename, fn, h, scope);         return h;     };     var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;     var pub = {              addListener : function(element, eventName, fn, scope, options){             if(typeof eventName == "object"){                 var o = eventName;                 for(var e in o){                     if(propRe.test(e)){                         continue;                     }                     if(typeof o[e] == "function"){                                                 listen(element, e, o, o[e], o.scope);                     }else{                                                 listen(element, e, o[e]);                     }                 }                 return;             }             return listen(element, eventName, options, fn, scope);         },                  removeListener : function(element, eventName, fn, scope){             return removeListener(element, eventName, fn, scope);         },                  removeAll : function(element){             return removeAll(element);         },                   onDocumentReady : function(fn, scope, options){ if(!docReadyEvent){                 initDocReady(); } if(docReadyState || Ext.isReady){  options || (options = {}); fn.defer(options.delay||0, scope); }else{ docReadyEvent.addListener(fn, scope, options); }         },                  onWindowResize : function(fn, scope, options){             if(!resizeEvent){                 resizeEvent = new Ext.util.Event();                 resizeTask = new Ext.util.DelayedTask(function(){                     resizeEvent.fire(D.getViewWidth(), D.getViewHeight());                 });                 E.on(window, "resize", this.fireWindowResize, this);             }             resizeEvent.addListener(fn, scope, options);         },                 fireWindowResize : function(){             if(resizeEvent){                 if((Ext.isIE||Ext.isAir) && resizeTask){                     resizeTask.delay(50);                 }else{                     resizeEvent.fire(D.getViewWidth(), D.getViewHeight());                 }             }         },                  onTextResize : function(fn, scope, options){             if(!textEvent){                 textEvent = new Ext.util.Event();                 var textEl = new Ext.Element(document.createElement('div'));                 textEl.dom.className = 'x-text-resize';                 textEl.dom.innerHTML = 'X';                 textEl.appendTo(document.body);                 textSize = textEl.dom.offsetHeight;                 setInterval(function(){                     if(textEl.dom.offsetHeight != textSize){                         textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);                     }                 }, this.textResizeInterval);             }             textEvent.addListener(fn, scope, options);         },                  removeResizeListener : function(fn, scope){             if(resizeEvent){                 resizeEvent.removeListener(fn, scope);             }         },                 fireResize : function(){             if(resizeEvent){                 resizeEvent.fire(D.getViewWidth(), D.getViewHeight());             }         },                  ieDeferSrc : false,                  textResizeInterval : 50     };           pub.on = pub.addListener;          pub.un = pub.removeListener;     pub.stoppedMouseDownEvent = new Ext.util.Event();     return pub; }(); Ext.onReady = Ext.EventManager.onDocumentReady; (function(){     var initExtCss = function(){                 var bd = document.body || document.getElementsByTagName('body')[0];         if(!bd){ return false; }         var cls = [' ',                 Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')                 : Ext.isGecko ? "ext-gecko " + (Ext.isGecko2 ? 'ext-gecko2' : 'ext-gecko3')                 : Ext.isOpera ? "ext-opera"                 : Ext.isSafari ? "ext-safari" : ""];         if(Ext.isMac){             cls.push("ext-mac");         }         if(Ext.isLinux){             cls.push("ext-linux");         }         if(Ext.isBorderBox){             cls.push('ext-border-box');         }         if(Ext.isStrict){             var p = bd.parentNode;             if(p){                 p.className += ' ext-strict';             }         }         bd.className += cls.join(' ');         return true;     }     if(!initExtCss()){         Ext.onReady(initExtCss);     } })(); Ext.EventObject = function(){     var E = Ext.lib.Event;         var safariKeys = {         3 : 13,         63234 : 37,         63235 : 39,         63232 : 38,         63233 : 40,         63276 : 33,         63277 : 34,         63272 : 46,         63273 : 36,         63275 : 35      };         var btnMap = Ext.isIE ? {1:0,4:1,2:2} :                 (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});     Ext.EventObjectImpl = function(e){         if(e){             this.setEvent(e.browserEvent || e);         }     };     Ext.EventObjectImpl.prototype = {                  browserEvent : null,                  button : -1,                  shiftKey : false,                  ctrlKey : false,                  altKey : false,                  BACKSPACE: 8,                  TAB: 9,                  NUM_CENTER: 12,                  ENTER: 13,                  RETURN: 13,                  SHIFT: 16,                  CTRL: 17,         CONTROL : 17,                  ALT: 18,                  PAUSE: 19,                  CAPS_LOCK: 20,                  ESC: 27,                  SPACE: 32,                  PAGE_UP: 33,         PAGEUP : 33,                  PAGE_DOWN: 34,         PAGEDOWN : 34,                  END: 35,                  HOME: 36,                  LEFT: 37,                  UP: 38,                  RIGHT: 39,                  DOWN: 40,                  PRINT_SCREEN: 44,                  INSERT: 45,                  DELETE: 46,                  ZERO: 48,                  ONE: 49,                  TWO: 50,                  THREE: 51,                  FOUR: 52,                  FIVE: 53,                  SIX: 54,                  SEVEN: 55,                  EIGHT: 56,                  NINE: 57,                  A: 65,                  B: 66,                  C: 67,                  D: 68,                  E: 69,                  F: 70,                  G: 71,                  H: 72,                  I: 73,                  J: 74,                  K: 75,                  L: 76,                  M: 77,                  N: 78,                  O: 79,                  P: 80,                  Q: 81,                  R: 82,                  S: 83,                  T: 84,                  U: 85,                  V: 86,                  W: 87,                  X: 88,                  Y: 89,                  Z: 90,                  CONTEXT_MENU: 93,                  NUM_ZERO: 96,                  NUM_ONE: 97,                  NUM_TWO: 98,                  NUM_THREE: 99,                  NUM_FOUR: 100,                  NUM_FIVE: 101,                  NUM_SIX: 102,                  NUM_SEVEN: 103,                  NUM_EIGHT: 104,                  NUM_NINE: 105,                  NUM_MULTIPLY: 106,                  NUM_PLUS: 107,                  NUM_MINUS: 109,                  NUM_PERIOD: 110,                  NUM_DIVISION: 111,                  F1: 112,                  F2: 113,                  F3: 114,                  F4: 115,                  F5: 116,                  F6: 117,                  F7: 118,                  F8: 119,                  F9: 120,                  F10: 121,                  F11: 122,                  F12: 123,                     setEvent : function(e){             if(e == this || (e && e.browserEvent)){                 return e;             }             this.browserEvent = e;             if(e){                                 this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);                 if(e.type == 'click' && this.button == -1){                     this.button = 0;                 }                 this.type = e.type;                 this.shiftKey = e.shiftKey;                                 this.ctrlKey = e.ctrlKey || e.metaKey;                 this.altKey = e.altKey;                                 this.keyCode = e.keyCode;                 this.charCode = e.charCode;                                 this.target = E.getTarget(e);                                 this.xy = E.getXY(e);             }else{                 this.button = -1;                 this.shiftKey = false;                 this.ctrlKey = false;                 this.altKey = false;                 this.keyCode = 0;                 this.charCode = 0;                 this.target = null;                 this.xy = [0, 0];             }             return this;         },                  stopEvent : function(){             if(this.browserEvent){                 if(this.browserEvent.type == 'mousedown'){                     Ext.EventManager.stoppedMouseDownEvent.fire(this);                 }                 E.stopEvent(this.browserEvent);             }         },                  preventDefault : function(){             if(this.browserEvent){                 E.preventDefault(this.browserEvent);             }         },                  isNavKeyPress : function(){             var k = this.keyCode;             k = Ext.isSafari ? (safariKeys[k] || k) : k;             return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;         },         isSpecialKey : function(){             var k = this.keyCode;             return (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13  || k == 40 || k == 27 ||             (k == 16) || (k == 17) ||             (k >= 18 && k <= 20) ||             (k >= 33 && k <= 35) ||             (k >= 36 && k <= 39) ||             (k >= 44 && k <= 45);         },                  stopPropagation : function(){             if(this.browserEvent){                 if(this.browserEvent.type == 'mousedown'){                     Ext.EventManager.stoppedMouseDownEvent.fire(this);                 }                 E.stopPropagation(this.browserEvent);             }         },                  getCharCode : function(){             return this.charCode || this.keyCode;         },                  getKey : function(){             var k = this.keyCode || this.charCode;             return Ext.isSafari ? (safariKeys[k] || k) : k;         },                  getPageX : function(){             return this.xy[0];         },                  getPageY : function(){             return this.xy[1];         },                  getTime : function(){             if(this.browserEvent){                 return E.getTime(this.browserEvent);             }             return null;         },                  getXY : function(){             return this.xy;         },                  getTarget : function(selector, maxDepth, returnEl){             return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : (returnEl ? Ext.get(this.target) : this.target);         },                  getRelatedTarget : function(){             if(this.browserEvent){                 return E.getRelatedTarget(this.browserEvent);             }             return null;         },                  getWheelDelta : function(){             var e = this.browserEvent;             var delta = 0;             if(e.wheelDelta){                  delta = e.wheelDelta/120;             }else if(e.detail){                  delta = -e.detail/3;             }             return delta;         },                  hasModifier : function(){             return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;         },                  within : function(el, related){             var t = this[related ? "getRelatedTarget" : "getTarget"]();             return t && Ext.fly(el).contains(t);         },         getPoint : function(){             return new Ext.lib.Point(this.xy[0], this.xy[1]);         }     };     return new Ext.EventObjectImpl(); }(); (function(){ var D = Ext.lib.Dom; var E = Ext.lib.Event; var A = Ext.lib.Anim; var propCache = {}; var camelRe = /(-[a-z])/gi; var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); }; var view = document.defaultView; Ext.Element = function(element, forceNew){     var dom = typeof element == "string" ?             document.getElementById(element) : element;     if(!dom){         return null;     }     var id = dom.id;     if(forceNew !== true && id && Ext.Element.cache[id]){         return Ext.Element.cache[id];     }          this.dom = dom;          this.id = id || Ext.id(dom); }; var El = Ext.Element; El.prototype = {          originalDisplay : "",     visibilityMode : 1,          defaultUnit : "px",          setVisibilityMode : function(visMode){         this.visibilityMode = visMode;         return this;     },          enableDisplayMode : function(display){         this.setVisibilityMode(El.DISPLAY);         if(typeof display != "undefined") this.originalDisplay = display;         return this;     },          findParent : function(simpleSelector, maxDepth, returnEl){         var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;         maxDepth = maxDepth || 50;         if(typeof maxDepth != "number"){             stopEl = Ext.getDom(maxDepth);             maxDepth = 10;         }         while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){             if(dq.is(p, simpleSelector)){                 return returnEl ? Ext.get(p) : p;             }             depth++;             p = p.parentNode;         }         return null;     },          findParentNode : function(simpleSelector, maxDepth, returnEl){         var p = Ext.fly(this.dom.parentNode, '_internal');         return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null;     },          up : function(simpleSelector, maxDepth){         return this.findParentNode(simpleSelector, maxDepth, true);     },          is : function(simpleSelector){         return Ext.DomQuery.is(this.dom, simpleSelector);     },          animate : function(args, duration, onComplete, easing, animType){         this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType);         return this;     },          anim : function(args, opt, animType, defaultDur, defaultEase, cb){         animType = animType || 'run';         opt = opt || {};         var anim = Ext.lib.Anim[animType](             this.dom, args,             (opt.duration || defaultDur) || .35,             (opt.easing || defaultEase) || 'easeOut',             function(){                 Ext.callback(cb, this);                 Ext.callback(opt.callback, opt.scope || this, [this, opt]);             },             this         );         opt.anim = anim;         return anim;     },         preanim : function(a, i){         return !a[i] ? false : (typeof a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});     },          clean : function(forceReclean){         if(this.isCleaned && forceReclean !== true){             return this;         }         var ns = /S/;         var d = this.dom, n = d.firstChild, ni = -1;       while(n){           var nx = n.nextSibling;           if(n.nodeType == 3 && !ns.test(n.nodeValue)){               d.removeChild(n);           }else{               n.nodeIndex = ++ni;           }           n = nx;       }       this.isCleaned = true;       return this;   },          scrollIntoView : function(container, hscroll){         var c = Ext.getDom(container) || Ext.getBody().dom;         var el = this.dom;         var o = this.getOffsetsTo(c),             l = o[0] + c.scrollLeft,             t = o[1] + c.scrollTop,             b = t+el.offsetHeight,             r = l+el.offsetWidth;         var ch = c.clientHeight;         var ct = parseInt(c.scrollTop, 10);         var cl = parseInt(c.scrollLeft, 10);         var cb = ct + ch;         var cr = cl + c.clientWidth;         if(el.offsetHeight > ch || t < ct){          c.scrollTop = t;         }else if(b > cb){             c.scrollTop = b-ch;         }         c.scrollTop = c.scrollTop;          if(hscroll !== false){ if(el.offsetWidth > c.clientWidth || l < cl){                 c.scrollLeft = l;             }else if(r > cr){                 c.scrollLeft = r-c.clientWidth;             }             c.scrollLeft = c.scrollLeft;         }         return this;     },         scrollChildIntoView : function(child, hscroll){         Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll);     },          autoHeight : function(animate, duration, onComplete, easing){         var oldHeight = this.getHeight();         this.clip();         this.setHeight(1);         setTimeout(function(){             var height = parseInt(this.dom.scrollHeight, 10);             if(!animate){                 this.setHeight(height);                 this.unclip();                 if(typeof onComplete == "function"){                     onComplete();                 }             }else{                 this.setHeight(oldHeight);                 this.setHeight(height, animate, duration, function(){                     this.unclip();                     if(typeof onComplete == "function") onComplete();                 }.createDelegate(this), easing);             }         }.createDelegate(this), 0);         return this;     },          contains : function(el){         if(!el){return false;}         return D.isAncestor(this.dom, el.dom ? el.dom : el);     },          isVisible : function(deep) {         var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");         if(deep !== true || !vis){             return vis;         }         var p = this.dom.parentNode;         while(p && p.tagName.toLowerCase() != "body"){             if(!Ext.fly(p, '_isVisible').isVisible()){                 return false;             }             p = p.parentNode;         }         return true;     },          select : function(selector, unique){         return El.select(selector, unique, this.dom);     },          query : function(selector){         return Ext.DomQuery.select(selector, this.dom);     },          child : function(selector, returnDom){         var n = Ext.DomQuery.selectNode(selector, this.dom);         return returnDom ? n : Ext.get(n);     },          down : function(selector, returnDom){         var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);         return returnDom ? n : Ext.get(n);     },          initDD : function(group, config, overrides){         var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);         return Ext.apply(dd, overrides);     },          initDDProxy : function(group, config, overrides){         var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);         return Ext.apply(dd, overrides);     },          initDDTarget : function(group, config, overrides){         var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);         return Ext.apply(dd, overrides);     },           setVisible : function(visible, animate){         if(!animate || !A){             if(this.visibilityMode == El.DISPLAY){                 this.setDisplayed(visible);             }else{                 this.fixDisplay();                 this.dom.style.visibility = visible ? "visible" : "hidden";             }         }else{                         var dom = this.dom;             var visMode = this.visibilityMode;             if(visible){                 this.setOpacity(.01);                 this.setVisible(true);             }             this.anim({opacity: { to: (visible?1:0) }},                   this.preanim(arguments, 1),                   null, .35, 'easeIn', function(){                      if(!visible){                          if(visMode == El.DISPLAY){                              dom.style.display = "none";                          }else{                              dom.style.visibility = "hidden";                          }                          Ext.get(dom).setOpacity(1);                      }                  });         }         return this;     },          isDisplayed : function() {         return this.getStyle("display") != "none";     },          toggle : function(animate){         this.setVisible(!this.isVisible(), this.preanim(arguments, 0));         return this;     },          setDisplayed : function(value) {         if(typeof value == "boolean"){            value = value ? this.originalDisplay : "none";         }         this.setStyle("display", value);         return this;     },          focus : function() {         try{             this.dom.focus();         }catch(e){}         return this;     },          blur : function() {         try{             this.dom.blur();         }catch(e){}         return this;     },          addClass : function(className){         if(Ext.isArray(className)){             for(var i = 0, len = className.length; i < len; i++) {              this.addClass(className[i]);             }         }else{             if(className && !this.hasClass(className)){                 this.dom.className = this.dom.className + " " + className;             }         }         return this;     },          radioClass : function(className){         var siblings = this.dom.parentNode.childNodes;         for(var i = 0; i < siblings.length; i++) {          var s = siblings[i];          if(s.nodeType == 1){              Ext.get(s).removeClass(className);          }         }         this.addClass(className);         return this;     },          removeClass : function(className){         if(!className || !this.dom.className){             return this;         }         if(Ext.isArray(className)){             for(var i = 0, len = className.length; i < len; i++) {              this.removeClass(className[i]);             }         }else{             if(this.hasClass(className)){                 var re = this.classReCache[className];                 if (!re) {                    re = new RegExp('(?:^|\s+)' + className + '(?:\s+|$)', "g");                    this.classReCache[className] = re;                 }                 this.dom.className =                     this.dom.className.replace(re, " ");             }         }         return this;     },         classReCache: {},          toggleClass : function(className){         if(this.hasClass(className)){             this.removeClass(className);         }else{             this.addClass(className);         }         return this;     },          hasClass : function(className){         return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1;     },          replaceClass : function(oldClassName, newClassName){         this.removeClass(oldClassName);         this.addClass(newClassName);         return this;     },          getStyles : function(){         var a = arguments, len = a.length, r = {};         for(var i = 0; i < len; i++){             r[a[i]] = this.getStyle(a[i]);         }         return r;     },          getStyle : function(){         return view && view.getComputedStyle ?             function(prop){                 var el = this.dom, v, cs, camel;                 if(prop == 'float'){                     prop = "cssFloat";                 }                 if(v = el.style[prop]){                     return v;                 }                 if(cs = view.getComputedStyle(el, "")){                     if(!(camel = propCache[prop])){                         camel = propCache[prop] = prop.replace(camelRe, camelFn);                     }                     return cs[camel];                 }                 return null;             } :             function(prop){                 var el = this.dom, v, cs, camel;                 if(prop == 'opacity'){                     if(typeof el.style.filter == 'string'){                         var m = el.style.filter.match(/alpha(opacity=(.*))/i);                         if(m){                             var fv = parseFloat(m[1]);                             if(!isNaN(fv)){                                 return fv ? fv / 100 : 0;                             }                         }                     }                     return 1;                 }else if(prop == 'float'){                     prop = "styleFloat";                 }                 if(!(camel = propCache[prop])){                     camel = propCache[prop] = prop.replace(camelRe, camelFn);                 }                 if(v = el.style[camel]){                     return v;                 }                 if(cs = el.currentStyle){                     return cs[camel];                 }                 return null;             };     }(),          setStyle : function(prop, value){         if(typeof prop == "string"){             var camel;             if(!(camel = propCache[prop])){                 camel = propCache[prop] = prop.replace(camelRe, camelFn);             }             if(camel == 'opacity') {                 this.setOpacity(value);             }else{                 this.dom.style[camel] = value;             }         }else{             for(var style in prop){                 if(typeof prop[style] != "function"){                    this.setStyle(style, prop[style]);                 }             }         }         return this;     },          applyStyles : function(style){         Ext.DomHelper.applyStyles(this.dom, style);         return this;     },          getX : function(){         return D.getX(this.dom);     },          getY : function(){         return D.getY(this.dom);     },          getXY : function(){         return D.getXY(this.dom);     },          getOffsetsTo : function(el){         var o = this.getXY();         var e = Ext.fly(el, '_internal').getXY();         return [o[0]-e[0],o[1]-e[1]];     },          setX : function(x, animate){         if(!animate || !A){             D.setX(this.dom, x);         }else{             this.setXY([x, this.getY()], this.preanim(arguments, 1));         }         return this;     },          setY : function(y, animate){         if(!animate || !A){             D.setY(this.dom, y);         }else{             this.setXY([this.getX(), y], this.preanim(arguments, 1));         }         return this;     },          setLeft : function(left){         this.setStyle("left", this.addUnits(left));         return this;     },          setTop : function(top){         this.setStyle("top", this.addUnits(top));         return this;     },          setRight : function(right){         this.setStyle("right", this.addUnits(right));         return this;     },          setBottom : function(bottom){         this.setStyle("bottom", this.addUnits(bottom));         return this;     },          setXY : function(pos, animate){         if(!animate || !A){             D.setXY(this.dom, pos);         }else{             this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion');         }         return this;     },          setLocation : function(x, y, animate){         this.setXY([x, y], this.preanim(arguments, 2));         return this;     },          moveTo : function(x, y, animate){         this.setXY([x, y], this.preanim(arguments, 2));         return this;     },          getRegion : function(){         return D.getRegion(this.dom);     },          getHeight : function(contentHeight){         var h = this.dom.offsetHeight || 0;         h = contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");         return h < 0 ? 0 : h;     },          getWidth : function(contentWidth){         var w = this.dom.offsetWidth || 0;         w = contentWidth !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");         return w < 0 ? 0 : w;     },          getComputedHeight : function(){         var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);         if(!h){             h = parseInt(this.getStyle('height'), 10) || 0;             if(!this.isBorderBox()){                 h += this.getFrameWidth('tb');             }         }         return h;     },          getComputedWidth : function(){         var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);         if(!w){             w = parseInt(this.getStyle('width'), 10) || 0;             if(!this.isBorderBox()){                 w += this.getFrameWidth('lr');             }         }         return w;     },          getSize : function(contentSize){         return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};     },     getStyleSize : function(){         var w, h, d = this.dom, s = d.style;         if(s.width && s.width != 'auto'){             w = parseInt(s.width, 10);             if(Ext.isBorderBox){                w -= this.getFrameWidth('lr');             }         }         if(s.height && s.height != 'auto'){             h = parseInt(s.height, 10);             if(Ext.isBorderBox){                h -= this.getFrameWidth('tb');             }         }         return {width: w || this.getWidth(true), height: h || this.getHeight(true)};     },          getViewSize : function(){         var d = this.dom, doc = document, aw = 0, ah = 0;         if(d == doc || d == doc.body){             return {width : D.getViewWidth(), height: D.getViewHeight()};         }else{             return {                 width : d.clientWidth,                 height: d.clientHeight             };         }     },          getValue : function(asNumber){         return asNumber ? parseInt(this.dom.value, 10) : this.dom.value;     },         adjustWidth : function(width){         if(typeof width == "number"){             if(this.autoBoxAdjust && !this.isBorderBox()){                width -= (this.getBorderWidth("lr") + this.getPadding("lr"));             }             if(width < 0){                 width = 0;             }         }         return width;     },         adjustHeight : function(height){         if(typeof height == "number"){            if(this.autoBoxAdjust && !this.isBorderBox()){                height -= (this.getBorderWidth("tb") + this.getPadding("tb"));            }            if(height < 0){                height = 0;            }         }         return height;     },          setWidth : function(width, animate){         width = this.adjustWidth(width);         if(!animate || !A){             this.dom.style.width = this.addUnits(width);         }else{             this.anim({width: {to: width}}, this.preanim(arguments, 1));         }         return this;     },           setHeight : function(height, animate){         height = this.adjustHeight(height);         if(!animate || !A){             this.dom.style.height = this.addUnits(height);         }else{             this.anim({height: {to: height}}, this.preanim(arguments, 1));         }         return this;     },           setSize : function(width, height, animate){         if(typeof width == "object"){             height = width.height; width = width.width;         }         width = this.adjustWidth(width); height = this.adjustHeight(height);         if(!animate || !A){             this.dom.style.width = this.addUnits(width);             this.dom.style.height = this.addUnits(height);         }else{             this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2));         }         return this;     },          setBounds : function(x, y, width, height, animate){         if(!animate || !A){             this.setSize(width, height);             this.setLocation(x, y);         }else{             width = this.adjustWidth(width); height = this.adjustHeight(height);             this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}},                           this.preanim(arguments, 4), 'motion');         }         return this;     },          setRegion : function(region, animate){         this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1));         return this;     },          addListener : function(eventName, fn, scope, options){         Ext.EventManager.on(this.dom,  eventName, fn, scope || this, options);     },          removeListener : function(eventName, fn, scope){         Ext.EventManager.removeListener(this.dom,  eventName, fn, scope || this);         return this;     },          removeAllListeners : function(){         Ext.EventManager.removeAll(this.dom);         return this;     },          relayEvent : function(eventName, observable){         this.on(eventName, function(e){             observable.fireEvent(eventName, e);         });     },           setOpacity : function(opacity, animate){         if(!animate || !A){             var s = this.dom.style;             if(Ext.isIE){                 s.zoom = 1;                 s.filter = (s.filter || '').replace(/alpha([^)]*)/gi,"") +                            (opacity == 1 ? "" : " alpha(opacity=" + opacity * 100 + ")");             }else{                 s.opacity = opacity;             }         }else{             this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn');         }         return this;     },          getLeft : function(local){         if(!local){             return this.getX();         }else{             return parseInt(this.getStyle("left"), 10) || 0;         }     },          getRight : function(local){         if(!local){             return this.getX() + this.getWidth();         }else{             return (this.getLeft(true) + this.getWidth()) || 0;         }     },          getTop : function(local) {         if(!local){             return this.getY();         }else{             return parseInt(this.getStyle("top"), 10) || 0;         }     },          getBottom : function(local){         if(!local){             return this.getY() + this.getHeight();         }else{             return (this.getTop(true) + this.getHeight()) || 0;         }     },          position : function(pos, zIndex, x, y){         if(!pos){            if(this.getStyle('position') == 'static'){                this.setStyle('position', 'relative');            }         }else{             this.setStyle("position", pos);         }         if(zIndex){             this.setStyle("z-index", zIndex);         }         if(x !== undefined && y !== undefined){             this.setXY([x, y]);         }else if(x !== undefined){             this.setX(x);         }else if(y !== undefined){             this.setY(y);         }     },          clearPositioning : function(value){         value = value ||'';         this.setStyle({             "left": value,             "right": value,             "top": value,             "bottom": value,             "z-index": "",             "position" : "static"         });         return this;     },          getPositioning : function(){         var l = this.getStyle("left");         var t = this.getStyle("top");         return {             "position" : this.getStyle("position"),             "left" : l,             "right" : l ? "" : this.getStyle("right"),             "top" : t,             "bottom" : t ? "" : this.getStyle("bottom"),             "z-index" : this.getStyle("z-index")         };     },          getBorderWidth : function(side){         return this.addStyles(side, El.borders);     },          getPadding : function(side){         return this.addStyles(side, El.paddings);     },          setPositioning : function(pc){         this.applyStyles(pc);         if(pc.right == "auto"){             this.dom.style.right = "";         }         if(pc.bottom == "auto"){             this.dom.style.bottom = "";         }         return this;     },         fixDisplay : function(){         if(this.getStyle("display") == "none"){             this.setStyle("visibility", "hidden");             this.setStyle("display", this.originalDisplay);             if(this.getStyle("display") == "none"){                 this.setStyle("display", "block");             }         }     },      setOverflow : function(v){      if(v=='auto' && Ext.isMac && Ext.isGecko2){      this.dom.style.overflow = 'hidden';          (function(){this.dom.style.overflow = 'auto';}).defer(1, this);      }else{      this.dom.style.overflow = v;      } },           setLeftTop : function(left, top){         this.dom.style.left = this.addUnits(left);         this.dom.style.top = this.addUnits(top);         return this;     },           move : function(direction, distance, animate){         var xy = this.getXY();         direction = direction.toLowerCase();         switch(direction){             case "l":             case "left":                 this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2));                 break;            case "r":            case "right":                 this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2));                 break;            case "t":            case "top":            case "up":                 this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2));                 break;            case "b":            case "bottom":            case "down":                 this.moveTo(xy[0], xy[1]+distance, this.preanim(arguments, 2));                 break;         }         return this;     },          clip : function(){         if(!this.isClipped){            this.isClipped = true;            this.originalClip = {                "o": this.getStyle("overflow"),                "x": this.getStyle("overflow-x"),                "y": this.getStyle("overflow-y")            };            this.setStyle("overflow", "hidden");            this.setStyle("overflow-x", "hidden");            this.setStyle("overflow-y", "hidden");         }         return this;     },          unclip : function(){         if(this.isClipped){             this.isClipped = false;             var o = this.originalClip;             if(o.o){this.setStyle("overflow", o.o);}             if(o.x){this.setStyle("overflow-x", o.x);}             if(o.y){this.setStyle("overflow-y", o.y);}         }         return this;     },          getAnchorXY : function(anchor, local, s){                          var w, h, vp = false;         if(!s){             var d = this.dom;             if(d == document.body || d == document){                 vp = true;                 w = D.getViewWidth(); h = D.getViewHeight();             }else{                 w = this.getWidth(); h = this.getHeight();             }         }else{             w = s.width;  h = s.height;         }         var x = 0, y = 0, r = Math.round;         switch((anchor || "tl").toLowerCase()){             case "c":                 x = r(w*.5);                 y = r(h*.5);             break;             case "t":                 x = r(w*.5);                 y = 0;             break;             case "l":                 x = 0;                 y = r(h*.5);             break;             case "r":                 x = w;                 y = r(h*.5);             break;             case "b":                 x = r(w*.5);                 y = h;             break;             case "tl":                 x = 0;                 y = 0;             break;             case "bl":                 x = 0;                 y = h;             break;             case "br":                 x = w;                 y = h;             break;             case "tr":                 x = w;                 y = 0;             break;         }         if(local === true){             return [x, y];         }         if(vp){             var sc = this.getScroll();             return [x + sc.left, y + sc.top];         }                 var o = this.getXY();         return [x+o[0], y+o[1]];     },          getAlignToXY : function(el, p, o){         el = Ext.get(el);         if(!el || !el.dom){             throw "Element.alignToXY with an element that doesn't exist";         }         var d = this.dom;         var c = false;         var p1 = "", p2 = "";         o = o || [0,0];         if(!p){             p = "tl-bl";         }else if(p == "?"){             p = "tl-bl?";         }else if(p.indexOf("-") == -1){             p = "tl-" + p;         }         p = p.toLowerCase();         var m = p.match(/^([a-z]+)-([a-z]+)(?)?$/);         if(!m){            throw "Element.alignTo with an invalid alignment " + p;         }         p1 = m[1]; p2 = m[2]; c = !!m[3];                         var a1 = this.getAnchorXY(p1, true);         var a2 = el.getAnchorXY(p2, false);         var x = a2[0] - a1[0] + o[0];         var y = a2[1] - a1[1] + o[1];         if(c){                         var w = this.getWidth(), h = this.getHeight(), r = el.getRegion();                         var dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;                                                 var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);            var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);            var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));            var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));            var doc = document;            var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5;            var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5;            if((x+w) > dw + scrollX){                 x = swapX ? r.left-w : dw+scrollX-w;             }            if(x < scrollX){                x = swapX ? r.right : scrollX;            }            if((y+h) > dh + scrollY){                 y = swapY ? r.top-h : dh+scrollY-h;             }            if (y < scrollY){                y = swapY ? r.bottom : scrollY;            }         }         return [x,y];     },         getConstrainToXY : function(){         var os = {top:0, left:0, bottom:0, right: 0};         return function(el, local, offsets, proposedXY){             el = Ext.get(el);             offsets = offsets ? Ext.applyIf(offsets, os) : os;             var vw, vh, vx = 0, vy = 0;             if(el.dom == document.body || el.dom == document){                 vw = Ext.lib.Dom.getViewWidth();                 vh = Ext.lib.Dom.getViewHeight();             }else{                 vw = el.dom.clientWidth;                 vh = el.dom.clientHeight;                 if(!local){                     var vxy = el.getXY();                     vx = vxy[0];                     vy = vxy[1];                 }             }             var s = el.getScroll();             vx += offsets.left + s.left;             vy += offsets.top + s.top;             vw -= offsets.right;             vh -= offsets.bottom;             var vr = vx+vw;             var vb = vy+vh;             var xy = proposedXY || (!local ? this.getXY() : [this.getLeft(true), this.getTop(true)]);             var x = xy[0], y = xy[1];             var w = this.dom.offsetWidth, h = this.dom.offsetHeight;                         var moved = false;                         if((x + w) > vr){                 x = vr - w;                 moved = true;             }             if((y + h) > vb){                 y = vb - h;                 moved = true;             }                         if(x < vx){                 x = vx;                 moved = true;             }             if(y < vy){                 y = vy;                 moved = true;             }             return moved ? [x, y] : false;         };     }(),         adjustForConstraints : function(xy, parent, offsets){         return this.getConstrainToXY(parent || document, false, offsets, xy) ||  xy;     },          alignTo : function(element, position, offsets, animate){         var xy = this.getAlignToXY(element, position, offsets);         this.setXY(xy, this.preanim(arguments, 3));         return this;     },          anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){         var action = function(){             this.alignTo(el, alignment, offsets, animate);             Ext.callback(callback, this);         };         Ext.EventManager.onWindowResize(action, this);         var tm = typeof monitorScroll;         if(tm != 'undefined'){             Ext.EventManager.on(window, 'scroll', action, this,                 {buffer: tm == 'number' ? monitorScroll : 50});         }         action.call(this);         return this;     },          clearOpacity : function(){         if (window.ActiveXObject) {             if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){                 this.dom.style.filter = "";             }         } else {             this.dom.style.opacity = "";             this.dom.style["-moz-opacity"] = "";             this.dom.style["-khtml-opacity"] = "";         }         return this;     },          hide : function(animate){         this.setVisible(false, this.preanim(arguments, 0));         return this;     },          show : function(animate){         this.setVisible(true, this.preanim(arguments, 0));         return this;     },          addUnits : function(size){         return Ext.Element.addUnits(size, this.defaultUnit);     },          update : function(html, loadScripts, callback){         if(typeof html == "undefined"){             html = "";         }         if(loadScripts !== true){             this.dom.innerHTML = html;             if(typeof callback == "function"){                 callback();             }             return this;         }         var id = Ext.id();         var dom = this.dom;         html += '<span id="' + id + '"></span>';         E.onAvailable(id, function(){             var hd = document.getElementsByTagName("head")[0];             var re = /(?:<script([^>]*)?>)((n|r|.)*?)(?:</script>)/ig;             var srcRe = /ssrc=(['"])(.*?)1/i;             var typeRe = /stype=(['"])(.*?)1/i;             var match;             while(match = re.exec(html)){                 var attrs = match[1];                 var srcMatch = attrs ? attrs.match(srcRe) : false;                 if(srcMatch && srcMatch[2]){                    var s = document.createElement("script");                    s.src = srcMatch[2];                    var typeMatch = attrs.match(typeRe);                    if(typeMatch && typeMatch[2]){                        s.type = typeMatch[2];                    }                    hd.appendChild(s);                 }else if(match[2] && match[2].length > 0){                     if(window.execScript) {                        window.execScript(match[2]);                     } else {                        window.eval(match[2]);                     }                 }             }             var el = document.getElementById(id);             if(el){Ext.removeNode(el);}             if(typeof callback == "function"){                 callback();             }         });         dom.innerHTML = html.replace(/(?:<script.*?>)((n|r|.)*?)(?:</script>)/ig, "");         return this;     },          load : function(){         var um = this.getUpdater();         um.update.apply(um, arguments);         return this;     },          getUpdater : function(){         if(!this.updateManager){             this.updateManager = new Ext.Updater(this);         }         return this.updateManager;     },          unselectable : function(){         this.dom.unselectable = "on";         this.swallowEvent("selectstart", true);         this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");         this.addClass("x-unselectable");         return this;     },          getCenterXY : function(){         return this.getAlignToXY(document, 'c-c');     },          center : function(centerIn){         this.alignTo(centerIn || document, 'c-c');         return this;     },          isBorderBox : function(){         return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox;     },          getBox : function(contentBox, local){         var xy;         if(!local){             xy = this.getXY();         }else{             var left = parseInt(this.getStyle("left"), 10) || 0;             var top = parseInt(this.getStyle("top"), 10) || 0;             xy = [left, top];         }         var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;         if(!contentBox){             bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};         }else{             var l = this.getBorderWidth("l")+this.getPadding("l");             var r = this.getBorderWidth("r")+this.getPadding("r");             var t = this.getBorderWidth("t")+this.getPadding("t");             var b = this.getBorderWidth("b")+this.getPadding("b");             bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};         }         bx.right = bx.x + bx.width;         bx.bottom = bx.y + bx.height;         return bx;     },          getFrameWidth : function(sides, onlyContentBox){         return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));     },          setBox : function(box, adjust, animate){         var w = box.width, h = box.height;         if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){            w -= (this.getBorderWidth("lr") + this.getPadding("lr"));            h -= (this.getBorderWidth("tb") + this.getPadding("tb"));         }         this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));         return this;     },           repaint : function(){         var dom = this.dom;         this.addClass("x-repaint");         setTimeout(function(){             Ext.get(dom).removeClass("x-repaint");         }, 1);         return this;     },          getMargins : function(side){         if(!side){             return {                 top: parseInt(this.getStyle("margin-top"), 10) || 0,                 left: parseInt(this.getStyle("margin-left"), 10) || 0,                 bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,                 right: parseInt(this.getStyle("margin-right"), 10) || 0             };         }else{             return this.addStyles(side, El.margins);          }     },         addStyles : function(sides, styles){         var val = 0, v, w;         for(var i = 0, len = sides.length; i < len; i++){             v = this.getStyle(styles[sides.charAt(i)]);             if(v){                  w = parseInt(v, 10);                  if(w){ val += (w >= 0 ? w : -1 * w); }             }         }         return val;     },          createProxy : function(config, renderTo, matchBox){         config = typeof config == "object" ?             config : {tag : "div", cls: config};         var proxy;         if(renderTo){             proxy = Ext.DomHelper.append(renderTo, config, true);         }else {             proxy = Ext.DomHelper.insertBefore(this.dom, config, true);         }         if(matchBox){            proxy.setBox(this.getBox());         }         return proxy;     },          mask : function(msg, msgCls){         if(this.getStyle("position") == "static"){             this.setStyle("position", "relative");         }         if(this._maskMsg){             this._maskMsg.remove();         }         if(this._mask){             this._mask.remove();         }         this._mask = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask"}, true);         this.addClass("x-masked");         this._mask.setDisplayed(true);         if(typeof msg == 'string'){             this._maskMsg = Ext.DomHelper.append(this.dom, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);             var mm = this._maskMsg;             mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";             mm.dom.firstChild.innerHTML = msg;             mm.setDisplayed(true);             mm.center(this);         }         if(Ext.isIE && !(Ext.isIE7 && Ext.isStrict) && this.getStyle('height') == 'auto'){             this._mask.setSize(this.dom.clientWidth, this.getHeight());         }         return this._mask;     },          unmask : function(){         if(this._mask){             if(this._maskMsg){                 this._maskMsg.remove();                 delete this._maskMsg;             }             this._mask.remove();             delete this._mask;         }         this.removeClass("x-masked");     },          isMasked : function(){         return this._mask && this._mask.isVisible();     },          createShim : function(){         var el = document.createElement('iframe');         el.frameBorder = '0';         el.className = 'ext-shim';         if(Ext.isIE && Ext.isSecure){             el.src = Ext.SSL_SECURE_URL;         }         var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));         shim.autoBoxAdjust = false;         return shim;     },          remove : function(){         Ext.removeNode(this.dom);         delete El.cache[this.dom.id];     },          hover : function(overFn, outFn, scope){         var preOverFn = function(e){             if(!e.within(this, true)){                 overFn.apply(scope || this, arguments);             }         };         var preOutFn = function(e){             if(!e.within(this, true)){                 outFn.apply(scope || this, arguments);             }         };         this.on("mouseover", preOverFn, this.dom);         this.on("mouseout", preOutFn, this.dom);         return this;     },          addClassOnOver : function(className){         this.hover(             function(){                 Ext.fly(this, '_internal').addClass(className);             },             function(){                 Ext.fly(this, '_internal').removeClass(className);             }         );         return this;     },          addClassOnFocus : function(className){         this.on("focus", function(){             Ext.fly(this, '_internal').addClass(className);         }, this.dom);         this.on("blur", function(){             Ext.fly(this, '_internal').removeClass(className);         }, this.dom);         return this;     },          addClassOnClick : function(className){         var dom = this.dom;         this.on("mousedown", function(){             Ext.fly(dom, '_internal').addClass(className);             var d = Ext.getDoc();             var fn = function(){                 Ext.fly(dom, '_internal').removeClass(className);                 d.removeListener("mouseup", fn);             };             d.on("mouseup", fn);         });         return this;     },          swallowEvent : function(eventName, preventDefault){         var fn = function(e){             e.stopPropagation();             if(preventDefault){                 e.preventDefault();             }         };         if(Ext.isArray(eventName)){             for(var i = 0, len = eventName.length; i < len; i++){                  this.on(eventName[i], fn);             }             return this;         }         this.on(eventName, fn);         return this;     },          parent : function(selector, returnDom){         return this.matchNode('parentNode', 'parentNode', selector, returnDom);     },           next : function(selector, returnDom){         return this.matchNode('nextSibling', 'nextSibling', selector, returnDom);     },          prev : function(selector, returnDom){         return this.matchNode('previousSibling', 'previousSibling', selector, returnDom);     },          first : function(selector, returnDom){         return this.matchNode('nextSibling', 'firstChild', selector, returnDom);     },          last : function(selector, returnDom){         return this.matchNode('previousSibling', 'lastChild', selector, returnDom);     },     matchNode : function(dir, start, selector, returnDom){         var n = this.dom[start];         while(n){             if(n.nodeType == 1 && (!selector || Ext.DomQuery.is(n, selector))){                 return !returnDom ? Ext.get(n) : n;             }             n = n[dir];         }         return null;     },          appendChild: function(el){         el = Ext.get(el);         el.appendTo(this);         return this;     },          createChild: function(config, insertBefore, returnDom){         config = config || {tag:'div'};         if(insertBefore){             return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true);         }         return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config,  returnDom !== true);     },          appendTo: function(el){         el = Ext.getDom(el);         el.appendChild(this.dom);         return this;     },          insertBefore: function(el){         el = Ext.getDom(el);         el.parentNode.insertBefore(this.dom, el);         return this;     },          insertAfter: function(el){         el = Ext.getDom(el);         el.parentNode.insertBefore(this.dom, el.nextSibling);         return this;     },          insertFirst: function(el, returnDom){         el = el || {};         if(typeof el == 'object' && !el.nodeType && !el.dom){             return this.createChild(el, this.dom.firstChild, returnDom);         }else{             el = Ext.getDom(el);             this.dom.insertBefore(el, this.dom.firstChild);             return !returnDom ? Ext.get(el) : el;         }     },          insertSibling: function(el, where, returnDom){         var rt;         if(Ext.isArray(el)){             for(var i = 0, len = el.length; i < len; i++){                 rt = this.insertSibling(el[i], where, returnDom);             }             return rt;         }         where = where ? where.toLowerCase() : 'before';         el = el || {};         var refNode = where == 'before' ? this.dom : this.dom.nextSibling;         if(typeof el == 'object' && !el.nodeType && !el.dom){             if(where == 'after' && !this.dom.nextSibling){                 rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom);             }else{                 rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom);             }         }else{             rt = this.dom.parentNode.insertBefore(Ext.getDom(el), refNode);             if(!returnDom){                 rt = Ext.get(rt);             }         }         return rt;     },          wrap: function(config, returnDom){         if(!config){             config = {tag: "div"};         }         var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);         newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);         return newEl;     },          replace: function(el){         el = Ext.get(el);         this.insertBefore(el);         el.remove();         return this;     },          replaceWith: function(el){         if(typeof el == 'object' && !el.nodeType && !el.dom){             el = this.insertSibling(el, 'before');         }else{             el = Ext.getDom(el);             this.dom.parentNode.insertBefore(el, this.dom);         }         El.uncache(this.id);         this.dom.parentNode.removeChild(this.dom);         this.dom = el;         this.id = Ext.id(el);         El.cache[this.id] = this;         return this;     },          insertHtml : function(where, html, returnEl){         var el = Ext.DomHelper.insertHtml(where, this.dom, html);         return returnEl ? Ext.get(el) : el;     },          set : function(o, useSet){         var el = this.dom;         useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet;         for(var attr in o){             if(attr == "style" || typeof o[attr] == "function") continue;             if(attr=="cls"){                 el.className = o["cls"];             }else if(o.hasOwnProperty(attr)){                 if(useSet) el.setAttribute(attr, o[attr]);                 else el[attr] = o[attr];             }         }         if(o.style){             Ext.DomHelper.applyStyles(el, o.style);         }         return this;     },          addKeyListener : function(key, fn, scope){         var config;         if(typeof key != "object" || Ext.isArray(key)){             config = {                 key: key,                 fn: fn,                 scope: scope             };         }else{             config = {                 key : key.key,                 shift : key.shift,                 ctrl : key.ctrl,                 alt : key.alt,                 fn: fn,                 scope: scope             };         }         return new Ext.KeyMap(this, config);     },          addKeyMap : function(config){         return new Ext.KeyMap(this, config);     },           isScrollable : function(){         var dom = this.dom;         return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth;     },          scrollTo : function(side, value, animate){         var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";         if(!animate || !A){             this.dom[prop] = value;         }else{             var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];             this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');         }         return this;     },           scroll : function(direction, distance, animate){          if(!this.isScrollable()){              return;          }          var el = this.dom;          var l = el.scrollLeft, t = el.scrollTop;          var w = el.scrollWidth, h = el.scrollHeight;          var cw = el.clientWidth, ch = el.clientHeight;          direction = direction.toLowerCase();          var scrolled = false;          var a = this.preanim(arguments, 2);          switch(direction){              case "l":              case "left":                  if(w - l > cw){                      var v = Math.min(l + distance, w-cw);                      this.scrollTo("left", v, a);                      scrolled = true;                  }                  break;             case "r":             case "right":                  if(l > 0){                      var v = Math.max(l - distance, 0);                      this.scrollTo("left", v, a);                      scrolled = true;                  }                  break;             case "t":             case "top":             case "up":                  if(t > 0){                      var v = Math.max(t - distance, 0);                      this.scrollTo("top", v, a);                      scrolled = true;                  }                  break;             case "b":             case "bottom":             case "down":                  if(h - t > ch){                      var v = Math.min(t + distance, h-ch);                      this.scrollTo("top", v, a);                      scrolled = true;                  }                  break;          }          return scrolled;     },          translatePoints : function(x, y){         if(typeof x == 'object' || Ext.isArray(x)){             y = x[1]; x = x[0];         }         var p = this.getStyle('position');         var o = this.getXY();         var l = parseInt(this.getStyle('left'), 10);         var t = parseInt(this.getStyle('top'), 10);         if(isNaN(l)){             l = (p == "relative") ? 0 : this.dom.offsetLeft;         }         if(isNaN(t)){             t = (p == "relative") ? 0 : this.dom.offsetTop;         }         return {left: (x - o[0] + l), top: (y - o[1] + t)};     },          getScroll : function(){         var d = this.dom, doc = document;         if(d == doc || d == doc.body){             var l, t;             if(Ext.isIE && Ext.isStrict){                 l = doc.documentElement.scrollLeft || (doc.body.scrollLeft || 0);                 t = doc.documentElement.scrollTop || (doc.body.scrollTop || 0);             }else{                 l = window.pageXOffset || (doc.body.scrollLeft || 0);                 t = window.pageYOffset || (doc.body.scrollTop || 0);             }             return {left: l, top: t};         }else{             return {left: d.scrollLeft, top: d.scrollTop};         }     },          getColor : function(attr, defaultValue, prefix){         var v = this.getStyle(attr);         if(!v || v == "transparent" || v == "inherit") {             return defaultValue;         }         var color = typeof prefix == "undefined" ? "#" : prefix;         if(v.substr(0, 4) == "rgb("){             var rvs = v.slice(4, v.length -1).split(",");             for(var i = 0; i < 3; i++){                 var h = parseInt(rvs[i]);                 var s = h.toString(16);                 if(h < 16){                     s = "0" + s;                 }                 color += s;             }         } else {             if(v.substr(0, 1) == "#"){                 if(v.length == 4) {                     for(var i = 1; i < 4; i++){                         var c = v.charAt(i);                         color +=  c + c;                     }                 }else if(v.length == 7){                     color += v.substr(1);                 }             }         }         return(color.length > 5 ? color.toLowerCase() : defaultValue);     },          boxWrap : function(cls){         cls = cls || 'x-box';         var el = Ext.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', cls)));         el.child('.'+cls+'-mc').dom.appendChild(this.dom);         return el;     },          getAttributeNS : Ext.isIE ? function(ns, name){         var d = this.dom;         var type = typeof d[ns+":"+name];         if(type != 'undefined' && type != 'unknown'){             return d[ns+":"+name];         }         return d[name];     } : function(ns, name){         var d = this.dom;         return d.getAttributeNS(ns, name) || d.getAttribute(ns+":"+name) || d.getAttribute(name) || d[name];     },          getTextWidth : function(text, min, max){         return (Ext.util.TextMetrics.measure(this.dom, Ext.value(text, this.dom.innerHTML, true)).width).constrain(min || 0, max || 1000000);     } }; var ep = El.prototype; ep.on = ep.addListener;     ep.mon = ep.addListener; ep.getUpdateManager = ep.getUpdater; ep.un = ep.removeListener; ep.autoBoxAdjust = true; El.unitPattern = /d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i; El.addUnits = function(v, defaultUnit){     if(v === "" || v == "auto"){         return v;     }     if(v === undefined){         return '';     }     if(typeof v == "number" || !El.unitPattern.test(v)){         return v + (defaultUnit || 'px');     }     return v; }; El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>'; El.VISIBILITY = 1; El.DISPLAY = 2; El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"}; El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"}; El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"}; El.cache = {}; var docEl; El.get = function(el){     var ex, elm, id;     if(!el){ return null; }     if(typeof el == "string"){         if(!(elm = document.getElementById(el))){             return null;         }         if(ex = El.cache[el]){             ex.dom = elm;         }else{             ex = El.cache[el] = new El(elm);         }         return ex;     }else if(el.tagName){         if(!(id = el.id)){             id = Ext.id(el);         }         if(ex = El.cache[id]){             ex.dom = el;         }else{             ex = El.cache[id] = new El(el);         }         return ex;     }else if(el instanceof El){         if(el != docEl){             el.dom = document.getElementById(el.id) || el.dom;                                                                       El.cache[el.id] = el;         }         return el;     }else if(el.isComposite){         return el;     }else if(Ext.isArray(el)){         return El.select(el);     }else if(el == document){                 if(!docEl){             var f = function(){};             f.prototype = El.prototype;             docEl = new f();             docEl.dom = document;         }         return docEl;     }     return null; }; El.uncache = function(el){     for(var i = 0, a = arguments, len = a.length; i < len; i++) {         if(a[i]){             delete El.cache[a[i].id || a[i]];         }     } }; El.garbageCollect = function(){     if(!Ext.enableGarbageCollector){         clearInterval(El.collectorThread);         return;     }     for(var eid in El.cache){         var el = El.cache[eid], d = el.dom;                                                                                                                                                 if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){             delete El.cache[eid];             if(d && Ext.enableListenerCollection){                 Ext.EventManager.removeAll(d);             }         }     } } El.collectorThreadId = setInterval(El.garbageCollect, 30000); var flyFn = function(){}; flyFn.prototype = El.prototype; var _cls = new flyFn(); El.Flyweight = function(dom){     this.dom = dom; }; El.Flyweight.prototype = _cls; El.Flyweight.prototype.isFlyweight = true; El._flyweights = {}; El.fly = function(el, named){     named = named || '_global';     el = Ext.getDom(el);     if(!el){         return null;     }     if(!El._flyweights[named]){         El._flyweights[named] = new El.Flyweight();     }     El._flyweights[named].dom = el;     return El._flyweights[named]; }; Ext.get = El.get; Ext.fly = El.fly; var noBoxAdjust = Ext.isStrict ? {     select:1 } : {     input:1, select:1, textarea:1 }; if(Ext.isIE || Ext.isGecko){     noBoxAdjust['button'] = 1; } Ext.EventManager.on(window, 'unload', function(){     delete El.cache;     delete El._flyweights; }); })(); Ext.enableFx = true; Ext.Fx = {     slideIn : function(anchor, o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             anchor = anchor || "t";                         this.fixDisplay();                         var r = this.getFxRestore();             var b = this.getBox();                         this.setSize(b);                         var wrap = this.fxWrap(r.pos, o, "hidden");             var st = this.dom.style;             st.visibility = "visible";             st.position = "absolute";                         var after = function(){                 el.fxUnwrap(wrap, r.pos, o);                 st.width = r.width;                 st.height = r.height;                 el.afterFx(o);             };                         var a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};             switch(anchor.toLowerCase()){                 case "t":                     wrap.setSize(b.width, 0);                     st.left = st.bottom = "0";                     a = {height: bh};                 break;                 case "l":                     wrap.setSize(0, b.height);                     st.right = st.top = "0";                     a = {width: bw};                 break;                 case "r":                     wrap.setSize(0, b.height);                     wrap.setX(b.right);                     st.left = st.top = "0";                     a = {width: bw, points: pt};                 break;                 case "b":                     wrap.setSize(b.width, 0);                     wrap.setY(b.bottom);                     st.left = st.top = "0";                     a = {height: bh, points: pt};                 break;                 case "tl":                     wrap.setSize(0, 0);                     st.right = st.bottom = "0";                     a = {width: bw, height: bh};                 break;                 case "bl":                     wrap.setSize(0, 0);                     wrap.setY(b.y+b.height);                     st.right = st.top = "0";                     a = {width: bw, height: bh, points: pt};                 break;                 case "br":                     wrap.setSize(0, 0);                     wrap.setXY([b.right, b.bottom]);                     st.left = st.top = "0";                     a = {width: bw, height: bh, points: pt};                 break;                 case "tr":                     wrap.setSize(0, 0);                     wrap.setX(b.x+b.width);                     st.left = st.bottom = "0";                     a = {width: bw, height: bh, points: pt};                 break;             }             this.dom.style.visibility = "visible";             wrap.show();             arguments.callee.anim = wrap.fxanim(a,                 o,                 'motion',                 .5,                 'easeOut', after);         });         return this;     },          slideOut : function(anchor, o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             anchor = anchor || "t";                         var r = this.getFxRestore();                          var b = this.getBox();                         this.setSize(b);                         var wrap = this.fxWrap(r.pos, o, "visible");             var st = this.dom.style;             st.visibility = "visible";             st.position = "absolute";             wrap.setSize(b);             var after = function(){                 if(o.useDisplay){                     el.setDisplayed(false);                 }else{                     el.hide();                 }                 el.fxUnwrap(wrap, r.pos, o);                 st.width = r.width;                 st.height = r.height;                 el.afterFx(o);             };             var a, zero = {to: 0};             switch(anchor.toLowerCase()){                 case "t":                     st.left = st.bottom = "0";                     a = {height: zero};                 break;                 case "l":                     st.right = st.top = "0";                     a = {width: zero};                 break;                 case "r":                     st.left = st.top = "0";                     a = {width: zero, points: {to:[b.right, b.y]}};                 break;                 case "b":                     st.left = st.top = "0";                     a = {height: zero, points: {to:[b.x, b.bottom]}};                 break;                 case "tl":                     st.right = st.bottom = "0";                     a = {width: zero, height: zero};                 break;                 case "bl":                     st.right = st.top = "0";                     a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}};                 break;                 case "br":                     st.left = st.top = "0";                     a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}};                 break;                 case "tr":                     st.left = st.bottom = "0";                     a = {width: zero, height: zero, points: {to:[b.right, b.y]}};                 break;             }             arguments.callee.anim = wrap.fxanim(a,                 o,                 'motion',                 .5,                 "easeOut", after);         });         return this;     },     puff : function(o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             this.clearOpacity();             this.show();                         var r = this.getFxRestore();             var st = this.dom.style;             var after = function(){                 if(o.useDisplay){                     el.setDisplayed(false);                 }else{                     el.hide();                 }                 el.clearOpacity();                 el.setPositioning(r.pos);                 st.width = r.width;                 st.height = r.height;                 st.fontSize = '';                 el.afterFx(o);             };             var width = this.getWidth();             var height = this.getHeight();             arguments.callee.anim = this.fxanim({                     width : {to: this.adjustWidth(width * 2)},                     height : {to: this.adjustHeight(height * 2)},                     points : {by: [-(width * .5), -(height * .5)]},                     opacity : {to: 0},                     fontSize: {to:200, unit: "%"}                 },                 o,                 'motion',                 .5,                 "easeOut", after);         });         return this;     },     switchOff : function(o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             this.clearOpacity();             this.clip();                         var r = this.getFxRestore();             var st = this.dom.style;             var after = function(){                 if(o.useDisplay){                     el.setDisplayed(false);                 }else{                     el.hide();                 }                 el.clearOpacity();                 el.setPositioning(r.pos);                 st.width = r.width;                 st.height = r.height;                 el.afterFx(o);             };             this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){                 this.clearOpacity();                 (function(){                     this.fxanim({                         height:{to:1},                         points:{by:[0, this.getHeight() * .5]}                     }, o, 'motion', 0.3, 'easeIn', after);                 }).defer(100, this);             });         });         return this;     },          highlight : function(color, o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             color = color || "ffff9c";             var attr = o.attr || "backgroundColor";             this.clearOpacity();             this.show();             var origColor = this.getColor(attr);             var restoreColor = this.dom.style[attr];             var endColor = (o.endColor || origColor) || "ffffff";             var after = function(){                 el.dom.style[attr] = restoreColor;                 el.afterFx(o);             };             var a = {};             a[attr] = {from: color, to: endColor};             arguments.callee.anim = this.fxanim(a,                 o,                 'color',                 1,                 'easeIn', after);         });         return this;     },         frame : function(color, count, o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             color = color || "#C3DAF9";             if(color.length == 6){                 color = "#" + color;             }             count = count || 1;             var duration = o.duration || 1;             this.show();             var b = this.getBox();             var animFn = function(){                 var proxy = Ext.getBody().createChild({                      style:{                         visbility:"hidden",                         position:"absolute",                         "z-index":"35000",                         border:"0px solid " + color                      }                   });                 var scale = Ext.isBorderBox ? 2 : 1;                 proxy.animate({                     top:{from:b.y, to:b.y - 20},                     left:{from:b.x, to:b.x - 20},                     borderWidth:{from:0, to:10},                     opacity:{from:1, to:0},                     height:{from:b.height, to:(b.height + (20*scale))},                     width:{from:b.width, to:(b.width + (20*scale))}                 }, duration, function(){                     proxy.remove();                     if(--count > 0){                          animFn();                     }else{                         el.afterFx(o);                     }                 });             };             animFn.call(this);         });         return this;     },         pause : function(seconds){         var el = this.getFxEl();         var o = {};         el.queueFx(o, function(){             setTimeout(function(){                 el.afterFx(o);             }, seconds * 1000);         });         return this;     },         fadeIn : function(o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             this.setOpacity(0);             this.fixDisplay();             this.dom.style.visibility = 'visible';             var to = o.endOpacity || 1;             arguments.callee.anim = this.fxanim({opacity:{to:to}},                 o, null, .5, "easeOut", function(){                 if(to == 1){                     this.clearOpacity();                 }                 el.afterFx(o);             });         });         return this;     },         fadeOut : function(o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},                 o, null, .5, "easeOut", function(){                 if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){                      this.dom.style.display = "none";                 }else{                      this.dom.style.visibility = "hidden";                 }                 this.clearOpacity();                 el.afterFx(o);             });         });         return this;     },         scale : function(w, h, o){         this.shift(Ext.apply({}, o, {             width: w,             height: h         }));         return this;     },         shift : function(o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             var a = {}, w = o.width, h = o.height, x = o.x, y = o.y,  op = o.opacity;             if(w !== undefined){                 a.width = {to: this.adjustWidth(w)};             }             if(h !== undefined){                 a.height = {to: this.adjustHeight(h)};             }             if(o.left !== undefined){                 a.left = {to: o.left};             }             if(o.top !== undefined){                 a.top = {to: o.top};             }             if(o.right !== undefined){                 a.right = {to: o.right};             }             if(o.bottom !== undefined){                 a.bottom = {to: o.bottom};             }             if(x !== undefined || y !== undefined){                 a.points = {to: [                     x !== undefined ? x : this.getX(),                     y !== undefined ? y : this.getY()                 ]};             }             if(op !== undefined){                 a.opacity = {to: op};             }             if(o.xy !== undefined){                 a.points = {to: o.xy};             }             arguments.callee.anim = this.fxanim(a,                 o, 'motion', .35, "easeOut", function(){                 el.afterFx(o);             });         });         return this;     },     ghost : function(anchor, o){         var el = this.getFxEl();         o = o || {};         el.queueFx(o, function(){             anchor = anchor || "b";                         var r = this.getFxRestore();             var w = this.getWidth(),                 h = this.getHeight();             var st = this.dom.style;             var after = function(){                 if(o.useDisplay){                     el.setDisplayed(false);                 }else{                     el.hide();                 }                 el.clearOpacity();                 el.setPositioning(r.pos);                 st.width = r.width;                 st.height = r.height;                 el.afterFx(o);             };             var a = {opacity: {to: 0}, points: {}}, pt = a.points;             switch(anchor.toLowerCase()){                 case "t":                     pt.by = [0, -h];                 break;                 case "l":                     pt.by = [-w, 0];                 break;                 case "r":                     pt.by = [w, 0];                 break;                 case "b":                     pt.by = [0, h];                 break;                 case "tl":                     pt.by = [-w, -h];                 break;                 case "bl":                     pt.by = [-w, h];                 break;                 case "br":                     pt.by = [w, h];                 break;                 case "tr":                     pt.by = [w, -h];                 break;             }             arguments.callee.anim = this.fxanim(a,                 o,                 'motion',                 .5,                 "easeOut", after);         });         return this;     },     syncFx : function(){         this.fxDefaults = Ext.apply(this.fxDefaults || {}, {             block : false,             concurrent : true,             stopFx : false         });         return this;     },     sequenceFx : function(){         this.fxDefaults = Ext.apply(this.fxDefaults || {}, {             block : false,             concurrent : false,             stopFx : false         });         return this;     },     nextFx : function(){         var ef = this.fxQueue[0];         if(ef){             ef.call(this);         }     },     hasActiveFx : function(){         return this.fxQueue && this.fxQueue[0];     },     stopFx : function(){         if(this.hasActiveFx()){             var cur = this.fxQueue[0];             if(cur && cur.anim && cur.anim.isAnimated()){                 this.fxQueue = [cur];                 cur.anim.stop(true);             }         }         return this;     },     beforeFx : function(o){         if(this.hasActiveFx() && !o.concurrent){            if(o.stopFx){                this.stopFx();                return true;            }            return false;         }         return true;     },     hasFxBlock : function(){         var q = this.fxQueue;         return q && q[0] && q[0].block;     },     queueFx : function(o, fn){         if(!this.fxQueue){             this.fxQueue = [];         }         if(!this.hasFxBlock()){             Ext.applyIf(o, this.fxDefaults);             if(!o.concurrent){                 var run = this.beforeFx(o);                 fn.block = o.block;                 this.fxQueue.push(fn);                 if(run){                     this.nextFx();                 }             }else{                 fn.call(this);             }         }         return this;     },     fxWrap : function(pos, o, vis){         var wrap;         if(!o.wrap || !(wrap = Ext.get(o.wrap))){             var wrapXY;             if(o.fixPosition){                 wrapXY = this.getXY();             }             var div = document.createElement("div");             div.style.visibility = vis;             wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom));             wrap.setPositioning(pos);             if(wrap.getStyle("position") == "static"){                 wrap.position("relative");             }             this.clearPositioning('auto');             wrap.clip();             wrap.dom.appendChild(this.dom);             if(wrapXY){                 wrap.setXY(wrapXY);             }         }         return wrap;     },     fxUnwrap : function(wrap, pos, o){         this.clearPositioning();         this.setPositioning(pos);         if(!o.wrap){             wrap.dom.parentNode.insertBefore(this.dom, wrap.dom);             wrap.remove();         }     },     getFxRestore : function(){         var st = this.dom.style;         return {pos: this.getPositioning(), width: st.width, height : st.height};     },     afterFx : function(o){         if(o.afterStyle){             this.applyStyles(o.afterStyle);         }         if(o.afterCls){             this.addClass(o.afterCls);         }         if(o.remove === true){             this.remove();         }         Ext.callback(o.callback, o.scope, [this]);         if(!o.concurrent){             this.fxQueue.shift();             this.nextFx();         }     },     getFxEl : function(){         return Ext.get(this.dom);     },     fxanim : function(args, opt, animType, defaultDur, defaultEase, cb){         animType = animType || 'run';         opt = opt || {};         var anim = Ext.lib.Anim[animType](             this.dom, args,             (opt.duration || defaultDur) || .35,             (opt.easing || defaultEase) || 'easeOut',             function(){                 Ext.callback(cb, this);             },             this         );         opt.anim = anim;         return anim;     } }; Ext.Fx.resize = Ext.Fx.scale; Ext.apply(Ext.Element.prototype, Ext.Fx);
  634. Ext.CompositeElement = function(els){
  635.     this.elements = [];
  636.     this.addElements(els);
  637. };
  638. Ext.CompositeElement.prototype = {
  639.     isComposite: true,
  640.     addElements : function(els){
  641.         if(!els) return this;
  642.         if(typeof els == "string"){
  643.             els = Ext.Element.selectorFunction(els);
  644.         }
  645.         var yels = this.elements;
  646.         var index = yels.length-1;
  647.         for(var i = 0, len = els.length; i < len; i++) {
  648.          yels[++index] = Ext.get(els[i]);
  649.         }
  650.         return this;
  651.     },
  652.     
  653.     fill : function(els){
  654.         this.elements = [];
  655.         this.add(els);
  656.         return this;
  657.     },
  658.     
  659.     filter : function(selector){
  660.         var els = [];
  661.         this.each(function(el){
  662.             if(el.is(selector)){
  663.                 els[els.length] = el.dom;
  664.             }
  665.         });
  666.         this.fill(els);
  667.         return this;
  668.     },
  669.     invoke : function(fn, args){
  670.         var els = this.elements;
  671.         for(var i = 0, len = els.length; i < len; i++) {
  672.          Ext.Element.prototype[fn].apply(els[i], args);
  673.         }
  674.         return this;
  675.     },
  676.     
  677.     add : function(els){
  678.         if(typeof els == "string"){
  679.             this.addElements(Ext.Element.selectorFunction(els));
  680.         }else if(els.length !== undefined){
  681.             this.addElements(els);
  682.         }else{
  683.             this.addElements([els]);
  684.         }
  685.         return this;
  686.     },
  687.     
  688.     each : function(fn, scope){
  689.         var els = this.elements;
  690.         for(var i = 0, len = els.length; i < len; i++){
  691.             if(fn.call(scope || els[i], els[i], this, i) === false) {
  692.                 break;
  693.             }
  694.         }
  695.         return this;
  696.     },
  697.     
  698.     item : function(index){
  699.         return this.elements[index] || null;
  700.     },
  701.     
  702.     first : function(){
  703.         return this.item(0);
  704.     },
  705.     
  706.     last : function(){
  707.         return this.item(this.elements.length-1);
  708.     },
  709.     
  710.     getCount : function(){
  711.         return this.elements.length;
  712.     },
  713.     
  714.     contains : function(el){
  715.         return this.indexOf(el) !== -1;
  716.     },
  717.     
  718.     indexOf : function(el){
  719.         return this.elements.indexOf(Ext.get(el));
  720.     },
  721.     
  722.     removeElement : function(el, removeDom){
  723.         if(Ext.isArray(el)){
  724.             for(var i = 0, len = el.length; i < len; i++){
  725.                 this.removeElement(el[i]);
  726.             }
  727.             return this;
  728.         }
  729.         var index = typeof el == 'number' ? el : this.indexOf(el);
  730.         if(index !== -1 && this.elements[index]){
  731.             if(removeDom){
  732.                 var d = this.elements[index];
  733.                 if(d.dom){
  734.                     d.remove();
  735.                 }else{
  736.                     Ext.removeNode(d);
  737.                 }
  738.             }
  739.             this.elements.splice(index, 1);
  740.         }
  741.         return this;
  742.     },
  743.     
  744.     replaceElement : function(el, replacement, domReplace){
  745.         var index = typeof el == 'number' ? el : this.indexOf(el);
  746.         if(index !== -1){
  747.             if(domReplace){
  748.                 this.elements[index].replaceWith(replacement);
  749.             }else{
  750.                 this.elements.splice(index, 1, Ext.get(replacement))
  751.             }
  752.         }
  753.         return this;
  754.     },
  755.     
  756.     clear : function(){
  757.         this.elements = [];
  758.     }
  759. };
  760. (function(){
  761. Ext.CompositeElement.createCall = function(proto, fnName){
  762.     if(!proto[fnName]){
  763.         proto[fnName] = function(){
  764.             return this.invoke(fnName, arguments);
  765.         };
  766.     }
  767. };
  768. for(var fnName in Ext.Element.prototype){
  769.     if(typeof Ext.Element.prototype[fnName] == "function"){
  770.         Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
  771.     }
  772. };
  773. })();
  774. Ext.CompositeElementLite = function(els){
  775.     Ext.CompositeElementLite.superclass.constructor.call(this, els);
  776.     this.el = new Ext.Element.Flyweight();
  777. };
  778. Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
  779.     addElements : function(els){
  780.         if(els){
  781.             if(Ext.isArray(els)){
  782.                 this.elements = this.elements.concat(els);
  783.             }else{
  784.                 var yels = this.elements;
  785.                 var index = yels.length-1;
  786.                 for(var i = 0, len = els.length; i < len; i++) {
  787.                     yels[++index] = els[i];
  788.                 }
  789.             }
  790.         }
  791.         return this;
  792.     },
  793.     invoke : function(fn, args){
  794.         var els = this.elements;
  795.         var el = this.el;
  796.         for(var i = 0, len = els.length; i < len; i++) {
  797.             el.dom = els[i];
  798.          Ext.Element.prototype[fn].apply(el, args);
  799.         }
  800.         return this;
  801.     },
  802.     
  803.     item : function(index){
  804.         if(!this.elements[index]){
  805.             return null;
  806.         }
  807.         this.el.dom = this.elements[index];
  808.         return this.el;
  809.     },
  810.          addListener : function(eventName, handler, scope, opt){
  811.         var els = this.elements;
  812.         for(var i = 0, len = els.length; i < len; i++) {
  813.             Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
  814.         }
  815.         return this;
  816.     },
  817.     
  818.     each : function(fn, scope){
  819.         var els = this.elements;
  820.         var el = this.el;
  821.         for(var i = 0, len = els.length; i < len; i++){
  822.             el.dom = els[i];
  823.          if(fn.call(scope || el, el, this, i) === false){
  824.                 break;
  825.             }
  826.         }
  827.         return this;
  828.     },
  829.     indexOf : function(el){
  830.         return this.elements.indexOf(Ext.getDom(el));
  831.     },
  832.     replaceElement : function(el, replacement, domReplace){
  833.         var index = typeof el == 'number' ? el : this.indexOf(el);
  834.         if(index !== -1){
  835.             replacement = Ext.getDom(replacement);
  836.             if(domReplace){
  837.                 var d = this.elements[index];
  838.                 d.parentNode.insertBefore(replacement, d);
  839.                 Ext.removeNode(d);
  840.             }
  841.             this.elements.splice(index, 1, replacement);
  842.         }
  843.         return this;
  844.     }
  845. });
  846. Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
  847. if(Ext.DomQuery){
  848.     Ext.Element.selectorFunction = Ext.DomQuery.select;
  849. }
  850. Ext.Element.select = function(selector, unique, root){
  851.     var els;
  852.     if(typeof selector == "string"){
  853.         els = Ext.Element.selectorFunction(selector, root);
  854.     }else if(selector.length !== undefined){
  855.         els = selector;
  856.     }else{
  857.         throw "Invalid selector";
  858.     }
  859.     if(unique === true){
  860.         return new Ext.CompositeElement(els);
  861.     }else{
  862.         return new Ext.CompositeElementLite(els);
  863.     }
  864. };
  865. Ext.select = Ext.Element.select; Ext.data.Connection = function(config){     Ext.apply(this, config);     this.addEvents(                  "beforerequest",                  "requestcomplete",                  "requestexception"     );     Ext.data.Connection.superclass.constructor.call(this); }; Ext.extend(Ext.data.Connection, Ext.util.Observable, {                              timeout : 30000,          autoAbort:false,          disableCaching: true,               disableCachingParam: '_dc',               request : function(o){         if(this.fireEvent("beforerequest", this, o) !== false){             var p = o.params;             if(typeof p == "function"){                 p = p.call(o.scope||window, o);             }             if(typeof p == "object"){                 p = Ext.urlEncode(p);             }             if(this.extraParams){                 var extras = Ext.urlEncode(this.extraParams);                 p = p ? (p + '&' + extras) : extras;             }             var url = o.url || this.url;             if(typeof url == 'function'){                 url = url.call(o.scope||window, o);             }             if(o.form){                 var form = Ext.getDom(o.form);                 url = url || form.action;                 var enctype = form.getAttribute("enctype");                 if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){                     return this.doFormUpload(o, p, url);                 }                 var f = Ext.lib.Ajax.serializeForm(form);                 p = p ? (p + '&' + f) : f;             }             var hs = o.headers;             if(this.defaultHeaders){                 hs = Ext.apply(hs || {}, this.defaultHeaders);                 if(!o.headers){                     o.headers = hs;                 }             }             var cb = {                 success: this.handleResponse,                 failure: this.handleFailure,                 scope: this,                 argument: {options: o},                 timeout : o.timeout || this.timeout             };             var method = o.method||this.method||((p || o.xmlData || o.jsonData) ? "POST" : "GET");             if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){                 var dcp = o.disableCachingParam || this.disableCachingParam;                 url += (url.indexOf('?') != -1 ? '&' : '?') + dcp + '=' + (new Date().getTime());             }             if(typeof o.autoAbort == 'boolean'){                 if(o.autoAbort){                     this.abort();                 }             }else if(this.autoAbort !== false){                 this.abort();             }             if((method == 'GET' || o.xmlData || o.jsonData) && p){                 url += (url.indexOf('?') != -1 ? '&' : '?') + p;                 p = '';             }             this.transId = Ext.lib.Ajax.request(method, url, cb, p, o);             return this.transId;         }else{             Ext.callback(o.callback, o.scope, [o, null, null]);             return null;         }     },          isLoading : function(transId){         if(transId){             return Ext.lib.Ajax.isCallInProgress(transId);         }else{             return this.transId ? true : false;         }     },          abort : function(transId){         if(transId || this.isLoading()){             Ext.lib.Ajax.abort(transId || this.transId);         }     },         handleResponse : function(response){         this.transId = false;         var options = response.argument.options;         response.argument = options ? options.argument : null;         this.fireEvent("requestcomplete", this, response, options);         Ext.callback(options.success, options.scope, [response, options]);         Ext.callback(options.callback, options.scope, [options, true, response]);     },         handleFailure : function(response, e){         this.transId = false;         var options = response.argument.options;         response.argument = options ? options.argument : null;         this.fireEvent("requestexception", this, response, options, e);         Ext.callback(options.failure, options.scope, [response, options]);         Ext.callback(options.callback, options.scope, [options, false, response]);     },         doFormUpload : function(o, ps, url){         var id = Ext.id();         var frame = document.createElement('iframe');         frame.id = id;         frame.name = id;         frame.className = 'x-hidden';         if(Ext.isIE){             frame.src = Ext.SSL_SECURE_URL;         }         document.body.appendChild(frame);         if(Ext.isIE){            document.frames[id].name = id;         }         var form = Ext.getDom(o.form);         form.target = id;         form.method = 'POST';         form.enctype = form.encoding = 'multipart/form-data';         if(url){             form.action = url;         }         var hiddens, hd;         if(ps){             hiddens = [];             ps = Ext.urlDecode(ps, false);             for(var k in ps){                 if(ps.hasOwnProperty(k)){                     hd = document.createElement('input');                     hd.type = 'hidden';                     hd.name = k;                     hd.value = ps[k];                     form.appendChild(hd);                     hiddens.push(hd);                 }             }         }         function cb(){             var r = {                  responseText : '',                 responseXML : null             };             r.argument = o ? o.argument : null;             try {                 var doc;                 if(Ext.isIE){                     doc = frame.contentWindow.document;                 }else {                     doc = (frame.contentDocument || window.frames[id].document);                 }                 if(doc && doc.body){                     r.responseText = doc.body.innerHTML;                 }                 if(doc && doc.XMLDocument){                     r.responseXML = doc.XMLDocument;                 }else {                     r.responseXML = doc;                 }             }             catch(e) {                             }             Ext.EventManager.removeListener(frame, 'load', cb, this);             this.fireEvent("requestcomplete", this, r, o);             Ext.callback(o.success, o.scope, [r, o]);             Ext.callback(o.callback, o.scope, [o, true, r]);             setTimeout(function(){Ext.removeNode(frame);}, 100);         }         Ext.EventManager.on(frame, 'load', cb, this);         form.submit();         if(hiddens){             for(var i = 0, len = hiddens.length; i < len; i++){                 Ext.removeNode(hiddens[i]);             }         }     } }); Ext.Ajax = new Ext.data.Connection({                                                                           autoAbort : false,          serializeForm : function(form){         return Ext.lib.Ajax.serializeForm(form);     } }); Ext.Updater = Ext.extend(Ext.util.Observable, {     constructor: function(el, forceNew){         el = Ext.get(el);         if(!forceNew && el.updateManager){             return el.updateManager;         }                  this.el = el;                  this.defaultUrl = null;         this.addEvents(                          "beforeupdate",                          "update",                          "failure"         );         var d = Ext.Updater.defaults;                  this.sslBlankUrl = d.sslBlankUrl;                  this.disableCaching = d.disableCaching;                  this.indicatorText = d.indicatorText;                  this.showLoadIndicator = d.showLoadIndicator;                  this.timeout = d.timeout;                  this.loadScripts = d.loadScripts;                  this.transaction = null;                  this.refreshDelegate = this.refresh.createDelegate(this);                  this.updateDelegate = this.update.createDelegate(this);                  this.formUpdateDelegate = this.formUpdate.createDelegate(this);         if(!this.renderer){                   this.renderer = this.getDefaultRenderer();         }         Ext.Updater.superclass.constructor.call(this);     },          getDefaultRenderer: function() {         return new Ext.Updater.BasicRenderer();     },          getEl : function(){         return this.el;     },          update : function(url, params, callback, discardUrl){         if(this.fireEvent("beforeupdate", this.el, url, params) !== false){             var cfg, callerScope;             if(typeof url == "object"){                 cfg = url;                 url = cfg.url;                 params = params || cfg.params;                 callback = callback || cfg.callback;                 discardUrl = discardUrl || cfg.discardUrl;                 callerScope = cfg.scope;                 if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};                 if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};                 if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};                 if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};             }             this.showLoading();             if(!discardUrl){                 this.defaultUrl = url;             }             if(typeof url == "function"){                 url = url.call(this);             }             var o = Ext.apply({}, {                 url : url,                 params: (typeof params == "function" && callerScope) ? params.createDelegate(callerScope) : params,                 success: this.processSuccess,                 failure: this.processFailure,                 scope: this,                 callback: undefined,                 timeout: (this.timeout*1000),                 disableCaching: this.disableCaching,                 argument: {                     "options": cfg,                     "url": url,                     "form": null,                     "callback": callback,                     "scope": callerScope || window,                     "params": params                 }             }, cfg);             this.transaction = Ext.Ajax.request(o);         }     },          formUpdate : function(form, url, reset, callback){         if(this.fireEvent("beforeupdate", this.el, form, url) !== false){             if(typeof url == "function"){                 url = url.call(this);             }             form = Ext.getDom(form)             this.transaction = Ext.Ajax.request({                 form: form,                 url:url,                 success: this.processSuccess,                 failure: this.processFailure,                 scope: this,                 timeout: (this.timeout*1000),                 argument: {                     "url": url,                     "form": form,                     "callback": callback,                     "reset": reset                 }             });             this.showLoading.defer(1, this);         }     },          refresh : function(callback){         if(this.defaultUrl == null){             return;         }         this.update(this.defaultUrl, null, callback, true);     },          startAutoRefresh : function(interval, url, params, callback, refreshNow){         if(refreshNow){             this.update(url || this.defaultUrl, params, callback, true);         }         if(this.autoRefreshProcId){             clearInterval(this.autoRefreshProcId);         }         this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);     },           stopAutoRefresh : function(){         if(this.autoRefreshProcId){             clearInterval(this.autoRefreshProcId);             delete this.autoRefreshProcId;         }     },          isAutoRefreshing : function(){        return this.autoRefreshProcId ? true : false;     },          showLoading : function(){         if(this.showLoadIndicator){             this.el.update(this.indicatorText);         }     },         processSuccess : function(response){         this.transaction = null;         if(response.argument.form && response.argument.reset){             try{                 response.argument.form.reset();             }catch(e){}         }         if(this.loadScripts){             this.renderer.render(this.el, response, this,                 this.updateComplete.createDelegate(this, [response]));         }else{             this.renderer.render(this.el, response, this);             this.updateComplete(response);         }     },         updateComplete : function(response){         this.fireEvent("update", this.el, response);         if(typeof response.argument.callback == "function"){             response.argument.callback.call(response.argument.scope, this.el, true, response, response.argument.options);         }     },         processFailure : function(response){         this.transaction = null;         this.fireEvent("failure", this.el, response);         if(typeof response.argument.callback == "function"){             response.argument.callback.call(response.argument.scope, this.el, false, response, response.argument.options);         }     },          setRenderer : function(renderer){         this.renderer = renderer;     },          getRenderer : function(){        return this.renderer;     },          setDefaultUrl : function(defaultUrl){         this.defaultUrl = defaultUrl;     },          abort : function(){         if(this.transaction){             Ext.Ajax.abort(this.transaction);         }     },          isUpdating : function(){         if(this.transaction){             return Ext.Ajax.isLoading(this.transaction);         }         return false;     } });    Ext.Updater.defaults = {                  timeout : 30,                   loadScripts : false,                  sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),                  disableCaching : false,                  showLoadIndicator : true,                  indicatorText : '<div class="loading-indicator">Loading...</div>'    }; Ext.Updater.updateElement = function(el, url, params, options){     var um = Ext.get(el).getUpdater();     Ext.apply(um, options);     um.update(url, params, options ? options.callback : null); }; Ext.Updater.BasicRenderer = function(){}; Ext.Updater.BasicRenderer.prototype = {           render : function(el, response, updateManager, callback){         el.update(response.responseText, updateManager.loadScripts, callback);     } }; Ext.UpdateManager = Ext.Updater; (function() { Date.formatCodeToRegex = function(character, currentGroup) {         var p = Date.parseCodes[character];     if (p) {       p = Ext.type(p) == 'function'? p() : p;       Date.parseCodes[character] = p;     }     return p? Ext.applyIf({       c: p.c? String.format(p.c, currentGroup || "{0}") : p.c     }, p) : {         g:0,         c:null,         s:Ext.escapeRe(character)     } } var $f = Date.formatCodeToRegex; Ext.apply(Date, {         parseFunctions: {count:0},     parseRegexes: [],     formatFunctions: {count:0},     daysInMonth : [31,28,31,30,31,30,31,31,30,31,30,31],     y2kYear : 50,          MILLI : "ms",          SECOND : "s",          MINUTE : "mi",          HOUR : "h",          DAY : "d",          MONTH : "mo",          YEAR : "y",          dayNames : [         "Sunday",         "Monday",         "Tuesday",         "Wednesday",         "Thursday",         "Friday",         "Saturday"     ],          monthNames : [         "January",         "February",         "March",         "April",         "May",         "June",         "July",         "August",         "September",         "October",         "November",         "December"     ],          monthNumbers : {         Jan:0,         Feb:1,         Mar:2,         Apr:3,         May:4,         Jun:5,         Jul:6,         Aug:7,         Sep:8,         Oct:9,         Nov:10,         Dec:11     },          getShortMonthName : function(month) {         return Date.monthNames[month].substring(0, 3);     },          getShortDayName : function(day) {         return Date.dayNames[day].substring(0, 3);     },          getMonthNumber : function(name) {                 return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()];     },          formatCodes : {         d: "String.leftPad(this.getDate(), 2, '0')",         D: "Date.getShortDayName(this.getDay())",         j: "this.getDate()",         l: "Date.dayNames[this.getDay()]",         N: "(this.getDay() ? this.getDay() : 7)",         S: "this.getSuffix()",         w: "this.getDay()",         z: "this.getDayOfYear()",         W: "String.leftPad(this.getWeekOfYear(), 2, '0')",         F: "Date.monthNames[this.getMonth()]",         m: "String.leftPad(this.getMonth() + 1, 2, '0')",         M: "Date.getShortMonthName(this.getMonth())",         n: "(this.getMonth() + 1)",         t: "this.getDaysInMonth()",         L: "(this.isLeapYear() ? 1 : 0)",         o: "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",         Y: "this.getFullYear()",         y: "('' + this.getFullYear()).substring(2, 4)",         a: "(this.getHours() < 12 ? 'am' : 'pm')",         A: "(this.getHours() < 12 ? 'AM' : 'PM')",         g: "((this.getHours() % 12) ? this.getHours() % 12 : 12)",         G: "this.getHours()",         h: "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",         H: "String.leftPad(this.getHours(), 2, '0')",         i: "String.leftPad(this.getMinutes(), 2, '0')",         s: "String.leftPad(this.getSeconds(), 2, '0')",         u: "String.leftPad(this.getMilliseconds(), 3, '0')",         O: "this.getGMTOffset()",         P: "this.getGMTOffset(true)",         T: "this.getTimezone()",         Z: "(this.getTimezoneOffset() * -60)",         c: function() {             for (var c = "Y-m-dTH:i:sP", code = [], i = 0, l = c.length; i < l; ++i) {                 var e = c.charAt(i);                 code.push(e == "T" ? "'T'" : Date.getFormatCode(e));             }             return code.join(" + ");         },                  U: "Math.round(this.getTime() / 1000)"     },          parseDate : function(input, format) {         var p = Date.parseFunctions;         if (p[format] == null) {             Date.createParser(format);         }         var func = p[format];         return Date[func](input);     },         getFormatCode : function(character) {         var f = Date.formatCodes[character];         if (f) {           f = Ext.type(f) == 'function'? f() : f;           Date.formatCodes[character] = f;         }                 return f || ("'" + String.escape(character) + "'");     },         createNewFormat : function(format) {         var funcName = "format" + Date.formatFunctions.count++;         Date.formatFunctions[format] = funcName;         var code = "Date.prototype." + funcName + " = function(){return ";         var special = false;         var ch = '';         for (var i = 0; i < format.length; ++i) {             ch = format.charAt(i);             if (!special && ch == "\") {                 special = true;             }             else if (special) {                 special = false;                 code += "'" + String.escape(ch) + "' + ";             }             else {                 code += Date.getFormatCode(ch) + " + ";             }         }         eval(code.substring(0, code.length - 3) + ";}");     },         createParser : function(format) {         var funcName = "parse" + Date.parseFunctions.count++;         var regexNum = Date.parseRegexes.length;         var currentGroup = 1;         Date.parseFunctions[format] = funcName;         var code = "Date." + funcName + " = function(input){n"             + "var y, m, d, h = 0, i = 0, s = 0, ms = 0, o, z, u, v;n"             + "input = String(input);n"             + "d = new Date();n"             + "y = d.getFullYear();n"             + "m = d.getMonth();n"             + "d = d.getDate();n"             + "var results = input.match(Date.parseRegexes[" + regexNum + "]);n"             + "if (results && results.length > 0) {";         var regex = "";         var special = false;         var ch = '';         for (var i = 0; i < format.length; ++i) {             ch = format.charAt(i);             if (!special && ch == "\") {                 special = true;             }             else if (special) {                 special = false;                 regex += String.escape(ch);             }             else {                 var obj = Date.formatCodeToRegex(ch, currentGroup);                 currentGroup += obj.g;                 regex += obj.s;                 if (obj.g && obj.c) {                     code += obj.c;                 }             }         }         code += "if (u){n"             + "v = new Date(u * 1000);n"             + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0 && ms >= 0){n"             + "v = new Date(y, m, d, h, i, s, ms);n"             + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0){n"             + "v = new Date(y, m, d, h, i, s);n"             + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0 && i >= 0){n"             + "v = new Date(y, m, d, h, i);n"             + "}else if (y >= 0 && m >= 0 && d > 0 && h >= 0){n"             + "v = new Date(y, m, d, h);n"             + "}else if (y >= 0 && m >= 0 && d > 0){n"             + "v = new Date(y, m, d);n"             + "}else if (y >= 0 && m >= 0){n"             + "v = new Date(y, m);n"             + "}else if (y >= 0){n"             + "v = new Date(y);n"             + "}n}nreturn (v && (z || o))?"             +     " (Ext.type(z) == 'number' ? v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - z) :"             +         " v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn))) : v;n"             + "}";         Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");         eval(code);     },         parseCodes : {                  d: {             g:1,             c:"d = parseInt(results[{0}], 10);n",             s:"(\d{2})"         },         j: {             g:1,             c:"d = parseInt(results[{0}], 10);n",             s:"(\d{1,2})"         },         D: function() {             for (var a = [], i = 0; i < 7; a.push(Date.getShortDayName(i)), ++i);             return {                 g:0,                 c:null,                 s:"(?:" + a.join("|") +")"             }         },         l: function() {             return {                 g:0,                 c:null,                 s:"(?:" + Date.dayNames.join("|") + ")"             }         },         N: {             g:0,             c:null,             s:"[1-7]"         },         S: {             g:0,             c:null,             s:"(?:st|nd|rd|th)"         },         w: {             g:0,             c:null,             s:"[0-6]"         },         z: {             g:0,             c:null,             s:"(?:\d{1,3}"         },         W: {             g:0,             c:null,             s:"(?:\d{2})"         },         F: function() {             return {                 g:1,                 c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);n",                 s:"(" + Date.monthNames.join("|") + ")"             }         },         M: function() {             for (var a = [], i = 0; i < 12; a.push(Date.getShortMonthName(i)), ++i);             return Ext.applyIf({                 s:"(" + a.join("|") + ")"             }, $f("F"));         },         m: {             g:1,             c:"m = parseInt(results[{0}], 10) - 1;n",             s:"(\d{2})"         },         n: {             g:1,             c:"m = parseInt(results[{0}], 10) - 1;n",             s:"(\d{1,2})"         },         t: {             g:0,             c:null,             s:"(?:\d{2})"         },         L: {             g:0,             c:null,             s:"(?:1|0)"         },         o: function() {             return $f("Y");         },         Y: {             g:1,             c:"y = parseInt(results[{0}], 10);n",             s:"(\d{4})"         },         y: {             g:1,             c:"var ty = parseInt(results[{0}], 10);n"                 + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;n",             s:"(\d{1,2})"         },         a: {             g:1,             c:"if (results[{0}] == 'am') {n"                 + "if (h == 12) { h = 0; }n"                 + "} else { if (h < 12) { h += 12; }}",             s:"(am|pm)"         },         A: {             g:1,             c:"if (results[{0}] == 'AM') {n"                 + "if (h == 12) { h = 0; }n"                 + "} else { if (h < 12) { h += 12; }}",             s:"(AM|PM)"         },         g: function() {             return $f("G");         },         G: {             g:1,             c:"h = parseInt(results[{0}], 10);n",             s:"(\d{1,2})"         },         h: function() {             return $f("H");         },         H: {             g:1,             c:"h = parseInt(results[{0}], 10);n",             s:"(\d{2})"         },         i: {             g:1,             c:"i = parseInt(results[{0}], 10);n",             s:"(\d{2})"         },         s: {             g:1,             c:"s = parseInt(results[{0}], 10);n",             s:"(\d{2})"         },         u: {             g:1,             c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);n",             s:"(\d+)"         },         O: {             g:1,             c:[                 "o = results[{0}];",                 "var sn = o.substring(0,1);",                 "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);",                 "var mn = o.substring(3,5) % 60;",                 "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;n"             ].join("n"),             s: "([+-]\d{4})"         },         P: {             g:1,             c:[                 "o = results[{0}];",                 "var sn = o.substring(0,1);",                 "var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);",                 "var mn = o.substring(4,6) % 60;",                 "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;n"             ].join("n"),             s: "([+-]\d{2}:\d{2})"         },         T: {             g:0,             c:null,             s:"[A-Z]{1,4}"         },         Z: {             g:1,             c:"z = results[{0}] * 1;n"                   + "z = (-43200 <= z && z <= 50400)? z : null;n",             s:"([+-]?\d{1,5})"         },         c: function() {             var calc = [];             var arr = [                 $f("Y", 1),                 $f("m", 2),                 $f("d", 3),                 $f("h", 4),                 $f("i", 5),                 $f("s", 6),                 {c:"ms = (results[7] || '.0').substring(1); ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);n"},                 {c:"if(results[9] == 'Z'){no = 0;n}else{n" + $f("P", 9).c + "n}"}             ];             for (var i = 0, l = arr.length; i < l; ++i) {                 calc.push(arr[i].c);             }             return {                 g:1,                 c:calc.join(""),                 s:arr[0].s + "-" + arr[1].s + "-" + arr[2].s + "T" + arr[3].s + ":" + arr[4].s + ":" + arr[5].s                       + "((.|,)\d+)?"                       + "(" + $f("P", null).s + "|Z)"             }         },         U: {             g:1,             c:"u = parseInt(results[{0}], 10);n",             s:"(-?\d+)"         }     } }); }()); Ext.override(Date, {         dateFormat : function(format) {         if (Date.formatFunctions[format] == null) {             Date.createNewFormat(format);         }         var func = Date.formatFunctions[format];         return this[func]();     },          getTimezone : function() {                                                                                                         return this.toString().replace(/^.* (?:((.*))|([A-Z]{1,4})(?:[-+][0-9]{4})?(?: -?d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");     },          getGMTOffset : function(colon) {         return (this.getTimezoneOffset() > 0 ? "-" : "+")             + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")             + (colon ? ":" : "")             + String.leftPad(Math.abs(this.getTimezoneOffset() % 60), 2, "0");     },          getDayOfYear : function() {         var num = 0;         Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;         for (var i = 0; i < this.getMonth(); ++i) {             num += Date.daysInMonth[i];         }         return num + this.getDate() - 1;     },          getWeekOfYear : function() {                 var ms1d = 864e5;         var ms7d = 7 * ms1d;         var DC3 = Date.UTC(this.getFullYear(), this.getMonth(), this.getDate() + 3) / ms1d;         var AWN = Math.floor(DC3 / 7);         var Wyr = new Date(AWN * ms7d).getUTCFullYear();         return AWN - Math.floor(Date.UTC(Wyr, 0, 7) / ms7d) + 1;     },          isLeapYear : function() {         var year = this.getFullYear();         return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));     },          getFirstDayOfMonth : function() {         var day = (this.getDay() - (this.getDate() - 1)) % 7;         return (day < 0) ? (day + 7) : day;     },          getLastDayOfMonth : function() {         var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;         return (day < 0) ? (day + 7) : day;     },          getFirstDateOfMonth : function() {         return new Date(this.getFullYear(), this.getMonth(), 1);     },          getLastDateOfMonth : function() {         return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());     },          getDaysInMonth : function() {         Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;         return Date.daysInMonth[this.getMonth()];     },          getSuffix : function() {         switch (this.getDate()) {             case 1:             case 21:             case 31:                 return "st";             case 2:             case 22:                 return "nd";             case 3:             case 23:                 return "rd";             default:                 return "th";         }     },          clone : function() {         return new Date(this.getTime());     },          clearTime : function(clone){         if(clone){             return this.clone().clearTime();         }         this.setHours(0);         this.setMinutes(0);         this.setSeconds(0);         this.setMilliseconds(0);         return this;     },          add : function(interval, value){         var d = this.clone();         if (!interval || value === 0) return d;         switch(interval.toLowerCase()){             case Date.MILLI:                 d.setMilliseconds(this.getMilliseconds() + value);                 break;             case Date.SECOND:                 d.setSeconds(this.getSeconds() + value);                 break;             case Date.MINUTE:                 d.setMinutes(this.getMinutes() + value);                 break;             case Date.HOUR:                 d.setHours(this.getHours() + value);                 break;             case Date.DAY:                 d.setDate(this.getDate() + value);                 break;             case Date.MONTH:                 var day = this.getDate();                 if(day > 28){                     day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate());                 }                 d.setDate(day);                 d.setMonth(this.getMonth() + value);                 break;             case Date.YEAR:                 d.setFullYear(this.getFullYear() + value);                 break;         }         return d;     },          between : function(start, end){         var t = this.getTime();         return start.getTime() <= t && t <= end.getTime();     } }); Date.prototype.format = Date.prototype.dateFormat; if(Ext.isSafari){     Date.brokenSetMonth = Date.prototype.setMonth;     Date.prototype.setMonth = function(num){         if(num <= -1){             var n = Math.ceil(-num);             var back_year = Math.ceil(n/12);             var month = (n % 12) ? 12 - n % 12 : 0 ;             this.setFullYear(this.getFullYear() - back_year);             return Date.brokenSetMonth.call(this, month);         } else {             return Date.brokenSetMonth.apply(this, arguments);         }     }; } Ext.util.DelayedTask = function(fn, scope, args){     var id = null, d, t;     var call = function(){         var now = new Date().getTime();         if(now - t >= d){             clearInterval(id);             id = null;             fn.apply(scope, args || []);         }     };          this.delay = function(delay, newFn, newScope, newArgs){         if(id && delay != d){             this.cancel();         }         d = delay;         t = new Date().getTime();         fn = newFn || fn;         scope = newScope || scope;         args = newArgs || args;         if(!id){             id = setInterval(call, d);         }     };          this.cancel = function(){         if(id){             clearInterval(id);             id = null;         }     }; }; Ext.util.TaskRunner = function(interval){     interval = interval || 10;     var tasks = [], removeQueue = [];     var id = 0;     var running = false;         var stopThread = function(){         running = false;         clearInterval(id);         id = 0;     };         var startThread = function(){         if(!running){             running = true;             id = setInterval(runTasks, interval);         }     };         var removeTask = function(t){         removeQueue.push(t);         if(t.onStop){             t.onStop.apply(t.scope || t);         }     };         var runTasks = function(){         if(removeQueue.length > 0){             for(var i = 0, len = removeQueue.length; i < len; i++){                 tasks.remove(removeQueue[i]);             }             removeQueue = [];             if(tasks.length < 1){                 stopThread();                 return;             }         }         var now = new Date().getTime();         for(var i = 0, len = tasks.length; i < len; ++i){             var t = tasks[i];             var itime = now - t.taskRunTime;             if(t.interval <= itime){                 var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);                 t.taskRunTime = now;                 if(rt === false || t.taskRunCount === t.repeat){                     removeTask(t);                     return;                 }             }             if(t.duration && t.duration <= (now - t.taskStartTime)){                 removeTask(t);             }         }     };          this.start = function(task){         tasks.push(task);         task.taskStartTime = new Date().getTime();         task.taskRunTime = 0;         task.taskRunCount = 0;         startThread();         return task;     };          this.stop = function(task){         removeTask(task);         return task;     };          this.stopAll = function(){         stopThread();         for(var i = 0, len = tasks.length; i < len; i++){             if(tasks[i].onStop){                 tasks[i].onStop();             }         }         tasks = [];         removeQueue = [];     }; }; Ext.TaskMgr = new Ext.util.TaskRunner(); Ext.util.MixedCollection = function(allowFunctions, keyFn){     this.items = [];     this.map = {};     this.keys = [];     this.length = 0;     this.addEvents(                  "clear",                  "add",                  "replace",                  "remove",         "sort"     );     this.allowFunctions = allowFunctions === true;     if(keyFn){         this.getKey = keyFn;     }     Ext.util.MixedCollection.superclass.constructor.call(this); }; Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {     allowFunctions : false,     add : function(key, o){         if(arguments.length == 1){             o = arguments[0];             key = this.getKey(o);         }         if(typeof key == "undefined" || key === null){             this.length++;             this.items.push(o);             this.keys.push(null);         }else{             var old = this.map[key];             if(old){                 return this.replace(key, o);             }             this.length++;             this.items.push(o);             this.map[key] = o;             this.keys.push(key);         }         this.fireEvent("add", this.length-1, o, key);         return o;     },     getKey : function(o){          return o.id;     },     replace : function(key, o){         if(arguments.length == 1){             o = arguments[0];             key = this.getKey(o);         }         var old = this.item(key);         if(typeof key == "undefined" || key === null || typeof old == "undefined"){              return this.add(key, o);         }         var index = this.indexOfKey(key);         this.items[index] = o;         this.map[key] = o;         this.fireEvent("replace", key, old, o);         return o;     },     addAll : function(objs){         if(arguments.length > 1 || Ext.isArray(objs)){             var args = arguments.length > 1 ? arguments : objs;             for(var i = 0, len = args.length; i < len; i++){                 this.add(args[i]);             }         }else{             for(var key in objs){                 if(this.allowFunctions || typeof objs[key] != "function"){                     this.add(key, objs[key]);                 }             }         }     },     each : function(fn, scope){         var items = [].concat(this.items);         for(var i = 0, len = items.length; i < len; i++){             if(fn.call(scope || items[i], items[i], i, len) === false){                 break;             }         }     },     eachKey : function(fn, scope){         for(var i = 0, len = this.keys.length; i < len; i++){             fn.call(scope || window, this.keys[i], this.items[i], i, len);         }     },          find : function(fn, scope){         for(var i = 0, len = this.items.length; i < len; i++){             if(fn.call(scope || window, this.items[i], this.keys[i])){                 return this.items[i];             }         }         return null;     },     insert : function(index, key, o){         if(arguments.length == 2){             o = arguments[1];             key = this.getKey(o);         }         if(index >= this.length){             return this.add(key, o);         }         this.length++;         this.items.splice(index, 0, o);         if(typeof key != "undefined" && key != null){             this.map[key] = o;         }         this.keys.splice(index, 0, key);         this.fireEvent("add", index, o, key);         return o;     },     remove : function(o){         return this.removeAt(this.indexOf(o));     },     removeAt : function(index){         if(index < this.length && index >= 0){             this.length--;             var o = this.items[index];             this.items.splice(index, 1);             var key = this.keys[index];             if(typeof key != "undefined"){                 delete this.map[key];             }             this.keys.splice(index, 1);             this.fireEvent("remove", o, key);             return o;         }         return false;     },     removeKey : function(key){         return this.removeAt(this.indexOfKey(key));     },     getCount : function(){         return this.length;     },     indexOf : function(o){         return this.items.indexOf(o);     },     indexOfKey : function(key){         return this.keys.indexOf(key);     },     item : function(key){         var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key];         return typeof item != 'function' || this.allowFunctions ? item : null;     },     itemAt : function(index){         return this.items[index];     },     key : function(key){         return this.map[key];     },     contains : function(o){         return this.indexOf(o) != -1;     },     containsKey : function(key){         return typeof this.map[key] != "undefined";     },     clear : function(){         this.length = 0;         this.items = [];         this.keys = [];         this.map = {};         this.fireEvent("clear");     },     first : function(){         return this.items[0];     },     last : function(){         return this.items[this.length-1];     },         _sort : function(property, dir, fn){         var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1;         fn = fn || function(a, b){             return a-b;         };         var c = [], k = this.keys, items = this.items;         for(var i = 0, len = items.length; i < len; i++){             c[c.length] = {key: k[i], value: items[i], index: i};         }         c.sort(function(a, b){             var v = fn(a[property], b[property]) * dsc;             if(v == 0){                 v = (a.index < b.index ? -1 : 1);             }             return v;         });         for(var i = 0, len = c.length; i < len; i++){             items[i] = c[i].value;             k[i] = c[i].key;         }         this.fireEvent("sort", this);     },          sort : function(dir, fn){         this._sort("value", dir, fn);     },          keySort : function(dir, fn){         this._sort("key", dir, fn || function(a, b){             return String(a).toUpperCase()-String(b).toUpperCase();         });     },          getRange : function(start, end){         var items = this.items;         if(items.length < 1){             return [];         }         start = start || 0;         end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);         var r = [];         if(start <= end){             for(var i = start; i <= end; i++) {              r[r.length] = items[i];             }         }else{             for(var i = start; i >= end; i--) {              r[r.length] = items[i];             }         }         return r;     },          filter : function(property, value, anyMatch, caseSensitive){         if(Ext.isEmpty(value, false)){             return this.clone();         }         value = this.createValueMatcher(value, anyMatch, caseSensitive);         return this.filterBy(function(o){             return o && value.test(o[property]);         }); },          filterBy : function(fn, scope){         var r = new Ext.util.MixedCollection();         r.getKey = this.getKey;         var k = this.keys, it = this.items;         for(var i = 0, len = it.length; i < len; i++){             if(fn.call(scope||this, it[i], k[i])){ r.add(k[i], it[i]); }         }         return r;     },          findIndex : function(property, value, start, anyMatch, caseSensitive){         if(Ext.isEmpty(value, false)){             return -1;         }         value = this.createValueMatcher(value, anyMatch, caseSensitive);         return this.findIndexBy(function(o){             return o && value.test(o[property]);         }, null, start); },          findIndexBy : function(fn, scope, start){         var k = this.keys, it = this.items;         for(var i = (start||0), len = it.length; i < len; i++){             if(fn.call(scope||this, it[i], k[i])){ return i;             }         }         if(typeof start == 'number' && start > 0){             for(var i = 0; i < start; i++){                 if(fn.call(scope||this, it[i], k[i])){                     return i;                 }             }         }         return -1;     },         createValueMatcher : function(value, anyMatch, caseSensitive){         if(!value.exec){             value = String(value);             value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i');         }         return value;     },          clone : function(){         var r = new Ext.util.MixedCollection();         var k = this.keys, it = this.items;         for(var i = 0, len = it.length; i < len; i++){             r.add(k[i], it[i]);         }         r.getKey = this.getKey;         return r;     } }); Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item; Ext.util.JSON = new (function(){     var useHasOwn = !!{}.hasOwnProperty;              var pad = function(n) {         return n < 10 ? "0" + n : n;     };     var m = {         "b": '\b',         "t": '\t',         "n": '\n',         "f": '\f',         "r": '\r',         '"' : '\"',         "\": '\\'     };     var encodeString = function(s){         if (/["\x00-x1f]/.test(s)) {             return '"' + s.replace(/([x00-x1f\"])/g, function(a, b) {                 var c = m[b];                 if(c){                     return c;                 }                 c = b.charCodeAt();                 return "\u00" +                     Math.floor(c / 16).toString(16) +                     (c % 16).toString(16);             }) + '"';         }         return '"' + s + '"';     };     var encodeArray = function(o){         var a = ["["], b, i, l = o.length, v;             for (i = 0; i < l; i += 1) {                 v = o[i];                 switch (typeof v) {                     case "undefined":                     case "function":                     case "unknown":                         break;                     default:                         if (b) {                             a.push(',');                         }                         a.push(v === null ? "null" : Ext.util.JSON.encode(v));                         b = true;                 }             }             a.push("]");             return a.join("");     };     this.encodeDate = function(o){         return '"' + o.getFullYear() + "-" +                 pad(o.getMonth() + 1) + "-" +                 pad(o.getDate()) + "T" +                 pad(o.getHours()) + ":" +                 pad(o.getMinutes()) + ":" +                 pad(o.getSeconds()) + '"';     };          this.encode = function(o){         if(typeof o == "undefined" || o === null){             return "null";         }else if(Ext.isArray(o)){             return encodeArray(o);         }else if(Ext.isDate(o)){             return Ext.util.JSON.encodeDate(o);         }else if(typeof o == "string"){             return encodeString(o);         }else if(typeof o == "number"){             return isFinite(o) ? String(o) : "null";         }else if(typeof o == "boolean"){             return String(o);         }else {             var a = ["{"], b, i, v;             for (i in o) {                 if(!useHasOwn || o.hasOwnProperty(i)) {                     v = o[i];                     switch (typeof v) {                     case "undefined":                     case "function":                     case "unknown":                         break;                     default:                         if(b){                             a.push(',');                         }                         a.push(this.encode(i), ":",                                 v === null ? "null" : this.encode(v));                         b = true;                     }                 }             }             a.push("}");             return a.join("");         }     };          this.decode = function(json){         return eval("(" + json + ')');     }; })(); Ext.encode = Ext.util.JSON.encode; Ext.decode = Ext.util.JSON.decode;
  866. Ext.util.Format = function(){
  867.     var trimRe = /^s+|s+$/g;
  868.     return {
  869.         
  870.         ellipsis : function(value, len){
  871.             if(value && value.length > len){
  872.                 return value.substr(0, len-3)+"...";
  873.             }
  874.             return value;
  875.         },
  876.         
  877.         undef : function(value){
  878.             return value !== undefined ? value : "";
  879.         },
  880.         
  881.         defaultValue : function(value, defaultValue){
  882.             return value !== undefined && value !== '' ? value : defaultValue;
  883.         },
  884.         
  885.         htmlEncode : function(value){
  886.             return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
  887.         },
  888.         
  889.         htmlDecode : function(value){
  890.             return !value ? value : String(value).replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"').replace(/&amp;/g, "&");
  891.         },
  892.         
  893.         trim : function(value){
  894.             return String(value).replace(trimRe, "");
  895.         },
  896.         
  897.         substr : function(value, start, length){
  898.             return String(value).substr(start, length);
  899.         },
  900.         
  901.         lowercase : function(value){
  902.             return String(value).toLowerCase();
  903.         },
  904.         
  905.         uppercase : function(value){
  906.             return String(value).toUpperCase();
  907.         },
  908.         
  909.         capitalize : function(value){
  910.             return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
  911.         },
  912.                  call : function(value, fn){
  913.             if(arguments.length > 2){
  914.                 var args = Array.prototype.slice.call(arguments, 2);
  915.                 args.unshift(value);
  916.                 return eval(fn).apply(window, args);
  917.             }else{
  918.                 return eval(fn).call(window, value);
  919.             }
  920.         },
  921.         
  922.         usMoney : function(v){
  923.             v = (Math.round((v-0)*100))/100;
  924.             v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
  925.             v = String(v);
  926.             var ps = v.split('.');
  927.             var whole = ps[0];
  928.             var sub = ps[1] ? '.'+ ps[1] : '.00';
  929.             var r = /(d+)(d{3})/;
  930.             while (r.test(whole)) {
  931.                 whole = whole.replace(r, '$1' + ',' + '$2');
  932.             }
  933.             v = whole + sub;
  934.             if(v.charAt(0) == '-'){
  935.                 return '-$' + v.substr(1);
  936.             }
  937.             return "$" +  v;
  938.         },
  939.         
  940.         date : function(v, format){
  941.             if(!v){
  942.                 return "";
  943.             }
  944.             if(!Ext.isDate(v)){
  945.                 v = new Date(Date.parse(v));
  946.             }
  947.             return v.dateFormat(format || "m/d/Y");
  948.         },
  949.         
  950.         dateRenderer : function(format){
  951.             return function(v){
  952.                 return Ext.util.Format.date(v, format);
  953.             };
  954.         },
  955.                  stripTagsRE : /</?[^>]+>/gi,
  956.         
  957.         
  958.         stripTags : function(v){
  959.             return !v ? v : String(v).replace(this.stripTagsRE, "");
  960.         },
  961.         stripScriptsRe : /(?:<script.*?>)((n|r|.)*?)(?:</script>)/ig,
  962.         
  963.         stripScripts : function(v){
  964.             return !v ? v : String(v).replace(this.stripScriptsRe, "");
  965.         },
  966.         
  967.         fileSize : function(size){
  968.             if(size < 1024) {
  969.                 return size + " bytes";
  970.             } else if(size < 1048576) {
  971.                 return (Math.round(((size*10) / 1024))/10) + " KB";
  972.             } else {
  973.                 return (Math.round(((size*10) / 1048576))/10) + " MB";
  974.             }
  975.         },
  976.         math : function(){
  977.             var fns = {};
  978.             return function(v, a){
  979.                 if(!fns[a]){
  980.                     fns[a] = new Function('v', 'return v ' + a + ';');
  981.                 }
  982.                 return fns[a](v);
  983.             }
  984.         }(),
  985.         nl2br : function(v){
  986.             return v === undefined || v === null ? '' : v.replace(/n/g, '<br/>');
  987.         }
  988.     };
  989. }(); Ext.XTemplate = function(){     Ext.XTemplate.superclass.constructor.apply(this, arguments);     var s = this.html;     s = ['<tpl>', s, '</tpl>'].join('');     var re = /<tplb[^>]*>((?:(?=([^<]+))2|<(?!tplb[^>]*>))*?)</tpl>/;     var nameRe = /^<tplb[^>]*?for="(.*?)"/;     var ifRe = /^<tplb[^>]*?if="(.*?)"/;     var execRe = /^<tplb[^>]*?exec="(.*?)"/;     var m, id = 0;     var tpls = [];     while(m = s.match(re)){        var m2 = m[0].match(nameRe);        var m3 = m[0].match(ifRe);        var m4 = m[0].match(execRe);        var exp = null, fn = null, exec = null;        var name = m2 && m2[1] ? m2[1] : '';        if(m3){            exp = m3 && m3[1] ? m3[1] : null;            if(exp){                fn = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');            }        }        if(m4){            exp = m4 && m4[1] ? m4[1] : null;            if(exp){                exec = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }');            }        }        if(name){            switch(name){                case '.': name = new Function('values', 'parent', 'with(values){ return values; }'); break;                case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;                default: name = new Function('values', 'parent', 'with(values){ return '+name+'; }');            }        }        tpls.push({             id: id,             target: name,             exec: exec,             test: fn,             body: m[1]||''         });        s = s.replace(m[0], '{xtpl'+ id + '}');        ++id;     }     for(var i = tpls.length-1; i >= 0; --i){         this.compileTpl(tpls[i]);     }     this.master = tpls[tpls.length-1];     this.tpls = tpls; }; Ext.extend(Ext.XTemplate, Ext.Template, {         re : /{([w-.#]+)(?::([w.]*)(?:((.*?)?))?)?(s?[+-*\]s?[d.+-*\()]+)?}/g,         codeRe : /{[((?:\]|.|n)*?)]}/g,         applySubTemplate : function(id, values, parent, xindex, xcount){         var t = this.tpls[id];         if(t.test && !t.test.call(this, values, parent, xindex, xcount)){             return '';         }         if(t.exec && t.exec.call(this, values, parent, xindex, xcount)){             return '';         }         var vs = t.target ? t.target.call(this, values, parent) : values;         parent = t.target ? values : parent;         if(t.target && Ext.isArray(vs)){             var buf = [];             for(var i = 0, len = vs.length; i < len; i++){                 buf[buf.length] = t.compiled.call(this, vs[i], parent, i+1, len);             }             return buf.join('');         }         return t.compiled.call(this, vs, parent, xindex, xcount);     },         compileTpl : function(tpl){         var fm = Ext.util.Format;         var useF = this.disableFormats !== true;         var sep = Ext.isGecko ? "+" : ",";         var fn = function(m, name, format, args, math){             if(name.substr(0, 4) == 'xtpl'){                 return "'"+ sep +'this.applySubTemplate('+name.substr(4)+', values, parent, xindex, xcount)'+sep+"'";             }             var v;             if(name === '.'){                 v = 'values';             }else if(name === '#'){                 v = 'xindex';             }else if(name.indexOf('.') != -1){                 v = name;             }else{                 v = "values['" + name + "']";             }             if(math){                 v = '(' + v + math + ')';             }             if(format && useF){                 args = args ? ',' + args : "";                 if(format.substr(0, 5) != "this."){                     format = "fm." + format + '(';                 }else{                     format = 'this.call("'+ format.substr(5) + '", ';                     args = ", values";                 }             }else{                 args= ''; format = "("+v+" === undefined ? '' : ";             }             return "'"+ sep + format + v + args + ")"+sep+"'";         };         var codeFn = function(m, code){             return "'"+ sep +'('+code+')'+sep+"'";         };         var body;                 if(Ext.isGecko){             body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" +                    tpl.body.replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn).replace(this.codeRe, codeFn) +                     "';};";         }else{             body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];             body.push(tpl.body.replace(/(rn|n)/g, '\n').replace(/'/g, "\'").replace(this.re, fn).replace(this.codeRe, codeFn));             body.push("'].join('');};");             body = body.join('');         }         eval(body);         return this;     },          applyTemplate : function(values){         return this.master.compiled.call(this, values, {}, 1, 1);     },          compile : function(){return this;}                }); Ext.XTemplate.prototype.apply = Ext.XTemplate.prototype.applyTemplate; Ext.XTemplate.from = function(el){     el = Ext.getDom(el);     return new Ext.XTemplate(el.value || el.innerHTML); };
  990. Ext.util.CSS = function(){
  991. var rules = null;
  992.     var doc = document;
  993.     var camelRe = /(-[a-z])/gi;
  994.     var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
  995.    return {
  996.    
  997.    createStyleSheet : function(cssText, id){
  998.        var ss;
  999.        var head = doc.getElementsByTagName("head")[0];
  1000.        var rules = doc.createElement("style");
  1001.        rules.setAttribute("type", "text/css");
  1002.        if(id){
  1003.            rules.setAttribute("id", id);
  1004.        }
  1005.        if(Ext.isIE){
  1006.            head.appendChild(rules);
  1007.            ss = rules.styleSheet;
  1008.            ss.cssText = cssText;
  1009.        }else{
  1010.            try{
  1011.                 rules.appendChild(doc.createTextNode(cssText));
  1012.            }catch(e){
  1013.                rules.cssText = cssText;
  1014.            }
  1015.            head.appendChild(rules);
  1016.            ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
  1017.        }
  1018.        this.cacheStyleSheet(ss);
  1019.        return ss;
  1020.    },
  1021.    
  1022.    removeStyleSheet : function(id){
  1023.        var existing = doc.getElementById(id);
  1024.        if(existing){
  1025.            existing.parentNode.removeChild(existing);
  1026.        }
  1027.    },
  1028.    
  1029.    swapStyleSheet : function(id, url){
  1030.        this.removeStyleSheet(id);
  1031.        var ss = doc.createElement("link");
  1032.        ss.setAttribute("rel", "stylesheet");
  1033.        ss.setAttribute("type", "text/css");
  1034.        ss.setAttribute("id", id);
  1035.        ss.setAttribute("href", url);
  1036.        doc.getElementsByTagName("head")[0].appendChild(ss);
  1037.    },
  1038.    
  1039.    
  1040.    refreshCache : function(){
  1041.        return this.getRules(true);
  1042.    },
  1043.        cacheStyleSheet : function(ss){
  1044.        if(!rules){
  1045.            rules = {};
  1046.        }
  1047.        try{            var ssRules = ss.cssRules || ss.rules;
  1048.            for(var j = ssRules.length-1; j >= 0; --j){
  1049.                rules[ssRules[j].selectorText] = ssRules[j];
  1050.            }
  1051.        }catch(e){}
  1052.    },
  1053.    
  1054.    
  1055.    getRules : function(refreshCache){
  1056.     if(rules == null || refreshCache){
  1057.     rules = {};
  1058.     var ds = doc.styleSheets;
  1059.     for(var i =0, len = ds.length; i < len; i++){
  1060.         try{
  1061.              this.cacheStyleSheet(ds[i]);
  1062.          }catch(e){} 
  1063.         }
  1064.     }
  1065.     return rules;
  1066.     },
  1067.    
  1068.    
  1069.    getRule : function(selector, refreshCache){
  1070.     var rs = this.getRules(refreshCache);
  1071.     if(!Ext.isArray(selector)){
  1072.         return rs[selector];
  1073.     }
  1074.     for(var i = 0; i < selector.length; i++){
  1075. if(rs[selector[i]]){
  1076. return rs[selector[i]];
  1077. }
  1078. }
  1079. return null;
  1080.     },
  1081.    
  1082.    
  1083.    
  1084.    updateRule : function(selector, property, value){
  1085.     if(!Ext.isArray(selector)){
  1086.     var rule = this.getRule(selector);
  1087.     if(rule){
  1088.     rule.style[property.replace(camelRe, camelFn)] = value;
  1089.     return true;
  1090.     }
  1091.     }else{
  1092.     for(var i = 0; i < selector.length; i++){
  1093.     if(this.updateRule(selector[i], property, value)){
  1094.     return true;
  1095.     }
  1096.     }
  1097.     }
  1098.     return false;
  1099.     }
  1100.    };
  1101. }(); Ext.util.ClickRepeater = function(el, config) {     this.el = Ext.get(el);     this.el.unselectable();     Ext.apply(this, config);     this.addEvents(              "mousedown",              "click",              "mouseup"     );     this.el.on("mousedown", this.handleMouseDown, this);     if(this.preventDefault || this.stopDefault){         this.el.on("click", function(e){             if(this.preventDefault){                 e.preventDefault();             }             if(this.stopDefault){                 e.stopEvent();             }         }, this);     }         if(this.handler){         this.on("click", this.handler,  this.scope || this);     }     Ext.util.ClickRepeater.superclass.constructor.call(this); }; Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {     interval : 20,     delay: 250,     preventDefault : true,     stopDefault : false,     timer : 0,         handleMouseDown : function(){         clearTimeout(this.timer);         this.el.blur();         if(this.pressClass){             this.el.addClass(this.pressClass);         }         this.mousedownTime = new Date();         Ext.getDoc().on("mouseup", this.handleMouseUp, this);         this.el.on("mouseout", this.handleMouseOut, this);         this.fireEvent("mousedown", this);         this.fireEvent("click", this);         if (this.accelerate) {             this.delay = 400;     }         this.timer = this.click.defer(this.delay || this.interval, this);     },         click : function(){         this.fireEvent("click", this);         this.timer = this.click.defer(this.accelerate ?             this.easeOutExpo(this.mousedownTime.getElapsed(),                 400,                 -390,                 12000) :             this.interval, this);     },     easeOutExpo : function (t, b, c, d) {         return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;     },         handleMouseOut : function(){         clearTimeout(this.timer);         if(this.pressClass){             this.el.removeClass(this.pressClass);         }         this.el.on("mouseover", this.handleMouseReturn, this);     },         handleMouseReturn : function(){         this.el.un("mouseover", this.handleMouseReturn, this);         if(this.pressClass){             this.el.addClass(this.pressClass);         }         this.click();     },         handleMouseUp : function(){         clearTimeout(this.timer);         this.el.un("mouseover", this.handleMouseReturn, this);         this.el.un("mouseout", this.handleMouseOut, this);         Ext.getDoc().un("mouseup", this.handleMouseUp, this);         this.el.removeClass(this.pressClass);         this.fireEvent("mouseup", this);     } }); Ext.KeyNav = function(el, config){     this.el = Ext.get(el);     Ext.apply(this, config);     if(!this.disabled){         this.disabled = true;         this.enable();     } }; Ext.KeyNav.prototype = {          disabled : false,          defaultEventAction: "stopEvent",          forceKeyDown : false,         prepareEvent : function(e){         var k = e.getKey();         var h = this.keyToHandler[k];                                 if(Ext.isSafari2 && h && k >= 37 && k <= 40){             e.stopEvent();         }     },         relay : function(e){         var k = e.getKey();         var h = this.keyToHandler[k];         if(h && this[h]){             if(this.doRelay(e, this[h], h) !== true){                 e[this.defaultEventAction]();             }         }     },         doRelay : function(e, h, hname){         return h.call(this.scope || this, e);     },         enter : false,     left : false,     right : false,     up : false,     down : false,     tab : false,     esc : false,     pageUp : false,     pageDown : false,     del : false,     home : false,     end : false,         keyToHandler : {         37 : "left",         39 : "right",         38 : "up",         40 : "down",         33 : "pageUp",         34 : "pageDown",         46 : "del",         36 : "home",         35 : "end",         13 : "enter",         27 : "esc",         9  : "tab"     }, enable: function(){ if(this.disabled){             if(this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir){                 this.el.on("keydown", this.relay,  this);             }else{                 this.el.on("keydown", this.prepareEvent,  this);                 this.el.on("keypress", this.relay,  this);             }     this.disabled = false; } }, disable: function(){ if(!this.disabled){     if(this.forceKeyDown || Ext.isIE || Ext.isSafari3 || Ext.isAir){                 this.el.un("keydown", this.relay);             }else{                 this.el.un("keydown", this.prepareEvent);                 this.el.un("keypress", this.relay);             }     this.disabled = true; } } };
  1102. Ext.KeyMap = function(el, config, eventName){
  1103.     this.el  = Ext.get(el);
  1104.     this.eventName = eventName || "keydown";
  1105.     this.bindings = [];
  1106.     if(config){
  1107.         this.addBinding(config);
  1108.     }
  1109.     this.enable();
  1110. };
  1111. Ext.KeyMap.prototype = {
  1112.     
  1113.     stopEvent : false,
  1114.     
  1115. addBinding : function(config){
  1116.         if(Ext.isArray(config)){
  1117.             for(var i = 0, len = config.length; i < len; i++){
  1118.                 this.addBinding(config[i]);
  1119.             }
  1120.             return;
  1121.         }
  1122.         var keyCode = config.key,
  1123.             shift = config.shift,
  1124.             ctrl = config.ctrl,
  1125.             alt = config.alt,
  1126.             fn = config.fn || config.handler,
  1127.             scope = config.scope;
  1128. if (config.stopEvent) {
  1129.     this.stopEvent = config.stopEvent;    
  1130. }
  1131.         if(typeof keyCode == "string"){
  1132.             var ks = [];
  1133.             var keyString = keyCode.toUpperCase();
  1134.             for(var j = 0, len = keyString.length; j < len; j++){
  1135.                 ks.push(keyString.charCodeAt(j));
  1136.             }
  1137.             keyCode = ks;
  1138.         }
  1139.         var keyArray = Ext.isArray(keyCode);
  1140.         
  1141.         var handler = function(e){
  1142.             if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){
  1143.                 var k = e.getKey();
  1144.                 if(keyArray){
  1145.                     for(var i = 0, len = keyCode.length; i < len; i++){
  1146.                         if(keyCode[i] == k){
  1147.                           if(this.stopEvent){
  1148.                               e.stopEvent();
  1149.                           }
  1150.                           fn.call(scope || window, k, e);
  1151.                           return;
  1152.                         }
  1153.                     }
  1154.                 }else{
  1155.                     if(k == keyCode){
  1156.                         if(this.stopEvent){
  1157.                            e.stopEvent();
  1158.                         }
  1159.                         fn.call(scope || window, k, e);
  1160.                     }
  1161.                 }
  1162.             }
  1163.         };
  1164.         this.bindings.push(handler);
  1165. },
  1166.     
  1167.     on : function(key, fn, scope){
  1168.         var keyCode, shift, ctrl, alt;
  1169.         if(typeof key == "object" && !Ext.isArray(key)){
  1170.             keyCode = key.key;
  1171.             shift = key.shift;
  1172.             ctrl = key.ctrl;
  1173.             alt = key.alt;
  1174.         }else{
  1175.             keyCode = key;
  1176.         }
  1177.         this.addBinding({
  1178.             key: keyCode,
  1179.             shift: shift,
  1180.             ctrl: ctrl,
  1181.             alt: alt,
  1182.             fn: fn,
  1183.             scope: scope
  1184.         })
  1185.     },
  1186.          handleKeyDown : function(e){
  1187.     if(this.enabled){           var b = this.bindings;
  1188.          for(var i = 0, len = b.length; i < len; i++){
  1189.              b[i].call(this, e);
  1190.          }
  1191.     }
  1192. },
  1193. isEnabled : function(){
  1194.     return this.enabled;
  1195. },
  1196. enable: function(){
  1197. if(!this.enabled){
  1198.     this.el.on(this.eventName, this.handleKeyDown, this);
  1199.     this.enabled = true;
  1200. }
  1201. },
  1202. disable: function(){
  1203. if(this.enabled){
  1204.     this.el.removeListener(this.eventName, this.handleKeyDown, this);
  1205.     this.enabled = false;
  1206. }
  1207. }
  1208. }; Ext.util.TextMetrics = function(){     var shared;     return {                  measure : function(el, text, fixedWidth){             if(!shared){                 shared = Ext.util.TextMetrics.Instance(el, fixedWidth);             }             shared.bind(el);             shared.setFixedWidth(fixedWidth || 'auto');             return shared.getSize(text);         },                  createInstance : function(el, fixedWidth){             return Ext.util.TextMetrics.Instance(el, fixedWidth);         }     }; }(); Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){     var ml = new Ext.Element(document.createElement('div'));     document.body.appendChild(ml.dom);     ml.position('absolute');     ml.setLeftTop(-1000, -1000);     ml.hide();     if(fixedWidth){         ml.setWidth(fixedWidth);     }     var instance = {                  getSize : function(text){             ml.update(text);             var s = ml.getSize();             ml.update('');             return s;         },                  bind : function(el){             ml.setStyle(                 Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height', 'text-transform', 'letter-spacing')             );         },                  setFixedWidth : function(width){             ml.setWidth(width);         },                  getWidth : function(text){             ml.dom.style.width = 'auto';             return this.getSize(text).width;         },                  getHeight : function(text){             return this.getSize(text).height;         }     };     instance.bind(bindTo);     return instance; }; Ext.Element.measureText = Ext.util.TextMetrics.measure;
  1209. (function() {
  1210. var Event=Ext.EventManager;
  1211. var Dom=Ext.lib.Dom;
  1212. Ext.dd.DragDrop = function(id, sGroup, config) {
  1213.     if(id) {
  1214.         this.init(id, sGroup, config);
  1215.     }
  1216. };
  1217. Ext.dd.DragDrop.prototype = {
  1218.     
  1219.     id: null,
  1220.     
  1221.     config: null,
  1222.     
  1223.     dragElId: null,
  1224.     
  1225.     handleElId: null,
  1226.     
  1227.     invalidHandleTypes: null,
  1228.     
  1229.     invalidHandleIds: null,
  1230.     
  1231.     invalidHandleClasses: null,
  1232.     
  1233.     startPageX: 0,
  1234.     
  1235.     startPageY: 0,
  1236.     
  1237.     groups: null,
  1238.     
  1239.     locked: false,
  1240.     
  1241.     lock: function() { this.locked = true; },
  1242.     
  1243.     unlock: function() { this.locked = false; },
  1244.     
  1245.     isTarget: true,
  1246.     
  1247.     padding: null,
  1248.     
  1249.     _domRef: null,
  1250.     
  1251.     __ygDragDrop: true,
  1252.     
  1253.     constrainX: false,
  1254.     
  1255.     constrainY: false,
  1256.     
  1257.     minX: 0,
  1258.     
  1259.     maxX: 0,
  1260.     
  1261.     minY: 0,
  1262.     
  1263.     maxY: 0,
  1264.     
  1265.     maintainOffset: false,
  1266.     
  1267.     xTicks: null,
  1268.     
  1269.     yTicks: null,
  1270.     
  1271.     primaryButtonOnly: true,
  1272.     
  1273.     available: false,
  1274.     
  1275.     hasOuterHandles: false,
  1276.     
  1277.     b4StartDrag: function(x, y) { },
  1278.     
  1279.     startDrag: function(x, y) {  },
  1280.     
  1281.     b4Drag: function(e) { },
  1282.     
  1283.     onDrag: function(e) {  },
  1284.     
  1285.     onDragEnter: function(e, id) {  },
  1286.     
  1287.     b4DragOver: function(e) { },
  1288.     
  1289.     onDragOver: function(e, id) {  },
  1290.     
  1291.     b4DragOut: function(e) { },
  1292.     
  1293.     onDragOut: function(e, id) {  },
  1294.     
  1295.     b4DragDrop: function(e) { },
  1296.     
  1297.     onDragDrop: function(e, id) {  },
  1298.     
  1299.     onInvalidDrop: function(e) {  },
  1300.     
  1301.     b4EndDrag: function(e) { },
  1302.     
  1303.     endDrag: function(e) {  },
  1304.     
  1305.     b4MouseDown: function(e) {  },
  1306.     
  1307.     onMouseDown: function(e) {  },
  1308.     
  1309.     onMouseUp: function(e) {  },
  1310.     
  1311.     onAvailable: function () {
  1312.     },
  1313.     
  1314.     defaultPadding : {left:0, right:0, top:0, bottom:0},
  1315.     
  1316.     constrainTo : function(constrainTo, pad, inContent){
  1317.         if(typeof pad == "number"){
  1318.             pad = {left: pad, right:pad, top:pad, bottom:pad};
  1319.         }
  1320.         pad = pad || this.defaultPadding;
  1321.         var b = Ext.get(this.getEl()).getBox();
  1322.         var ce = Ext.get(constrainTo);
  1323.         var s = ce.getScroll();
  1324.         var c, cd = ce.dom;
  1325.         if(cd == document.body){
  1326.             c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
  1327.         }else{
  1328.             var xy = ce.getXY();
  1329.             c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight};
  1330.         }
  1331.         var topSpace = b.y - c.y;
  1332.         var leftSpace = b.x - c.x;
  1333.         this.resetConstraints();
  1334.         this.setXConstraint(leftSpace - (pad.left||0),                  c.width - leftSpace - b.width - (pad.right||0),  this.xTickSize
  1335.         );
  1336.         this.setYConstraint(topSpace - (pad.top||0),                  c.height - topSpace - b.height - (pad.bottom||0),  this.yTickSize
  1337.         );
  1338.     },
  1339.     
  1340.     getEl: function() {
  1341.         if (!this._domRef) {
  1342.             this._domRef = Ext.getDom(this.id);
  1343.         }
  1344.         return this._domRef;
  1345.     },
  1346.     
  1347.     getDragEl: function() {
  1348.         return Ext.getDom(this.dragElId);
  1349.     },
  1350.     
  1351.     init: function(id, sGroup, config) {
  1352.         this.initTarget(id, sGroup, config);
  1353.         Event.on(this.id, "mousedown", this.handleMouseDown, this);
  1354.              },
  1355.     
  1356.     initTarget: function(id, sGroup, config) {
  1357.                  this.config = config || {};
  1358.                  this.DDM = Ext.dd.DDM;
  1359.                  this.groups = {};
  1360.                           if (typeof id !== "string") {
  1361.             id = Ext.id(id);
  1362.         }
  1363.                  this.id = id;
  1364.                  this.addToGroup((sGroup) ? sGroup : "default");
  1365.                           this.handleElId = id;
  1366.                  this.setDragElId(id);
  1367.                  this.invalidHandleTypes = { A: "A" };
  1368.         this.invalidHandleIds = {};
  1369.         this.invalidHandleClasses = [];
  1370.         this.applyConfig();
  1371.         this.handleOnAvailable();
  1372.     },
  1373.     
  1374.     applyConfig: function() {
  1375.                           this.padding           = this.config.padding || [0, 0, 0, 0];
  1376.         this.isTarget          = (this.config.isTarget !== false);
  1377.         this.maintainOffset    = (this.config.maintainOffset);
  1378.         this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
  1379.     },
  1380.     
  1381.     handleOnAvailable: function() {
  1382.         this.available = true;
  1383.         this.resetConstraints();
  1384.         this.onAvailable();
  1385.     },
  1386.      
  1387.     setPadding: function(iTop, iRight, iBot, iLeft) {
  1388.                  if (!iRight && 0 !== iRight) {
  1389.             this.padding = [iTop, iTop, iTop, iTop];
  1390.         } else if (!iBot && 0 !== iBot) {
  1391.             this.padding = [iTop, iRight, iTop, iRight];
  1392.         } else {
  1393.             this.padding = [iTop, iRight, iBot, iLeft];
  1394.         }
  1395.     },
  1396.     
  1397.     setInitPosition: function(diffX, diffY) {
  1398.         var el = this.getEl();
  1399.         if (!this.DDM.verifyEl(el)) {
  1400.             return;
  1401.         }
  1402.         var dx = diffX || 0;
  1403.         var dy = diffY || 0;
  1404.         var p = Dom.getXY( el );
  1405.         this.initPageX = p[0] - dx;
  1406.         this.initPageY = p[1] - dy;
  1407.         this.lastPageX = p[0];
  1408.         this.lastPageY = p[1];
  1409.         this.setStartPosition(p);
  1410.     },
  1411.     
  1412.     setStartPosition: function(pos) {
  1413.         var p = pos || Dom.getXY( this.getEl() );
  1414.         this.deltaSetXY = null;
  1415.         this.startPageX = p[0];
  1416.         this.startPageY = p[1];
  1417.     },
  1418.     
  1419.     addToGroup: function(sGroup) {
  1420.         this.groups[sGroup] = true;
  1421.         this.DDM.regDragDrop(this, sGroup);
  1422.     },
  1423.     
  1424.     removeFromGroup: function(sGroup) {
  1425.         if (this.groups[sGroup]) {
  1426.             delete this.groups[sGroup];
  1427.         }
  1428.         this.DDM.removeDDFromGroup(this, sGroup);
  1429.     },
  1430.     
  1431.     setDragElId: function(id) {
  1432.         this.dragElId = id;
  1433.     },
  1434.     
  1435.     setHandleElId: function(id) {
  1436.         if (typeof id !== "string") {
  1437.             id = Ext.id(id);
  1438.         }
  1439.         this.handleElId = id;
  1440.         this.DDM.regHandle(this.id, id);
  1441.     },
  1442.     
  1443.     setOuterHandleElId: function(id) {
  1444.         if (typeof id !== "string") {
  1445.             id = Ext.id(id);
  1446.         }
  1447.         Event.on(id, "mousedown",
  1448.                 this.handleMouseDown, this);
  1449.         this.setHandleElId(id);
  1450.         this.hasOuterHandles = true;
  1451.     },
  1452.     
  1453.     unreg: function() {
  1454.         Event.un(this.id, "mousedown",
  1455.                 this.handleMouseDown);
  1456.         this._domRef = null;
  1457.         this.DDM._remove(this);
  1458.     },
  1459.     destroy : function(){
  1460.         this.unreg();
  1461.     },
  1462.     
  1463.     isLocked: function() {
  1464.         return (this.DDM.isLocked() || this.locked);
  1465.     },
  1466.     
  1467.     handleMouseDown: function(e, oDD){
  1468.         if (this.primaryButtonOnly && e.button != 0) {
  1469.             return;
  1470.         }
  1471.         if (this.isLocked()) {
  1472.             return;
  1473.         }