Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / air / samples / tasks / ext-2.0 / ext-all.js
diff --git a/air/samples/tasks/ext-2.0/ext-all.js b/air/samples/tasks/ext-2.0/ext-all.js
deleted file mode 100644 (file)
index 8cbb3ff..0000000
+++ /dev/null
@@ -1,33803 +0,0 @@
-/*\r
- * Ext JS Library 0.30\r
- * Copyright(c) 2006-2009, Ext JS, LLC.\r
- * licensing@extjs.com\r
- * \r
- * http://extjs.com/license\r
- */\r
-\r
-/*\r
- * Ext JS Library 2.0.2\r
- * Copyright(c) 2006-2008, Ext JS, LLC.\r
- * licensing@extjs.com\r
- * \r
- * http://extjs.com/license\r
- */\r
-\r
-\r
-Ext.DomHelper = function(){\r
-    var tempTableEl = null;\r
-    var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;\r
-    var tableRe = /^table|tbody|tr|td$/i;\r
-    \r
-    
-    var createHtml = function(o){\r
-        if(typeof o == 'string'){\r
-            return o;\r
-        }\r
-        var b = "";\r
-        if (Ext.isArray(o)) {\r
-            for (var i = 0, l = o.length; i < l; i++) {\r
-                b += createHtml(o[i]);\r
-            }\r
-            return b;\r
-        }\r
-        if(!o.tag){\r
-            o.tag = "div";\r
-        }\r
-        b += "<" + o.tag;\r
-        for(var attr in o){\r
-            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;\r
-            if(attr == "style"){\r
-                var s = o["style"];\r
-                if(typeof s == "function"){\r
-                    s = s.call();\r
-                }\r
-                if(typeof s == "string"){\r
-                    b += ' style="' + s + '"';\r
-                }else if(typeof s == "object"){\r
-                    b += ' style="';\r
-                    for(var key in s){\r
-                        if(typeof s[key] != "function"){\r
-                            b += key + ":" + s[key] + ";";\r
-                        }\r
-                    }\r
-                    b += '"';\r
-                }\r
-            }else{\r
-                if(attr == "cls"){\r
-                    b += ' class="' + o["cls"] + '"';\r
-                }else if(attr == "htmlFor"){\r
-                    b += ' for="' + o["htmlFor"] + '"';\r
-                }else{\r
-                    b += " " + attr + '="' + o[attr] + '"';\r
-                }\r
-            }\r
-        }\r
-        if(emptyTags.test(o.tag)){\r
-            b += "/>";\r
-        }else{\r
-            b += ">";\r
-            var cn = o.children || o.cn;\r
-            if(cn){\r
-                b += createHtml(cn);\r
-            } else if(o.html){\r
-                b += o.html;\r
-            }\r
-            b += "</" + o.tag + ">";\r
-        }\r
-        return b;\r
-    };\r
-\r
-    
-    \r
-    var createDom = function(o, parentNode){\r
-        var el;\r
-        if (Ext.isArray(o)) {                       
-            el = document.createDocumentFragment(); 
-            for(var i = 0, l = o.length; i < l; i++) {\r
-                createDom(o[i], el);\r
-            }\r
-        } else if (typeof o == "string)") {         
-            el = document.createTextNode(o);\r
-        } else {\r
-            el = document.createElement(o.tag||'div');\r
-            var useSet = !!el.setAttribute; 
-            for(var attr in o){\r
-                if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;\r
-                if(attr=="cls"){\r
-                    el.className = o["cls"];\r
-                }else{\r
-                    if(useSet) el.setAttribute(attr, o[attr]);\r
-                    else el[attr] = o[attr];\r
-                }\r
-            }\r
-            Ext.DomHelper.applyStyles(el, o.style);\r
-            var cn = o.children || o.cn;\r
-            if(cn){\r
-                createDom(cn, el);\r
-            } else if(o.html){\r
-                el.innerHTML = o.html;\r
-            }\r
-        }\r
-        if(parentNode){\r
-           parentNode.appendChild(el);\r
-        }\r
-        return el;\r
-    };\r
-\r
-    var ieTable = function(depth, s, h, e){\r
-        tempTableEl.innerHTML = [s, h, e].join('');\r
-        var i = -1, el = tempTableEl;\r
-        while(++i < depth){\r
-            el = el.firstChild;\r
-        }\r
-        return el;\r
-    };\r
-\r
-    
-    var ts = '<table>',\r
-        te = '</table>',\r
-        tbs = ts+'<tbody>',\r
-        tbe = '</tbody>'+te,\r
-        trs = tbs + '<tr>',\r
-        tre = '</tr>'+tbe;\r
-\r
-    \r
-    var insertIntoTable = function(tag, where, el, html){\r
-        if(!tempTableEl){\r
-            tempTableEl = document.createElement('div');\r
-        }\r
-        var node;\r
-        var before = null;\r
-        if(tag == 'td'){\r
-            if(where == 'afterbegin' || where == 'beforeend'){ 
-                return;\r
-            }\r
-            if(where == 'beforebegin'){\r
-                before = el;\r
-                el = el.parentNode;\r
-            } else{\r
-                before = el.nextSibling;\r
-                el = el.parentNode;\r
-            }\r
-            node = ieTable(4, trs, html, tre);\r
-        }\r
-        else if(tag == 'tr'){\r
-            if(where == 'beforebegin'){\r
-                before = el;\r
-                el = el.parentNode;\r
-                node = ieTable(3, tbs, html, tbe);\r
-            } else if(where == 'afterend'){\r
-                before = el.nextSibling;\r
-                el = el.parentNode;\r
-                node = ieTable(3, tbs, html, tbe);\r
-            } else{ 
-                if(where == 'afterbegin'){\r
-                    before = el.firstChild;\r
-                }\r
-                node = ieTable(4, trs, html, tre);\r
-            }\r
-        } else if(tag == 'tbody'){\r
-            if(where == 'beforebegin'){\r
-                before = el;\r
-                el = el.parentNode;\r
-                node = ieTable(2, ts, html, te);\r
-            } else if(where == 'afterend'){\r
-                before = el.nextSibling;\r
-                el = el.parentNode;\r
-                node = ieTable(2, ts, html, te);\r
-            } else{\r
-                if(where == 'afterbegin'){\r
-                    before = el.firstChild;\r
-                }\r
-                node = ieTable(3, tbs, html, tbe);\r
-            }\r
-        } else{ 
-            if(where == 'beforebegin' || where == 'afterend'){ 
-                return;\r
-            }\r
-            if(where == 'afterbegin'){\r
-                before = el.firstChild;\r
-            }\r
-            node = ieTable(2, ts, html, te);\r
-        }\r
-        el.insertBefore(node, before);\r
-        return node;\r
-    };\r
-\r
-\r
-    return {\r
-    \r
-    useDom : false,\r
-\r
-    \r
-    markup : function(o){\r
-        return createHtml(o);\r
-    },\r
-\r
-    \r
-    applyStyles : function(el, styles){\r
-        if(styles){\r
-           el = Ext.fly(el);\r
-           if(typeof styles == "string"){\r
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;\r
-               var matches;\r
-               while ((matches = re.exec(styles)) != null){\r
-                   el.setStyle(matches[1], matches[2]);\r
-               }\r
-           }else if (typeof styles == "object"){\r
-               for (var style in styles){\r
-                  el.setStyle(style, styles[style]);\r
-               }\r
-           }else if (typeof styles == "function"){\r
-                Ext.DomHelper.applyStyles(el, styles.call());\r
-           }\r
-        }\r
-    },\r
-\r
-    \r
-    insertHtml : function(where, el, html){\r
-        where = where.toLowerCase();\r
-        if(el.insertAdjacentHTML){\r
-            if(tableRe.test(el.tagName)){\r
-                var rs;\r
-                if(rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html)){\r
-                    return rs;\r
-                }\r
-            }\r
-            switch(where){\r
-                case "beforebegin":\r
-                    el.insertAdjacentHTML('BeforeBegin', html);\r
-                    return el.previousSibling;\r
-                case "afterbegin":\r
-                    el.insertAdjacentHTML('AfterBegin', html);\r
-                    return el.firstChild;\r
-                case "beforeend":\r
-                    el.insertAdjacentHTML('BeforeEnd', html);\r
-                    return el.lastChild;\r
-                case "afterend":\r
-                    el.insertAdjacentHTML('AfterEnd', html);\r
-                    return el.nextSibling;\r
-            }\r
-            throw 'Illegal insertion point -> "' + where + '"';\r
-        }\r
-        var range = el.ownerDocument.createRange();\r
-        var frag;\r
-        switch(where){\r
-             case "beforebegin":\r
-                range.setStartBefore(el);\r
-                frag = range.createContextualFragment(html);\r
-                el.parentNode.insertBefore(frag, el);\r
-                return el.previousSibling;\r
-             case "afterbegin":\r
-                if(el.firstChild){\r
-                    range.setStartBefore(el.firstChild);\r
-                    frag = range.createContextualFragment(html);\r
-                    el.insertBefore(frag, el.firstChild);\r
-                    return el.firstChild;\r
-                }else{\r
-                    el.innerHTML = html;\r
-                    return el.firstChild;\r
-                }\r
-            case "beforeend":\r
-                if(el.lastChild){\r
-                    range.setStartAfter(el.lastChild);\r
-                    frag = range.createContextualFragment(html);\r
-                    el.appendChild(frag);\r
-                    return el.lastChild;\r
-                }else{\r
-                    el.innerHTML = html;\r
-                    return el.lastChild;\r
-                }\r
-            case "afterend":\r
-                range.setStartAfter(el);\r
-                frag = range.createContextualFragment(html);\r
-                el.parentNode.insertBefore(frag, el.nextSibling);\r
-                return el.nextSibling;\r
-            }\r
-            throw 'Illegal insertion point -> "' + where + '"';\r
-    },\r
-\r
-    \r
-    insertBefore : function(el, o, returnElement){\r
-        return this.doInsert(el, o, returnElement, "beforeBegin");\r
-    },\r
-\r
-    \r
-    insertAfter : function(el, o, returnElement){\r
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");\r
-    },\r
-\r
-    \r
-    insertFirst : function(el, o, returnElement){\r
-        return this.doInsert(el, o, returnElement, "afterBegin", "firstChild");\r
-    },\r
-\r
-    
-    doInsert : function(el, o, returnElement, pos, sibling){\r
-        el = Ext.getDom(el);\r
-        var newNode;\r
-        if(this.useDom){\r
-            newNode = createDom(o, null);\r
-            (sibling === "firstChild" ? el : el.parentNode).insertBefore(newNode, sibling ? el[sibling] : el);\r
-        }else{\r
-            var html = createHtml(o);\r
-            newNode = this.insertHtml(pos, el, html);\r
-        }\r
-        return returnElement ? Ext.get(newNode, true) : newNode;\r
-    },\r
-\r
-    \r
-    append : function(el, o, returnElement){\r
-        el = Ext.getDom(el);\r
-        var newNode;\r
-        if(this.useDom){\r
-            newNode = createDom(o, null);\r
-            el.appendChild(newNode);\r
-        }else{\r
-            var html = createHtml(o);\r
-            newNode = this.insertHtml("beforeEnd", el, html);\r
-        }\r
-        return returnElement ? Ext.get(newNode, true) : newNode;\r
-    },\r
-\r
-    \r
-    overwrite : function(el, o, returnElement){\r
-        el = Ext.getDom(el);\r
-        el.innerHTML = createHtml(o);\r
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;\r
-    },\r
-\r
-    \r
-    createTemplate : function(o){\r
-        var html = createHtml(o);\r
-        return new Ext.Template(html);\r
-    }\r
-    };\r
-}();\r
-
-\r
-Ext.Template = function(html){\r
-    var a = arguments;\r
-    if(Ext.isArray(html)){\r
-        html = html.join("");\r
-    }else if(a.length > 1){\r
-        var buf = [];\r
-        for(var i = 0, len = a.length; i < len; i++){\r
-            if(typeof a[i] == 'object'){\r
-                Ext.apply(this, a[i]);\r
-            }else{\r
-                buf[buf.length] = a[i];\r
-            }\r
-        }\r
-        html = buf.join('');\r
-    }\r
-    \r
-    this.html = html;\r
-    if(this.compiled){\r
-        this.compile();   \r
-    }\r
-};\r
-Ext.Template.prototype = {\r
-    \r
-    applyTemplate : function(values){\r
-        if(this.compiled){\r
-            return this.compiled(values);\r
-        }\r
-        var useF = this.disableFormats !== true;\r
-        var fm = Ext.util.Format, tpl = this;\r
-        var fn = function(m, name, format, args){\r
-            if(format && useF){\r
-                if(format.substr(0, 5) == "this."){\r
-                    return tpl.call(format.substr(5), values[name], values);\r
-                }else{\r
-                    if(args){\r
-                        
-                        
-                        
-                        var re = /^\s*['"](.*)["']\s*$/;\r
-                        args = args.split(',');\r
-                        for(var i = 0, len = args.length; i < len; i++){\r
-                            args[i] = args[i].replace(re, "$1");\r
-                        }\r
-                        args = [values[name]].concat(args);\r
-                    }else{\r
-                        args = [values[name]];\r
-                    }\r
-                    return fm[format].apply(fm, args);\r
-                }\r
-            }else{\r
-                return values[name] !== undefined ? values[name] : "";\r
-            }\r
-        };\r
-        return this.html.replace(this.re, fn);\r
-    },\r
-    \r
-    \r
-    set : function(html, compile){\r
-        this.html = html;\r
-        this.compiled = null;\r
-        if(compile){\r
-            this.compile();\r
-        }\r
-        return this;\r
-    },\r
-    \r
-    \r
-    disableFormats : false,\r
-    \r
-    \r
-    re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,\r
-    \r
-    \r
-    compile : function(){\r
-        var fm = Ext.util.Format;\r
-        var useF = this.disableFormats !== true;\r
-        var sep = Ext.isGecko ? "+" : ",";\r
-        var fn = function(m, name, format, args){\r
-            if(format && useF){\r
-                args = args ? ',' + args : "";\r
-                if(format.substr(0, 5) != "this."){\r
-                    format = "fm." + format + '(';\r
-                }else{\r
-                    format = 'this.call("'+ format.substr(5) + '", ';\r
-                    args = ", values";\r
-                }\r
-            }else{\r
-                args= ''; format = "(values['" + name + "'] == undefined ? '' : ";\r
-            }\r
-            return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";\r
-        };\r
-        var body;\r
-        
-        if(Ext.isGecko){\r
-            body = "this.compiled = function(values){ return '" +\r
-                   this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +\r
-                    "';};";\r
-        }else{\r
-            body = ["this.compiled = function(values){ return ['"];\r
-            body.push(this.html.replace(/\\/g, '\\\\').replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn));\r
-            body.push("'].join('');};");\r
-            body = body.join('');\r
-        }\r
-        eval(body);\r
-        return this;\r
-    },\r
-    \r
-    
-    call : function(fnName, value, allValues){\r
-        return this[fnName](value, allValues);\r
-    },\r
-    \r
-    \r
-    insertFirst: function(el, values, returnElement){\r
-        return this.doInsert('afterBegin', el, values, returnElement);\r
-    },\r
-\r
-    \r
-    insertBefore: function(el, values, returnElement){\r
-        return this.doInsert('beforeBegin', el, values, returnElement);\r
-    },\r
-\r
-    \r
-    insertAfter : function(el, values, returnElement){\r
-        return this.doInsert('afterEnd', el, values, returnElement);\r
-    },\r
-    \r
-    \r
-    append : function(el, values, returnElement){\r
-        return this.doInsert('beforeEnd', el, values, returnElement);\r
-    },\r
-\r
-    doInsert : function(where, el, values, returnEl){\r
-        el = Ext.getDom(el);\r
-        var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));\r
-        return returnEl ? Ext.get(newNode, true) : newNode;\r
-    },\r
-\r
-    \r
-    overwrite : function(el, values, returnElement){\r
-        el = Ext.getDom(el);\r
-        el.innerHTML = this.applyTemplate(values);\r
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;\r
-    }\r
-};\r
-\r
-Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;\r
-\r
-
-Ext.DomHelper.Template = Ext.Template;\r
-\r
-\r
-Ext.Template.from = function(el, config){\r
-    el = Ext.getDom(el);\r
-    return new Ext.Template(el.value || el.innerHTML, config || '');\r
-};
-\r
-\r
-Ext.DomQuery = function(){\r
-    var cache = {}, simpleCache = {}, valueCache = {};\r
-    var nonSpace = /\S/;\r
-    var trimRe = /^\s+|\s+$/g;\r
-    var tplRe = /\{(\d+)\}/g;\r
-    var modeRe = /^(\s?[\/>+~]\s?|\s|$)/;\r
-    var tagTokenRe = /^(#)?([\w-\*]+)/;\r
-    var nthRe = /(\d*)n\+?(\d*)/, nthRe2 = /\D/;\r
-\r
-    function child(p, index){\r
-        var i = 0;\r
-        var n = p.firstChild;\r
-        while(n){\r
-            if(n.nodeType == 1){\r
-               if(++i == index){\r
-                   return n;\r
-               }\r
-            }\r
-            n = n.nextSibling;\r
-        }\r
-        return null;\r
-    };\r
-\r
-    function next(n){\r
-        while((n = n.nextSibling) && n.nodeType != 1);\r
-        return n;\r
-    };\r
-\r
-    function prev(n){\r
-        while((n = n.previousSibling) && n.nodeType != 1);\r
-        return n;\r
-    };\r
-\r
-    function children(d){\r
-        var n = d.firstChild, ni = -1;\r
-           while(n){\r
-               var nx = n.nextSibling;\r
-               if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){\r
-                   d.removeChild(n);\r
-               }else{\r
-                   n.nodeIndex = ++ni;\r
-               }\r
-               n = nx;\r
-           }\r
-           return this;\r
-       };\r
-\r
-    function byClassName(c, a, v){\r
-        if(!v){\r
-            return c;\r
-        }\r
-        var r = [], ri = -1, cn;\r
-        for(var i = 0, ci; ci = c[i]; i++){\r
-            if((' '+ci.className+' ').indexOf(v) != -1){\r
-                r[++ri] = ci;\r
-            }\r
-        }\r
-        return r;\r
-    };\r
-\r
-    function attrValue(n, attr){\r
-        if(!n.tagName && typeof n.length != "undefined"){\r
-            n = n[0];\r
-        }\r
-        if(!n){\r
-            return null;\r
-        }\r
-        if(attr == "for"){\r
-            return n.htmlFor;\r
-        }\r
-        if(attr == "class" || attr == "className"){\r
-            return n.className;\r
-        }\r
-        return n.getAttribute(attr) || n[attr];\r
-\r
-    };\r
-\r
-    function getNodes(ns, mode, tagName){\r
-        var result = [], ri = -1, cs;\r
-        if(!ns){\r
-            return result;\r
-        }\r
-        tagName = tagName || "*";\r
-        if(typeof ns.getElementsByTagName != "undefined"){\r
-            ns = [ns];\r
-        }\r
-        if(!mode){\r
-            for(var i = 0, ni; ni = ns[i]; i++){\r
-                cs = ni.getElementsByTagName(tagName);\r
-                for(var j = 0, ci; ci = cs[j]; j++){\r
-                    result[++ri] = ci;\r
-                }\r
-            }\r
-        }else if(mode == "/" || mode == ">"){\r
-            var utag = tagName.toUpperCase();\r
-            for(var i = 0, ni, cn; ni = ns[i]; i++){\r
-                cn = ni.children || ni.childNodes;\r
-                for(var j = 0, cj; cj = cn[j]; j++){\r
-                    if(cj.nodeName == utag || cj.nodeName == tagName  || tagName == '*'){\r
-                        result[++ri] = cj;\r
-                    }\r
-                }\r
-            }\r
-        }else if(mode == "+"){\r
-            var utag = tagName.toUpperCase();\r
-            for(var i = 0, n; n = ns[i]; i++){\r
-                while((n = n.nextSibling) && n.nodeType != 1);\r
-                if(n && (n.nodeName == utag || n.nodeName == tagName || tagName == '*')){\r
-                    result[++ri] = n;\r
-                }\r
-            }\r
-        }else if(mode == "~"){\r
-            for(var i = 0, n; n = ns[i]; i++){\r
-                while((n = n.nextSibling) && (n.nodeType != 1 || (tagName == '*' || n.tagName.toLowerCase()!=tagName)));\r
-                if(n){\r
-                    result[++ri] = n;\r
-                }\r
-            }\r
-        }\r
-        return result;\r
-    };\r
-\r
-    function concat(a, b){\r
-        if(b.slice){\r
-            return a.concat(b);\r
-        }\r
-        for(var i = 0, l = b.length; i < l; i++){\r
-            a[a.length] = b[i];\r
-        }\r
-        return a;\r
-    }\r
-\r
-    function byTag(cs, tagName){\r
-        if(cs.tagName || cs == document){\r
-            cs = [cs];\r
-        }\r
-        if(!tagName){\r
-            return cs;\r
-        }\r
-        var r = [], ri = -1;\r
-        tagName = tagName.toLowerCase();\r
-        for(var i = 0, ci; ci = cs[i]; i++){\r
-            if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){\r
-                r[++ri] = ci;\r
-            }\r
-        }\r
-        return r;\r
-    };\r
-\r
-    function byId(cs, attr, id){\r
-        if(cs.tagName || cs == document){\r
-            cs = [cs];\r
-        }\r
-        if(!id){\r
-            return cs;\r
-        }\r
-        var r = [], ri = -1;\r
-        for(var i = 0,ci; ci = cs[i]; i++){\r
-            if(ci && ci.id == id){\r
-                r[++ri] = ci;\r
-                return r;\r
-            }\r
-        }\r
-        return r;\r
-    };\r
-\r
-    function byAttribute(cs, attr, value, op, custom){\r
-        var r = [], ri = -1, st = custom=="{";\r
-        var f = Ext.DomQuery.operators[op];\r
-        for(var i = 0, ci; ci = cs[i]; i++){\r
-            var a;\r
-            if(st){\r
-                a = Ext.DomQuery.getStyle(ci, attr);\r
-            }\r
-            else if(attr == "class" || attr == "className"){\r
-                a = ci.className;\r
-            }else if(attr == "for"){\r
-                a = ci.htmlFor;\r
-            }else if(attr == "href"){\r
-                a = ci.getAttribute("href", 2);\r
-            }else{\r
-                a = ci.getAttribute(attr);\r
-            }\r
-            if((f && f(a, value)) || (!f && a)){\r
-                r[++ri] = ci;\r
-            }\r
-        }\r
-        return r;\r
-    };\r
-\r
-    function byPseudo(cs, name, value){\r
-        return Ext.DomQuery.pseudos[name](cs, value);\r
-    };\r
-\r
-    
-    
-    
-    var isIE = window.ActiveXObject ? true : false;\r
-\r
-    
-    
-    eval("var batch = 30803;");\r
-\r
-    var key = 30803;\r
-\r
-    function nodupIEXml(cs){\r
-        var d = ++key;\r
-        cs[0].setAttribute("_nodup", d);\r
-        var r = [cs[0]];\r
-        for(var i = 1, len = cs.length; i < len; i++){\r
-            var c = cs[i];\r
-            if(!c.getAttribute("_nodup") != d){\r
-                c.setAttribute("_nodup", d);\r
-                r[r.length] = c;\r
-            }\r
-        }\r
-        for(var i = 0, len = cs.length; i < len; i++){\r
-            cs[i].removeAttribute("_nodup");\r
-        }\r
-        return r;\r
-    }\r
-\r
-    function nodup(cs){\r
-        if(!cs){\r
-            return [];\r
-        }\r
-        var len = cs.length, c, i, r = cs, cj, ri = -1;\r
-        if(!len || typeof cs.nodeType != "undefined" || len == 1){\r
-            return cs;\r
-        }\r
-        if(isIE && typeof cs[0].selectSingleNode != "undefined"){\r
-            return nodupIEXml(cs);\r
-        }\r
-        var d = ++key;\r
-        cs[0]._nodup = d;\r
-        for(i = 1; c = cs[i]; i++){\r
-            if(c._nodup != d){\r
-                c._nodup = d;\r
-            }else{\r
-                r = [];\r
-                for(var j = 0; j < i; j++){\r
-                    r[++ri] = cs[j];\r
-                }\r
-                for(j = i+1; cj = cs[j]; j++){\r
-                    if(cj._nodup != d){\r
-                        cj._nodup = d;\r
-                        r[++ri] = cj;\r
-                    }\r
-                }\r
-                return r;\r
-            }\r
-        }\r
-        return r;\r
-    }\r
-\r
-    function quickDiffIEXml(c1, c2){\r
-        var d = ++key;\r
-        for(var i = 0, len = c1.length; i < len; i++){\r
-            c1[i].setAttribute("_qdiff", d);\r
-        }\r
-        var r = [];\r
-        for(var i = 0, len = c2.length; i < len; i++){\r
-            if(c2[i].getAttribute("_qdiff") != d){\r
-                r[r.length] = c2[i];\r
-            }\r
-        }\r
-        for(var i = 0, len = c1.length; i < len; i++){\r
-           c1[i].removeAttribute("_qdiff");\r
-        }\r
-        return r;\r
-    }\r
-\r
-    function quickDiff(c1, c2){\r
-        var len1 = c1.length;\r
-        if(!len1){\r
-            return c2;\r
-        }\r
-        if(isIE && c1[0].selectSingleNode){\r
-            return quickDiffIEXml(c1, c2);\r
-        }\r
-        var d = ++key;\r
-        for(var i = 0; i < len1; i++){\r
-            c1[i]._qdiff = d;\r
-        }\r
-        var r = [];\r
-        for(var i = 0, len = c2.length; i < len; i++){\r
-            if(c2[i]._qdiff != d){\r
-                r[r.length] = c2[i];\r
-            }\r
-        }\r
-        return r;\r
-    }\r
-\r
-    function quickId(ns, mode, root, id){\r
-        if(ns == root){\r
-           var d = root.ownerDocument || root;\r
-           return d.getElementById(id);\r
-        }\r
-        ns = getNodes(ns, mode, "*");\r
-        return byId(ns, null, id);\r
-    }\r
-\r
-    return {\r
-        getStyle : function(el, name){\r
-            return Ext.fly(el).getStyle(name);\r
-        },\r
-        \r
-        compile : function(path, type){\r
-            type = type || "select";\r
-\r
-            var fn = ["var f = function(root){\n var mode; ++batch; var n = root || document;\n"];\r
-            var q = path, mode, lq;\r
-            var tk = Ext.DomQuery.matchers;\r
-            var tklen = tk.length;\r
-            var mm;\r
-\r
-            
-            var lmode = q.match(modeRe);\r
-            if(lmode && lmode[1]){\r
-                fn[fn.length] = 'mode="'+lmode[1].replace(trimRe, "")+'";';\r
-                q = q.replace(lmode[1], "");\r
-            }\r
-            
-            while(path.substr(0, 1)=="/"){\r
-                path = path.substr(1);\r
-            }\r
-\r
-            while(q && lq != q){\r
-                lq = q;\r
-                var tm = q.match(tagTokenRe);\r
-                if(type == "select"){\r
-                    if(tm){\r
-                        if(tm[1] == "#"){\r
-                            fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';\r
-                        }else{\r
-                            fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';\r
-                        }\r
-                        q = q.replace(tm[0], "");\r
-                    }else if(q.substr(0, 1) != '@'){\r
-                        fn[fn.length] = 'n = getNodes(n, mode, "*");';\r
-                    }\r
-                }else{\r
-                    if(tm){\r
-                        if(tm[1] == "#"){\r
-                            fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';\r
-                        }else{\r
-                            fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';\r
-                        }\r
-                        q = q.replace(tm[0], "");\r
-                    }\r
-                }\r
-                while(!(mm = q.match(modeRe))){\r
-                    var matched = false;\r
-                    for(var j = 0; j < tklen; j++){\r
-                        var t = tk[j];\r
-                        var m = q.match(t.re);\r
-                        if(m){\r
-                            fn[fn.length] = t.select.replace(tplRe, function(x, i){\r
-                                                    return m[i];\r
-                                                });\r
-                            q = q.replace(m[0], "");\r
-                            matched = true;\r
-                            break;\r
-                        }\r
-                    }\r
-                    
-                    if(!matched){\r
-                        throw 'Error parsing selector, parsing failed at "' + q + '"';\r
-                    }\r
-                }\r
-                if(mm[1]){\r
-                    fn[fn.length] = 'mode="'+mm[1].replace(trimRe, "")+'";';\r
-                    q = q.replace(mm[1], "");\r
-                }\r
-            }\r
-            fn[fn.length] = "return nodup(n);\n}";\r
-            eval(fn.join(""));\r
-            return f;\r
-        },\r
-\r
-        \r
-        select : function(path, root, type){\r
-            if(!root || root == document){\r
-                root = document;\r
-            }\r
-            if(typeof root == "string"){\r
-                root = document.getElementById(root);\r
-            }\r
-            var paths = path.split(",");\r
-            var results = [];\r
-            for(var i = 0, len = paths.length; i < len; i++){\r
-                var p = paths[i].replace(trimRe, "");\r
-                if(!cache[p]){\r
-                    cache[p] = Ext.DomQuery.compile(p);\r
-                    if(!cache[p]){\r
-                        throw p + " is not a valid selector";\r
-                    }\r
-                }\r
-                var result = cache[p](root);\r
-                if(result && result != document){\r
-                    results = results.concat(result);\r
-                }\r
-            }\r
-            if(paths.length > 1){\r
-                return nodup(results);\r
-            }\r
-            return results;\r
-        },\r
-\r
-        \r
-        selectNode : function(path, root){\r
-            return Ext.DomQuery.select(path, root)[0];\r
-        },\r
-\r
-        \r
-        selectValue : function(path, root, defaultValue){\r
-            path = path.replace(trimRe, "");\r
-            if(!valueCache[path]){\r
-                valueCache[path] = Ext.DomQuery.compile(path, "select");\r
-            }\r
-            var n = valueCache[path](root);\r
-            n = n[0] ? n[0] : n;\r
-            var v = (n && n.firstChild ? n.firstChild.nodeValue : null);\r
-            return ((v === null||v === undefined||v==='') ? defaultValue : v);\r
-        },\r
-\r
-        \r
-        selectNumber : function(path, root, defaultValue){\r
-            var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);\r
-            return parseFloat(v);\r
-        },\r
-\r
-        \r
-        is : function(el, ss){\r
-            if(typeof el == "string"){\r
-                el = document.getElementById(el);\r
-            }\r
-            var isArray = Ext.isArray(el);\r
-            var result = Ext.DomQuery.filter(isArray ? el : [el], ss);\r
-            return isArray ? (result.length == el.length) : (result.length > 0);\r
-        },\r
-\r
-        \r
-        filter : function(els, ss, nonMatches){\r
-            ss = ss.replace(trimRe, "");\r
-            if(!simpleCache[ss]){\r
-                simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");\r
-            }\r
-            var result = simpleCache[ss](els);\r
-            return nonMatches ? quickDiff(result, els) : result;\r
-        },\r
-\r
-        \r
-        matchers : [{\r
-                re: /^\.([\w-]+)/,\r
-                select: 'n = byClassName(n, null, " {1} ");'\r
-            }, {\r
-                re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,\r
-                select: 'n = byPseudo(n, "{1}", "{2}");'\r
-            },{\r
-                re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,\r
-                select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'\r
-            }, {\r
-                re: /^#([\w-]+)/,\r
-                select: 'n = byId(n, null, "{1}");'\r
-            },{\r
-                re: /^@([\w-]+)/,\r
-                select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'\r
-            }\r
-        ],\r
-\r
-        \r
-        operators : {\r
-            "=" : function(a, v){\r
-                return a == v;\r
-            },\r
-            "!=" : function(a, v){\r
-                return a != v;\r
-            },\r
-            "^=" : function(a, v){\r
-                return a && a.substr(0, v.length) == v;\r
-            },\r
-            "$=" : function(a, v){\r
-                return a && a.substr(a.length-v.length) == v;\r
-            },\r
-            "*=" : function(a, v){\r
-                return a && a.indexOf(v) !== -1;\r
-            },\r
-            "%=" : function(a, v){\r
-                return (a % v) == 0;\r
-            },\r
-            "|=" : function(a, v){\r
-                return a && (a == v || a.substr(0, v.length+1) == v+'-');\r
-            },\r
-            "~=" : function(a, v){\r
-                return a && (' '+a+' ').indexOf(' '+v+' ') != -1;\r
-            }\r
-        },\r
-\r
-        \r
-        pseudos : {\r
-            "first-child" : function(c){\r
-                var r = [], ri = -1, n;\r
-                for(var i = 0, ci; ci = n = c[i]; i++){\r
-                    while((n = n.previousSibling) && n.nodeType != 1);\r
-                    if(!n){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "last-child" : function(c){\r
-                var r = [], ri = -1, n;\r
-                for(var i = 0, ci; ci = n = c[i]; i++){\r
-                    while((n = n.nextSibling) && n.nodeType != 1);\r
-                    if(!n){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "nth-child" : function(c, a) {\r
-                var r = [], ri = -1;\r
-                var m = nthRe.exec(a == "even" && "2n" || a == "odd" && "2n+1" || !nthRe2.test(a) && "n+" + a || a);\r
-                var f = (m[1] || 1) - 0, l = m[2] - 0;\r
-                for(var i = 0, n; n = c[i]; i++){\r
-                    var pn = n.parentNode;\r
-                    if (batch != pn._batch) {\r
-                        var j = 0;\r
-                        for(var cn = pn.firstChild; cn; cn = cn.nextSibling){\r
-                            if(cn.nodeType == 1){\r
-                               cn.nodeIndex = ++j;\r
-                            }\r
-                        }\r
-                        pn._batch = batch;\r
-                    }\r
-                    if (f == 1) {\r
-                        if (l == 0 || n.nodeIndex == l){\r
-                            r[++ri] = n;\r
-                        }\r
-                    } else if ((n.nodeIndex + l) % f == 0){\r
-                        r[++ri] = n;\r
-                    }\r
-                }\r
-\r
-                return r;\r
-            },\r
-\r
-            "only-child" : function(c){\r
-                var r = [], ri = -1;;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    if(!prev(ci) && !next(ci)){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "empty" : function(c){\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    var cns = ci.childNodes, j = 0, cn, empty = true;\r
-                    while(cn = cns[j]){\r
-                        ++j;\r
-                        if(cn.nodeType == 1 || cn.nodeType == 3){\r
-                            empty = false;\r
-                            break;\r
-                        }\r
-                    }\r
-                    if(empty){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "contains" : function(c, v){\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    if((ci.textContent||ci.innerText||'').indexOf(v) != -1){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "nodeValue" : function(c, v){\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    if(ci.firstChild && ci.firstChild.nodeValue == v){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "checked" : function(c){\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    if(ci.checked == true){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "not" : function(c, ss){\r
-                return Ext.DomQuery.filter(c, ss, true);\r
-            },\r
-\r
-            "any" : function(c, selectors){\r
-                var ss = selectors.split('|');\r
-                var r = [], ri = -1, s;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    for(var j = 0; s = ss[j]; j++){\r
-                        if(Ext.DomQuery.is(ci, s)){\r
-                            r[++ri] = ci;\r
-                            break;\r
-                        }\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "odd" : function(c){\r
-                return this["nth-child"](c, "odd");\r
-            },\r
-\r
-            "even" : function(c){\r
-                return this["nth-child"](c, "even");\r
-            },\r
-\r
-            "nth" : function(c, a){\r
-                return c[a-1] || [];\r
-            },\r
-\r
-            "first" : function(c){\r
-                return c[0] || [];\r
-            },\r
-\r
-            "last" : function(c){\r
-                return c[c.length-1] || [];\r
-            },\r
-\r
-            "has" : function(c, ss){\r
-                var s = Ext.DomQuery.select;\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    if(s(ss, ci).length > 0){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "next" : function(c, ss){\r
-                var is = Ext.DomQuery.is;\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    var n = next(ci);\r
-                    if(n && is(n, ss)){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            },\r
-\r
-            "prev" : function(c, ss){\r
-                var is = Ext.DomQuery.is;\r
-                var r = [], ri = -1;\r
-                for(var i = 0, ci; ci = c[i]; i++){\r
-                    var n = prev(ci);\r
-                    if(n && is(n, ss)){\r
-                        r[++ri] = ci;\r
-                    }\r
-                }\r
-                return r;\r
-            }\r
-        }\r
-    };\r
-}();\r
-\r
-\r
-Ext.query = Ext.DomQuery.select;\r
-
-
-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]]){
-                    o[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;
-        }
-    };
-})();
-\r
-Ext.EventManager = function(){\r
-    var docReadyEvent, docReadyProcId, docReadyState = false;\r
-    var resizeEvent, resizeTask, textEvent, textSize;\r
-    var E = Ext.lib.Event;\r
-    var D = Ext.lib.Dom;\r
-\r
-\r
-    var fireDocReady = function(){\r
-        if(!docReadyState){\r
-            docReadyState = true;\r
-            Ext.isReady = true;\r
-            if(docReadyProcId){\r
-                clearInterval(docReadyProcId);\r
-            }\r
-            if(Ext.isGecko || Ext.isOpera) {\r
-                document.removeEventListener("DOMContentLoaded", fireDocReady, false);\r
-            }\r
-            if(Ext.isIE){\r
-                var defer = document.getElementById("ie-deferred-loader");\r
-                if(defer){\r
-                    defer.onreadystatechange = null;\r
-                    defer.parentNode.removeChild(defer);\r
-                }\r
-            }\r
-            if(docReadyEvent){\r
-                docReadyEvent.fire();\r
-                docReadyEvent.clearListeners();\r
-            }\r
-        }\r
-    };\r
-\r
-    var initDocReady = function(){\r
-        docReadyEvent = new Ext.util.Event();\r
-        if(Ext.isGecko || Ext.isOpera) {\r
-            document.addEventListener("DOMContentLoaded", fireDocReady, false);\r
-        }else if(Ext.isIE){\r
-            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");\r
-            var defer = document.getElementById("ie-deferred-loader");\r
-            defer.onreadystatechange = function(){\r
-                if(this.readyState == "complete"){\r
-                    fireDocReady();\r
-                }\r
-            };\r
-        }else if(Ext.isSafari){\r
-            docReadyProcId = setInterval(function(){\r
-                var rs = document.readyState;\r
-                if(rs == "complete") {\r
-                    fireDocReady();\r
-                 }\r
-            }, 10);\r
-        }\r
-        
-        E.on(window, "load", fireDocReady);\r
-    };\r
-\r
-    var createBuffered = function(h, o){\r
-        var task = new Ext.util.DelayedTask(h);\r
-        return function(e){\r
-            
-            e = new Ext.EventObjectImpl(e);\r
-            task.delay(o.buffer, h, null, [e]);\r
-        };\r
-    };\r
-\r
-    var createSingle = function(h, el, ename, fn){\r
-        return function(e){\r
-            Ext.EventManager.removeListener(el, ename, fn);\r
-            h(e);\r
-        };\r
-    };\r
-\r
-    var createDelayed = function(h, o){\r
-        return function(e){\r
-            
-            e = new Ext.EventObjectImpl(e);\r
-            setTimeout(function(){\r
-                h(e);\r
-            }, o.delay || 10);\r
-        };\r
-    };\r
-\r
-    var listen = function(element, ename, opt, fn, scope){\r
-        var o = (!opt || typeof opt == "boolean") ? {} : opt;\r
-        fn = fn || o.fn; scope = scope || o.scope;\r
-        var el = Ext.getDom(element);\r
-        if(!el){\r
-            throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';\r
-        }\r
-        var h = function(e){\r
-            e = Ext.EventObject.setEvent(e);\r
-            var t;\r
-            if(o.delegate){\r
-                t = e.getTarget(o.delegate, el);\r
-                if(!t){\r
-                    return;\r
-                }\r
-            }else{\r
-                t = e.target;\r
-            }\r
-            if(o.stopEvent === true){\r
-                e.stopEvent();\r
-            }\r
-            if(o.preventDefault === true){\r
-               e.preventDefault();\r
-            }\r
-            if(o.stopPropagation === true){\r
-                e.stopPropagation();\r
-            }\r
-\r
-            if(o.normalized === false){\r
-                e = e.browserEvent;\r
-            }\r
-\r
-            fn.call(scope || el, e, t, o);\r
-        };\r
-        if(o.delay){\r
-            h = createDelayed(h, o);\r
-        }\r
-        if(o.single){\r
-            h = createSingle(h, el, ename, fn);\r
-        }\r
-        if(o.buffer){\r
-            h = createBuffered(h, o);\r
-        }\r
-        fn._handlers = fn._handlers || [];\r
-        fn._handlers.push([Ext.id(el), ename, h]);\r
-\r
-        E.on(el, ename, h);\r
-        if(ename == "mousewheel" && el.addEventListener){ 
-            el.addEventListener("DOMMouseScroll", h, false);\r
-            E.on(window, 'unload', function(){\r
-                el.removeEventListener("DOMMouseScroll", h, false);\r
-            });\r
-        }\r
-        if(ename == "mousedown" && el == document){ 
-            Ext.EventManager.stoppedMouseDownEvent.addListener(h);\r
-        }\r
-        return h;\r
-    };\r
-\r
-    var stopListening = function(el, ename, fn){\r
-        var id = Ext.id(el), hds = fn._handlers, hd = fn;\r
-        if(hds){\r
-            for(var i = 0, len = hds.length; i < len; i++){\r
-                var h = hds[i];\r
-                if(h[0] == id && h[1] == ename){\r
-                    hd = h[2];\r
-                    hds.splice(i, 1);\r
-                    break;\r
-                }\r
-            }\r
-        }\r
-        E.un(el, ename, hd);\r
-        el = Ext.getDom(el);\r
-        if(ename == "mousewheel" && el.addEventListener){\r
-            el.removeEventListener("DOMMouseScroll", hd, false);\r
-        }\r
-        if(ename == "mousedown" && el == document){ 
-            Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);\r
-        }\r
-    };\r
-\r
-    var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;\r
-    var pub = {\r
-\r
-    \r
-        addListener : function(element, eventName, fn, scope, options){\r
-            if(typeof eventName == "object"){\r
-                var o = eventName;\r
-                for(var e in o){\r
-                    if(propRe.test(e)){\r
-                        continue;\r
-                    }\r
-                    if(typeof o[e] == "function"){\r
-                        
-                        listen(element, e, o, o[e], o.scope);\r
-                    }else{\r
-                        
-                        listen(element, e, o[e]);\r
-                    }\r
-                }\r
-                return;\r
-            }\r
-            return listen(element, eventName, options, fn, scope);\r
-        },\r
-\r
-        \r
-        removeListener : function(element, eventName, fn){\r
-            return stopListening(element, eventName, fn);\r
-        },\r
-\r
-        \r
-        onDocumentReady : function(fn, scope, options){\r
-            if(docReadyState){ 
-                docReadyEvent.addListener(fn, scope, options);\r
-                docReadyEvent.fire();\r
-                docReadyEvent.clearListeners();\r
-                return;\r
-            }\r
-            if(!docReadyEvent){\r
-                initDocReady();\r
-            }\r
-            docReadyEvent.addListener(fn, scope, options);\r
-        },\r
-\r
-        \r
-        onWindowResize : function(fn, scope, options){\r
-            if(!resizeEvent){\r
-                resizeEvent = new Ext.util.Event();\r
-                resizeTask = new Ext.util.DelayedTask(function(){\r
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());\r
-                });\r
-                E.on(window, "resize", this.fireWindowResize, this);\r
-            }\r
-            resizeEvent.addListener(fn, scope, options);\r
-        },\r
-\r
-        
-        fireWindowResize : function(){\r
-            if(resizeEvent){\r
-                if((Ext.isIE||Ext.isAir) && resizeTask){\r
-                    resizeTask.delay(50);\r
-                }else{\r
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        onTextResize : function(fn, scope, options){\r
-            if(!textEvent){\r
-                textEvent = new Ext.util.Event();\r
-                var textEl = new Ext.Element(document.createElement('div'));\r
-                textEl.dom.className = 'x-text-resize';\r
-                textEl.dom.innerHTML = 'X';\r
-                textEl.appendTo(document.body);\r
-                textSize = textEl.dom.offsetHeight;\r
-                setInterval(function(){\r
-                    if(textEl.dom.offsetHeight != textSize){\r
-                        textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);\r
-                    }\r
-                }, this.textResizeInterval);\r
-            }\r
-            textEvent.addListener(fn, scope, options);\r
-        },\r
-\r
-        \r
-        removeResizeListener : function(fn, scope){\r
-            if(resizeEvent){\r
-                resizeEvent.removeListener(fn, scope);\r
-            }\r
-        },\r
-\r
-        
-        fireResize : function(){\r
-            if(resizeEvent){\r
-                resizeEvent.fire(D.getViewWidth(), D.getViewHeight());\r
-            }\r
-        },\r
-        \r
-        ieDeferSrc : false,\r
-        \r
-        textResizeInterval : 50\r
-    };\r
-     \r
-    pub.on = pub.addListener;\r
-    \r
-    pub.un = pub.removeListener;\r
-\r
-    pub.stoppedMouseDownEvent = new Ext.util.Event();\r
-    return pub;\r
-}();\r
-\r
-Ext.onReady = Ext.EventManager.onDocumentReady;\r
-\r
-Ext.onReady(function(){\r
-    var bd = Ext.getBody();\r
-    if(!bd){ return; }\r
-\r
-    var cls = [\r
-            Ext.isIE ? "ext-ie " + (Ext.isIE6 ? 'ext-ie6' : 'ext-ie7')\r
-            : Ext.isGecko ? "ext-gecko"\r
-            : Ext.isOpera ? "ext-opera"\r
-            : Ext.isSafari ? "ext-safari" : ""];\r
-\r
-    if(Ext.isMac){\r
-        cls.push("ext-mac");\r
-    }\r
-    if(Ext.isLinux){\r
-        cls.push("ext-linux");\r
-    }\r
-    if(Ext.isBorderBox){\r
-        cls.push('ext-border-box');\r
-    }\r
-    if(Ext.isStrict){ 
-        var p = bd.dom.parentNode;\r
-        if(p){\r
-            p.className += ' ext-strict';\r
-        }\r
-    }\r
-    bd.addClass(cls.join(' '));\r
-});\r
-\r
-\r
-Ext.EventObject = function(){\r
-\r
-    var E = Ext.lib.Event;\r
-\r
-    
-    var safariKeys = {\r
-        63234 : 37, 
-        63235 : 39, 
-        63232 : 38, 
-        63233 : 40, 
-        63276 : 33, 
-        63277 : 34, 
-        63272 : 46, 
-        63273 : 36, 
-        63275 : 35  
-    };\r
-\r
-    
-    var btnMap = Ext.isIE ? {1:0,4:1,2:2} :\r
-                (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});\r
-\r
-    Ext.EventObjectImpl = function(e){\r
-        if(e){\r
-            this.setEvent(e.browserEvent || e);\r
-        }\r
-    };\r
-    Ext.EventObjectImpl.prototype = {\r
-        \r
-        browserEvent : null,\r
-        \r
-        button : -1,\r
-        \r
-        shiftKey : false,\r
-        \r
-        ctrlKey : false,\r
-        \r
-        altKey : false,\r
-\r
-        \r
-        BACKSPACE : 8,\r
-        \r
-        TAB : 9,\r
-        \r
-        RETURN : 13,\r
-        \r
-        ENTER : 13,\r
-        \r
-        SHIFT : 16,\r
-        \r
-        CONTROL : 17,\r
-        \r
-        ESC : 27,\r
-        \r
-        SPACE : 32,\r
-        \r
-        PAGEUP : 33,\r
-        \r
-        PAGEDOWN : 34,\r
-        \r
-        END : 35,\r
-        \r
-        HOME : 36,\r
-        \r
-        LEFT : 37,\r
-        \r
-        UP : 38,\r
-        \r
-        RIGHT : 39,\r
-        \r
-        DOWN : 40,\r
-        \r
-        DELETE : 46,\r
-        \r
-        F5 : 116,\r
-\r
-           \r
-        setEvent : function(e){\r
-            if(e == this || (e && e.browserEvent)){ 
-                return e;\r
-            }\r
-            this.browserEvent = e;\r
-            if(e){\r
-                
-                this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);\r
-                if(e.type == 'click' && this.button == -1){\r
-                    this.button = 0;\r
-                }\r
-                this.type = e.type;\r
-                this.shiftKey = e.shiftKey;\r
-                
-                this.ctrlKey = e.ctrlKey || e.metaKey;\r
-                this.altKey = e.altKey;\r
-                
-                this.keyCode = e.keyCode;\r
-                this.charCode = e.charCode;\r
-                
-                this.target = E.getTarget(e);\r
-                
-                this.xy = E.getXY(e);\r
-            }else{\r
-                this.button = -1;\r
-                this.shiftKey = false;\r
-                this.ctrlKey = false;\r
-                this.altKey = false;\r
-                this.keyCode = 0;\r
-                this.charCode =0;\r
-                this.target = null;\r
-                this.xy = [0, 0];\r
-            }\r
-            return this;\r
-        },\r
-\r
-        \r
-        stopEvent : function(){\r
-            if(this.browserEvent){\r
-                if(this.browserEvent.type == 'mousedown'){\r
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);\r
-                }\r
-                E.stopEvent(this.browserEvent);\r
-            }\r
-        },\r
-\r
-        \r
-        preventDefault : function(){\r
-            if(this.browserEvent){\r
-                E.preventDefault(this.browserEvent);\r
-            }\r
-        },\r
-\r
-        \r
-        isNavKeyPress : function(){\r
-            var k = this.keyCode;\r
-            k = Ext.isSafari ? (safariKeys[k] || k) : k;\r
-            return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;\r
-        },\r
-\r
-        isSpecialKey : function(){\r
-            var k = this.keyCode;\r
-            return (this.type == 'keypress' && this.ctrlKey) || k == 9 || k == 13  || k == 40 || k == 27 ||\r
-            (k == 16) || (k == 17) ||\r
-            (k >= 18 && k <= 20) ||\r
-            (k >= 33 && k <= 35) ||\r
-            (k >= 36 && k <= 39) ||\r
-            (k >= 44 && k <= 45);\r
-        },\r
-        \r
-        stopPropagation : function(){\r
-            if(this.browserEvent){\r
-                if(this.browserEvent.type == 'mousedown'){\r
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);\r
-                }\r
-                E.stopPropagation(this.browserEvent);\r
-            }\r
-        },\r
-\r
-        \r
-        getCharCode : function(){\r
-            return this.charCode || this.keyCode;\r
-        },\r
-\r
-        \r
-        getKey : function(){\r
-            var k = this.keyCode || this.charCode;\r
-            return Ext.isSafari ? (safariKeys[k] || k) : k;\r
-        },\r
-\r
-        \r
-        getPageX : function(){\r
-            return this.xy[0];\r
-        },\r
-\r
-        \r
-        getPageY : function(){\r
-            return this.xy[1];\r
-        },\r
-\r
-        \r
-        getTime : function(){\r
-            if(this.browserEvent){\r
-                return E.getTime(this.browserEvent);\r
-            }\r
-            return null;\r
-        },\r
-\r
-        \r
-        getXY : function(){\r
-            return this.xy;\r
-        },\r
-\r
-        \r
-        getTarget : function(selector, maxDepth, returnEl){\r
-               var t = Ext.get(this.target);\r
-            return selector ? t.findParent(selector, maxDepth, returnEl) : (returnEl ? t : this.target);\r
-        },\r
-        \r
-        \r
-        getRelatedTarget : function(){\r
-            if(this.browserEvent){\r
-                return E.getRelatedTarget(this.browserEvent);\r
-            }\r
-            return null;\r
-        },\r
-\r
-        \r
-        getWheelDelta : function(){\r
-            var e = this.browserEvent;\r
-            var delta = 0;\r
-            if(e.wheelDelta){ \r
-                delta = e.wheelDelta/120;\r
-            }else if(e.detail){ \r
-                delta = -e.detail/3;\r
-            }\r
-            return delta;\r
-        },\r
-\r
-        \r
-        hasModifier : function(){\r
-            return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;\r
-        },\r
-\r
-        \r
-        within : function(el, related){\r
-            var t = this[related ? "getRelatedTarget" : "getTarget"]();\r
-            return t && Ext.fly(el).contains(t);\r
-        },\r
-\r
-        getPoint : function(){\r
-            return new Ext.lib.Point(this.xy[0], this.xy[1]);\r
-        }\r
-    };\r
-\r
-    return new Ext.EventObjectImpl();\r
-}();
-
-(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, unique){
-        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){
-        Ext.EventManager.removeListener(this.dom,  eventName, fn);
-        return this;
-    },
-
-    
-    removeAllListeners : function(){
-        E.purgeElement(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.isGecko){              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 = 'no';
-        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, preventFlicker){
-        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){
-                E.purgeElement(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(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);
-
-\r
-Ext.CompositeElement = function(els){\r
-    this.elements = [];\r
-    this.addElements(els);\r
-};\r
-Ext.CompositeElement.prototype = {\r
-    isComposite: true,\r
-    addElements : function(els){\r
-        if(!els) return this;\r
-        if(typeof els == "string"){\r
-            els = Ext.Element.selectorFunction(els);\r
-        }\r
-        var yels = this.elements;\r
-        var index = yels.length-1;\r
-        for(var i = 0, len = els.length; i < len; i++) {\r
-               yels[++index] = Ext.get(els[i]);\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    fill : function(els){\r
-        this.elements = [];\r
-        this.add(els);\r
-        return this;\r
-    },\r
-\r
-    \r
-    filter : function(selector){\r
-        var els = [];\r
-        this.each(function(el){\r
-            if(el.is(selector)){\r
-                els[els.length] = el.dom;\r
-            }\r
-        });\r
-        this.fill(els);\r
-        return this;\r
-    },\r
-\r
-    invoke : function(fn, args){\r
-        var els = this.elements;\r
-        for(var i = 0, len = els.length; i < len; i++) {\r
-               Ext.Element.prototype[fn].apply(els[i], args);\r
-        }\r
-        return this;\r
-    },\r
-    \r
-    add : function(els){\r
-        if(typeof els == "string"){\r
-            this.addElements(Ext.Element.selectorFunction(els));\r
-        }else if(els.length !== undefined){\r
-            this.addElements(els);\r
-        }else{\r
-            this.addElements([els]);\r
-        }\r
-        return this;\r
-    },\r
-    \r
-    each : function(fn, scope){\r
-        var els = this.elements;\r
-        for(var i = 0, len = els.length; i < len; i++){\r
-            if(fn.call(scope || els[i], els[i], this, i) === false) {\r
-                break;\r
-            }\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    item : function(index){\r
-        return this.elements[index] || null;\r
-    },\r
-\r
-    \r
-    first : function(){\r
-        return this.item(0);\r
-    },\r
-\r
-    \r
-    last : function(){\r
-        return this.item(this.elements.length-1);\r
-    },\r
-\r
-    \r
-    getCount : function(){\r
-        return this.elements.length;\r
-    },\r
-\r
-    \r
-    contains : function(el){\r
-        return this.indexOf(el) !== -1;\r
-    },\r
-\r
-    \r
-    indexOf : function(el){\r
-        return this.elements.indexOf(Ext.get(el));\r
-    },\r
-\r
-\r
-    \r
-    removeElement : function(el, removeDom){\r
-        if(Ext.isArray(el)){\r
-            for(var i = 0, len = el.length; i < len; i++){\r
-                this.removeElement(el[i]);\r
-            }\r
-            return this;\r
-        }\r
-        var index = typeof el == 'number' ? el : this.indexOf(el);\r
-        if(index !== -1 && this.elements[index]){\r
-            if(removeDom){\r
-                var d = this.elements[index];\r
-                if(d.dom){\r
-                    d.remove();\r
-                }else{\r
-                    Ext.removeNode(d);\r
-                }\r
-            }\r
-            this.elements.splice(index, 1);\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    replaceElement : function(el, replacement, domReplace){\r
-        var index = typeof el == 'number' ? el : this.indexOf(el);\r
-        if(index !== -1){\r
-            if(domReplace){\r
-                this.elements[index].replaceWith(replacement);\r
-            }else{\r
-                this.elements.splice(index, 1, Ext.get(replacement))\r
-            }\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    clear : function(){\r
-        this.elements = [];\r
-    }\r
-};\r
-(function(){\r
-Ext.CompositeElement.createCall = function(proto, fnName){\r
-    if(!proto[fnName]){\r
-        proto[fnName] = function(){\r
-            return this.invoke(fnName, arguments);\r
-        };\r
-    }\r
-};\r
-for(var fnName in Ext.Element.prototype){\r
-    if(typeof Ext.Element.prototype[fnName] == "function"){\r
-        Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);\r
-    }\r
-};\r
-})();\r
-\r
-\r
-Ext.CompositeElementLite = function(els){\r
-    Ext.CompositeElementLite.superclass.constructor.call(this, els);\r
-    this.el = new Ext.Element.Flyweight();\r
-};\r
-Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {\r
-    addElements : function(els){\r
-        if(els){\r
-            if(Ext.isArray(els)){\r
-                this.elements = this.elements.concat(els);\r
-            }else{\r
-                var yels = this.elements;\r
-                var index = yels.length-1;\r
-                for(var i = 0, len = els.length; i < len; i++) {\r
-                    yels[++index] = els[i];\r
-                }\r
-            }\r
-        }\r
-        return this;\r
-    },\r
-    invoke : function(fn, args){\r
-        var els = this.elements;\r
-        var el = this.el;\r
-        for(var i = 0, len = els.length; i < len; i++) {\r
-            el.dom = els[i];\r
-               Ext.Element.prototype[fn].apply(el, args);\r
-        }\r
-        return this;\r
-    },\r
-    \r
-    item : function(index){\r
-        if(!this.elements[index]){\r
-            return null;\r
-        }\r
-        this.el.dom = this.elements[index];\r
-        return this.el;\r
-    },\r
-\r
-    
-    addListener : function(eventName, handler, scope, opt){\r
-        var els = this.elements;\r
-        for(var i = 0, len = els.length; i < len; i++) {\r
-            Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    each : function(fn, scope){\r
-        var els = this.elements;\r
-        var el = this.el;\r
-        for(var i = 0, len = els.length; i < len; i++){\r
-            el.dom = els[i];\r
-               if(fn.call(scope || el, el, this, i) === false){\r
-                break;\r
-            }\r
-        }\r
-        return this;\r
-    },\r
-\r
-    indexOf : function(el){\r
-        return this.elements.indexOf(Ext.getDom(el));\r
-    },\r
-\r
-    replaceElement : function(el, replacement, domReplace){\r
-        var index = typeof el == 'number' ? el : this.indexOf(el);\r
-        if(index !== -1){\r
-            replacement = Ext.getDom(replacement);\r
-            if(domReplace){\r
-                var d = this.elements[index];\r
-                d.parentNode.insertBefore(replacement, d);\r
-                Ext.removeNode(d);\r
-            }\r
-            this.elements.splice(index, 1, replacement);\r
-        }\r
-        return this;\r
-    }\r
-});\r
-Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;\r
-if(Ext.DomQuery){\r
-    Ext.Element.selectorFunction = Ext.DomQuery.select;\r
-}\r
-\r
-Ext.Element.select = function(selector, unique, root){\r
-    var els;\r
-    if(typeof selector == "string"){\r
-        els = Ext.Element.selectorFunction(selector, root);\r
-    }else if(selector.length !== undefined){\r
-        els = selector;\r
-    }else{\r
-        throw "Invalid selector";\r
-    }\r
-    if(unique === true){\r
-        return new Ext.CompositeElement(els);\r
-    }else{\r
-        return new Ext.CompositeElementLite(els);\r
-    }\r
-};\r
-\r
-Ext.select = Ext.Element.select;
-\r
-Ext.data.Connection = function(config){\r
-    Ext.apply(this, config);\r
-    this.addEvents(\r
-        \r
-        "beforerequest",\r
-        \r
-        "requestcomplete",\r
-        \r
-        "requestexception"\r
-    );\r
-    Ext.data.Connection.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.data.Connection, Ext.util.Observable, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    timeout : 30000,\r
-    \r
-    autoAbort:false,\r
-\r
-    \r
-    disableCaching: true,\r
-\r
-    \r
-    request : function(o){\r
-        if(this.fireEvent("beforerequest", this, o) !== false){\r
-            var p = o.params;\r
-\r
-            if(typeof p == "function"){\r
-                p = p.call(o.scope||window, o);\r
-            }\r
-            if(typeof p == "object"){\r
-                p = Ext.urlEncode(p);\r
-            }\r
-            if(this.extraParams){\r
-                var extras = Ext.urlEncode(this.extraParams);\r
-                p = p ? (p + '&' + extras) : extras;\r
-            }\r
-\r
-            var url = o.url || this.url;\r
-            if(typeof url == 'function'){\r
-                url = url.call(o.scope||window, o);\r
-            }\r
-\r
-            if(o.form){\r
-                var form = Ext.getDom(o.form);\r
-                url = url || form.action;\r
-\r
-                var enctype = form.getAttribute("enctype");\r
-                if(o.isUpload || (enctype && enctype.toLowerCase() == 'multipart/form-data')){\r
-                    return this.doFormUpload(o, p, url);\r
-                }\r
-                var f = Ext.lib.Ajax.serializeForm(form);\r
-                p = p ? (p + '&' + f) : f;\r
-            }\r
-\r
-            var hs = o.headers;\r
-            if(this.defaultHeaders){\r
-                hs = Ext.apply(hs || {}, this.defaultHeaders);\r
-                if(!o.headers){\r
-                    o.headers = hs;\r
-                }\r
-            }\r
-\r
-            var cb = {\r
-                success: this.handleResponse,\r
-                failure: this.handleFailure,\r
-                scope: this,\r
-                argument: {options: o},\r
-                timeout : o.timeout || this.timeout\r
-            };\r
-\r
-            var method = o.method||this.method||(p ? "POST" : "GET");\r
-\r
-            if(method == 'GET' && (this.disableCaching && o.disableCaching !== false) || o.disableCaching === true){\r
-                url += (url.indexOf('?') != -1 ? '&' : '?') + '_dc=' + (new Date().getTime());\r
-            }\r
-\r
-            if(typeof o.autoAbort == 'boolean'){ 
-                if(o.autoAbort){\r
-                    this.abort();\r
-                }\r
-            }else if(this.autoAbort !== false){\r
-                this.abort();\r
-            }\r
-            if((method == 'GET' && p) || o.xmlData || o.jsonData){\r
-                url += (url.indexOf('?') != -1 ? '&' : '?') + p;\r
-                p = '';\r
-            }\r
-            this.transId = Ext.lib.Ajax.request(method, url, cb, p, o);\r
-            return this.transId;\r
-        }else{\r
-            Ext.callback(o.callback, o.scope, [o, null, null]);\r
-            return null;\r
-        }\r
-    },\r
-\r
-    \r
-    isLoading : function(transId){\r
-        if(transId){\r
-            return Ext.lib.Ajax.isCallInProgress(transId);\r
-        }else{\r
-            return this.transId ? true : false;\r
-        }\r
-    },\r
-\r
-    \r
-    abort : function(transId){\r
-        if(transId || this.isLoading()){\r
-            Ext.lib.Ajax.abort(transId || this.transId);\r
-        }\r
-    },\r
-\r
-    
-    handleResponse : function(response){\r
-        this.transId = false;\r
-        var options = response.argument.options;\r
-        response.argument = options ? options.argument : null;\r
-        this.fireEvent("requestcomplete", this, response, options);\r
-        Ext.callback(options.success, options.scope, [response, options]);\r
-        Ext.callback(options.callback, options.scope, [options, true, response]);\r
-    },\r
-\r
-    
-    handleFailure : function(response, e){\r
-        this.transId = false;\r
-        var options = response.argument.options;\r
-        response.argument = options ? options.argument : null;\r
-        this.fireEvent("requestexception", this, response, options, e);\r
-        Ext.callback(options.failure, options.scope, [response, options]);\r
-        Ext.callback(options.callback, options.scope, [options, false, response]);\r
-    },\r
-\r
-    
-    doFormUpload : function(o, ps, url){\r
-        var id = Ext.id();\r
-        var frame = document.createElement('iframe');\r
-        frame.id = id;\r
-        frame.name = id;\r
-        frame.className = 'x-hidden';\r
-        if(Ext.isIE){\r
-            frame.src = Ext.SSL_SECURE_URL;\r
-        }\r
-        document.body.appendChild(frame);\r
-\r
-        if(Ext.isIE){\r
-           document.frames[id].name = id;\r
-        }\r
-\r
-        var form = Ext.getDom(o.form);\r
-        form.target = id;\r
-        form.method = 'POST';\r
-        form.enctype = form.encoding = 'multipart/form-data';\r
-        if(url){\r
-            form.action = url;\r
-        }\r
-\r
-        var hiddens, hd;\r
-        if(ps){ 
-            hiddens = [];\r
-            ps = Ext.urlDecode(ps, false);\r
-            for(var k in ps){\r
-                if(ps.hasOwnProperty(k)){\r
-                    hd = document.createElement('input');\r
-                    hd.type = 'hidden';\r
-                    hd.name = k;\r
-                    hd.value = ps[k];\r
-                    form.appendChild(hd);\r
-                    hiddens.push(hd);\r
-                }\r
-            }\r
-        }\r
-\r
-        function cb(){\r
-            var r = {  
-                responseText : '',\r
-                responseXML : null\r
-            };\r
-\r
-            r.argument = o ? o.argument : null;\r
-\r
-            try { 
-                var doc;\r
-                if(Ext.isIE){\r
-                    doc = frame.contentWindow.document;\r
-                }else {\r
-                    doc = (frame.contentDocument || window.frames[id].document);\r
-                }\r
-                if(doc && doc.body){\r
-                    r.responseText = doc.body.innerHTML;\r
-                }\r
-                if(doc && doc.XMLDocument){\r
-                    r.responseXML = doc.XMLDocument;\r
-                }else {\r
-                    r.responseXML = doc;\r
-                }\r
-            }\r
-            catch(e) {\r
-                
-            }\r
-\r
-            Ext.EventManager.removeListener(frame, 'load', cb, this);\r
-\r
-            this.fireEvent("requestcomplete", this, r, o);\r
-\r
-            Ext.callback(o.success, o.scope, [r, o]);\r
-            Ext.callback(o.callback, o.scope, [o, true, r]);\r
-\r
-            setTimeout(function(){Ext.removeNode(frame);}, 100);\r
-        }\r
-\r
-        Ext.EventManager.on(frame, 'load', cb, this);\r
-        form.submit();\r
-\r
-        if(hiddens){ 
-            for(var i = 0, len = hiddens.length; i < len; i++){\r
-                Ext.removeNode(hiddens[i]);\r
-            }\r
-        }\r
-    }\r
-});\r
-\r
-\r
-Ext.Ajax = new Ext.data.Connection({\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-    \r
-\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-    \r
-    autoAbort : false,\r
-\r
-    \r
-    serializeForm : function(form){\r
-        return Ext.lib.Ajax.serializeForm(form);\r
-    }\r
-});
-\r
-Ext.Updater = function(el, forceNew){\r
-    el = Ext.get(el);\r
-    if(!forceNew && el.updateManager){\r
-        return el.updateManager;\r
-    }\r
-    \r
-    this.el = el;\r
-    \r
-    this.defaultUrl = null;\r
-\r
-    this.addEvents(\r
-        \r
-        "beforeupdate",\r
-        \r
-        "update",\r
-        \r
-        "failure"\r
-    );\r
-    var d = Ext.Updater.defaults;\r
-    \r
-    this.sslBlankUrl = d.sslBlankUrl;\r
-    \r
-    this.disableCaching = d.disableCaching;\r
-    \r
-    this.indicatorText = d.indicatorText;\r
-    \r
-    this.showLoadIndicator = d.showLoadIndicator;\r
-    \r
-    this.timeout = d.timeout;\r
-\r
-    \r
-    this.loadScripts = d.loadScripts;\r
-\r
-    \r
-    this.transaction = null;\r
-\r
-    \r
-    this.autoRefreshProcId = null;\r
-    \r
-    this.refreshDelegate = this.refresh.createDelegate(this);\r
-    \r
-    this.updateDelegate = this.update.createDelegate(this);\r
-    \r
-    this.formUpdateDelegate = this.formUpdate.createDelegate(this);\r
-\r
-    if(!this.renderer){\r
-     \r
-    this.renderer = new Ext.Updater.BasicRenderer();\r
-    }\r
-    Ext.Updater.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.Updater, Ext.util.Observable, {\r
-    \r
-    getEl : function(){\r
-        return this.el;\r
-    },\r
-    \r
-    update : function(url, params, callback, discardUrl){\r
-        if(this.fireEvent("beforeupdate", this.el, url, params) !== false){\r
-            var method = this.method, cfg, callerScope;\r
-            if(typeof url == "object"){ 
-                cfg = url;\r
-                url = cfg.url;\r
-                params = params || cfg.params;\r
-                callback = callback || cfg.callback;\r
-                discardUrl = discardUrl || cfg.discardUrl;\r
-                   callerScope = cfg.scope;\r
-                if(typeof cfg.method != "undefined"){method = cfg.method;};\r
-                if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};\r
-                if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};\r
-                if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};\r
-                if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};\r
-            }\r
-            this.showLoading();\r
-            if(!discardUrl){\r
-                this.defaultUrl = url;\r
-            }\r
-            if(typeof url == "function"){\r
-                url = url.call(this);\r
-            }\r
-\r
-            method = method || (params ? "POST" : "GET");\r
-            if(method == "GET"){\r
-                url = this.prepareUrl(url);\r
-            }\r
-\r
-            var o = Ext.apply(cfg ||{}, {\r
-                url : url,\r
-                params: (typeof params == "function" && callerScope) ? params.createDelegate(callerScope) : params,\r
-                success: this.processSuccess,\r
-                failure: this.processFailure,\r
-                scope: this,\r
-                callback: undefined,\r
-                timeout: (this.timeout*1000),\r
-                argument: {\r
-                       "options": cfg,\r
-                       "url": url,\r
-                       "form": null,\r
-                       "callback": callback,\r
-                       "scope": callerScope || window,\r
-                       "params": params\r
-                }\r
-            });\r
-\r
-            this.transaction = Ext.Ajax.request(o);\r
-        }\r
-    },\r
-\r
-    \r
-    formUpdate : function(form, url, reset, callback){\r
-        if(this.fireEvent("beforeupdate", this.el, form, url) !== false){\r
-            if(typeof url == "function"){\r
-                url = url.call(this);\r
-            }\r
-            form = Ext.getDom(form)\r
-            this.transaction = Ext.Ajax.request({\r
-                form: form,\r
-                url:url,\r
-                success: this.processSuccess,\r
-                failure: this.processFailure,\r
-                scope: this,\r
-                timeout: (this.timeout*1000),\r
-                argument: {\r
-                       "url": url,\r
-                       "form": form,\r
-                       "callback": callback,\r
-                       "reset": reset\r
-                }\r
-            });\r
-            this.showLoading.defer(1, this);\r
-        }\r
-    },\r
-\r
-    \r
-    refresh : function(callback){\r
-        if(this.defaultUrl == null){\r
-            return;\r
-        }\r
-        this.update(this.defaultUrl, null, callback, true);\r
-    },\r
-\r
-    \r
-    startAutoRefresh : function(interval, url, params, callback, refreshNow){\r
-        if(refreshNow){\r
-            this.update(url || this.defaultUrl, params, callback, true);\r
-        }\r
-        if(this.autoRefreshProcId){\r
-            clearInterval(this.autoRefreshProcId);\r
-        }\r
-        this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);\r
-    },\r
-\r
-    \r
-     stopAutoRefresh : function(){\r
-        if(this.autoRefreshProcId){\r
-            clearInterval(this.autoRefreshProcId);\r
-            delete this.autoRefreshProcId;\r
-        }\r
-    },\r
-\r
-    isAutoRefreshing : function(){\r
-       return this.autoRefreshProcId ? true : false;\r
-    },\r
-    \r
-    showLoading : function(){\r
-        if(this.showLoadIndicator){\r
-            this.el.update(this.indicatorText);\r
-        }\r
-    },\r
-\r
-    \r
-    prepareUrl : function(url){\r
-        if(this.disableCaching){\r
-            var append = "_dc=" + (new Date().getTime());\r
-            if(url.indexOf("?") !== -1){\r
-                url += "&" + append;\r
-            }else{\r
-                url += "?" + append;\r
-            }\r
-        }\r
-        return url;\r
-    },\r
-\r
-    \r
-    processSuccess : function(response){\r
-        this.transaction = null;\r
-        if(response.argument.form && response.argument.reset){\r
-            try{ 
-                response.argument.form.reset();\r
-            }catch(e){}\r
-        }\r
-        if(this.loadScripts){\r
-            this.renderer.render(this.el, response, this,\r
-                this.updateComplete.createDelegate(this, [response]));\r
-        }else{\r
-            this.renderer.render(this.el, response, this);\r
-            this.updateComplete(response);\r
-        }\r
-    },\r
-\r
-    updateComplete : function(response){\r
-        this.fireEvent("update", this.el, response);\r
-        if(typeof response.argument.callback == "function"){\r
-            response.argument.callback.call(response.argument.scope, this.el, true, response, response.argument.options);\r
-        }\r
-    },\r
-\r
-    \r
-    processFailure : function(response){\r
-        this.transaction = null;\r
-        this.fireEvent("failure", this.el, response);\r
-        if(typeof response.argument.callback == "function"){\r
-            response.argument.callback.call(response.argument.scope, this.el, false, response, response.argument.options);\r
-        }\r
-    },\r
-\r
-    \r
-    setRenderer : function(renderer){\r
-        this.renderer = renderer;\r
-    },\r
-\r
-    getRenderer : function(){\r
-       return this.renderer;\r
-    },\r
-\r
-    \r
-    setDefaultUrl : function(defaultUrl){\r
-        this.defaultUrl = defaultUrl;\r
-    },\r
-\r
-    \r
-    abort : function(){\r
-        if(this.transaction){\r
-            Ext.Ajax.abort(this.transaction);\r
-        }\r
-    },\r
-\r
-    \r
-    isUpdating : function(){\r
-        if(this.transaction){\r
-            return Ext.Ajax.isLoading(this.transaction);\r
-        }\r
-        return false;\r
-    }\r
-});\r
-\r
-\r
-   Ext.Updater.defaults = {\r
-       \r
-         timeout : 30,\r
-\r
-         \r
-        loadScripts : false,\r
-\r
-        \r
-        sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),\r
-        \r
-        disableCaching : false,\r
-        \r
-        showLoadIndicator : true,\r
-        \r
-        indicatorText : '<div class="loading-indicator">Loading...</div>'\r
-   };\r
-\r
-\r
-Ext.Updater.updateElement = function(el, url, params, options){\r
-    var um = Ext.get(el).getUpdater();\r
-    Ext.apply(um, options);\r
-    um.update(url, params, options ? options.callback : null);\r
-};\r
-
-Ext.Updater.update = Ext.Updater.updateElement;\r
-\r
-Ext.Updater.BasicRenderer = function(){};\r
-\r
-Ext.Updater.BasicRenderer.prototype = {\r
-    \r
-     render : function(el, response, updateManager, callback){\r
-        el.update(response.responseText, updateManager.loadScripts, callback);\r
-    }\r
-};\r
-\r
-Ext.UpdateManager = Ext.Updater;\r
-
-
-
-
-
-Date.parseFunctions = {count:0};
-Date.parseRegexes = [];
-Date.formatFunctions = {count:0};
-
-Date.prototype.dateFormat = function(format) {
-    if (Date.formatFunctions[format] == null) {
-        Date.createNewFormat(format);
-    }
-    var func = Date.formatFunctions[format];
-    return this[func]();
-};
-
-
-
-Date.prototype.format = Date.prototype.dateFormat;
-
-Date.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) + ";}");
-};
-
-Date.getFormatCode = function(character) {
-    switch (character) {
-    case "d":
-        return "String.leftPad(this.getDate(), 2, '0') + ";
-    case "D":
-        return "Date.getShortDayName(this.getDay()) + ";     case "j":
-        return "this.getDate() + ";
-    case "l":
-        return "Date.dayNames[this.getDay()] + ";
-    case "N":
-        return "(this.getDay() ? this.getDay() : 7) + ";
-    case "S":
-        return "this.getSuffix() + ";
-    case "w":
-        return "this.getDay() + ";
-    case "z":
-        return "this.getDayOfYear() + ";
-    case "W":
-        return "String.leftPad(this.getWeekOfYear(), 2, '0') + ";
-    case "F":
-        return "Date.monthNames[this.getMonth()] + ";
-    case "m":
-        return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
-    case "M":
-        return "Date.getShortMonthName(this.getMonth()) + ";     case "n":
-        return "(this.getMonth() + 1) + ";
-    case "t":
-        return "this.getDaysInMonth() + ";
-    case "L":
-        return "(this.isLeapYear() ? 1 : 0) + ";
-    case "o":
-        return "(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0))) + ";
-    case "Y":
-        return "this.getFullYear() + ";
-    case "y":
-        return "('' + this.getFullYear()).substring(2, 4) + ";
-    case "a":
-        return "(this.getHours() < 12 ? 'am' : 'pm') + ";
-    case "A":
-        return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
-    case "g":
-        return "((this.getHours() % 12) ? this.getHours() % 12 : 12) + ";
-    case "G":
-        return "this.getHours() + ";
-    case "h":
-        return "String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0') + ";
-    case "H":
-        return "String.leftPad(this.getHours(), 2, '0') + ";
-    case "i":
-        return "String.leftPad(this.getMinutes(), 2, '0') + ";
-    case "s":
-        return "String.leftPad(this.getSeconds(), 2, '0') + ";
-    case "u":
-        return "String.leftPad(this.getMilliseconds(), 3, '0') + ";
-    case "O":
-        return "this.getGMTOffset() + ";
-    case "P":
-        return "this.getGMTOffset(true) + ";
-    case "T":
-        return "this.getTimezone() + ";
-    case "Z":
-        return "(this.getTimezoneOffset() * -60) + ";
-    case "c":
-        for (var df = Date.getFormatCode, c = "Y-m-dTH:i:sP", code = "", i = 0, l = c.length; i < l; ++i) {
-          var e = c.charAt(i);
-          code += e == "T" ? "'T' + " : df(e);         }
-        return code;
-    case "U":
-        return "Math.round(this.getTime() / 1000) + ";
-    default:
-        return "'" + String.escape(character) + "' + ";
-    }
-};
-
-
-Date.parseDate = function(input, format) {
-    if (Date.parseFunctions[format] == null) {
-        Date.createParser(format);
-    }
-    var func = Date.parseFunctions[format];
-    return Date[func](input);
-};
-
-Date.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 = -1, m = -1, d = -1, h = -1, i = -1, s = -1, ms = -1, o, z, u, v;\n"
-        + "input = String(input);var 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);}"         + "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"
-        + "}return (v && (z || o))?\n"         + "    (z ? v.add(Date.SECOND, (v.getTimezoneOffset() * 60) + (z*1)) :\n"         + "        v.add(Date.HOUR, (v.getGMTOffset() / 100) + (o / -100))) : v\n"         + ";}";
-
-    Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$", "i");
-    eval(code);
-};
-
-Date.formatCodeToRegex = function(character, currentGroup) {
-    
-    switch (character) {
-    case "d":
-        return {g:1,
-            c:"d = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};     case "D":
-        for (var a = [], i = 0; i < 7; a.push(Date.getShortDayName(i)), ++i);         return {g:0,
-            c:null,
-            s:"(?:" + a.join("|") +")"};
-    case "j":
-        return {g:1,
-            c:"d = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{1,2})"};     case "l":
-        return {g:0,
-            c:null,
-            s:"(?:" + Date.dayNames.join("|") + ")"};
-    case "N":
-        return {g:0,
-            c:null,
-            s:"[1-7]"};     case "S":
-        return {g:0,
-            c:null,
-            s:"(?:st|nd|rd|th)"};
-    case "w":
-        return {g:0,
-            c:null,
-            s:"[0-6]"};     case "z":
-        return {g:0,
-            c:null,
-            s:"(?:\\d{1,3}"};     case "W":
-        return {g:0,
-            c:null,
-            s:"(?:\\d{2})"};     case "F":
-        return {g:1,
-            c:"m = parseInt(Date.getMonthNumber(results[" + currentGroup + "]), 10);\n",             s:"(" + Date.monthNames.join("|") + ")"};
-    case "m":
-        return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
-            s:"(\\d{2})"};     case "M":
-        for (var a = [], i = 0; i < 12; a.push(Date.getShortMonthName(i)), ++i);         return {g:1,
-            c:"m = parseInt(Date.getMonthNumber(results[" + currentGroup + "]), 10);\n",             s:"(" + a.join("|") + ")"};
-    case "n":
-        return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
-            s:"(\\d{1,2})"};     case "t":
-        return {g:0,
-            c:null,
-            s:"(?:\\d{2})"};     case "L":
-        return {g:0,
-            c:null,
-            s:"(?:1|0)"};
-    case "o":
-    case "Y":
-        return {g:1,
-            c:"y = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{4})"};     case "y":
-        return {g:1,
-            c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
-                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
-            s:"(\\d{1,2})"};     case "a":
-        return {g:1,
-            c:"if (results[" + currentGroup + "] == 'am') {\n"
-                + "if (h == 12) { h = 0; }\n"
-                + "} else { if (h < 12) { h += 12; }}",
-            s:"(am|pm)"};
-    case "A":
-        return {g:1,
-            c:"if (results[" + currentGroup + "] == 'AM') {\n"
-                + "if (h == 12) { h = 0; }\n"
-                + "} else { if (h < 12) { h += 12; }}",
-            s:"(AM|PM)"};
-    case "g":
-    case "G":
-        return {g:1,
-            c:"h = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{1,2})"};     case "h":
-    case "H":
-        return {g:1,
-            c:"h = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};     case "i":
-        return {g:1,
-            c:"i = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};     case "s":
-        return {g:1,
-            c:"s = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};     case "u":
-        return {g:1,
-            c:"ms = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{3})"};     case "O":
-        return {g:1,
-            c:[
-                "o = results[", currentGroup, "];\n",
-                "var sn = o.substring(0,1);\n",                 "var hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60);\n",                 "var mn = o.substring(3,5) % 60;\n",                 "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n",                 "    (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"
-            ].join(""),
-            s: "([+\-]\\d{4})"};     case "P":
-        return {g:1,
-            c:[
-                "o = results[", currentGroup, "];\n",
-                "var sn = o.substring(0,1);\n",                 "var hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60);\n",                 "var mn = o.substring(4,6) % 60;\n",                 "o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))?\n",                 "    (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"
-            ].join(""),
-            s: "([+\-]\\d{2}:\\d{2})"};     case "T":
-        return {g:0,
-            c:null,
-            s:"[A-Z]{1,4}"};     case "Z":
-        return {g:1,
-            c:"z = results[" + currentGroup + "] * 1;\n"                   + "z = (-43200 <= z && z <= 50400)? z : null;\n",
-            s:"([+\-]?\\d{1,5})"};     case "c":
-        var df = Date.formatCodeToRegex, calc = [];
-        var arr = [df("Y", 1), df("m", 2), df("d", 3), df("h", 4), df("i", 5), df("s", 6), df("P", 7)];
-        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 + arr[6].s};
-    case "U":
-        return {g:1,
-            c:"u = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(-?\\d+)"};     default:
-        return {g:0,
-            c:null,
-            s:Ext.escapeRe(character)};
-    }
-};
-
-
-Date.prototype.getTimezone = function() {
-                                                    return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");
-};
-
-
-Date.prototype.getGMTOffset = function(colon) {
-    return (this.getTimezoneOffset() > 0 ? "-" : "+")
-        + String.leftPad(Math.abs(Math.floor(this.getTimezoneOffset() / 60)), 2, "0")
-        + (colon ? ":" : "")
-        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
-};
-
-
-Date.prototype.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;
-};
-
-
-Date.prototype.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;
-};
-
-
-Date.prototype.isLeapYear = function() {
-    var year = this.getFullYear();
-    return !!((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
-};
-
-
-Date.prototype.getFirstDayOfMonth = function() {
-    var day = (this.getDay() - (this.getDate() - 1)) % 7;
-    return (day < 0) ? (day + 7) : day;
-};
-
-
-Date.prototype.getLastDayOfMonth = function() {
-    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
-    return (day < 0) ? (day + 7) : day;
-};
-
-
-
-Date.prototype.getFirstDateOfMonth = function() {
-    return new Date(this.getFullYear(), this.getMonth(), 1);
-};
-
-
-Date.prototype.getLastDateOfMonth = function() {
-    return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
-};
-
-Date.prototype.getDaysInMonth = function() {
-    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
-    return Date.daysInMonth[this.getMonth()];
-};
-
-
-Date.prototype.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";
-    }
-};
-
-Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
-
-
-Date.monthNames =
-   ["January",
-    "February",
-    "March",
-    "April",
-    "May",
-    "June",
-    "July",
-    "August",
-    "September",
-    "October",
-    "November",
-    "December"];
-
-
-Date.getShortMonthName = function(month) {
-    return Date.monthNames[month].substring(0, 3);
-}
-
-
-Date.dayNames =
-   ["Sunday",
-    "Monday",
-    "Tuesday",
-    "Wednesday",
-    "Thursday",
-    "Friday",
-    "Saturday"];
-
-
-Date.getShortDayName = function(day) {
-    return Date.dayNames[day].substring(0, 3);
-}
-
-Date.y2kYear = 50;
-
-
-Date.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};
-
-
-Date.getMonthNumber = function(name) {
-        return Date.monthNumbers[name.substring(0, 1).toUpperCase() + name.substring(1, 3).toLowerCase()];
-}
-
-
-Date.prototype.clone = function() {
-  return new Date(this.getTime());
-};
-
-
-Date.prototype.clearTime = function(clone){
-    if(clone){
-        return this.clone().clearTime();
-    }
-    this.setHours(0);
-    this.setMinutes(0);
-    this.setSeconds(0);
-    this.setMilliseconds(0);
-    return this;
-};
-
-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);
-    }
-  };
-}
-
-
-Date.MILLI = "ms";
-
-Date.SECOND = "s";
-
-Date.MINUTE = "mi";
-
-Date.HOUR = "h";
-
-Date.DAY = "d";
-
-Date.MONTH = "mo";
-
-Date.YEAR = "y";
-
-
-Date.prototype.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;
-};
-
-
-Date.prototype.between = function(start, end){
-    var t = this.getTime();
-    return start.getTime() <= t && t <= end.getTime();
-}
-
-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();
-\r
-Ext.util.MixedCollection = function(allowFunctions, keyFn){\r
-    this.items = [];\r
-    this.map = {};\r
-    this.keys = [];\r
-    this.length = 0;\r
-    this.addEvents(\r
-        \r
-        "clear",\r
-        \r
-        "add",\r
-        \r
-        "replace",\r
-        \r
-        "remove",\r
-        "sort"\r
-    );\r
-    this.allowFunctions = allowFunctions === true;\r
-    if(keyFn){\r
-        this.getKey = keyFn;\r
-    }\r
-    Ext.util.MixedCollection.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {\r
-    allowFunctions : false,\r
-\r
-\r
-    add : function(key, o){\r
-        if(arguments.length == 1){\r
-            o = arguments[0];\r
-            key = this.getKey(o);\r
-        }\r
-        if(typeof key == "undefined" || key === null){\r
-            this.length++;\r
-            this.items.push(o);\r
-            this.keys.push(null);\r
-        }else{\r
-            var old = this.map[key];\r
-            if(old){\r
-                return this.replace(key, o);\r
-            }\r
-            this.length++;\r
-            this.items.push(o);\r
-            this.map[key] = o;\r
-            this.keys.push(key);\r
-        }\r
-        this.fireEvent("add", this.length-1, o, key);\r
-        return o;\r
-    },\r
-\r
-\r
-    getKey : function(o){\r
-         return o.id;\r
-    },\r
-\r
-\r
-    replace : function(key, o){\r
-        if(arguments.length == 1){\r
-            o = arguments[0];\r
-            key = this.getKey(o);\r
-        }\r
-        var old = this.item(key);\r
-        if(typeof key == "undefined" || key === null || typeof old == "undefined"){\r
-             return this.add(key, o);\r
-        }\r
-        var index = this.indexOfKey(key);\r
-        this.items[index] = o;\r
-        this.map[key] = o;\r
-        this.fireEvent("replace", key, old, o);\r
-        return o;\r
-    },\r
-\r
-\r
-    addAll : function(objs){\r
-        if(arguments.length > 1 || Ext.isArray(objs)){\r
-            var args = arguments.length > 1 ? arguments : objs;\r
-            for(var i = 0, len = args.length; i < len; i++){\r
-                this.add(args[i]);\r
-            }\r
-        }else{\r
-            for(var key in objs){\r
-                if(this.allowFunctions || typeof objs[key] != "function"){\r
-                    this.add(key, objs[key]);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-\r
-    each : function(fn, scope){\r
-        var items = [].concat(this.items); 
-        for(var i = 0, len = items.length; i < len; i++){\r
-            if(fn.call(scope || items[i], items[i], i, len) === false){\r
-                break;\r
-            }\r
-        }\r
-    },\r
-\r
-\r
-    eachKey : function(fn, scope){\r
-        for(var i = 0, len = this.keys.length; i < len; i++){\r
-            fn.call(scope || window, this.keys[i], this.items[i], i, len);\r
-        }\r
-    },\r
-\r
-    \r
-    find : function(fn, scope){\r
-        for(var i = 0, len = this.items.length; i < len; i++){\r
-            if(fn.call(scope || window, this.items[i], this.keys[i])){\r
-                return this.items[i];\r
-            }\r
-        }\r
-        return null;\r
-    },\r
-\r
-\r
-    insert : function(index, key, o){\r
-        if(arguments.length == 2){\r
-            o = arguments[1];\r
-            key = this.getKey(o);\r
-        }\r
-        if(index >= this.length){\r
-            return this.add(key, o);\r
-        }\r
-        this.length++;\r
-        this.items.splice(index, 0, o);\r
-        if(typeof key != "undefined" && key != null){\r
-            this.map[key] = o;\r
-        }\r
-        this.keys.splice(index, 0, key);\r
-        this.fireEvent("add", index, o, key);\r
-        return o;\r
-    },\r
-\r
-\r
-    remove : function(o){\r
-        return this.removeAt(this.indexOf(o));\r
-    },\r
-\r
-\r
-    removeAt : function(index){\r
-        if(index < this.length && index >= 0){\r
-            this.length--;\r
-            var o = this.items[index];\r
-            this.items.splice(index, 1);\r
-            var key = this.keys[index];\r
-            if(typeof key != "undefined"){\r
-                delete this.map[key];\r
-            }\r
-            this.keys.splice(index, 1);\r
-            this.fireEvent("remove", o, key);\r
-            return o;\r
-        }\r
-        return false;\r
-    },\r
-\r
-\r
-    removeKey : function(key){\r
-        return this.removeAt(this.indexOfKey(key));\r
-    },\r
-\r
-\r
-    getCount : function(){\r
-        return this.length;\r
-    },\r
-\r
-\r
-    indexOf : function(o){\r
-        return this.items.indexOf(o);\r
-    },\r
-\r
-\r
-    indexOfKey : function(key){\r
-        return this.keys.indexOf(key);\r
-    },\r
-\r
-\r
-    item : function(key){\r
-        var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key];\r
-        return typeof item != 'function' || this.allowFunctions ? item : null; 
-    },\r
-\r
-\r
-    itemAt : function(index){\r
-        return this.items[index];\r
-    },\r
-\r
-\r
-    key : function(key){\r
-        return this.map[key];\r
-    },\r
-\r
-\r
-    contains : function(o){\r
-        return this.indexOf(o) != -1;\r
-    },\r
-\r
-\r
-    containsKey : function(key){\r
-        return typeof this.map[key] != "undefined";\r
-    },\r
-\r
-\r
-    clear : function(){\r
-        this.length = 0;\r
-        this.items = [];\r
-        this.keys = [];\r
-        this.map = {};\r
-        this.fireEvent("clear");\r
-    },\r
-\r
-\r
-    first : function(){\r
-        return this.items[0];\r
-    },\r
-\r
-\r
-    last : function(){\r
-        return this.items[this.length-1];\r
-    },\r
-\r
-    
-    _sort : function(property, dir, fn){\r
-        var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1;\r
-        fn = fn || function(a, b){\r
-            return a-b;\r
-        };\r
-        var c = [], k = this.keys, items = this.items;\r
-        for(var i = 0, len = items.length; i < len; i++){\r
-            c[c.length] = {key: k[i], value: items[i], index: i};\r
-        }\r
-        c.sort(function(a, b){\r
-            var v = fn(a[property], b[property]) * dsc;\r
-            if(v == 0){\r
-                v = (a.index < b.index ? -1 : 1);\r
-            }\r
-            return v;\r
-        });\r
-        for(var i = 0, len = c.length; i < len; i++){\r
-            items[i] = c[i].value;\r
-            k[i] = c[i].key;\r
-        }\r
-        this.fireEvent("sort", this);\r
-    },\r
-\r
-    \r
-    sort : function(dir, fn){\r
-        this._sort("value", dir, fn);\r
-    },\r
-\r
-    \r
-    keySort : function(dir, fn){\r
-        this._sort("key", dir, fn || function(a, b){\r
-            return String(a).toUpperCase()-String(b).toUpperCase();\r
-        });\r
-    },\r
-\r
-    \r
-    getRange : function(start, end){\r
-        var items = this.items;\r
-        if(items.length < 1){\r
-            return [];\r
-        }\r
-        start = start || 0;\r
-        end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);\r
-        var r = [];\r
-        if(start <= end){\r
-            for(var i = start; i <= end; i++) {\r
-                   r[r.length] = items[i];\r
-            }\r
-        }else{\r
-            for(var i = start; i >= end; i--) {\r
-                   r[r.length] = items[i];\r
-            }\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    filter : function(property, value, anyMatch, caseSensitive){\r
-        if(Ext.isEmpty(value, false)){\r
-            return this.clone();\r
-        }\r
-        value = this.createValueMatcher(value, anyMatch, caseSensitive);\r
-        return this.filterBy(function(o){\r
-            return o && value.test(o[property]);\r
-        });\r
-       },\r
-\r
-    \r
-    filterBy : function(fn, scope){\r
-        var r = new Ext.util.MixedCollection();\r
-        r.getKey = this.getKey;\r
-        var k = this.keys, it = this.items;\r
-        for(var i = 0, len = it.length; i < len; i++){\r
-            if(fn.call(scope||this, it[i], k[i])){\r
-                               r.add(k[i], it[i]);\r
-                       }\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    findIndex : function(property, value, start, anyMatch, caseSensitive){\r
-        if(Ext.isEmpty(value, false)){\r
-            return -1;\r
-        }\r
-        value = this.createValueMatcher(value, anyMatch, caseSensitive);\r
-        return this.findIndexBy(function(o){\r
-            return o && value.test(o[property]);\r
-        }, null, start);\r
-       },\r
-\r
-    \r
-    findIndexBy : function(fn, scope, start){\r
-        var k = this.keys, it = this.items;\r
-        for(var i = (start||0), len = it.length; i < len; i++){\r
-            if(fn.call(scope||this, it[i], k[i])){\r
-                               return i;\r
-            }\r
-        }\r
-        if(typeof start == 'number' && start > 0){\r
-            for(var i = 0; i < start; i++){\r
-                if(fn.call(scope||this, it[i], k[i])){\r
-                    return i;\r
-                }\r
-            }\r
-        }\r
-        return -1;\r
-    },\r
-\r
-    
-    createValueMatcher : function(value, anyMatch, caseSensitive){\r
-        if(!value.exec){ 
-            value = String(value);\r
-            value = new RegExp((anyMatch === true ? '' : '^') + Ext.escapeRe(value), caseSensitive ? '' : 'i');\r
-        }\r
-        return value;\r
-    },\r
-\r
-    \r
-    clone : function(){\r
-        var r = new Ext.util.MixedCollection();\r
-        var k = this.keys, it = this.items;\r
-        for(var i = 0, len = it.length; i < len; i++){\r
-            r.add(k[i], it[i]);\r
-        }\r
-        r.getKey = this.getKey;\r
-        return r;\r
-    }\r
-});\r
-\r
-Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
-\r
-Ext.util.JSON = new (function(){\r
-    var useHasOwn = {}.hasOwnProperty ? true : false;\r
-    \r
-    
-    
-    \r
-    var pad = function(n) {\r
-        return n < 10 ? "0" + n : n;\r
-    };\r
-    \r
-    var m = {\r
-        "\b": '\\b',\r
-        "\t": '\\t',\r
-        "\n": '\\n',\r
-        "\f": '\\f',\r
-        "\r": '\\r',\r
-        '"' : '\\"',\r
-        "\\": '\\\\'\r
-    };\r
-\r
-    var encodeString = function(s){\r
-        if (/["\\\x00-\x1f]/.test(s)) {\r
-            return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {\r
-                var c = m[b];\r
-                if(c){\r
-                    return c;\r
-                }\r
-                c = b.charCodeAt();\r
-                return "\\u00" +\r
-                    Math.floor(c / 16).toString(16) +\r
-                    (c % 16).toString(16);\r
-            }) + '"';\r
-        }\r
-        return '"' + s + '"';\r
-    };\r
-    \r
-    var encodeArray = function(o){\r
-        var a = ["["], b, i, l = o.length, v;\r
-            for (i = 0; i < l; i += 1) {\r
-                v = o[i];\r
-                switch (typeof v) {\r
-                    case "undefined":\r
-                    case "function":\r
-                    case "unknown":\r
-                        break;\r
-                    default:\r
-                        if (b) {\r
-                            a.push(',');\r
-                        }\r
-                        a.push(v === null ? "null" : Ext.util.JSON.encode(v));\r
-                        b = true;\r
-                }\r
-            }\r
-            a.push("]");\r
-            return a.join("");\r
-    };\r
-    \r
-    var encodeDate = function(o){\r
-        return '"' + o.getFullYear() + "-" +\r
-                pad(o.getMonth() + 1) + "-" +\r
-                pad(o.getDate()) + "T" +\r
-                pad(o.getHours()) + ":" +\r
-                pad(o.getMinutes()) + ":" +\r
-                pad(o.getSeconds()) + '"';\r
-    };\r
-    \r
-    \r
-    this.encode = function(o){\r
-        if(typeof o == "undefined" || o === null){\r
-            return "null";\r
-        }else if(Ext.isArray(o)){\r
-            return encodeArray(o);\r
-        }else if(Ext.isDate(o)){\r
-            return encodeDate(o);\r
-        }else if(typeof o == "string"){\r
-            return encodeString(o);\r
-        }else if(typeof o == "number"){\r
-            return isFinite(o) ? String(o) : "null";\r
-        }else if(typeof o == "boolean"){\r
-            return String(o);\r
-        }else {\r
-            var a = ["{"], b, i, v;\r
-            for (i in o) {\r
-                if(!useHasOwn || o.hasOwnProperty(i)) {\r
-                    v = o[i];\r
-                    switch (typeof v) {\r
-                    case "undefined":\r
-                    case "function":\r
-                    case "unknown":\r
-                        break;\r
-                    default:\r
-                        if(b){\r
-                            a.push(',');\r
-                        }\r
-                        a.push(this.encode(i), ":",\r
-                                v === null ? "null" : this.encode(v));\r
-                        b = true;\r
-                    }\r
-                }\r
-            }\r
-            a.push("}");\r
-            return a.join("");\r
-        }\r
-    };\r
-    \r
-    \r
-    this.decode = function(json){\r
-        return eval("(" + json + ')');\r
-    };\r
-})();\r
-\r
-Ext.encode = Ext.util.JSON.encode;\r
-\r
-Ext.decode = Ext.util.JSON.decode;\r
-
-\r
-Ext.util.Format = function(){\r
-    var trimRe = /^\s+|\s+$/g;\r
-    return {\r
-        \r
-        ellipsis : function(value, len){\r
-            if(value && value.length > len){\r
-                return value.substr(0, len-3)+"...";\r
-            }\r
-            return value;\r
-        },\r
-\r
-        \r
-        undef : function(value){\r
-            return value !== undefined ? value : "";\r
-        },\r
-\r
-        \r
-        defaultValue : function(value, defaultValue){\r
-            return value !== undefined && value !== '' ? value : defaultValue;\r
-        },\r
-\r
-        \r
-        htmlEncode : function(value){\r
-            return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");\r
-        },\r
-\r
-        \r
-        htmlDecode : function(value){\r
-            return !value ? value : String(value).replace(/&amp;/g, "&").replace(/&gt;/g, ">").replace(/&lt;/g, "<").replace(/&quot;/g, '"');\r
-        },\r
-\r
-        \r
-        trim : function(value){\r
-            return String(value).replace(trimRe, "");\r
-        },\r
-\r
-        \r
-        substr : function(value, start, length){\r
-            return String(value).substr(start, length);\r
-        },\r
-\r
-        \r
-        lowercase : function(value){\r
-            return String(value).toLowerCase();\r
-        },\r
-\r
-        \r
-        uppercase : function(value){\r
-            return String(value).toUpperCase();\r
-        },\r
-\r
-        \r
-        capitalize : function(value){\r
-            return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();\r
-        },\r
-\r
-        
-        call : function(value, fn){\r
-            if(arguments.length > 2){\r
-                var args = Array.prototype.slice.call(arguments, 2);\r
-                args.unshift(value);\r
-                return eval(fn).apply(window, args);\r
-            }else{\r
-                return eval(fn).call(window, value);\r
-            }\r
-        },\r
-\r
-        \r
-        usMoney : function(v){\r
-            v = (Math.round((v-0)*100))/100;\r
-            v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);\r
-            v = String(v);\r
-            var ps = v.split('.');\r
-            var whole = ps[0];\r
-            var sub = ps[1] ? '.'+ ps[1] : '.00';\r
-            var r = /(\d+)(\d{3})/;\r
-            while (r.test(whole)) {\r
-                whole = whole.replace(r, '$1' + ',' + '$2');\r
-            }\r
-            v = whole + sub;\r
-            if(v.charAt(0) == '-'){\r
-                return '-$' + v.substr(1);\r
-            }\r
-            return "$" +  v;\r
-        },\r
-\r
-        \r
-        date : function(v, format){\r
-            if(!v){\r
-                return "";\r
-            }\r
-            if(!Ext.isDate(v)){\r
-                v = new Date(Date.parse(v));\r
-            }\r
-            return v.dateFormat(format || "m/d/Y");\r
-        },\r
-\r
-        \r
-        dateRenderer : function(format){\r
-            return function(v){\r
-                return Ext.util.Format.date(v, format);\r
-            };\r
-        },\r
-\r
-        
-        stripTagsRE : /<\/?[^>]+>/gi,\r
-        \r
-        \r
-        stripTags : function(v){\r
-            return !v ? v : String(v).replace(this.stripTagsRE, "");\r
-        },\r
-\r
-        stripScriptsRe : /(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,\r
-\r
-        \r
-        stripScripts : function(v){\r
-            return !v ? v : String(v).replace(this.stripScriptsRe, "");\r
-        },\r
-\r
-        \r
-        fileSize : function(size){\r
-            if(size < 1024) {\r
-                return size + " bytes";\r
-            } else if(size < 1048576) {\r
-                return (Math.round(((size*10) / 1024))/10) + " KB";\r
-            } else {\r
-                return (Math.round(((size*10) / 1048576))/10) + " MB";\r
-            }\r
-        },\r
-\r
-        math : function(){\r
-            var fns = {};\r
-            return function(v, a){\r
-                if(!fns[a]){\r
-                    fns[a] = new Function('v', 'return v ' + a + ';');\r
-                }\r
-                return fns[a](v);\r
-            }\r
-        }()\r
-    };\r
-}();
-\r
-Ext.XTemplate = function(){\r
-    Ext.XTemplate.superclass.constructor.apply(this, arguments);\r
-    var s = this.html;\r
-\r
-    s = ['<tpl>', s, '</tpl>'].join('');\r
-\r
-    var re = /<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/;\r
-\r
-    var nameRe = /^<tpl\b[^>]*?for="(.*?)"/;\r
-    var ifRe = /^<tpl\b[^>]*?if="(.*?)"/;\r
-    var execRe = /^<tpl\b[^>]*?exec="(.*?)"/;\r
-    var m, id = 0;\r
-    var tpls = [];\r
-\r
-    while(m = s.match(re)){\r
-       var m2 = m[0].match(nameRe);\r
-       var m3 = m[0].match(ifRe);\r
-       var m4 = m[0].match(execRe);\r
-       var exp = null, fn = null, exec = null;\r
-       var name = m2 && m2[1] ? m2[1] : '';\r
-       if(m3){\r
-           exp = m3 && m3[1] ? m3[1] : null;\r
-           if(exp){\r
-               fn = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ return '+(Ext.util.Format.htmlDecode(exp))+'; }');\r
-           }\r
-       }\r
-       if(m4){\r
-           exp = m4 && m4[1] ? m4[1] : null;\r
-           if(exp){\r
-               exec = new Function('values', 'parent', 'xindex', 'xcount', 'with(values){ '+(Ext.util.Format.htmlDecode(exp))+'; }');\r
-           }\r
-       }\r
-       if(name){\r
-           switch(name){\r
-               case '.': name = new Function('values', 'parent', 'with(values){ return values; }'); break;\r
-               case '..': name = new Function('values', 'parent', 'with(values){ return parent; }'); break;\r
-               default: name = new Function('values', 'parent', 'with(values){ return '+name+'; }');\r
-           }\r
-       }\r
-       tpls.push({\r
-            id: id,\r
-            target: name,\r
-            exec: exec,\r
-            test: fn,\r
-            body: m[1]||''\r
-        });\r
-       s = s.replace(m[0], '{xtpl'+ id + '}');\r
-       ++id;\r
-    }\r
-    for(var i = tpls.length-1; i >= 0; --i){\r
-        this.compileTpl(tpls[i]);\r
-    }\r
-    this.master = tpls[tpls.length-1];\r
-    this.tpls = tpls;\r
-};\r
-Ext.extend(Ext.XTemplate, Ext.Template, {\r
-    
-    re : /\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,\r
-    
-    codeRe : /\{\[((?:\\\]|.|\n)*?)\]\}/g,\r
-\r
-    
-    applySubTemplate : function(id, values, parent, xindex, xcount){\r
-        var t = this.tpls[id];\r
-        if(t.test && !t.test.call(this, values, parent, xindex, xcount)){\r
-            return '';\r
-        }\r
-        if(t.exec && t.exec.call(this, values, parent, xindex, xcount)){\r
-            return '';\r
-        }\r
-        var vs = t.target ? t.target.call(this, values, parent) : values;\r
-        parent = t.target ? values : parent;\r
-        if(t.target && Ext.isArray(vs)){\r
-            var buf = [];\r
-            for(var i = 0, len = vs.length; i < len; i++){\r
-                buf[buf.length] = t.compiled.call(this, vs[i], parent, i+1, len);\r
-            }\r
-            return buf.join('');\r
-        }\r
-        return t.compiled.call(this, vs, parent, xindex, xcount);\r
-    },\r
-\r
-    
-    compileTpl : function(tpl){\r
-        var fm = Ext.util.Format;\r
-        var useF = this.disableFormats !== true;\r
-        var sep = Ext.isGecko ? "+" : ",";\r
-        var fn = function(m, name, format, args, math){\r
-            if(name.substr(0, 4) == 'xtpl'){\r
-                return "'"+ sep +'this.applySubTemplate('+name.substr(4)+', values, parent, xindex, xcount)'+sep+"'";\r
-            }\r
-            var v;\r
-            if(name === '.'){\r
-                v = 'values';\r
-            }else if(name === '#'){\r
-                v = 'xindex';\r
-            }else if(name.indexOf('.') != -1){\r
-                v = name;\r
-            }else{\r
-                v = "values['" + name + "']";\r
-            }\r
-            if(math){\r
-                v = '(' + v + math + ')';\r
-            }\r
-            if(format && useF){\r
-                args = args ? ',' + args : "";\r
-                if(format.substr(0, 5) != "this."){\r
-                    format = "fm." + format + '(';\r
-                }else{\r
-                    format = 'this.call("'+ format.substr(5) + '", ';\r
-                    args = ", values";\r
-                }\r
-            }else{\r
-                args= ''; format = "("+v+" === undefined ? '' : ";\r
-            }\r
-            return "'"+ sep + format + v + args + ")"+sep+"'";\r
-        };\r
-        var codeFn = function(m, code){\r
-            return "'"+ sep +'('+code+')'+sep+"'";\r
-        };\r
-\r
-        var body;\r
-        
-        if(Ext.isGecko){\r
-            body = "tpl.compiled = function(values, parent, xindex, xcount){ return '" +\r
-                   tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn) +\r
-                    "';};";\r
-        }else{\r
-            body = ["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];\r
-            body.push(tpl.body.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn).replace(this.codeRe, codeFn));\r
-            body.push("'].join('');};");\r
-            body = body.join('');\r
-        }\r
-        eval(body);\r
-        return this;\r
-    },\r
-\r
-    \r
-    apply : function(values){\r
-        return this.master.compiled.call(this, values, {}, 1, 1);\r
-    },\r
-\r
-    \r
-    applyTemplate : function(values){\r
-        return this.master.compiled.call(this, values, {}, 1, 1);\r
-    },\r
-\r
-    \r
-    compile : function(){return this;}\r
-\r
-    \r
-    \r
-    \r
-    \r
-});\r
-\r
-\r
-Ext.XTemplate.from = function(el){\r
-    el = Ext.getDom(el);\r
-    return new Ext.XTemplate(el.value || el.innerHTML);\r
-};
-\r
-Ext.util.CSS = function(){\r
-       var rules = null;\r
-       var doc = document;\r
-\r
-    var camelRe = /(-[a-z])/gi;\r
-    var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };\r
-\r
-   return {\r
-   \r
-   createStyleSheet : function(cssText, id){\r
-       var ss;\r
-       var head = doc.getElementsByTagName("head")[0];\r
-       var rules = doc.createElement("style");\r
-       rules.setAttribute("type", "text/css");\r
-       if(id){\r
-           rules.setAttribute("id", id);\r
-       }\r
-       if(Ext.isIE){\r
-           head.appendChild(rules);\r
-           ss = rules.styleSheet;\r
-           ss.cssText = cssText;\r
-       }else{\r
-           try{\r
-                rules.appendChild(doc.createTextNode(cssText));\r
-           }catch(e){\r
-               rules.cssText = cssText;\r
-           }\r
-           head.appendChild(rules);\r
-           ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);\r
-       }\r
-       this.cacheStyleSheet(ss);\r
-       return ss;\r
-   },\r
-\r
-   \r
-   removeStyleSheet : function(id){\r
-       var existing = doc.getElementById(id);\r
-       if(existing){\r
-           existing.parentNode.removeChild(existing);\r
-       }\r
-   },\r
-\r
-   \r
-   swapStyleSheet : function(id, url){\r
-       this.removeStyleSheet(id);\r
-       var ss = doc.createElement("link");\r
-       ss.setAttribute("rel", "stylesheet");\r
-       ss.setAttribute("type", "text/css");\r
-       ss.setAttribute("id", id);\r
-       ss.setAttribute("href", url);\r
-       doc.getElementsByTagName("head")[0].appendChild(ss);\r
-   },\r
-   \r
-   \r
-   refreshCache : function(){\r
-       return this.getRules(true);\r
-   },\r
-\r
-   
-   cacheStyleSheet : function(ss){\r
-       if(!rules){\r
-           rules = {};\r
-       }\r
-       try{
-           var ssRules = ss.cssRules || ss.rules;\r
-           for(var j = ssRules.length-1; j >= 0; --j){\r
-               rules[ssRules[j].selectorText] = ssRules[j];\r
-           }\r
-       }catch(e){}\r
-   },\r
-   \r
-   \r
-   getRules : function(refreshCache){\r
-               if(rules == null || refreshCache){\r
-                       rules = {};\r
-                       var ds = doc.styleSheets;\r
-                       for(var i =0, len = ds.length; i < len; i++){\r
-                           try{\r
-                       this.cacheStyleSheet(ds[i]);\r
-                   }catch(e){} \r
-               }\r
-               }\r
-               return rules;\r
-       },\r
-       \r
-       \r
-   getRule : function(selector, refreshCache){\r
-               var rs = this.getRules(refreshCache);\r
-               if(!Ext.isArray(selector)){\r
-                   return rs[selector];\r
-               }\r
-               for(var i = 0; i < selector.length; i++){\r
-                       if(rs[selector[i]]){\r
-                               return rs[selector[i]];\r
-                       }\r
-               }\r
-               return null;\r
-       },\r
-       \r
-       \r
-       \r
-   updateRule : function(selector, property, value){\r
-               if(!Ext.isArray(selector)){\r
-                       var rule = this.getRule(selector);\r
-                       if(rule){\r
-                               rule.style[property.replace(camelRe, camelFn)] = value;\r
-                               return true;\r
-                       }\r
-               }else{\r
-                       for(var i = 0; i < selector.length; i++){\r
-                               if(this.updateRule(selector[i], property, value)){\r
-                                       return true;\r
-                               }\r
-                       }\r
-               }\r
-               return false;\r
-       }\r
-   };  \r
-}();
-
-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);
-        if(this.pressClass){
-            this.el.addClass(this.pressClass);
-        }
-        this.click();
-    },
-
-        handleMouseUp : function(){
-        clearTimeout(this.timer);
-        this.el.un("mouseover", this.handleMouseReturn);
-        this.el.un("mouseout", this.handleMouseOut);
-        Ext.getDoc().un("mouseup", this.handleMouseUp);
-        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.isSafari && 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.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.isAir){
-                this.el.un("keydown", this.relay);
-            }else{
-                this.el.un("keydown", this.prepareEvent);
-                this.el.un("keypress", this.relay);
-            }
-                   this.disabled = true;
-               }
-       }
-};
-\r
-Ext.KeyMap = function(el, config, eventName){\r
-    this.el  = Ext.get(el);\r
-    this.eventName = eventName || "keydown";\r
-    this.bindings = [];\r
-    if(config){\r
-        this.addBinding(config);\r
-    }\r
-    this.enable();\r
-};\r
-\r
-Ext.KeyMap.prototype = {\r
-    \r
-    stopEvent : false,\r
-\r
-    \r
-       addBinding : function(config){\r
-        if(Ext.isArray(config)){\r
-            for(var i = 0, len = config.length; i < len; i++){\r
-                this.addBinding(config[i]);\r
-            }\r
-            return;\r
-        }\r
-        var keyCode = config.key,\r
-            shift = config.shift,\r
-            ctrl = config.ctrl,\r
-            alt = config.alt,\r
-            fn = config.fn || config.handler,\r
-            scope = config.scope;\r
-\r
-        if(typeof keyCode == "string"){\r
-            var ks = [];\r
-            var keyString = keyCode.toUpperCase();\r
-            for(var j = 0, len = keyString.length; j < len; j++){\r
-                ks.push(keyString.charCodeAt(j));\r
-            }\r
-            keyCode = ks;\r
-        }\r
-        var keyArray = Ext.isArray(keyCode);\r
-        \r
-        var handler = function(e){\r
-            if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){\r
-                var k = e.getKey();\r
-                if(keyArray){\r
-                    for(var i = 0, len = keyCode.length; i < len; i++){\r
-                        if(keyCode[i] == k){\r
-                          if(this.stopEvent){\r
-                              e.stopEvent();\r
-                          }\r
-                          fn.call(scope || window, k, e);\r
-                          return;\r
-                        }\r
-                    }\r
-                }else{\r
-                    if(k == keyCode){\r
-                        if(this.stopEvent){\r
-                           e.stopEvent();\r
-                        }\r
-                        fn.call(scope || window, k, e);\r
-                    }\r
-                }\r
-            }\r
-        };\r
-        this.bindings.push(handler);\r
-       },\r
-\r
-    \r
-    on : function(key, fn, scope){\r
-        var keyCode, shift, ctrl, alt;\r
-        if(typeof key == "object" && !Ext.isArray(key)){\r
-            keyCode = key.key;\r
-            shift = key.shift;\r
-            ctrl = key.ctrl;\r
-            alt = key.alt;\r
-        }else{\r
-            keyCode = key;\r
-        }\r
-        this.addBinding({\r
-            key: keyCode,\r
-            shift: shift,\r
-            ctrl: ctrl,\r
-            alt: alt,\r
-            fn: fn,\r
-            scope: scope\r
-        })\r
-    },\r
-\r
-    
-    handleKeyDown : function(e){\r
-           if(this.enabled){ 
-           var b = this.bindings;\r
-           for(var i = 0, len = b.length; i < len; i++){\r
-               b[i].call(this, e);\r
-           }\r
-           }\r
-       },\r
-\r
-       \r
-       isEnabled : function(){\r
-           return this.enabled;\r
-       },\r
-\r
-       \r
-       enable: function(){\r
-               if(!this.enabled){\r
-                   this.el.on(this.eventName, this.handleKeyDown, this);\r
-                   this.enabled = true;\r
-               }\r
-       },\r
-\r
-       \r
-       disable: function(){\r
-               if(this.enabled){\r
-                   this.el.removeListener(this.eventName, this.handleKeyDown, this);\r
-                   this.enabled = false;\r
-               }\r
-       }\r
-};
-
-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')
-            );
-        },
-
-        
-        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;
-\r
-\r
-(function() {\r
-\r
-var Event=Ext.EventManager;\r
-var Dom=Ext.lib.Dom;\r
-\r
-\r
-Ext.dd.DragDrop = function(id, sGroup, config) {\r
-    if(id) {\r
-        this.init(id, sGroup, config);\r
-    }\r
-};\r
-\r
-Ext.dd.DragDrop.prototype = {\r
-\r
-    \r
-    id: null,\r
-\r
-    \r
-    config: null,\r
-\r
-    \r
-    dragElId: null,\r
-\r
-    \r
-    handleElId: null,\r
-\r
-    \r
-    invalidHandleTypes: null,\r
-\r
-    \r
-    invalidHandleIds: null,\r
-\r
-    \r
-    invalidHandleClasses: null,\r
-\r
-    \r
-    startPageX: 0,\r
-\r
-    \r
-    startPageY: 0,\r
-\r
-    \r
-    groups: null,\r
-\r
-    \r
-    locked: false,\r
-\r
-    \r
-    lock: function() { this.locked = true; },\r
-\r
-    \r
-    unlock: function() { this.locked = false; },\r
-\r
-    \r
-    isTarget: true,\r
-\r
-    \r
-    padding: null,\r
-\r
-    \r
-    _domRef: null,\r
-\r
-    \r
-    __ygDragDrop: true,\r
-\r
-    \r
-    constrainX: false,\r
-\r
-    \r
-    constrainY: false,\r
-\r
-    \r
-    minX: 0,\r
-\r
-    \r
-    maxX: 0,\r
-\r
-    \r
-    minY: 0,\r
-\r
-    \r
-    maxY: 0,\r
-\r
-    \r
-    maintainOffset: false,\r
-\r
-    \r
-    xTicks: null,\r
-\r
-    \r
-    yTicks: null,\r
-\r
-    \r
-    primaryButtonOnly: true,\r
-\r
-    \r
-    available: false,\r
-\r
-    \r
-    hasOuterHandles: false,\r
-\r
-    \r
-    b4StartDrag: function(x, y) { },\r
-\r
-    \r
-    startDrag: function(x, y) {  },\r
-\r
-    \r
-    b4Drag: function(e) { },\r
-\r
-    \r
-    onDrag: function(e) {  },\r
-\r
-    \r
-    onDragEnter: function(e, id) {  },\r
-\r
-    \r
-    b4DragOver: function(e) { },\r
-\r
-    \r
-    onDragOver: function(e, id) {  },\r
-\r
-    \r
-    b4DragOut: function(e) { },\r
-\r
-    \r
-    onDragOut: function(e, id) {  },\r
-\r
-    \r
-    b4DragDrop: function(e) { },\r
-\r
-    \r
-    onDragDrop: function(e, id) {  },\r
-\r
-    \r
-    onInvalidDrop: function(e) {  },\r
-\r
-    \r
-    b4EndDrag: function(e) { },\r
-\r
-    \r
-    endDrag: function(e) {  },\r
-\r
-    \r
-    b4MouseDown: function(e) {  },\r
-\r
-    \r
-    onMouseDown: function(e) {  },\r
-\r
-    \r
-    onMouseUp: function(e) {  },\r
-\r
-    \r
-    onAvailable: function () {\r
-    },\r
-\r
-    \r
-    defaultPadding : {left:0, right:0, top:0, bottom:0},\r
-\r
-    \r
-    constrainTo : function(constrainTo, pad, inContent){\r
-        if(typeof pad == "number"){\r
-            pad = {left: pad, right:pad, top:pad, bottom:pad};\r
-        }\r
-        pad = pad || this.defaultPadding;\r
-        var b = Ext.get(this.getEl()).getBox();\r
-        var ce = Ext.get(constrainTo);\r
-        var s = ce.getScroll();\r
-        var c, cd = ce.dom;\r
-        if(cd == document.body){\r
-            c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};\r
-        }else{\r
-            var xy = ce.getXY();\r
-            c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight};\r
-        }\r
-\r
-\r
-        var topSpace = b.y - c.y;\r
-        var leftSpace = b.x - c.x;\r
-\r
-        this.resetConstraints();\r
-        this.setXConstraint(leftSpace - (pad.left||0), 
-                c.width - leftSpace - b.width - (pad.right||0), 
-                               this.xTickSize\r
-        );\r
-        this.setYConstraint(topSpace - (pad.top||0), 
-                c.height - topSpace - b.height - (pad.bottom||0), 
-                               this.yTickSize\r
-        );\r
-    },\r
-\r
-    \r
-    getEl: function() {\r
-        if (!this._domRef) {\r
-            this._domRef = Ext.getDom(this.id);\r
-        }\r
-\r
-        return this._domRef;\r
-    },\r
-\r
-    \r
-    getDragEl: function() {\r
-        return Ext.getDom(this.dragElId);\r
-    },\r
-\r
-    \r
-    init: function(id, sGroup, config) {\r
-        this.initTarget(id, sGroup, config);\r
-        Event.on(this.id, "mousedown", this.handleMouseDown, this);\r
-        
-    },\r
-\r
-    \r
-    initTarget: function(id, sGroup, config) {\r
-\r
-        
-        this.config = config || {};\r
-\r
-        
-        this.DDM = Ext.dd.DDM;\r
-        
-        this.groups = {};\r
-\r
-        
-        
-        if (typeof id !== "string") {\r
-            id = Ext.id(id);\r
-        }\r
-\r
-        
-        this.id = id;\r
-\r
-        
-        this.addToGroup((sGroup) ? sGroup : "default");\r
-\r
-        
-        
-        this.handleElId = id;\r
-\r
-        
-        this.setDragElId(id);\r
-\r
-        
-        this.invalidHandleTypes = { A: "A" };\r
-        this.invalidHandleIds = {};\r
-        this.invalidHandleClasses = [];\r
-\r
-        this.applyConfig();\r
-\r
-        this.handleOnAvailable();\r
-    },\r
-\r
-    \r
-    applyConfig: function() {\r
-\r
-        
-        
-        this.padding           = this.config.padding || [0, 0, 0, 0];\r
-        this.isTarget          = (this.config.isTarget !== false);\r
-        this.maintainOffset    = (this.config.maintainOffset);\r
-        this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);\r
-\r
-    },\r
-\r
-    \r
-    handleOnAvailable: function() {\r
-        this.available = true;\r
-        this.resetConstraints();\r
-        this.onAvailable();\r
-    },\r
-\r
-     \r
-    setPadding: function(iTop, iRight, iBot, iLeft) {\r
-        
-        if (!iRight && 0 !== iRight) {\r
-            this.padding = [iTop, iTop, iTop, iTop];\r
-        } else if (!iBot && 0 !== iBot) {\r
-            this.padding = [iTop, iRight, iTop, iRight];\r
-        } else {\r
-            this.padding = [iTop, iRight, iBot, iLeft];\r
-        }\r
-    },\r
-\r
-    \r
-    setInitPosition: function(diffX, diffY) {\r
-        var el = this.getEl();\r
-\r
-        if (!this.DDM.verifyEl(el)) {\r
-            return;\r
-        }\r
-\r
-        var dx = diffX || 0;\r
-        var dy = diffY || 0;\r
-\r
-        var p = Dom.getXY( el );\r
-\r
-        this.initPageX = p[0] - dx;\r
-        this.initPageY = p[1] - dy;\r
-\r
-        this.lastPageX = p[0];\r
-        this.lastPageY = p[1];\r
-\r
-\r
-        this.setStartPosition(p);\r
-    },\r
-\r
-    \r
-    setStartPosition: function(pos) {\r
-        var p = pos || Dom.getXY( this.getEl() );\r
-        this.deltaSetXY = null;\r
-\r
-        this.startPageX = p[0];\r
-        this.startPageY = p[1];\r
-    },\r
-\r
-    \r
-    addToGroup: function(sGroup) {\r
-        this.groups[sGroup] = true;\r
-        this.DDM.regDragDrop(this, sGroup);\r
-    },\r
-\r
-    \r
-    removeFromGroup: function(sGroup) {\r
-        if (this.groups[sGroup]) {\r
-            delete this.groups[sGroup];\r
-        }\r
-\r
-        this.DDM.removeDDFromGroup(this, sGroup);\r
-    },\r
-\r
-    \r
-    setDragElId: function(id) {\r
-        this.dragElId = id;\r
-    },\r
-\r
-    \r
-    setHandleElId: function(id) {\r
-        if (typeof id !== "string") {\r
-            id = Ext.id(id);\r
-        }\r
-        this.handleElId = id;\r
-        this.DDM.regHandle(this.id, id);\r
-    },\r
-\r
-    \r
-    setOuterHandleElId: function(id) {\r
-        if (typeof id !== "string") {\r
-            id = Ext.id(id);\r
-        }\r
-        Event.on(id, "mousedown",\r
-                this.handleMouseDown, this);\r
-        this.setHandleElId(id);\r
-\r
-        this.hasOuterHandles = true;\r
-    },\r
-\r
-    \r
-    unreg: function() {\r
-        Event.un(this.id, "mousedown",\r
-                this.handleMouseDown);\r
-        this._domRef = null;\r
-        this.DDM._remove(this);\r
-    },\r
-\r
-    destroy : function(){\r
-        this.unreg();\r
-    },\r
-\r
-    \r
-    isLocked: function() {\r
-        return (this.DDM.isLocked() || this.locked);\r
-    },\r
-\r
-    \r
-    handleMouseDown: function(e, oDD){\r
-        if (this.primaryButtonOnly && e.button != 0) {\r
-            return;\r
-        }\r
-\r
-        if (this.isLocked()) {\r
-            return;\r
-        }\r
-\r
-        this.DDM.refreshCache(this.groups);\r
-\r
-        var pt = new Ext.lib.Point(Ext.lib.Event.getPageX(e), Ext.lib.Event.getPageY(e));\r
-        if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) )  {\r
-        } else {\r
-            if (this.clickValidator(e)) {\r
-\r
-                
-                this.setStartPosition();\r
-\r
-\r
-                this.b4MouseDown(e);\r
-                this.onMouseDown(e);\r
-\r
-                this.DDM.handleMouseDown(e, this);\r
-\r
-                this.DDM.stopEvent(e);\r
-            } else {\r
-\r
-\r
-            }\r
-        }\r
-    },\r
-\r
-    clickValidator: function(e) {\r
-        var target = e.getTarget();\r
-        return ( this.isValidHandleChild(target) &&\r
-                    (this.id == this.handleElId ||\r
-                        this.DDM.handleWasClicked(target, this.id)) );\r
-    },\r
-\r
-    \r
-    addInvalidHandleType: function(tagName) {\r
-        var type = tagName.toUpperCase();\r
-        this.invalidHandleTypes[type] = type;\r
-    },\r
-\r
-    \r
-    addInvalidHandleId: function(id) {\r
-        if (typeof id !== "string") {\r
-            id = Ext.id(id);\r
-        }\r
-        this.invalidHandleIds[id] = id;\r
-    },\r
-\r
-    \r
-    addInvalidHandleClass: function(cssClass) {\r
-        this.invalidHandleClasses.push(cssClass);\r
-    },\r
-\r
-    \r
-    removeInvalidHandleType: function(tagName) {\r
-        var type = tagName.toUpperCase();\r
-        
-        delete this.invalidHandleTypes[type];\r
-    },\r
-\r
-    \r
-    removeInvalidHandleId: function(id) {\r
-        if (typeof id !== "string") {\r
-            id = Ext.id(id);\r
-        }\r
-        delete this.invalidHandleIds[id];\r
-    },\r
-\r
-    \r
-    removeInvalidHandleClass: function(cssClass) {\r
-        for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {\r
-            if (this.invalidHandleClasses[i] == cssClass) {\r
-                delete this.invalidHandleClasses[i];\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    isValidHandleChild: function(node) {\r
-\r
-        var valid = true;\r
-        
-        var nodeName;\r
-        try {\r
-            nodeName = node.nodeName.toUpperCase();\r
-        } catch(e) {\r
-            nodeName = node.nodeName;\r
-        }\r
-        valid = valid && !this.invalidHandleTypes[nodeName];\r
-        valid = valid && !this.invalidHandleIds[node.id];\r
-\r
-        for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {\r
-            valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);\r
-        }\r
-\r
-\r
-        return valid;\r
-\r
-    },\r
-\r
-    \r
-    setXTicks: function(iStartX, iTickSize) {\r
-        this.xTicks = [];\r
-        this.xTickSize = iTickSize;\r
-\r
-        var tickMap = {};\r
-\r
-        for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {\r
-            if (!tickMap[i]) {\r
-                this.xTicks[this.xTicks.length] = i;\r
-                tickMap[i] = true;\r
-            }\r
-        }\r
-\r
-        for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {\r
-            if (!tickMap[i]) {\r
-                this.xTicks[this.xTicks.length] = i;\r
-                tickMap[i] = true;\r
-            }\r
-        }\r
-\r
-        this.xTicks.sort(this.DDM.numericSort) ;\r
-    },\r
-\r
-    \r
-    setYTicks: function(iStartY, iTickSize) {\r
-        this.yTicks = [];\r
-        this.yTickSize = iTickSize;\r
-\r
-        var tickMap = {};\r
-\r
-        for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {\r
-            if (!tickMap[i]) {\r
-                this.yTicks[this.yTicks.length] = i;\r
-                tickMap[i] = true;\r
-            }\r
-        }\r
-\r
-        for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {\r
-            if (!tickMap[i]) {\r
-                this.yTicks[this.yTicks.length] = i;\r
-                tickMap[i] = true;\r
-            }\r
-        }\r
-\r
-        this.yTicks.sort(this.DDM.numericSort) ;\r
-    },\r
-\r
-    \r
-    setXConstraint: function(iLeft, iRight, iTickSize) {\r
-        this.leftConstraint = iLeft;\r
-        this.rightConstraint = iRight;\r
-\r
-        this.minX = this.initPageX - iLeft;\r
-        this.maxX = this.initPageX + iRight;\r
-        if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }\r
-\r
-        this.constrainX = true;\r
-    },\r
-\r
-    \r
-    clearConstraints: function() {\r
-        this.constrainX = false;\r
-        this.constrainY = false;\r
-        this.clearTicks();\r
-    },\r
-\r
-    \r
-    clearTicks: function() {\r
-        this.xTicks = null;\r
-        this.yTicks = null;\r
-        this.xTickSize = 0;\r
-        this.yTickSize = 0;\r
-    },\r
-\r
-    \r
-    setYConstraint: function(iUp, iDown, iTickSize) {\r
-        this.topConstraint = iUp;\r
-        this.bottomConstraint = iDown;\r
-\r
-        this.minY = this.initPageY - iUp;\r
-        this.maxY = this.initPageY + iDown;\r
-        if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }\r
-\r
-        this.constrainY = true;\r
-\r
-    },\r
-\r
-    \r
-    resetConstraints: function() {\r
-\r
-\r
-        
-        if (this.initPageX || this.initPageX === 0) {\r
-            
-            var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;\r
-            var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;\r
-\r
-            this.setInitPosition(dx, dy);\r
-\r
-        
-        } else {\r
-            this.setInitPosition();\r
-        }\r
-\r
-        if (this.constrainX) {\r
-            this.setXConstraint( this.leftConstraint,\r
-                                 this.rightConstraint,\r
-                                 this.xTickSize        );\r
-        }\r
-\r
-        if (this.constrainY) {\r
-            this.setYConstraint( this.topConstraint,\r
-                                 this.bottomConstraint,\r
-                                 this.yTickSize         );\r
-        }\r
-    },\r
-\r
-    \r
-    getTick: function(val, tickArray) {\r
-\r
-        if (!tickArray) {\r
-            
-            
-            return val;\r
-        } else if (tickArray[0] >= val) {\r
-            
-            
-            return tickArray[0];\r
-        } else {\r
-            for (var i=0, len=tickArray.length; i<len; ++i) {\r
-                var next = i + 1;\r
-                if (tickArray[next] && tickArray[next] >= val) {\r
-                    var diff1 = val - tickArray[i];\r
-                    var diff2 = tickArray[next] - val;\r
-                    return (diff2 > diff1) ? tickArray[i] : tickArray[next];\r
-                }\r
-            }\r
-\r
-            
-            
-            return tickArray[tickArray.length - 1];\r
-        }\r
-    },\r
-\r
-    \r
-    toString: function() {\r
-        return ("DragDrop " + this.id);\r
-    }\r
-\r
-};\r
-\r
-})();\r
-\r
-\r
-
-
-if (!Ext.dd.DragDropMgr) {\r
-\r
-\r
-Ext.dd.DragDropMgr = function() {\r
-\r
-    var Event = Ext.EventManager;\r
-\r
-    return {\r
-\r
-        \r
-        ids: {},\r
-\r
-        \r
-        handleIds: {},\r
-\r
-        \r
-        dragCurrent: null,\r
-\r
-        \r
-        dragOvers: {},\r
-\r
-        \r
-        deltaX: 0,\r
-\r
-        \r
-        deltaY: 0,\r
-\r
-        \r
-        preventDefault: true,\r
-\r
-        \r
-        stopPropagation: true,\r
-\r
-        \r
-        initalized: false,\r
-\r
-        \r
-        locked: false,\r
-\r
-        \r
-        init: function() {\r
-            this.initialized = true;\r
-        },\r
-\r
-        \r
-        POINT: 0,\r
-\r
-        \r
-        INTERSECT: 1,\r
-\r
-        \r
-        mode: 0,\r
-\r
-        \r
-        _execOnAll: function(sMethod, args) {\r
-            for (var i in this.ids) {\r
-                for (var j in this.ids[i]) {\r
-                    var oDD = this.ids[i][j];\r
-                    if (! this.isTypeOfDD(oDD)) {\r
-                        continue;\r
-                    }\r
-                    oDD[sMethod].apply(oDD, args);\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        _onLoad: function() {\r
-\r
-            this.init();\r
-\r
-\r
-            Event.on(document, "mouseup",   this.handleMouseUp, this, true);\r
-            Event.on(document, "mousemove", this.handleMouseMove, this, true);\r
-            Event.on(window,   "unload",    this._onUnload, this, true);\r
-            Event.on(window,   "resize",    this._onResize, this, true);\r
-            
-\r
-        },\r
-\r
-        \r
-        _onResize: function(e) {\r
-            this._execOnAll("resetConstraints", []);\r
-        },\r
-\r
-        \r
-        lock: function() { this.locked = true; },\r
-\r
-        \r
-        unlock: function() { this.locked = false; },\r
-\r
-        \r
-        isLocked: function() { return this.locked; },\r
-\r
-        \r
-        locationCache: {},\r
-\r
-        \r
-        useCache: true,\r
-\r
-        \r
-        clickPixelThresh: 3,\r
-\r
-        \r
-        clickTimeThresh: 350,\r
-\r
-        \r
-        dragThreshMet: false,\r
-\r
-        \r
-        clickTimeout: null,\r
-\r
-        \r
-        startX: 0,\r
-\r
-        \r
-        startY: 0,\r
-\r
-        \r
-        regDragDrop: function(oDD, sGroup) {\r
-            if (!this.initialized) { this.init(); }\r
-\r
-            if (!this.ids[sGroup]) {\r
-                this.ids[sGroup] = {};\r
-            }\r
-            this.ids[sGroup][oDD.id] = oDD;\r
-        },\r
-\r
-        \r
-        removeDDFromGroup: function(oDD, sGroup) {\r
-            if (!this.ids[sGroup]) {\r
-                this.ids[sGroup] = {};\r
-            }\r
-\r
-            var obj = this.ids[sGroup];\r
-            if (obj && obj[oDD.id]) {\r
-                delete obj[oDD.id];\r
-            }\r
-        },\r
-\r
-        \r
-        _remove: function(oDD) {\r
-            for (var g in oDD.groups) {\r
-                if (g && this.ids[g][oDD.id]) {\r
-                    delete this.ids[g][oDD.id];\r
-                }\r
-            }\r
-            delete this.handleIds[oDD.id];\r
-        },\r
-\r
-        \r
-        regHandle: function(sDDId, sHandleId) {\r
-            if (!this.handleIds[sDDId]) {\r
-                this.handleIds[sDDId] = {};\r
-            }\r
-            this.handleIds[sDDId][sHandleId] = sHandleId;\r
-        },\r
-\r
-        \r
-        isDragDrop: function(id) {\r
-            return ( this.getDDById(id) ) ? true : false;\r
-        },\r
-\r
-        \r
-        getRelated: function(p_oDD, bTargetsOnly) {\r
-            var oDDs = [];\r
-            for (var i in p_oDD.groups) {\r
-                for (j in this.ids[i]) {\r
-                    var dd = this.ids[i][j];\r
-                    if (! this.isTypeOfDD(dd)) {\r
-                        continue;\r
-                    }\r
-                    if (!bTargetsOnly || dd.isTarget) {\r
-                        oDDs[oDDs.length] = dd;\r
-                    }\r
-                }\r
-            }\r
-\r
-            return oDDs;\r
-        },\r
-\r
-        \r
-        isLegalTarget: function (oDD, oTargetDD) {\r
-            var targets = this.getRelated(oDD, true);\r
-            for (var i=0, len=targets.length;i<len;++i) {\r
-                if (targets[i].id == oTargetDD.id) {\r
-                    return true;\r
-                }\r
-            }\r
-\r
-            return false;\r
-        },\r
-\r
-        \r
-        isTypeOfDD: function (oDD) {\r
-            return (oDD && oDD.__ygDragDrop);\r
-        },\r
-\r
-        \r
-        isHandle: function(sDDId, sHandleId) {\r
-            return ( this.handleIds[sDDId] &&\r
-                            this.handleIds[sDDId][sHandleId] );\r
-        },\r
-\r
-        \r
-        getDDById: function(id) {\r
-            for (var i in this.ids) {\r
-                if (this.ids[i][id]) {\r
-                    return this.ids[i][id];\r
-                }\r
-            }\r
-            return null;\r
-        },\r
-\r
-        \r
-        handleMouseDown: function(e, oDD) {\r
-            if(Ext.QuickTips){\r
-                Ext.QuickTips.disable();\r
-            }\r
-            this.currentTarget = e.getTarget();\r
-\r
-            this.dragCurrent = oDD;\r
-\r
-            var el = oDD.getEl();\r
-\r
-            
-            this.startX = e.getPageX();\r
-            this.startY = e.getPageY();\r
-\r
-            this.deltaX = this.startX - el.offsetLeft;\r
-            this.deltaY = this.startY - el.offsetTop;\r
-\r
-            this.dragThreshMet = false;\r
-\r
-            this.clickTimeout = setTimeout(\r
-                    function() {\r
-                        var DDM = Ext.dd.DDM;\r
-                        DDM.startDrag(DDM.startX, DDM.startY);\r
-                    },\r
-                    this.clickTimeThresh );\r
-        },\r
-\r
-        \r
-        startDrag: function(x, y) {\r
-            clearTimeout(this.clickTimeout);\r
-            if (this.dragCurrent) {\r
-                this.dragCurrent.b4StartDrag(x, y);\r
-                this.dragCurrent.startDrag(x, y);\r
-            }\r
-            this.dragThreshMet = true;\r
-        },\r
-\r
-        \r
-        handleMouseUp: function(e) {\r
-\r
-            if(Ext.QuickTips){\r
-                Ext.QuickTips.enable();\r
-            }\r
-            if (! this.dragCurrent) {\r
-                return;\r
-            }\r
-\r
-            clearTimeout(this.clickTimeout);\r
-\r
-            if (this.dragThreshMet) {\r
-                this.fireEvents(e, true);\r
-            } else {\r
-            }\r
-\r
-            this.stopDrag(e);\r
-\r
-            this.stopEvent(e);\r
-        },\r
-\r
-        \r
-        stopEvent: function(e){\r
-            if(this.stopPropagation) {\r
-                e.stopPropagation();\r
-            }\r
-\r
-            if (this.preventDefault) {\r
-                e.preventDefault();\r
-            }\r
-        },\r
-\r
-        \r
-        stopDrag: function(e) {\r
-            
-            if (this.dragCurrent) {\r
-                if (this.dragThreshMet) {\r
-                    this.dragCurrent.b4EndDrag(e);\r
-                    this.dragCurrent.endDrag(e);\r
-                }\r
-\r
-                this.dragCurrent.onMouseUp(e);\r
-            }\r
-\r
-            this.dragCurrent = null;\r
-            this.dragOvers = {};\r
-        },\r
-\r
-        \r
-        handleMouseMove: function(e) {\r
-            if (! this.dragCurrent) {\r
-                return true;\r
-            }\r
-\r
-            
-\r
-            
-            if (Ext.isIE && (e.button !== 0 && e.button !== 1 && e.button !== 2)) {\r
-                this.stopEvent(e);\r
-                return this.handleMouseUp(e);\r
-            }\r
-\r
-            if (!this.dragThreshMet) {\r
-                var diffX = Math.abs(this.startX - e.getPageX());\r
-                var diffY = Math.abs(this.startY - e.getPageY());\r
-                if (diffX > this.clickPixelThresh ||\r
-                            diffY > this.clickPixelThresh) {\r
-                    this.startDrag(this.startX, this.startY);\r
-                }\r
-            }\r
-\r
-            if (this.dragThreshMet) {\r
-                this.dragCurrent.b4Drag(e);\r
-                this.dragCurrent.onDrag(e);\r
-                if(!this.dragCurrent.moveOnly){\r
-                    this.fireEvents(e, false);\r
-                }\r
-            }\r
-\r
-            this.stopEvent(e);\r
-\r
-            return true;\r
-        },\r
-\r
-        \r
-        fireEvents: function(e, isDrop) {\r
-            var dc = this.dragCurrent;\r
-\r
-            
-            
-            if (!dc || dc.isLocked()) {\r
-                return;\r
-            }\r
-\r
-            var pt = e.getPoint();\r
-\r
-            
-            var oldOvers = [];\r
-\r
-            var outEvts   = [];\r
-            var overEvts  = [];\r
-            var dropEvts  = [];\r
-            var enterEvts = [];\r
-\r
-            
-            
-            for (var i in this.dragOvers) {\r
-\r
-                var ddo = this.dragOvers[i];\r
-\r
-                if (! this.isTypeOfDD(ddo)) {\r
-                    continue;\r
-                }\r
-\r
-                if (! this.isOverTarget(pt, ddo, this.mode)) {\r
-                    outEvts.push( ddo );\r
-                }\r
-\r
-                oldOvers[i] = true;\r
-                delete this.dragOvers[i];\r
-            }\r
-\r
-            for (var sGroup in dc.groups) {\r
-\r
-                if ("string" != typeof sGroup) {\r
-                    continue;\r
-                }\r
-\r
-                for (i in this.ids[sGroup]) {\r
-                    var oDD = this.ids[sGroup][i];\r
-                    if (! this.isTypeOfDD(oDD)) {\r
-                        continue;\r
-                    }\r
-\r
-                    if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {\r
-                        if (this.isOverTarget(pt, oDD, this.mode)) {\r
-                            
-                            if (isDrop) {\r
-                                dropEvts.push( oDD );\r
-                            
-                            } else {\r
-\r
-                                
-                                if (!oldOvers[oDD.id]) {\r
-                                    enterEvts.push( oDD );\r
-                                
-                                } else {\r
-                                    overEvts.push( oDD );\r
-                                }\r
-\r
-                                this.dragOvers[oDD.id] = oDD;\r
-                            }\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-\r
-            if (this.mode) {\r
-                if (outEvts.length) {\r
-                    dc.b4DragOut(e, outEvts);\r
-                    dc.onDragOut(e, outEvts);\r
-                }\r
-\r
-                if (enterEvts.length) {\r
-                    dc.onDragEnter(e, enterEvts);\r
-                }\r
-\r
-                if (overEvts.length) {\r
-                    dc.b4DragOver(e, overEvts);\r
-                    dc.onDragOver(e, overEvts);\r
-                }\r
-\r
-                if (dropEvts.length) {\r
-                    dc.b4DragDrop(e, dropEvts);\r
-                    dc.onDragDrop(e, dropEvts);\r
-                }\r
-\r
-            } else {\r
-                
-                var len = 0;\r
-                for (i=0, len=outEvts.length; i<len; ++i) {\r
-                    dc.b4DragOut(e, outEvts[i].id);\r
-                    dc.onDragOut(e, outEvts[i].id);\r
-                }\r
-\r
-                
-                for (i=0,len=enterEvts.length; i<len; ++i) {\r
-                    
-                    dc.onDragEnter(e, enterEvts[i].id);\r
-                }\r
-\r
-                
-                for (i=0,len=overEvts.length; i<len; ++i) {\r
-                    dc.b4DragOver(e, overEvts[i].id);\r
-                    dc.onDragOver(e, overEvts[i].id);\r
-                }\r
-\r
-                
-                for (i=0, len=dropEvts.length; i<len; ++i) {\r
-                    dc.b4DragDrop(e, dropEvts[i].id);\r
-                    dc.onDragDrop(e, dropEvts[i].id);\r
-                }\r
-\r
-            }\r
-\r
-            
-            if (isDrop && !dropEvts.length) {\r
-                dc.onInvalidDrop(e);\r
-            }\r
-\r
-        },\r
-\r
-        \r
-        getBestMatch: function(dds) {\r
-            var winner = null;\r
-            
-            
-               
-            
-            
-\r
-            var len = dds.length;\r
-\r
-            if (len == 1) {\r
-                winner = dds[0];\r
-            } else {\r
-                
-                for (var i=0; i<len; ++i) {\r
-                    var dd = dds[i];\r
-                    
-                    
-                    
-                    if (dd.cursorIsOver) {\r
-                        winner = dd;\r
-                        break;\r
-                    
-                    } else {\r
-                        if (!winner ||\r
-                            winner.overlap.getArea() < dd.overlap.getArea()) {\r
-                            winner = dd;\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-\r
-            return winner;\r
-        },\r
-\r
-        \r
-        refreshCache: function(groups) {\r
-            for (var sGroup in groups) {\r
-                if ("string" != typeof sGroup) {\r
-                    continue;\r
-                }\r
-                for (var i in this.ids[sGroup]) {\r
-                    var oDD = this.ids[sGroup][i];\r
-\r
-                    if (this.isTypeOfDD(oDD)) {\r
-                    
-                        var loc = this.getLocation(oDD);\r
-                        if (loc) {\r
-                            this.locationCache[oDD.id] = loc;\r
-                        } else {\r
-                            delete this.locationCache[oDD.id];\r
-                            
-                            
-                            
-                        }\r
-                    }\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        verifyEl: function(el) {\r
-            if (el) {\r
-                var parent;\r
-                if(Ext.isIE){\r
-                    try{\r
-                        parent = el.offsetParent;\r
-                    }catch(e){}\r
-                }else{\r
-                    parent = el.offsetParent;\r
-                }\r
-                if (parent) {\r
-                    return true;\r
-                }\r
-            }\r
-\r
-            return false;\r
-        },\r
-\r
-        \r
-        getLocation: function(oDD) {\r
-            if (! this.isTypeOfDD(oDD)) {\r
-                return null;\r
-            }\r
-\r
-            var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;\r
-\r
-            try {\r
-                pos= Ext.lib.Dom.getXY(el);\r
-            } catch (e) { }\r
-\r
-            if (!pos) {\r
-                return null;\r
-            }\r
-\r
-            x1 = pos[0];\r
-            x2 = x1 + el.offsetWidth;\r
-            y1 = pos[1];\r
-            y2 = y1 + el.offsetHeight;\r
-\r
-            t = y1 - oDD.padding[0];\r
-            r = x2 + oDD.padding[1];\r
-            b = y2 + oDD.padding[2];\r
-            l = x1 - oDD.padding[3];\r
-\r
-            return new Ext.lib.Region( t, r, b, l );\r
-        },\r
-\r
-        \r
-        isOverTarget: function(pt, oTarget, intersect) {\r
-            
-            var loc = this.locationCache[oTarget.id];\r
-            if (!loc || !this.useCache) {\r
-                loc = this.getLocation(oTarget);\r
-                this.locationCache[oTarget.id] = loc;\r
-\r
-            }\r
-\r
-            if (!loc) {\r
-                return false;\r
-            }\r
-\r
-            oTarget.cursorIsOver = loc.contains( pt );\r
-\r
-            
-            
-            
-            
-            
-            var dc = this.dragCurrent;\r
-            if (!dc || !dc.getTargetCoord ||\r
-                    (!intersect && !dc.constrainX && !dc.constrainY)) {\r
-                return oTarget.cursorIsOver;\r
-            }\r
-\r
-            oTarget.overlap = null;\r
-\r
-            
-            
-            
-            
-            var pos = dc.getTargetCoord(pt.x, pt.y);\r
-\r
-            var el = dc.getDragEl();\r
-            var curRegion = new Ext.lib.Region( pos.y,\r
-                                                   pos.x + el.offsetWidth,\r
-                                                   pos.y + el.offsetHeight,\r
-                                                   pos.x );\r
-\r
-            var overlap = curRegion.intersect(loc);\r
-\r
-            if (overlap) {\r
-                oTarget.overlap = overlap;\r
-                return (intersect) ? true : oTarget.cursorIsOver;\r
-            } else {\r
-                return false;\r
-            }\r
-        },\r
-\r
-        \r
-        _onUnload: function(e, me) {\r
-            Ext.dd.DragDropMgr.unregAll();\r
-        },\r
-\r
-        \r
-        unregAll: function() {\r
-\r
-            if (this.dragCurrent) {\r
-                this.stopDrag();\r
-                this.dragCurrent = null;\r
-            }\r
-\r
-            this._execOnAll("unreg", []);\r
-\r
-            for (var i in this.elementCache) {\r
-                delete this.elementCache[i];\r
-            }\r
-\r
-            this.elementCache = {};\r
-            this.ids = {};\r
-        },\r
-\r
-        \r
-        elementCache: {},\r
-\r
-        \r
-        getElWrapper: function(id) {\r
-            var oWrapper = this.elementCache[id];\r
-            if (!oWrapper || !oWrapper.el) {\r
-                oWrapper = this.elementCache[id] =\r
-                    new this.ElementWrapper(Ext.getDom(id));\r
-            }\r
-            return oWrapper;\r
-        },\r
-\r
-        \r
-        getElement: function(id) {\r
-            return Ext.getDom(id);\r
-        },\r
-\r
-        \r
-        getCss: function(id) {\r
-            var el = Ext.getDom(id);\r
-            return (el) ? el.style : null;\r
-        },\r
-\r
-        \r
-        ElementWrapper: function(el) {\r
-                \r
-                this.el = el || null;\r
-                \r
-                this.id = this.el && el.id;\r
-                \r
-                this.css = this.el && el.style;\r
-            },\r
-\r
-        \r
-        getPosX: function(el) {\r
-            return Ext.lib.Dom.getX(el);\r
-        },\r
-\r
-        \r
-        getPosY: function(el) {\r
-            return Ext.lib.Dom.getY(el);\r
-        },\r
-\r
-        \r
-        swapNode: function(n1, n2) {\r
-            if (n1.swapNode) {\r
-                n1.swapNode(n2);\r
-            } else {\r
-                var p = n2.parentNode;\r
-                var s = n2.nextSibling;\r
-\r
-                if (s == n1) {\r
-                    p.insertBefore(n1, n2);\r
-                } else if (n2 == n1.nextSibling) {\r
-                    p.insertBefore(n2, n1);\r
-                } else {\r
-                    n1.parentNode.replaceChild(n2, n1);\r
-                    p.insertBefore(n1, s);\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        getScroll: function () {\r
-            var t, l, dde=document.documentElement, db=document.body;\r
-            if (dde && (dde.scrollTop || dde.scrollLeft)) {\r
-                t = dde.scrollTop;\r
-                l = dde.scrollLeft;\r
-            } else if (db) {\r
-                t = db.scrollTop;\r
-                l = db.scrollLeft;\r
-            } else {\r
-\r
-            }\r
-            return { top: t, left: l };\r
-        },\r
-\r
-        \r
-        getStyle: function(el, styleProp) {\r
-            return Ext.fly(el).getStyle(styleProp);\r
-        },\r
-\r
-        \r
-        getScrollTop: function () { return this.getScroll().top; },\r
-\r
-        \r
-        getScrollLeft: function () { return this.getScroll().left; },\r
-\r
-        \r
-        moveToEl: function (moveEl, targetEl) {\r
-            var aCoord = Ext.lib.Dom.getXY(targetEl);\r
-            Ext.lib.Dom.setXY(moveEl, aCoord);\r
-        },\r
-\r
-        \r
-        numericSort: function(a, b) { return (a - b); },\r
-\r
-        \r
-        _timeoutCount: 0,\r
-\r
-        \r
-        _addListeners: function() {\r
-            var DDM = Ext.dd.DDM;\r
-            if ( Ext.lib.Event && document ) {\r
-                DDM._onLoad();\r
-            } else {\r
-                if (DDM._timeoutCount > 2000) {\r
-                } else {\r
-                    setTimeout(DDM._addListeners, 10);\r
-                    if (document && document.body) {\r
-                        DDM._timeoutCount += 1;\r
-                    }\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        handleWasClicked: function(node, id) {\r
-            if (this.isHandle(id, node.id)) {\r
-                return true;\r
-            } else {\r
-                
-                var p = node.parentNode;\r
-\r
-                while (p) {\r
-                    if (this.isHandle(id, p.id)) {\r
-                        return true;\r
-                    } else {\r
-                        p = p.parentNode;\r
-                    }\r
-                }\r
-            }\r
-\r
-            return false;\r
-        }\r
-\r
-    };\r
-\r
-}();\r
-\r
-
-Ext.dd.DDM = Ext.dd.DragDropMgr;\r
-Ext.dd.DDM._addListeners();\r
-\r
-}\r
-\r
-\r
-Ext.dd.DD = function(id, sGroup, config) {\r
-    if (id) {\r
-        this.init(id, sGroup, config);\r
-    }\r
-};\r
-\r
-Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {\r
-\r
-    \r
-    scroll: true,\r
-\r
-    \r
-    autoOffset: function(iPageX, iPageY) {\r
-        var x = iPageX - this.startPageX;\r
-        var y = iPageY - this.startPageY;\r
-        this.setDelta(x, y);\r
-    },\r
-\r
-    \r
-    setDelta: function(iDeltaX, iDeltaY) {\r
-        this.deltaX = iDeltaX;\r
-        this.deltaY = iDeltaY;\r
-    },\r
-\r
-    \r
-    setDragElPos: function(iPageX, iPageY) {\r
-        
-        
-\r
-        var el = this.getDragEl();\r
-        this.alignElWithMouse(el, iPageX, iPageY);\r
-    },\r
-\r
-    \r
-    alignElWithMouse: function(el, iPageX, iPageY) {\r
-        var oCoord = this.getTargetCoord(iPageX, iPageY);\r
-        var fly = el.dom ? el : Ext.fly(el, '_dd');\r
-        if (!this.deltaSetXY) {\r
-            var aCoord = [oCoord.x, oCoord.y];\r
-            fly.setXY(aCoord);\r
-            var newLeft = fly.getLeft(true);\r
-            var newTop  = fly.getTop(true);\r
-            this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];\r
-        } else {\r
-            fly.setLeftTop(oCoord.x + this.deltaSetXY[0], oCoord.y + this.deltaSetXY[1]);\r
-        }\r
-\r
-        this.cachePosition(oCoord.x, oCoord.y);\r
-        this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);\r
-        return oCoord;\r
-    },\r
-\r
-    \r
-    cachePosition: function(iPageX, iPageY) {\r
-        if (iPageX) {\r
-            this.lastPageX = iPageX;\r
-            this.lastPageY = iPageY;\r
-        } else {\r
-            var aCoord = Ext.lib.Dom.getXY(this.getEl());\r
-            this.lastPageX = aCoord[0];\r
-            this.lastPageY = aCoord[1];\r
-        }\r
-    },\r
-\r
-    \r
-    autoScroll: function(x, y, h, w) {\r
-\r
-        if (this.scroll) {\r
-            
-            var clientH = Ext.lib.Dom.getViewHeight();\r
-\r
-            
-            var clientW = Ext.lib.Dom.getViewWidth();\r
-\r
-            
-            var st = this.DDM.getScrollTop();\r
-\r
-            
-            var sl = this.DDM.getScrollLeft();\r
-\r
-            
-            var bot = h + y;\r
-\r
-            
-            var right = w + x;\r
-\r
-            
-            
-            
-            var toBot = (clientH + st - y - this.deltaY);\r
-\r
-            
-            var toRight = (clientW + sl - x - this.deltaX);\r
-\r
-\r
-            
-            
-            var thresh = 40;\r
-\r
-            
-            
-            
-            var scrAmt = (document.all) ? 80 : 30;\r
-\r
-            
-            
-            if ( bot > clientH && toBot < thresh ) {\r
-                window.scrollTo(sl, st + scrAmt);\r
-            }\r
-\r
-            
-            
-            if ( y < st && st > 0 && y - st < thresh ) {\r
-                window.scrollTo(sl, st - scrAmt);\r
-            }\r
-\r
-            
-            
-            if ( right > clientW && toRight < thresh ) {\r
-                window.scrollTo(sl + scrAmt, st);\r
-            }\r
-\r
-            
-            
-            if ( x < sl && sl > 0 && x - sl < thresh ) {\r
-                window.scrollTo(sl - scrAmt, st);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getTargetCoord: function(iPageX, iPageY) {\r
-\r
-\r
-        var x = iPageX - this.deltaX;\r
-        var y = iPageY - this.deltaY;\r
-\r
-        if (this.constrainX) {\r
-            if (x < this.minX) { x = this.minX; }\r
-            if (x > this.maxX) { x = this.maxX; }\r
-        }\r
-\r
-        if (this.constrainY) {\r
-            if (y < this.minY) { y = this.minY; }\r
-            if (y > this.maxY) { y = this.maxY; }\r
-        }\r
-\r
-        x = this.getTick(x, this.xTicks);\r
-        y = this.getTick(y, this.yTicks);\r
-\r
-\r
-        return {x:x, y:y};\r
-    },\r
-\r
-    \r
-    applyConfig: function() {\r
-        Ext.dd.DD.superclass.applyConfig.call(this);\r
-        this.scroll = (this.config.scroll !== false);\r
-    },\r
-\r
-    \r
-    b4MouseDown: function(e) {\r
-        
-        this.autoOffset(e.getPageX(),\r
-                            e.getPageY());\r
-    },\r
-\r
-    \r
-    b4Drag: function(e) {\r
-        this.setDragElPos(e.getPageX(),\r
-                            e.getPageY());\r
-    },\r
-\r
-    toString: function() {\r
-        return ("DD " + this.id);\r
-    }\r
-\r
-    
-    
-    
-    \r
-\r
-});\r
-\r
-Ext.dd.DDProxy = function(id, sGroup, config) {\r
-    if (id) {\r
-        this.init(id, sGroup, config);\r
-        this.initFrame();\r
-    }\r
-};\r
-\r
-\r
-Ext.dd.DDProxy.dragElId = "ygddfdiv";\r
-\r
-Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {\r
-\r
-    \r
-    resizeFrame: true,\r
-\r
-    \r
-    centerFrame: false,\r
-\r
-    \r
-    createFrame: function() {\r
-        var self = this;\r
-        var body = document.body;\r
-\r
-        if (!body || !body.firstChild) {\r
-            setTimeout( function() { self.createFrame(); }, 50 );\r
-            return;\r
-        }\r
-\r
-        var div = this.getDragEl();\r
-\r
-        if (!div) {\r
-            div    = document.createElement("div");\r
-            div.id = this.dragElId;\r
-            var s  = div.style;\r
-\r
-            s.position   = "absolute";\r
-            s.visibility = "hidden";\r
-            s.cursor     = "move";\r
-            s.border     = "2px solid #aaa";\r
-            s.zIndex     = 999;\r
-\r
-            
-            
-            
-            body.insertBefore(div, body.firstChild);\r
-        }\r
-    },\r
-\r
-    \r
-    initFrame: function() {\r
-        this.createFrame();\r
-    },\r
-\r
-    applyConfig: function() {\r
-        Ext.dd.DDProxy.superclass.applyConfig.call(this);\r
-\r
-        this.resizeFrame = (this.config.resizeFrame !== false);\r
-        this.centerFrame = (this.config.centerFrame);\r
-        this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId);\r
-    },\r
-\r
-    \r
-    showFrame: function(iPageX, iPageY) {\r
-        var el = this.getEl();\r
-        var dragEl = this.getDragEl();\r
-        var s = dragEl.style;\r
-\r
-        this._resizeProxy();\r
-\r
-        if (this.centerFrame) {\r
-            this.setDelta( Math.round(parseInt(s.width,  10)/2),\r
-                           Math.round(parseInt(s.height, 10)/2) );\r
-        }\r
-\r
-        this.setDragElPos(iPageX, iPageY);\r
-\r
-        Ext.fly(dragEl).show();\r
-    },\r
-\r
-    \r
-    _resizeProxy: function() {\r
-        if (this.resizeFrame) {\r
-            var el = this.getEl();\r
-            Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight);\r
-        }\r
-    },\r
-\r
-    
-    b4MouseDown: function(e) {\r
-        var x = e.getPageX();\r
-        var y = e.getPageY();\r
-        this.autoOffset(x, y);\r
-        this.setDragElPos(x, y);\r
-    },\r
-\r
-    
-    b4StartDrag: function(x, y) {\r
-        
-        this.showFrame(x, y);\r
-    },\r
-\r
-    
-    b4EndDrag: function(e) {\r
-        Ext.fly(this.getDragEl()).hide();\r
-    },\r
-\r
-    
-    
-    
-    endDrag: function(e) {\r
-\r
-        var lel = this.getEl();\r
-        var del = this.getDragEl();\r
-\r
-        
-        del.style.visibility = "";\r
-\r
-        this.beforeMove();\r
-        
-        
-        lel.style.visibility = "hidden";\r
-        Ext.dd.DDM.moveToEl(lel, del);\r
-        del.style.visibility = "hidden";\r
-        lel.style.visibility = "";\r
-\r
-        this.afterDrag();\r
-    },\r
-\r
-    beforeMove : function(){\r
-\r
-    },\r
-\r
-    afterDrag : function(){\r
-\r
-    },\r
-\r
-    toString: function() {\r
-        return ("DDProxy " + this.id);\r
-    }\r
-\r
-});\r
-\r
-Ext.dd.DDTarget = function(id, sGroup, config) {\r
-    if (id) {\r
-        this.initTarget(id, sGroup, config);\r
-    }\r
-};\r
-\r
-
-Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {\r
-    toString: function() {\r
-        return ("DDTarget " + this.id);\r
-    }\r
-});\r
-
-Ext.dd.DragTracker = function(config){\r
-    Ext.apply(this, config);\r
-    this.addEvents(\r
-        'mousedown',\r
-        'mouseup',\r
-        'mousemove',\r
-        'dragstart',\r
-        'dragend',\r
-        'drag'\r
-    );\r
-\r
-    this.dragRegion = new Ext.lib.Region(0,0,0,0);\r
-\r
-    if(this.el){\r
-        this.initEl(this.el);\r
-    }\r
-}\r
-\r
-Ext.extend(Ext.dd.DragTracker, Ext.util.Observable,  {\r
-    active: false,\r
-    tolerance: 5,\r
-    autoStart: false,\r
-\r
-    initEl: function(el){\r
-        this.el = Ext.get(el);\r
-        el.on('mousedown', this.onMouseDown, this,\r
-                this.delegate ? {delegate: this.delegate} : undefined);\r
-    },\r
-\r
-    destroy : function(){\r
-        this.el.un('mousedown', this.onMouseDown, this);\r
-    },\r
-\r
-    onMouseDown: function(e, target){\r
-        if(this.fireEvent('mousedown', this, e) !== false && this.onBeforeStart(e) !== false){\r
-            this.startXY = this.lastXY = e.getXY();\r
-            this.dragTarget = this.delegate ? target : this.el.dom;\r
-            e.preventDefault();\r
-            var doc = Ext.getDoc();\r
-            doc.on('mouseup', this.onMouseUp, this);\r
-            doc.on('mousemove', this.onMouseMove, this);\r
-            doc.on('selectstart', this.stopSelect, this);\r
-            if(this.autoStart){\r
-                this.timer = this.triggerStart.defer(this.autoStart === true ? 1000 : this.autoStart, this);\r
-            }\r
-        }\r
-    },\r
-\r
-    onMouseMove: function(e, target){\r
-        e.preventDefault();\r
-        var xy = e.getXY(), s = this.startXY;\r
-        this.lastXY = xy;\r
-        if(!this.active){\r
-            if(Math.abs(s[0]-xy[0]) > this.tolerance || Math.abs(s[1]-xy[1]) > this.tolerance){\r
-                this.triggerStart();\r
-            }else{\r
-                return;\r
-            }\r
-        }\r
-        this.fireEvent('mousemove', this, e);\r
-        this.onDrag(e);\r
-        this.fireEvent('drag', this, e);\r
-    },\r
-\r
-    onMouseUp: function(e){\r
-        var doc = Ext.getDoc();\r
-        doc.un('mousemove', this.onMouseMove, this);\r
-        doc.un('mouseup', this.onMouseUp, this);\r
-        doc.un('selectstart', this.stopSelect, this);\r
-        e.preventDefault();\r
-        this.clearStart();\r
-        this.active = false;\r
-        delete this.elRegion;\r
-        this.fireEvent('mouseup', this, e);\r
-        this.onEnd(e);\r
-        this.fireEvent('dragend', this, e);\r
-    },\r
-\r
-    triggerStart: function(isTimer){\r
-        this.clearStart();\r
-        this.active = true;\r
-        this.onStart(this.startXY);\r
-        this.fireEvent('dragstart', this, this.startXY);\r
-    },\r
-\r
-    clearStart : function(){\r
-        if(this.timer){\r
-            clearTimeout(this.timer);\r
-            delete this.timer;\r
-        }\r
-    },\r
-\r
-    stopSelect : function(e){\r
-        e.stopEvent();\r
-        return false;\r
-    },\r
-\r
-    onBeforeStart : function(e){\r
-\r
-    },\r
-\r
-    onStart : function(xy){\r
-\r
-    },\r
-\r
-    onDrag : function(e){\r
-\r
-    },\r
-\r
-    onEnd : function(e){\r
-\r
-    },\r
-\r
-    getDragTarget : function(){\r
-        return this.dragTarget;\r
-    },\r
-\r
-    getDragCt : function(){\r
-        return this.el;\r
-    },\r
-\r
-    getXY : function(constrain){\r
-        return constrain ?\r
-               this.constrainModes[constrain].call(this, this.lastXY) : this.lastXY;\r
-    },\r
-\r
-    getOffset : function(constrain){\r
-        var xy = this.getXY(constrain);\r
-        var s = this.startXY;\r
-        return [s[0]-xy[0], s[1]-xy[1]];\r
-    },\r
-\r
-    constrainModes: {\r
-        'point' : function(xy){\r
-\r
-            if(!this.elRegion){\r
-                this.elRegion = this.getDragCt().getRegion();\r
-            }\r
-\r
-            var dr = this.dragRegion;\r
-\r
-            dr.left = xy[0];\r
-            dr.top = xy[1];\r
-            dr.right = xy[0];\r
-            dr.bottom = xy[1];\r
-\r
-            dr.constrainTo(this.elRegion);\r
-\r
-            return [dr.left, dr.top];\r
-        }\r
-    }\r
-});
-\r
-Ext.dd.ScrollManager = function(){\r
-    var ddm = Ext.dd.DragDropMgr;\r
-    var els = {};\r
-    var dragEl = null;\r
-    var proc = {};\r
-    \r
-    var onStop = function(e){\r
-        dragEl = null;\r
-        clearProc();\r
-    };\r
-    \r
-    var triggerRefresh = function(){\r
-        if(ddm.dragCurrent){\r
-             ddm.refreshCache(ddm.dragCurrent.groups);\r
-        }\r
-    };\r
-    \r
-    var doScroll = function(){\r
-        if(ddm.dragCurrent){\r
-            var dds = Ext.dd.ScrollManager;\r
-            var inc = proc.el.ddScrollConfig ?\r
-                      proc.el.ddScrollConfig.increment : dds.increment;\r
-            if(!dds.animate){\r
-                if(proc.el.scroll(proc.dir, inc)){\r
-                    triggerRefresh();\r
-                }\r
-            }else{\r
-                proc.el.scroll(proc.dir, inc, true, dds.animDuration, triggerRefresh);\r
-            }\r
-        }\r
-    };\r
-    \r
-    var clearProc = function(){\r
-        if(proc.id){\r
-            clearInterval(proc.id);\r
-        }\r
-        proc.id = 0;\r
-        proc.el = null;\r
-        proc.dir = "";\r
-    };\r
-    \r
-    var startProc = function(el, dir){\r
-        clearProc();\r
-        proc.el = el;\r
-        proc.dir = dir;\r
-        proc.id = setInterval(doScroll, Ext.dd.ScrollManager.frequency);\r
-    };\r
-    \r
-    var onFire = function(e, isDrop){\r
-        if(isDrop || !ddm.dragCurrent){ return; }\r
-        var dds = Ext.dd.ScrollManager;\r
-        if(!dragEl || dragEl != ddm.dragCurrent){\r
-            dragEl = ddm.dragCurrent;\r
-            
-            dds.refreshCache();\r
-        }\r
-        \r
-        var xy = Ext.lib.Event.getXY(e);\r
-        var pt = new Ext.lib.Point(xy[0], xy[1]);\r
-        for(var id in els){\r
-            var el = els[id], r = el._region;\r
-            var c = el.ddScrollConfig ? el.ddScrollConfig : dds;\r
-            if(r && r.contains(pt) && el.isScrollable()){\r
-                if(r.bottom - pt.y <= c.vthresh){\r
-                    if(proc.el != el){\r
-                        startProc(el, "down");\r
-                    }\r
-                    return;\r
-                }else if(r.right - pt.x <= c.hthresh){\r
-                    if(proc.el != el){\r
-                        startProc(el, "left");\r
-                    }\r
-                    return;\r
-                }else if(pt.y - r.top <= c.vthresh){\r
-                    if(proc.el != el){\r
-                        startProc(el, "up");\r
-                    }\r
-                    return;\r
-                }else if(pt.x - r.left <= c.hthresh){\r
-                    if(proc.el != el){\r
-                        startProc(el, "right");\r
-                    }\r
-                    return;\r
-                }\r
-            }\r
-        }\r
-        clearProc();\r
-    };\r
-    \r
-    ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);\r
-    ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);\r
-    \r
-    return {\r
-        \r
-        register : function(el){\r
-            if(Ext.isArray(el)){\r
-                for(var i = 0, len = el.length; i < len; i++) {\r
-                       this.register(el[i]);\r
-                }\r
-            }else{\r
-                el = Ext.get(el);\r
-                els[el.id] = el;\r
-            }\r
-        },\r
-        \r
-        \r
-        unregister : function(el){\r
-            if(Ext.isArray(el)){\r
-                for(var i = 0, len = el.length; i < len; i++) {\r
-                       this.unregister(el[i]);\r
-                }\r
-            }else{\r
-                el = Ext.get(el);\r
-                delete els[el.id];\r
-            }\r
-        },\r
-        \r
-        \r
-        vthresh : 25,\r
-        \r
-        hthresh : 25,\r
-\r
-        \r
-        increment : 100,\r
-        \r
-        \r
-        frequency : 500,\r
-        \r
-        \r
-        animate: true,\r
-        \r
-        \r
-        animDuration: .4,\r
-        \r
-        \r
-        refreshCache : function(){\r
-            for(var id in els){\r
-                if(typeof els[id] == 'object'){ 
-                    els[id]._region = els[id].getRegion();\r
-                }\r
-            }\r
-        }\r
-    };\r
-}();
-\r
-Ext.dd.Registry = function(){\r
-    var elements = {}; \r
-    var handles = {}; \r
-    var autoIdSeed = 0;\r
-\r
-    var getId = function(el, autogen){\r
-        if(typeof el == "string"){\r
-            return el;\r
-        }\r
-        var id = el.id;\r
-        if(!id && autogen !== false){\r
-            id = "extdd-" + (++autoIdSeed);\r
-            el.id = id;\r
-        }\r
-        return id;\r
-    };\r
-    \r
-    return {\r
-    \r
-        register : function(el, data){\r
-            data = data || {};\r
-            if(typeof el == "string"){\r
-                el = document.getElementById(el);\r
-            }\r
-            data.ddel = el;\r
-            elements[getId(el)] = data;\r
-            if(data.isHandle !== false){\r
-                handles[data.ddel.id] = data;\r
-            }\r
-            if(data.handles){\r
-                var hs = data.handles;\r
-                for(var i = 0, len = hs.length; i < len; i++){\r
-                       handles[getId(hs[i])] = data;\r
-                }\r
-            }\r
-        },\r
-\r
-    \r
-        unregister : function(el){\r
-            var id = getId(el, false);\r
-            var data = elements[id];\r
-            if(data){\r
-                delete elements[id];\r
-                if(data.handles){\r
-                    var hs = data.handles;\r
-                    for(var i = 0, len = hs.length; i < len; i++){\r
-                       delete handles[getId(hs[i], false)];\r
-                    }\r
-                }\r
-            }\r
-        },\r
-\r
-    \r
-        getHandle : function(id){\r
-            if(typeof id != "string"){ 
-                id = id.id;\r
-            }\r
-            return handles[id];\r
-        },\r
-\r
-    \r
-        getHandleFromEvent : function(e){\r
-            var t = Ext.lib.Event.getTarget(e);\r
-            return t ? handles[t.id] : null;\r
-        },\r
-\r
-    \r
-        getTarget : function(id){\r
-            if(typeof id != "string"){ 
-                id = id.id;\r
-            }\r
-            return elements[id];\r
-        },\r
-\r
-    \r
-        getTargetFromEvent : function(e){\r
-            var t = Ext.lib.Event.getTarget(e);\r
-            return t ? elements[t.id] || handles[t.id] : null;\r
-        }\r
-    };\r
-}();
-\r
-Ext.dd.StatusProxy = function(config){\r
-    Ext.apply(this, config);\r
-    this.id = this.id || Ext.id();\r
-    this.el = new Ext.Layer({\r
-        dh: {\r
-            id: this.id, tag: "div", cls: "x-dd-drag-proxy "+this.dropNotAllowed, children: [\r
-                {tag: "div", cls: "x-dd-drop-icon"},\r
-                {tag: "div", cls: "x-dd-drag-ghost"}\r
-            ]\r
-        }, \r
-        shadow: !config || config.shadow !== false\r
-    });\r
-    this.ghost = Ext.get(this.el.dom.childNodes[1]);\r
-    this.dropStatus = this.dropNotAllowed;\r
-};\r
-\r
-Ext.dd.StatusProxy.prototype = {\r
-    \r
-    dropAllowed : "x-dd-drop-ok",\r
-    \r
-    dropNotAllowed : "x-dd-drop-nodrop",\r
-\r
-    \r
-    setStatus : function(cssClass){\r
-        cssClass = cssClass || this.dropNotAllowed;\r
-        if(this.dropStatus != cssClass){\r
-            this.el.replaceClass(this.dropStatus, cssClass);\r
-            this.dropStatus = cssClass;\r
-        }\r
-    },\r
-\r
-    \r
-    reset : function(clearGhost){\r
-        this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;\r
-        this.dropStatus = this.dropNotAllowed;\r
-        if(clearGhost){\r
-            this.ghost.update("");\r
-        }\r
-    },\r
-\r
-    \r
-    update : function(html){\r
-        if(typeof html == "string"){\r
-            this.ghost.update(html);\r
-        }else{\r
-            this.ghost.update("");\r
-            html.style.margin = "0";\r
-            this.ghost.dom.appendChild(html);\r
-        }        \r
-    },\r
-\r
-    \r
-    getEl : function(){\r
-        return this.el;\r
-    },\r
-\r
-    \r
-    getGhost : function(){\r
-        return this.ghost;\r
-    },\r
-\r
-    \r
-    hide : function(clear){\r
-        this.el.hide();\r
-        if(clear){\r
-            this.reset(true);\r
-        }\r
-    },\r
-\r
-    \r
-    stop : function(){\r
-        if(this.anim && this.anim.isAnimated && this.anim.isAnimated()){\r
-            this.anim.stop();\r
-        }\r
-    },\r
-\r
-    \r
-    show : function(){\r
-        this.el.show();\r
-    },\r
-\r
-    \r
-    sync : function(){\r
-        this.el.sync();\r
-    },\r
-\r
-    \r
-    repair : function(xy, callback, scope){\r
-        this.callback = callback;\r
-        this.scope = scope;\r
-        if(xy && this.animRepair !== false){\r
-            this.el.addClass("x-dd-drag-repair");\r
-            this.el.hideUnders(true);\r
-            this.anim = this.el.shift({\r
-                duration: this.repairDuration || .5,\r
-                easing: 'easeOut',\r
-                xy: xy,\r
-                stopFx: true,\r
-                callback: this.afterRepair,\r
-                scope: this\r
-            });\r
-        }else{\r
-            this.afterRepair();\r
-        }\r
-    },\r
-\r
-    
-    afterRepair : function(){\r
-        this.hide(true);\r
-        if(typeof this.callback == "function"){\r
-            this.callback.call(this.scope || this);\r
-        }\r
-        this.callback = null;\r
-        this.scope = null;\r
-    }\r
-};
-\r
-Ext.dd.DragSource = function(el, config){\r
-    this.el = Ext.get(el);\r
-    if(!this.dragData){\r
-        this.dragData = {};\r
-    }\r
-    \r
-    Ext.apply(this, config);\r
-    \r
-    if(!this.proxy){\r
-        this.proxy = new Ext.dd.StatusProxy();\r
-    }\r
-    Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, \r
-          {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true});\r
-    \r
-    this.dragging = false;\r
-};\r
-\r
-Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {\r
-    \r
-    \r
-    dropAllowed : "x-dd-drop-ok",\r
-    \r
-    dropNotAllowed : "x-dd-drop-nodrop",\r
-\r
-    \r
-    getDragData : function(e){\r
-        return this.dragData;\r
-    },\r
-\r
-    
-    onDragEnter : function(e, id){\r
-        var target = Ext.dd.DragDropMgr.getDDById(id);\r
-        this.cachedTarget = target;\r
-        if(this.beforeDragEnter(target, e, id) !== false){\r
-            if(target.isNotifyTarget){\r
-                var status = target.notifyEnter(this, e, this.dragData);\r
-                this.proxy.setStatus(status);\r
-            }else{\r
-                this.proxy.setStatus(this.dropAllowed);\r
-            }\r
-            \r
-            if(this.afterDragEnter){\r
-                \r
-                this.afterDragEnter(target, e, id);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    beforeDragEnter : function(target, e, id){\r
-        return true;\r
-    },\r
-\r
-    
-    alignElWithMouse: function() {\r
-        Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);\r
-        this.proxy.sync();\r
-    },\r
-\r
-    
-    onDragOver : function(e, id){\r
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);\r
-        if(this.beforeDragOver(target, e, id) !== false){\r
-            if(target.isNotifyTarget){\r
-                var status = target.notifyOver(this, e, this.dragData);\r
-                this.proxy.setStatus(status);\r
-            }\r
-\r
-            if(this.afterDragOver){\r
-                \r
-                this.afterDragOver(target, e, id);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    beforeDragOver : function(target, e, id){\r
-        return true;\r
-    },\r
-\r
-    
-    onDragOut : function(e, id){\r
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);\r
-        if(this.beforeDragOut(target, e, id) !== false){\r
-            if(target.isNotifyTarget){\r
-                target.notifyOut(this, e, this.dragData);\r
-            }\r
-            this.proxy.reset();\r
-            if(this.afterDragOut){\r
-                \r
-                this.afterDragOut(target, e, id);\r
-            }\r
-        }\r
-        this.cachedTarget = null;\r
-    },\r
-\r
-    \r
-    beforeDragOut : function(target, e, id){\r
-        return true;\r
-    },\r
-    \r
-    
-    onDragDrop : function(e, id){\r
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);\r
-        if(this.beforeDragDrop(target, e, id) !== false){\r
-            if(target.isNotifyTarget){\r
-                if(target.notifyDrop(this, e, this.dragData)){ 
-                    this.onValidDrop(target, e, id);\r
-                }else{\r
-                    this.onInvalidDrop(target, e, id);\r
-                }\r
-            }else{\r
-                this.onValidDrop(target, e, id);\r
-            }\r
-            \r
-            if(this.afterDragDrop){\r
-                \r
-                this.afterDragDrop(target, e, id);\r
-            }\r
-        }\r
-        delete this.cachedTarget;\r
-    },\r
-\r
-    \r
-    beforeDragDrop : function(target, e, id){\r
-        return true;\r
-    },\r
-\r
-    
-    onValidDrop : function(target, e, id){\r
-        this.hideProxy();\r
-        if(this.afterValidDrop){\r
-            \r
-            this.afterValidDrop(target, e, id);\r
-        }\r
-    },\r
-\r
-    
-    getRepairXY : function(e, data){\r
-        return this.el.getXY();  \r
-    },\r
-\r
-    
-    onInvalidDrop : function(target, e, id){\r
-        this.beforeInvalidDrop(target, e, id);\r
-        if(this.cachedTarget){\r
-            if(this.cachedTarget.isNotifyTarget){\r
-                this.cachedTarget.notifyOut(this, e, this.dragData);\r
-            }\r
-            this.cacheTarget = null;\r
-        }\r
-        this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this);\r
-\r
-        if(this.afterInvalidDrop){\r
-            \r
-            this.afterInvalidDrop(e, id);\r
-        }\r
-    },\r
-\r
-    
-    afterRepair : function(){\r
-        if(Ext.enableFx){\r
-            this.el.highlight(this.hlColor || "c3daf9");\r
-        }\r
-        this.dragging = false;\r
-    },\r
-\r
-    \r
-    beforeInvalidDrop : function(target, e, id){\r
-        return true;\r
-    },\r
-\r
-    
-    handleMouseDown : function(e){\r
-        if(this.dragging) {\r
-            return;\r
-        }\r
-        var data = this.getDragData(e);\r
-        if(data && this.onBeforeDrag(data, e) !== false){\r
-            this.dragData = data;\r
-            this.proxy.stop();\r
-            Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments);\r
-        } \r
-    },\r
-\r
-    \r
-    onBeforeDrag : function(data, e){\r
-        return true;\r
-    },\r
-\r
-    \r
-    onStartDrag : Ext.emptyFn,\r
-\r
-    
-    startDrag : function(x, y){\r
-        this.proxy.reset();\r
-        this.dragging = true;\r
-        this.proxy.update("");\r
-        this.onInitDrag(x, y);\r
-        this.proxy.show();\r
-    },\r
-\r
-    
-    onInitDrag : function(x, y){\r
-        var clone = this.el.dom.cloneNode(true);\r
-        clone.id = Ext.id(); 
-        this.proxy.update(clone);\r
-        this.onStartDrag(x, y);\r
-        return true;\r
-    },\r
-\r
-    \r
-    getProxy : function(){\r
-        return this.proxy;  \r
-    },\r
-\r
-    \r
-    hideProxy : function(){\r
-        this.proxy.hide();  \r
-        this.proxy.reset(true);\r
-        this.dragging = false;\r
-    },\r
-\r
-    
-    triggerCacheRefresh : function(){\r
-        Ext.dd.DDM.refreshCache(this.groups);\r
-    },\r
-\r
-    
-    b4EndDrag: function(e) {\r
-    },\r
-\r
-    
-    endDrag : function(e){\r
-        this.onEndDrag(this.dragData, e);\r
-    },\r
-\r
-    
-    onEndDrag : function(data, e){\r
-    },\r
-    \r
-    
-    autoOffset : function(x, y) {\r
-        this.setDelta(-12, -20);\r
-    }    \r
-});
-\r
-Ext.dd.DropTarget = function(el, config){\r
-    this.el = Ext.get(el);\r
-    \r
-    Ext.apply(this, config);\r
-    \r
-    if(this.containerScroll){\r
-        Ext.dd.ScrollManager.register(this.el);\r
-    }\r
-    \r
-    Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, \r
-          {isTarget: true});\r
-\r
-};\r
-\r
-Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {\r
-    \r
-    \r
-    \r
-    dropAllowed : "x-dd-drop-ok",\r
-    \r
-    dropNotAllowed : "x-dd-drop-nodrop",\r
-\r
-    
-    isTarget : true,\r
-\r
-    
-    isNotifyTarget : true,\r
-\r
-    \r
-    notifyEnter : function(dd, e, data){\r
-        if(this.overClass){\r
-            this.el.addClass(this.overClass);\r
-        }\r
-        return this.dropAllowed;\r
-    },\r
-\r
-    \r
-    notifyOver : function(dd, e, data){\r
-        return this.dropAllowed;\r
-    },\r
-\r
-    \r
-    notifyOut : function(dd, e, data){\r
-        if(this.overClass){\r
-            this.el.removeClass(this.overClass);\r
-        }\r
-    },\r
-\r
-    \r
-    notifyDrop : function(dd, e, data){\r
-        return false;\r
-    }\r
-});
-\r
-Ext.dd.DragZone = function(el, config){\r
-    Ext.dd.DragZone.superclass.constructor.call(this, el, config);\r
-    if(this.containerScroll){\r
-        Ext.dd.ScrollManager.register(this.el);\r
-    }\r
-};\r
-\r
-Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {\r
-    \r
-    \r
-\r
-    \r
-    getDragData : function(e){\r
-        return Ext.dd.Registry.getHandleFromEvent(e);\r
-    },\r
-    \r
-    \r
-    onInitDrag : function(x, y){\r
-        this.proxy.update(this.dragData.ddel.cloneNode(true));\r
-        this.onStartDrag(x, y);\r
-        return true;\r
-    },\r
-    \r
-    \r
-    afterRepair : function(){\r
-        if(Ext.enableFx){\r
-            Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");\r
-        }\r
-        this.dragging = false;\r
-    },\r
-\r
-    \r
-    getRepairXY : function(e){\r
-        return Ext.Element.fly(this.dragData.ddel).getXY();  \r
-    }\r
-});
-\r
-Ext.dd.DropZone = function(el, config){\r
-    Ext.dd.DropZone.superclass.constructor.call(this, el, config);\r
-};\r
-\r
-Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {\r
-    \r
-    getTargetFromEvent : function(e){\r
-        return Ext.dd.Registry.getTargetFromEvent(e);\r
-    },\r
-\r
-    \r
-    onNodeEnter : function(n, dd, e, data){\r
-        \r
-    },\r
-\r
-    \r
-    onNodeOver : function(n, dd, e, data){\r
-        return this.dropAllowed;\r
-    },\r
-\r
-    \r
-    onNodeOut : function(n, dd, e, data){\r
-        \r
-    },\r
-\r
-    \r
-    onNodeDrop : function(n, dd, e, data){\r
-        return false;\r
-    },\r
-\r
-    \r
-    onContainerOver : function(dd, e, data){\r
-        return this.dropNotAllowed;\r
-    },\r
-\r
-    \r
-    onContainerDrop : function(dd, e, data){\r
-        return false;\r
-    },\r
-\r
-    \r
-    notifyEnter : function(dd, e, data){\r
-        return this.dropNotAllowed;\r
-    },\r
-\r
-    \r
-    notifyOver : function(dd, e, data){\r
-        var n = this.getTargetFromEvent(e);\r
-        if(!n){ 
-            if(this.lastOverNode){\r
-                this.onNodeOut(this.lastOverNode, dd, e, data);\r
-                this.lastOverNode = null;\r
-            }\r
-            return this.onContainerOver(dd, e, data);\r
-        }\r
-        if(this.lastOverNode != n){\r
-            if(this.lastOverNode){\r
-                this.onNodeOut(this.lastOverNode, dd, e, data);\r
-            }\r
-            this.onNodeEnter(n, dd, e, data);\r
-            this.lastOverNode = n;\r
-        }\r
-        return this.onNodeOver(n, dd, e, data);\r
-    },\r
-\r
-    \r
-    notifyOut : function(dd, e, data){\r
-        if(this.lastOverNode){\r
-            this.onNodeOut(this.lastOverNode, dd, e, data);\r
-            this.lastOverNode = null;\r
-        }\r
-    },\r
-\r
-    \r
-    notifyDrop : function(dd, e, data){\r
-        if(this.lastOverNode){\r
-            this.onNodeOut(this.lastOverNode, dd, e, data);\r
-            this.lastOverNode = null;\r
-        }\r
-        var n = this.getTargetFromEvent(e);\r
-        return n ?\r
-            this.onNodeDrop(n, dd, e, data) :\r
-            this.onContainerDrop(dd, e, data);\r
-    },\r
-\r
-    
-    triggerCacheRefresh : function(){\r
-        Ext.dd.DDM.refreshCache(this.groups);\r
-    }  \r
-});
-\r
-\r
-Ext.data.SortTypes = {\r
-    \r
-    none : function(s){\r
-        return s;\r
-    },\r
-    \r
-    \r
-    stripTagsRE : /<\/?[^>]+>/gi,\r
-    \r
-    \r
-    asText : function(s){\r
-        return String(s).replace(this.stripTagsRE, "");\r
-    },\r
-    \r
-    \r
-    asUCText : function(s){\r
-        return String(s).toUpperCase().replace(this.stripTagsRE, "");\r
-    },\r
-    \r
-    \r
-    asUCString : function(s) {\r
-       return String(s).toUpperCase();\r
-    },\r
-    \r
-    \r
-    asDate : function(s) {\r
-        if(!s){\r
-            return 0;\r
-        }\r
-        if(Ext.isDate(s)){\r
-            return s.getTime();\r
-        }\r
-       return Date.parse(String(s));\r
-    },\r
-    \r
-    \r
-    asFloat : function(s) {\r
-       var val = parseFloat(String(s).replace(/,/g, ""));\r
-        if(isNaN(val)) val = 0;\r
-       return val;\r
-    },\r
-    \r
-    \r
-    asInt : function(s) {\r
-        var val = parseInt(String(s).replace(/,/g, ""));\r
-        if(isNaN(val)) val = 0;\r
-       return val;\r
-    }\r
-};
-\r
-Ext.data.Record = function(data, id){\r
-    this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID;\r
-    this.data = data;\r
-};\r
-\r
-\r
-Ext.data.Record.create = function(o){\r
-    var f = Ext.extend(Ext.data.Record, {});\r
-       var p = f.prototype;\r
-    p.fields = new Ext.util.MixedCollection(false, function(field){\r
-        return field.name;\r
-    });\r
-    for(var i = 0, len = o.length; i < len; i++){\r
-        p.fields.add(new Ext.data.Field(o[i]));\r
-    }\r
-    f.getField = function(name){\r
-        return p.fields.get(name);\r
-    };\r
-    return f;\r
-};\r
-\r
-Ext.data.Record.AUTO_ID = 1000;\r
-Ext.data.Record.EDIT = 'edit';\r
-Ext.data.Record.REJECT = 'reject';\r
-Ext.data.Record.COMMIT = 'commit';\r
-\r
-Ext.data.Record.prototype = {\r
-       \r
-    \r
-    \r
-    dirty : false,\r
-    editing : false,\r
-    error: null,\r
-    \r
-    modified: null,\r
-\r
-    
-    join : function(store){\r
-        this.store = store;\r
-    },\r
-\r
-    \r
-    set : function(name, value){\r
-        if(String(this.data[name]) == String(value)){\r
-            return;\r
-        }\r
-        this.dirty = true;\r
-        if(!this.modified){\r
-            this.modified = {};\r
-        }\r
-        if(typeof this.modified[name] == 'undefined'){\r
-            this.modified[name] = this.data[name];\r
-        }\r
-        this.data[name] = value;\r
-        if(!this.editing && this.store){\r
-            this.store.afterEdit(this);\r
-        }\r
-    },\r
-\r
-    \r
-    get : function(name){\r
-        return this.data[name];\r
-    },\r
-\r
-    \r
-    beginEdit : function(){\r
-        this.editing = true;\r
-        this.modified = {};\r
-    },\r
-\r
-    \r
-    cancelEdit : function(){\r
-        this.editing = false;\r
-        delete this.modified;\r
-    },\r
-\r
-    \r
-    endEdit : function(){\r
-        this.editing = false;\r
-        if(this.dirty && this.store){\r
-            this.store.afterEdit(this);\r
-        }\r
-    },\r
-\r
-    \r
-    reject : function(silent){\r
-        var m = this.modified;\r
-        for(var n in m){\r
-            if(typeof m[n] != "function"){\r
-                this.data[n] = m[n];\r
-            }\r
-        }\r
-        this.dirty = false;\r
-        delete this.modified;\r
-        this.editing = false;\r
-        if(this.store && silent !== true){\r
-            this.store.afterReject(this);\r
-        }\r
-    },\r
-\r
-    \r
-    commit : function(silent){\r
-        this.dirty = false;\r
-        delete this.modified;\r
-        this.editing = false;\r
-        if(this.store && silent !== true){\r
-            this.store.afterCommit(this);\r
-        }\r
-    },\r
-\r
-    \r
-    getChanges : function(){\r
-        var m = this.modified, cs = {};\r
-        for(var n in m){\r
-            if(m.hasOwnProperty(n)){\r
-                cs[n] = this.data[n];\r
-            }\r
-        }\r
-        return cs;\r
-    },\r
-\r
-    
-    hasError : function(){\r
-        return this.error != null;\r
-    },\r
-\r
-    
-    clearError : function(){\r
-        this.error = null;\r
-    },\r
-\r
-    \r
-    copy : function(newId) {\r
-        return new this.constructor(Ext.apply({}, this.data), newId || this.id);\r
-    },\r
-\r
-    \r
-    isModified : function(fieldName){\r
-        return this.modified && this.modified.hasOwnProperty(fieldName);\r
-    }\r
-};
-\r
-Ext.StoreMgr = Ext.apply(new Ext.util.MixedCollection(), {\r
-    register : function(){\r
-        for(var i = 0, s; s = arguments[i]; i++){\r
-            this.add(s);\r
-        }\r
-    },\r
-\r
-    unregister : function(){\r
-        for(var i = 0, s; s = arguments[i]; i++){\r
-            this.remove(this.lookup(s));\r
-        }\r
-    },\r
-\r
-    \r
-    lookup : function(id){\r
-        return typeof id == "object" ? id : this.get(id);\r
-    },\r
-\r
-    
-    getKey : function(o){\r
-         return o.storeId || o.id; \r
-    }\r
-});
-\r
-Ext.data.Store = function(config){\r
-    this.data = new Ext.util.MixedCollection(false);\r
-    this.data.getKey = function(o){\r
-        return o.id;\r
-    };\r
-    \r
-    this.baseParams = {};\r
-    
-    this.paramNames = {\r
-        "start" : "start",\r
-        "limit" : "limit",\r
-        "sort" : "sort",\r
-        "dir" : "dir"\r
-    };\r
-\r
-    if(config && config.data){\r
-        this.inlineData = config.data;\r
-        delete config.data;\r
-    }\r
-\r
-    Ext.apply(this, config);\r
-\r
-    if(this.url && !this.proxy){\r
-        this.proxy = new Ext.data.HttpProxy({url: this.url});\r
-    }\r
-\r
-    if(this.reader){ 
-        if(!this.recordType){\r
-            this.recordType = this.reader.recordType;\r
-        }\r
-        if(this.reader.onMetaChange){\r
-            this.reader.onMetaChange = this.onMetaChange.createDelegate(this);\r
-        }\r
-    }\r
-\r
-    if(this.recordType){\r
-        this.fields = this.recordType.prototype.fields;\r
-    }\r
-    this.modified = [];\r
-\r
-    this.addEvents(\r
-        \r
-        'datachanged',\r
-        \r
-        'metachange',\r
-        \r
-        'add',\r
-        \r
-        'remove',\r
-        \r
-        'update',\r
-        \r
-        'clear',\r
-        \r
-        'beforeload',\r
-        \r
-        'load',\r
-        \r
-        'loadexception'\r
-    );\r
-\r
-    if(this.proxy){\r
-        this.relayEvents(this.proxy,  ["loadexception"]);\r
-    }\r
-    \r
-    this.sortToggle = {};\r
-       if(this.sortInfo){\r
-               this.setDefaultSort(this.sortInfo.field, this.sortInfo.direction);\r
-       }\r
-       \r
-    Ext.data.Store.superclass.constructor.call(this);\r
-\r
-    if(this.storeId || this.id){\r
-        Ext.StoreMgr.register(this);\r
-    }\r
-    if(this.inlineData){\r
-        this.loadData(this.inlineData);\r
-        delete this.inlineData;\r
-    }else if(this.autoLoad){\r
-        this.load.defer(10, this, [\r
-            typeof this.autoLoad == 'object' ?\r
-                this.autoLoad : undefined]);\r
-    }\r
-};\r
-Ext.extend(Ext.data.Store, Ext.util.Observable, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    remoteSort : false,\r
-\r
-    \r
-    pruneModifiedRecords : false,\r
-\r
-    \r
-   lastOptions : null,\r
-\r
-    destroy : function(){\r
-        if(this.id){\r
-            Ext.StoreMgr.unregister(this);\r
-        }\r
-        this.data = null;\r
-        this.purgeListeners();\r
-    },\r
-\r
-    \r
-    add : function(records){\r
-        records = [].concat(records);\r
-        if(records.length < 1){\r
-            return;\r
-        }\r
-        for(var i = 0, len = records.length; i < len; i++){\r
-            records[i].join(this);\r
-        }\r
-        var index = this.data.length;\r
-        this.data.addAll(records);\r
-        if(this.snapshot){\r
-            this.snapshot.addAll(records);\r
-        }\r
-        this.fireEvent("add", this, records, index);\r
-    },\r
-\r
-    \r
-    addSorted : function(record){\r
-        var index = this.findInsertIndex(record);\r
-        this.insert(index, record);\r
-    },\r
-\r
-    \r
-    remove : function(record){\r
-        var index = this.data.indexOf(record);\r
-        this.data.removeAt(index);\r
-        if(this.pruneModifiedRecords){\r
-            this.modified.remove(record);\r
-        }\r
-        if(this.snapshot){\r
-            this.snapshot.remove(record);\r
-        }\r
-        this.fireEvent("remove", this, record, index);\r
-    },\r
-\r
-    \r
-    removeAll : function(){\r
-        this.data.clear();\r
-        if(this.snapshot){\r
-            this.snapshot.clear();\r
-        }\r
-        if(this.pruneModifiedRecords){\r
-            this.modified = [];\r
-        }\r
-        this.fireEvent("clear", this);\r
-    },\r
-\r
-    \r
-    insert : function(index, records){\r
-        records = [].concat(records);\r
-        for(var i = 0, len = records.length; i < len; i++){\r
-            this.data.insert(index, records[i]);\r
-            records[i].join(this);\r
-        }\r
-        this.fireEvent("add", this, records, index);\r
-    },\r
-\r
-    \r
-    indexOf : function(record){\r
-        return this.data.indexOf(record);\r
-    },\r
-\r
-    \r
-    indexOfId : function(id){\r
-        return this.data.indexOfKey(id);\r
-    },\r
-\r
-    \r
-    getById : function(id){\r
-        return this.data.key(id);\r
-    },\r
-\r
-    \r
-    getAt : function(index){\r
-        return this.data.itemAt(index);\r
-    },\r
-\r
-    \r
-    getRange : function(start, end){\r
-        return this.data.getRange(start, end);\r
-    },\r
-\r
-    
-    storeOptions : function(o){\r
-        o = Ext.apply({}, o);\r
-        delete o.callback;\r
-        delete o.scope;\r
-        this.lastOptions = o;\r
-    },\r
-\r
-    \r
-    load : function(options){\r
-        options = options || {};\r
-        if(this.fireEvent("beforeload", this, options) !== false){\r
-            this.storeOptions(options);\r
-            var p = Ext.apply(options.params || {}, this.baseParams);\r
-            if(this.sortInfo && this.remoteSort){\r
-                var pn = this.paramNames;\r
-                p[pn["sort"]] = this.sortInfo.field;\r
-                p[pn["dir"]] = this.sortInfo.direction;\r
-            }\r
-            this.proxy.load(p, this.reader, this.loadRecords, this, options);\r
-            return true;\r
-        } else {\r
-          return false;\r
-        }\r
-    },\r
-\r
-    \r
-    reload : function(options){\r
-        this.load(Ext.applyIf(options||{}, this.lastOptions));\r
-    },\r
-\r
-    
-    
-    loadRecords : function(o, options, success){\r
-        if(!o || success === false){\r
-            if(success !== false){\r
-                this.fireEvent("load", this, [], options);\r
-            }\r
-            if(options.callback){\r
-                options.callback.call(options.scope || this, [], options, false);\r
-            }\r
-            return;\r
-        }\r
-        var r = o.records, t = o.totalRecords || r.length;\r
-        if(!options || options.add !== true){\r
-            if(this.pruneModifiedRecords){\r
-                this.modified = [];\r
-            }\r
-            for(var i = 0, len = r.length; i < len; i++){\r
-                r[i].join(this);\r
-            }\r
-            if(this.snapshot){\r
-                this.data = this.snapshot;\r
-                delete this.snapshot;\r
-            }\r
-            this.data.clear();\r
-            this.data.addAll(r);\r
-            this.totalLength = t;\r
-            this.applySort();\r
-            this.fireEvent("datachanged", this);\r
-        }else{\r
-            this.totalLength = Math.max(t, this.data.length+r.length);\r
-            this.add(r);\r
-        }\r
-        this.fireEvent("load", this, r, options);\r
-        if(options.callback){\r
-            options.callback.call(options.scope || this, r, options, true);\r
-        }\r
-    },\r
-\r
-    \r
-    loadData : function(o, append){\r
-        var r = this.reader.readRecords(o);\r
-        this.loadRecords(r, {add: append}, true);\r
-    },\r
-\r
-    \r
-    getCount : function(){\r
-        return this.data.length || 0;\r
-    },\r
-\r
-    \r
-    getTotalCount : function(){\r
-        return this.totalLength || 0;\r
-    },\r
-\r
-    \r
-    getSortState : function(){\r
-        return this.sortInfo;\r
-    },\r
-\r
-    
-    applySort : function(){\r
-        if(this.sortInfo && !this.remoteSort){\r
-            var s = this.sortInfo, f = s.field;\r
-            this.sortData(f, s.direction);\r
-        }\r
-    },\r
-\r
-    
-    sortData : function(f, direction){\r
-        direction = direction || 'ASC';\r
-        var st = this.fields.get(f).sortType;\r
-        var fn = function(r1, r2){\r
-            var v1 = st(r1.data[f]), v2 = st(r2.data[f]);\r
-            return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);\r
-        };\r
-        this.data.sort(direction, fn);\r
-        if(this.snapshot && this.snapshot != this.data){\r
-            this.snapshot.sort(direction, fn);\r
-        }\r
-    },\r
-\r
-    \r
-    setDefaultSort : function(field, dir){\r
-        dir = dir ? dir.toUpperCase() : "ASC";\r
-        this.sortInfo = {field: field, direction: dir};\r
-        this.sortToggle[field] = dir;\r
-    },\r
-\r
-    \r
-    sort : function(fieldName, dir){\r
-        var f = this.fields.get(fieldName);\r
-        if(!f){\r
-            return false;\r
-        }\r
-        if(!dir){\r
-            if(this.sortInfo && this.sortInfo.field == f.name){ 
-                dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC");\r
-            }else{\r
-                dir = f.sortDir;\r
-            }\r
-        }\r
-        var st = (this.sortToggle) ? this.sortToggle[f.name] : null;\r
-        var si = (this.sortInfo) ? this.sortInfo : null;\r
-        \r
-        this.sortToggle[f.name] = dir;\r
-        this.sortInfo = {field: f.name, direction: dir};\r
-        if(!this.remoteSort){\r
-            this.applySort();\r
-            this.fireEvent("datachanged", this);\r
-        }else{\r
-            if (!this.load(this.lastOptions)) {\r
-                if (st) {\r
-                    this.sortToggle[f.name] = st;\r
-                }\r
-                if (si) {\r
-                    this.sortInfo = si;\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    each : function(fn, scope){\r
-        this.data.each(fn, scope);\r
-    },\r
-\r
-    \r
-    getModifiedRecords : function(){\r
-        return this.modified;\r
-    },\r
-\r
-    
-    createFilterFn : function(property, value, anyMatch, caseSensitive){\r
-        if(Ext.isEmpty(value, false)){\r
-            return false;\r
-        }\r
-        value = this.data.createValueMatcher(value, anyMatch, caseSensitive);\r
-        return function(r){\r
-            return value.test(r.data[property]);\r
-        };\r
-    },\r
-\r
-    \r
-    sum : function(property, start, end){\r
-        var rs = this.data.items, v = 0;\r
-        start = start || 0;\r
-        end = (end || end === 0) ? end : rs.length-1;\r
-\r
-        for(var i = start; i <= end; i++){\r
-            v += (rs[i].data[property] || 0);\r
-        }\r
-        return v;\r
-    },\r
-\r
-    \r
-    filter : function(property, value, anyMatch, caseSensitive){\r
-        var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);\r
-        return fn ? this.filterBy(fn) : this.clearFilter();\r
-    },\r
-\r
-    \r
-    filterBy : function(fn, scope){\r
-        this.snapshot = this.snapshot || this.data;\r
-        this.data = this.queryBy(fn, scope||this);\r
-        this.fireEvent("datachanged", this);\r
-    },\r
-\r
-    \r
-    query : function(property, value, anyMatch, caseSensitive){\r
-        var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);\r
-        return fn ? this.queryBy(fn) : this.data.clone();\r
-    },\r
-\r
-    \r
-    queryBy : function(fn, scope){\r
-        var data = this.snapshot || this.data;\r
-        return data.filterBy(fn, scope||this);\r
-    },\r
-\r
-    \r
-    find : function(property, value, start, anyMatch, caseSensitive){\r
-        var fn = this.createFilterFn(property, value, anyMatch, caseSensitive);\r
-        return fn ? this.data.findIndexBy(fn, null, start) : -1;\r
-    },\r
-\r
-    \r
-    findBy : function(fn, scope, start){\r
-        return this.data.findIndexBy(fn, scope, start);\r
-    },\r
-\r
-    \r
-    collect : function(dataIndex, allowNull, bypassFilter){\r
-        var d = (bypassFilter === true && this.snapshot) ?\r
-                this.snapshot.items : this.data.items;\r
-        var v, sv, r = [], l = {};\r
-        for(var i = 0, len = d.length; i < len; i++){\r
-            v = d[i].data[dataIndex];\r
-            sv = String(v);\r
-            if((allowNull || !Ext.isEmpty(v)) && !l[sv]){\r
-                l[sv] = true;\r
-                r[r.length] = v;\r
-            }\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    clearFilter : function(suppressEvent){\r
-        if(this.isFiltered()){\r
-            this.data = this.snapshot;\r
-            delete this.snapshot;\r
-            if(suppressEvent !== true){\r
-                this.fireEvent("datachanged", this);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    isFiltered : function(){\r
-        return this.snapshot && this.snapshot != this.data;\r
-    },\r
-\r
-    
-    afterEdit : function(record){\r
-        if(this.modified.indexOf(record) == -1){\r
-            this.modified.push(record);\r
-        }\r
-        this.fireEvent("update", this, record, Ext.data.Record.EDIT);\r
-    },\r
-\r
-    
-    afterReject : function(record){\r
-        this.modified.remove(record);\r
-        this.fireEvent("update", this, record, Ext.data.Record.REJECT);\r
-    },\r
-\r
-    
-    afterCommit : function(record){\r
-        this.modified.remove(record);\r
-        this.fireEvent("update", this, record, Ext.data.Record.COMMIT);\r
-    },\r
-\r
-    \r
-    commitChanges : function(){\r
-        var m = this.modified.slice(0);\r
-        this.modified = [];\r
-        for(var i = 0, len = m.length; i < len; i++){\r
-            m[i].commit();\r
-        }\r
-    },\r
-\r
-    \r
-    rejectChanges : function(){\r
-        var m = this.modified.slice(0);\r
-        this.modified = [];\r
-        for(var i = 0, len = m.length; i < len; i++){\r
-            m[i].reject();\r
-        }\r
-    },\r
-\r
-    
-    onMetaChange : function(meta, rtype, o){\r
-        this.recordType = rtype;\r
-        this.fields = rtype.prototype.fields;\r
-        delete this.snapshot;\r
-        this.sortInfo = meta.sortInfo;\r
-        this.modified = [];\r
-        this.fireEvent('metachange', this, this.reader.meta);\r
-    },\r
-\r
-    
-    findInsertIndex : function(record){\r
-        this.suspendEvents();\r
-        var data = this.data.clone();\r
-        this.data.add(record);\r
-        this.applySort();\r
-        var index = this.data.indexOf(record);\r
-        this.data = data;\r
-        this.resumeEvents();\r
-        return index;\r
-    }\r
-});
-
-Ext.data.SimpleStore = function(config){
-    Ext.data.SimpleStore.superclass.constructor.call(this, Ext.apply(config, {
-        reader: new Ext.data.ArrayReader({
-                id: config.id
-            },
-            Ext.data.Record.create(config.fields)
-        )
-    }));
-};
-Ext.extend(Ext.data.SimpleStore, Ext.data.Store, {
-    loadData : function(data, append){
-        if(this.expandData === true){
-            var r = [];
-            for(var i = 0, len = data.length; i < len; i++){
-                r[r.length] = [data[i]];
-            }
-            data = r;
-        }
-        Ext.data.SimpleStore.superclass.loadData.call(this, data, append);
-    }
-});
-\r
-Ext.data.JsonStore = function(c){\r
-    Ext.data.JsonStore.superclass.constructor.call(this, Ext.apply(c, {\r
-        proxy: !c.data ? new Ext.data.HttpProxy({url: c.url}) : undefined,\r
-        reader: new Ext.data.JsonReader(c, c.fields)\r
-    }));\r
-};\r
-Ext.extend(Ext.data.JsonStore, Ext.data.Store);
-
-
-
-Ext.data.Field = function(config){\r
-    if(typeof config == "string"){\r
-        config = {name: config};\r
-    }\r
-    Ext.apply(this, config);\r
-    \r
-    if(!this.type){\r
-        this.type = "auto";\r
-    }\r
-    \r
-    var st = Ext.data.SortTypes;\r
-    
-    if(typeof this.sortType == "string"){\r
-        this.sortType = st[this.sortType];\r
-    }\r
-    \r
-    
-    if(!this.sortType){\r
-        switch(this.type){\r
-            case "string":\r
-                this.sortType = st.asUCString;\r
-                break;\r
-            case "date":\r
-                this.sortType = st.asDate;\r
-                break;\r
-            default:\r
-                this.sortType = st.none;\r
-        }\r
-    }\r
-\r
-    
-    var stripRe = /[\$,%]/g;\r
-\r
-    
-    
-    if(!this.convert){\r
-        var cv, dateFormat = this.dateFormat;\r
-        switch(this.type){\r
-            case "":\r
-            case "auto":\r
-            case undefined:\r
-                cv = function(v){ return v; };\r
-                break;\r
-            case "string":\r
-                cv = function(v){ return (v === undefined || v === null) ? '' : String(v); };\r
-                break;\r
-            case "int":\r
-                cv = function(v){\r
-                    return v !== undefined && v !== null && v !== '' ?\r
-                           parseInt(String(v).replace(stripRe, ""), 10) : '';\r
-                    };\r
-                break;\r
-            case "float":\r
-                cv = function(v){\r
-                    return v !== undefined && v !== null && v !== '' ?\r
-                           parseFloat(String(v).replace(stripRe, ""), 10) : ''; \r
-                    };\r
-                break;\r
-            case "bool":\r
-            case "boolean":\r
-                cv = function(v){ return v === true || v === "true" || v == 1; };\r
-                break;\r
-            case "date":\r
-                cv = function(v){\r
-                    if(!v){\r
-                        return '';\r
-                    }\r
-                    if(Ext.isDate(v)){\r
-                        return v;\r
-                    }\r
-                    if(dateFormat){\r
-                        if(dateFormat == "timestamp"){\r
-                            return new Date(v*1000);\r
-                        }\r
-                        if(dateFormat == "time"){\r
-                            return new Date(parseInt(v, 10));\r
-                        }\r
-                        return Date.parseDate(v, dateFormat);\r
-                    }\r
-                    var parsed = Date.parse(v);\r
-                    return parsed ? new Date(parsed) : null;\r
-                };\r
-             break;\r
-            \r
-        }\r
-        this.convert = cv;\r
-    }\r
-};\r
-\r
-Ext.data.Field.prototype = {\r
-    dateFormat: null,\r
-    defaultValue: "",\r
-    mapping: null,\r
-    sortType : null,\r
-    sortDir : "ASC"\r
-};
-\r
-Ext.data.DataReader = function(meta, recordType){\r
-    \r
-    this.meta = meta;\r
-    this.recordType = Ext.isArray(recordType) ? \r
-        Ext.data.Record.create(recordType) : recordType;\r
-};\r
-\r
-Ext.data.DataReader.prototype = {\r
-    \r
-};
-\r
-Ext.data.DataProxy = function(){\r
-    this.addEvents(\r
-        \r
-        'beforeload',\r
-        \r
-        'load',\r
-        \r
-        'loadexception'\r
-    );\r
-    Ext.data.DataProxy.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
-\r
-Ext.data.MemoryProxy = function(data){\r
-    Ext.data.MemoryProxy.superclass.constructor.call(this);\r
-    this.data = data;\r
-};\r
-\r
-Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {\r
-    \r
-    load : function(params, reader, callback, scope, arg){\r
-        params = params || {};\r
-        var result;\r
-        try {\r
-            result = reader.readRecords(this.data);\r
-        }catch(e){\r
-            this.fireEvent("loadexception", this, arg, null, e);\r
-            callback.call(scope, null, arg, false);\r
-            return;\r
-        }\r
-        callback.call(scope, result, arg, true);\r
-    },\r
-    \r
-    
-    update : function(params, records){\r
-        \r
-    }\r
-});
-\r
-Ext.data.HttpProxy = function(conn){\r
-    Ext.data.HttpProxy.superclass.constructor.call(this);\r
-    \r
-    this.conn = conn;\r
-    this.useAjax = !conn || !conn.events;\r
-};\r
-\r
-Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {\r
-    \r
-    getConnection : function(){\r
-        return this.useAjax ? Ext.Ajax : this.conn;\r
-    },\r
-\r
-    \r
-    load : function(params, reader, callback, scope, arg){\r
-        if(this.fireEvent("beforeload", this, params) !== false){\r
-            var  o = {\r
-                params : params || {},\r
-                request: {\r
-                    callback : callback,\r
-                    scope : scope,\r
-                    arg : arg\r
-                },\r
-                reader: reader,\r
-                callback : this.loadResponse,\r
-                scope: this\r
-            };\r
-            if(this.useAjax){\r
-                Ext.applyIf(o, this.conn);\r
-                if(this.activeRequest){\r
-                    Ext.Ajax.abort(this.activeRequest);\r
-                }\r
-                this.activeRequest = Ext.Ajax.request(o);\r
-            }else{\r
-                this.conn.request(o);\r
-            }\r
-        }else{\r
-            callback.call(scope||this, null, arg, false);\r
-        }\r
-    },\r
-\r
-    
-    loadResponse : function(o, success, response){\r
-        delete this.activeRequest;\r
-        if(!success){\r
-            this.fireEvent("loadexception", this, o, response);\r
-            o.request.callback.call(o.request.scope, null, o.request.arg, false);\r
-            return;\r
-        }\r
-        var result;\r
-        try {\r
-            result = o.reader.read(response);\r
-        }catch(e){\r
-            this.fireEvent("loadexception", this, o, response, e);\r
-            o.request.callback.call(o.request.scope, null, o.request.arg, false);\r
-            return;\r
-        }\r
-        this.fireEvent("load", this, o, o.request.arg);\r
-        o.request.callback.call(o.request.scope, result, o.request.arg, true);\r
-    },\r
-    \r
-    
-    update : function(dataSet){\r
-        \r
-    },\r
-    \r
-    
-    updateResponse : function(dataSet){\r
-        \r
-    }\r
-});
-\r
-Ext.data.ScriptTagProxy = function(config){\r
-    Ext.data.ScriptTagProxy.superclass.constructor.call(this);\r
-    Ext.apply(this, config);\r
-    this.head = document.getElementsByTagName("head")[0];\r
-};\r
-\r
-Ext.data.ScriptTagProxy.TRANS_ID = 1000;\r
-\r
-Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {\r
-    \r
-    \r
-    timeout : 30000,\r
-    \r
-    callbackParam : "callback",\r
-    \r
-    nocache : true,\r
-\r
-    \r
-    load : function(params, reader, callback, scope, arg){\r
-        if(this.fireEvent("beforeload", this, params) !== false){\r
-\r
-            var p = Ext.urlEncode(Ext.apply(params, this.extraParams));\r
-\r
-            var url = this.url;\r
-            url += (url.indexOf("?") != -1 ? "&" : "?") + p;\r
-            if(this.nocache){\r
-                url += "&_dc=" + (new Date().getTime());\r
-            }\r
-            var transId = ++Ext.data.ScriptTagProxy.TRANS_ID;\r
-            var trans = {\r
-                id : transId,\r
-                cb : "stcCallback"+transId,\r
-                scriptId : "stcScript"+transId,\r
-                params : params,\r
-                arg : arg,\r
-                url : url,\r
-                callback : callback,\r
-                scope : scope,\r
-                reader : reader\r
-            };\r
-            var conn = this;\r
-\r
-            window[trans.cb] = function(o){\r
-                conn.handleResponse(o, trans);\r
-            };\r
-\r
-            url += String.format("&{0}={1}", this.callbackParam, trans.cb);\r
-\r
-            if(this.autoAbort !== false){\r
-                this.abort();\r
-            }\r
-\r
-            trans.timeoutId = this.handleFailure.defer(this.timeout, this, [trans]);\r
-\r
-            var script = document.createElement("script");\r
-            script.setAttribute("src", url);\r
-            script.setAttribute("type", "text/javascript");\r
-            script.setAttribute("id", trans.scriptId);\r
-            this.head.appendChild(script);\r
-\r
-            this.trans = trans;\r
-        }else{\r
-            callback.call(scope||this, null, arg, false);\r
-        }\r
-    },\r
-\r
-    
-    isLoading : function(){\r
-        return this.trans ? true : false;\r
-    },\r
-\r
-    \r
-    abort : function(){\r
-        if(this.isLoading()){\r
-            this.destroyTrans(this.trans);\r
-        }\r
-    },\r
-\r
-    
-    destroyTrans : function(trans, isLoaded){\r
-        this.head.removeChild(document.getElementById(trans.scriptId));\r
-        clearTimeout(trans.timeoutId);\r
-        if(isLoaded){\r
-            window[trans.cb] = undefined;\r
-            try{\r
-                delete window[trans.cb];\r
-            }catch(e){}\r
-        }else{\r
-            
-            window[trans.cb] = function(){\r
-                window[trans.cb] = undefined;\r
-                try{\r
-                    delete window[trans.cb];\r
-                }catch(e){}\r
-            };\r
-        }\r
-    },\r
-\r
-    
-    handleResponse : function(o, trans){\r
-        this.trans = false;\r
-        this.destroyTrans(trans, true);\r
-        var result;\r
-        try {\r
-            result = trans.reader.readRecords(o);\r
-        }catch(e){\r
-            this.fireEvent("loadexception", this, o, trans.arg, e);\r
-            trans.callback.call(trans.scope||window, null, trans.arg, false);\r
-            return;\r
-        }\r
-        this.fireEvent("load", this, o, trans.arg);\r
-        trans.callback.call(trans.scope||window, result, trans.arg, true);\r
-    },\r
-\r
-    
-    handleFailure : function(trans){\r
-        this.trans = false;\r
-        this.destroyTrans(trans, false);\r
-        this.fireEvent("loadexception", this, null, trans.arg);\r
-        trans.callback.call(trans.scope||window, null, trans.arg, false);\r
-    }\r
-});
-\r
-Ext.data.JsonReader = function(meta, recordType){\r
-    meta = meta || {};\r
-    Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);\r
-};\r
-Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {\r
-    \r
-    \r
-    read : function(response){\r
-        var json = response.responseText;\r
-        var o = eval("("+json+")");\r
-        if(!o) {\r
-            throw {message: "JsonReader.read: Json object not found"};\r
-        }\r
-        if(o.metaData){\r
-            delete this.ef;\r
-            this.meta = o.metaData;\r
-            this.recordType = Ext.data.Record.create(o.metaData.fields);\r
-            this.onMetaChange(this.meta, this.recordType, o);\r
-        }\r
-        return this.readRecords(o);\r
-    },\r
-\r
-    
-    onMetaChange : function(meta, recordType, o){\r
-\r
-    },\r
-\r
-    \r
-    simpleAccess: function(obj, subsc) {\r
-       return obj[subsc];\r
-    },\r
-\r
-       \r
-    getJsonAccessor: function(){\r
-        var re = /[\[\.]/;\r
-        return function(expr) {\r
-            try {\r
-                return(re.test(expr))\r
-                    ? new Function("obj", "return obj." + expr)\r
-                    : function(obj){\r
-                        return obj[expr];\r
-                    };\r
-            } catch(e){}\r
-            return Ext.emptyFn;\r
-        };\r
-    }(),\r
-\r
-    \r
-    readRecords : function(o){\r
-        \r
-        this.jsonData = o;\r
-        var s = this.meta, Record = this.recordType,\r
-            f = Record.prototype.fields, fi = f.items, fl = f.length;\r
-\r
-
-        if (!this.ef) {\r
-            if(s.totalProperty) {\r
-                   this.getTotal = this.getJsonAccessor(s.totalProperty);\r
-               }\r
-               if(s.successProperty) {\r
-                   this.getSuccess = this.getJsonAccessor(s.successProperty);\r
-               }\r
-               this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};\r
-               if (s.id) {\r
-                       var g = this.getJsonAccessor(s.id);\r
-                       this.getId = function(rec) {\r
-                               var r = g(rec);\r
-                               return (r === undefined || r === "") ? null : r;\r
-                       };\r
-               } else {\r
-                       this.getId = function(){return null;};\r
-               }\r
-            this.ef = [];\r
-            for(var i = 0; i < fl; i++){\r
-                f = fi[i];\r
-                var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;\r
-                this.ef[i] = this.getJsonAccessor(map);\r
-            }\r
-        }\r
-\r
-       var root = this.getRoot(o), c = root.length, totalRecords = c, success = true;\r
-       if(s.totalProperty){\r
-            var v = parseInt(this.getTotal(o), 10);\r
-            if(!isNaN(v)){\r
-                totalRecords = v;\r
-            }\r
-        }\r
-        if(s.successProperty){\r
-            var v = this.getSuccess(o);\r
-            if(v === false || v === 'false'){\r
-                success = false;\r
-            }\r
-        }\r
-        var records = [];\r
-           for(var i = 0; i < c; i++){\r
-                   var n = root[i];\r
-               var values = {};\r
-               var id = this.getId(n);\r
-               for(var j = 0; j < fl; j++){\r
-                   f = fi[j];\r
-                var v = this.ef[j](n);\r
-                values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue, n);\r
-               }\r
-               var record = new Record(values, id);\r
-               record.json = n;\r
-               records[i] = record;\r
-           }\r
-           return {\r
-               success : success,\r
-               records : records,\r
-               totalRecords : totalRecords\r
-           };\r
-    }\r
-});
-\r
-Ext.data.XmlReader = function(meta, recordType){\r
-    meta = meta || {};\r
-    Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType || meta.fields);\r
-};\r
-Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {\r
-    \r
-    read : function(response){\r
-        var doc = response.responseXML;\r
-        if(!doc) {\r
-            throw {message: "XmlReader.read: XML Document not available"};\r
-        }\r
-        return this.readRecords(doc);\r
-    },\r
-\r
-    \r
-    readRecords : function(doc){\r
-        \r
-        this.xmlData = doc;\r
-        var root = doc.documentElement || doc;\r
-       var q = Ext.DomQuery;\r
-       var recordType = this.recordType, fields = recordType.prototype.fields;\r
-       var sid = this.meta.id;\r
-       var totalRecords = 0, success = true;\r
-       if(this.meta.totalRecords){\r
-           totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);\r
-       }\r
-\r
-        if(this.meta.success){\r
-            var sv = q.selectValue(this.meta.success, root, true);\r
-            success = sv !== false && sv !== 'false';\r
-       }\r
-       var records = [];\r
-       var ns = q.select(this.meta.record, root);\r
-        for(var i = 0, len = ns.length; i < len; i++) {\r
-               var n = ns[i];\r
-               var values = {};\r
-               var id = sid ? q.selectValue(sid, n) : undefined;\r
-               for(var j = 0, jlen = fields.length; j < jlen; j++){\r
-                   var f = fields.items[j];\r
-                var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);\r
-                   v = f.convert(v, n);\r
-                   values[f.name] = v;\r
-               }\r
-               var record = new recordType(values, id);\r
-               record.node = n;\r
-               records[records.length] = record;\r
-           }\r
-\r
-           return {\r
-               success : success,\r
-               records : records,\r
-               totalRecords : totalRecords || records.length\r
-           };\r
-    }\r
-});
-\r
-Ext.data.ArrayReader = Ext.extend(Ext.data.JsonReader, {\r
-    \r
-    readRecords : function(o){\r
-        var sid = this.meta ? this.meta.id : null;\r
-       var recordType = this.recordType, fields = recordType.prototype.fields;\r
-       var records = [];\r
-       var root = o;\r
-           for(var i = 0; i < root.length; i++){\r
-                   var n = root[i];\r
-               var values = {};\r
-               var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);\r
-               for(var j = 0, jlen = fields.length; j < jlen; j++){\r
-                var f = fields.items[j];\r
-                var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;\r
-                var v = n[k] !== undefined ? n[k] : f.defaultValue;\r
-                v = f.convert(v, n);\r
-                values[f.name] = v;\r
-            }\r
-               var record = new recordType(values, id);\r
-               record.json = n;\r
-               records[records.length] = record;\r
-           }\r
-           return {\r
-               records : records,\r
-               totalRecords : records.length\r
-           };\r
-    }\r
-});
-\r
-Ext.data.Tree = function(root){\r
-   this.nodeHash = {};\r
-   \r
-   this.root = null;\r
-   if(root){\r
-       this.setRootNode(root);\r
-   }\r
-   this.addEvents(\r
-       \r
-       "append",\r
-       \r
-       "remove",\r
-       \r
-       "move",\r
-       \r
-       "insert",\r
-       \r
-       "beforeappend",\r
-       \r
-       "beforeremove",\r
-       \r
-       "beforemove",\r
-       \r
-       "beforeinsert"\r
-   );\r
-\r
-    Ext.data.Tree.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.data.Tree, Ext.util.Observable, {\r
-    \r
-    pathSeparator: "/",\r
-\r
-    
-    proxyNodeEvent : function(){\r
-        return this.fireEvent.apply(this, arguments);\r
-    },\r
-\r
-    \r
-    getRootNode : function(){\r
-        return this.root;\r
-    },\r
-\r
-    \r
-    setRootNode : function(node){\r
-        this.root = node;\r
-        node.ownerTree = this;\r
-        node.isRoot = true;\r
-        this.registerNode(node);\r
-        return node;\r
-    },\r
-\r
-    \r
-    getNodeById : function(id){\r
-        return this.nodeHash[id];\r
-    },\r
-\r
-    
-    registerNode : function(node){\r
-        this.nodeHash[node.id] = node;\r
-    },\r
-\r
-    
-    unregisterNode : function(node){\r
-        delete this.nodeHash[node.id];\r
-    },\r
-\r
-    toString : function(){\r
-        return "[Tree"+(this.id?" "+this.id:"")+"]";\r
-    }\r
-});\r
-\r
-\r
-Ext.data.Node = function(attributes){\r
-    \r
-    this.attributes = attributes || {};\r
-    this.leaf = this.attributes.leaf;\r
-    \r
-    this.id = this.attributes.id;\r
-    if(!this.id){\r
-        this.id = Ext.id(null, "ynode-");\r
-        this.attributes.id = this.id;\r
-    }\r
-    \r
-    this.childNodes = [];\r
-    if(!this.childNodes.indexOf){ 
-        this.childNodes.indexOf = function(o){\r
-            for(var i = 0, len = this.length; i < len; i++){\r
-                if(this[i] == o) return i;\r
-            }\r
-            return -1;\r
-        };\r
-    }\r
-    \r
-    this.parentNode = null;\r
-    \r
-    this.firstChild = null;\r
-    \r
-    this.lastChild = null;\r
-    \r
-    this.previousSibling = null;\r
-    \r
-    this.nextSibling = null;\r
-\r
-    this.addEvents({\r
-       \r
-       "append" : true,\r
-       \r
-       "remove" : true,\r
-       \r
-       "move" : true,\r
-       \r
-       "insert" : true,\r
-       \r
-       "beforeappend" : true,\r
-       \r
-       "beforeremove" : true,\r
-       \r
-       "beforemove" : true,\r
-       \r
-       "beforeinsert" : true\r
-   });\r
-    this.listeners = this.attributes.listeners;\r
-    Ext.data.Node.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.data.Node, Ext.util.Observable, {\r
-    
-    fireEvent : function(evtName){\r
-        
-        if(Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false){\r
-            return false;\r
-        }\r
-        
-        var ot = this.getOwnerTree();\r
-        if(ot){\r
-            if(ot.proxyNodeEvent.apply(ot, arguments) === false){\r
-                return false;\r
-            }\r
-        }\r
-        return true;\r
-    },\r
-\r
-    \r
-    isLeaf : function(){\r
-        return this.leaf === true;\r
-    },\r
-\r
-    
-    setFirstChild : function(node){\r
-        this.firstChild = node;\r
-    },\r
-\r
-    
-    setLastChild : function(node){\r
-        this.lastChild = node;\r
-    },\r
-\r
-\r
-    \r
-    isLast : function(){\r
-       return (!this.parentNode ? true : this.parentNode.lastChild == this);\r
-    },\r
-\r
-    \r
-    isFirst : function(){\r
-       return (!this.parentNode ? true : this.parentNode.firstChild == this);\r
-    },\r
-\r
-    hasChildNodes : function(){\r
-        return !this.isLeaf() && this.childNodes.length > 0;\r
-    },\r
-\r
-    \r
-    appendChild : function(node){\r
-        var multi = false;\r
-        if(Ext.isArray(node)){\r
-            multi = node;\r
-        }else if(arguments.length > 1){\r
-            multi = arguments;\r
-        }\r
-        
-        if(multi){\r
-            for(var i = 0, len = multi.length; i < len; i++) {\r
-               this.appendChild(multi[i]);\r
-            }\r
-        }else{\r
-            if(this.fireEvent("beforeappend", this.ownerTree, this, node) === false){\r
-                return false;\r
-            }\r
-            var index = this.childNodes.length;\r
-            var oldParent = node.parentNode;\r
-            
-            if(oldParent){\r
-                if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index) === false){\r
-                    return false;\r
-                }\r
-                oldParent.removeChild(node);\r
-            }\r
-            index = this.childNodes.length;\r
-            if(index == 0){\r
-                this.setFirstChild(node);\r
-            }\r
-            this.childNodes.push(node);\r
-            node.parentNode = this;\r
-            var ps = this.childNodes[index-1];\r
-            if(ps){\r
-                node.previousSibling = ps;\r
-                ps.nextSibling = node;\r
-            }else{\r
-                node.previousSibling = null;\r
-            }\r
-            node.nextSibling = null;\r
-            this.setLastChild(node);\r
-            node.setOwnerTree(this.getOwnerTree());\r
-            this.fireEvent("append", this.ownerTree, this, node, index);\r
-            if(oldParent){\r
-                node.fireEvent("move", this.ownerTree, node, oldParent, this, index);\r
-            }\r
-            return node;\r
-        }\r
-    },\r
-\r
-    \r
-    removeChild : function(node){\r
-        var index = this.childNodes.indexOf(node);\r
-        if(index == -1){\r
-            return false;\r
-        }\r
-        if(this.fireEvent("beforeremove", this.ownerTree, this, node) === false){\r
-            return false;\r
-        }\r
-\r
-        
-        this.childNodes.splice(index, 1);\r
-\r
-        
-        if(node.previousSibling){\r
-            node.previousSibling.nextSibling = node.nextSibling;\r
-        }\r
-        if(node.nextSibling){\r
-            node.nextSibling.previousSibling = node.previousSibling;\r
-        }\r
-\r
-        
-        if(this.firstChild == node){\r
-            this.setFirstChild(node.nextSibling);\r
-        }\r
-        if(this.lastChild == node){\r
-            this.setLastChild(node.previousSibling);\r
-        }\r
-\r
-        node.setOwnerTree(null);\r
-        
-        node.parentNode = null;\r
-        node.previousSibling = null;\r
-        node.nextSibling = null;\r
-        this.fireEvent("remove", this.ownerTree, this, node);\r
-        return node;\r
-    },\r
-\r
-    \r
-    insertBefore : function(node, refNode){\r
-        if(!refNode){ 
-            return this.appendChild(node);\r
-        }\r
-        
-        if(node == refNode){\r
-            return false;\r
-        }\r
-\r
-        if(this.fireEvent("beforeinsert", this.ownerTree, this, node, refNode) === false){\r
-            return false;\r
-        }\r
-        var index = this.childNodes.indexOf(refNode);\r
-        var oldParent = node.parentNode;\r
-        var refIndex = index;\r
-\r
-        
-        if(oldParent == this && this.childNodes.indexOf(node) < index){\r
-            refIndex--;\r
-        }\r
-\r
-        
-        if(oldParent){\r
-            if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index, refNode) === false){\r
-                return false;\r
-            }\r
-            oldParent.removeChild(node);\r
-        }\r
-        if(refIndex == 0){\r
-            this.setFirstChild(node);\r
-        }\r
-        this.childNodes.splice(refIndex, 0, node);\r
-        node.parentNode = this;\r
-        var ps = this.childNodes[refIndex-1];\r
-        if(ps){\r
-            node.previousSibling = ps;\r
-            ps.nextSibling = node;\r
-        }else{\r
-            node.previousSibling = null;\r
-        }\r
-        node.nextSibling = refNode;\r
-        refNode.previousSibling = node;\r
-        node.setOwnerTree(this.getOwnerTree());\r
-        this.fireEvent("insert", this.ownerTree, this, node, refNode);\r
-        if(oldParent){\r
-            node.fireEvent("move", this.ownerTree, node, oldParent, this, refIndex, refNode);\r
-        }\r
-        return node;\r
-    },\r
-\r
-    \r
-    remove : function(){\r
-        this.parentNode.removeChild(this);\r
-        return this;\r
-    },\r
-\r
-    \r
-    item : function(index){\r
-        return this.childNodes[index];\r
-    },\r
-\r
-    \r
-    replaceChild : function(newChild, oldChild){\r
-        this.insertBefore(newChild, oldChild);\r
-        this.removeChild(oldChild);\r
-        return oldChild;\r
-    },\r
-\r
-    \r
-    indexOf : function(child){\r
-        return this.childNodes.indexOf(child);\r
-    },\r
-\r
-    \r
-    getOwnerTree : function(){\r
-        
-        if(!this.ownerTree){\r
-            var p = this;\r
-            while(p){\r
-                if(p.ownerTree){\r
-                    this.ownerTree = p.ownerTree;\r
-                    break;\r
-                }\r
-                p = p.parentNode;\r
-            }\r
-        }\r
-        return this.ownerTree;\r
-    },\r
-\r
-    \r
-    getDepth : function(){\r
-        var depth = 0;\r
-        var p = this;\r
-        while(p.parentNode){\r
-            ++depth;\r
-            p = p.parentNode;\r
-        }\r
-        return depth;\r
-    },\r
-\r
-    
-    setOwnerTree : function(tree){\r
-        
-        if(tree != this.ownerTree){\r
-            if(this.ownerTree){\r
-                this.ownerTree.unregisterNode(this);\r
-            }\r
-            this.ownerTree = tree;\r
-            var cs = this.childNodes;\r
-            for(var i = 0, len = cs.length; i < len; i++) {\r
-               cs[i].setOwnerTree(tree);\r
-            }\r
-            if(tree){\r
-                tree.registerNode(this);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getPath : function(attr){\r
-        attr = attr || "id";\r
-        var p = this.parentNode;\r
-        var b = [this.attributes[attr]];\r
-        while(p){\r
-            b.unshift(p.attributes[attr]);\r
-            p = p.parentNode;\r
-        }\r
-        var sep = this.getOwnerTree().pathSeparator;\r
-        return sep + b.join(sep);\r
-    },\r
-\r
-    \r
-    bubble : function(fn, scope, args){\r
-        var p = this;\r
-        while(p){\r
-            if(fn.apply(scope || p, args || [p]) === false){\r
-                break;\r
-            }\r
-            p = p.parentNode;\r
-        }\r
-    },\r
-\r
-    \r
-    cascade : function(fn, scope, args){\r
-        if(fn.apply(scope || this, args || [this]) !== false){\r
-            var cs = this.childNodes;\r
-            for(var i = 0, len = cs.length; i < len; i++) {\r
-               cs[i].cascade(fn, scope, args);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    eachChild : function(fn, scope, args){\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++) {\r
-               if(fn.apply(scope || this, args || [cs[i]]) === false){\r
-                   break;\r
-               }\r
-        }\r
-    },\r
-\r
-    \r
-    findChild : function(attribute, value){\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++) {\r
-               if(cs[i].attributes[attribute] == value){\r
-                   return cs[i];\r
-               }\r
-        }\r
-        return null;\r
-    },\r
-\r
-    \r
-    findChildBy : function(fn, scope){\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++) {\r
-               if(fn.call(scope||cs[i], cs[i]) === true){\r
-                   return cs[i];\r
-               }\r
-        }\r
-        return null;\r
-    },\r
-\r
-    \r
-    sort : function(fn, scope){\r
-        var cs = this.childNodes;\r
-        var len = cs.length;\r
-        if(len > 0){\r
-            var sortFn = scope ? function(){fn.apply(scope, arguments);} : fn;\r
-            cs.sort(sortFn);\r
-            for(var i = 0; i < len; i++){\r
-                var n = cs[i];\r
-                n.previousSibling = cs[i-1];\r
-                n.nextSibling = cs[i+1];\r
-                if(i == 0){\r
-                    this.setFirstChild(n);\r
-                }\r
-                if(i == len-1){\r
-                    this.setLastChild(n);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    contains : function(node){\r
-        return node.isAncestor(this);\r
-    },\r
-\r
-    \r
-    isAncestor : function(node){\r
-        var p = this.parentNode;\r
-        while(p){\r
-            if(p == node){\r
-                return true;\r
-            }\r
-            p = p.parentNode;\r
-        }\r
-        return false;\r
-    },\r
-\r
-    toString : function(){\r
-        return "[Node"+(this.id?" "+this.id:"")+"]";\r
-    }\r
-});
-\r
-Ext.data.GroupingStore = Ext.extend(Ext.data.Store, {\r
-    \r
-    \r
-    remoteGroup : false,\r
-    \r
-    groupOnSort:false,\r
-\r
-    \r
-    clearGrouping : function(){\r
-        this.groupField = false;\r
-        if(this.remoteGroup){\r
-            if(this.baseParams){\r
-                delete this.baseParams.groupBy;\r
-            }\r
-            this.reload();\r
-        }else{\r
-            this.applySort();\r
-            this.fireEvent('datachanged', this);\r
-        }\r
-    },\r
-\r
-    \r
-    groupBy : function(field, forceRegroup){\r
-        if(this.groupField == field && !forceRegroup){\r
-            return; 
-        }\r
-        this.groupField = field;\r
-        if(this.remoteGroup){\r
-            if(!this.baseParams){\r
-                this.baseParams = {};\r
-            }\r
-            this.baseParams['groupBy'] = field;\r
-        }\r
-        if(this.groupOnSort){\r
-            this.sort(field);\r
-            return;\r
-        }\r
-        if(this.remoteGroup){\r
-            this.reload();\r
-        }else{\r
-            var si = this.sortInfo || {};\r
-            if(si.field != field){\r
-                this.applySort();\r
-            }else{\r
-                this.sortData(field);\r
-            }\r
-            this.fireEvent('datachanged', this);\r
-        }\r
-    },\r
-\r
-    
-    applySort : function(){\r
-        Ext.data.GroupingStore.superclass.applySort.call(this);\r
-        if(!this.groupOnSort && !this.remoteGroup){\r
-            var gs = this.getGroupState();\r
-            if(gs && gs != this.sortInfo.field){\r
-                this.sortData(this.groupField);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    applyGrouping : function(alwaysFireChange){\r
-        if(this.groupField !== false){\r
-            this.groupBy(this.groupField, true);\r
-            return true;\r
-        }else{\r
-            if(alwaysFireChange === true){\r
-                this.fireEvent('datachanged', this);\r
-            }\r
-            return false;\r
-        }\r
-    },\r
-\r
-    
-    getGroupState : function(){\r
-        return this.groupOnSort && this.groupField !== false ?\r
-               (this.sortInfo ? this.sortInfo.field : undefined) : this.groupField;\r
-    }\r
-});
-\r
-Ext.ComponentMgr = function(){\r
-    var all = new Ext.util.MixedCollection();\r
-    var types = {};\r
-\r
-    return {\r
-        \r
-        register : function(c){\r
-            all.add(c);\r
-        },\r
-\r
-        \r
-        unregister : function(c){\r
-            all.remove(c);\r
-        },\r
-\r
-        \r
-        get : function(id){\r
-            return all.get(id);\r
-        },\r
-\r
-        \r
-        onAvailable : function(id, fn, scope){\r
-            all.on("add", function(index, o){\r
-                if(o.id == id){\r
-                    fn.call(scope || o, o);\r
-                    all.un("add", fn, scope);\r
-                }\r
-            });\r
-        },\r
-\r
-        \r
-        all : all,\r
-\r
-        \r
-        registerType : function(xtype, cls){\r
-            types[xtype] = cls;\r
-            cls.xtype = xtype;\r
-        },\r
-\r
-        
-        create : function(config, defaultType){\r
-            return new types[config.xtype || defaultType](config);\r
-        }\r
-    };\r
-}();\r
-\r
-
-
-Ext.reg = Ext.ComponentMgr.registerType;
-
-Ext.Component = function(config){
-    config = config || {};
-    if(config.initialConfig){
-        if(config.isAction){                       this.baseAction = config;
-        }
-        config = config.initialConfig;     }else if(config.tagName || config.dom || typeof config == "string"){         config = {applyTo: config, id: config.id || config};
-    }
-
-    
-    this.initialConfig = config;
-
-    Ext.apply(this, config);
-    this.addEvents(
-        
-        'disable',
-        
-        'enable',
-        
-        'beforeshow',
-        
-        'show',
-        
-        'beforehide',
-        
-        'hide',
-        
-        'beforerender',
-        
-        'render',
-        
-        'beforedestroy',
-        
-        'destroy',
-        
-        'beforestaterestore',
-        
-        'staterestore',
-        
-        'beforestatesave',
-        
-        'statesave'
-    );
-    this.getId();
-    Ext.ComponentMgr.register(this);
-    Ext.Component.superclass.constructor.call(this);
-
-    if(this.baseAction){
-        this.baseAction.addComponent(this);
-    }
-
-    this.initComponent();
-
-    if(this.plugins){
-        if(Ext.isArray(this.plugins)){
-            for(var i = 0, len = this.plugins.length; i < len; i++){
-                this.plugins[i].init(this);
-            }
-        }else{
-            this.plugins.init(this);
-        }
-    }
-
-    if(this.stateful !== false){
-        this.initState(config);
-    }
-
-    if(this.applyTo){
-        this.applyToMarkup(this.applyTo);
-        delete this.applyTo;
-    }else if(this.renderTo){
-        this.render(this.renderTo);
-        delete this.renderTo;
-    }
-};
-
-Ext.Component.AUTO_ID = 1000;
-
-Ext.extend(Ext.Component, Ext.util.Observable, {
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-    
-    
-    
-
-    
-    disabledClass : "x-item-disabled",
-       
-    allowDomMove : true,
-       
-    autoShow : false,
-    
-    hideMode: 'display',
-    
-    hideParent: false,
-
-    
-    
-    hidden : false,
-    
-    disabled : false,
-    
-    rendered : false,
-
-        ctype : "Ext.Component",
-
-        actionMode : "el",
-
-        getActionEl : function(){
-        return this[this.actionMode];
-    },
-
-    
-    initComponent : Ext.emptyFn,
-
-    
-    render : function(container, position){
-        if(!this.rendered && this.fireEvent("beforerender", this) !== false){
-            if(!container && this.el){
-                this.el = Ext.get(this.el);
-                container = this.el.dom.parentNode;
-                this.allowDomMove = false;
-            }
-            this.container = Ext.get(container);
-            if(this.ctCls){
-                this.container.addClass(this.ctCls);
-            }
-            this.rendered = true;
-            if(position !== undefined){
-                if(typeof position == 'number'){
-                    position = this.container.dom.childNodes[position];
-                }else{
-                    position = Ext.getDom(position);
-                }
-            }
-            this.onRender(this.container, position || null);
-            if(this.autoShow){
-                this.el.removeClass(['x-hidden','x-hide-' + this.hideMode]);
-            }
-            if(this.cls){
-                this.el.addClass(this.cls);
-                delete this.cls;
-            }
-            if(this.style){
-                this.el.applyStyles(this.style);
-                delete this.style;
-            }
-            this.fireEvent("render", this);
-            this.afterRender(this.container);
-            if(this.hidden){
-                this.hide();
-            }
-            if(this.disabled){
-                this.disable();
-            }
-
-            this.initStateEvents();
-        }
-        return this;
-    },
-
-        initState : function(config){
-        if(Ext.state.Manager){
-            var state = Ext.state.Manager.get(this.stateId || this.id);
-            if(state){
-                if(this.fireEvent('beforestaterestore', this, state) !== false){
-                    this.applyState(state);
-                    this.fireEvent('staterestore', this, state);
-                }
-            }
-        }
-    },
-
-        initStateEvents : function(){
-        if(this.stateEvents){
-            for(var i = 0, e; e = this.stateEvents[i]; i++){
-                this.on(e, this.saveState, this, {delay:100});
-            }
-        }
-    },
-
-        applyState : function(state, config){
-        if(state){
-            Ext.apply(this, state);
-        }
-    },
-
-        getState : function(){
-        return null;
-    },
-
-        saveState : function(){
-        if(Ext.state.Manager){
-            var state = this.getState();
-            if(this.fireEvent('beforestatesave', this, state) !== false){
-                Ext.state.Manager.set(this.stateId || this.id, state);
-                this.fireEvent('statesave', this, state);
-            }
-        }
-    },
-
-    
-    applyToMarkup : function(el){
-        this.allowDomMove = false;
-        this.el = Ext.get(el);
-        this.render(this.el.dom.parentNode);
-    },
-
-    
-    addClass : function(cls){
-        if(this.el){
-            this.el.addClass(cls);
-        }else{
-            this.cls = this.cls ? this.cls + ' ' + cls : cls;
-        }
-    },
-
-    
-    removeClass : function(cls){
-        if(this.el){
-            this.el.removeClass(cls);
-        }else if(this.cls){
-            this.cls = this.cls.split(' ').remove(cls).join(' ');
-        }
-    },
-
-            onRender : function(ct, position){
-        if(this.autoEl){
-            if(typeof this.autoEl == 'string'){
-                this.el = document.createElement(this.autoEl);
-            }else{
-                var div = document.createElement('div');
-                Ext.DomHelper.overwrite(div, this.autoEl);
-                this.el = div.firstChild;
-            }
-            if (!this.el.id) {
-               this.el.id = this.getId();
-            }
-        }
-        if(this.el){
-            this.el = Ext.get(this.el);
-            if(this.allowDomMove !== false){
-                ct.dom.insertBefore(this.el.dom, position);
-            }
-        }
-    },
-
-        getAutoCreate : function(){
-        var cfg = typeof this.autoCreate == "object" ?
-                      this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
-        if(this.id && !cfg.id){
-            cfg.id = this.id;
-        }
-        return cfg;
-    },
-
-        afterRender : Ext.emptyFn,
-
-    
-    destroy : function(){
-        if(this.fireEvent("beforedestroy", this) !== false){
-            this.beforeDestroy();
-            if(this.rendered){
-                this.el.removeAllListeners();
-                this.el.remove();
-                if(this.actionMode == "container"){
-                    this.container.remove();
-                }
-            }
-            this.onDestroy();
-            Ext.ComponentMgr.unregister(this);
-            this.fireEvent("destroy", this);
-            this.purgeListeners();
-        }
-    },
-
-           beforeDestroy : Ext.emptyFn,
-
-           onDestroy  : Ext.emptyFn,
-
-    
-    getEl : function(){
-        return this.el;
-    },
-
-    
-    getId : function(){
-        return this.id || (this.id = "ext-comp-" + (++Ext.Component.AUTO_ID));
-    },
-
-    
-    getItemId : function(){
-        return this.itemId || this.getId();
-    },
-
-    
-    focus : function(selectText, delay){
-        if(delay){
-            this.focus.defer(typeof delay == 'number' ? delay : 10, this, [selectText, false]);
-            return;
-        }
-        if(this.rendered){
-            this.el.focus();
-            if(selectText === true){
-                this.el.dom.select();
-            }
-        }
-        return this;
-    },
-
-        blur : function(){
-        if(this.rendered){
-            this.el.blur();
-        }
-        return this;
-    },
-
-    
-    disable : function(){
-        if(this.rendered){
-            this.onDisable();
-        }
-        this.disabled = true;
-        this.fireEvent("disable", this);
-        return this;
-    },
-
-           onDisable : function(){
-        this.getActionEl().addClass(this.disabledClass);
-        this.el.dom.disabled = true;
-    },
-
-    
-    enable : function(){
-        if(this.rendered){
-            this.onEnable();
-        }
-        this.disabled = false;
-        this.fireEvent("enable", this);
-        return this;
-    },
-
-           onEnable : function(){
-        this.getActionEl().removeClass(this.disabledClass);
-        this.el.dom.disabled = false;
-    },
-
-    
-    setDisabled : function(disabled){
-        this[disabled ? "disable" : "enable"]();
-    },
-
-    
-    show: function(){
-        if(this.fireEvent("beforeshow", this) !== false){
-            this.hidden = false;
-            if(this.autoRender){
-                this.render(typeof this.autoRender == 'boolean' ? Ext.getBody() : this.autoRender);
-            }
-            if(this.rendered){
-                this.onShow();
-            }
-            this.fireEvent("show", this);
-        }
-        return this;
-    },
-
-        onShow : function(){
-        if(this.hideParent){
-            this.container.removeClass('x-hide-' + this.hideMode);
-        }else{
-            this.getActionEl().removeClass('x-hide-' + this.hideMode);
-        }
-
-    },
-
-    
-    hide: function(){
-        if(this.fireEvent("beforehide", this) !== false){
-            this.hidden = true;
-            if(this.rendered){
-                this.onHide();
-            }
-            this.fireEvent("hide", this);
-        }
-        return this;
-    },
-
-        onHide : function(){
-        if(this.hideParent){
-            this.container.addClass('x-hide-' + this.hideMode);
-        }else{
-            this.getActionEl().addClass('x-hide-' + this.hideMode);
-        }
-    },
-
-    
-    setVisible: function(visible){
-        if(visible) {
-            this.show();
-        }else{
-            this.hide();
-        }
-        return this;
-    },
-
-    
-    isVisible : function(){
-        return this.rendered && this.getActionEl().isVisible();
-    },
-
-    
-    cloneConfig : function(overrides){
-        overrides = overrides || {};
-        var id = overrides.id || Ext.id();
-        var cfg = Ext.applyIf(overrides, this.initialConfig);
-        cfg.id = id;         return new this.constructor(cfg);
-    },
-
-    
-    getXType : function(){
-        return this.constructor.xtype;
-    },
-
-    
-    isXType : function(xtype, shallow){
-        return !shallow ?
-               ('/' + this.getXTypes() + '/').indexOf('/' + xtype + '/') != -1 :
-                this.constructor.xtype == xtype;
-    },
-
-    
-    getXTypes : function(){
-        var tc = this.constructor;
-        if(!tc.xtypes){
-            var c = [], sc = this;
-            while(sc && sc.constructor.xtype){
-                c.unshift(sc.constructor.xtype);
-                sc = sc.constructor.superclass;
-            }
-            tc.xtypeChain = c;
-            tc.xtypes = c.join('/');
-        }
-        return tc.xtypes;
-    },
-
-    
-    findParentBy: function(fn) {
-        for (var p = this.ownerCt; (p != null) && !fn(p, this); p = p.ownerCt);
-        return p || null;
-    },
-
-    
-    findParentByType: function(xtype) {
-        return typeof xtype == 'function' ?
-            this.findParentBy(function(p){
-                return p.constructor === xtype;
-            }) :
-            this.findParentBy(function(p){
-                return p.constructor.xtype === xtype;
-            });
-    }
-});
-
-Ext.reg('component', Ext.Component);
-
-\r
-Ext.Action = function(config){\r
-    this.initialConfig = config;\r
-    this.items = [];\r
-}\r
-\r
-Ext.Action.prototype = {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-    
-    isAction : true,\r
-\r
-    \r
-    setText : function(text){\r
-        this.initialConfig.text = text;\r
-        this.callEach('setText', [text]);\r
-    },\r
-\r
-    \r
-    getText : function(){\r
-        return this.initialConfig.text;\r
-    },\r
-\r
-    \r
-    setIconClass : function(cls){\r
-        this.initialConfig.iconCls = cls;\r
-        this.callEach('setIconClass', [cls]);\r
-    },\r
-\r
-    \r
-    getIconClass : function(){\r
-        return this.initialConfig.iconCls;\r
-    },\r
-\r
-    \r
-    setDisabled : function(v){\r
-        this.initialConfig.disabled = v;\r
-        this.callEach('setDisabled', [v]);\r
-    },\r
-\r
-    \r
-    enable : function(){\r
-        this.setDisabled(false);\r
-    },\r
-\r
-    \r
-    disable : function(){\r
-        this.setDisabled(true);\r
-    },\r
-\r
-    \r
-    isDisabled : function(){\r
-        return this.initialConfig.disabled;\r
-    },\r
-\r
-    \r
-    setHidden : function(v){\r
-        this.initialConfig.hidden = v;\r
-        this.callEach('setVisible', [!v]);\r
-    },\r
-\r
-    \r
-    show : function(){\r
-        this.setHidden(false);\r
-    },\r
-\r
-    \r
-    hide : function(){\r
-        this.setHidden(true);\r
-    },\r
-\r
-    \r
-    isHidden : function(){\r
-        return this.initialConfig.hidden;\r
-    },\r
-\r
-    \r
-    setHandler : function(fn, scope){\r
-        this.initialConfig.handler = fn;\r
-        this.initialConfig.scope = scope;\r
-        this.callEach('setHandler', [fn, scope]);\r
-    },\r
-\r
-    \r
-    each : function(fn, scope){\r
-        Ext.each(this.items, fn, scope);\r
-    },\r
-\r
-    
-    callEach : function(fnName, args){\r
-        var cs = this.items;\r
-        for(var i = 0, len = cs.length; i < len; i++){\r
-            cs[i][fnName].apply(cs[i], args);\r
-        }\r
-    },\r
-\r
-    
-    addComponent : function(comp){\r
-        this.items.push(comp);\r
-        comp.on('destroy', this.removeComponent, this);\r
-    },\r
-\r
-    
-    removeComponent : function(comp){\r
-        this.items.remove(comp);\r
-    },\r
-\r
-    execute : function(){\r
-        this.initialConfig.handler.apply(this.initialConfig.scope || window, arguments);\r
-    }\r
-};
-\r
-(function(){ \r
-Ext.Layer = function(config, existingEl){\r
-    config = config || {};\r
-    var dh = Ext.DomHelper;\r
-    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;\r
-    if(existingEl){\r
-        this.dom = Ext.getDom(existingEl);\r
-    }\r
-    if(!this.dom){\r
-        var o = config.dh || {tag: "div", cls: "x-layer"};\r
-        this.dom = dh.append(pel, o);\r
-    }\r
-    if(config.cls){\r
-        this.addClass(config.cls);\r
-    }\r
-    this.constrain = config.constrain !== false;\r
-    this.visibilityMode = Ext.Element.VISIBILITY;\r
-    if(config.id){\r
-        this.id = this.dom.id = config.id;\r
-    }else{\r
-        this.id = Ext.id(this.dom);\r
-    }\r
-    this.zindex = config.zindex || this.getZIndex();\r
-    this.position("absolute", this.zindex);\r
-    if(config.shadow){\r
-        this.shadowOffset = config.shadowOffset || 4;\r
-        this.shadow = new Ext.Shadow({\r
-            offset : this.shadowOffset,\r
-            mode : config.shadow\r
-        });\r
-    }else{\r
-        this.shadowOffset = 0;\r
-    }\r
-    this.useShim = config.shim !== false && Ext.useShims;\r
-    this.useDisplay = config.useDisplay;\r
-    this.hide();\r
-};\r
-\r
-var supr = Ext.Element.prototype;\r
-\r
-
-var shims = [];\r
-\r
-Ext.extend(Ext.Layer, Ext.Element, {\r
-\r
-    getZIndex : function(){\r
-        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;\r
-    },\r
-\r
-    getShim : function(){\r
-        if(!this.useShim){\r
-            return null;\r
-        }\r
-        if(this.shim){\r
-            return this.shim;\r
-        }\r
-        var shim = shims.shift();\r
-        if(!shim){\r
-            shim = this.createShim();\r
-            shim.enableDisplayMode('block');\r
-            shim.dom.style.display = 'none';\r
-            shim.dom.style.visibility = 'visible';\r
-        }\r
-        var pn = this.dom.parentNode;\r
-        if(shim.dom.parentNode != pn){\r
-            pn.insertBefore(shim.dom, this.dom);\r
-        }\r
-        shim.setStyle('z-index', this.getZIndex()-2);\r
-        this.shim = shim;\r
-        return shim;\r
-    },\r
-\r
-    hideShim : function(){\r
-        if(this.shim){\r
-            this.shim.setDisplayed(false);\r
-            shims.push(this.shim);\r
-            delete this.shim;\r
-        }\r
-    },\r
-\r
-    disableShadow : function(){\r
-        if(this.shadow){\r
-            this.shadowDisabled = true;\r
-            this.shadow.hide();\r
-            this.lastShadowOffset = this.shadowOffset;\r
-            this.shadowOffset = 0;\r
-        }\r
-    },\r
-\r
-    enableShadow : function(show){\r
-        if(this.shadow){\r
-            this.shadowDisabled = false;\r
-            this.shadowOffset = this.lastShadowOffset;\r
-            delete this.lastShadowOffset;\r
-            if(show){\r
-                this.sync(true);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    
-    
-    sync : function(doShow){\r
-        var sw = this.shadow;\r
-        if(!this.updating && this.isVisible() && (sw || this.useShim)){\r
-            var sh = this.getShim();\r
-\r
-            var w = this.getWidth(),\r
-                h = this.getHeight();\r
-\r
-            var l = this.getLeft(true),\r
-                t = this.getTop(true);\r
-\r
-            if(sw && !this.shadowDisabled){\r
-                if(doShow && !sw.isVisible()){\r
-                    sw.show(this);\r
-                }else{\r
-                    sw.realign(l, t, w, h);\r
-                }\r
-                if(sh){\r
-                    if(doShow){\r
-                       sh.show();\r
-                    }\r
-                    
-                    var a = sw.adjusts, s = sh.dom.style;\r
-                    s.left = (Math.min(l, l+a.l))+"px";\r
-                    s.top = (Math.min(t, t+a.t))+"px";\r
-                    s.width = (w+a.w)+"px";\r
-                    s.height = (h+a.h)+"px";\r
-                }\r
-            }else if(sh){\r
-                if(doShow){\r
-                   sh.show();\r
-                }\r
-                sh.setSize(w, h);\r
-                sh.setLeftTop(l, t);\r
-            }\r
-            \r
-        }\r
-    },\r
-\r
-    
-    destroy : function(){\r
-        this.hideShim();\r
-        if(this.shadow){\r
-            this.shadow.hide();\r
-        }\r
-        this.removeAllListeners();\r
-        Ext.removeNode(this.dom);\r
-        Ext.Element.uncache(this.id);\r
-    },\r
-\r
-    remove : function(){\r
-        this.destroy();\r
-    },\r
-\r
-    
-    beginUpdate : function(){\r
-        this.updating = true;\r
-    },\r
-\r
-    
-    endUpdate : function(){\r
-        this.updating = false;\r
-        this.sync(true);\r
-    },\r
-\r
-    
-    hideUnders : function(negOffset){\r
-        if(this.shadow){\r
-            this.shadow.hide();\r
-        }\r
-        this.hideShim();\r
-    },\r
-\r
-    
-    constrainXY : function(){\r
-        if(this.constrain){\r
-            var vw = Ext.lib.Dom.getViewWidth(),\r
-                vh = Ext.lib.Dom.getViewHeight();\r
-            var s = Ext.getDoc().getScroll();\r
-\r
-            var xy = this.getXY();\r
-            var x = xy[0], y = xy[1];   \r
-            var w = this.dom.offsetWidth+this.shadowOffset, h = this.dom.offsetHeight+this.shadowOffset;\r
-            
-            var moved = false;\r
-            
-            if((x + w) > vw+s.left){\r
-                x = vw - w - this.shadowOffset;\r
-                moved = true;\r
-            }\r
-            if((y + h) > vh+s.top){\r
-                y = vh - h - this.shadowOffset;\r
-                moved = true;\r
-            }\r
-            
-            if(x < s.left){\r
-                x = s.left;\r
-                moved = true;\r
-            }\r
-            if(y < s.top){\r
-                y = s.top;\r
-                moved = true;\r
-            }\r
-            if(moved){\r
-                if(this.avoidY){\r
-                    var ay = this.avoidY;\r
-                    if(y <= ay && (y+h) >= ay){\r
-                        y = ay-h-5;   \r
-                    }\r
-                }\r
-                xy = [x, y];\r
-                this.storeXY(xy);\r
-                supr.setXY.call(this, xy);\r
-                this.sync();\r
-            }\r
-        }\r
-    },\r
-\r
-    isVisible : function(){\r
-        return this.visible;    \r
-    },\r
-\r
-    
-    showAction : function(){\r
-        this.visible = true; 
-        if(this.useDisplay === true){\r
-            this.setDisplayed("");\r
-        }else if(this.lastXY){\r
-            supr.setXY.call(this, this.lastXY);\r
-        }else if(this.lastLT){\r
-            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);\r
-        }\r
-    },\r
-\r
-    
-    hideAction : function(){\r
-        this.visible = false;\r
-        if(this.useDisplay === true){\r
-            this.setDisplayed(false);\r
-        }else{\r
-            this.setLeftTop(-10000,-10000);\r
-        }\r
-    },\r
-\r
-    
-    setVisible : function(v, a, d, c, e){\r
-        if(v){\r
-            this.showAction();\r
-        }\r
-        if(a && v){\r
-            var cb = function(){\r
-                this.sync(true);\r
-                if(c){\r
-                    c();\r
-                }\r
-            }.createDelegate(this);\r
-            supr.setVisible.call(this, true, true, d, cb, e);\r
-        }else{\r
-            if(!v){\r
-                this.hideUnders(true);\r
-            }\r
-            var cb = c;\r
-            if(a){\r
-                cb = function(){\r
-                    this.hideAction();\r
-                    if(c){\r
-                        c();\r
-                    }\r
-                }.createDelegate(this);\r
-            }\r
-            supr.setVisible.call(this, v, a, d, cb, e);\r
-            if(v){\r
-                this.sync(true);\r
-            }else if(!a){\r
-                this.hideAction();\r
-            }\r
-        }\r
-    },\r
-\r
-    storeXY : function(xy){\r
-        delete this.lastLT;\r
-        this.lastXY = xy;\r
-    },\r
-\r
-    storeLeftTop : function(left, top){\r
-        delete this.lastXY;\r
-        this.lastLT = [left, top];\r
-    },\r
-\r
-    
-    beforeFx : function(){\r
-        this.beforeAction();\r
-        return Ext.Layer.superclass.beforeFx.apply(this, arguments);\r
-    },\r
-\r
-    
-    afterFx : function(){\r
-        Ext.Layer.superclass.afterFx.apply(this, arguments);\r
-        this.sync(this.isVisible());\r
-    },\r
-\r
-    
-    beforeAction : function(){\r
-        if(!this.updating && this.shadow){\r
-            this.shadow.hide();\r
-        }\r
-    },\r
-\r
-    
-    setLeft : function(left){\r
-        this.storeLeftTop(left, this.getTop(true));\r
-        supr.setLeft.apply(this, arguments);\r
-        this.sync();\r
-    },\r
-\r
-    setTop : function(top){\r
-        this.storeLeftTop(this.getLeft(true), top);\r
-        supr.setTop.apply(this, arguments);\r
-        this.sync();\r
-    },\r
-\r
-    setLeftTop : function(left, top){\r
-        this.storeLeftTop(left, top);\r
-        supr.setLeftTop.apply(this, arguments);\r
-        this.sync();\r
-    },\r
-\r
-    setXY : function(xy, a, d, c, e){\r
-        this.fixDisplay();\r
-        this.beforeAction();\r
-        this.storeXY(xy);\r
-        var cb = this.createCB(c);\r
-        supr.setXY.call(this, xy, a, d, cb, e);\r
-        if(!a){\r
-            cb();\r
-        }\r
-    },\r
-\r
-    
-    createCB : function(c){\r
-        var el = this;\r
-        return function(){\r
-            el.constrainXY();\r
-            el.sync(true);\r
-            if(c){\r
-                c();\r
-            }\r
-        };\r
-    },\r
-\r
-    
-    setX : function(x, a, d, c, e){\r
-        this.setXY([x, this.getY()], a, d, c, e);\r
-    },\r
-\r
-    
-    setY : function(y, a, d, c, e){\r
-        this.setXY([this.getX(), y], a, d, c, e);\r
-    },\r
-\r
-    
-    setSize : function(w, h, a, d, c, e){\r
-        this.beforeAction();\r
-        var cb = this.createCB(c);\r
-        supr.setSize.call(this, w, h, a, d, cb, e);\r
-        if(!a){\r
-            cb();\r
-        }\r
-    },\r
-\r
-    
-    setWidth : function(w, a, d, c, e){\r
-        this.beforeAction();\r
-        var cb = this.createCB(c);\r
-        supr.setWidth.call(this, w, a, d, cb, e);\r
-        if(!a){\r
-            cb();\r
-        }\r
-    },\r
-\r
-    
-    setHeight : function(h, a, d, c, e){\r
-        this.beforeAction();\r
-        var cb = this.createCB(c);\r
-        supr.setHeight.call(this, h, a, d, cb, e);\r
-        if(!a){\r
-            cb();\r
-        }\r
-    },\r
-\r
-    
-    setBounds : function(x, y, w, h, a, d, c, e){\r
-        this.beforeAction();\r
-        var cb = this.createCB(c);\r
-        if(!a){\r
-            this.storeXY([x, y]);\r
-            supr.setXY.call(this, [x, y]);\r
-            supr.setSize.call(this, w, h, a, d, cb, e);\r
-            cb();\r
-        }else{\r
-            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);\r
-        }\r
-        return this;\r
-    },\r
-    \r
-    \r
-    setZIndex : function(zindex){\r
-        this.zindex = zindex;\r
-        this.setStyle("z-index", zindex + 2);\r
-        if(this.shadow){\r
-            this.shadow.setZIndex(zindex + 1);\r
-        }\r
-        if(this.shim){\r
-            this.shim.setStyle("z-index", zindex);\r
-        }\r
-    }\r
-});\r
-})();
-
-Ext.Shadow = function(config){
-    Ext.apply(this, config);
-    if(typeof this.mode != "string"){
-        this.mode = this.defaultMode;
-    }
-    var o = this.offset, a = {h: 0};
-    var rad = Math.floor(this.offset/2);
-    switch(this.mode.toLowerCase()){         case "drop":
-            a.w = 0;
-            a.l = a.t = o;
-            a.t -= 1;
-            if(Ext.isIE){
-                a.l -= this.offset + rad;
-                a.t -= this.offset + rad;
-                a.w -= rad;
-                a.h -= rad;
-                a.t += 1;
-            }
-        break;
-        case "sides":
-            a.w = (o*2);
-            a.l = -o;
-            a.t = o-1;
-            if(Ext.isIE){
-                a.l -= (this.offset - rad);
-                a.t -= this.offset + rad;
-                a.l += 1;
-                a.w -= (this.offset - rad)*2;
-                a.w -= rad + 1;
-                a.h -= 1;
-            }
-        break;
-        case "frame":
-            a.w = a.h = (o*2);
-            a.l = a.t = -o;
-            a.t += 1;
-            a.h -= 2;
-            if(Ext.isIE){
-                a.l -= (this.offset - rad);
-                a.t -= (this.offset - rad);
-                a.l += 1;
-                a.w -= (this.offset + rad + 1);
-                a.h -= (this.offset + rad);
-                a.h += 1;
-            }
-        break;
-    };
-
-    this.adjusts = a;
-};
-
-Ext.Shadow.prototype = {
-    
-    
-    offset: 4,
-
-        defaultMode: "drop",
-
-    
-    show : function(target){
-        target = Ext.get(target);
-        if(!this.el){
-            this.el = Ext.Shadow.Pool.pull();
-            if(this.el.dom.nextSibling != target.dom){
-                this.el.insertBefore(target);
-            }
-        }
-        this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1);
-        if(Ext.isIE){
-            this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";
-        }
-        this.realign(
-            target.getLeft(true),
-            target.getTop(true),
-            target.getWidth(),
-            target.getHeight()
-        );
-        this.el.dom.style.display = "block";
-    },
-
-    
-    isVisible : function(){
-        return this.el ? true : false;  
-    },
-
-    
-    realign : function(l, t, w, h){
-        if(!this.el){
-            return;
-        }
-        var a = this.adjusts, d = this.el.dom, s = d.style;
-        var iea = 0;
-        s.left = (l+a.l)+"px";
-        s.top = (t+a.t)+"px";
-        var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px";
-        if(s.width != sws || s.height != shs){
-            s.width = sws;
-            s.height = shs;
-            if(!Ext.isIE){
-                var cn = d.childNodes;
-                var sww = Math.max(0, (sw-12))+"px";
-                cn[0].childNodes[1].style.width = sww;
-                cn[1].childNodes[1].style.width = sww;
-                cn[2].childNodes[1].style.width = sww;
-                cn[1].style.height = Math.max(0, (sh-12))+"px";
-            }
-        }
-    },
-
-    
-    hide : function(){
-        if(this.el){
-            this.el.dom.style.display = "none";
-            Ext.Shadow.Pool.push(this.el);
-            delete this.el;
-        }
-    },
-
-    
-    setZIndex : function(z){
-        this.zIndex = z;
-        if(this.el){
-            this.el.setStyle("z-index", z);
-        }
-    }
-};
-
-Ext.Shadow.Pool = function(){
-    var p = [];
-    var markup = Ext.isIE ?
-                 '<div class="x-ie-shadow"></div>' :
-                 '<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';
-    return {
-        pull : function(){
-            var sh = p.shift();
-            if(!sh){
-                sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup));
-                sh.autoBoxAdjust = false;
-            }
-            return sh;
-        },
-
-        push : function(sh){
-            p.push(sh);
-        }
-    };
-}();
-
-Ext.BoxComponent = Ext.extend(Ext.Component, {
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-    initComponent : function(){
-        Ext.BoxComponent.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'resize',
-            
-            'move'
-        );
-    },
-
-        boxReady : false,
-        deferHeight: false,
-
-    
-    setSize : function(w, h){
-                if(typeof w == 'object'){
-            h = w.height;
-            w = w.width;
-        }
-                if(!this.boxReady){
-            this.width = w;
-            this.height = h;
-            return this;
-        }
-
-                if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
-            return this;
-        }
-        this.lastSize = {width: w, height: h};
-        var adj = this.adjustSize(w, h);
-        var aw = adj.width, ah = adj.height;
-        if(aw !== undefined || ah !== undefined){             var rz = this.getResizeEl();
-            if(!this.deferHeight && aw !== undefined && ah !== undefined){
-                rz.setSize(aw, ah);
-            }else if(!this.deferHeight && ah !== undefined){
-                rz.setHeight(ah);
-            }else if(aw !== undefined){
-                rz.setWidth(aw);
-            }
-            this.onResize(aw, ah, w, h);
-            this.fireEvent('resize', this, aw, ah, w, h);
-        }
-        return this;
-    },
-
-    
-    setWidth : function(width){
-        return this.setSize(width);
-    },
-
-    
-    setHeight : function(height){
-        return this.setSize(undefined, height);
-    },
-
-    
-    getSize : function(){
-        return this.el.getSize();
-    },
-
-    
-    getPosition : function(local){
-        if(local === true){
-            return [this.el.getLeft(true), this.el.getTop(true)];
-        }
-        return this.xy || this.el.getXY();
-    },
-
-    
-    getBox : function(local){
-        var s = this.el.getSize();
-        if(local === true){
-            s.x = this.el.getLeft(true);
-            s.y = this.el.getTop(true);
-        }else{
-            var xy = this.xy || this.el.getXY();
-            s.x = xy[0];
-            s.y = xy[1];
-        }
-        return s;
-    },
-
-    
-    updateBox : function(box){
-        this.setSize(box.width, box.height);
-        this.setPagePosition(box.x, box.y);
-        return this;
-    },
-
-        getResizeEl : function(){
-        return this.resizeEl || this.el;
-    },
-
-        getPositionEl : function(){
-        return this.positionEl || this.el;
-    },
-
-    
-    setPosition : function(x, y){
-        if(x && typeof x[1] == 'number'){
-            y = x[1];
-            x = x[0];
-        }
-        this.x = x;
-        this.y = y;
-        if(!this.boxReady){
-            return this;
-        }
-        var adj = this.adjustPosition(x, y);
-        var ax = adj.x, ay = adj.y;
-
-        var el = this.getPositionEl();
-        if(ax !== undefined || ay !== undefined){
-            if(ax !== undefined && ay !== undefined){
-                el.setLeftTop(ax, ay);
-            }else if(ax !== undefined){
-                el.setLeft(ax);
-            }else if(ay !== undefined){
-                el.setTop(ay);
-            }
-            this.onPosition(ax, ay);
-            this.fireEvent('move', this, ax, ay);
-        }
-        return this;
-    },
-
-    
-    setPagePosition : function(x, y){
-        if(x && typeof x[1] == 'number'){
-            y = x[1];
-            x = x[0];
-        }
-        this.pageX = x;
-        this.pageY = y;
-        if(!this.boxReady){
-            return;
-        }
-        if(x === undefined || y === undefined){             return;
-        }
-        var p = this.el.translatePoints(x, y);
-        this.setPosition(p.left, p.top);
-        return this;
-    },
-
-        onRender : function(ct, position){
-        Ext.BoxComponent.superclass.onRender.call(this, ct, position);
-        if(this.resizeEl){
-            this.resizeEl = Ext.get(this.resizeEl);
-        }
-        if(this.positionEl){
-            this.positionEl = Ext.get(this.positionEl);
-        }
-    },
-
-        afterRender : function(){
-        Ext.BoxComponent.superclass.afterRender.call(this);
-        this.boxReady = true;
-        this.setSize(this.width, this.height);
-        if(this.x || this.y){
-            this.setPosition(this.x, this.y);
-        }else if(this.pageX || this.pageY){
-            this.setPagePosition(this.pageX, this.pageY);
-        }
-    },
-
-    
-    syncSize : function(){
-        delete this.lastSize;
-        this.setSize(this.autoWidth ? undefined : this.el.getWidth(), this.autoHeight ? undefined : this.el.getHeight());
-        return this;
-    },
-
-    
-    onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){
-
-    },
-
-    
-    onPosition : function(x, y){
-
-    },
-
-        adjustSize : function(w, h){
-        if(this.autoWidth){
-            w = 'auto';
-        }
-        if(this.autoHeight){
-            h = 'auto';
-        }
-        return {width : w, height: h};
-    },
-
-        adjustPosition : function(x, y){
-        return {x : x, y: y};
-    }
-});
-Ext.reg('box', Ext.BoxComponent);
-\r
-Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){\r
-    \r
-    \r
-    this.el = Ext.get(dragElement, true);\r
-    this.el.dom.unselectable = "on";\r
-    \r
-    this.resizingEl = Ext.get(resizingElement, true);\r
-\r
-    \r
-    this.orientation = orientation || Ext.SplitBar.HORIZONTAL;\r
-    \r
-    \r
-    this.minSize = 0;\r
-    \r
-    \r
-    this.maxSize = 2000;\r
-    \r
-    \r
-    this.animate = false;\r
-    \r
-    \r
-    this.useShim = false;\r
-    \r
-    \r
-    this.shim = null;\r
-    \r
-    if(!existingProxy){\r
-        \r
-        this.proxy = Ext.SplitBar.createProxy(this.orientation);\r
-    }else{\r
-        this.proxy = Ext.get(existingProxy).dom;\r
-    }\r
-    \r
-    this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id});\r
-    \r
-    \r
-    this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);\r
-    \r
-    \r
-    this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);\r
-    \r
-    \r
-    this.dragSpecs = {};\r
-    \r
-    \r
-    this.adapter = new Ext.SplitBar.BasicLayoutAdapter();\r
-    this.adapter.init(this);\r
-    \r
-    if(this.orientation == Ext.SplitBar.HORIZONTAL){\r
-        \r
-        this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);\r
-        this.el.addClass("x-splitbar-h");\r
-    }else{\r
-        \r
-        this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);\r
-        this.el.addClass("x-splitbar-v");\r
-    }\r
-    \r
-    this.addEvents(\r
-        \r
-        "resize",\r
-        \r
-        "moved",\r
-        \r
-        "beforeresize",\r
-\r
-        "beforeapply"\r
-    );\r
-\r
-    Ext.SplitBar.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.SplitBar, Ext.util.Observable, {\r
-    onStartProxyDrag : function(x, y){\r
-        this.fireEvent("beforeresize", this);\r
-        this.overlay =  Ext.DomHelper.append(document.body,  {cls: "x-drag-overlay", html: "&#160;"}, true);\r
-        this.overlay.unselectable();\r
-        this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));\r
-        this.overlay.show();\r
-        Ext.get(this.proxy).setDisplayed("block");\r
-        var size = this.adapter.getElementSize(this);\r
-        this.activeMinSize = this.getMinimumSize();;\r
-        this.activeMaxSize = this.getMaximumSize();;\r
-        var c1 = size - this.activeMinSize;\r
-        var c2 = Math.max(this.activeMaxSize - size, 0);\r
-        if(this.orientation == Ext.SplitBar.HORIZONTAL){\r
-            this.dd.resetConstraints();\r
-            this.dd.setXConstraint(\r
-                this.placement == Ext.SplitBar.LEFT ? c1 : c2, \r
-                this.placement == Ext.SplitBar.LEFT ? c2 : c1\r
-            );\r
-            this.dd.setYConstraint(0, 0);\r
-        }else{\r
-            this.dd.resetConstraints();\r
-            this.dd.setXConstraint(0, 0);\r
-            this.dd.setYConstraint(\r
-                this.placement == Ext.SplitBar.TOP ? c1 : c2, \r
-                this.placement == Ext.SplitBar.TOP ? c2 : c1\r
-            );\r
-         }\r
-        this.dragSpecs.startSize = size;\r
-        this.dragSpecs.startPoint = [x, y];\r
-        Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y);\r
-    },\r
-    \r
-    \r
-    onEndProxyDrag : function(e){\r
-        Ext.get(this.proxy).setDisplayed(false);\r
-        var endPoint = Ext.lib.Event.getXY(e);\r
-        if(this.overlay){\r
-            this.overlay.remove();\r
-            delete this.overlay;\r
-        }\r
-        var newSize;\r
-        if(this.orientation == Ext.SplitBar.HORIZONTAL){\r
-            newSize = this.dragSpecs.startSize + \r
-                (this.placement == Ext.SplitBar.LEFT ?\r
-                    endPoint[0] - this.dragSpecs.startPoint[0] :\r
-                    this.dragSpecs.startPoint[0] - endPoint[0]\r
-                );\r
-        }else{\r
-            newSize = this.dragSpecs.startSize + \r
-                (this.placement == Ext.SplitBar.TOP ?\r
-                    endPoint[1] - this.dragSpecs.startPoint[1] :\r
-                    this.dragSpecs.startPoint[1] - endPoint[1]\r
-                );\r
-        }\r
-        newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize);\r
-        if(newSize != this.dragSpecs.startSize){\r
-            if(this.fireEvent('beforeapply', this, newSize) !== false){\r
-                this.adapter.setElementSize(this, newSize);\r
-                this.fireEvent("moved", this, newSize);\r
-                this.fireEvent("resize", this, newSize);\r
-            }\r
-        }\r
-    },\r
-    \r
-    \r
-    getAdapter : function(){\r
-        return this.adapter;\r
-    },\r
-    \r
-    \r
-    setAdapter : function(adapter){\r
-        this.adapter = adapter;\r
-        this.adapter.init(this);\r
-    },\r
-    \r
-    \r
-    getMinimumSize : function(){\r
-        return this.minSize;\r
-    },\r
-    \r
-    \r
-    setMinimumSize : function(minSize){\r
-        this.minSize = minSize;\r
-    },\r
-    \r
-    \r
-    getMaximumSize : function(){\r
-        return this.maxSize;\r
-    },\r
-    \r
-    \r
-    setMaximumSize : function(maxSize){\r
-        this.maxSize = maxSize;\r
-    },\r
-    \r
-    \r
-    setCurrentSize : function(size){\r
-        var oldAnimate = this.animate;\r
-        this.animate = false;\r
-        this.adapter.setElementSize(this, size);\r
-        this.animate = oldAnimate;\r
-    },\r
-    \r
-    \r
-    destroy : function(removeEl){\r
-        if(this.shim){\r
-            this.shim.remove();\r
-        }\r
-        this.dd.unreg();\r
-        Ext.removeNode(this.proxy);\r
-        if(removeEl){\r
-            this.el.remove();\r
-        }\r
-    }\r
-});\r
-\r
-\r
-Ext.SplitBar.createProxy = function(dir){\r
-    var proxy = new Ext.Element(document.createElement("div"));\r
-    proxy.unselectable();\r
-    var cls = 'x-splitbar-proxy';\r
-    proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v'));\r
-    document.body.appendChild(proxy.dom);\r
-    return proxy.dom;\r
-};\r
-\r
-\r
-Ext.SplitBar.BasicLayoutAdapter = function(){\r
-};\r
-\r
-Ext.SplitBar.BasicLayoutAdapter.prototype = {\r
-    
-    init : function(s){\r
-    \r
-    },\r
-    \r
-     getElementSize : function(s){\r
-        if(s.orientation == Ext.SplitBar.HORIZONTAL){\r
-            return s.resizingEl.getWidth();\r
-        }else{\r
-            return s.resizingEl.getHeight();\r
-        }\r
-    },\r
-    \r
-    \r
-    setElementSize : function(s, newSize, onComplete){\r
-        if(s.orientation == Ext.SplitBar.HORIZONTAL){\r
-            if(!s.animate){\r
-                s.resizingEl.setWidth(newSize);\r
-                if(onComplete){\r
-                    onComplete(s, newSize);\r
-                }\r
-            }else{\r
-                s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut');\r
-            }\r
-        }else{\r
-            \r
-            if(!s.animate){\r
-                s.resizingEl.setHeight(newSize);\r
-                if(onComplete){\r
-                    onComplete(s, newSize);\r
-                }\r
-            }else{\r
-                s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut');\r
-            }\r
-        }\r
-    }\r
-};\r
-\r
-\r
-Ext.SplitBar.AbsoluteLayoutAdapter = function(container){\r
-    this.basic = new Ext.SplitBar.BasicLayoutAdapter();\r
-    this.container = Ext.get(container);\r
-};\r
-\r
-Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {\r
-    init : function(s){\r
-        this.basic.init(s);\r
-    },\r
-    \r
-    getElementSize : function(s){\r
-        return this.basic.getElementSize(s);\r
-    },\r
-    \r
-    setElementSize : function(s, newSize, onComplete){\r
-        this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s]));\r
-    },\r
-    \r
-    moveSplitter : function(s){\r
-        var yes = Ext.SplitBar;\r
-        switch(s.placement){\r
-            case yes.LEFT:\r
-                s.el.setX(s.resizingEl.getRight());\r
-                break;\r
-            case yes.RIGHT:\r
-                s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px");\r
-                break;\r
-            case yes.TOP:\r
-                s.el.setY(s.resizingEl.getBottom());\r
-                break;\r
-            case yes.BOTTOM:\r
-                s.el.setY(s.resizingEl.getTop() - s.el.getHeight());\r
-                break;\r
-        }\r
-    }\r
-};\r
-\r
-\r
-Ext.SplitBar.VERTICAL = 1;\r
-\r
-\r
-Ext.SplitBar.HORIZONTAL = 2;\r
-\r
-\r
-Ext.SplitBar.LEFT = 1;\r
-\r
-\r
-Ext.SplitBar.RIGHT = 2;\r
-\r
-\r
-Ext.SplitBar.TOP = 3;\r
-\r
-\r
-Ext.SplitBar.BOTTOM = 4;\r
-
-
-Ext.Container = Ext.extend(Ext.BoxComponent, {
-    
-    
-    
-    
-    
-    
-    
-
-    
-    autoDestroy: true,
-    
-    
-    defaultType: 'panel',
-
-        initComponent : function(){
-        Ext.Container.superclass.initComponent.call(this);
-
-        this.addEvents(
-            
-            'afterlayout',
-            
-            'beforeadd',
-            
-            'beforeremove',
-            
-            'add',
-            
-            'remove'
-        );
-
-        
-        var items = this.items;
-        if(items){
-            delete this.items;
-            if(Ext.isArray(items)){
-                this.add.apply(this, items);
-            }else{
-                this.add(items);
-            }
-        }
-    },
-
-        initItems : function(){
-        if(!this.items){
-            this.items = new Ext.util.MixedCollection(false, this.getComponentId);
-            this.getLayout();         }
-    },
-
-        setLayout : function(layout){
-        if(this.layout && this.layout != layout){
-            this.layout.setContainer(null);
-        }
-        this.initItems();
-        this.layout = layout;
-        layout.setContainer(this);
-    },
-
-        render : function(){
-        Ext.Container.superclass.render.apply(this, arguments);
-        if(this.layout){
-            if(typeof this.layout == 'string'){
-                this.layout = new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig);
-            }
-            this.setLayout(this.layout);
-
-            if(this.activeItem !== undefined){
-                var item = this.activeItem;
-                delete this.activeItem;
-                this.layout.setActiveItem(item);
-                return;
-            }
-        }
-        if(!this.ownerCt){
-            this.doLayout();
-        }
-        if(this.monitorResize === true){
-            Ext.EventManager.onWindowResize(this.doLayout, this, [false]);
-        }
-    },
-
-        getLayoutTarget : function(){
-        return this.el;
-    },
-
-        getComponentId : function(comp){
-        return comp.itemId || comp.id;
-    },
-
-    
-    add : function(comp){
-        if(!this.items){
-            this.initItems();
-        }
-        var a = arguments, len = a.length;
-        if(len > 1){
-            for(var i = 0; i < len; i++) {
-                this.add(a[i]);
-            }
-            return;
-        }
-        var c = this.lookupComponent(this.applyDefaults(comp));
-        var pos = this.items.length;
-        if(this.fireEvent('beforeadd', this, c, pos) !== false && this.onBeforeAdd(c) !== false){
-            this.items.add(c);
-            c.ownerCt = this;
-            this.fireEvent('add', this, c, pos);
-        }
-        return c;
-    },
-
-    
-    insert : function(index, comp){
-        if(!this.items){
-            this.initItems();
-        }
-        var a = arguments, len = a.length;
-        if(len > 2){
-            for(var i = len-1; i >= 1; --i) {
-                this.insert(index, a[i]);
-            }
-            return;
-        }
-        var c = this.lookupComponent(this.applyDefaults(comp));
-
-        if(c.ownerCt == this && this.items.indexOf(c) < index){
-            --index;
-        }
-
-        if(this.fireEvent('beforeadd', this, c, index) !== false && this.onBeforeAdd(c) !== false){
-            this.items.insert(index, c);
-            c.ownerCt = this;
-            this.fireEvent('add', this, c, index);
-        }
-        return c;
-    },
-
-        applyDefaults : function(c){
-        if(this.defaults){
-            if(typeof c == 'string'){
-                c = Ext.ComponentMgr.get(c);
-                Ext.apply(c, this.defaults);
-            }else if(!c.events){
-                Ext.applyIf(c, this.defaults);
-            }else{
-                Ext.apply(c, this.defaults);
-            }
-        }
-        return c;
-    },
-
-        onBeforeAdd : function(item){
-        if(item.ownerCt){
-            item.ownerCt.remove(item, false);
-        }
-        if(this.hideBorders === true){
-            item.border = (item.border === true);
-        }
-    },
-
-    
-    remove : function(comp, autoDestroy){
-        var c = this.getComponent(comp);
-        if(c && this.fireEvent('beforeremove', this, c) !== false){
-            this.items.remove(c);
-            delete c.ownerCt;
-            if(autoDestroy === true || (autoDestroy !== false && this.autoDestroy)){
-                c.destroy();
-            }
-            if(this.layout && this.layout.activeItem == c){
-                delete this.layout.activeItem;
-            }
-            this.fireEvent('remove', this, c);
-        }
-        return c;
-    },
-
-    
-    getComponent : function(comp){
-        if(typeof comp == 'object'){
-            return comp;
-        }
-        return this.items.get(comp);
-    },
-
-        lookupComponent : function(comp){
-        if(typeof comp == 'string'){
-            return Ext.ComponentMgr.get(comp);
-        }else if(!comp.events){
-            return this.createComponent(comp);
-        }
-        return comp;
-    },
-
-        createComponent : function(config){
-        return Ext.ComponentMgr.create(config, this.defaultType);
-    },
-
-    
-    doLayout : function(shallow){
-        if(this.rendered && this.layout){
-            this.layout.layout();
-        }
-        if(shallow !== false && this.items){
-            var cs = this.items.items;
-            for(var i = 0, len = cs.length; i < len; i++) {
-                var c  = cs[i];
-                if(c.doLayout){
-                    c.doLayout();
-                }
-            }
-        }
-    },
-
-    
-    getLayout : function(){
-        if(!this.layout){
-            var layout = new Ext.layout.ContainerLayout(this.layoutConfig);
-            this.setLayout(layout);
-        }
-        return this.layout;
-    },
-
-        onDestroy : function(){
-        if(this.items){
-            var cs = this.items.items;
-            for(var i = 0, len = cs.length; i < len; i++) {
-                Ext.destroy(cs[i]);
-            }
-        }
-        if(this.monitorResize){
-            Ext.EventManager.removeResizeListener(this.doLayout, this);
-        }
-        Ext.Container.superclass.onDestroy.call(this);
-    },
-
-    
-    bubble : function(fn, scope, args){
-        var p = this;
-        while(p){
-            if(fn.apply(scope || p, args || [p]) === false){
-                break;
-            }
-            p = p.ownerCt;
-        }
-    },
-
-    
-    cascade : function(fn, scope, args){
-        if(fn.apply(scope || this, args || [this]) !== false){
-            if(this.items){
-                var cs = this.items.items;
-                for(var i = 0, len = cs.length; i < len; i++){
-                    if(cs[i].cascade){
-                        cs[i].cascade(fn, scope, args);
-                    }else{
-                        fn.apply(scope || this, args || [cs[i]]);
-                    }
-                }
-            }
-        }
-    },
-
-    
-    findById : function(id){
-        var m, ct = this;
-        this.cascade(function(c){
-            if(ct != c && c.id === id){
-                m = c;
-                return false;
-            }
-        });
-        return m || null;
-    },
-
-    
-    findByType : function(xtype){
-        return typeof xtype == 'function' ?
-            this.findBy(function(c){
-                return c.constructor === xtype;
-            }) :
-            this.findBy(function(c){
-                return c.constructor.xtype === xtype;
-            });
-    },
-
-    
-    find : function(prop, value){
-        return this.findBy(function(c){
-            return c[prop] === value;
-        });
-    },
-
-    
-    findBy : function(fn, scope){
-        var m = [], ct = this;
-        this.cascade(function(c){
-            if(ct != c && fn.call(scope || c, c, ct) === true){
-                m.push(c);
-            }
-        });
-        return m;
-    }
-});
-
-Ext.Container.LAYOUTS = {};
-Ext.reg('container', Ext.Container);
-
-Ext.layout.ContainerLayout = function(config){
-    Ext.apply(this, config);
-};
-
-Ext.layout.ContainerLayout.prototype = {
-    
-    
-
-    
-
-        monitorResize:false,
-        activeItem : null,
-
-        layout : function(){
-        var target = this.container.getLayoutTarget();
-        this.onLayout(this.container, target);
-        this.container.fireEvent('afterlayout', this.container, this);
-    },
-
-        onLayout : function(ct, target){
-        this.renderAll(ct, target);
-    },
-
-        isValidParent : function(c, target){
-               var el = c.getPositionEl ? c.getPositionEl() : c.getEl();
-               return el.dom.parentNode == target.dom;
-    },
-
-        renderAll : function(ct, target){
-        var items = ct.items.items;
-        for(var i = 0, len = items.length; i < len; i++) {
-            var c = items[i];
-            if(c && (!c.rendered || !this.isValidParent(c, target))){
-                this.renderItem(c, i, target);
-            }
-        }
-    },
-
-        renderItem : function(c, position, target){
-        if(c && !c.rendered){
-            c.render(target, position);
-            if(this.extraCls){
-               var t = c.getPositionEl ? c.getPositionEl() : c;
-               t.addClass(this.extraCls);
-            }
-            if (this.renderHidden && c != this.activeItem) {
-                c.hide();
-            }
-        }else if(c && !this.isValidParent(c, target)){
-            if(this.extraCls){
-                c.addClass(this.extraCls);
-            }
-            if(typeof position == 'number'){
-                position = target.dom.childNodes[position];
-            }
-            target.dom.insertBefore(c.getEl().dom, position || null);
-            if (this.renderHidden && c != this.activeItem) {
-                c.hide();
-            }
-        }
-    },
-
-        onResize: function(){
-        if(this.container.collapsed){
-            return;
-        }
-        var b = this.container.bufferResize;
-        if(b){
-            if(!this.resizeTask){
-                this.resizeTask = new Ext.util.DelayedTask(this.layout, this);
-                this.resizeBuffer = typeof b == 'number' ? b : 100;
-            }
-            this.resizeTask.delay(this.resizeBuffer);
-        }else{
-            this.layout();
-        }
-    },
-
-        setContainer : function(ct){
-        if(this.monitorResize && ct != this.container){
-            if(this.container){
-                this.container.un('resize', this.onResize, this);
-            }
-            if(ct){
-                ct.on('resize', this.onResize, this);
-            }
-        }
-        this.container = ct;
-    },
-
-        parseMargins : function(v){
-        var ms = v.split(' ');
-        var len = ms.length;
-        if(len == 1){
-            ms[1] = ms[0];
-            ms[2] = ms[0];
-            ms[3] = ms[0];
-        }
-        if(len == 2){
-            ms[2] = ms[0];
-            ms[3] = ms[1];
-        }
-        return {
-            top:parseInt(ms[0], 10) || 0,
-            right:parseInt(ms[1], 10) || 0,
-            bottom:parseInt(ms[2], 10) || 0,
-            left:parseInt(ms[3], 10) || 0
-        };
-    }
-};
-Ext.Container.LAYOUTS['auto'] = Ext.layout.ContainerLayout;
-\r
-Ext.layout.FitLayout = Ext.extend(Ext.layout.ContainerLayout, {\r
-    
-    monitorResize:true,\r
-\r
-    
-    onLayout : function(ct, target){\r
-        Ext.layout.FitLayout.superclass.onLayout.call(this, ct, target);\r
-        if(!this.container.collapsed){\r
-            this.setItemSize(this.activeItem || ct.items.itemAt(0), target.getStyleSize());\r
-        }\r
-    },\r
-\r
-    
-    setItemSize : function(item, size){\r
-        if(item && size.height > 0){ 
-            item.setSize(size);\r
-        }\r
-    }\r
-});\r
-Ext.Container.LAYOUTS['fit'] = Ext.layout.FitLayout;
-\r
-Ext.layout.CardLayout = Ext.extend(Ext.layout.FitLayout, {\r
-    \r
-    deferredRender : false,\r
-\r
-    
-    renderHidden : true,\r
-\r
-    \r
-    setActiveItem : function(item){\r
-        item = this.container.getComponent(item);\r
-        if(this.activeItem != item){\r
-            if(this.activeItem){\r
-                this.activeItem.hide();\r
-            }\r
-            this.activeItem = item;\r
-            item.show();\r
-            this.layout();\r
-        }\r
-    },\r
-\r
-    
-    renderAll : function(ct, target){\r
-        if(this.deferredRender){\r
-            this.renderItem(this.activeItem, undefined, target);\r
-        }else{\r
-            Ext.layout.CardLayout.superclass.renderAll.call(this, ct, target);\r
-        }\r
-    }\r
-});\r
-Ext.Container.LAYOUTS['card'] = Ext.layout.CardLayout;
-\r
-Ext.layout.AnchorLayout = Ext.extend(Ext.layout.ContainerLayout, {\r
-    
-    monitorResize:true,\r
-\r
-    
-    getAnchorViewSize : function(ct, target){\r
-        return target.dom == document.body ?\r
-                   target.getViewSize() : target.getStyleSize();\r
-    },\r
-\r
-    
-    onLayout : function(ct, target){\r
-        Ext.layout.AnchorLayout.superclass.onLayout.call(this, ct, target);\r
-\r
-        var size = this.getAnchorViewSize(ct, target);\r
-\r
-        var w = size.width, h = size.height;\r
-\r
-        if(w < 20 || h < 20){\r
-            return;\r
-        }\r
-\r
-        
-        var aw, ah;\r
-        if(ct.anchorSize){\r
-            if(typeof ct.anchorSize == 'number'){\r
-                aw = ct.anchorSize;\r
-            }else{\r
-                aw = ct.anchorSize.width;\r
-                ah = ct.anchorSize.height;\r
-            }\r
-        }else{\r
-            aw = ct.initialConfig.width;\r
-            ah = ct.initialConfig.height;\r
-        }\r
-\r
-        var cs = ct.items.items, len = cs.length, i, c, a, cw, ch;\r
-        for(i = 0; i < len; i++){\r
-            c = cs[i];\r
-            if(c.anchor){\r
-                a = c.anchorSpec;\r
-                if(!a){ 
-                    var vs = c.anchor.split(' ');\r
-                    c.anchorSpec = a = {\r
-                        right: this.parseAnchor(vs[0], c.initialConfig.width, aw),\r
-                        bottom: this.parseAnchor(vs[1], c.initialConfig.height, ah)\r
-                    };\r
-                }\r
-                cw = a.right ? this.adjustWidthAnchor(a.right(w), c) : undefined;\r
-                ch = a.bottom ? this.adjustHeightAnchor(a.bottom(h), c) : undefined;\r
-\r
-                if(cw || ch){\r
-                    c.setSize(cw || undefined, ch || undefined);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    parseAnchor : function(a, start, cstart){\r
-        if(a && a != 'none'){\r
-            var last;\r
-            if(/^(r|right|b|bottom)$/i.test(a)){   
-                var diff = cstart - start;\r
-                return function(v){\r
-                    if(v !== last){\r
-                        last = v;\r
-                        return v - diff;\r
-                    }\r
-                }\r
-            }else if(a.indexOf('%') != -1){\r
-                var ratio = parseFloat(a.replace('%', ''))*.01;   
-                return function(v){\r
-                    if(v !== last){\r
-                        last = v;\r
-                        return Math.floor(v*ratio);\r
-                    }\r
-                }\r
-            }else{\r
-                a = parseInt(a, 10);\r
-                if(!isNaN(a)){                            
-                    return function(v){\r
-                        if(v !== last){\r
-                            last = v;\r
-                            return v + a;\r
-                        }\r
-                    }\r
-                }\r
-            }\r
-        }\r
-        return false;\r
-    },\r
-\r
-    
-    adjustWidthAnchor : function(value, comp){\r
-        return value;\r
-    },\r
-\r
-    
-    adjustHeightAnchor : function(value, comp){\r
-        return value;\r
-    }\r
-    \r
-    \r
-});\r
-Ext.Container.LAYOUTS['anchor'] = Ext.layout.AnchorLayout;
-\r
-Ext.layout.ColumnLayout = Ext.extend(Ext.layout.ContainerLayout, {\r
-    
-    monitorResize:true,\r
-    
-    extraCls: 'x-column',\r
-\r
-    scrollOffset : 0,\r
-\r
-    
-    isValidParent : function(c, target){\r
-        return c.getEl().dom.parentNode == this.innerCt.dom;\r
-    },\r
-\r
-    
-    onLayout : function(ct, target){\r
-        var cs = ct.items.items, len = cs.length, c, i;\r
-\r
-        if(!this.innerCt){\r
-            target.addClass('x-column-layout-ct');\r
-\r
-            
-            
-            this.innerCt = target.createChild({cls:'x-column-inner'});\r
-            this.innerCt.createChild({cls:'x-clear'});\r
-        }\r
-        this.renderAll(ct, this.innerCt);\r
-\r
-        var size = target.getViewSize();\r
-\r
-        if(size.width < 1 && size.height < 1){ 
-            return;\r
-        }\r
-\r
-        var w = size.width - target.getPadding('lr') - this.scrollOffset,\r
-            h = size.height - target.getPadding('tb'),\r
-            pw = w;\r
-\r
-        this.innerCt.setWidth(w);\r
-        \r
-        
-        
-\r
-        for(i = 0; i < len; i++){\r
-            c = cs[i];\r
-            if(!c.columnWidth){\r
-                pw -= (c.getSize().width + c.getEl().getMargins('lr'));\r
-            }\r
-        }\r
-\r
-        pw = pw < 0 ? 0 : pw;\r
-\r
-        for(i = 0; i < len; i++){\r
-            c = cs[i];\r
-            if(c.columnWidth){\r
-                c.setSize(Math.floor(c.columnWidth*pw) - c.getEl().getMargins('lr'));\r
-            }\r
-        }\r
-    }\r
-    \r
-    \r
-});\r
-\r
-Ext.Container.LAYOUTS['column'] = Ext.layout.ColumnLayout;
-
-Ext.layout.BorderLayout = Ext.extend(Ext.layout.ContainerLayout, {
-        monitorResize:true,
-        rendered : false,
-
-        onLayout : function(ct, target){
-        var collapsed;
-        if(!this.rendered){
-            target.position();
-            target.addClass('x-border-layout-ct');
-            var items = ct.items.items;
-            collapsed = [];
-            for(var i = 0, len = items.length; i < len; i++) {
-                var c = items[i];
-                var pos = c.region;
-                if(c.collapsed){
-                    collapsed.push(c);
-                }
-                c.collapsed = false;
-                if(!c.rendered){
-                    c.cls = c.cls ? c.cls +' x-border-panel' : 'x-border-panel';
-                    c.render(target, i);
-                }
-                this[pos] = pos != 'center' && c.split ?
-                    new Ext.layout.BorderLayout.SplitRegion(this, c.initialConfig, pos) :
-                    new Ext.layout.BorderLayout.Region(this, c.initialConfig, pos);
-                this[pos].render(target, c);
-            }
-            this.rendered = true;
-        }
-
-        var size = target.getViewSize();
-        if(size.width < 20 || size.height < 20){             if(collapsed){
-                this.restoreCollapsed = collapsed;
-            }
-            return;
-        }else if(this.restoreCollapsed){
-            collapsed = this.restoreCollapsed;
-            delete this.restoreCollapsed;
-        }
-
-        var w = size.width, h = size.height;
-        var centerW = w, centerH = h, centerY = 0, centerX = 0;
-
-        var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
-        if(!c){
-            throw 'No center region defined in BorderLayout ' + ct.id;
-        }
-
-        if(n && n.isVisible()){
-            var b = n.getSize();
-            var m = n.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            b.y = m.top;
-            centerY = b.height + b.y + m.bottom;
-            centerH -= centerY;
-            n.applyLayout(b);
-        }
-        if(s && s.isVisible()){
-            var b = s.getSize();
-            var m = s.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            var totalHeight = (b.height + m.top + m.bottom);
-            b.y = h - totalHeight + m.top;
-            centerH -= totalHeight;
-            s.applyLayout(b);
-        }
-        if(west && west.isVisible()){
-            var b = west.getSize();
-            var m = west.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            b.x = m.left;
-            b.y = centerY + m.top;
-            var totalWidth = (b.width + m.left + m.right);
-            centerX += totalWidth;
-            centerW -= totalWidth;
-            west.applyLayout(b);
-        }
-        if(e && e.isVisible()){
-            var b = e.getSize();
-            var m = e.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            var totalWidth = (b.width + m.left + m.right);
-            b.x = w - totalWidth + m.left;
-            b.y = centerY + m.top;
-            centerW -= totalWidth;
-            e.applyLayout(b);
-        }
-
-        var m = c.getMargins();
-        var centerBox = {
-            x: centerX + m.left,
-            y: centerY + m.top,
-            width: centerW - (m.left+m.right),
-            height: centerH - (m.top+m.bottom)
-        };
-        c.applyLayout(centerBox);
-
-        if(collapsed){
-            for(var i = 0, len = collapsed.length; i < len; i++){
-                collapsed[i].collapse(false);
-            }
-        }
-
-        if(Ext.isIE && Ext.isStrict){             target.repaint();
-        }
-    }
-    
-    
-});
-
-
-Ext.layout.BorderLayout.Region = function(layout, config, pos){
-    Ext.apply(this, config);
-    this.layout = layout;
-    this.position = pos;
-    this.state = {};
-    if(typeof this.margins == 'string'){
-        this.margins = this.layout.parseMargins(this.margins);
-    }
-    this.margins = Ext.applyIf(this.margins || {}, this.defaultMargins);
-    if(this.collapsible){
-        if(typeof this.cmargins == 'string'){
-            this.cmargins = this.layout.parseMargins(this.cmargins);
-        }
-        if(this.collapseMode == 'mini' && !this.cmargins){
-            this.cmargins = {left:0,top:0,right:0,bottom:0};
-        }else{
-            this.cmargins = Ext.applyIf(this.cmargins || {},
-                pos == 'north' || pos == 'south' ? this.defaultNSCMargins : this.defaultEWCMargins);
-        }
-    }
-};
-
-Ext.layout.BorderLayout.Region.prototype = {
-    
-    
-    
-    
-    
-    
-    collapsible : false,
-    
-    split:false,
-    
-    floatable: true,
-    
-    minWidth:50,
-    
-    minHeight:50,
-
-        defaultMargins : {left:0,top:0,right:0,bottom:0},
-        defaultNSCMargins : {left:5,top:5,right:5,bottom:5},
-        defaultEWCMargins : {left:5,top:0,right:5,bottom:0},
-
-    
-    isCollapsed : false,
-
-    
-    
-    
-
-        render : function(ct, p){
-        this.panel = p;
-        p.el.enableDisplayMode();
-        this.targetEl = ct;
-        this.el = p.el;
-
-        var gs = p.getState, ps = this.position;
-        p.getState = function(){
-            return Ext.apply(gs.call(p) || {}, this.state);
-        }.createDelegate(this);
-
-        if(ps != 'center'){
-            p.allowQueuedExpand = false;
-            p.on({
-                beforecollapse: this.beforeCollapse,
-                collapse: this.onCollapse,
-                beforeexpand: this.beforeExpand,
-                expand: this.onExpand,
-                hide: this.onHide,
-                show: this.onShow,
-                scope: this
-            });
-            if(this.collapsible){
-                p.collapseEl = 'el';
-                p.slideAnchor = this.getSlideAnchor();
-            }
-            if(p.tools && p.tools.toggle){
-                p.tools.toggle.addClass('x-tool-collapse-'+ps);
-                p.tools.toggle.addClassOnOver('x-tool-collapse-'+ps+'-over');
-            }
-        }
-    },
-
-        getCollapsedEl : function(){
-        if(!this.collapsedEl){
-            if(!this.toolTemplate){
-                var tt = new Ext.Template(
-                     '<div class="x-tool x-tool-{id}">&#160;</div>'
-                );
-                tt.disableFormats = true;
-                tt.compile();
-                Ext.layout.BorderLayout.Region.prototype.toolTemplate = tt;
-            }
-            this.collapsedEl = this.targetEl.createChild({
-                cls: "x-layout-collapsed x-layout-collapsed-"+this.position,
-                id: this.panel.id + '-xcollapsed'
-            });
-            this.collapsedEl.enableDisplayMode('block');
-
-            if(this.collapseMode == 'mini'){
-                this.collapsedEl.addClass('x-layout-cmini-'+this.position);
-                this.miniCollapsedEl = this.collapsedEl.createChild({
-                    cls: "x-layout-mini x-layout-mini-"+this.position, html: "&#160;"
-                });
-                this.miniCollapsedEl.addClassOnOver('x-layout-mini-over');
-                this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
-                this.collapsedEl.on('click', this.onExpandClick, this, {stopEvent:true});
-            }else {
-                var t = this.toolTemplate.append(
-                        this.collapsedEl.dom,
-                        {id:'expand-'+this.position}, true);
-                t.addClassOnOver('x-tool-expand-'+this.position+'-over');
-                t.on('click', this.onExpandClick, this, {stopEvent:true});
-                
-                if(this.floatable !== false){
-                   this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
-                   this.collapsedEl.on("click", this.collapseClick, this);
-                }
-            }
-        }
-        return this.collapsedEl;
-    },
-
-        onExpandClick : function(e){
-        if(this.isSlid){
-            this.afterSlideIn();
-            this.panel.expand(false);
-        }else{
-            this.panel.expand();
-        }
-    },
-
-        onCollapseClick : function(e){
-        this.panel.collapse();
-    },
-
-        beforeCollapse : function(p, animate){
-        this.lastAnim = animate;
-        if(this.splitEl){
-            this.splitEl.hide();
-        }
-        this.getCollapsedEl().show();
-        this.panel.el.setStyle('z-index', 100);
-        this.isCollapsed = true;
-        this.layout.layout();
-    },
-
-        onCollapse : function(animate){
-        this.panel.el.setStyle('z-index', 1);
-        if(this.lastAnim === false || this.panel.animCollapse === false){
-            this.getCollapsedEl().dom.style.visibility = 'visible';
-        }else{
-            this.getCollapsedEl().slideIn(this.panel.slideAnchor, {duration:.2});
-        }
-        this.state.collapsed = true;
-        this.panel.saveState();
-    },
-
-        beforeExpand : function(animate){
-        var c = this.getCollapsedEl();
-        this.el.show();
-        if(this.position == 'east' || this.position == 'west'){
-            this.panel.setSize(undefined, c.getHeight());
-        }else{
-            this.panel.setSize(c.getWidth(), undefined);
-        }
-        c.hide();
-        c.dom.style.visibility = 'hidden';
-        this.panel.el.setStyle('z-index', 100);
-    },
-
-        onExpand : function(){
-        this.isCollapsed = false;
-        if(this.splitEl){
-            this.splitEl.show();
-        }
-        this.layout.layout();
-        this.panel.el.setStyle('z-index', 1);
-        this.state.collapsed = false;
-        this.panel.saveState();
-    },
-
-        collapseClick : function(e){
-        if(this.isSlid){
-           e.stopPropagation();
-           this.slideIn();
-        }else{
-           e.stopPropagation();
-           this.slideOut();
-        }
-    },
-
-        onHide : function(){
-        if(this.isCollapsed){
-            this.getCollapsedEl().hide();
-        }else if(this.splitEl){
-            this.splitEl.hide();
-        }
-    },
-
-        onShow : function(){
-        if(this.isCollapsed){
-            this.getCollapsedEl().show();
-        }else if(this.splitEl){
-            this.splitEl.show();
-        }
-    },
-
-    
-    isVisible : function(){
-        return !this.panel.hidden;
-    },
-
-    
-    getMargins : function(){
-        return this.isCollapsed && this.cmargins ? this.cmargins : this.margins;
-    },
-
-    
-    getSize : function(){
-        return this.isCollapsed ? this.getCollapsedEl().getSize() : this.panel.getSize();
-    },
-
-    
-    setPanel : function(panel){
-        this.panel = panel;
-    },
-
-    
-    getMinWidth: function(){
-        return this.minWidth;
-    },
-
-    
-    getMinHeight: function(){
-        return this.minHeight;
-    },
-
-        applyLayoutCollapsed : function(box){
-        var ce = this.getCollapsedEl();
-        ce.setLeftTop(box.x, box.y);
-        ce.setSize(box.width, box.height);
-    },
-
-        applyLayout : function(box){
-        if(this.isCollapsed){
-            this.applyLayoutCollapsed(box);
-        }else{
-            this.panel.setPosition(box.x, box.y);
-            this.panel.setSize(box.width, box.height);
-        }
-    },
-
-        beforeSlide: function(){
-        this.panel.beforeEffect();
-    },
-
-        afterSlide : function(){
-        this.panel.afterEffect();
-    },
-
-        initAutoHide : function(){
-        if(this.autoHide !== false){
-            if(!this.autoHideHd){
-                var st = new Ext.util.DelayedTask(this.slideIn, this);
-                this.autoHideHd = {
-                    "mouseout": function(e){
-                        if(!e.within(this.el, true)){
-                            st.delay(500);
-                        }
-                    },
-                    "mouseover" : function(e){
-                        st.cancel();
-                    },
-                    scope : this
-                };
-            }
-            this.el.on(this.autoHideHd);
-        }
-    },
-
-        clearAutoHide : function(){
-        if(this.autoHide !== false){
-            this.el.un("mouseout", this.autoHideHd.mouseout);
-            this.el.un("mouseover", this.autoHideHd.mouseover);
-        }
-    },
-
-        clearMonitor : function(){
-        Ext.getDoc().un("click", this.slideInIf, this);
-    },
-
-            slideOut : function(){
-        if(this.isSlid || this.el.hasActiveFx()){
-            return;
-        }
-        this.isSlid = true;
-        var ts = this.panel.tools;
-        if(ts && ts.toggle){
-            ts.toggle.hide();
-        }
-        this.el.show();
-        if(this.position == 'east' || this.position == 'west'){
-            this.panel.setSize(undefined, this.collapsedEl.getHeight());
-        }else{
-            this.panel.setSize(this.collapsedEl.getWidth(), undefined);
-        }
-        this.restoreLT = [this.el.dom.style.left, this.el.dom.style.top];
-        this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
-        this.el.setStyle("z-index", 102);
-        if(this.animFloat !== false){
-            this.beforeSlide();
-            this.el.slideIn(this.getSlideAnchor(), {
-                callback: function(){
-                    this.afterSlide();
-                    this.initAutoHide();
-                    Ext.getDoc().on("click", this.slideInIf, this);
-                },
-                scope: this,
-                block: true
-            });
-        }else{
-            this.initAutoHide();
-             Ext.getDoc().on("click", this.slideInIf, this);
-        }
-    },
-
-        afterSlideIn : function(){
-        this.clearAutoHide();
-        this.isSlid = false;
-        this.clearMonitor();
-        this.el.setStyle("z-index", "");
-        this.el.dom.style.left = this.restoreLT[0];
-        this.el.dom.style.top = this.restoreLT[1];
-
-        var ts = this.panel.tools;
-        if(ts && ts.toggle){
-            ts.toggle.show();
-        }
-    },
-
-        slideIn : function(cb){
-        if(!this.isSlid || this.el.hasActiveFx()){
-            Ext.callback(cb);
-            return;
-        }
-        this.isSlid = false;
-        if(this.animFloat !== false){
-            this.beforeSlide();
-            this.el.slideOut(this.getSlideAnchor(), {
-                callback: function(){
-                    this.el.hide();
-                    this.afterSlide();
-                    this.afterSlideIn();
-                    Ext.callback(cb);
-                },
-                scope: this,
-                block: true
-            });
-        }else{
-            this.el.hide();
-            this.afterSlideIn();
-        }
-    },
-
-        slideInIf : function(e){
-        if(!e.within(this.el)){
-            this.slideIn();
-        }
-    },
-
-        anchors : {
-        "west" : "left",
-        "east" : "right",
-        "north" : "top",
-        "south" : "bottom"
-    },
-
-        sanchors : {
-        "west" : "l",
-        "east" : "r",
-        "north" : "t",
-        "south" : "b"
-    },
-
-        canchors : {
-        "west" : "tl-tr",
-        "east" : "tr-tl",
-        "north" : "tl-bl",
-        "south" : "bl-tl"
-    },
-
-        getAnchor : function(){
-        return this.anchors[this.position];
-    },
-
-        getCollapseAnchor : function(){
-        return this.canchors[this.position];
-    },
-
-        getSlideAnchor : function(){
-        return this.sanchors[this.position];
-    },
-
-        getAlignAdj : function(){
-        var cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [0, 0];
-            break;
-            case "east":
-                return [0, 0];
-            break;
-            case "north":
-                return [0, 0];
-            break;
-            case "south":
-                return [0, 0];
-            break;
-        }
-    },
-
-        getExpandAdj : function(){
-        var c = this.collapsedEl, cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [-(cm.right+c.getWidth()+cm.left), 0];
-            break;
-            case "east":
-                return [cm.right+c.getWidth()+cm.left, 0];
-            break;
-            case "north":
-                return [0, -(cm.top+cm.bottom+c.getHeight())];
-            break;
-            case "south":
-                return [0, cm.top+cm.bottom+c.getHeight()];
-            break;
-        }
-    }
-};
-
-
-Ext.layout.BorderLayout.SplitRegion = function(layout, config, pos){
-    Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this, layout, config, pos);
-        this.applyLayout = this.applyFns[pos];
-};
-
-Ext.extend(Ext.layout.BorderLayout.SplitRegion, Ext.layout.BorderLayout.Region, {
-    
-    splitTip : "Drag to resize.",
-    
-    collapsibleSplitTip : "Drag to resize. Double click to hide.",
-    
-    useSplitTips : false,
-
-        splitSettings : {
-        north : {
-            orientation: Ext.SplitBar.VERTICAL,
-            placement: Ext.SplitBar.TOP,
-            maxFn : 'getVMaxSize',
-            minProp: 'minHeight',
-            maxProp: 'maxHeight'
-        },
-        south : {
-            orientation: Ext.SplitBar.VERTICAL,
-            placement: Ext.SplitBar.BOTTOM,
-            maxFn : 'getVMaxSize',
-            minProp: 'minHeight',
-            maxProp: 'maxHeight'
-        },
-        east : {
-            orientation: Ext.SplitBar.HORIZONTAL,
-            placement: Ext.SplitBar.RIGHT,
-            maxFn : 'getHMaxSize',
-            minProp: 'minWidth',
-            maxProp: 'maxWidth'
-        },
-        west : {
-            orientation: Ext.SplitBar.HORIZONTAL,
-            placement: Ext.SplitBar.LEFT,
-            maxFn : 'getHMaxSize',
-            minProp: 'minWidth',
-            maxProp: 'maxWidth'
-        }
-    },
-
-        applyFns : {
-        west : function(box){
-            if(this.isCollapsed){
-                return this.applyLayoutCollapsed(box);
-            }
-            var sd = this.splitEl.dom, s = sd.style;
-            this.panel.setPosition(box.x, box.y);
-            var sw = sd.offsetWidth;
-            s.left = (box.x+box.width-sw)+'px';
-            s.top = (box.y)+'px';
-            s.height = Math.max(0, box.height)+'px';
-            this.panel.setSize(box.width-sw, box.height);
-        },
-        east : function(box){
-            if(this.isCollapsed){
-                return this.applyLayoutCollapsed(box);
-            }
-            var sd = this.splitEl.dom, s = sd.style;
-            var sw = sd.offsetWidth;
-            this.panel.setPosition(box.x+sw, box.y);
-            s.left = (box.x)+'px';
-            s.top = (box.y)+'px';
-            s.height = Math.max(0, box.height)+'px';
-            this.panel.setSize(box.width-sw, box.height);
-        },
-        north : function(box){
-            if(this.isCollapsed){
-                return this.applyLayoutCollapsed(box);
-            }
-            var sd = this.splitEl.dom, s = sd.style;
-            var sh = sd.offsetHeight;
-            this.panel.setPosition(box.x, box.y);
-            s.left = (box.x)+'px';
-            s.top = (box.y+box.height-sh)+'px';
-            s.width = Math.max(0, box.width)+'px';
-            this.panel.setSize(box.width, box.height-sh);
-        },
-        south : function(box){
-            if(this.isCollapsed){
-                return this.applyLayoutCollapsed(box);
-            }
-            var sd = this.splitEl.dom, s = sd.style;
-            var sh = sd.offsetHeight;
-            this.panel.setPosition(box.x, box.y+sh);
-            s.left = (box.x)+'px';
-            s.top = (box.y)+'px';
-            s.width = Math.max(0, box.width)+'px';
-            this.panel.setSize(box.width, box.height-sh);
-        }
-    },
-
-        render : function(ct, p){
-        Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this, ct, p);
-
-        var ps = this.position;
-
-        this.splitEl = ct.createChild({
-            cls: "x-layout-split x-layout-split-"+ps, html: "&#160;",
-            id: this.panel.id + '-xsplit'
-        });
-
-        if(this.collapseMode == 'mini'){
-            this.miniSplitEl = this.splitEl.createChild({
-                cls: "x-layout-mini x-layout-mini-"+ps, html: "&#160;"
-            });
-            this.miniSplitEl.addClassOnOver('x-layout-mini-over');
-            this.miniSplitEl.on('click', this.onCollapseClick, this, {stopEvent:true});
-        }
-
-        var s = this.splitSettings[ps];
-
-        this.split = new Ext.SplitBar(this.splitEl.dom, p.el, s.orientation);
-        this.split.placement = s.placement;
-        this.split.getMaximumSize = this[s.maxFn].createDelegate(this);
-        this.split.minSize = this.minSize || this[s.minProp];
-        this.split.on("beforeapply", this.onSplitMove, this);
-        this.split.useShim = this.useShim === true;
-        this.maxSize = this.maxSize || this[s.maxProp];
-
-        if(p.hidden){
-            this.splitEl.hide();
-        }
-
-        if(this.useSplitTips){
-            this.splitEl.dom.title = this.collapsible ? this.collapsibleSplitTip : this.splitTip;
-        }
-        if(this.collapsible){
-            this.splitEl.on("dblclick", this.onCollapseClick,  this);
-        }
-    },
-
-        getSize : function(){
-        if(this.isCollapsed){
-            return this.collapsedEl.getSize();
-        }
-        var s = this.panel.getSize();
-        if(this.position == 'north' || this.position == 'south'){
-            s.height += this.splitEl.dom.offsetHeight;
-        }else{
-            s.width += this.splitEl.dom.offsetWidth;
-        }
-        return s;
-    },
-
-        getHMaxSize : function(){
-         var cmax = this.maxSize || 10000;
-         var center = this.layout.center;
-         return Math.min(cmax, (this.el.getWidth()+center.el.getWidth())-center.getMinWidth());
-    },
-
-        getVMaxSize : function(){
-        var cmax = this.maxSize || 10000;
-        var center = this.layout.center;
-        return Math.min(cmax, (this.el.getHeight()+center.el.getHeight())-center.getMinHeight());
-    },
-
-        onSplitMove : function(split, newSize){
-        var s = this.panel.getSize();
-        this.lastSplitSize = newSize;
-        if(this.position == 'north' || this.position == 'south'){
-            this.panel.setSize(s.width, newSize);
-            this.state.height = newSize;
-        }else{
-            this.panel.setSize(newSize, s.height);
-            this.state.width = newSize;
-        }
-        this.layout.layout();
-        this.panel.saveState();
-        return false;
-    },
-
-    
-    getSplitBar : function(){
-        return this.split;
-    }
-});
-
-Ext.Container.LAYOUTS['border'] = Ext.layout.BorderLayout;
-
-Ext.layout.FormLayout = Ext.extend(Ext.layout.AnchorLayout, {
-    
-    
-    
-    labelSeparator : ':',
-
-        getAnchorViewSize : function(ct, target){
-        return ct.body.getStyleSize();
-    },
-
-        setContainer : function(ct){
-        Ext.layout.FormLayout.superclass.setContainer.call(this, ct);
-
-        if(ct.labelAlign){
-            ct.addClass('x-form-label-'+ct.labelAlign);
-        }
-
-        if(ct.hideLabels){
-            this.labelStyle = "display:none";
-            this.elementStyle = "padding-left:0;";
-            this.labelAdjust = 0;
-        }else{
-            this.labelSeparator = ct.labelSeparator || this.labelSeparator;
-            ct.labelWidth = ct.labelWidth || 100;
-            if(typeof ct.labelWidth == 'number'){
-                var pad = (typeof ct.labelPad == 'number' ? ct.labelPad : 5);
-                this.labelAdjust = ct.labelWidth+pad;
-                this.labelStyle = "width:"+ct.labelWidth+"px;";
-                this.elementStyle = "padding-left:"+(ct.labelWidth+pad)+'px';
-            }
-            if(ct.labelAlign == 'top'){
-                this.labelStyle = "width:auto;";
-                this.labelAdjust = 0;
-                this.elementStyle = "padding-left:0;";
-            }
-        }
-
-        if(!this.fieldTpl){
-                        var t = new Ext.Template(
-                '<div class="x-form-item {5}" tabIndex="-1">',
-                    '<label for="{0}" style="{2}" class="x-form-item-label">{1}{4}</label>',
-                    '<div class="x-form-element" id="x-form-el-{0}" style="{3}">',
-                    '</div><div class="{6}"></div>',
-                '</div>'
-            );
-            t.disableFormats = true;
-            t.compile();
-            Ext.layout.FormLayout.prototype.fieldTpl = t;
-        }
-    },
-
-        renderItem : function(c, position, target){
-        if(c && !c.rendered && c.isFormField && c.inputType != 'hidden'){
-            var args = [
-                   c.id, c.fieldLabel,
-                   c.labelStyle||this.labelStyle||'',
-                   this.elementStyle||'',
-                   typeof c.labelSeparator == 'undefined' ? this.labelSeparator : c.labelSeparator,
-                   (c.itemCls||this.container.itemCls||'') + (c.hideLabel ? ' x-hide-label' : ''),
-                   c.clearCls || 'x-form-clear-left' 
-            ];
-            if(typeof position == 'number'){
-                position = target.dom.childNodes[position] || null;
-            }
-            if(position){
-                this.fieldTpl.insertBefore(position, args);
-            }else{
-                this.fieldTpl.append(target, args);
-            }
-            c.render('x-form-el-'+c.id);
-        }else {
-            Ext.layout.FormLayout.superclass.renderItem.apply(this, arguments);
-        }
-    },
-
-        adjustWidthAnchor : function(value, comp){
-        return value - (comp.isFormField  ? (comp.hideLabel ? 0 : this.labelAdjust) : 0);
-    },
-
-        isValidParent : function(c, target){
-        return true;
-    }
-
-    
-});
-
-Ext.Container.LAYOUTS['form'] = Ext.layout.FormLayout;
-\r
-Ext.layout.Accordion = Ext.extend(Ext.layout.FitLayout, {\r
-    \r
-    fill : true,\r
-    \r
-    autoWidth : true,\r
-    \r
-    titleCollapse : true,\r
-    \r
-    hideCollapseTool : false,\r
-    \r
-    collapseFirst : false,\r
-    \r
-    animate : false,\r
-    \r
-    sequence : false,\r
-    \r
-    activeOnTop : false,\r
-\r
-    renderItem : function(c){\r
-        if(this.animate === false){\r
-            c.animCollapse = false;\r
-        }\r
-        c.collapsible = true;\r
-        if(this.autoWidth){\r
-            c.autoWidth = true;\r
-        }\r
-        if(this.titleCollapse){\r
-            c.titleCollapse = true;\r
-        }\r
-        if(this.hideCollapseTool){\r
-            c.hideCollapseTool = true;\r
-        }\r
-        if(this.collapseFirst !== undefined){\r
-            c.collapseFirst = this.collapseFirst;\r
-        }\r
-        if(!this.activeItem && !c.collapsed){\r
-            this.activeItem = c;\r
-        }else if(this.activeItem){\r
-            c.collapsed = true;\r
-        }\r
-        Ext.layout.Accordion.superclass.renderItem.apply(this, arguments);\r
-        c.header.addClass('x-accordion-hd');\r
-        c.on('beforeexpand', this.beforeExpand, this);\r
-    },\r
-\r
-    
-    beforeExpand : function(p, anim){\r
-        var ai = this.activeItem;\r
-        if(ai){\r
-            if(this.sequence){\r
-                delete this.activeItem;\r
-                ai.collapse({callback:function(){\r
-                    p.expand(anim || true);\r
-                }, scope: this});\r
-                return false;\r
-            }else{\r
-                ai.collapse(this.animate);\r
-            }\r
-        }\r
-        this.activeItem = p;\r
-        if(this.activeOnTop){\r
-            p.el.dom.parentNode.insertBefore(p.el.dom, p.el.dom.parentNode.firstChild);\r
-        }\r
-        this.layout();\r
-    },\r
-\r
-    
-    setItemSize : function(item, size){\r
-        if(this.fill && item){\r
-            var items = this.container.items.items;\r
-            var hh = 0;\r
-            for(var i = 0, len = items.length; i < len; i++){\r
-                var p = items[i];\r
-                if(p != item){\r
-                    hh += (p.getSize().height - p.bwrap.getHeight());\r
-                }\r
-            }\r
-            size.height -= hh;\r
-            item.setSize(size);\r
-        }\r
-    }\r
-});\r
-Ext.Container.LAYOUTS['accordion'] = Ext.layout.Accordion;
-\r
-Ext.layout.TableLayout = Ext.extend(Ext.layout.ContainerLayout, {\r
-    \r
-\r
-    
-    monitorResize:false,\r
-\r
-    
-    setContainer : function(ct){\r
-        Ext.layout.TableLayout.superclass.setContainer.call(this, ct);\r
-\r
-        this.currentRow = 0;\r
-        this.currentColumn = 0;\r
-        this.cells = [];\r
-    },\r
-\r
-    
-    onLayout : function(ct, target){\r
-        var cs = ct.items.items, len = cs.length, c, i;\r
-\r
-        if(!this.table){\r
-            target.addClass('x-table-layout-ct');\r
-\r
-            this.table = target.createChild(\r
-                {tag:'table', cls:'x-table-layout', cellspacing: 0, cn: {tag: 'tbody'}}, null, true);\r
-\r
-            this.renderAll(ct, target);\r
-        }\r
-    },\r
-\r
-    
-    getRow : function(index){\r
-        var row = this.table.tBodies[0].childNodes[index];\r
-        if(!row){\r
-            row = document.createElement('tr');\r
-            this.table.tBodies[0].appendChild(row);\r
-        }\r
-        return row;\r
-    },\r
-\r
-    
-       getNextCell : function(c){\r
-               var cell = this.getNextNonSpan(this.currentColumn, this.currentRow);\r
-               var curCol = this.currentColumn = cell[0], curRow = this.currentRow = cell[1];\r
-               for(var rowIndex = curRow; rowIndex < curRow + (c.rowspan || 1); rowIndex++){\r
-                       if(!this.cells[rowIndex]){\r
-                               this.cells[rowIndex] = [];\r
-                       }\r
-                       for(var colIndex = curCol; colIndex < curCol + (c.colspan || 1); colIndex++){\r
-                               this.cells[rowIndex][colIndex] = true;\r
-                       }\r
-               }\r
-               var td = document.createElement('td');\r
-               if(c.cellId){\r
-                       td.id = c.cellId;\r
-               }\r
-               var cls = 'x-table-layout-cell';\r
-               if(c.cellCls){\r
-                       cls += ' ' + c.cellCls;\r
-               }\r
-               td.className = cls;\r
-               if(c.colspan){\r
-                       td.colSpan = c.colspan;\r
-               }\r
-               if(c.rowspan){\r
-                       td.rowSpan = c.rowspan;\r
-               }\r
-               this.getRow(curRow).appendChild(td);\r
-               return td;\r
-       },\r
-    \r
-    
-       getNextNonSpan: function(colIndex, rowIndex){\r
-               var cols = this.columns;\r
-               while((cols && colIndex >= cols) || (this.cells[rowIndex] && this.cells[rowIndex][colIndex])) {\r
-                       if(cols && colIndex >= cols){\r
-                               rowIndex++;\r
-                               colIndex = 0;\r
-                       }else{\r
-                               colIndex++;\r
-                       }\r
-               }\r
-               return [colIndex, rowIndex];\r
-       },\r
-\r
-    
-    renderItem : function(c, position, target){\r
-        if(c && !c.rendered){\r
-            c.render(this.getNextCell(c));\r
-        }\r
-    },\r
-\r
-    
-    isValidParent : function(c, target){\r
-        return true;\r
-    }\r
-\r
-    \r
-});\r
-\r
-Ext.Container.LAYOUTS['table'] = Ext.layout.TableLayout;
-\r
-Ext.layout.AbsoluteLayout = Ext.extend(Ext.layout.AnchorLayout, {\r
-    extraCls: 'x-abs-layout-item',\r
-    isForm: false,\r
-    
-    setContainer : function(ct){\r
-        Ext.layout.AbsoluteLayout.superclass.setContainer.call(this, ct);\r
-        if(ct.isXType('form')){\r
-            this.isForm = true;\r
-        }\r
-    },\r
-\r
-    onLayout : function(ct, target){\r
-        if(this.isForm){ ct.body.position(); } else { target.position(); }\r
-        Ext.layout.AbsoluteLayout.superclass.onLayout.call(this, ct, target);\r
-    },\r
-\r
-    
-    getAnchorViewSize : function(ct, target){\r
-        return this.isForm ? ct.body.getStyleSize() : Ext.layout.AbsoluteLayout.superclass.getAnchorViewSize.call(this, ct, target);\r
-    },\r
-\r
-    
-    isValidParent : function(c, target){\r
-        return this.isForm ? true : Ext.layout.AbsoluteLayout.superclass.isValidParent.call(this, c, target);\r
-    },\r
-\r
-    
-    adjustWidthAnchor : function(value, comp){\r
-        return value ? value - comp.getPosition(true)[0] : value;\r
-    },\r
-\r
-    
-    adjustHeightAnchor : function(value, comp){\r
-        return  value ? value - comp.getPosition(true)[1] : value;\r
-    }\r
-    \r
-});\r
-Ext.Container.LAYOUTS['absolute'] = Ext.layout.AbsoluteLayout;
-\r
-Ext.Viewport = Ext.extend(Ext.Container, {\r
-       \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    initComponent : function() {\r
-        Ext.Viewport.superclass.initComponent.call(this);\r
-        document.getElementsByTagName('html')[0].className += ' x-viewport';\r
-        this.el = Ext.getBody();\r
-        this.el.setHeight = Ext.emptyFn;\r
-        this.el.setWidth = Ext.emptyFn;\r
-        this.el.setSize = Ext.emptyFn;\r
-        this.el.dom.scroll = 'no';\r
-        this.allowDomMove = false;\r
-        this.autoWidth = true;\r
-        this.autoHeight = true;\r
-        Ext.EventManager.onWindowResize(this.fireResize, this);\r
-        this.renderTo = this.el;\r
-    },\r
-\r
-    fireResize : function(w, h){\r
-        this.fireEvent('resize', this, w, h, w, h);\r
-    }\r
-});\r
-Ext.reg('viewport', Ext.Viewport);
-
-Ext.Panel = Ext.extend(Ext.Container, {
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-       
-       
-
-
-    
-    baseCls : 'x-panel',
-    
-    collapsedCls : 'x-panel-collapsed',
-    
-    maskDisabled: true,
-    
-    animCollapse: Ext.enableFx,
-    
-    headerAsText: true,
-    
-    buttonAlign: 'right',
-    
-    collapsed : false,
-    
-    collapseFirst: true,
-    
-    minButtonWidth:75,
-    
-    elements : 'body',
-
-                toolTarget : 'header',
-    collapseEl : 'bwrap',
-    slideAnchor : 't',
-
-        deferHeight: true,
-        expandDefaults: {
-        duration:.25
-    },
-        collapseDefaults: {
-        duration:.25
-    },
-
-        initComponent : function(){
-        Ext.Panel.superclass.initComponent.call(this);
-
-        this.addEvents(
-            
-            'bodyresize',
-            
-            'titlechange',
-            
-            'collapse',
-            
-            'expand',
-            
-            'beforecollapse',
-            
-            'beforeexpand',
-            
-            'beforeclose',
-            
-            'close',
-            
-            'activate',
-            
-            'deactivate'
-        );
-
-                if(this.tbar){
-            this.elements += ',tbar';
-            if(typeof this.tbar == 'object'){
-                this.topToolbar = this.tbar;
-            }
-            delete this.tbar;
-        }
-        if(this.bbar){
-            this.elements += ',bbar';
-            if(typeof this.bbar == 'object'){
-                this.bottomToolbar = this.bbar;
-            }
-            delete this.bbar;
-        }
-
-        if(this.header === true){
-            this.elements += ',header';
-            delete this.header;
-        }else if(this.title && this.header !== false){
-            this.elements += ',header';
-        }
-
-        if(this.footer === true){
-            this.elements += ',footer';
-            delete this.footer;
-        }
-
-        if(this.buttons){
-            var btns = this.buttons;
-            
-            this.buttons = [];
-            for(var i = 0, len = btns.length; i < len; i++) {
-                if(btns[i].render){                     this.buttons.push(btns[i]);
-                }else{
-                    this.addButton(btns[i]);
-                }
-            }
-        }
-        if(this.autoLoad){
-            this.on('render', this.doAutoLoad, this, {delay:10});
-        }
-    },
-
-        createElement : function(name, pnode){
-        if(this[name]){
-            pnode.appendChild(this[name].dom);
-            return;
-        }
-
-        if(name === 'bwrap' || this.elements.indexOf(name) != -1){
-            if(this[name+'Cfg']){
-                this[name] = Ext.fly(pnode).createChild(this[name+'Cfg']);
-            }else{
-                var el = document.createElement('div');
-                el.className = this[name+'Cls'];
-                this[name] = Ext.get(pnode.appendChild(el));
-            }
-        }
-    },
-
-        onRender : function(ct, position){
-        Ext.Panel.superclass.onRender.call(this, ct, position);
-
-        this.createClasses();
-
-        if(this.el){             this.el.addClass(this.baseCls);
-            this.header = this.el.down('.'+this.headerCls);
-            this.bwrap = this.el.down('.'+this.bwrapCls);
-            var cp = this.bwrap ? this.bwrap : this.el;
-            this.tbar = cp.down('.'+this.tbarCls);
-            this.body = cp.down('.'+this.bodyCls);
-            this.bbar = cp.down('.'+this.bbarCls);
-            this.footer = cp.down('.'+this.footerCls);
-            this.fromMarkup = true;
-        }else{
-            this.el = ct.createChild({
-                id: this.id,
-                cls: this.baseCls
-            }, position);
-        }
-        var el = this.el, d = el.dom;
-
-        if(this.cls){
-            this.el.addClass(this.cls);
-        }
-
-        if(this.buttons){
-            this.elements += ',footer';
-        }
-
-        
-                if(this.frame){
-            el.insertHtml('afterBegin', String.format(Ext.Element.boxMarkup, this.baseCls));
-
-            this.createElement('header', d.firstChild.firstChild.firstChild);
-            this.createElement('bwrap', d);
-
-                        var bw = this.bwrap.dom;
-            var ml = d.childNodes[1], bl = d.childNodes[2];
-            bw.appendChild(ml);
-            bw.appendChild(bl);
-
-            var mc = bw.firstChild.firstChild.firstChild;
-            this.createElement('tbar', mc);
-            this.createElement('body', mc);
-            this.createElement('bbar', mc);
-            this.createElement('footer', bw.lastChild.firstChild.firstChild);
-
-            if(!this.footer){
-                this.bwrap.dom.lastChild.className += ' x-panel-nofooter';
-            }
-        }else{
-            this.createElement('header', d);
-            this.createElement('bwrap', d);
-
-                        var bw = this.bwrap.dom;
-            this.createElement('tbar', bw);
-            this.createElement('body', bw);
-            this.createElement('bbar', bw);
-            this.createElement('footer', bw);
-
-            if(!this.header){
-                this.body.addClass(this.bodyCls + '-noheader');
-                if(this.tbar){
-                    this.tbar.addClass(this.tbarCls + '-noheader');
-                }
-            }
-        }
-
-        if(this.border === false){
-            this.el.addClass(this.baseCls + '-noborder');
-            this.body.addClass(this.bodyCls + '-noborder');
-            if(this.header){
-                this.header.addClass(this.headerCls + '-noborder');
-            }
-            if(this.footer){
-                this.footer.addClass(this.footerCls + '-noborder');
-            }
-            if(this.tbar){
-                this.tbar.addClass(this.tbarCls + '-noborder');
-            }
-            if(this.bbar){
-                this.bbar.addClass(this.bbarCls + '-noborder');
-            }
-        }
-
-        if(this.bodyBorder === false){
-           this.body.addClass(this.bodyCls + '-noborder');
-        }
-
-        if(this.bodyStyle){
-           this.body.applyStyles(this.bodyStyle);
-        }
-
-        this.bwrap.enableDisplayMode('block');
-
-        if(this.header){
-            this.header.unselectable();
-
-                        if(this.headerAsText){
-                this.header.dom.innerHTML =
-                    '<span class="' + this.headerTextCls + '">'+this.header.dom.innerHTML+'</span>';
-
-                if(this.iconCls){
-                    this.setIconClass(this.iconCls);
-                }
-            }
-        }
-
-        if(this.floating){
-            this.makeFloating(this.floating);
-        }
-
-        if(this.collapsible){
-            this.tools = this.tools ? this.tools.slice(0) : [];
-            if(!this.hideCollapseTool){
-                this.tools[this.collapseFirst?'unshift':'push']({
-                    id: 'toggle',
-                    handler : this.toggleCollapse,
-                    scope: this
-                });
-            }
-            if(this.titleCollapse && this.header){
-                this.header.on('click', this.toggleCollapse, this);
-                this.header.setStyle('cursor', 'pointer');
-            }
-        }
-        if(this.tools){
-            var ts = this.tools;
-            this.tools = {};
-            this.addTool.apply(this, ts);
-        }else{
-            this.tools = {};
-        }
-
-        if(this.buttons && this.buttons.length > 0){
-                        var tb = this.footer.createChild({cls:'x-panel-btns-ct', cn: {
-                cls:"x-panel-btns x-panel-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }}, null, true);
-            var tr = tb.getElementsByTagName('tr')[0];
-            for(var i = 0, len = this.buttons.length; i < len; i++) {
-                var b = this.buttons[i];
-                var td = document.createElement('td');
-                td.className = 'x-panel-btn-td';
-                b.render(tr.appendChild(td));
-            }
-        }
-
-        if(this.tbar && this.topToolbar){
-            if(Ext.isArray(this.topToolbar)){
-                this.topToolbar = new Ext.Toolbar(this.topToolbar);
-            }
-            this.topToolbar.render(this.tbar);
-        }
-        if(this.bbar && this.bottomToolbar){
-            if(Ext.isArray(this.bottomToolbar)){
-                this.bottomToolbar = new Ext.Toolbar(this.bottomToolbar);
-            }
-            this.bottomToolbar.render(this.bbar);
-        }
-    },
-
-    
-    setIconClass : function(cls){
-        var old = this.iconCls;
-        this.iconCls = cls;
-        if(this.rendered && this.header){
-            if(this.frame){
-                this.header.addClass('x-panel-icon');
-                this.header.replaceClass(old, this.iconCls);
-            }else{
-                var hd = this.header.dom;
-                var img = hd.firstChild && String(hd.firstChild.tagName).toLowerCase() == 'img' ? hd.firstChild : null;
-                if(img){
-                    Ext.fly(img).replaceClass(old, this.iconCls);
-                }else{
-                    Ext.DomHelper.insertBefore(hd.firstChild, {
-                        tag:'img', src: Ext.BLANK_IMAGE_URL, cls:'x-panel-inline-icon '+this.iconCls
-                    });
-                 }
-            }
-        }
-    },
-
-        makeFloating : function(cfg){
-        this.floating = true;
-        this.el = new Ext.Layer(
-            typeof cfg == 'object' ? cfg : {
-                shadow: this.shadow !== undefined ? this.shadow : 'sides',
-                shadowOffset: this.shadowOffset,
-                constrain:false,
-                shim: this.shim === false ? false : undefined
-            }, this.el
-        );
-    },
-
-    
-    getTopToolbar : function(){
-        return this.topToolbar;
-    },
-
-    
-    getBottomToolbar : function(){
-        return this.bottomToolbar;
-    },
-
-    
-    addButton : function(config, handler, scope){
-        var bc = {
-            handler: handler,
-            scope: scope,
-            minWidth: this.minButtonWidth,
-            hideParent:true
-        };
-        if(typeof config == "string"){
-            bc.text = config;
-        }else{
-            Ext.apply(bc, config);
-        }
-        var btn = new Ext.Button(bc);
-        btn.ownerCt = this;
-        if(!this.buttons){
-            this.buttons = [];
-        }
-        this.buttons.push(btn);
-        return btn;
-    },
-
-        addTool : function(){
-        if(!this[this.toolTarget]) {             return;
-        }
-        if(!this.toolTemplate){
-                        var tt = new Ext.Template(
-                 '<div class="x-tool x-tool-{id}">&#160;</div>'
-            );
-            tt.disableFormats = true;
-            tt.compile();
-            Ext.Panel.prototype.toolTemplate = tt;
-        }
-        for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-            var tc = a[i], overCls = 'x-tool-'+tc.id+'-over';
-            var t = this.toolTemplate.insertFirst(this[this.toolTarget], tc, true);
-            this.tools[tc.id] = t;
-            t.enableDisplayMode('block');
-            t.on('click', this.createToolHandler(t, tc, overCls, this));
-            if(tc.on){
-                t.on(tc.on);
-            }
-            if(tc.hidden){
-                t.hide();
-            }
-            if(tc.qtip){
-                if(typeof tc.qtip == 'object'){
-                    Ext.QuickTips.register(Ext.apply({
-                          target: t.id
-                    }, tc.qtip));
-                } else {
-                    t.dom.qtip = tc.qtip;
-                }
-            }
-            t.addClassOnOver(overCls);
-        }
-    },
-
-        onShow : function(){
-        if(this.floating){
-            return this.el.show();
-        }
-        Ext.Panel.superclass.onShow.call(this);
-    },
-
-        onHide : function(){
-        if(this.floating){
-            return this.el.hide();
-        }
-        Ext.Panel.superclass.onHide.call(this);
-    },
-
-        createToolHandler : function(t, tc, overCls, panel){
-        return function(e){
-            t.removeClass(overCls);
-            e.stopEvent();
-            if(tc.handler){
-                tc.handler.call(tc.scope || t, e, t, panel);
-            }
-        };
-    },
-
-        afterRender : function(){
-        if(this.fromMarkup && this.height === undefined && !this.autoHeight){
-            this.height = this.el.getHeight();
-        }
-        if(this.floating && !this.hidden && !this.initHidden){
-            this.el.show();
-        }
-        if(this.title){
-            this.setTitle(this.title);
-        }
-               this.setAutoScroll();
-        if(this.html){
-            this.body.update(typeof this.html == 'object' ?
-                             Ext.DomHelper.markup(this.html) :
-                             this.html);
-            delete this.html;
-        }
-        if(this.contentEl){
-            var ce = Ext.getDom(this.contentEl);
-            Ext.fly(ce).removeClass(['x-hidden', 'x-hide-display']);
-            this.body.dom.appendChild(ce);
-        }
-        if(this.collapsed){
-            this.collapsed = false;
-            this.collapse(false);
-        }
-        Ext.Panel.superclass.afterRender.call(this);         this.initEvents();
-    },
-    
-        setAutoScroll : function(){
-        if(this.rendered && this.autoScroll){
-                       this.body.setOverflow('auto');
-        }
-    },
-
-        getKeyMap : function(){
-        if(!this.keyMap){
-            this.keyMap = new Ext.KeyMap(this.el, this.keys);
-        }
-        return this.keyMap;
-    },
-
-        initEvents : function(){
-        if(this.keys){
-            this.getKeyMap();
-        }
-        if(this.draggable){
-            this.initDraggable();
-        }
-    },
-
-        initDraggable : function(){
-        this.dd = new Ext.Panel.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);
-    },
-
-        beforeEffect : function(){
-        if(this.floating){
-            this.el.beforeAction();
-        }
-        this.el.addClass('x-panel-animated');
-    },
-
-        afterEffect : function(){
-        this.syncShadow();
-        this.el.removeClass('x-panel-animated');
-    },
-
-        createEffect : function(a, cb, scope){
-        var o = {
-            scope:scope,
-            block:true
-        };
-        if(a === true){
-            o.callback = cb;
-            return o;
-        }else if(!a.callback){
-            o.callback = cb;
-        }else {             o.callback = function(){
-                cb.call(scope);
-                Ext.callback(a.callback, a.scope);
-            };
-        }
-        return Ext.applyIf(o, a);
-    },
-
-    
-    collapse : function(animate){
-        if(this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforecollapse', this, animate) === false){
-            return;
-        }
-        var doAnim = animate === true || (animate !== false && this.animCollapse);
-        this.beforeEffect();
-        this.onCollapse(doAnim, animate);
-        return this;
-    },
-
-        onCollapse : function(doAnim, animArg){
-        if(doAnim){
-            this[this.collapseEl].slideOut(this.slideAnchor,
-                    Ext.apply(this.createEffect(animArg||true, this.afterCollapse, this),
-                        this.collapseDefaults));
-        }else{
-            this[this.collapseEl].hide();
-            this.afterCollapse();
-        }
-    },
-
-        afterCollapse : function(){
-        this.collapsed = true;
-        this.el.addClass(this.collapsedCls);
-        this.afterEffect();
-        this.fireEvent('collapse', this);
-    },
-
-    
-    expand : function(animate){
-        if(!this.collapsed || this.el.hasFxBlock() || this.fireEvent('beforeexpand', this, animate) === false){
-            return;
-        }
-        var doAnim = animate === true || (animate !== false && this.animCollapse);
-        this.el.removeClass(this.collapsedCls);
-        this.beforeEffect();
-        this.onExpand(doAnim, animate);
-        return this;
-    },
-
-        onExpand : function(doAnim, animArg){
-        if(doAnim){
-            this[this.collapseEl].slideIn(this.slideAnchor,
-                    Ext.apply(this.createEffect(animArg||true, this.afterExpand, this),
-                        this.expandDefaults));
-        }else{
-            this[this.collapseEl].show();
-            this.afterExpand();
-        }
-    },
-
-        afterExpand : function(){
-        this.collapsed = false;
-        this.afterEffect();
-        this.fireEvent('expand', this);
-    },
-
-    
-    toggleCollapse : function(animate){
-        this[this.collapsed ? 'expand' : 'collapse'](animate);
-        return this;
-    },
-
-        onDisable : function(){
-        if(this.rendered && this.maskDisabled){
-            this.el.mask();
-        }
-        Ext.Panel.superclass.onDisable.call(this);
-    },
-
-        onEnable : function(){
-        if(this.rendered && this.maskDisabled){
-            this.el.unmask();
-        }
-        Ext.Panel.superclass.onEnable.call(this);
-    },
-
-        onResize : function(w, h){
-        if(w !== undefined || h !== undefined){
-            if(!this.collapsed){
-                if(typeof w == 'number'){
-                    this.body.setWidth(
-                            this.adjustBodyWidth(w - this.getFrameWidth()));
-                }else if(w == 'auto'){
-                    this.body.setWidth(w);
-                }
-
-                if(typeof h == 'number'){
-                    this.body.setHeight(
-                            this.adjustBodyHeight(h - this.getFrameHeight()));
-                }else if(h == 'auto'){
-                    this.body.setHeight(h);
-                }
-            }else{
-                this.queuedBodySize = {width: w, height: h};
-                if(!this.queuedExpand && this.allowQueuedExpand !== false){
-                    this.queuedExpand = true;
-                    this.on('expand', function(){
-                        delete this.queuedExpand;
-                        this.onResize(this.queuedBodySize.width, this.queuedBodySize.height);
-                        this.doLayout();
-                    }, this, {single:true});
-                }
-            }
-            this.fireEvent('bodyresize', this, w, h);
-        }
-        this.syncShadow();
-    },
-
-        adjustBodyHeight : function(h){
-        return h;
-    },
-
-        adjustBodyWidth : function(w){
-        return w;
-    },
-
-        onPosition : function(){
-        this.syncShadow();
-    },
-
-        onDestroy : function(){
-        if(this.tools){
-            for(var k in this.tools){
-                Ext.destroy(this.tools[k]);
-            }
-        }
-        if(this.buttons){
-            for(var b in this.buttons){
-                Ext.destroy(this.buttons[b]);
-            }
-        }
-        Ext.destroy(
-            this.topToolbar,
-            this.bottomToolbar
-        );
-        Ext.Panel.superclass.onDestroy.call(this);
-    },
-
-    
-    getFrameWidth : function(){
-        var w = this.el.getFrameWidth('lr');
-
-        if(this.frame){
-            var l = this.bwrap.dom.firstChild;
-            w += (Ext.fly(l).getFrameWidth('l') + Ext.fly(l.firstChild).getFrameWidth('r'));
-            var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
-            w += Ext.fly(mc).getFrameWidth('lr');
-        }
-        return w;
-    },
-
-    
-    getFrameHeight : function(){
-        var h  = this.el.getFrameWidth('tb');
-        h += (this.tbar ? this.tbar.getHeight() : 0) +
-             (this.bbar ? this.bbar.getHeight() : 0);
-
-        if(this.frame){
-            var hd = this.el.dom.firstChild;
-            var ft = this.bwrap.dom.lastChild;
-            h += (hd.offsetHeight + ft.offsetHeight);
-            var mc = this.bwrap.dom.firstChild.firstChild.firstChild;
-            h += Ext.fly(mc).getFrameWidth('tb');
-        }else{
-            h += (this.header ? this.header.getHeight() : 0) +
-                (this.footer ? this.footer.getHeight() : 0);
-        }
-        return h;
-    },
-
-    
-    getInnerWidth : function(){
-        return this.getSize().width - this.getFrameWidth();
-    },
-
-    
-    getInnerHeight : function(){
-        return this.getSize().height - this.getFrameHeight();
-    },
-
-        syncShadow : function(){
-        if(this.floating){
-            this.el.sync(true);
-        }
-    },
-
-        getLayoutTarget : function(){
-        return this.body;
-    },
-
-    
-    setTitle : function(title, iconCls){
-        this.title = title;
-        if(this.header && this.headerAsText){
-            this.header.child('span').update(title);
-        }
-        if(iconCls){
-            this.setIconClass(iconCls);
-        }
-        this.fireEvent('titlechange', this, title);
-        return this;
-    },
-
-    
-    getUpdater : function(){
-        return this.body.getUpdater();
-    },
-
-     
-    load : function(){
-        var um = this.body.getUpdater();
-        um.update.apply(um, arguments);
-        return this;
-    },
-
-        beforeDestroy : function(){
-        Ext.Element.uncache(
-            this.header,
-            this.tbar,
-            this.bbar,
-            this.footer,
-            this.body
-        );
-    },
-
-        createClasses : function(){
-        this.headerCls = this.baseCls + '-header';
-        this.headerTextCls = this.baseCls + '-header-text';
-        this.bwrapCls = this.baseCls + '-bwrap';
-        this.tbarCls = this.baseCls + '-tbar';
-        this.bodyCls = this.baseCls + '-body';
-        this.bbarCls = this.baseCls + '-bbar';
-        this.footerCls = this.baseCls + '-footer';
-    },
-
-        createGhost : function(cls, useShim, appendTo){
-        var el = document.createElement('div');
-        el.className = 'x-panel-ghost ' + (cls ? cls : '');
-        if(this.header){
-            el.appendChild(this.el.dom.firstChild.cloneNode(true));
-        }
-        Ext.fly(el.appendChild(document.createElement('ul'))).setHeight(this.bwrap.getHeight());
-        el.style.width = this.el.dom.offsetWidth + 'px';;
-        if(!appendTo){
-            this.container.dom.appendChild(el);
-        }else{
-            Ext.getDom(appendTo).appendChild(el);
-        }
-        if(useShim !== false && this.el.useShim !== false){
-            var layer = new Ext.Layer({shadow:false, useDisplay:true, constrain:false}, el);
-            layer.show();
-            return layer;
-        }else{
-            return new Ext.Element(el);
-        }
-    },
-
-        doAutoLoad : function(){
-        this.body.load(
-            typeof this.autoLoad == 'object' ?
-                this.autoLoad : {url: this.autoLoad});
-    }
-
-
-});
-Ext.reg('panel', Ext.Panel);
-
-
-Ext.Window = Ext.extend(Ext.Panel, {
-    
-    
-    
-    
-    
-    
-    
-    baseCls : 'x-window',
-    
-    resizable:true,
-    
-    draggable:true,
-    
-    closable : true,
-    
-    constrain:false,
-    
-    constrainHeader:false,
-    
-    plain:false,
-    
-    minimizable : false,
-    
-    maximizable : false,
-    
-    minHeight: 100,
-    
-    minWidth: 200,
-    
-    expandOnShow: true,
-    
-    closeAction: 'close',
-
-        collapsible:false,
-
-        initHidden : true,
-    
-    monitorResize : true,
-
-                    
-    elements: 'header,body',
-    
-    frame:true,
-    
-    floating:true,
-
-        initComponent : function(){
-        Ext.Window.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            
-            
-            'resize',
-            
-            'maximize',
-            
-            'minimize',
-            
-            'restore'
-        );
-    },
-
-        getState : function(){
-        return Ext.apply(Ext.Window.superclass.getState.call(this) || {}, this.getBox());
-    },
-
-        onRender : function(ct, position){
-        Ext.Window.superclass.onRender.call(this, ct, position);
-
-        if(this.plain){
-            this.el.addClass('x-window-plain');
-        }
-
-                this.focusEl = this.el.createChild({
-                    tag: "a", href:"#", cls:"x-dlg-focus",
-                    tabIndex:"-1", html: "&#160;"});
-        this.focusEl.swallowEvent('click', true);
-
-        this.proxy = this.el.createProxy("x-window-proxy");
-        this.proxy.enableDisplayMode('block');
-
-        if(this.modal){
-            this.mask = this.container.createChild({cls:"ext-el-mask"}, this.el.dom);
-            this.mask.enableDisplayMode("block");
-            this.mask.hide();
-        }
-    },
-
-        initEvents : function(){
-        Ext.Window.superclass.initEvents.call(this);
-        if(this.animateTarget){
-            this.setAnimateTarget(this.animateTarget);
-        }
-
-        if(this.resizable){
-            this.resizer = new Ext.Resizable(this.el, {
-                minWidth: this.minWidth,
-                minHeight:this.minHeight,
-                handles: this.resizeHandles || "all",
-                pinned: true,
-                resizeElement : this.resizerAction
-            });
-            this.resizer.window = this;
-            this.resizer.on("beforeresize", this.beforeResize, this);
-        }
-
-        if(this.draggable){
-            this.header.addClass("x-window-draggable");
-        }
-        this.initTools();
-
-        this.el.on("mousedown", this.toFront, this);
-        this.manager = this.manager || Ext.WindowMgr;
-        this.manager.register(this);
-        this.hidden = true;
-        if(this.maximized){
-            this.maximized = false;
-            this.maximize();
-        }
-        if(this.closable){
-            var km = this.getKeyMap();
-            km.on(27, this.onEsc, this);
-            km.disable();
-        }
-    },
-
-    initDraggable : function(){
-        this.dd = new Ext.Window.DD(this);  
-    },
-
-       onEsc : function(){
-        this[this.closeAction]();  
-    },
-
-        beforeDestroy : function(){
-        Ext.destroy(
-            this.resizer,
-            this.dd,
-            this.proxy,
-            this.mask
-        );
-        Ext.Window.superclass.beforeDestroy.call(this);
-    },
-    
-        onDestroy : function(){
-        if(this.manager){
-            this.manager.unregister(this);
-        }
-        Ext.Window.superclass.onDestroy.call(this);
-    },
-
-        initTools : function(){
-        if(this.minimizable){
-            this.addTool({
-                id: 'minimize',
-                handler: this.minimize.createDelegate(this, [])
-            });
-        }
-        if(this.maximizable){
-            this.addTool({
-                id: 'maximize',
-                handler: this.maximize.createDelegate(this, [])
-            });
-            this.addTool({
-                id: 'restore',
-                handler: this.restore.createDelegate(this, []),
-                hidden:true
-            });
-            this.header.on('dblclick', this.toggleMaximize, this);
-        }
-        if(this.closable){
-            this.addTool({
-                id: 'close',
-                handler: this[this.closeAction].createDelegate(this, [])
-            });
-        }
-    },
-
-        resizerAction : function(){
-        var box = this.proxy.getBox();
-        this.proxy.hide();
-        this.window.handleResize(box);
-        return box;
-    },
-
-        beforeResize : function(){
-        this.resizer.minHeight = Math.max(this.minHeight, this.getFrameHeight() + 40);         this.resizer.minWidth = Math.max(this.minWidth, this.getFrameWidth() + 40);
-        this.resizeBox = this.el.getBox();
-    },
-
-        updateHandles : function(){
-        if(Ext.isIE && this.resizer){
-            this.resizer.syncHandleHeight();
-            this.el.repaint();
-        }
-    },
-
-        handleResize : function(box){
-        var rz = this.resizeBox;
-        if(rz.x != box.x || rz.y != box.y){
-            this.updateBox(box);
-        }else{
-            this.setSize(box);
-        }
-        this.focus();
-        this.updateHandles();
-        this.saveState();
-        this.fireEvent("resize", this, box.width, box.height);
-    },
-
-    
-    focus : function(){
-        var f = this.focusEl, db = this.defaultButton, t = typeof db;
-        if(t != 'undefined'){
-            if(t == 'number'){
-                f = this.buttons[db];
-            }else if(t == 'string'){
-                f = Ext.getCmp(db);
-            }else{
-                f = db;
-            }
-        }
-        f.focus.defer(10, f);
-    },
-
-    
-    setAnimateTarget : function(el){
-        el = Ext.get(el);
-        this.animateTarget = el;
-    },
-
-        beforeShow : function(){
-        delete this.el.lastXY;
-        delete this.el.lastLT;
-        if(this.x === undefined || this.y === undefined){
-            var xy = this.el.getAlignToXY(this.container, 'c-c');
-            var pos = this.el.translatePoints(xy[0], xy[1]);
-            this.x = this.x === undefined? pos.left : this.x;
-            this.y = this.y === undefined? pos.top : this.y;
-        }
-        this.el.setLeftTop(this.x, this.y);
-
-        if(this.expandOnShow){
-            this.expand(false);
-        }
-
-        if(this.modal){
-            Ext.getBody().addClass("x-body-masked");
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-            this.mask.show();
-        }
-    },
-
-    
-    show : function(animateTarget, cb, scope){
-        if(!this.rendered){
-            this.render(Ext.getBody());
-        }
-        if(this.hidden === false){
-            this.toFront();
-            return;
-        }
-        if(this.fireEvent("beforeshow", this) === false){
-            return;
-        }
-        if(cb){
-            this.on('show', cb, scope, {single:true});
-        }
-        this.hidden = false;
-        if(animateTarget !== undefined){
-            this.setAnimateTarget(animateTarget);
-        }
-        this.beforeShow();
-        if(this.animateTarget){
-            this.animShow();
-        }else{
-            this.afterShow();
-        }
-    },
-
-        afterShow : function(){
-        this.proxy.hide();
-        this.el.setStyle('display', 'block');
-        this.el.show();
-        if(this.maximized){
-            this.fitContainer();
-        }
-        if(Ext.isMac && Ext.isGecko){          this.cascade(this.setAutoScroll);
-        }
-
-        if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
-            Ext.EventManager.onWindowResize(this.onWindowResize, this);
-        }
-        this.doConstrain();
-        if(this.layout){
-            this.doLayout();
-        }
-        if(this.keyMap){
-            this.keyMap.enable();
-        }
-        this.toFront();
-        this.updateHandles();
-        this.fireEvent("show", this);
-    },
-
-        animShow : function(){
-        this.proxy.show();
-        this.proxy.setBox(this.animateTarget.getBox());
-        this.proxy.setOpacity(0);
-        var b = this.getBox(false);
-        b.callback = this.afterShow;
-        b.scope = this;
-        b.duration = .25;
-        b.easing = 'easeNone';
-        b.opacity = .5;
-        b.block = true;
-        this.el.setStyle('display', 'none');
-        this.proxy.shift(b);
-    },
-
-    
-    hide : function(animateTarget, cb, scope){
-        if(this.hidden || this.fireEvent("beforehide", this) === false){
-            return;
-        }
-        if(cb){
-            this.on('hide', cb, scope, {single:true});
-        }
-        this.hidden = true;
-        if(animateTarget !== undefined){
-            this.setAnimateTarget(animateTarget);
-        }
-        if(this.animateTarget){
-            this.animHide();
-        }else{
-            this.el.hide();
-            this.afterHide();
-        }
-    },
-
-        afterHide : function(){
-        this.proxy.hide();
-        if(this.monitorResize || this.modal || this.constrain || this.constrainHeader){
-            Ext.EventManager.removeResizeListener(this.onWindowResize, this);
-        }
-        if(this.modal){
-            this.mask.hide();
-            Ext.getBody().removeClass("x-body-masked");
-        }
-        if(this.keyMap){
-            this.keyMap.disable();
-        }
-        this.fireEvent("hide", this);
-    },
-
-        animHide : function(){
-        this.proxy.setOpacity(.5);
-        this.proxy.show();
-        var tb = this.getBox(false);
-        this.proxy.setBox(tb);
-        this.el.hide();
-        var b = this.animateTarget.getBox();
-        b.callback = this.afterHide;
-        b.scope = this;
-        b.duration = .25;
-        b.easing = 'easeNone';
-        b.block = true;
-        b.opacity = 0;
-        this.proxy.shift(b);
-    },
-
-        onWindowResize : function(){
-        if(this.maximized){
-            this.fitContainer();
-        }
-        if(this.modal){
-            this.mask.setSize('100%', '100%');
-            var force = this.mask.dom.offsetHeight;
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-        }
-        this.doConstrain();
-    },
-
-        doConstrain : function(){
-        if(this.constrain || this.constrainHeader){
-            var offsets;
-            if(this.constrain){
-                offsets = {
-                    right:this.el.shadowOffset,
-                    left:this.el.shadowOffset,
-                    bottom:this.el.shadowOffset
-                };
-            }else {
-                var s = this.getSize();
-                offsets = {
-                    right:-(s.width - 100),
-                    bottom:-(s.height - 25)
-                };
-            }
-
-            var xy = this.el.getConstrainToXY(this.container, true, offsets);
-            if(xy){
-                this.setPosition(xy[0], xy[1]);
-            }
-        }
-    },
-
-        ghost : function(cls){
-        var ghost = this.createGhost(cls);
-        var box = this.getBox(true);
-        ghost.setLeftTop(box.x, box.y);
-        ghost.setWidth(box.width);
-        this.el.hide();
-        this.activeGhost = ghost;
-        return ghost;
-    },
-
-        unghost : function(show, matchPosition){
-        if(show !== false){
-            this.el.show();
-            this.focus();
-               if(Ext.isMac && Ext.isGecko){                   this.cascade(this.setAutoScroll);
-               }
-        }
-        if(matchPosition !== false){
-            this.setPosition(this.activeGhost.getLeft(true), this.activeGhost.getTop(true));
-        }
-        this.activeGhost.hide();
-        this.activeGhost.remove();
-        delete this.activeGhost;
-    },
-
-    
-    minimize : function(){
-        this.fireEvent('minimize', this);
-    },
-
-    
-    close : function(){
-        if(this.fireEvent("beforeclose", this) !== false){
-            this.hide(null, function(){
-                this.fireEvent('close', this);
-                this.destroy();
-            }, this);
-        }
-    },
-
-    
-    maximize : function(){
-        if(!this.maximized){
-            this.expand(false);
-            this.restoreSize = this.getSize();
-            this.restorePos = this.getPosition(true);
-            this.tools.maximize.hide();
-            this.tools.restore.show();
-            this.maximized = true;
-            this.el.disableShadow();
-
-            if(this.dd){
-                this.dd.lock();
-            }
-            if(this.collapsible){
-                this.tools.toggle.hide();
-            }
-            this.el.addClass('x-window-maximized');
-            this.container.addClass('x-window-maximized-ct');
-
-            this.setPosition(0, 0);
-            this.fitContainer();
-            this.fireEvent('maximize', this);
-        }
-    },
-
-    
-    restore : function(){
-        if(this.maximized){
-            this.el.removeClass('x-window-maximized');
-            this.tools.restore.hide();
-            this.tools.maximize.show();
-            this.setPosition(this.restorePos[0], this.restorePos[1]);
-            this.setSize(this.restoreSize.width, this.restoreSize.height);
-            delete this.restorePos;
-            delete this.restoreSize;
-            this.maximized = false;
-            this.el.enableShadow(true);
-
-            if(this.dd){
-                this.dd.unlock();
-            }
-            if(this.collapsible){
-                this.tools.toggle.show();
-            }
-            this.container.removeClass('x-window-maximized-ct');
-
-            this.doConstrain();
-            this.fireEvent('restore', this);
-        }
-    },
-
-    
-    toggleMaximize : function(){
-        this[this.maximized ? 'restore' : 'maximize']();
-    },
-
-        fitContainer : function(){
-        var vs = this.container.getViewSize();
-        this.setSize(vs.width, vs.height);
-    },
-
-            setZIndex : function(index){
-        if(this.modal){
-            this.mask.setStyle("z-index", index);
-        }
-        this.el.setZIndex(++index);
-        index += 5;
-
-        if(this.resizer){
-            this.resizer.proxy.setStyle("z-index", ++index);
-        }
-
-        this.lastZIndex = index;
-    },
-
-    
-    alignTo : function(element, position, offsets){
-        var xy = this.el.getAlignToXY(element, position, offsets);
-        this.setPagePosition(xy[0], xy[1]);
-        return this;
-    },
-
-    
-    anchorTo : function(el, alignment, offsets, monitorScroll, _pname){
-        var action = function(){
-            this.alignTo(el, alignment, offsets);
-        };
-        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);
-        this[_pname] = action;
-        return this;
-    },
-
-    
-    toFront : function(){
-        if(this.manager.bringToFront(this)){
-            this.focus();
-        }
-        return this;
-    },
-
-    
-    setActive : function(active){
-        if(active){
-            if(!this.maximized){
-                this.el.enableShadow(true);
-            }
-            this.fireEvent('activate', this);
-        }else{
-            this.el.disableShadow();
-            this.fireEvent('deactivate', this);
-        }
-    },
-
-    
-    toBack : function(){
-        this.manager.sendToBack(this);
-        return this;
-    },
-
-    
-    center : function(){
-        var xy = this.el.getAlignToXY(this.container, 'c-c');
-        this.setPagePosition(xy[0], xy[1]);
-        return this;
-    }
-});
-Ext.reg('window', Ext.Window);
-
-Ext.Window.DD = function(win){
-    this.win = win;
-    Ext.Window.DD.superclass.constructor.call(this, win.el.id, 'WindowDD-'+win.id);
-    this.setHandleElId(win.header.id);
-    this.scroll = false;
-};
-
-Ext.extend(Ext.Window.DD, Ext.dd.DD, {
-    moveOnly:true,
-    headerOffsets:[100, 25],
-    startDrag : function(){
-        var w = this.win;
-        this.proxy = w.ghost();
-        if(w.constrain !== false){
-            var so = w.el.shadowOffset;
-            this.constrainTo(w.container, {right: so, left: so, bottom: so});
-        }else if(w.constrainHeader !== false){
-            var s = this.proxy.getSize();
-            this.constrainTo(w.container, {right: -(s.width-this.headerOffsets[0]), bottom: -(s.height-this.headerOffsets[1])});
-        }
-    },
-    b4Drag : Ext.emptyFn,
-
-    onDrag : function(e){
-        this.alignElWithMouse(this.proxy, e.getPageX(), e.getPageY());
-    },
-
-    endDrag : function(e){
-        this.win.unghost();
-        this.win.saveState();
-    }
-});
-
-Ext.WindowGroup = function(){
-    var list = {};
-    var accessList = [];
-    var front = null;
-
-        var sortWindows = function(d1, d2){
-        return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
-    };
-
-        var orderWindows = function(){
-        var a = accessList, len = a.length;
-        if(len > 0){
-            a.sort(sortWindows);
-            var seed = a[0].manager.zseed;
-            for(var i = 0; i < len; i++){
-                var win = a[i];
-                if(win && !win.hidden){
-                    win.setZIndex(seed + (i*10));
-                }
-            }
-        }
-        activateLast();
-    };
-
-        var setActiveWin = function(win){
-        if(win != front){
-            if(front){
-                front.setActive(false);
-            }
-            front = win;
-            if(win){
-                win.setActive(true);
-            }
-        }
-    };
-
-        var activateLast = function(){
-        for(var i = accessList.length-1; i >=0; --i) {
-            if(!accessList[i].hidden){
-                setActiveWin(accessList[i]);
-                return;
-            }
-        }
-                setActiveWin(null);
-    };
-
-    return {
-        
-        zseed : 9000,
-
-                register : function(win){
-            list[win.id] = win;
-            accessList.push(win);
-            win.on('hide', activateLast);
-        },
-
-                unregister : function(win){
-            delete list[win.id];
-            win.un('hide', activateLast);
-            accessList.remove(win);
-        },
-
-        
-        get : function(id){
-            return typeof id == "object" ? id : list[id];
-        },
-
-        
-        bringToFront : function(win){
-            win = this.get(win);
-            if(win != front){
-                win._lastAccess = new Date().getTime();
-                orderWindows();
-                return true;
-            }
-            return false;
-        },
-
-        
-        sendToBack : function(win){
-            win = this.get(win);
-            win._lastAccess = -(new Date().getTime());
-            orderWindows();
-            return win;
-        },
-
-        
-        hideAll : function(){
-            for(var id in list){
-                if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
-                    list[id].hide();
-                }
-            }
-        },
-
-        
-        getActive : function(){
-            return front;
-        },
-
-        
-        getBy : function(fn, scope){
-            var r = [];
-            for(var i = accessList.length-1; i >=0; --i) {
-                var win = accessList[i];
-                if(fn.call(scope||win, win) !== false){
-                    r.push(win);
-                }
-            }
-            return r;
-        },
-
-        
-        each : function(fn, scope){
-            for(var id in list){
-                if(list[id] && typeof list[id] != "function"){
-                    if(fn.call(scope || list[id], list[id]) === false){
-                        return;
-                    }
-                }
-            }
-        }
-    };
-};
-
-
-
-Ext.WindowMgr = new Ext.WindowGroup();
-\r
-Ext.dd.PanelProxy = function(panel, config){\r
-    this.panel = panel;\r
-    this.id = this.panel.id +'-ddproxy';\r
-    Ext.apply(this, config);\r
-};\r
-\r
-Ext.dd.PanelProxy.prototype = {\r
-    \r
-    insertProxy : true,\r
-\r
-    
-    setStatus : Ext.emptyFn,\r
-    reset : Ext.emptyFn,\r
-    update : Ext.emptyFn,\r
-    stop : Ext.emptyFn,\r
-    sync: Ext.emptyFn,\r
-\r
-    \r
-    getEl : function(){\r
-        return this.ghost;\r
-    },\r
-\r
-    \r
-    getGhost : function(){\r
-        return this.ghost;\r
-    },\r
-\r
-    \r
-    getProxy : function(){\r
-        return this.proxy;\r
-    },\r
-\r
-    \r
-    hide : function(){\r
-        if(this.ghost){\r
-            if(this.proxy){\r
-                this.proxy.remove();\r
-                delete this.proxy;\r
-            }\r
-            this.panel.el.dom.style.display = '';\r
-            this.ghost.remove();\r
-            delete this.ghost;\r
-        }\r
-    },\r
-\r
-    \r
-    show : function(){\r
-        if(!this.ghost){\r
-            this.ghost = this.panel.createGhost(undefined, undefined, Ext.getBody());\r
-            this.ghost.setXY(this.panel.el.getXY())\r
-            if(this.insertProxy){\r
-                this.proxy = this.panel.el.insertSibling({cls:'x-panel-dd-spacer'});\r
-                this.proxy.setSize(this.panel.getSize());\r
-            }\r
-            this.panel.el.dom.style.display = 'none';\r
-        }\r
-    },\r
-\r
-    
-    repair : function(xy, callback, scope){\r
-        this.hide();\r
-        if(typeof callback == "function"){\r
-            callback.call(scope || this);\r
-        }\r
-    },\r
-\r
-    \r
-    moveProxy : function(parentNode, before){\r
-        if(this.proxy){\r
-            parentNode.insertBefore(this.proxy.dom, before);\r
-        }\r
-    }\r
-};\r
-\r
-
-Ext.Panel.DD = function(panel, cfg){\r
-    this.panel = panel;\r
-    this.dragData = {panel: panel};\r
-    this.proxy = new Ext.dd.PanelProxy(panel, cfg);\r
-    Ext.Panel.DD.superclass.constructor.call(this, panel.el, cfg);\r
-    this.setHandleElId(panel.header.id);\r
-    panel.header.setStyle('cursor', 'move');\r
-    this.scroll = false;\r
-};\r
-\r
-Ext.extend(Ext.Panel.DD, Ext.dd.DragSource, {\r
-    showFrame: Ext.emptyFn,\r
-    startDrag: Ext.emptyFn,\r
-    b4StartDrag: function(x, y) {\r
-        this.proxy.show();\r
-    },\r
-    b4MouseDown: function(e) {\r
-        var x = e.getPageX();\r
-        var y = e.getPageY();\r
-        this.autoOffset(x, y);\r
-    },\r
-    onInitDrag : function(x, y){\r
-        this.onStartDrag(x, y);\r
-        return true;\r
-    },\r
-    createFrame : Ext.emptyFn,\r
-    getDragEl : function(e){\r
-        return this.proxy.ghost.dom;\r
-    },\r
-    endDrag : function(e){\r
-        this.proxy.hide();\r
-        this.panel.saveState();\r
-    },\r
-\r
-    autoOffset : function(x, y) {\r
-        x -= this.startPageX;\r
-        y -= this.startPageY;\r
-        this.setDelta(x, y);\r
-    }\r
-});
-\r
-Ext.state.Provider = function(){\r
-    \r
-    this.addEvents("statechange");\r
-    this.state = {};\r
-    Ext.state.Provider.superclass.constructor.call(this);\r
-};\r
-Ext.extend(Ext.state.Provider, Ext.util.Observable, {\r
-    \r
-    get : function(name, defaultValue){\r
-        return typeof this.state[name] == "undefined" ?\r
-            defaultValue : this.state[name];\r
-    },\r
-    \r
-    \r
-    clear : function(name){\r
-        delete this.state[name];\r
-        this.fireEvent("statechange", this, name, null);\r
-    },\r
-    \r
-    \r
-    set : function(name, value){\r
-        this.state[name] = value;\r
-        
-        this.fireEvent("statechange", this, name, value);\r
-    },\r
-    \r
-    \r
-    decodeValue : function(cookie){\r
-        var re = /^(a|n|d|b|s|o)\:(.*)$/;\r
-        var matches = re.exec(unescape(cookie));\r
-        if(!matches || !matches[1]) return; 
-        var type = matches[1];\r
-        var v = matches[2];\r
-        switch(type){\r
-            case "n":\r
-                return parseFloat(v);\r
-            case "d":\r
-                return new Date(Date.parse(v));\r
-            case "b":\r
-                return (v == "1");\r
-            case "a":\r
-                var all = [];\r
-                var values = v.split("^");\r
-                for(var i = 0, len = values.length; i < len; i++){\r
-                    all.push(this.decodeValue(values[i]));\r
-                }\r
-                return all;\r
-           case "o":\r
-                var all = {};\r
-                var values = v.split("^");\r
-                for(var i = 0, len = values.length; i < len; i++){\r
-                    var kv = values[i].split("=");\r
-                    all[kv[0]] = this.decodeValue(kv[1]);\r
-                }\r
-                return all;\r
-           default:\r
-                return v;\r
-        }\r
-    },\r
-    \r
-    \r
-    encodeValue : function(v){\r
-        var enc;\r
-        if(typeof v == "number"){\r
-            enc = "n:" + v;\r
-        }else if(typeof v == "boolean"){\r
-            enc = "b:" + (v ? "1" : "0");\r
-        }else if(Ext.isDate(v)){\r
-            enc = "d:" + v.toGMTString();\r
-        }else if(Ext.isArray(v)){\r
-            var flat = "";\r
-            for(var i = 0, len = v.length; i < len; i++){\r
-                flat += this.encodeValue(v[i]);\r
-                if(i != len-1) flat += "^";\r
-            }\r
-            enc = "a:" + flat;\r
-        }else if(typeof v == "object"){\r
-            var flat = "";\r
-            for(var key in v){\r
-                if(typeof v[key] != "function" && v[key] !== undefined){\r
-                    flat += key + "=" + this.encodeValue(v[key]) + "^";\r
-                }\r
-            }\r
-            enc = "o:" + flat.substring(0, flat.length-1);\r
-        }else{\r
-            enc = "s:" + v;\r
-        }\r
-        return escape(enc);        \r
-    }\r
-});\r
-
-\r
-Ext.state.Manager = function(){\r
-    var provider = new Ext.state.Provider();\r
-\r
-    return {\r
-        \r
-        setProvider : function(stateProvider){\r
-            provider = stateProvider;\r
-        },\r
-\r
-        \r
-        get : function(key, defaultValue){\r
-            return provider.get(key, defaultValue);\r
-        },\r
-\r
-        \r
-         set : function(key, value){\r
-            provider.set(key, value);\r
-        },\r
-\r
-        \r
-        clear : function(key){\r
-            provider.clear(key);\r
-        },\r
-\r
-        \r
-        getProvider : function(){\r
-            return provider;\r
-        }\r
-    };\r
-}();
-\r
-\r
-Ext.state.CookieProvider = function(config){\r
-    Ext.state.CookieProvider.superclass.constructor.call(this);\r
-    this.path = "/";\r
-    this.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); 
-    this.domain = null;\r
-    this.secure = false;\r
-    Ext.apply(this, config);\r
-    this.state = this.readCookies();\r
-};\r
-\r
-Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {\r
-    
-    set : function(name, value){\r
-        if(typeof value == "undefined" || value === null){\r
-            this.clear(name);\r
-            return;\r
-        }\r
-        this.setCookie(name, value);\r
-        Ext.state.CookieProvider.superclass.set.call(this, name, value);\r
-    },\r
-\r
-    
-    clear : function(name){\r
-        this.clearCookie(name);\r
-        Ext.state.CookieProvider.superclass.clear.call(this, name);\r
-    },\r
-\r
-    
-    readCookies : function(){\r
-        var cookies = {};\r
-        var c = document.cookie + ";";\r
-        var re = /\s?(.*?)=(.*?);/g;\r
-       var matches;\r
-       while((matches = re.exec(c)) != null){\r
-            var name = matches[1];\r
-            var value = matches[2];\r
-            if(name && name.substring(0,3) == "ys-"){\r
-                cookies[name.substr(3)] = this.decodeValue(value);\r
-            }\r
-        }\r
-        return cookies;\r
-    },\r
-\r
-    
-    setCookie : function(name, value){\r
-        document.cookie = "ys-"+ name + "=" + this.encodeValue(value) +\r
-           ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +\r
-           ((this.path == null) ? "" : ("; path=" + this.path)) +\r
-           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +\r
-           ((this.secure == true) ? "; secure" : "");\r
-    },\r
-\r
-    
-    clearCookie : function(name){\r
-        document.cookie = "ys-" + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +\r
-           ((this.path == null) ? "" : ("; path=" + this.path)) +\r
-           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +\r
-           ((this.secure == true) ? "; secure" : "");\r
-    }\r
-});
-\r
-Ext.DataView = Ext.extend(Ext.BoxComponent, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    selectedClass : "x-view-selected",\r
-    \r
-    emptyText : "",\r
-\r
-    
-    last: false,\r
-\r
-    
-    initComponent : function(){\r
-        Ext.DataView.superclass.initComponent.call(this);\r
-        if(typeof this.tpl == "string"){\r
-            this.tpl = new Ext.XTemplate(this.tpl);\r
-        }\r
-\r
-        this.addEvents(\r
-            \r
-            "beforeclick",\r
-            \r
-            "click",\r
-            \r
-            "containerclick",\r
-            \r
-            "dblclick",\r
-            \r
-            "contextmenu",\r
-            \r
-            "selectionchange",\r
-\r
-            \r
-            "beforeselect"\r
-        );\r
-\r
-        this.all = new Ext.CompositeElementLite();\r
-        this.selected = new Ext.CompositeElementLite();\r
-    },\r
-\r
-    
-    onRender : function(){\r
-        if(!this.el){\r
-            this.el = document.createElement('div');\r
-        }\r
-        Ext.DataView.superclass.onRender.apply(this, arguments);\r
-    },\r
-\r
-    
-    afterRender : function(){\r
-        Ext.DataView.superclass.afterRender.call(this);\r
-\r
-        this.el.on({\r
-            "click": this.onClick,\r
-            "dblclick": this.onDblClick,\r
-            "contextmenu": this.onContextMenu,\r
-            scope:this\r
-        });\r
-\r
-        if(this.overClass){\r
-            this.el.on({\r
-                "mouseover": this.onMouseOver,\r
-                "mouseout": this.onMouseOut,\r
-                scope:this\r
-            });\r
-        }\r
-\r
-        if(this.store){\r
-            this.setStore(this.store, true);\r
-        }\r
-    },\r
-\r
-    \r
-    refresh : function(){\r
-        this.clearSelections(false, true);\r
-        this.el.update("");\r
-        var html = [];\r
-        var records = this.store.getRange();\r
-        if(records.length < 1){\r
-            this.el.update(this.emptyText);\r
-            this.all.clear();\r
-            return;\r
-        }\r
-        this.tpl.overwrite(this.el, this.collectData(records, 0));\r
-        this.all.fill(Ext.query(this.itemSelector, this.el.dom));\r
-        this.updateIndexes(0);\r
-    },\r
-\r
-    \r
-    prepareData : function(data){\r
-        return data;\r
-    },\r
-\r
-    
-    collectData : function(records, startIndex){\r
-        var r = [];\r
-        for(var i = 0, len = records.length; i < len; i++){\r
-            r[r.length] = this.prepareData(records[i].data, startIndex+i, records[i]);\r
-        }\r
-        return r;\r
-    },\r
-\r
-    
-    bufferRender : function(records){\r
-        var div = document.createElement('div');\r
-        this.tpl.overwrite(div, this.collectData(records));\r
-        return Ext.query(this.itemSelector, div);\r
-    },\r
-\r
-    
-    onUpdate : function(ds, record){\r
-        var index = this.store.indexOf(record);\r
-        var sel = this.isSelected(index);\r
-        var original = this.all.elements[index];\r
-        var node = this.bufferRender([record], index)[0];\r
-\r
-        this.all.replaceElement(index, node, true);\r
-        if(sel){\r
-            this.selected.replaceElement(original, node);\r
-            this.all.item(index).addClass(this.selectedClass);\r
-        }\r
-        this.updateIndexes(index, index);\r
-    },\r
-\r
-    
-    onAdd : function(ds, records, index){\r
-        if(this.all.getCount() == 0){\r
-            this.refresh();\r
-            return;\r
-        }\r
-        var nodes = this.bufferRender(records, index), n;\r
-        if(index < this.all.getCount()){\r
-            n = this.all.item(index).insertSibling(nodes, 'before', true);\r
-            this.all.elements.splice(index, 0, n);\r
-        }else{\r
-            n = this.all.last().insertSibling(nodes, 'after', true);\r
-            this.all.elements.push(n);\r
-        }\r
-        this.updateIndexes(index);\r
-    },\r
-\r
-    
-    onRemove : function(ds, record, index){\r
-        this.deselect(index);\r
-        this.all.removeElement(index, true);\r
-        this.updateIndexes(index);\r
-    },\r
-\r
-    \r
-    refreshNode : function(index){\r
-        this.onUpdate(this.store, this.store.getAt(index));\r
-    },\r
-\r
-    
-    updateIndexes : function(startIndex, endIndex){\r
-        var ns = this.all.elements;\r
-        startIndex = startIndex || 0;\r
-        endIndex = endIndex || ((endIndex === 0) ? 0 : (ns.length - 1));\r
-        for(var i = startIndex; i <= endIndex; i++){\r
-            ns[i].viewIndex = i;\r
-        }\r
-    },\r
-\r
-    \r
-    setStore : function(store, initial){\r
-        if(!initial && this.store){\r
-            this.store.un("beforeload", this.onBeforeLoad, this);\r
-            this.store.un("datachanged", this.refresh, this);\r
-            this.store.un("add", this.onAdd, this);\r
-            this.store.un("remove", this.onRemove, this);\r
-            this.store.un("update", this.onUpdate, this);\r
-            this.store.un("clear", this.refresh, this);\r
-        }\r
-        if(store){\r
-            store = Ext.StoreMgr.lookup(store);\r
-            store.on("beforeload", this.onBeforeLoad, this);\r
-            store.on("datachanged", this.refresh, this);\r
-            store.on("add", this.onAdd, this);\r
-            store.on("remove", this.onRemove, this);\r
-            store.on("update", this.onUpdate, this);\r
-            store.on("clear", this.refresh, this);\r
-        }\r
-        this.store = store;\r
-        if(store){\r
-            this.refresh();\r
-        }\r
-    },\r
-\r
-    \r
-    findItemFromChild : function(node){\r
-        return Ext.fly(node).findParent(this.itemSelector, this.el);\r
-    },\r
-\r
-    
-    onClick : function(e){\r
-        var item = e.getTarget(this.itemSelector, this.el);\r
-        if(item){\r
-            var index = this.indexOf(item);\r
-            if(this.onItemClick(item, index, e) !== false){\r
-                this.fireEvent("click", this, index, item, e);\r
-            }\r
-        }else{\r
-            if(this.fireEvent("containerclick", this, e) !== false){\r
-                this.clearSelections();\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onContextMenu : function(e){\r
-        var item = e.getTarget(this.itemSelector, this.el);\r
-        if(item){\r
-            this.fireEvent("contextmenu", this, this.indexOf(item), item, e);\r
-        }\r
-    },\r
-\r
-    
-    onDblClick : function(e){\r
-        var item = e.getTarget(this.itemSelector, this.el);\r
-        if(item){\r
-            this.fireEvent("dblclick", this, this.indexOf(item), item, e);\r
-        }\r
-    },\r
-\r
-    
-    onMouseOver : function(e){\r
-        var item = e.getTarget(this.itemSelector, this.el);\r
-        if(item && item !== this.lastItem){\r
-            this.lastItem = item;\r
-            Ext.fly(item).addClass(this.overClass);\r
-        }\r
-    },\r
-\r
-    
-    onMouseOut : function(e){\r
-        if(this.lastItem){\r
-            if(!e.within(this.lastItem, true)){\r
-                Ext.fly(this.lastItem).removeClass(this.overClass);\r
-                delete this.lastItem;\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onItemClick : function(item, index, e){\r
-        if(this.fireEvent("beforeclick", this, index, item, e) === false){\r
-            return false;\r
-        }\r
-        if(this.multiSelect){\r
-            this.doMultiSelection(item, index, e);\r
-            e.preventDefault();\r
-        }else if(this.singleSelect){\r
-            this.doSingleSelection(item, index, e);\r
-            e.preventDefault();\r
-        }\r
-        return true;\r
-    },\r
-\r
-    
-    doSingleSelection : function(item, index, e){\r
-        if(e.ctrlKey && this.isSelected(index)){\r
-            this.deselect(index);\r
-        }else{\r
-            this.select(index, false);\r
-        }\r
-    },\r
-\r
-    
-    doMultiSelection : function(item, index, e){\r
-        if(e.shiftKey && this.last !== false){\r
-            var last = this.last;\r
-            this.selectRange(last, index, e.ctrlKey);\r
-            this.last = last; 
-        }else{\r
-            if((e.ctrlKey||this.simpleSelect) && this.isSelected(index)){\r
-                this.deselect(index);\r
-            }else{\r
-                this.select(index, e.ctrlKey || e.shiftKey || this.simpleSelect);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getSelectionCount : function(){\r
-        return this.selected.getCount()\r
-    },\r
-\r
-    \r
-    getSelectedNodes : function(){\r
-        return this.selected.elements;\r
-    },\r
-\r
-    \r
-    getSelectedIndexes : function(){\r
-        var indexes = [], s = this.selected.elements;\r
-        for(var i = 0, len = s.length; i < len; i++){\r
-            indexes.push(s[i].viewIndex);\r
-        }\r
-        return indexes;\r
-    },\r
-\r
-    \r
-    getSelectedRecords : function(){\r
-        var r = [], s = this.selected.elements;\r
-        for(var i = 0, len = s.length; i < len; i++){\r
-            r[r.length] = this.store.getAt(s[i].viewIndex);\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    getRecords : function(nodes){\r
-        var r = [], s = nodes;\r
-        for(var i = 0, len = s.length; i < len; i++){\r
-            r[r.length] = this.store.getAt(s[i].viewIndex);\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    getRecord : function(node){\r
-        return this.store.getAt(node.viewIndex);\r
-    },\r
-\r
-    \r
-    clearSelections : function(suppressEvent, skipUpdate){\r
-        if(this.multiSelect || this.singleSelect){\r
-            if(!skipUpdate){\r
-                this.selected.removeClass(this.selectedClass);\r
-            }\r
-            this.selected.clear();\r
-            this.last = false;\r
-            if(!suppressEvent){\r
-                this.fireEvent("selectionchange", this, this.selected.elements);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    isSelected : function(node){\r
-        return this.selected.contains(this.getNode(node));\r
-    },\r
-\r
-    \r
-    deselect : function(node){\r
-        if(this.isSelected(node)){\r
-            var node = this.getNode(node);\r
-            this.selected.removeElement(node);\r
-            if(this.last == node.viewIndex){\r
-                this.last = false;\r
-            }\r
-            Ext.fly(node).removeClass(this.selectedClass);\r
-            this.fireEvent("selectionchange", this, this.selected.elements);\r
-        }\r
-    },\r
-\r
-    \r
-    select : function(nodeInfo, keepExisting, suppressEvent){\r
-        if(Ext.isArray(nodeInfo)){\r
-            if(!keepExisting){\r
-                this.clearSelections(true);\r
-            }\r
-            for(var i = 0, len = nodeInfo.length; i < len; i++){\r
-                this.select(nodeInfo[i], true, true);\r
-            }\r
-        } else{\r
-            var node = this.getNode(nodeInfo);\r
-            if(!keepExisting){\r
-                this.clearSelections(true);\r
-            }\r
-            if(node && !this.isSelected(node)){\r
-                if(this.fireEvent("beforeselect", this, node, this.selected.elements) !== false){\r
-                    Ext.fly(node).addClass(this.selectedClass);\r
-                    this.selected.add(node);\r
-                    this.last = node.viewIndex;\r
-                    if(!suppressEvent){\r
-                        this.fireEvent("selectionchange", this, this.selected.elements);\r
-                    }\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    selectRange : function(start, end, keepExisting){\r
-        if(!keepExisting){\r
-            this.clearSelections(true);\r
-        }\r
-        this.select(this.getNodes(start, end), true);\r
-    },\r
-\r
-    \r
-    getNode : function(nodeInfo){\r
-        if(typeof nodeInfo == "string"){\r
-            return document.getElementById(nodeInfo);\r
-        }else if(typeof nodeInfo == "number"){\r
-            return this.all.elements[nodeInfo];\r
-        }\r
-        return nodeInfo;\r
-    },\r
-\r
-    \r
-    getNodes : function(start, end){\r
-        var ns = this.all.elements;\r
-        start = start || 0;\r
-        end = typeof end == "undefined" ? ns.length - 1 : end;\r
-        var nodes = [], i;\r
-        if(start <= end){\r
-            for(i = start; i <= end; i++){\r
-                nodes.push(ns[i]);\r
-            }\r
-        } else{\r
-            for(i = start; i >= end; i--){\r
-                nodes.push(ns[i]);\r
-            }\r
-        }\r
-        return nodes;\r
-    },\r
-\r
-    \r
-    indexOf : function(node){\r
-        node = this.getNode(node);\r
-        if(typeof node.viewIndex == "number"){\r
-            return node.viewIndex;\r
-        }\r
-        return this.all.indexOf(node);\r
-    },\r
-\r
-    
-    onBeforeLoad : function(){\r
-        if(this.loadingText){\r
-            this.clearSelections(false, true);\r
-            this.el.update('<div class="loading-indicator">'+this.loadingText+'</div>');\r
-            this.all.clear();\r
-        }\r
-    }\r
-});\r
-\r
-Ext.reg('dataview', Ext.DataView);
-
-Ext.ColorPalette = function(config){
-    Ext.ColorPalette.superclass.constructor.call(this, config);
-    this.addEvents(
-        
-        'select'
-    );
-
-    if(this.handler){
-        this.on("select", this.handler, this.scope, true);
-    }
-};
-Ext.extend(Ext.ColorPalette, Ext.Component, {
-    
-    itemCls : "x-color-palette",
-    
-    value : null,
-    clickEvent:'click',
-        ctype: "Ext.ColorPalette",
-
-    
-    allowReselect : false,
-
-    
-    colors : [
-        "000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333",
-        "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080",
-        "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696",
-        "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0",
-        "FF99CC", "FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
-    ],
-
-        onRender : function(container, position){
-        var t = this.tpl || new Ext.XTemplate(
-            '<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>'
-        );
-        var el = document.createElement("div");
-        el.className = this.itemCls;
-        t.overwrite(el, this.colors);
-        container.dom.insertBefore(el, position);
-        this.el = Ext.get(el);
-        this.el.on(this.clickEvent, this.handleClick,  this, {delegate: "a"});
-        if(this.clickEvent != 'click'){
-            this.el.on('click', Ext.emptyFn,  this, {delegate: "a", preventDefault:true});
-        }
-    },
-
-        afterRender : function(){
-        Ext.ColorPalette.superclass.afterRender.call(this);
-        if(this.value){
-            var s = this.value;
-            this.value = null;
-            this.select(s);
-        }
-    },
-
-        handleClick : function(e, t){
-        e.preventDefault();
-        if(!this.disabled){
-            var c = t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
-            this.select(c.toUpperCase());
-        }
-    },
-
-    
-    select : function(color){
-        color = color.replace("#", "");
-        if(color != this.value || this.allowReselect){
-            var el = this.el;
-            if(this.value){
-                el.child("a.color-"+this.value).removeClass("x-color-palette-sel");
-            }
-            el.child("a.color-"+color).addClass("x-color-palette-sel");
-            this.value = color;
-            this.fireEvent("select", this, color);
-        }
-    }
-
-    
-});
-Ext.reg('colorpalette', Ext.ColorPalette);
-\r
-Ext.DatePicker = Ext.extend(Ext.Component, {\r
-    \r
-    todayText : "Today",\r
-    \r
-    okText : "&#160;OK&#160;", 
-    \r
-    cancelText : "Cancel",\r
-    \r
-    todayTip : "{0} (Spacebar)",\r
-    \r
-    minDate : null,\r
-    \r
-    maxDate : null,\r
-    \r
-    minText : "This date is before the minimum date",\r
-    \r
-    maxText : "This date is after the maximum date",\r
-    \r
-    format : "m/d/y",\r
-    \r
-    disabledDays : null,\r
-    \r
-    disabledDaysText : "",\r
-    \r
-    disabledDatesRE : null,\r
-    \r
-    disabledDatesText : "",\r
-    \r
-    constrainToViewport : true,\r
-    \r
-    monthNames : Date.monthNames,\r
-    \r
-    dayNames : Date.dayNames,\r
-    \r
-    nextText: 'Next Month (Control+Right)',\r
-    \r
-    prevText: 'Previous Month (Control+Left)',\r
-    \r
-    monthYearText: 'Choose a month (Control+Up/Down to move years)',\r
-    \r
-    startDay : 0,\r
-\r
-    initComponent : function(){\r
-        Ext.DatePicker.superclass.initComponent.call(this);\r
-\r
-        this.value = this.value ?\r
-                 this.value.clearTime() : new Date().clearTime();\r
-\r
-        this.addEvents(\r
-            \r
-            'select'\r
-        );\r
-\r
-        if(this.handler){\r
-            this.on("select", this.handler,  this.scope || this);\r
-        }\r
-\r
-        this.initDisabledDays();\r
-    },\r
-\r
-    
-    initDisabledDays : function(){\r
-        if(!this.disabledDatesRE && this.disabledDates){\r
-            var dd = this.disabledDates;\r
-            var re = "(?:";\r
-            for(var i = 0; i < dd.length; i++){\r
-                re += dd[i];\r
-                if(i != dd.length-1) re += "|";\r
-            }\r
-            this.disabledDatesRE = new RegExp(re + ")");\r
-        }\r
-    },\r
-\r
-    \r
-    setValue : function(value){\r
-        var old = this.value;\r
-        this.value = value.clearTime(true);\r
-        if(this.el){\r
-            this.update(this.value);\r
-        }\r
-    },\r
-\r
-    \r
-    getValue : function(){\r
-        return this.value;\r
-    },\r
-\r
-    
-    focus : function(){\r
-        if(this.el){\r
-            this.update(this.activeDate);\r
-        }\r
-    },\r
-\r
-    
-    onRender : function(container, position){\r
-        var m = [\r
-             '<table cellspacing="0">',\r
-                '<tr><td class="x-date-left"><a href="#" title="', this.prevText ,'">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="', this.nextText ,'">&#160;</a></td></tr>',\r
-                '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];\r
-        var dn = this.dayNames;\r
-        for(var i = 0; i < 7; i++){\r
-            var d = this.startDay+i;\r
-            if(d > 6){\r
-                d = d-7;\r
-            }\r
-            m.push("<th><span>", dn[d].substr(0,1), "</span></th>");\r
-        }\r
-        m[m.length] = "</tr></thead><tbody><tr>";\r
-        for(var i = 0; i < 42; i++) {\r
-            if(i % 7 == 0 && i != 0){\r
-                m[m.length] = "</tr><tr>";\r
-            }\r
-            m[m.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';\r
-        }\r
-        m[m.length] = '</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';\r
-\r
-        var el = document.createElement("div");\r
-        el.className = "x-date-picker";\r
-        el.innerHTML = m.join("");\r
-\r
-        container.dom.insertBefore(el, position);\r
-\r
-        this.el = Ext.get(el);\r
-        this.eventEl = Ext.get(el.firstChild);\r
-\r
-        new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {\r
-            handler: this.showPrevMonth,\r
-            scope: this,\r
-            preventDefault:true,\r
-            stopDefault:true\r
-        });\r
-\r
-        new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {\r
-            handler: this.showNextMonth,\r
-            scope: this,\r
-            preventDefault:true,\r
-            stopDefault:true\r
-        });\r
-\r
-        this.eventEl.on("mousewheel", this.handleMouseWheel,  this);\r
-\r
-        this.monthPicker = this.el.down('div.x-date-mp');\r
-        this.monthPicker.enableDisplayMode('block');\r
-        \r
-        var kn = new Ext.KeyNav(this.eventEl, {\r
-            "left" : function(e){\r
-                e.ctrlKey ?\r
-                    this.showPrevMonth() :\r
-                    this.update(this.activeDate.add("d", -1));\r
-            },\r
-\r
-            "right" : function(e){\r
-                e.ctrlKey ?\r
-                    this.showNextMonth() :\r
-                    this.update(this.activeDate.add("d", 1));\r
-            },\r
-\r
-            "up" : function(e){\r
-                e.ctrlKey ?\r
-                    this.showNextYear() :\r
-                    this.update(this.activeDate.add("d", -7));\r
-            },\r
-\r
-            "down" : function(e){\r
-                e.ctrlKey ?\r
-                    this.showPrevYear() :\r
-                    this.update(this.activeDate.add("d", 7));\r
-            },\r
-\r
-            "pageUp" : function(e){\r
-                this.showNextMonth();\r
-            },\r
-\r
-            "pageDown" : function(e){\r
-                this.showPrevMonth();\r
-            },\r
-\r
-            "enter" : function(e){\r
-                e.stopPropagation();\r
-                return true;\r
-            },\r
-\r
-            scope : this\r
-        });\r
-\r
-        this.eventEl.on("click", this.handleDateClick,  this, {delegate: "a.x-date-date"});\r
-\r
-        this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday,  this);\r
-\r
-        this.el.unselectable();\r
-        \r
-        this.cells = this.el.select("table.x-date-inner tbody td");\r
-        this.textNodes = this.el.query("table.x-date-inner tbody span");\r
-\r
-        this.mbtn = new Ext.Button({\r
-            text: "&#160;",\r
-            tooltip: this.monthYearText,\r
-            renderTo: this.el.child("td.x-date-middle", true)\r
-        });\r
-\r
-        this.mbtn.on('click', this.showMonthPicker, this);\r
-        this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");\r
-\r
-\r
-        var today = (new Date()).dateFormat(this.format);\r
-        this.todayBtn = new Ext.Button({\r
-            renderTo: this.el.child("td.x-date-bottom", true),\r
-            text: String.format(this.todayText, today),\r
-            tooltip: String.format(this.todayTip, today),\r
-            handler: this.selectToday,\r
-            scope: this\r
-        });\r
-        \r
-        if(Ext.isIE){\r
-            this.el.repaint();\r
-        }\r
-        this.update(this.value);\r
-    },\r
-\r
-    createMonthPicker : function(){\r
-        if(!this.monthPicker.dom.firstChild){\r
-            var buf = ['<table border="0" cellspacing="0">'];\r
-            for(var i = 0; i < 6; i++){\r
-                buf.push(\r
-                    '<tr><td class="x-date-mp-month"><a href="#">', this.monthNames[i].substr(0, 3), '</a></td>',\r
-                    '<td class="x-date-mp-month x-date-mp-sep"><a href="#">', this.monthNames[i+6].substr(0, 3), '</a></td>',\r
-                    i == 0 ?\r
-                    '<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td></tr>' :\r
-                    '<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>'\r
-                );\r
-            }\r
-            buf.push(\r
-                '<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',\r
-                    this.okText,\r
-                    '</button><button type="button" class="x-date-mp-cancel">',\r
-                    this.cancelText,\r
-                    '</button></td></tr>',\r
-                '</table>'\r
-            );\r
-            this.monthPicker.update(buf.join(''));\r
-            this.monthPicker.on('click', this.onMonthClick, this);\r
-            this.monthPicker.on('dblclick', this.onMonthDblClick, this);\r
-\r
-            this.mpMonths = this.monthPicker.select('td.x-date-mp-month');\r
-            this.mpYears = this.monthPicker.select('td.x-date-mp-year');\r
-\r
-            this.mpMonths.each(function(m, a, i){\r
-                i += 1;\r
-                if((i%2) == 0){\r
-                    m.dom.xmonth = 5 + Math.round(i * .5);\r
-                }else{\r
-                    m.dom.xmonth = Math.round((i-1) * .5);\r
-                }\r
-            });\r
-        }\r
-    },\r
-\r
-    showMonthPicker : function(){\r
-        this.createMonthPicker();\r
-        var size = this.el.getSize();\r
-        this.monthPicker.setSize(size);\r
-        this.monthPicker.child('table').setSize(size);\r
-\r
-        this.mpSelMonth = (this.activeDate || this.value).getMonth();\r
-        this.updateMPMonth(this.mpSelMonth);\r
-        this.mpSelYear = (this.activeDate || this.value).getFullYear();\r
-        this.updateMPYear(this.mpSelYear);\r
-\r
-        this.monthPicker.slideIn('t', {duration:.2});\r
-    },\r
-\r
-    updateMPYear : function(y){\r
-        this.mpyear = y;\r
-        var ys = this.mpYears.elements;\r
-        for(var i = 1; i <= 10; i++){\r
-            var td = ys[i-1], y2;\r
-            if((i%2) == 0){\r
-                y2 = y + Math.round(i * .5);\r
-                td.firstChild.innerHTML = y2;\r
-                td.xyear = y2;\r
-            }else{\r
-                y2 = y - (5-Math.round(i * .5));\r
-                td.firstChild.innerHTML = y2;\r
-                td.xyear = y2;\r
-            }\r
-            this.mpYears.item(i-1)[y2 == this.mpSelYear ? 'addClass' : 'removeClass']('x-date-mp-sel');\r
-        }\r
-    },\r
-\r
-    updateMPMonth : function(sm){\r
-        this.mpMonths.each(function(m, a, i){\r
-            m[m.dom.xmonth == sm ? 'addClass' : 'removeClass']('x-date-mp-sel');\r
-        });\r
-    },\r
-\r
-    selectMPMonth: function(m){\r
-        \r
-    },\r
-\r
-    onMonthClick : function(e, t){\r
-        e.stopEvent();\r
-        var el = new Ext.Element(t), pn;\r
-        if(el.is('button.x-date-mp-cancel')){\r
-            this.hideMonthPicker();\r
-        }\r
-        else if(el.is('button.x-date-mp-ok')){\r
-            this.update(new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate()));\r
-            this.hideMonthPicker();\r
-        }\r
-        else if(pn = el.up('td.x-date-mp-month', 2)){\r
-            this.mpMonths.removeClass('x-date-mp-sel');\r
-            pn.addClass('x-date-mp-sel');\r
-            this.mpSelMonth = pn.dom.xmonth;\r
-        }\r
-        else if(pn = el.up('td.x-date-mp-year', 2)){\r
-            this.mpYears.removeClass('x-date-mp-sel');\r
-            pn.addClass('x-date-mp-sel');\r
-            this.mpSelYear = pn.dom.xyear;\r
-        }\r
-        else if(el.is('a.x-date-mp-prev')){\r
-            this.updateMPYear(this.mpyear-10);\r
-        }\r
-        else if(el.is('a.x-date-mp-next')){\r
-            this.updateMPYear(this.mpyear+10);\r
-        }\r
-    },\r
-\r
-    onMonthDblClick : function(e, t){\r
-        e.stopEvent();\r
-        var el = new Ext.Element(t), pn;\r
-        if(pn = el.up('td.x-date-mp-month', 2)){\r
-            this.update(new Date(this.mpSelYear, pn.dom.xmonth, (this.activeDate || this.value).getDate()));\r
-            this.hideMonthPicker();\r
-        }\r
-        else if(pn = el.up('td.x-date-mp-year', 2)){\r
-            this.update(new Date(pn.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate()));\r
-            this.hideMonthPicker();\r
-        }\r
-    },\r
-\r
-    hideMonthPicker : function(disableAnim){\r
-        if(this.monthPicker){\r
-            if(disableAnim === true){\r
-                this.monthPicker.hide();\r
-            }else{\r
-                this.monthPicker.slideOut('t', {duration:.2});\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    showPrevMonth : function(e){\r
-        this.update(this.activeDate.add("mo", -1));\r
-    },\r
-\r
-    
-    showNextMonth : function(e){\r
-        this.update(this.activeDate.add("mo", 1));\r
-    },\r
-\r
-    
-    showPrevYear : function(){\r
-        this.update(this.activeDate.add("y", -1));\r
-    },\r
-\r
-    
-    showNextYear : function(){\r
-        this.update(this.activeDate.add("y", 1));\r
-    },\r
-\r
-    
-    handleMouseWheel : function(e){\r
-        var delta = e.getWheelDelta();\r
-        if(delta > 0){\r
-            this.showPrevMonth();\r
-            e.stopEvent();\r
-        } else if(delta < 0){\r
-            this.showNextMonth();\r
-            e.stopEvent();\r
-        }\r
-    },\r
-\r
-    
-    handleDateClick : function(e, t){\r
-        e.stopEvent();\r
-        if(t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")){\r
-            this.setValue(new Date(t.dateValue));\r
-            this.fireEvent("select", this, this.value);\r
-        }\r
-    },\r
-\r
-    
-    selectToday : function(){\r
-        this.setValue(new Date().clearTime());\r
-        this.fireEvent("select", this, this.value);\r
-    },\r
-\r
-    
-    update : function(date){\r
-        var vd = this.activeDate;\r
-        this.activeDate = date;\r
-        if(vd && this.el){\r
-            var t = date.getTime();\r
-            if(vd.getMonth() == date.getMonth() && vd.getFullYear() == date.getFullYear()){\r
-                this.cells.removeClass("x-date-selected");\r
-                this.cells.each(function(c){\r
-                   if(c.dom.firstChild.dateValue == t){\r
-                       c.addClass("x-date-selected");\r
-                       setTimeout(function(){\r
-                            try{c.dom.firstChild.focus();}catch(e){}\r
-                       }, 50);\r
-                       return false;\r
-                   }\r
-                });\r
-                return;\r
-            }\r
-        }\r
-        var days = date.getDaysInMonth();\r
-        var firstOfMonth = date.getFirstDateOfMonth();\r
-        var startingPos = firstOfMonth.getDay()-this.startDay;\r
-\r
-        if(startingPos <= this.startDay){\r
-            startingPos += 7;\r
-        }\r
-\r
-        var pm = date.add("mo", -1);\r
-        var prevStart = pm.getDaysInMonth()-startingPos;\r
-\r
-        var cells = this.cells.elements;\r
-        var textEls = this.textNodes;\r
-        days += startingPos;\r
-\r
-        
-        var day = 86400000;\r
-        var d = (new Date(pm.getFullYear(), pm.getMonth(), prevStart)).clearTime();\r
-        var today = new Date().clearTime().getTime();\r
-        var sel = date.clearTime().getTime();\r
-        var min = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;\r
-        var max = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;\r
-        var ddMatch = this.disabledDatesRE;\r
-        var ddText = this.disabledDatesText;\r
-        var ddays = this.disabledDays ? this.disabledDays.join("") : false;\r
-        var ddaysText = this.disabledDaysText;\r
-        var format = this.format;\r
-\r
-        var setCellClass = function(cal, cell){\r
-            cell.title = "";\r
-            var t = d.getTime();\r
-            cell.firstChild.dateValue = t;\r
-            if(t == today){\r
-                cell.className += " x-date-today";\r
-                cell.title = cal.todayText;\r
-            }\r
-            if(t == sel){\r
-                cell.className += " x-date-selected";\r
-                setTimeout(function(){\r
-                    try{cell.firstChild.focus();}catch(e){}\r
-                }, 50);\r
-            }\r
-            
-            if(t < min) {\r
-                cell.className = " x-date-disabled";\r
-                cell.title = cal.minText;\r
-                return;\r
-            }\r
-            if(t > max) {\r
-                cell.className = " x-date-disabled";\r
-                cell.title = cal.maxText;\r
-                return;\r
-            }\r
-            if(ddays){\r
-                if(ddays.indexOf(d.getDay()) != -1){\r
-                    cell.title = ddaysText;\r
-                    cell.className = " x-date-disabled";\r
-                }\r
-            }\r
-            if(ddMatch && format){\r
-                var fvalue = d.dateFormat(format);\r
-                if(ddMatch.test(fvalue)){\r
-                    cell.title = ddText.replace("%0", fvalue);\r
-                    cell.className = " x-date-disabled";\r
-                }\r
-            }\r
-        };\r
-\r
-        var i = 0;\r
-        for(; i < startingPos; i++) {\r
-            textEls[i].innerHTML = (++prevStart);\r
-            d.setDate(d.getDate()+1);\r
-            cells[i].className = "x-date-prevday";\r
-            setCellClass(this, cells[i]);\r
-        }\r
-        for(; i < days; i++){\r
-            intDay = i - startingPos + 1;\r
-            textEls[i].innerHTML = (intDay);\r
-            d.setDate(d.getDate()+1);\r
-            cells[i].className = "x-date-active";\r
-            setCellClass(this, cells[i]);\r
-        }\r
-        var extraDays = 0;\r
-        for(; i < 42; i++) {\r
-             textEls[i].innerHTML = (++extraDays);\r
-             d.setDate(d.getDate()+1);\r
-             cells[i].className = "x-date-nextday";\r
-             setCellClass(this, cells[i]);\r
-        }\r
-\r
-        this.mbtn.setText(this.monthNames[date.getMonth()] + " " + date.getFullYear());\r
-\r
-        if(!this.internalRender){\r
-            var main = this.el.dom.firstChild;\r
-            var w = main.offsetWidth;\r
-            this.el.setWidth(w + this.el.getBorderWidth("lr"));\r
-            Ext.fly(main).setWidth(w);\r
-            this.internalRender = true;\r
-            
-            
-            
-            if(Ext.isOpera && !this.secondPass){\r
-                main.rows[0].cells[1].style.width = (w - (main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth)) + "px";\r
-                this.secondPass = true;\r
-                this.update.defer(10, this, [date]);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    beforeDestroy : function() {\r
-        this.mbtn.destroy();\r
-        this.todayBtn.destroy();\r
-    }\r
-\r
-    \r
-});\r
-Ext.reg('datepicker', Ext.DatePicker);
-
-Ext.TabPanel = Ext.extend(Ext.Panel,  {
-    
-    
-    monitorResize : true,
-    
-    deferredRender : true,
-    
-    tabWidth: 120,
-    
-    minTabWidth: 30,
-    
-    resizeTabs:false,
-    
-    enableTabScroll: false,
-    
-    scrollIncrement : 0,
-    
-    scrollRepeatInterval : 400,
-    
-    scrollDuration : .35,
-    
-    animScroll : true,
-    
-    tabPosition: 'top',
-    
-    baseCls: 'x-tab-panel',
-    
-    autoTabs : false,
-    
-    autoTabSelector:'div.x-tab',
-    
-    activeTab : null,
-    
-    tabMargin : 2,
-    
-    plain: false,
-    
-    wheelIncrement : 20,
-
-    
-    idDelimiter : '__',
-
-        itemCls : 'x-tab-item',
-
-        elements: 'body',
-    headerAsText: false,
-    frame: false,
-    hideBorders:true,
-
-        initComponent : function(){
-        this.frame = false;
-        Ext.TabPanel.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'beforetabchange',
-            
-            'tabchange',
-            
-            'contextmenu'
-        );
-        this.setLayout(new Ext.layout.CardLayout({
-            deferredRender: this.deferredRender
-        }));
-        if(this.tabPosition == 'top'){
-            this.elements += ',header';
-            this.stripTarget = 'header';
-        }else {
-            this.elements += ',footer';
-            this.stripTarget = 'footer';
-        }
-        if(!this.stack){
-            this.stack = Ext.TabPanel.AccessStack();
-        }
-        this.initItems();
-    },
-
-        render : function(){
-        Ext.TabPanel.superclass.render.apply(this, arguments);
-        if(this.activeTab !== undefined){
-            var item = this.activeTab;
-            delete this.activeTab;
-            this.setActiveTab(item);
-        }
-    },
-
-        onRender : function(ct, position){
-        Ext.TabPanel.superclass.onRender.call(this, ct, position);
-
-        if(this.plain){
-            var pos = this.tabPosition == 'top' ? 'header' : 'footer';
-            this[pos].addClass('x-tab-panel-'+pos+'-plain');
-        }
-
-        var st = this[this.stripTarget];
-
-        this.stripWrap = st.createChild({cls:'x-tab-strip-wrap', cn:{
-            tag:'ul', cls:'x-tab-strip x-tab-strip-'+this.tabPosition}});
-        this.stripSpacer = st.createChild({cls:'x-tab-strip-spacer'});
-        this.strip = new Ext.Element(this.stripWrap.dom.firstChild);
-
-        this.edge = this.strip.createChild({tag:'li', cls:'x-tab-edge'});
-        this.strip.createChild({cls:'x-clear'});
-
-        this.body.addClass('x-tab-panel-body-'+this.tabPosition);
-
-        if(!this.itemTpl){
-            var tt = new Ext.Template(
-                 '<li class="{cls}" id="{id}"><a class="x-tab-strip-close" onclick="return false;"></a>',
-                 '<a class="x-tab-right" href="#" onclick="return false;"><em class="x-tab-left">',
-                 '<span class="x-tab-strip-inner"><span class="x-tab-strip-text {iconCls}">{text}</span></span>',
-                 '</em></a></li>'
-            );
-            tt.disableFormats = true;
-            tt.compile();
-            Ext.TabPanel.prototype.itemTpl = tt;
-        }
-
-        this.items.each(this.initTab, this);
-    },
-
-        afterRender : function(){
-        Ext.TabPanel.superclass.afterRender.call(this);
-        if(this.autoTabs){
-            this.readTabs(false);
-        }
-    },
-
-        initEvents : function(){
-        Ext.TabPanel.superclass.initEvents.call(this);
-        this.on('add', this.onAdd, this);
-        this.on('remove', this.onRemove, this);
-
-        this.strip.on('mousedown', this.onStripMouseDown, this);
-        this.strip.on('click', this.onStripClick, this);
-        this.strip.on('contextmenu', this.onStripContextMenu, this);
-        if(this.enableTabScroll){
-            this.strip.on('mousewheel', this.onWheel, this);
-        }
-    },
-
-        findTargets : function(e){
-        var item = null;
-        var itemEl = e.getTarget('li', this.strip);
-        if(itemEl){
-            item = this.getComponent(itemEl.id.split(this.idDelimiter)[1]);
-            if(item.disabled){
-                return {
-                    close : null,
-                    item : null,
-                    el : null
-                };
-            }
-        }
-        return {
-            close : e.getTarget('.x-tab-strip-close', this.strip),
-            item : item,
-            el : itemEl
-        };
-    },
-
-        onStripMouseDown : function(e){
-        e.preventDefault();
-        if(e.button != 0){
-            return;
-        }
-        var t = this.findTargets(e);
-        if(t.close){
-            this.remove(t.item);
-            return;
-        }
-        if(t.item && t.item != this.activeTab){
-            this.setActiveTab(t.item);
-        }
-    },
-
-        onStripClick : function(e){
-        var t = this.findTargets(e);
-        if(!t.close && t.item && t.item != this.activeTab){
-            this.setActiveTab(t.item);
-        }
-    },
-
-        onStripContextMenu : function(e){
-        e.preventDefault();
-        var t = this.findTargets(e);
-        if(t.item){
-            this.fireEvent('contextmenu', this, t.item, e);
-        }
-    },
-
-    
-    readTabs : function(removeExisting){
-        if(removeExisting === true){
-            this.items.each(function(item){
-                this.remove(item);
-            }, this);
-        }
-        var tabs = this.el.query(this.autoTabSelector);
-        for(var i = 0, len = tabs.length; i < len; i++){
-            var tab = tabs[i];
-            var title = tab.getAttribute('title');
-            tab.removeAttribute('title');
-            this.add({
-                title: title,
-                el: tab
-            });
-        }
-    },
-
-        initTab : function(item, index){
-        var before = this.strip.dom.childNodes[index];
-        var cls = item.closable ? 'x-tab-strip-closable' : '';
-        if(item.disabled){
-            cls += ' x-item-disabled';
-        }
-        if(item.iconCls){
-            cls += ' x-tab-with-icon';
-        }
-        if(item.tabCls){
-            cls += ' ' + item.tabCls;
-        }
-        
-        var p = {
-            id: this.id + this.idDelimiter + item.getItemId(),
-            text: item.title,
-            cls: cls,
-            iconCls: item.iconCls || ''
-        };
-        var el = before ?
-                 this.itemTpl.insertBefore(before, p) :
-                 this.itemTpl.append(this.strip, p);
-
-        Ext.fly(el).addClassOnOver('x-tab-strip-over');
-
-        if(item.tabTip){
-            Ext.fly(el).child('span.x-tab-strip-text', true).qtip = item.tabTip;
-        }
-        item.on('disable', this.onItemDisabled, this);
-        item.on('enable', this.onItemEnabled, this);
-        item.on('titlechange', this.onItemTitleChanged, this);
-        item.on('beforeshow', this.onBeforeShowItem, this);
-    },
-
-        onAdd : function(tp, item, index){
-        this.initTab(item, index);
-        if(this.items.getCount() == 1){
-            this.syncSize();
-        }
-        this.delegateUpdates();
-    },
-
-        onBeforeAdd : function(item){
-        var existing = item.events ? (this.items.containsKey(item.getItemId()) ? item : null) : this.items.get(item);
-        if(existing){
-            this.setActiveTab(item);
-            return false;
-        }
-        Ext.TabPanel.superclass.onBeforeAdd.apply(this, arguments);
-        var es = item.elements;
-        item.elements = es ? es.replace(',header', '') : es;
-        item.border = (item.border === true);
-    },
-
-        onRemove : function(tp, item){
-        Ext.removeNode(this.getTabEl(item));
-        this.stack.remove(item);
-        if(item == this.activeTab){
-            var next = this.stack.next();
-            if(next){
-                this.setActiveTab(next);
-            }else{
-                this.setActiveTab(0);
-            }
-        }
-        this.delegateUpdates();
-    },
-
-        onBeforeShowItem : function(item){
-        if(item != this.activeTab){
-            this.setActiveTab(item);
-            return false;
-        }
-    },
-
-        onItemDisabled : function(item){
-        var el = this.getTabEl(item);
-        if(el){
-            Ext.fly(el).addClass('x-item-disabled');
-        }
-        this.stack.remove(item);
-    },
-
-        onItemEnabled : function(item){
-        var el = this.getTabEl(item);
-        if(el){
-            Ext.fly(el).removeClass('x-item-disabled');
-        }
-    },
-
-        onItemTitleChanged : function(item){
-        var el = this.getTabEl(item);
-        if(el){
-            Ext.fly(el).child('span.x-tab-strip-text', true).innerHTML = item.title;
-        }
-    },
-
-    
-    getTabEl : function(item){
-        var itemId = (typeof item === 'number')?this.items.items[item].getItemId() : item.getItemId();
-        return document.getElementById(this.id+this.idDelimiter+itemId);
-    },
-
-        onResize : function(){
-        Ext.TabPanel.superclass.onResize.apply(this, arguments);
-        this.delegateUpdates();
-    },
-
-    
-    beginUpdate : function(){
-        this.suspendUpdates = true;
-    },
-
-    
-    endUpdate : function(){
-        this.suspendUpdates = false;
-        this.delegateUpdates();
-    },
-
-    
-    hideTabStripItem : function(item){
-        item = this.getComponent(item);
-        var el = this.getTabEl(item);
-        if(el){
-            el.style.display = 'none';
-            this.delegateUpdates();
-        }
-    },
-
-    
-    unhideTabStripItem : function(item){
-        item = this.getComponent(item);
-        var el = this.getTabEl(item);
-        if(el){
-            el.style.display = '';
-            this.delegateUpdates();
-        }
-    },
-
-        delegateUpdates : function(){
-        if(this.suspendUpdates){
-            return;
-        }
-        if(this.resizeTabs && this.rendered){
-            this.autoSizeTabs();
-        }
-        if(this.enableTabScroll && this.rendered){
-            this.autoScrollTabs();
-        }
-    },
-
-        autoSizeTabs : function(){
-        var count = this.items.length;
-        var ce = this.tabPosition != 'bottom' ? 'header' : 'footer';
-        var ow = this[ce].dom.offsetWidth;
-        var aw = this[ce].dom.clientWidth;
-
-        if(!this.resizeTabs || count < 1 || !aw){             return;
-        }
-
-        var each = Math.max(Math.min(Math.floor((aw-4) / count) - this.tabMargin, this.tabWidth), this.minTabWidth);         this.lastTabWidth = each;
-        var lis = this.stripWrap.dom.getElementsByTagName('li');
-        for(var i = 0, len = lis.length-1; i < len; i++) {             var li = lis[i];
-            var inner = li.childNodes[1].firstChild.firstChild;
-            var tw = li.offsetWidth;
-            var iw = inner.offsetWidth;
-            inner.style.width = (each - (tw-iw)) + 'px';
-        }
-    },
-
-        adjustBodyWidth : function(w){
-        if(this.header){
-            this.header.setWidth(w);
-        }
-        if(this.footer){
-            this.footer.setWidth(w);
-        }
-        return w;
-    },
-
-    
-    setActiveTab : function(item){
-        item = this.getComponent(item);
-        if(!item || this.fireEvent('beforetabchange', this, item, this.activeTab) === false){
-            return;
-        }
-        if(!this.rendered){
-            this.activeTab = item;
-            return;
-        }
-        if(this.activeTab != item){
-            if(this.activeTab){
-                var oldEl = this.getTabEl(this.activeTab);
-                if(oldEl){
-                    Ext.fly(oldEl).removeClass('x-tab-strip-active');
-                }
-                this.activeTab.fireEvent('deactivate', this.activeTab);
-            }
-            var el = this.getTabEl(item);
-            Ext.fly(el).addClass('x-tab-strip-active');
-            this.activeTab = item;
-            this.stack.add(item);
-
-            this.layout.setActiveItem(item);
-            if(this.layoutOnTabChange && item.doLayout){
-                item.doLayout();
-            }
-            if(this.scrolling){
-                this.scrollToTab(item, this.animScroll);
-            }
-
-            item.fireEvent('activate', item);
-            this.fireEvent('tabchange', this, item);
-        }
-    },
-
-    
-    getActiveTab : function(){
-        return this.activeTab || null;
-    },
-
-    
-    getItem : function(item){
-        return this.getComponent(item);
-    },
-
-        autoScrollTabs : function(){
-        var count = this.items.length;
-        var ow = this.header.dom.offsetWidth;
-        var tw = this.header.dom.clientWidth;
-
-        var wrap = this.stripWrap;
-        var wd = wrap.dom;
-        var cw = wd.offsetWidth;
-        var pos = this.getScrollPos();
-        var l = this.edge.getOffsetsTo(this.stripWrap)[0] + pos;
-
-        if(!this.enableTabScroll || count < 1 || cw < 20){             return;
-        }
-        if(l <= tw){
-            wd.scrollLeft = 0;
-            wrap.setWidth(tw);
-            if(this.scrolling){
-                this.scrolling = false;
-                this.header.removeClass('x-tab-scrolling');
-                this.scrollLeft.hide();
-                this.scrollRight.hide();
-                if(Ext.isAir){
-                    wd.style.marginLeft = '';
-                    wd.style.marginRight = '';
-                }
-            }
-        }else{
-            if(!this.scrolling){
-                this.header.addClass('x-tab-scrolling');
-                if(Ext.isAir){
-                    wd.style.marginLeft = '18px';
-                    wd.style.marginRight = '18px';
-                }
-            }
-            tw -= wrap.getMargins('lr');
-            wrap.setWidth(tw > 20 ? tw : 20);
-            if(!this.scrolling){
-                if(!this.scrollLeft){
-                    this.createScrollers();
-                }else{
-                    this.scrollLeft.show();
-                    this.scrollRight.show();
-                }
-            }
-            this.scrolling = true;
-            if(pos > (l-tw)){                 wd.scrollLeft = l-tw;
-            }else{                 this.scrollToTab(this.activeTab, false);
-            }
-            this.updateScrollButtons();
-        }
-    },
-
-        createScrollers : function(){
-        var h = this.stripWrap.dom.offsetHeight;
-
-                var sl = this.header.insertFirst({
-            cls:'x-tab-scroller-left'
-        });
-        sl.setHeight(h);
-        sl.addClassOnOver('x-tab-scroller-left-over');
-        this.leftRepeater = new Ext.util.ClickRepeater(sl, {
-            interval : this.scrollRepeatInterval,
-            handler: this.onScrollLeft,
-            scope: this
-        });
-        this.scrollLeft = sl;
-
-                var sr = this.header.insertFirst({
-            cls:'x-tab-scroller-right'
-        });
-        sr.setHeight(h);
-        sr.addClassOnOver('x-tab-scroller-right-over');
-        this.rightRepeater = new Ext.util.ClickRepeater(sr, {
-            interval : this.scrollRepeatInterval,
-            handler: this.onScrollRight,
-            scope: this
-        });
-        this.scrollRight = sr;
-    },
-
-        getScrollWidth : function(){
-        return this.edge.getOffsetsTo(this.stripWrap)[0] + this.getScrollPos();
-    },
-
-        getScrollPos : function(){
-        return parseInt(this.stripWrap.dom.scrollLeft, 10) || 0;
-    },
-
-        getScrollArea : function(){
-        return parseInt(this.stripWrap.dom.clientWidth, 10) || 0;
-    },
-
-        getScrollAnim : function(){
-        return {duration:this.scrollDuration, callback: this.updateScrollButtons, scope: this};
-    },
-
-        getScrollIncrement : function(){
-        return this.scrollIncrement || (this.resizeTabs ? this.lastTabWidth+2 : 100);
-    },
-
-    
-
-    scrollToTab : function(item, animate){
-        if(!item){ return; }
-        var el = this.getTabEl(item);
-        var pos = this.getScrollPos(), area = this.getScrollArea();
-        var left = Ext.fly(el).getOffsetsTo(this.stripWrap)[0] + pos;
-        var right = left + el.offsetWidth;
-        if(left < pos){
-            this.scrollTo(left, animate);
-        }else if(right > (pos + area)){
-            this.scrollTo(right - area, animate);
-        }
-    },
-
-        scrollTo : function(pos, animate){
-        this.stripWrap.scrollTo('left', pos, animate ? this.getScrollAnim() : false);
-        if(!animate){
-            this.updateScrollButtons();
-        }
-    },
-
-    onWheel : function(e){
-        var d = e.getWheelDelta()*this.wheelIncrement*-1;
-        e.stopEvent();
-
-        var pos = this.getScrollPos();
-        var newpos = pos + d;
-        var sw = this.getScrollWidth()-this.getScrollArea();
-
-        var s = Math.max(0, Math.min(sw, newpos));
-        if(s != pos){
-            this.scrollTo(s, false);
-        }
-    },
-
-        onScrollRight : function(){
-        var sw = this.getScrollWidth()-this.getScrollArea();
-        var pos = this.getScrollPos();
-        var s = Math.min(sw, pos + this.getScrollIncrement());
-        if(s != pos){
-            this.scrollTo(s, this.animScroll);
-        }
-    },
-
-        onScrollLeft : function(){
-        var pos = this.getScrollPos();
-        var s = Math.max(0, pos - this.getScrollIncrement());
-        if(s != pos){
-            this.scrollTo(s, this.animScroll);
-        }
-    },
-
-        updateScrollButtons : function(){
-        var pos = this.getScrollPos();
-        this.scrollLeft[pos == 0 ? 'addClass' : 'removeClass']('x-tab-scroller-left-disabled');
-        this.scrollRight[pos >= (this.getScrollWidth()-this.getScrollArea()) ? 'addClass' : 'removeClass']('x-tab-scroller-right-disabled');
-    }
-
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-});
-Ext.reg('tabpanel', Ext.TabPanel);
-
-
-Ext.TabPanel.prototype.activate = Ext.TabPanel.prototype.setActiveTab;
-
-Ext.TabPanel.AccessStack = function(){
-    var items = [];
-    return {
-        add : function(item){
-            items.push(item);
-            if(items.length > 10){
-                items.shift();
-            }
-        },
-
-        remove : function(item){
-            var s = [];
-            for(var i = 0, len = items.length; i < len; i++) {
-                if(items[i] != item){
-                    s.push(items[i]);
-                }
-            }
-            items = s;
-        },
-
-        next : function(){
-            return items.pop();
-        }
-    };
-};
-
-
-
-
-Ext.Button = Ext.extend(Ext.Component, {
-    
-    hidden : false,
-    
-    disabled : false,
-    
-    pressed : false,
-    
-
-    
-
-    
-    enableToggle: false,
-    
-    
-    menuAlign : "tl-bl?",
-
-    
-    
-    type : 'button',
-
-        menuClassTarget: 'tr',
-
-    
-    clickEvent : 'click',
-
-    
-    handleMouseEvents : true,
-
-    
-    tooltipType : 'qtip',
-
-    buttonSelector : "button:first",
-
-    
-
-    
-    initComponent : function(){
-        Ext.Button.superclass.initComponent.call(this);
-
-        this.addEvents(
-            
-            "click",
-            
-            "toggle",
-            
-            'mouseover',
-            
-            'mouseout',
-            
-            'menushow',
-            
-            'menuhide',
-            
-            'menutriggerover',
-            
-            'menutriggerout'
-        );
-        if(this.menu){
-            this.menu = Ext.menu.MenuMgr.get(this.menu);
-        }
-        if(typeof this.toggleGroup === 'string'){
-            this.enableToggle = true;
-        }
-    },
-
-        onRender : function(ct, position){
-        if(!this.template){
-            if(!Ext.Button.buttonTemplate){
-                                Ext.Button.buttonTemplate = new Ext.Template(
-                    '<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>',
-                    '<td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i>&#160;</i></td>',
-                    "</tr></tbody></table>");
-            }
-            this.template = Ext.Button.buttonTemplate;
-        }
-        var btn, targs = [this.text || '&#160;', this.type];
-
-        if(position){
-            btn = this.template.insertBefore(position, targs, true);
-        }else{
-            btn = this.template.append(ct, targs, true);
-        }
-        var btnEl = btn.child(this.buttonSelector);
-        btnEl.on('focus', this.onFocus, this);
-        btnEl.on('blur', this.onBlur, this);
-
-        this.initButtonEl(btn, btnEl);
-
-        if(this.menu){
-            this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
-        }
-        Ext.ButtonToggleMgr.register(this);
-    },
-
-        initButtonEl : function(btn, btnEl){
-
-        this.el = btn;
-        btn.addClass("x-btn");
-
-        if(this.icon){
-            btnEl.setStyle('background-image', 'url(' +this.icon +')');
-        }
-        if(this.iconCls){
-            btnEl.addClass(this.iconCls);
-            if(!this.cls){
-                btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
-            }
-        }
-        if(this.tabIndex !== undefined){
-            btnEl.dom.tabIndex = this.tabIndex;
-        }
-        if(this.tooltip){
-            if(typeof this.tooltip == 'object'){
-                Ext.QuickTips.register(Ext.apply({
-                      target: btnEl.id
-                }, this.tooltip));
-            } else {
-                btnEl.dom[this.tooltipType] = this.tooltip;
-            }
-        }
-
-        if(this.pressed){
-            this.el.addClass("x-btn-pressed");
-        }
-
-        if(this.handleMouseEvents){
-            btn.on("mouseover", this.onMouseOver, this);
-                                    btn.on("mousedown", this.onMouseDown, this);
-        }
-
-        if(this.menu){
-            this.menu.on("show", this.onMenuShow, this);
-            this.menu.on("hide", this.onMenuHide, this);
-        }
-
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-
-        if(this.repeat){
-            var repeater = new Ext.util.ClickRepeater(btn,
-                typeof this.repeat == "object" ? this.repeat : {}
-            );
-            repeater.on("click", this.onClick,  this);
-        }
-
-        btn.on(this.clickEvent, this.onClick, this);
-    },
-
-        afterRender : function(){
-        Ext.Button.superclass.afterRender.call(this);
-        if(Ext.isIE6){
-            this.autoWidth.defer(1, this);
-        }else{
-            this.autoWidth();
-        }
-    },
-
-    
-    setIconClass : function(cls){
-        if(this.el){
-            this.el.child(this.buttonSelector).replaceClass(this.iconCls, cls);
-        }
-        this.iconCls = cls;
-    },
-
-        beforeDestroy: function(){
-       if(this.rendered){
-               var btn = this.el.child(this.buttonSelector);
-               if(btn){
-                   btn.removeAllListeners();
-               }
-           }
-        if(this.menu){
-            Ext.destroy(this.menu);
-        }
-    },
-
-        onDestroy : function(){
-        if(this.rendered){
-            Ext.ButtonToggleMgr.unregister(this);
-        }
-    },
-
-        autoWidth : function(){
-        if(this.el){
-            this.el.setWidth("auto");
-            if(Ext.isIE7 && Ext.isStrict){
-                var ib = this.el.child(this.buttonSelector);
-                if(ib && ib.getWidth() > 20){
-                    ib.clip();
-                    ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
-                }
-            }
-            if(this.minWidth){
-                if(this.el.getWidth() < this.minWidth){
-                    this.el.setWidth(this.minWidth);
-                }
-            }
-        }
-    },
-
-    
-    setHandler : function(handler, scope){
-        this.handler = handler;
-        this.scope = scope;
-    },
-
-    
-    setText : function(text){
-        this.text = text;
-        if(this.el){
-            this.el.child("td.x-btn-center " + this.buttonSelector).update(text);
-        }
-        this.autoWidth();
-    },
-
-    
-    getText : function(){
-        return this.text;
-    },
-
-    
-    toggle : function(state){
-        state = state === undefined ? !this.pressed : state;
-        if(state != this.pressed){
-            if(state){
-                this.el.addClass("x-btn-pressed");
-                this.pressed = true;
-                this.fireEvent("toggle", this, true);
-            }else{
-                this.el.removeClass("x-btn-pressed");
-                this.pressed = false;
-                this.fireEvent("toggle", this, false);
-            }
-            if(this.toggleHandler){
-                this.toggleHandler.call(this.scope || this, this, state);
-            }
-        }
-    },
-
-    
-    focus : function(){
-        this.el.child(this.buttonSelector).focus();
-    },
-
-        onDisable : function(){
-        if(this.el){
-            if(!Ext.isIE6 || !this.text){
-                this.el.addClass(this.disabledClass);
-            }
-            this.el.dom.disabled = true;
-        }
-        this.disabled = true;
-    },
-
-        onEnable : function(){
-        if(this.el){
-            if(!Ext.isIE6 || !this.text){
-                this.el.removeClass(this.disabledClass);
-            }
-            this.el.dom.disabled = false;
-        }
-        this.disabled = false;
-    },
-
-    
-    showMenu : function(){
-        if(this.menu){
-            this.menu.show(this.el, this.menuAlign);
-        }
-        return this;
-    },
-
-    
-    hideMenu : function(){
-        if(this.menu){
-            this.menu.hide();
-        }
-        return this;
-    },
-
-    
-    hasVisibleMenu : function(){
-        return this.menu && this.menu.isVisible();
-    },
-
-        onClick : function(e){
-        if(e){
-            e.preventDefault();
-        }
-        if(e.button != 0){
-            return;
-        }
-        if(!this.disabled){
-            if(this.enableToggle && (this.allowDepress !== false || !this.pressed)){
-                this.toggle();
-            }
-            if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){
-                this.showMenu();
-            }
-            this.fireEvent("click", this, e);
-            if(this.handler){
-                                this.handler.call(this.scope || this, this, e);
-            }
-        }
-    },
-
-        isMenuTriggerOver : function(e, internal){
-        return this.menu && !internal;
-    },
-
-        isMenuTriggerOut : function(e, internal){
-        return this.menu && !internal;
-    },
-
-        onMouseOver : function(e){
-        if(!this.disabled){
-            var internal = e.within(this.el,  true);
-            if(!internal){
-                this.el.addClass("x-btn-over");
-                Ext.getDoc().on('mouseover', this.monitorMouseOver, this);
-                this.fireEvent('mouseover', this, e);
-            }
-            if(this.isMenuTriggerOver(e, internal)){
-                this.fireEvent('menutriggerover', this, this.menu, e);
-            }
-        }
-    },
-
-        monitorMouseOver : function(e){
-        if(e.target != this.el.dom && !e.within(this.el)){
-            Ext.getDoc().un('mouseover', this.monitorMouseOver, this);
-            this.onMouseOut(e);
-        }
-    },
-
-        onMouseOut : function(e){
-        var internal = e.within(this.el) && e.target != this.el.dom;
-        this.el.removeClass("x-btn-over");
-        this.fireEvent('mouseout', this, e);
-        if(this.isMenuTriggerOut(e, internal)){
-            this.fireEvent('menutriggerout', this, this.menu, e);
-        }
-    },
-        onFocus : function(e){
-        if(!this.disabled){
-            this.el.addClass("x-btn-focus");
-        }
-    },
-        onBlur : function(e){
-        this.el.removeClass("x-btn-focus");
-    },
-
-        getClickEl : function(e, isUp){
-       return this.el;
-    },
-
-        onMouseDown : function(e){
-        if(!this.disabled && e.button == 0){
-            this.getClickEl(e).addClass("x-btn-click");
-            Ext.getDoc().on('mouseup', this.onMouseUp, this);
-        }
-    },
-        onMouseUp : function(e){
-        if(e.button == 0){
-            this.getClickEl(e, true).removeClass("x-btn-click");
-            Ext.getDoc().un('mouseup', this.onMouseUp, this);
-        }
-    },
-        onMenuShow : function(e){
-        this.ignoreNextClick = 0;
-        this.el.addClass("x-btn-menu-active");
-        this.fireEvent('menushow', this, this.menu);
-    },
-        onMenuHide : function(e){
-        this.el.removeClass("x-btn-menu-active");
-        this.ignoreNextClick = this.restoreClick.defer(250, this);
-        this.fireEvent('menuhide', this, this.menu);
-    },
-
-        restoreClick : function(){
-        this.ignoreNextClick = 0;
-    }
-
-
-
-    
-});
-Ext.reg('button', Ext.Button);
-
-Ext.ButtonToggleMgr = function(){
-   var groups = {};
-
-   function toggleGroup(btn, state){
-       if(state){
-           var g = groups[btn.toggleGroup];
-           for(var i = 0, l = g.length; i < l; i++){
-               if(g[i] != btn){
-                   g[i].toggle(false);
-               }
-           }
-       }
-   }
-
-   return {
-       register : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(!g){
-               g = groups[btn.toggleGroup] = [];
-           }
-           g.push(btn);
-           btn.on("toggle", toggleGroup);
-       },
-
-       unregister : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(g){
-               g.remove(btn);
-               btn.un("toggle", toggleGroup);
-           }
-       }
-   };
-}();
-\r
-Ext.SplitButton = Ext.extend(Ext.Button, {\r
-       
-    arrowSelector : 'button:last',\r
-\r
-    
-    initComponent : function(){\r
-        Ext.SplitButton.superclass.initComponent.call(this);\r
-        \r
-        this.addEvents("arrowclick");\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        
-        var tpl = new Ext.Template(\r
-            '<table cellspacing="0" class="x-btn-menu-wrap x-btn"><tr><td>',\r
-            '<table cellspacing="0" class="x-btn-wrap x-btn-menu-text-wrap"><tbody>',\r
-            '<tr><td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><button class="x-btn-text" type="{1}">{0}</button></td></tr>',\r
-            "</tbody></table></td><td>",\r
-            '<table cellspacing="0" class="x-btn-wrap x-btn-menu-arrow-wrap"><tbody>',\r
-            '<tr><td class="x-btn-center"><button class="x-btn-menu-arrow-el" type="button">&#160;</button></td><td class="x-btn-right"><i>&#160;</i></td></tr>',\r
-            "</tbody></table></td></tr></table>"\r
-        );\r
-        var btn, targs = [this.text || '&#160;', this.type];\r
-        if(position){\r
-            btn = tpl.insertBefore(position, targs, true);\r
-        }else{\r
-            btn = tpl.append(ct, targs, true);\r
-        }\r
-        var btnEl = btn.child(this.buttonSelector);\r
-\r
-        this.initButtonEl(btn, btnEl);\r
-        this.arrowBtnTable = btn.child("table:last");\r
-        if(this.arrowTooltip){\r
-            btn.child(this.arrowSelector).dom[this.tooltipType] = this.arrowTooltip;\r
-        }\r
-    },\r
-\r
-    
-    autoWidth : function(){\r
-        if(this.el){\r
-            var tbl = this.el.child("table:first");\r
-            var tbl2 = this.el.child("table:last");\r
-            this.el.setWidth("auto");\r
-            tbl.setWidth("auto");\r
-            if(Ext.isIE7 && Ext.isStrict){\r
-                var ib = this.el.child(this.buttonSelector);\r
-                if(ib && ib.getWidth() > 20){\r
-                    ib.clip();\r
-                    ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));\r
-                }\r
-            }\r
-            if(this.minWidth){\r
-                if((tbl.getWidth()+tbl2.getWidth()) < this.minWidth){\r
-                    tbl.setWidth(this.minWidth-tbl2.getWidth());\r
-                }\r
-            }\r
-            this.el.setWidth(tbl.getWidth()+tbl2.getWidth());\r
-        } \r
-    },\r
-\r
-    \r
-    setArrowHandler : function(handler, scope){\r
-        this.arrowHandler = handler;\r
-        this.scope = scope;  \r
-    },\r
-\r
-    
-    onClick : function(e){\r
-        e.preventDefault();\r
-        if(!this.disabled){\r
-            if(e.getTarget(".x-btn-menu-arrow-wrap")){\r
-                if(this.menu && !this.menu.isVisible() && !this.ignoreNextClick){\r
-                    this.showMenu();\r
-                }\r
-                this.fireEvent("arrowclick", this, e);\r
-                if(this.arrowHandler){\r
-                    this.arrowHandler.call(this.scope || this, this, e);\r
-                }\r
-            }else{\r
-                if(this.enableToggle){\r
-                    this.toggle();\r
-                }\r
-                this.fireEvent("click", this, e);\r
-                if(this.handler){\r
-                    this.handler.call(this.scope || this, this, e);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    getClickEl : function(e, isUp){\r
-        if(!isUp){\r
-            return (this.lastClickEl = e.getTarget("table", 10, true));\r
-        }\r
-        return this.lastClickEl;\r
-    },\r
-\r
-    
-    onDisable : function(){\r
-        if(this.el){\r
-            if(!Ext.isIE6){\r
-                this.el.addClass("x-item-disabled");\r
-            }\r
-            this.el.child(this.buttonSelector).dom.disabled = true;\r
-            this.el.child(this.arrowSelector).dom.disabled = true;\r
-        }\r
-        this.disabled = true;\r
-    },\r
-\r
-    
-    onEnable : function(){\r
-        if(this.el){\r
-            if(!Ext.isIE6){\r
-                this.el.removeClass("x-item-disabled");\r
-            }\r
-            this.el.child(this.buttonSelector).dom.disabled = false;\r
-            this.el.child(this.arrowSelector).dom.disabled = false;\r
-        }\r
-        this.disabled = false;\r
-    },\r
-\r
-    
-    isMenuTriggerOver : function(e){\r
-        return this.menu && e.within(this.arrowBtnTable) && !e.within(this.arrowBtnTable, true);\r
-    },\r
-\r
-    
-    isMenuTriggerOut : function(e, internal){\r
-        return this.menu && !e.within(this.arrowBtnTable);\r
-    },\r
-\r
-    
-    onDestroy : function(){\r
-        Ext.destroy(this.arrowBtnTable);\r
-        Ext.SplitButton.superclass.onDestroy.call(this);\r
-    }\r
-});\r
-\r
-
-Ext.MenuButton = Ext.SplitButton;\r
-\r
-\r
-Ext.reg('splitbutton', Ext.SplitButton);
-\r
-Ext.CycleButton = Ext.extend(Ext.SplitButton, {\r
-    \r
-    \r
-    \r
-    \r
-\r
-    
-    getItemText : function(item){\r
-        if(item && this.showText === true){\r
-            var text = '';\r
-            if(this.prependText){\r
-                text += this.prependText;\r
-            }\r
-            text += item.text;\r
-            return text;\r
-        }\r
-        return undefined;\r
-    },\r
-\r
-    \r
-    setActiveItem : function(item, suppressEvent){\r
-        if(typeof item != 'object'){\r
-            item = this.menu.items.get(item);\r
-        }\r
-        if(item){\r
-            if(!this.rendered){\r
-                this.text = this.getItemText(item);\r
-                this.iconCls = item.iconCls;\r
-            }else{\r
-                var t = this.getItemText(item);\r
-                if(t){\r
-                    this.setText(t);\r
-                }\r
-                this.setIconClass(item.iconCls);\r
-            }\r
-            this.activeItem = item;\r
-            if(!item.checked){\r
-                item.setChecked(true, true);\r
-            }\r
-            if(this.forceIcon){\r
-                this.setIconClass(this.forceIcon);\r
-            }\r
-            if(!suppressEvent){\r
-                this.fireEvent('change', this, item);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getActiveItem : function(){\r
-        return this.activeItem;\r
-    },\r
-\r
-    
-    initComponent : function(){\r
-        this.addEvents(\r
-            \r
-            "change"\r
-        );\r
-\r
-        if(this.changeHandler){\r
-            this.on('change', this.changeHandler, this.scope||this);\r
-            delete this.changeHandler;\r
-        }\r
-\r
-        this.itemCount = this.items.length;\r
-\r
-        this.menu = {cls:'x-cycle-menu', items:[]};\r
-        var checked;\r
-        for(var i = 0, len = this.itemCount; i < len; i++){\r
-            var item = this.items[i];\r
-            item.group = item.group || this.id;\r
-            item.itemIndex = i;\r
-            item.checkHandler = this.checkHandler;\r
-            item.scope = this;\r
-            item.checked = item.checked || false;\r
-            this.menu.items.push(item);\r
-            if(item.checked){\r
-                checked = item;\r
-            }\r
-        }\r
-        this.setActiveItem(checked, true);\r
-        Ext.CycleButton.superclass.initComponent.call(this);\r
-\r
-        this.on('click', this.toggleSelected, this);\r
-    },\r
-\r
-    
-    checkHandler : function(item, pressed){\r
-        if(pressed){\r
-            this.setActiveItem(item);\r
-        }\r
-    },\r
-\r
-    \r
-    toggleSelected : function(){\r
-        this.menu.render();\r
-               \r
-               var nextIdx, checkItem;\r
-               for (var i = 1; i < this.itemCount; i++) {\r
-                       nextIdx = (this.activeItem.itemIndex + i) % this.itemCount;\r
-                       
-                       checkItem = this.menu.items.itemAt(nextIdx);\r
-                       
-                       if (!checkItem.disabled) {\r
-                               checkItem.setChecked(true);\r
-                               break;\r
-                       }\r
-               }\r
-    }\r
-});\r
-Ext.reg('cycle', Ext.CycleButton);
\r
- Ext.Toolbar = function(config){\r
-    if(Ext.isArray(config)){\r
-        config = {buttons:config};\r
-    }\r
-    Ext.Toolbar.superclass.constructor.call(this, config);\r
-};\r
-\r
-(function(){\r
-\r
-var T = Ext.Toolbar;\r
-\r
-Ext.extend(T, Ext.BoxComponent, {\r
-\r
-    trackMenus : true,\r
-\r
-    
-    initComponent : function(){\r
-        T.superclass.initComponent.call(this);\r
-\r
-        if(this.items){\r
-            this.buttons = this.items;\r
-        }\r
-        \r
-        this.items = new Ext.util.MixedCollection(false, function(o){\r
-            return o.itemId || o.id || Ext.id();\r
-        });\r
-    },\r
-\r
-    
-    autoCreate: {\r
-        cls:'x-toolbar x-small-editor',\r
-        html:'<table cellspacing="0"><tr></tr></table>'\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        this.el = ct.createChild(Ext.apply({ id: this.id },this.autoCreate), position);\r
-        this.tr = this.el.child("tr", true);\r
-    },\r
-\r
-    
-    afterRender : function(){\r
-        T.superclass.afterRender.call(this);\r
-        if(this.buttons){\r
-            this.add.apply(this, this.buttons);\r
-            delete this.buttons;\r
-        }\r
-    },\r
-\r
-    \r
-    add : function(){\r
-        var a = arguments, l = a.length;\r
-        for(var i = 0; i < l; i++){\r
-            var el = a[i];\r
-            if(el.isFormField){ 
-                this.addField(el);\r
-            }else if(el.render){ 
-                this.addItem(el);\r
-            }else if(typeof el == "string"){ 
-                if(el == "separator" || el == "-"){\r
-                    this.addSeparator();\r
-                }else if(el == " "){\r
-                    this.addSpacer();\r
-                }else if(el == "->"){\r
-                    this.addFill();\r
-                }else{\r
-                    this.addText(el);\r
-                }\r
-            }else if(el.tagName){ 
-                this.addElement(el);\r
-            }else if(typeof el == "object"){ 
-                if(el.xtype){\r
-                    this.addField(Ext.ComponentMgr.create(el, 'button'));\r
-                }else{\r
-                    this.addButton(el);\r
-                }\r
-            }\r
-        }\r
-    },\r
-    \r
-    \r
-    addSeparator : function(){\r
-        return this.addItem(new T.Separator());\r
-    },\r
-\r
-    \r
-    addSpacer : function(){\r
-        return this.addItem(new T.Spacer());\r
-    },\r
-\r
-    \r
-    addFill : function(){\r
-        return this.addItem(new T.Fill());\r
-    },\r
-\r
-    \r
-    addElement : function(el){\r
-        return this.addItem(new T.Item(el));\r
-    },\r
-    \r
-    \r
-    addItem : function(item){\r
-        var td = this.nextBlock();\r
-        this.initMenuTracking(item);\r
-        item.render(td);\r
-        this.items.add(item);\r
-        return item;\r
-    },\r
-    \r
-    \r
-    addButton : function(config){\r
-        if(Ext.isArray(config)){\r
-            var buttons = [];\r
-            for(var i = 0, len = config.length; i < len; i++) {\r
-                buttons.push(this.addButton(config[i]));\r
-            }\r
-            return buttons;\r
-        }\r
-        var b = config;\r
-        if(!(config instanceof T.Button)){\r
-            b = config.split ? \r
-                new T.SplitButton(config) :\r
-                new T.Button(config);\r
-        }\r
-        var td = this.nextBlock();\r
-        this.initMenuTracking(b);\r
-        b.render(td);\r
-        this.items.add(b);\r
-        return b;\r
-    },\r
-\r
-    
-    initMenuTracking : function(item){\r
-        if(this.trackMenus && item.menu){\r
-            item.on({\r
-                'menutriggerover' : this.onButtonTriggerOver,\r
-                'menushow' : this.onButtonMenuShow,\r
-                'menuhide' : this.onButtonMenuHide,\r
-                scope: this\r
-            })\r
-        }\r
-    },\r
-\r
-    \r
-    addText : function(text){\r
-        return this.addItem(new T.TextItem(text));\r
-    },\r
-    \r
-    \r
-    insertButton : function(index, item){\r
-        if(Ext.isArray(item)){\r
-            var buttons = [];\r
-            for(var i = 0, len = item.length; i < len; i++) {\r
-               buttons.push(this.insertButton(index + i, item[i]));\r
-            }\r
-            return buttons;\r
-        }\r
-        if (!(item instanceof T.Button)){\r
-           item = new T.Button(item);\r
-        }\r
-        var td = document.createElement("td");\r
-        this.tr.insertBefore(td, this.tr.childNodes[index]);\r
-        this.initMenuTracking(item);\r
-        item.render(td);\r
-        this.items.insert(index, item);\r
-        return item;\r
-    },\r
-    \r
-    \r
-    addDom : function(config, returnEl){\r
-        var td = this.nextBlock();\r
-        Ext.DomHelper.overwrite(td, config);\r
-        var ti = new T.Item(td.firstChild);\r
-        ti.render(td);\r
-        this.items.add(ti);\r
-        return ti;\r
-    },\r
-\r
-    \r
-    addField : function(field){\r
-        var td = this.nextBlock();\r
-        field.render(td);\r
-        var ti = new T.Item(td.firstChild);\r
-        ti.render(td);\r
-        this.items.add(ti);\r
-        return ti;\r
-    },\r
-\r
-    
-    nextBlock : function(){\r
-        var td = document.createElement("td");\r
-        this.tr.appendChild(td);\r
-        return td;\r
-    },\r
-\r
-    
-    onDestroy : function(){\r
-        Ext.Toolbar.superclass.onDestroy.call(this);\r
-        if(this.rendered){\r
-            if(this.items){ 
-                Ext.destroy.apply(Ext, this.items.items);\r
-            }\r
-            Ext.Element.uncache(this.tr);\r
-        }\r
-    },\r
-\r
-    
-    onDisable : function(){\r
-        this.items.each(function(item){\r
-             if(item.disable){\r
-                 item.disable();\r
-             }\r
-        });\r
-    },\r
-\r
-    
-    onEnable : function(){\r
-        this.items.each(function(item){\r
-             if(item.enable){\r
-                 item.enable();\r
-             }\r
-        });\r
-    },\r
-\r
-    
-    onButtonTriggerOver : function(btn){\r
-        if(this.activeMenuBtn && this.activeMenuBtn != btn){\r
-            this.activeMenuBtn.hideMenu();\r
-            btn.showMenu();\r
-            this.activeMenuBtn = btn;\r
-        }\r
-    },\r
-\r
-    
-    onButtonMenuShow : function(btn){\r
-        this.activeMenuBtn = btn;\r
-    },\r
-\r
-    
-    onButtonMenuHide : function(btn){\r
-        delete this.activeMenuBtn;\r
-    }\r
-\r
-    \r
-});\r
-Ext.reg('toolbar', Ext.Toolbar);\r
-\r
-\r
-T.Item = function(el){\r
-    this.el = Ext.getDom(el);\r
-    this.id = Ext.id(this.el);\r
-    this.hidden = false;\r
-};\r
-\r
-T.Item.prototype = {\r
-    \r
-    \r
-    getEl : function(){\r
-       return this.el;  \r
-    },\r
-\r
-    
-    render : function(td){\r
-        this.td = td;\r
-        td.appendChild(this.el);\r
-    },\r
-    \r
-    \r
-    destroy : function(){\r
-        if(this.td && this.td.parentNode){\r
-            this.td.parentNode.removeChild(this.td);\r
-        }\r
-    },\r
-    \r
-    \r
-    show: function(){\r
-        this.hidden = false;\r
-        this.td.style.display = "";\r
-    },\r
-    \r
-    \r
-    hide: function(){\r
-        this.hidden = true;\r
-        this.td.style.display = "none";\r
-    },\r
-    \r
-    \r
-    setVisible: function(visible){\r
-        if(visible) {\r
-            this.show();\r
-        }else{\r
-            this.hide();\r
-        }\r
-    },\r
-    \r
-    \r
-    focus : function(){\r
-        Ext.fly(this.el).focus();\r
-    },\r
-    \r
-    \r
-    disable : function(){\r
-        Ext.fly(this.td).addClass("x-item-disabled");\r
-        this.disabled = true;\r
-        this.el.disabled = true;\r
-    },\r
-    \r
-    \r
-    enable : function(){\r
-        Ext.fly(this.td).removeClass("x-item-disabled");\r
-        this.disabled = false;\r
-        this.el.disabled = false;\r
-    }\r
-};\r
-Ext.reg('tbitem', T.Item);\r
-\r
-\r
-\r
-T.Separator = function(){\r
-    var s = document.createElement("span");\r
-    s.className = "ytb-sep";\r
-    T.Separator.superclass.constructor.call(this, s);\r
-};\r
-Ext.extend(T.Separator, T.Item, {\r
-    enable:Ext.emptyFn,\r
-    disable:Ext.emptyFn,\r
-    focus:Ext.emptyFn\r
-});\r
-Ext.reg('tbseparator', T.Separator);\r
-\r
-\r
-T.Spacer = function(){\r
-    var s = document.createElement("div");\r
-    s.className = "ytb-spacer";\r
-    T.Spacer.superclass.constructor.call(this, s);\r
-};\r
-Ext.extend(T.Spacer, T.Item, {\r
-    enable:Ext.emptyFn,\r
-    disable:Ext.emptyFn,\r
-    focus:Ext.emptyFn\r
-});\r
-\r
-Ext.reg('tbspacer', T.Spacer);\r
-\r
-\r
-T.Fill = Ext.extend(T.Spacer, {\r
-    
-    render : function(td){\r
-        td.style.width = '100%';\r
-        T.Fill.superclass.render.call(this, td);\r
-    }\r
-});\r
-Ext.reg('tbfill', T.Fill);\r
-\r
-\r
-T.TextItem = function(t){\r
-    var s = document.createElement("span");\r
-    s.className = "ytb-text";\r
-    s.innerHTML = t.text ? t.text : t;\r
-    T.TextItem.superclass.constructor.call(this, s);\r
-};\r
-Ext.extend(T.TextItem, T.Item, {\r
-    enable:Ext.emptyFn,\r
-    disable:Ext.emptyFn,\r
-    focus:Ext.emptyFn\r
-});\r
-Ext.reg('tbtext', T.TextItem);\r
-\r
-\r
-\r
-T.Button = Ext.extend(Ext.Button, {\r
-    hideParent : true,\r
-\r
-    onDestroy : function(){\r
-        T.Button.superclass.onDestroy.call(this);\r
-        if(this.container){\r
-            this.container.remove();\r
-        }\r
-    }\r
-});\r
-Ext.reg('tbbutton', T.Button);\r
-\r
-\r
-T.SplitButton = Ext.extend(Ext.SplitButton, {\r
-    hideParent : true,\r
-\r
-    onDestroy : function(){\r
-        T.SplitButton.superclass.onDestroy.call(this);\r
-        if(this.container){\r
-            this.container.remove();\r
-        }\r
-    }\r
-});\r
-\r
-Ext.reg('tbsplit', T.SplitButton);\r
-
-T.MenuButton = T.SplitButton;\r
-\r
-})();\r
-
-
-Ext.PagingToolbar = Ext.extend(Ext.Toolbar, {
-    
-    
-    
-    pageSize: 20,
-    
-    displayMsg : 'Displaying {0} - {1} of {2}',
-    
-    emptyMsg : 'No data to display',
-    
-    beforePageText : "Page",
-    
-    afterPageText : "of {0}",
-    
-    firstText : "First Page",
-    
-    prevText : "Previous Page",
-    
-    nextText : "Next Page",
-    
-    lastText : "Last Page",
-    
-    refreshText : "Refresh",
-
-    
-    paramNames : {start: 'start', limit: 'limit'},
-
-    initComponent : function(){
-        Ext.PagingToolbar.superclass.initComponent.call(this);
-        this.cursor = 0;
-        this.bind(this.store);
-    },
-
-        onRender : function(ct, position){
-        Ext.PagingToolbar.superclass.onRender.call(this, ct, position);
-        this.first = this.addButton({
-            tooltip: this.firstText,
-            iconCls: "x-tbar-page-first",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["first"])
-        });
-        this.prev = this.addButton({
-            tooltip: this.prevText,
-            iconCls: "x-tbar-page-prev",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["prev"])
-        });
-        this.addSeparator();
-        this.add(this.beforePageText);
-        this.field = Ext.get(this.addDom({
-           tag: "input",
-           type: "text",
-           size: "3",
-           value: "1",
-           cls: "x-tbar-page-number"
-        }).el);
-        this.field.on("keydown", this.onPagingKeydown, this);
-        this.field.on("focus", function(){this.dom.select();});
-        this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
-        this.field.setHeight(18);
-        this.addSeparator();
-        this.next = this.addButton({
-            tooltip: this.nextText,
-            iconCls: "x-tbar-page-next",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["next"])
-        });
-        this.last = this.addButton({
-            tooltip: this.lastText,
-            iconCls: "x-tbar-page-last",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["last"])
-        });
-        this.addSeparator();
-        this.loading = this.addButton({
-            tooltip: this.refreshText,
-            iconCls: "x-tbar-loading",
-            handler: this.onClick.createDelegate(this, ["refresh"])
-        });
-
-        if(this.displayInfo){
-            this.displayEl = Ext.fly(this.el.dom).createChild({cls:'x-paging-info'});
-        }
-        if(this.dsLoaded){
-            this.onLoad.apply(this, this.dsLoaded);
-        }
-    },
-
-        updateInfo : function(){
-        if(this.displayEl){
-            var count = this.store.getCount();
-            var msg = count == 0 ?
-                this.emptyMsg :
-                String.format(
-                    this.displayMsg,
-                    this.cursor+1, this.cursor+count, this.store.getTotalCount()
-                );
-            this.displayEl.update(msg);
-        }
-    },
-
-        onLoad : function(store, r, o){
-        if(!this.rendered){
-            this.dsLoaded = [store, r, o];
-            return;
-        }
-       this.cursor = o.params ? o.params[this.paramNames.start] : 0;
-       var d = this.getPageData(), ap = d.activePage, ps = d.pages;
-
-       this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
-       this.field.dom.value = ap;
-       this.first.setDisabled(ap == 1);
-       this.prev.setDisabled(ap == 1);
-       this.next.setDisabled(ap == ps);
-       this.last.setDisabled(ap == ps);
-       this.loading.enable();
-       this.updateInfo();
-    },
-
-        getPageData : function(){
-        var total = this.store.getTotalCount();
-        return {
-            total : total,
-            activePage : Math.ceil((this.cursor+this.pageSize)/this.pageSize),
-            pages :  total < this.pageSize ? 1 : Math.ceil(total/this.pageSize)
-        };
-    },
-
-        onLoadError : function(){
-        if(!this.rendered){
-            return;
-        }
-        this.loading.enable();
-    },
-
-    readPage : function(d){
-        var v = this.field.dom.value, pageNum;
-        if (!v || isNaN(pageNum = parseInt(v, 10))) {
-            this.field.dom.value = d.activePage;
-            return false;
-        }
-        return pageNum;
-    },
-
-        onPagingKeydown : function(e){
-        var k = e.getKey(), d = this.getPageData(), pageNum;
-        if (k == e.RETURN) {
-            e.stopEvent();
-            if(pageNum = this.readPage(d)){
-                pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
-                this.doLoad(pageNum * this.pageSize);
-            }
-        }else if (k == e.HOME || k == e.END){
-            e.stopEvent();
-            pageNum = k == e.HOME ? 1 : d.pages;
-            this.field.dom.value = pageNum;
-        }else if (k == e.UP || k == e.PAGEUP || k == e.DOWN || k == e.PAGEDOWN){
-            e.stopEvent();
-            if(pageNum = this.readPage(d)){
-                var increment = e.shiftKey ? 10 : 1;
-                if(k == e.DOWN || k == e.PAGEDOWN){
-                    increment *= -1;
-                }
-                pageNum += increment;
-                if(pageNum >= 1 & pageNum <= d.pages){
-                    this.field.dom.value = pageNum;
-                }
-            }
-        }
-    },
-
-        beforeLoad : function(){
-        if(this.rendered && this.loading){
-            this.loading.disable();
-        }
-    },
-
-    doLoad : function(start){
-        var o = {}, pn = this.paramNames;
-        o[pn.start] = start;
-        o[pn.limit] = this.pageSize;
-        this.store.load({params:o});
-    },
-
-        onClick : function(which){
-        var store = this.store;
-        switch(which){
-            case "first":
-                this.doLoad(0);
-            break;
-            case "prev":
-                this.doLoad(Math.max(0, this.cursor-this.pageSize));
-            break;
-            case "next":
-                this.doLoad(this.cursor+this.pageSize);
-            break;
-            case "last":
-                var total = store.getTotalCount();
-                var extra = total % this.pageSize;
-                var lastStart = extra ? (total - extra) : total-this.pageSize;
-                this.doLoad(lastStart);
-            break;
-            case "refresh":
-                this.doLoad(this.cursor);
-            break;
-        }
-    },
-
-    
-    unbind : function(store){
-        store = Ext.StoreMgr.lookup(store);
-        store.un("beforeload", this.beforeLoad, this);
-        store.un("load", this.onLoad, this);
-        store.un("loadexception", this.onLoadError, this);
-        this.store = undefined;
-    },
-
-    
-    bind : function(store){
-        store = Ext.StoreMgr.lookup(store);
-        store.on("beforeload", this.beforeLoad, this);
-        store.on("load", this.onLoad, this);
-        store.on("loadexception", this.onLoadError, this);
-        this.store = store;
-    }
-});
-Ext.reg('paging', Ext.PagingToolbar);
-\r
-Ext.Resizable = function(el, config){\r
-    this.el = Ext.get(el);\r
-    \r
-    if(config && config.wrap){\r
-        config.resizeChild = this.el;\r
-        this.el = this.el.wrap(typeof config.wrap == "object" ? config.wrap : {cls:"xresizable-wrap"});\r
-        this.el.id = this.el.dom.id = config.resizeChild.id + "-rzwrap";\r
-        this.el.setStyle("overflow", "hidden");\r
-        this.el.setPositioning(config.resizeChild.getPositioning());\r
-        config.resizeChild.clearPositioning();\r
-        if(!config.width || !config.height){\r
-            var csize = config.resizeChild.getSize();\r
-            this.el.setSize(csize.width, csize.height);\r
-        }\r
-        if(config.pinned && !config.adjustments){\r
-            config.adjustments = "auto";\r
-        }\r
-    }\r
-\r
-    this.proxy = this.el.createProxy({tag: "div", cls: "x-resizable-proxy", id: this.el.id + "-rzproxy"});\r
-    this.proxy.unselectable();\r
-    this.proxy.enableDisplayMode('block');\r
-\r
-    Ext.apply(this, config);\r
-    \r
-    if(this.pinned){\r
-        this.disableTrackOver = true;\r
-        this.el.addClass("x-resizable-pinned");\r
-    }\r
-    
-    var position = this.el.getStyle("position");\r
-    if(position != "absolute" && position != "fixed"){\r
-        this.el.setStyle("position", "relative");\r
-    }\r
-    if(!this.handles){ 
-        this.handles = 's,e,se';\r
-        if(this.multiDirectional){\r
-            this.handles += ',n,w';\r
-        }\r
-    }\r
-    if(this.handles == "all"){\r
-        this.handles = "n s e w ne nw se sw";\r
-    }\r
-    var hs = this.handles.split(/\s*?[,;]\s*?| /);\r
-    var ps = Ext.Resizable.positions;\r
-    for(var i = 0, len = hs.length; i < len; i++){\r
-        if(hs[i] && ps[hs[i]]){\r
-            var pos = ps[hs[i]];\r
-            this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent);\r
-        }\r
-    }\r
-    
-    this.corner = this.southeast;\r
-    \r
-    if(this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1){\r
-        this.updateBox = true;\r
-    }   \r
-   \r
-    this.activeHandle = null;\r
-    \r
-    if(this.resizeChild){\r
-        if(typeof this.resizeChild == "boolean"){\r
-            this.resizeChild = Ext.get(this.el.dom.firstChild, true);\r
-        }else{\r
-            this.resizeChild = Ext.get(this.resizeChild, true);\r
-        }\r
-    }\r
-    \r
-    if(this.adjustments == "auto"){\r
-        var rc = this.resizeChild;\r
-        var hw = this.west, he = this.east, hn = this.north, hs = this.south;\r
-        if(rc && (hw || hn)){\r
-            rc.position("relative");\r
-            rc.setLeft(hw ? hw.el.getWidth() : 0);\r
-            rc.setTop(hn ? hn.el.getHeight() : 0);\r
-        }\r
-        this.adjustments = [\r
-            (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),\r
-            (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1 \r
-        ];\r
-    }\r
-    \r
-    if(this.draggable){\r
-        this.dd = this.dynamic ? \r
-            this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});\r
-        this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id);\r
-    }\r
-    \r
-    
-    this.addEvents(\r
-        "beforeresize",\r
-        "resize"\r
-    );\r
-    \r
-    if(this.width !== null && this.height !== null){\r
-        this.resizeTo(this.width, this.height);\r
-    }else{\r
-        this.updateChildSize();\r
-    }\r
-    if(Ext.isIE){\r
-        this.el.dom.style.zoom = 1;\r
-    }\r
-    Ext.Resizable.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.Resizable, Ext.util.Observable, {\r
-        resizeChild : false,\r
-        adjustments : [0, 0],\r
-        minWidth : 5,\r
-        minHeight : 5,\r
-        maxWidth : 10000,\r
-        maxHeight : 10000,\r
-        enabled : true,\r
-        animate : false,\r
-        duration : .35,\r
-        dynamic : false,\r
-        handles : false,\r
-        multiDirectional : false,\r
-        disableTrackOver : false,\r
-        easing : 'easeOutStrong',\r
-        widthIncrement : 0,\r
-        heightIncrement : 0,\r
-        pinned : false,\r
-        width : null,\r
-        height : null,\r
-        preserveRatio : false,\r
-        transparent: false,\r
-        minX: 0,\r
-        minY: 0,\r
-        draggable: false,\r
-\r
-        \r
-        \r
-\r
-        \r
-        \r
-    \r
-    \r
-    resizeTo : function(width, height){\r
-        this.el.setSize(width, height);\r
-        this.updateChildSize();\r
-        this.fireEvent("resize", this, width, height, null);\r
-    },\r
-\r
-    
-    startSizing : function(e, handle){\r
-        this.fireEvent("beforeresize", this, e);\r
-        if(this.enabled){ 
-\r
-            if(!this.overlay){\r
-                this.overlay = this.el.createProxy({tag: "div", cls: "x-resizable-overlay", html: "&#160;"}, Ext.getBody());\r
-                this.overlay.unselectable();\r
-                this.overlay.enableDisplayMode("block");\r
-                this.overlay.on("mousemove", this.onMouseMove, this);\r
-                this.overlay.on("mouseup", this.onMouseUp, this);\r
-            }\r
-            this.overlay.setStyle("cursor", handle.el.getStyle("cursor"));\r
-\r
-            this.resizing = true;\r
-            this.startBox = this.el.getBox();\r
-            this.startPoint = e.getXY();\r
-            this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],\r
-                            (this.startBox.y + this.startBox.height) - this.startPoint[1]];\r
-\r
-            this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));\r
-            this.overlay.show();\r
-\r
-            if(this.constrainTo) {\r
-                var ct = Ext.get(this.constrainTo);\r
-                this.resizeRegion = ct.getRegion().adjust(\r
-                    ct.getFrameWidth('t'),\r
-                    ct.getFrameWidth('l'),\r
-                    -ct.getFrameWidth('b'),\r
-                    -ct.getFrameWidth('r')\r
-                );\r
-            }\r
-\r
-            this.proxy.setStyle('visibility', 'hidden'); 
-            this.proxy.show();\r
-            this.proxy.setBox(this.startBox);\r
-            if(!this.dynamic){\r
-                this.proxy.setStyle('visibility', 'visible');\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onMouseDown : function(handle, e){\r
-        if(this.enabled){\r
-            e.stopEvent();\r
-            this.activeHandle = handle;\r
-            this.startSizing(e, handle);\r
-        }          \r
-    },\r
-\r
-    
-    onMouseUp : function(e){\r
-        var size = this.resizeElement();\r
-        this.resizing = false;\r
-        this.handleOut();\r
-        this.overlay.hide();\r
-        this.proxy.hide();\r
-        this.fireEvent("resize", this, size.width, size.height, e);\r
-    },\r
-\r
-    
-    updateChildSize : function(){\r
-        if(this.resizeChild){\r
-            var el = this.el;\r
-            var child = this.resizeChild;\r
-            var adj = this.adjustments;\r
-            if(el.dom.offsetWidth){\r
-                var b = el.getSize(true);\r
-                child.setSize(b.width+adj[0], b.height+adj[1]);\r
-            }\r
-            
-            
-            
-            
-            if(Ext.isIE){\r
-                setTimeout(function(){\r
-                    if(el.dom.offsetWidth){\r
-                        var b = el.getSize(true);\r
-                        child.setSize(b.width+adj[0], b.height+adj[1]);\r
-                    }\r
-                }, 10);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    snap : function(value, inc, min){\r
-        if(!inc || !value) return value;\r
-        var newValue = value;\r
-        var m = value % inc;\r
-        if(m > 0){\r
-            if(m > (inc/2)){\r
-                newValue = value + (inc-m);\r
-            }else{\r
-                newValue = value - m;\r
-            }\r
-        }\r
-        return Math.max(min, newValue);\r
-    },\r
-\r
-    
-    resizeElement : function(){\r
-        var box = this.proxy.getBox();\r
-        if(this.updateBox){\r
-            this.el.setBox(box, false, this.animate, this.duration, null, this.easing);\r
-        }else{\r
-            this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);\r
-        }\r
-        this.updateChildSize();\r
-        if(!this.dynamic){\r
-            this.proxy.hide();\r
-        }\r
-        return box;\r
-    },\r
-\r
-    
-    constrain : function(v, diff, m, mx){\r
-        if(v - diff < m){\r
-            diff = v - m;    \r
-        }else if(v - diff > mx){\r
-            diff = mx - v; \r
-        }\r
-        return diff;                \r
-    },\r
-\r
-    
-    onMouseMove : function(e){\r
-        if(this.enabled){\r
-            try{
-\r
-            if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {\r
-               return;\r
-            }\r
-\r
-            
-            var curSize = this.curSize || this.startBox;\r
-            var x = this.startBox.x, y = this.startBox.y;\r
-            var ox = x, oy = y;\r
-            var w = curSize.width, h = curSize.height;\r
-            var ow = w, oh = h;\r
-            var mw = this.minWidth, mh = this.minHeight;\r
-            var mxw = this.maxWidth, mxh = this.maxHeight;\r
-            var wi = this.widthIncrement;\r
-            var hi = this.heightIncrement;\r
-            \r
-            var eventXY = e.getXY();\r
-            var diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0]));\r
-            var diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1]));\r
-            \r
-            var pos = this.activeHandle.position;\r
-            \r
-            switch(pos){\r
-                case "east":\r
-                    w += diffX; \r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    break;\r
-                case "south":\r
-                    h += diffY;\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    break;\r
-                case "southeast":\r
-                    w += diffX; \r
-                    h += diffY;\r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    break;\r
-                case "north":\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    break;\r
-                case "west":\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-                case "northeast":\r
-                    w += diffX; \r
-                    w = Math.min(Math.max(mw, w), mxw);\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    break;\r
-                case "northwest":\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    diffY = this.constrain(h, diffY, mh, mxh);\r
-                    y += diffY;\r
-                    h -= diffY;\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-               case "southwest":\r
-                    diffX = this.constrain(w, diffX, mw, mxw);\r
-                    h += diffY;\r
-                    h = Math.min(Math.max(mh, h), mxh);\r
-                    x += diffX;\r
-                    w -= diffX;\r
-                    break;\r
-            }\r
-            \r
-            var sw = this.snap(w, wi, mw);\r
-            var sh = this.snap(h, hi, mh);\r
-            if(sw != w || sh != h){\r
-                switch(pos){\r
-                    case "northeast":\r
-                        y -= sh - h;\r
-                    break;\r
-                    case "north":\r
-                        y -= sh - h;\r
-                        break;\r
-                    case "southwest":\r
-                        x -= sw - w;\r
-                    break;\r
-                    case "west":\r
-                        x -= sw - w;\r
-                        break;\r
-                    case "northwest":\r
-                        x -= sw - w;\r
-                        y -= sh - h;\r
-                    break;\r
-                }\r
-                w = sw;\r
-                h = sh;\r
-            }\r
-            \r
-            if(this.preserveRatio){\r
-                switch(pos){\r
-                    case "southeast":\r
-                    case "east":\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        w = ow * (h/oh);\r
-                       break;\r
-                    case "south":\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                        break;\r
-                    case "northeast":\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                    break;\r
-                    case "north":\r
-                        var tw = w;\r
-                        w = ow * (h/oh);\r
-                        w = Math.min(Math.max(mw, w), mxw);\r
-                        h = oh * (w/ow);\r
-                        x += (tw - w) / 2;\r
-                        break;\r
-                    case "southwest":\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        var tw = w;\r
-                        w = ow * (h/oh);\r
-                        x += tw - w;\r
-                        break;\r
-                    case "west":\r
-                        var th = h;\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        y += (th - h) / 2;\r
-                        var tw = w;\r
-                        w = ow * (h/oh);\r
-                        x += tw - w;\r
-                       break;\r
-                    case "northwest":\r
-                        var tw = w;\r
-                        var th = h;\r
-                        h = oh * (w/ow);\r
-                        h = Math.min(Math.max(mh, h), mxh);\r
-                        w = ow * (h/oh);\r
-                        y += th - h;\r
-                         x += tw - w;\r
-                       break;\r
-                        \r
-                }\r
-            }\r
-            this.proxy.setBounds(x, y, w, h);\r
-            if(this.dynamic){\r
-                this.resizeElement();\r
-            }\r
-            }catch(e){}\r
-        }\r
-    },\r
-\r
-    
-    handleOver : function(){\r
-        if(this.enabled){\r
-            this.el.addClass("x-resizable-over");\r
-        }\r
-    },\r
-\r
-    
-    handleOut : function(){\r
-        if(!this.resizing){\r
-            this.el.removeClass("x-resizable-over");\r
-        }\r
-    },\r
-    \r
-    \r
-    getEl : function(){\r
-        return this.el;\r
-    },\r
-    \r
-    \r
-    getResizeChild : function(){\r
-        return this.resizeChild;\r
-    },\r
-    \r
-    \r
-    destroy : function(removeEl){\r
-        this.proxy.remove();\r
-        if(this.overlay){\r
-            this.overlay.removeAllListeners();\r
-            this.overlay.remove();\r
-        }\r
-        var ps = Ext.Resizable.positions;\r
-        for(var k in ps){\r
-            if(typeof ps[k] != "function" && this[ps[k]]){\r
-                var h = this[ps[k]];\r
-                h.el.removeAllListeners();\r
-                h.el.remove();\r
-            }\r
-        }\r
-        if(removeEl){\r
-            this.el.update("");\r
-            this.el.remove();\r
-        }\r
-    },\r
-\r
-    syncHandleHeight : function(){\r
-        var h = this.el.getHeight(true);\r
-        if(this.west){\r
-            this.west.el.setHeight(h);\r
-        }\r
-        if(this.east){\r
-            this.east.el.setHeight(h);\r
-        }\r
-    }\r
-});\r
-\r
-
-
-Ext.Resizable.positions = {\r
-    n: "north", s: "south", e: "east", w: "west", se: "southeast", sw: "southwest", nw: "northwest", ne: "northeast"\r
-};\r
-\r
-
-Ext.Resizable.Handle = function(rz, pos, disableTrackOver, transparent){\r
-    if(!this.tpl){\r
-        
-        var tpl = Ext.DomHelper.createTemplate(\r
-            {tag: "div", cls: "x-resizable-handle x-resizable-handle-{0}"}\r
-        );\r
-        tpl.compile();\r
-        Ext.Resizable.Handle.prototype.tpl = tpl;\r
-    }\r
-    this.position = pos;\r
-    this.rz = rz;\r
-    this.el = this.tpl.append(rz.el.dom, [this.position], true);\r
-    this.el.unselectable();\r
-    if(transparent){\r
-        this.el.setOpacity(0);\r
-    }\r
-    this.el.on("mousedown", this.onMouseDown, this);\r
-    if(!disableTrackOver){\r
-        this.el.on("mouseover", this.onMouseOver, this);\r
-        this.el.on("mouseout", this.onMouseOut, this);\r
-    }\r
-};\r
-\r
-
-Ext.Resizable.Handle.prototype = {\r
-    afterResize : function(rz){\r
-        
-    },\r
-    
-    onMouseDown : function(e){\r
-        this.rz.onMouseDown(this, e);\r
-    },\r
-    
-    onMouseOver : function(e){\r
-        this.rz.handleOver(this, e);\r
-    },\r
-    
-    onMouseOut : function(e){\r
-        this.rz.handleOut(this, e);\r
-    }  \r
-};\r
-\r
-\r
-\r
-
-
-Ext.Editor = function(field, config){
-    this.field = field;
-    Ext.Editor.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.Editor, Ext.Component, {
-    
-    
-    
-    
-    
-    value : "",
-    
-    alignment: "c-c?",
-    
-    shadow : "frame",
-    
-    constrain : false,
-    
-    swallowKeys : true,
-    
-    completeOnEnter : false,
-    
-    cancelOnEsc : false,
-    
-    updateEl : false,
-
-    initComponent : function(){
-        Ext.Editor.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            "beforestartedit",
-            
-            "startedit",
-            
-            "beforecomplete",
-            
-            "complete",
-            
-            "specialkey"
-        );
-    },
-
-        onRender : function(ct, position){
-        this.el = new Ext.Layer({
-            shadow: this.shadow,
-            cls: "x-editor",
-            parentEl : ct,
-            shim : this.shim,
-            shadowOffset:4,
-            id: this.id,
-            constrain: this.constrain
-        });
-        this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
-        if(this.field.msgTarget != 'title'){
-            this.field.msgTarget = 'qtip';
-        }
-        this.field.inEditor = true;
-        this.field.render(this.el);
-        if(Ext.isGecko){
-            this.field.el.dom.setAttribute('autocomplete', 'off');
-        }
-        this.field.on("specialkey", this.onSpecialKey, this);
-        if(this.swallowKeys){
-            this.field.el.swallowEvent(['keydown','keypress']);
-        }
-        this.field.show();
-        this.field.on("blur", this.onBlur, this);
-        if(this.field.grow){
-            this.field.on("autosize", this.el.sync,  this.el, {delay:1});
-        }
-    },
-
-    onSpecialKey : function(field, e){
-        if(this.completeOnEnter && e.getKey() == e.ENTER){
-            e.stopEvent();
-            this.completeEdit();
-        }else if(this.cancelOnEsc && e.getKey() == e.ESC){
-            this.cancelEdit();
-        }else{
-            this.fireEvent('specialkey', field, e);
-        }
-    },
-
-    
-    startEdit : function(el, value){
-        if(this.editing){
-            this.completeEdit();
-        }
-        this.boundEl = Ext.get(el);
-        var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
-        if(!this.rendered){
-            this.render(this.parentEl || document.body);
-        }
-        if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
-            return;
-        }
-        this.startValue = v;
-        this.field.setValue(v);
-        this.doAutoSize();
-        this.el.alignTo(this.boundEl, this.alignment);
-        this.editing = true;
-        this.show();
-    },
-
-        doAutoSize : function(){
-        if(this.autoSize){
-            var sz = this.boundEl.getSize();
-            switch(this.autoSize){
-                case "width":
-                    this.setSize(sz.width,  "");
-                break;
-                case "height":
-                    this.setSize("",  sz.height);
-                break;
-                default:
-                    this.setSize(sz.width,  sz.height);
-            }
-        }
-    },
-
-    
-    setSize : function(w, h){
-        delete this.field.lastSize;
-        this.field.setSize(w, h);
-        if(this.el){
-            this.el.sync();
-        }
-    },
-
-    
-    realign : function(){
-        this.el.alignTo(this.boundEl, this.alignment);
-    },
-
-    
-    completeEdit : function(remainVisible){
-        if(!this.editing){
-            return;
-        }
-        var v = this.getValue();
-        if(this.revertInvalid !== false && !this.field.isValid()){
-            v = this.startValue;
-            this.cancelEdit(true);
-        }
-        if(String(v) === String(this.startValue) && this.ignoreNoChange){
-            this.editing = false;
-            this.hide();
-            return;
-        }
-        if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){
-            this.editing = false;
-            if(this.updateEl && this.boundEl){
-                this.boundEl.update(v);
-            }
-            if(remainVisible !== true){
-                this.hide();
-            }
-            this.fireEvent("complete", this, v, this.startValue);
-        }
-    },
-
-        onShow : function(){
-        this.el.show();
-        if(this.hideEl !== false){
-            this.boundEl.hide();
-        }
-        this.field.show();
-        if(Ext.isIE && !this.fixIEFocus){             this.fixIEFocus = true;
-            this.deferredFocus.defer(50, this);
-        }else{
-            this.field.focus();
-        }
-        this.fireEvent("startedit", this.boundEl, this.startValue);
-    },
-
-    deferredFocus : function(){
-        if(this.editing){
-            this.field.focus();
-        }
-    },
-
-    
-    cancelEdit : function(remainVisible){
-        if(this.editing){
-            this.setValue(this.startValue);
-            if(remainVisible !== true){
-                this.hide();
-            }
-        }
-    },
-
-        onBlur : function(){
-        if(this.allowBlur !== true && this.editing){
-            this.completeEdit();
-        }
-    },
-
-        onHide : function(){
-        if(this.editing){
-            this.completeEdit();
-            return;
-        }
-        this.field.blur();
-        if(this.field.collapse){
-            this.field.collapse();
-        }
-        this.el.hide();
-        if(this.hideEl !== false){
-            this.boundEl.show();
-        }
-    },
-
-    
-    setValue : function(v){
-        this.field.setValue(v);
-    },
-
-    
-    getValue : function(){
-        return this.field.getValue();
-    },
-
-    beforeDestroy : function(){
-        this.field.destroy();
-        this.field = null;
-    }
-});
-Ext.reg('editor', Ext.Editor);
-\r
-Ext.MessageBox = function(){\r
-    var dlg, opt, mask, waitTimer;\r
-    var bodyEl, msgEl, textboxEl, textareaEl, progressBar, pp, iconEl, spacerEl;\r
-    var buttons, activeTextEl, bwidth, iconCls = '';\r
-\r
-    
-    var handleButton = function(button){\r
-        dlg.hide();\r
-        Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1);\r
-    };\r
-\r
-    
-    var handleHide = function(){\r
-        if(opt && opt.cls){\r
-            dlg.el.removeClass(opt.cls);\r
-        }\r
-        progressBar.reset();\r
-    };\r
-\r
-    
-    var handleEsc = function(d, k, e){\r
-        if(opt && opt.closable !== false){\r
-            dlg.hide();\r
-        }\r
-        if(e){\r
-            e.stopEvent();\r
-        }\r
-    };\r
-\r
-    
-    var updateButtons = function(b){\r
-        var width = 0;\r
-        if(!b){\r
-            buttons["ok"].hide();\r
-            buttons["cancel"].hide();\r
-            buttons["yes"].hide();\r
-            buttons["no"].hide();\r
-            return width;\r
-        }\r
-        dlg.footer.dom.style.display = '';\r
-        for(var k in buttons){\r
-            if(typeof buttons[k] != "function"){\r
-                if(b[k]){\r
-                    buttons[k].show();\r
-                    buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]);\r
-                    width += buttons[k].el.getWidth()+15;\r
-                }else{\r
-                    buttons[k].hide();\r
-                }\r
-            }\r
-        }\r
-        return width;\r
-    };\r
-\r
-    return {\r
-        \r
-        getDialog : function(titleText){\r
-           if(!dlg){\r
-                dlg = new Ext.Window({\r
-                    autoCreate : true,\r
-                    title:titleText,\r
-                    resizable:false,\r
-                    constrain:true,\r
-                    constrainHeader:true,\r
-                    minimizable : false,\r
-                    maximizable : false,\r
-                    stateful: false,\r
-                    modal: true,\r
-                    shim:true,\r
-                    buttonAlign:"center",\r
-                    width:400,\r
-                    height:100,\r
-                    minHeight: 80,\r
-                    plain:true,\r
-                    footer:true,\r
-                    closable:true,\r
-                    close : function(){\r
-                        if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){\r
-                            handleButton("no");\r
-                        }else{\r
-                            handleButton("cancel");\r
-                        }\r
-                    }\r
-                });\r
-                buttons = {};\r
-                var bt = this.buttonText;\r
-                
-                buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok"));\r
-                buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes"));\r
-                buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no"));\r
-                buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel"));\r
-                buttons["ok"].hideMode = buttons["yes"].hideMode = buttons["no"].hideMode = buttons["cancel"].hideMode = 'offsets';\r
-                dlg.render(document.body);\r
-                dlg.getEl().addClass('x-window-dlg');\r
-                mask = dlg.mask;\r
-                bodyEl = dlg.body.createChild({\r
-                    html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div>'\r
-                });\r
-                iconEl = Ext.get(bodyEl.dom.firstChild);\r
-                var contentEl = bodyEl.dom.childNodes[1];\r
-                msgEl = Ext.get(contentEl.firstChild);\r
-                textboxEl = Ext.get(contentEl.childNodes[2]);\r
-                textboxEl.enableDisplayMode();\r
-                textboxEl.addKeyListener([10,13], function(){\r
-                    if(dlg.isVisible() && opt && opt.buttons){\r
-                        if(opt.buttons.ok){\r
-                            handleButton("ok");\r
-                        }else if(opt.buttons.yes){\r
-                            handleButton("yes");\r
-                        }\r
-                    }\r
-                });\r
-                textareaEl = Ext.get(contentEl.childNodes[3]);\r
-                textareaEl.enableDisplayMode();\r
-                progressBar = new Ext.ProgressBar({\r
-                    renderTo:bodyEl\r
-                });\r
-               bodyEl.createChild({cls:'x-clear'});\r
-            }\r
-            return dlg;\r
-        },\r
-\r
-        \r
-        updateText : function(text){\r
-            if(!dlg.isVisible() && !opt.width){\r
-                dlg.setSize(this.maxWidth, 100); 
-            }\r
-            msgEl.update(text || '&#160;');\r
-\r
-            var iw = iconCls != '' ? (iconEl.getWidth() + iconEl.getMargins('lr')) : 0;\r
-            var mw = msgEl.getWidth() + msgEl.getMargins('lr');\r
-            var fw = dlg.getFrameWidth('lr');\r
-            var bw = dlg.body.getFrameWidth('lr');\r
-            if (Ext.isIE && iw > 0){\r
-                
-                
-                iw += 3;\r
-            }\r
-            var w = Math.max(Math.min(opt.width || iw+mw+fw+bw, this.maxWidth),\r
-                        Math.max(opt.minWidth || this.minWidth, bwidth || 0));\r
-\r
-            if(opt.prompt === true){\r
-                activeTextEl.setWidth(w-iw-fw-bw);\r
-            }\r
-            if(opt.progress === true || opt.wait === true){\r
-                progressBar.setSize(w-iw-fw-bw);\r
-            }\r
-            dlg.setSize(w, 'auto').center();\r
-            return this;\r
-        },\r
-\r
-        \r
-        updateProgress : function(value, progressText, msg){\r
-            progressBar.updateProgress(value, progressText);\r
-            if(msg){\r
-                this.updateText(msg);\r
-            }\r
-            return this;\r
-        },\r
-\r
-        \r
-        isVisible : function(){\r
-            return dlg && dlg.isVisible();\r
-        },\r
-\r
-        \r
-        hide : function(){\r
-            if(this.isVisible()){\r
-                dlg.hide();\r
-                handleHide();\r
-            }\r
-            return this;\r
-        },\r
-\r
-        \r
-        show : function(options){\r
-            if(this.isVisible()){\r
-                this.hide();\r
-            }\r
-            opt = options;\r
-            var d = this.getDialog(opt.title || "&#160;");\r
-\r
-            d.setTitle(opt.title || "&#160;");\r
-            var allowClose = (opt.closable !== false && opt.progress !== true && opt.wait !== true);\r
-            d.tools.close.setDisplayed(allowClose);\r
-            activeTextEl = textboxEl;\r
-            opt.prompt = opt.prompt || (opt.multiline ? true : false);\r
-            if(opt.prompt){\r
-                if(opt.multiline){\r
-                    textboxEl.hide();\r
-                    textareaEl.show();\r
-                    textareaEl.setHeight(typeof opt.multiline == "number" ?\r
-                        opt.multiline : this.defaultTextHeight);\r
-                    activeTextEl = textareaEl;\r
-                }else{\r
-                    textboxEl.show();\r
-                    textareaEl.hide();\r
-                }\r
-            }else{\r
-                textboxEl.hide();\r
-                textareaEl.hide();\r
-            }\r
-            activeTextEl.dom.value = opt.value || "";\r
-            if(opt.prompt){\r
-                d.focusEl = activeTextEl;\r
-            }else{\r
-                var bs = opt.buttons;\r
-                var db = null;\r
-                if(bs && bs.ok){\r
-                    db = buttons["ok"];\r
-                }else if(bs && bs.yes){\r
-                    db = buttons["yes"];\r
-                }\r
-                if (db){\r
-                    d.focusEl = db;\r
-                }\r
-            }\r
-            this.setIcon(opt.icon);\r
-            bwidth = updateButtons(opt.buttons);\r
-            progressBar.setVisible(opt.progress === true || opt.wait === true);\r
-            this.updateProgress(0, opt.progressText);\r
-            this.updateText(opt.msg);\r
-            if(opt.cls){\r
-                d.el.addClass(opt.cls);\r
-            }\r
-            d.proxyDrag = opt.proxyDrag === true;\r
-            d.modal = opt.modal !== false;\r
-            d.mask = opt.modal !== false ? mask : false;\r
-            if(!d.isVisible()){\r
-                
-                document.body.appendChild(dlg.el.dom);\r
-                d.setAnimateTarget(opt.animEl);\r
-                d.show(opt.animEl);\r
-            }\r
-\r
-            
-            d.on('show', function(){\r
-                if(allowClose === true){\r
-                    d.keyMap.enable();\r
-                }else{\r
-                    d.keyMap.disable();\r
-                }\r
-            }, this, {single:true});\r
-\r
-            if(opt.wait === true){\r
-                progressBar.wait(opt.waitConfig);\r
-            }\r
-            return this;\r
-        },\r
-\r
-        \r
-        setIcon : function(icon){\r
-            if(icon && icon != ''){\r
-                iconEl.removeClass('x-hidden');\r
-                iconEl.replaceClass(iconCls, icon);\r
-                iconCls = icon;\r
-            }else{\r
-                iconEl.replaceClass(iconCls, 'x-hidden');\r
-                iconCls = '';\r
-            }\r
-            return this;\r
-        },\r
-\r
-        \r
-        progress : function(title, msg, progressText){\r
-            this.show({\r
-                title : title,\r
-                msg : msg,\r
-                buttons: false,\r
-                progress:true,\r
-                closable:false,\r
-                minWidth: this.minProgressWidth,\r
-                progressText: progressText\r
-            });\r
-            return this;\r
-        },\r
-\r
-        \r
-        wait : function(msg, title, config){\r
-            this.show({\r
-                title : title,\r
-                msg : msg,\r
-                buttons: false,\r
-                closable:false,\r
-                wait:true,\r
-                modal:true,\r
-                minWidth: this.minProgressWidth,\r
-                waitConfig: config\r
-            });\r
-            return this;\r
-        },\r
-\r
-        \r
-        alert : function(title, msg, fn, scope){\r
-            this.show({\r
-                title : title,\r
-                msg : msg,\r
-                buttons: this.OK,\r
-                fn: fn,\r
-                scope : scope\r
-            });\r
-            return this;\r
-        },\r
-\r
-        \r
-        confirm : function(title, msg, fn, scope){\r
-            this.show({\r
-                title : title,\r
-                msg : msg,\r
-                buttons: this.YESNO,\r
-                fn: fn,\r
-                scope : scope,\r
-                icon: this.QUESTION\r
-            });\r
-            return this;\r
-        },\r
-\r
-        \r
-        prompt : function(title, msg, fn, scope, multiline){\r
-            this.show({\r
-                title : title,\r
-                msg : msg,\r
-                buttons: this.OKCANCEL,\r
-                fn: fn,\r
-                minWidth:250,\r
-                scope : scope,\r
-                prompt:true,\r
-                multiline: multiline\r
-            });\r
-            return this;\r
-        },\r
-\r
-        \r
-        OK : {ok:true},\r
-        \r
-        CANCEL : {cancel:true},\r
-        \r
-        OKCANCEL : {ok:true, cancel:true},\r
-        \r
-        YESNO : {yes:true, no:true},\r
-        \r
-        YESNOCANCEL : {yes:true, no:true, cancel:true},\r
-        \r
-        INFO : 'ext-mb-info',\r
-        \r
-        WARNING : 'ext-mb-warning',\r
-        \r
-        QUESTION : 'ext-mb-question',\r
-        \r
-        ERROR : 'ext-mb-error',\r
-\r
-        \r
-        defaultTextHeight : 75,\r
-        \r
-        maxWidth : 600,\r
-        \r
-        minWidth : 100,\r
-        \r
-        minProgressWidth : 250,\r
-        \r
-        buttonText : {\r
-            ok : "OK",\r
-            cancel : "Cancel",\r
-            yes : "Yes",\r
-            no : "No"\r
-        }\r
-    };\r
-}();\r
-\r
-\r
-Ext.Msg = Ext.MessageBox;
-\r
-Ext.Tip = Ext.extend(Ext.Panel, {\r
-    \r
-    \r
-    \r
-    minWidth : 40,\r
-    \r
-    maxWidth : 300,\r
-    \r
-    shadow : "sides",\r
-    \r
-    defaultAlign : "tl-bl?",\r
-    autoRender: true,\r
-    quickShowInterval : 250,\r
-\r
-    
-    frame:true,\r
-    hidden:true,\r
-    baseCls: 'x-tip',\r
-    floating:{shadow:true,shim:true,useDisplay:true,constrain:false},\r
-    autoHeight:true,\r
-\r
-    
-    initComponent : function(){\r
-        Ext.Tip.superclass.initComponent.call(this);\r
-        if(this.closable && !this.title){\r
-            this.elements += ',header';\r
-        }\r
-    },\r
-\r
-    
-    afterRender : function(){\r
-        Ext.Tip.superclass.afterRender.call(this);\r
-        if(this.closable){\r
-            this.addTool({\r
-                id: 'close',\r
-                handler: this.hide,\r
-                scope: this\r
-            });\r
-        }\r
-    },\r
-\r
-    \r
-    showAt : function(xy){\r
-        Ext.Tip.superclass.show.call(this);\r
-        if(this.measureWidth !== false && (!this.initialConfig || typeof this.initialConfig.width != 'number')){\r
-            var bw = this.body.getTextWidth();\r
-            if(this.title){\r
-                bw = Math.max(bw, this.header.child('span').getTextWidth(this.title));\r
-            }\r
-            bw += this.getFrameWidth() + (this.closable ? 20 : 0) + this.body.getPadding("lr");\r
-            this.setWidth(bw.constrain(this.minWidth, this.maxWidth));\r
-        }\r
-        if(this.constrainPosition){\r
-            xy = this.el.adjustForConstraints(xy);\r
-        }\r
-        this.setPagePosition(xy[0], xy[1]);\r
-    },\r
-\r
-    \r
-    showBy : function(el, pos){\r
-        if(!this.rendered){\r
-            this.render(Ext.getBody());\r
-        }\r
-        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign));\r
-    },\r
-\r
-    initDraggable : function(){\r
-        this.dd = new Ext.Tip.DD(this, typeof this.draggable == 'boolean' ? null : this.draggable);\r
-        this.header.addClass('x-tip-draggable');\r
-    }\r
-});\r
-\r
-
-Ext.Tip.DD = function(tip, config){\r
-    Ext.apply(this, config);\r
-    this.tip = tip;\r
-    Ext.Tip.DD.superclass.constructor.call(this, tip.el.id, 'WindowDD-'+tip.id);\r
-    this.setHandleElId(tip.header.id);\r
-    this.scroll = false;\r
-};\r
-\r
-Ext.extend(Ext.Tip.DD, Ext.dd.DD, {\r
-    moveOnly:true,\r
-    scroll:false,\r
-    headerOffsets:[100, 25],\r
-    startDrag : function(){\r
-        this.tip.el.disableShadow();\r
-    },\r
-    endDrag : function(e){\r
-        this.tip.el.enableShadow(true);\r
-    }\r
-});
-\r
-Ext.ToolTip = Ext.extend(Ext.Tip, {\r
-    \r
-    \r
-    \r
-    showDelay: 500,\r
-    \r
-    hideDelay: 200,\r
-    \r
-    dismissDelay: 5000,\r
-    \r
-    mouseOffset: [15,18],\r
-    \r
-    trackMouse : false,\r
-    constrainPosition: true,\r
-\r
-    
-    initComponent: function(){\r
-        Ext.ToolTip.superclass.initComponent.call(this);\r
-        this.lastActive = new Date();\r
-        this.initTarget();\r
-    },\r
-\r
-    
-    initTarget : function(){\r
-        if(this.target){\r
-            this.target = Ext.get(this.target);\r
-            this.target.on('mouseover', this.onTargetOver, this);\r
-            this.target.on('mouseout', this.onTargetOut, this);\r
-            this.target.on('mousemove', this.onMouseMove, this);\r
-        }\r
-    },\r
-\r
-    
-    onMouseMove : function(e){\r
-        this.targetXY = e.getXY();\r
-        if(!this.hidden && this.trackMouse){\r
-            this.setPagePosition(this.getTargetXY());\r
-        }\r
-    },\r
-\r
-    
-    getTargetXY : function(){\r
-        return [this.targetXY[0]+this.mouseOffset[0], this.targetXY[1]+this.mouseOffset[1]];\r
-    },\r
-\r
-    
-    onTargetOver : function(e){\r
-        if(this.disabled || e.within(this.target.dom, true)){\r
-            return;\r
-        }\r
-        this.clearTimer('hide');\r
-        this.targetXY = e.getXY();\r
-        this.delayShow();\r
-    },\r
-\r
-    
-    delayShow : function(){\r
-        if(this.hidden && !this.showTimer){\r
-            if(this.lastActive.getElapsed() < this.quickShowInterval){\r
-                this.show();\r
-            }else{\r
-                this.showTimer = this.show.defer(this.showDelay, this);\r
-            }\r
-        }else if(!this.hidden && this.autoHide !== false){\r
-            this.show();\r
-        }\r
-    },\r
-\r
-    
-    onTargetOut : function(e){\r
-        if(this.disabled || e.within(this.target.dom, true)){\r
-            return;\r
-        }\r
-        this.clearTimer('show');\r
-        if(this.autoHide !== false){\r
-            this.delayHide();\r
-        }\r
-    },\r
-\r
-    
-    delayHide : function(){\r
-        if(!this.hidden && !this.hideTimer){\r
-            this.hideTimer = this.hide.defer(this.hideDelay, this);\r
-        }\r
-    },\r
-\r
-    \r
-    hide: function(){\r
-        this.clearTimer('dismiss');\r
-        this.lastActive = new Date();\r
-        Ext.ToolTip.superclass.hide.call(this);\r
-    },\r
-\r
-    \r
-    show : function(){\r
-        this.showAt(this.getTargetXY());\r
-    },\r
-\r
-    
-    showAt : function(xy){\r
-        this.lastActive = new Date();\r
-        this.clearTimers();\r
-        Ext.ToolTip.superclass.showAt.call(this, xy);\r
-        if(this.dismissDelay && this.autoHide !== false){\r
-            this.dismissTimer = this.hide.defer(this.dismissDelay, this);\r
-        }\r
-    },\r
-\r
-    
-    clearTimer : function(name){\r
-        name = name + 'Timer';\r
-        clearTimeout(this[name]);\r
-        delete this[name];\r
-    },\r
-\r
-    
-    clearTimers : function(){\r
-        this.clearTimer('show');\r
-        this.clearTimer('dismiss');\r
-        this.clearTimer('hide');\r
-    },\r
-\r
-    
-    onShow : function(){\r
-        Ext.ToolTip.superclass.onShow.call(this);\r
-        Ext.getDoc().on('mousedown', this.onDocMouseDown, this);\r
-    },\r
-\r
-    
-    onHide : function(){\r
-        Ext.ToolTip.superclass.onHide.call(this);\r
-        Ext.getDoc().un('mousedown', this.onDocMouseDown, this);\r
-    },\r
-\r
-    
-    onDocMouseDown : function(e){\r
-        if(this.autoHide !== false && !e.within(this.el.dom)){\r
-            this.disable();\r
-            this.enable.defer(100, this);\r
-        }\r
-    },\r
-\r
-    
-    onDisable : function(){\r
-        this.clearTimers();\r
-        this.hide();\r
-    },\r
-\r
-    
-    adjustPosition : function(x, y){\r
-        
-        var ay = this.targetXY[1], h = this.getSize().height;\r
-        if(this.constrainPosition && y <= ay && (y+h) >= ay){\r
-            y = ay-h-5;\r
-        }\r
-        return {x : x, y: y};\r
-    },\r
-\r
-    
-    onDestroy : function(){\r
-        Ext.ToolTip.superclass.onDestroy.call(this);\r
-        if(this.target){\r
-            this.target.un('mouseover', this.onTargetOver, this);\r
-            this.target.un('mouseout', this.onTargetOut, this);\r
-            this.target.un('mousemove', this.onMouseMove, this);\r
-        }\r
-    }\r
-});
-\r
-Ext.QuickTip = Ext.extend(Ext.ToolTip, {\r
-    \r
-    \r
-    interceptTitles : false,\r
-\r
-    
-    tagConfig : {\r
-        namespace : "ext",\r
-        attribute : "qtip",\r
-        width : "qwidth",\r
-        target : "target",\r
-        title : "qtitle",\r
-        hide : "hide",\r
-        cls : "qclass",\r
-        align : "qalign"\r
-    },\r
-\r
-    
-    initComponent : function(){\r
-        this.target = this.target || Ext.getDoc();\r
-        this.targets = this.targets || {};\r
-        Ext.QuickTip.superclass.initComponent.call(this);\r
-    },\r
-\r
-    \r
-    register : function(config){\r
-        var cs = Ext.isArray(config) ? config : arguments;\r
-        for(var i = 0, len = cs.length; i < len; i++){\r
-            var c = cs[i];\r
-            var target = c.target;\r
-            if(target){\r
-                if(Ext.isArray(target)){\r
-                    for(var j = 0, jlen = target.length; j < jlen; j++){\r
-                        this.targets[Ext.id(target[j])] = c;\r
-                    }\r
-                } else{\r
-                    this.targets[Ext.id(target)] = c;\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    unregister : function(el){\r
-        delete this.targets[Ext.id(el)];\r
-    },\r
-\r
-    
-    onTargetOver : function(e){\r
-        if(this.disabled){\r
-            return;\r
-        }\r
-        this.targetXY = e.getXY();\r
-        var t = e.getTarget();\r
-        if(!t || t.nodeType !== 1 || t == document || t == document.body){\r
-            return;\r
-        }\r
-        if(this.activeTarget && t == this.activeTarget.el){\r
-            this.clearTimer('hide');\r
-            this.show();\r
-            return;\r
-        }\r
-        if(t && this.targets[t.id]){\r
-            this.activeTarget = this.targets[t.id];\r
-            this.activeTarget.el = t;\r
-            this.delayShow();\r
-            return;\r
-        }\r
-        var ttp, et = Ext.fly(t), cfg = this.tagConfig;\r
-        var ns = cfg.namespace;\r
-        if(this.interceptTitles && t.title){\r
-            ttp = t.title;\r
-            t.qtip = ttp;\r
-            t.removeAttribute("title");\r
-            e.preventDefault();\r
-        } else{\r
-            ttp = t.qtip || et.getAttributeNS(ns, cfg.attribute);\r
-        }\r
-        if(ttp){\r
-            var autoHide = et.getAttributeNS(ns, cfg.hide);\r
-            this.activeTarget = {\r
-                el: t,\r
-                text: ttp,\r
-                width: et.getAttributeNS(ns, cfg.width),\r
-                autoHide: autoHide != "user" && autoHide !== 'false',\r
-                title: et.getAttributeNS(ns, cfg.title),\r
-                cls: et.getAttributeNS(ns, cfg.cls),\r
-                align: et.getAttributeNS(ns, cfg.align)\r
-            };\r
-            this.delayShow();\r
-        }\r
-    },\r
-\r
-    
-    onTargetOut : function(e){\r
-        this.clearTimer('show');\r
-        if(this.autoHide !== false){\r
-            this.delayHide();\r
-        }\r
-    },\r
-\r
-    
-    showAt : function(xy){\r
-        var t = this.activeTarget;\r
-        if(t){\r
-            if(!this.rendered){\r
-                this.render(Ext.getBody());\r
-                this.activeTarget = t;\r
-            }\r
-            if(t.width){\r
-                this.setWidth(t.width);\r
-                this.body.setWidth(this.adjustBodyWidth(t.width - this.getFrameWidth()));\r
-                this.measureWidth = false;\r
-            } else{\r
-                this.measureWidth = true;\r
-            }\r
-            this.setTitle(t.title || '');\r
-            this.body.update(t.text);\r
-            this.autoHide = t.autoHide;\r
-            this.dismissDelay = t.dismissDelay || this.dismissDelay;\r
-            if(this.lastCls){\r
-                this.el.removeClass(this.lastCls);\r
-                delete this.lastCls;\r
-            }\r
-            if(t.cls){\r
-                this.el.addClass(t.cls);\r
-                this.lastCls = t.cls;\r
-            }\r
-            if(t.align){ 
-                xy = this.el.getAlignToXY(t.el, t.align);\r
-                this.constrainPosition = false;\r
-            } else{\r
-                this.constrainPosition = true;\r
-            }\r
-        }\r
-        Ext.QuickTip.superclass.showAt.call(this, xy);\r
-    },\r
-\r
-    
-    hide: function(){\r
-        delete this.activeTarget;\r
-        Ext.QuickTip.superclass.hide.call(this);\r
-    }\r
-});
-\r
-Ext.QuickTips = function(){\r
-    var tip, locks = [];\r
-    return {\r
-        \r
-        init : function(){\r
-            if(!tip){\r
-                tip = new Ext.QuickTip({elements:'header,body'});\r
-            }\r
-        },\r
-\r
-        \r
-        enable : function(){\r
-            if(tip){\r
-                locks.pop();\r
-                if(locks.length < 1){\r
-                    tip.enable();\r
-                }\r
-            }\r
-        },\r
-\r
-        \r
-        disable : function(){\r
-            if(tip){\r
-                tip.disable();\r
-            }\r
-            locks.push(1);\r
-        },\r
-\r
-        \r
-        isEnabled : function(){\r
-            return tip && !tip.disabled;\r
-        },\r
-\r
-        \r
-        getQuickTip : function(){\r
-            return tip;\r
-        },\r
-\r
-        \r
-        register : function(){\r
-            tip.register.apply(tip, arguments);\r
-        },\r
-\r
-        \r
-        unregister : function(){\r
-            tip.unregister.apply(tip, arguments);\r
-        },\r
-\r
-        \r
-        tips :function(){\r
-            tip.register.apply(tip, arguments);\r
-        }\r
-    }\r
-}();
-\r
-Ext.tree.TreePanel = Ext.extend(Ext.Panel, {\r
-    rootVisible : true,\r
-    animate: Ext.enableFx,\r
-    lines : true,\r
-    enableDD : false,\r
-    hlDrop : Ext.enableFx,\r
-    pathSeparator: "/",\r
-\r
-    initComponent : function(){\r
-        Ext.tree.TreePanel.superclass.initComponent.call(this);\r
-\r
-        if(!this.eventModel){\r
-            this.eventModel = new Ext.tree.TreeEventModel(this);\r
-        }\r
-        \r
-        this.nodeHash = {};\r
-\r
-        \r
-        if(this.root){\r
-           this.setRootNode(this.root);\r
-        }\r
-\r
-        this.addEvents(\r
-\r
-            \r
-           "append",\r
-           \r
-           "remove",\r
-           \r
-           "movenode",\r
-           \r
-           "insert",\r
-           \r
-           "beforeappend",\r
-           \r
-           "beforeremove",\r
-           \r
-           "beforemovenode",\r
-           \r
-            "beforeinsert",\r
-\r
-            \r
-            "beforeload",\r
-            \r
-            "load",\r
-            \r
-            "textchange",\r
-            \r
-            "beforeexpandnode",\r
-            \r
-            "beforecollapsenode",\r
-            \r
-            "expandnode",\r
-            \r
-            "disabledchange",\r
-            \r
-            "collapsenode",\r
-            \r
-            "beforeclick",\r
-            \r
-            "click",\r
-            \r
-            "checkchange",\r
-            \r
-            "dblclick",\r
-            \r
-            "contextmenu",\r
-            \r
-            "beforechildrenrendered",\r
-           \r
-            "startdrag",\r
-            \r
-            "enddrag",\r
-            \r
-            "dragdrop",\r
-            \r
-            "beforenodedrop",\r
-            \r
-            "nodedrop",\r
-             \r
-            "nodedragover"\r
-        );\r
-        if(this.singleExpand){\r
-            this.on("beforeexpandnode", this.restrictExpand, this);\r
-        }\r
-    },\r
-\r
-    
-    proxyNodeEvent : function(ename, a1, a2, a3, a4, a5, a6){\r
-        if(ename == 'collapse' || ename == 'expand' || ename == 'beforecollapse' || ename == 'beforeexpand' || ename == 'move' || ename == 'beforemove'){\r
-            ename = ename+'node';\r
-        }\r
-        
-        return this.fireEvent(ename, a1, a2, a3, a4, a5, a6);\r
-    },\r
-\r
-\r
-    \r
-    getRootNode : function(){\r
-        return this.root;\r
-    },\r
-\r
-    \r
-    setRootNode : function(node){\r
-        this.root = node;\r
-        node.ownerTree = this;\r
-        node.isRoot = true;\r
-        this.registerNode(node);\r
-        if(!this.rootVisible){\r
-               var uiP = node.attributes.uiProvider;\r
-               node.ui = uiP ? new uiP(node) : new Ext.tree.RootTreeNodeUI(node); \r
-        }\r
-        return node;\r
-    },\r
-\r
-    \r
-    getNodeById : function(id){\r
-        return this.nodeHash[id];\r
-    },\r
-\r
-    
-    registerNode : function(node){\r
-        this.nodeHash[node.id] = node;\r
-    },\r
-\r
-    
-    unregisterNode : function(node){\r
-        delete this.nodeHash[node.id];\r
-    },\r
-\r
-    
-    toString : function(){\r
-        return "[Tree"+(this.id?" "+this.id:"")+"]";\r
-    },\r
-\r
-    
-    restrictExpand : function(node){\r
-        var p = node.parentNode;\r
-        if(p){\r
-            if(p.expandedChild && p.expandedChild.parentNode == p){\r
-                p.expandedChild.collapse();\r
-            }\r
-            p.expandedChild = node;\r
-        }\r
-    },\r
-\r
-    \r
-    getChecked : function(a, startNode){\r
-        startNode = startNode || this.root;\r
-        var r = [];\r
-        var f = function(){\r
-            if(this.attributes.checked){\r
-                r.push(!a ? this : (a == 'id' ? this.id : this.attributes[a]));\r
-            }\r
-        }\r
-        startNode.cascade(f);\r
-        return r;\r
-    },\r
-\r
-    \r
-    getEl : function(){\r
-        return this.el;\r
-    },\r
-\r
-    \r
-    getLoader : function(){\r
-        return this.loader;\r
-    },\r
-\r
-    \r
-    expandAll : function(){\r
-        this.root.expand(true);\r
-    },\r
-\r
-    \r
-    collapseAll : function(){\r
-        this.root.collapse(true);\r
-    },\r
-\r
-    \r
-    getSelectionModel : function(){\r
-        if(!this.selModel){\r
-            this.selModel = new Ext.tree.DefaultSelectionModel();\r
-        }\r
-        return this.selModel;\r
-    },\r
-\r
-    \r
-    expandPath : function(path, attr, callback){\r
-        attr = attr || "id";\r
-        var keys = path.split(this.pathSeparator);\r
-        var curNode = this.root;\r
-        if(curNode.attributes[attr] != keys[1]){ 
-            if(callback){\r
-                callback(false, null);\r
-            }\r
-            return;\r
-        }\r
-        var index = 1;\r
-        var f = function(){\r
-            if(++index == keys.length){\r
-                if(callback){\r
-                    callback(true, curNode);\r
-                }\r
-                return;\r
-            }\r
-            var c = curNode.findChild(attr, keys[index]);\r
-            if(!c){\r
-                if(callback){\r
-                    callback(false, curNode);\r
-                }\r
-                return;\r
-            }\r
-            curNode = c;\r
-            c.expand(false, false, f);\r
-        };\r
-        curNode.expand(false, false, f);\r
-    },\r
-\r
-    \r
-    selectPath : function(path, attr, callback){\r
-        attr = attr || "id";\r
-        var keys = path.split(this.pathSeparator);\r
-        var v = keys.pop();\r
-        if(keys.length > 0){\r
-            var f = function(success, node){\r
-                if(success && node){\r
-                    var n = node.findChild(attr, v);\r
-                    if(n){\r
-                        n.select();\r
-                        if(callback){\r
-                            callback(true, n);\r
-                        }\r
-                    }else if(callback){\r
-                        callback(false, n);\r
-                    }\r
-                }else{\r
-                    if(callback){\r
-                        callback(false, n);\r
-                    }\r
-                }\r
-            };\r
-            this.expandPath(keys.join(this.pathSeparator), attr, f);\r
-        }else{\r
-            this.root.select();\r
-            if(callback){\r
-                callback(true, this.root);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getTreeEl : function(){\r
-        return this.body;\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        Ext.tree.TreePanel.superclass.onRender.call(this, ct, position);\r
-        this.el.addClass('x-tree');\r
-        this.innerCt = this.body.createChild({tag:"ul",\r
-               cls:"x-tree-root-ct " +\r
-               (this.useArrows ? 'x-tree-arrows' : this.lines ? "x-tree-lines" : "x-tree-no-lines")});\r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        Ext.tree.TreePanel.superclass.initEvents.call(this);\r
-\r
-        if(this.containerScroll){\r
-            Ext.dd.ScrollManager.register(this.body);\r
-        }\r
-        if((this.enableDD || this.enableDrop) && !this.dropZone){\r
-           \r
-             this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {\r
-               ddGroup: this.ddGroup || "TreeDD", appendOnly: this.ddAppendOnly === true\r
-           });\r
-        }\r
-        if((this.enableDD || this.enableDrag) && !this.dragZone){\r
-           \r
-            this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {\r
-               ddGroup: this.ddGroup || "TreeDD",\r
-               scroll: this.ddScroll\r
-           });\r
-        }\r
-        this.getSelectionModel().init(this);\r
-    },\r
-\r
-    
-    afterRender : function(){\r
-        Ext.tree.TreePanel.superclass.afterRender.call(this);\r
-        this.root.render();\r
-        if(!this.rootVisible){\r
-            this.root.renderChildren();\r
-        }\r
-    },\r
-\r
-    onDestroy : function(){\r
-        if(this.rendered){\r
-            this.body.removeAllListeners();\r
-            Ext.dd.ScrollManager.unregister(this.body);\r
-            if(this.dropZone){\r
-                this.dropZone.unreg();\r
-            }\r
-            if(this.dragZone){\r
-               this.dragZone.unreg();\r
-            }\r
-        }\r
-        this.root.destroy();\r
-        this.nodeHash = null;\r
-        Ext.tree.TreePanel.superclass.onDestroy.call(this);\r
-    }\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-\r
-\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-});\r
-Ext.reg('treepanel', Ext.tree.TreePanel);
-Ext.tree.TreeEventModel = function(tree){\r
-    this.tree = tree;\r
-    this.tree.on('render', this.initEvents, this);\r
-}\r
-\r
-Ext.tree.TreeEventModel.prototype = {\r
-    initEvents : function(){\r
-        var el = this.tree.getTreeEl();\r
-        el.on('click', this.delegateClick, this);\r
-        if(this.tree.trackMouseOver !== false){\r
-            el.on('mouseover', this.delegateOver, this);\r
-            el.on('mouseout', this.delegateOut, this);\r
-        }\r
-        el.on('dblclick', this.delegateDblClick, this);\r
-        el.on('contextmenu', this.delegateContextMenu, this);\r
-    },\r
-\r
-    getNode : function(e){\r
-        var t;\r
-        if(t = e.getTarget('.x-tree-node-el', 10)){\r
-            var id = Ext.fly(t, '_treeEvents').getAttributeNS('ext', 'tree-node-id');\r
-            if(id){\r
-                return this.tree.getNodeById(id);\r
-            }\r
-        }\r
-        return null;\r
-    },\r
-\r
-    getNodeTarget : function(e){\r
-        var t = e.getTarget('.x-tree-node-icon', 1);\r
-        if(!t){\r
-            t = e.getTarget('.x-tree-node-el', 6);\r
-        }\r
-        return t;\r
-    },\r
-\r
-    delegateOut : function(e, t){\r
-        if(!this.beforeEvent(e)){\r
-            return;\r
-        }\r
-        if(e.getTarget('.x-tree-ec-icon', 1)){\r
-            var n = this.getNode(e);\r
-            this.onIconOut(e, n);\r
-            if(n == this.lastEcOver){\r
-                delete this.lastEcOver;\r
-            }\r
-        }\r
-        if((t = this.getNodeTarget(e)) && !e.within(t, true)){\r
-            this.onNodeOut(e, this.getNode(e));\r
-        }\r
-    },\r
-\r
-    delegateOver : function(e, t){\r
-        if(!this.beforeEvent(e)){\r
-            return;\r
-        }\r
-        if(this.lastEcOver){ 
-            this.onIconOut(e, this.lastEcOver);\r
-            delete this.lastEcOver;\r
-        }\r
-        if(e.getTarget('.x-tree-ec-icon', 1)){\r
-            this.lastEcOver = this.getNode(e);\r
-            this.onIconOver(e, this.lastEcOver);\r
-        }\r
-        if(t = this.getNodeTarget(e)){\r
-            this.onNodeOver(e, this.getNode(e));\r
-        }\r
-    },\r
-\r
-    delegateClick : function(e, t){\r
-        if(!this.beforeEvent(e)){\r
-            return;\r
-        }\r
-\r
-        if(e.getTarget('input[type=checkbox]', 1)){\r
-            this.onCheckboxClick(e, this.getNode(e));\r
-        }\r
-        else if(e.getTarget('.x-tree-ec-icon', 1)){\r
-            this.onIconClick(e, this.getNode(e));\r
-        }\r
-        else if(this.getNodeTarget(e)){\r
-            this.onNodeClick(e, this.getNode(e));\r
-        }\r
-    },\r
-\r
-    delegateDblClick : function(e, t){\r
-        if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
-            this.onNodeDblClick(e, this.getNode(e));\r
-        }\r
-    },\r
-\r
-    delegateContextMenu : function(e, t){\r
-        if(this.beforeEvent(e) && this.getNodeTarget(e)){\r
-            this.onNodeContextMenu(e, this.getNode(e));\r
-        }\r
-    },\r
-\r
-    onNodeClick : function(e, node){\r
-        node.ui.onClick(e);\r
-    },\r
-\r
-    onNodeOver : function(e, node){\r
-        node.ui.onOver(e);\r
-    },\r
-\r
-    onNodeOut : function(e, node){\r
-        node.ui.onOut(e);\r
-    },\r
-\r
-    onIconOver : function(e, node){\r
-        node.ui.addClass('x-tree-ec-over');\r
-    },\r
-\r
-    onIconOut : function(e, node){\r
-        node.ui.removeClass('x-tree-ec-over');\r
-    },\r
-\r
-    onIconClick : function(e, node){\r
-        node.ui.ecClick(e);\r
-    },\r
-\r
-    onCheckboxClick : function(e, node){\r
-        node.ui.onCheckChange(e);\r
-    },\r
-\r
-    onNodeDblClick : function(e, node){\r
-        node.ui.onDblClick(e);\r
-    },\r
-\r
-    onNodeContextMenu : function(e, node){\r
-        node.ui.onContextMenu(e);\r
-    },\r
-\r
-    beforeEvent : function(e){\r
-        if(this.disabled){\r
-            e.stopEvent();\r
-            return false;\r
-        }\r
-        return true;\r
-    },\r
-\r
-    disable: function(){\r
-        this.disabled = true;\r
-    },\r
-\r
-    enable: function(){\r
-        this.disabled = false;\r
-    }\r
-};
-\r
-Ext.tree.DefaultSelectionModel = function(config){\r
-   this.selNode = null;\r
-   \r
-   this.addEvents(\r
-       \r
-       "selectionchange",\r
-\r
-       \r
-       "beforeselect"\r
-   );\r
-\r
-    Ext.apply(this, config);\r
-    Ext.tree.DefaultSelectionModel.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, {\r
-    init : function(tree){\r
-        this.tree = tree;\r
-        tree.getTreeEl().on("keydown", this.onKeyDown, this);\r
-        tree.on("click", this.onNodeClick, this);\r
-    },\r
-    \r
-    onNodeClick : function(node, e){\r
-        this.select(node);\r
-    },\r
-    \r
-    \r
-    select : function(node){\r
-        var last = this.selNode;\r
-        if(last != node && this.fireEvent('beforeselect', this, node, last) !== false){\r
-            if(last){\r
-                last.ui.onSelectedChange(false);\r
-            }\r
-            this.selNode = node;\r
-            node.ui.onSelectedChange(true);\r
-            this.fireEvent("selectionchange", this, node, last);\r
-        }\r
-        return node;\r
-    },\r
-    \r
-    \r
-    unselect : function(node){\r
-        if(this.selNode == node){\r
-            this.clearSelections();\r
-        }    \r
-    },\r
-    \r
-    \r
-    clearSelections : function(){\r
-        var n = this.selNode;\r
-        if(n){\r
-            n.ui.onSelectedChange(false);\r
-            this.selNode = null;\r
-            this.fireEvent("selectionchange", this, null);\r
-        }\r
-        return n;\r
-    },\r
-    \r
-    \r
-    getSelectedNode : function(){\r
-        return this.selNode;    \r
-    },\r
-    \r
-    \r
-    isSelected : function(node){\r
-        return this.selNode == node;  \r
-    },\r
-\r
-    \r
-    selectPrevious : function(){\r
-        var s = this.selNode || this.lastSelNode;\r
-        if(!s){\r
-            return null;\r
-        }\r
-        var ps = s.previousSibling;\r
-        if(ps){\r
-            if(!ps.isExpanded() || ps.childNodes.length < 1){\r
-                return this.select(ps);\r
-            } else{\r
-                var lc = ps.lastChild;\r
-                while(lc && lc.isExpanded() && lc.childNodes.length > 0){\r
-                    lc = lc.lastChild;\r
-                }\r
-                return this.select(lc);\r
-            }\r
-        } else if(s.parentNode && (this.tree.rootVisible || !s.parentNode.isRoot)){\r
-            return this.select(s.parentNode);\r
-        }\r
-        return null;\r
-    },\r
-\r
-    \r
-    selectNext : function(){\r
-        var s = this.selNode || this.lastSelNode;\r
-        if(!s){\r
-            return null;\r
-        }\r
-        if(s.firstChild && s.isExpanded()){\r
-             return this.select(s.firstChild);\r
-         }else if(s.nextSibling){\r
-             return this.select(s.nextSibling);\r
-         }else if(s.parentNode){\r
-            var newS = null;\r
-            s.parentNode.bubble(function(){\r
-                if(this.nextSibling){\r
-                    newS = this.getOwnerTree().selModel.select(this.nextSibling);\r
-                    return false;\r
-                }\r
-            });\r
-            return newS;\r
-         }\r
-        return null;\r
-    },\r
-\r
-    onKeyDown : function(e){\r
-        var s = this.selNode || this.lastSelNode;\r
-        
-        var sm = this;\r
-        if(!s){\r
-            return;\r
-        }\r
-        var k = e.getKey();\r
-        switch(k){\r
-             case e.DOWN:\r
-                 e.stopEvent();\r
-                 this.selectNext();\r
-             break;\r
-             case e.UP:\r
-                 e.stopEvent();\r
-                 this.selectPrevious();\r
-             break;\r
-             case e.RIGHT:\r
-                 e.preventDefault();\r
-                 if(s.hasChildNodes()){\r
-                     if(!s.isExpanded()){\r
-                         s.expand();\r
-                     }else if(s.firstChild){\r
-                         this.select(s.firstChild, e);\r
-                     }\r
-                 }\r
-             break;\r
-             case e.LEFT:\r
-                 e.preventDefault();\r
-                 if(s.hasChildNodes() && s.isExpanded()){\r
-                     s.collapse();\r
-                 }else if(s.parentNode && (this.tree.rootVisible || s.parentNode != this.tree.getRootNode())){\r
-                     this.select(s.parentNode, e);\r
-                 }\r
-             break;\r
-        };\r
-    }\r
-});\r
-\r
-\r
-Ext.tree.MultiSelectionModel = function(config){\r
-   this.selNodes = [];\r
-   this.selMap = {};\r
-   this.addEvents(\r
-       \r
-       "selectionchange"\r
-   );\r
-    Ext.apply(this, config);\r
-    Ext.tree.MultiSelectionModel.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, {\r
-    init : function(tree){\r
-        this.tree = tree;\r
-        tree.getTreeEl().on("keydown", this.onKeyDown, this);\r
-        tree.on("click", this.onNodeClick, this);\r
-    },\r
-    \r
-    onNodeClick : function(node, e){\r
-        this.select(node, e, e.ctrlKey);\r
-    },\r
-    \r
-    \r
-    select : function(node, e, keepExisting){\r
-        if(keepExisting !== true){\r
-            this.clearSelections(true);\r
-        }\r
-        if(this.isSelected(node)){\r
-            this.lastSelNode = node;\r
-            return node;\r
-        }\r
-        this.selNodes.push(node);\r
-        this.selMap[node.id] = node;\r
-        this.lastSelNode = node;\r
-        node.ui.onSelectedChange(true);\r
-        this.fireEvent("selectionchange", this, this.selNodes);\r
-        return node;\r
-    },\r
-    \r
-    \r
-    unselect : function(node){\r
-        if(this.selMap[node.id]){\r
-            node.ui.onSelectedChange(false);\r
-            var sn = this.selNodes;\r
-            var index = sn.indexOf(node);\r
-            if(index != -1){\r
-                this.selNodes.splice(index, 1);\r
-            }\r
-            delete this.selMap[node.id];\r
-            this.fireEvent("selectionchange", this, this.selNodes);\r
-        }\r
-    },\r
-    \r
-    \r
-    clearSelections : function(suppressEvent){\r
-        var sn = this.selNodes;\r
-        if(sn.length > 0){\r
-            for(var i = 0, len = sn.length; i < len; i++){\r
-                sn[i].ui.onSelectedChange(false);\r
-            }\r
-            this.selNodes = [];\r
-            this.selMap = {};\r
-            if(suppressEvent !== true){\r
-                this.fireEvent("selectionchange", this, this.selNodes);\r
-            }\r
-        }\r
-    },\r
-    \r
-    \r
-    isSelected : function(node){\r
-        return this.selMap[node.id] ? true : false;  \r
-    },\r
-    \r
-    \r
-    getSelectedNodes : function(){\r
-        return this.selNodes;    \r
-    },\r
-\r
-    onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown,\r
-\r
-    selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext,\r
-\r
-    selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious\r
-});
-\r
-Ext.tree.TreeNode = function(attributes){\r
-    attributes = attributes || {};\r
-    if(typeof attributes == "string"){\r
-        attributes = {text: attributes};\r
-    }\r
-    this.childrenRendered = false;\r
-    this.rendered = false;\r
-    Ext.tree.TreeNode.superclass.constructor.call(this, attributes);\r
-    this.expanded = attributes.expanded === true;\r
-    this.isTarget = attributes.isTarget !== false;\r
-    this.draggable = attributes.draggable !== false && attributes.allowDrag !== false;\r
-    this.allowChildren = attributes.allowChildren !== false && attributes.allowDrop !== false;\r
-\r
-    \r
-    this.text = attributes.text;\r
-    \r
-    this.disabled = attributes.disabled === true;\r
-\r
-    this.addEvents(\r
-        \r
-        "textchange",\r
-        \r
-        "beforeexpand",\r
-        \r
-        "beforecollapse",\r
-        \r
-        "expand",\r
-        \r
-        "disabledchange",\r
-        \r
-        "collapse",\r
-        \r
-        "beforeclick",\r
-        \r
-        "click",\r
-        \r
-        "checkchange",\r
-        \r
-        "dblclick",\r
-        \r
-        "contextmenu",\r
-        \r
-        "beforechildrenrendered"\r
-    );\r
-\r
-    var uiClass = this.attributes.uiProvider || this.defaultUI || Ext.tree.TreeNodeUI;\r
-\r
-    \r
-    this.ui = new uiClass(this);\r
-};\r
-Ext.extend(Ext.tree.TreeNode, Ext.data.Node, {\r
-    preventHScroll: true,\r
-    \r
-    isExpanded : function(){\r
-        return this.expanded;\r
-    },\r
-\r
-\r
-    getUI : function(){\r
-        return this.ui;\r
-    },\r
-\r
-    
-    setFirstChild : function(node){\r
-        var of = this.firstChild;\r
-        Ext.tree.TreeNode.superclass.setFirstChild.call(this, node);\r
-        if(this.childrenRendered && of && node != of){\r
-            of.renderIndent(true, true);\r
-        }\r
-        if(this.rendered){\r
-            this.renderIndent(true, true);\r
-        }\r
-    },\r
-\r
-    
-    setLastChild : function(node){\r
-        var ol = this.lastChild;\r
-        Ext.tree.TreeNode.superclass.setLastChild.call(this, node);\r
-        if(this.childrenRendered && ol && node != ol){\r
-            ol.renderIndent(true, true);\r
-        }\r
-        if(this.rendered){\r
-            this.renderIndent(true, true);\r
-        }\r
-    },\r
-\r
-    
-    
-    appendChild : function(){\r
-        var node = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments);\r
-        if(node && this.childrenRendered){\r
-            node.render();\r
-        }\r
-        this.ui.updateExpandIcon();\r
-        return node;\r
-    },\r
-\r
-    
-    removeChild : function(node){\r
-        this.ownerTree.getSelectionModel().unselect(node);\r
-        Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);\r
-        
-        if(this.childrenRendered){\r
-            node.ui.remove();\r
-        }\r
-        if(this.childNodes.length < 1){\r
-            this.collapse(false, false);\r
-        }else{\r
-            this.ui.updateExpandIcon();\r
-        }\r
-        if(!this.firstChild && !this.isHiddenRoot()) {\r
-            this.childrenRendered = false;\r
-        }\r
-        return node;\r
-    },\r
-\r
-    
-    insertBefore : function(node, refNode){\r
-        var newNode = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments);\r
-        if(newNode && refNode && this.childrenRendered){\r
-            node.render();\r
-        }\r
-        this.ui.updateExpandIcon();\r
-        return newNode;\r
-    },\r
-\r
-    \r
-    setText : function(text){\r
-        var oldText = this.text;\r
-        this.text = text;\r
-        this.attributes.text = text;\r
-        if(this.rendered){ 
-            this.ui.onTextChange(this, text, oldText);\r
-        }\r
-        this.fireEvent("textchange", this, text, oldText);\r
-    },\r
-\r
-    \r
-    select : function(){\r
-        this.getOwnerTree().getSelectionModel().select(this);\r
-    },\r
-\r
-    \r
-    unselect : function(){\r
-        this.getOwnerTree().getSelectionModel().unselect(this);\r
-    },\r
-\r
-    \r
-    isSelected : function(){\r
-        return this.getOwnerTree().getSelectionModel().isSelected(this);\r
-    },\r
-\r
-    \r
-    expand : function(deep, anim, callback){\r
-        if(!this.expanded){\r
-            if(this.fireEvent("beforeexpand", this, deep, anim) === false){\r
-                return;\r
-            }\r
-            if(!this.childrenRendered){\r
-                this.renderChildren();\r
-            }\r
-            this.expanded = true;\r
-            if(!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim){\r
-                this.ui.animExpand(function(){\r
-                    this.fireEvent("expand", this);\r
-                    if(typeof callback == "function"){\r
-                        callback(this);\r
-                    }\r
-                    if(deep === true){\r
-                        this.expandChildNodes(true);\r
-                    }\r
-                }.createDelegate(this));\r
-                return;\r
-            }else{\r
-                this.ui.expand();\r
-                this.fireEvent("expand", this);\r
-                if(typeof callback == "function"){\r
-                    callback(this);\r
-                }\r
-            }\r
-        }else{\r
-           if(typeof callback == "function"){\r
-               callback(this);\r
-           }\r
-        }\r
-        if(deep === true){\r
-            this.expandChildNodes(true);\r
-        }\r
-    },\r
-\r
-    isHiddenRoot : function(){\r
-        return this.isRoot && !this.getOwnerTree().rootVisible;\r
-    },\r
-\r
-    \r
-    collapse : function(deep, anim){\r
-        if(this.expanded && !this.isHiddenRoot()){\r
-            if(this.fireEvent("beforecollapse", this, deep, anim) === false){\r
-                return;\r
-            }\r
-            this.expanded = false;\r
-            if((this.getOwnerTree().animate && anim !== false) || anim){\r
-                this.ui.animCollapse(function(){\r
-                    this.fireEvent("collapse", this);\r
-                    if(deep === true){\r
-                        this.collapseChildNodes(true);\r
-                    }\r
-                }.createDelegate(this));\r
-                return;\r
-            }else{\r
-                this.ui.collapse();\r
-                this.fireEvent("collapse", this);\r
-            }\r
-        }\r
-        if(deep === true){\r
-            var cs = this.childNodes;\r
-            for(var i = 0, len = cs.length; i < len; i++) {\r
-               cs[i].collapse(true, false);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    delayedExpand : function(delay){\r
-        if(!this.expandProcId){\r
-            this.expandProcId = this.expand.defer(delay, this);\r
-        }\r
-    },\r
-\r
-    
-    cancelExpand : function(){\r
-        if(this.expandProcId){\r
-            clearTimeout(this.expandProcId);\r
-        }\r
-        this.expandProcId = false;\r
-    },\r
-\r
-    \r
-    toggle : function(){\r
-        if(this.expanded){\r
-            this.collapse();\r
-        }else{\r
-            this.expand();\r
-        }\r
-    },\r
-\r
-    \r
-    ensureVisible : function(callback){\r
-        var tree = this.getOwnerTree();\r
-        tree.expandPath(this.parentNode.getPath(), false, function(){\r
-            var node = tree.getNodeById(this.id);  
-            tree.getTreeEl().scrollChildIntoView(node.ui.anchor);\r
-            Ext.callback(callback);\r
-        }.createDelegate(this));\r
-    },\r
-\r
-    \r
-    expandChildNodes : function(deep){\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++) {\r
-               cs[i].expand(deep);\r
-        }\r
-    },\r
-\r
-    \r
-    collapseChildNodes : function(deep){\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++) {\r
-               cs[i].collapse(deep);\r
-        }\r
-    },\r
-\r
-    \r
-    disable : function(){\r
-        this.disabled = true;\r
-        this.unselect();\r
-        if(this.rendered && this.ui.onDisableChange){ 
-            this.ui.onDisableChange(this, true);\r
-        }\r
-        this.fireEvent("disabledchange", this, true);\r
-    },\r
-\r
-    \r
-    enable : function(){\r
-        this.disabled = false;\r
-        if(this.rendered && this.ui.onDisableChange){ 
-            this.ui.onDisableChange(this, false);\r
-        }\r
-        this.fireEvent("disabledchange", this, false);\r
-    },\r
-\r
-    
-    renderChildren : function(suppressEvent){\r
-        if(suppressEvent !== false){\r
-            this.fireEvent("beforechildrenrendered", this);\r
-        }\r
-        var cs = this.childNodes;\r
-        for(var i = 0, len = cs.length; i < len; i++){\r
-            cs[i].render(true);\r
-        }\r
-        this.childrenRendered = true;\r
-    },\r
-\r
-    
-    sort : function(fn, scope){\r
-        Ext.tree.TreeNode.superclass.sort.apply(this, arguments);\r
-        if(this.childrenRendered){\r
-            var cs = this.childNodes;\r
-            for(var i = 0, len = cs.length; i < len; i++){\r
-                cs[i].render(true);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    render : function(bulkRender){\r
-        this.ui.render(bulkRender);\r
-        if(!this.rendered){\r
-            
-            this.getOwnerTree().registerNode(this);\r
-            this.rendered = true;\r
-            if(this.expanded){\r
-                this.expanded = false;\r
-                this.expand(false, false);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    renderIndent : function(deep, refresh){\r
-        if(refresh){\r
-            this.ui.childIndent = null;\r
-        }\r
-        this.ui.renderIndent();\r
-        if(deep === true && this.childrenRendered){\r
-            var cs = this.childNodes;\r
-            for(var i = 0, len = cs.length; i < len; i++){\r
-                cs[i].renderIndent(true, refresh);\r
-            }\r
-        }\r
-    },\r
-\r
-    beginUpdate : function(){\r
-        this.childrenRendered = false;\r
-    },\r
-\r
-    endUpdate : function(){\r
-        if(this.expanded){\r
-            this.renderChildren();\r
-        }\r
-    },\r
-\r
-    destroy : function(){\r
-        for(var i = 0,l = this.childNodes.length; i < l; i++){\r
-            this.childNodes[i].destroy();\r
-        }\r
-        this.childNodes = null;\r
-        if(this.ui.destroy){\r
-            this.ui.destroy();\r
-        }\r
-    }\r
-});
-\r
- Ext.tree.AsyncTreeNode = function(config){\r
-    this.loaded = false;\r
-    this.loading = false;\r
-    Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments);\r
-    \r
-    this.addEvents('beforeload', 'load');\r
-    \r
-    \r
-};\r
-Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {\r
-    expand : function(deep, anim, callback){\r
-        if(this.loading){ 
-            var timer;\r
-            var f = function(){\r
-                if(!this.loading){ 
-                    clearInterval(timer);\r
-                    this.expand(deep, anim, callback);\r
-                }\r
-            }.createDelegate(this);\r
-            timer = setInterval(f, 200);\r
-            return;\r
-        }\r
-        if(!this.loaded){\r
-            if(this.fireEvent("beforeload", this) === false){\r
-                return;\r
-            }\r
-            this.loading = true;\r
-            this.ui.beforeLoad(this);\r
-            var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();\r
-            if(loader){\r
-                loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback]));\r
-                return;\r
-            }\r
-        }\r
-        Ext.tree.AsyncTreeNode.superclass.expand.call(this, deep, anim, callback);\r
-    },\r
-    \r
-    \r
-    isLoading : function(){\r
-        return this.loading;  \r
-    },\r
-    \r
-    loadComplete : function(deep, anim, callback){\r
-        this.loading = false;\r
-        this.loaded = true;\r
-        this.ui.afterLoad(this);\r
-        this.fireEvent("load", this);\r
-        this.expand(deep, anim, callback);\r
-    },\r
-    \r
-    \r
-    isLoaded : function(){\r
-        return this.loaded;\r
-    },\r
-    \r
-    hasChildNodes : function(){\r
-        if(!this.isLeaf() && !this.loaded){\r
-            return true;\r
-        }else{\r
-            return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);\r
-        }\r
-    },\r
-\r
-    \r
-    reload : function(callback){\r
-        this.collapse(false, false);\r
-        while(this.firstChild){\r
-            this.removeChild(this.firstChild);\r
-        }\r
-        this.childrenRendered = false;\r
-        this.loaded = false;\r
-        if(this.isHiddenRoot()){\r
-            this.expanded = false;\r
-        }\r
-        this.expand(false, false, callback);\r
-    }\r
-});
-\r
-Ext.tree.TreeNodeUI = function(node){\r
-    this.node = node;\r
-    this.rendered = false;\r
-    this.animating = false;\r
-    this.wasLeaf = true;\r
-    this.ecc = 'x-tree-ec-icon x-tree-elbow';\r
-    this.emptyIcon = Ext.BLANK_IMAGE_URL;\r
-};\r
-\r
-Ext.tree.TreeNodeUI.prototype = {\r
-    
-    removeChild : function(node){\r
-        if(this.rendered){\r
-            this.ctNode.removeChild(node.ui.getEl());\r
-        } \r
-    },\r
-\r
-    
-    beforeLoad : function(){\r
-         this.addClass("x-tree-node-loading");\r
-    },\r
-\r
-    
-    afterLoad : function(){\r
-         this.removeClass("x-tree-node-loading");\r
-    },\r
-\r
-    
-    onTextChange : function(node, text, oldText){\r
-        if(this.rendered){\r
-            this.textNode.innerHTML = text;\r
-        }\r
-    },\r
-\r
-    
-    onDisableChange : function(node, state){\r
-        this.disabled = state;\r
-               if (this.checkbox) {\r
-                       this.checkbox.disabled = state;\r
-               }        \r
-        if(state){\r
-            this.addClass("x-tree-node-disabled");\r
-        }else{\r
-            this.removeClass("x-tree-node-disabled");\r
-        } \r
-    },\r
-\r
-    
-    onSelectedChange : function(state){\r
-        if(state){\r
-            this.focus();\r
-            this.addClass("x-tree-selected");\r
-        }else{\r
-            
-            this.removeClass("x-tree-selected");\r
-        }\r
-    },\r
-\r
-    
-    onMove : function(tree, node, oldParent, newParent, index, refNode){\r
-        this.childIndent = null;\r
-        if(this.rendered){\r
-            var targetNode = newParent.ui.getContainer();\r
-            if(!targetNode){
-                this.holder = document.createElement("div");\r
-                this.holder.appendChild(this.wrap);\r
-                return;\r
-            }\r
-            var insertBefore = refNode ? refNode.ui.getEl() : null;\r
-            if(insertBefore){\r
-                targetNode.insertBefore(this.wrap, insertBefore);\r
-            }else{\r
-                targetNode.appendChild(this.wrap);\r
-            }\r
-            this.node.renderIndent(true);\r
-        }\r
-    },\r
-\r
-\r
-    addClass : function(cls){\r
-        if(this.elNode){\r
-            Ext.fly(this.elNode).addClass(cls);\r
-        }\r
-    },\r
-\r
-\r
-    removeClass : function(cls){\r
-        if(this.elNode){\r
-            Ext.fly(this.elNode).removeClass(cls);  \r
-        }\r
-    },\r
-\r
-    
-    remove : function(){\r
-        if(this.rendered){\r
-            this.holder = document.createElement("div");\r
-            this.holder.appendChild(this.wrap);\r
-        }  \r
-    },\r
-\r
-    
-    fireEvent : function(){\r
-        return this.node.fireEvent.apply(this.node, arguments);  \r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        this.node.on("move", this.onMove, this);\r
-\r
-        if(this.node.disabled){\r
-            this.addClass("x-tree-node-disabled");\r
-                       if (this.checkbox) {\r
-                               this.checkbox.disabled = true;\r
-                       }            \r
-        }\r
-        if(this.node.hidden){\r
-            this.hide();\r
-        }\r
-        var ot = this.node.getOwnerTree();\r
-        var dd = ot.enableDD || ot.enableDrag || ot.enableDrop;\r
-        if(dd && (!this.node.isRoot || ot.rootVisible)){\r
-            Ext.dd.Registry.register(this.elNode, {\r
-                node: this.node,\r
-                handles: this.getDDHandles(),\r
-                isHandle: false\r
-            });\r
-        }\r
-    },\r
-\r
-    
-    getDDHandles : function(){\r
-        return [this.iconNode, this.textNode, this.elNode];\r
-    },\r
-\r
-\r
-    hide : function(){\r
-        this.node.hidden = true;\r
-        if(this.wrap){\r
-            this.wrap.style.display = "none";\r
-        }\r
-    },\r
-\r
-\r
-    show : function(){\r
-        this.node.hidden = false;\r
-        if(this.wrap){\r
-            this.wrap.style.display = "";\r
-        } \r
-    },\r
-\r
-    
-    onContextMenu : function(e){\r
-        if (this.node.hasListener("contextmenu") || this.node.getOwnerTree().hasListener("contextmenu")) {\r
-            e.preventDefault();\r
-            this.focus();\r
-            this.fireEvent("contextmenu", this.node, e);\r
-        }\r
-    },\r
-\r
-    
-    onClick : function(e){\r
-        if(this.dropping){\r
-            e.stopEvent();\r
-            return;\r
-        }\r
-        if(this.fireEvent("beforeclick", this.node, e) !== false){\r
-            var a = e.getTarget('a');\r
-            if(!this.disabled && this.node.attributes.href && a){\r
-                this.fireEvent("click", this.node, e);\r
-                return;\r
-            }else if(a && e.ctrlKey){\r
-                e.stopEvent();\r
-            }\r
-            e.preventDefault();\r
-            if(this.disabled){\r
-                return;\r
-            }\r
-\r
-            if(this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes()){\r
-                this.node.toggle();\r
-            }\r
-\r
-            this.fireEvent("click", this.node, e);\r
-        }else{\r
-            e.stopEvent();\r
-        }\r
-    },\r
-\r
-    
-    onDblClick : function(e){\r
-        e.preventDefault();\r
-        if(this.disabled){\r
-            return;\r
-        }\r
-        if(this.checkbox){\r
-            this.toggleCheck();\r
-        }\r
-        if(!this.animating && this.node.hasChildNodes()){\r
-            this.node.toggle();\r
-        }\r
-        this.fireEvent("dblclick", this.node, e);\r
-    },\r
-\r
-    onOver : function(e){\r
-        this.addClass('x-tree-node-over');\r
-    },\r
-\r
-    onOut : function(e){\r
-        this.removeClass('x-tree-node-over');\r
-    },\r
-\r
-    
-    onCheckChange : function(){\r
-        var checked = this.checkbox.checked;\r
-        this.node.attributes.checked = checked;\r
-        this.fireEvent('checkchange', this.node, checked);\r
-    },\r
-\r
-    
-    ecClick : function(e){\r
-        if(!this.animating && (this.node.hasChildNodes() || this.node.attributes.expandable)){\r
-            this.node.toggle();\r
-        }\r
-    },\r
-\r
-    
-    startDrop : function(){\r
-        this.dropping = true;\r
-    },\r
-    \r
-    
-    endDrop : function(){ \r
-       setTimeout(function(){\r
-           this.dropping = false;\r
-       }.createDelegate(this), 50); \r
-    },\r
-\r
-    
-    expand : function(){\r
-        this.updateExpandIcon();\r
-        this.ctNode.style.display = "";\r
-    },\r
-\r
-    
-    focus : function(){\r
-        if(!this.node.preventHScroll){\r
-            try{this.anchor.focus();\r
-            }catch(e){}\r
-        }else if(!Ext.isIE){\r
-            try{\r
-                var noscroll = this.node.getOwnerTree().getTreeEl().dom;\r
-                var l = noscroll.scrollLeft;\r
-                this.anchor.focus();\r
-                noscroll.scrollLeft = l;\r
-            }catch(e){}\r
-        }\r
-    },\r
-\r
-\r
-    toggleCheck : function(value){\r
-        var cb = this.checkbox;\r
-        if(cb){\r
-            cb.checked = (value === undefined ? !cb.checked : value);\r
-        }\r
-    },\r
-\r
-    
-    blur : function(){\r
-        try{\r
-            this.anchor.blur();\r
-        }catch(e){} \r
-    },\r
-\r
-    
-    animExpand : function(callback){\r
-        var ct = Ext.get(this.ctNode);\r
-        ct.stopFx();\r
-        if(!this.node.hasChildNodes()){\r
-            this.updateExpandIcon();\r
-            this.ctNode.style.display = "";\r
-            Ext.callback(callback);\r
-            return;\r
-        }\r
-        this.animating = true;\r
-        this.updateExpandIcon();\r
-        \r
-        ct.slideIn('t', {\r
-           callback : function(){\r
-               this.animating = false;\r
-               Ext.callback(callback);\r
-            },\r
-            scope: this,\r
-            duration: this.node.ownerTree.duration || .25\r
-        });\r
-    },\r
-\r
-    
-    highlight : function(){\r
-        var tree = this.node.getOwnerTree();\r
-        Ext.fly(this.wrap).highlight(\r
-            tree.hlColor || "C3DAF9",\r
-            {endColor: tree.hlBaseColor}\r
-        );\r
-    },\r
-\r
-    
-    collapse : function(){\r
-        this.updateExpandIcon();\r
-        this.ctNode.style.display = "none";\r
-    },\r
-\r
-    
-    animCollapse : function(callback){\r
-        var ct = Ext.get(this.ctNode);\r
-        ct.enableDisplayMode('block');\r
-        ct.stopFx();\r
-\r
-        this.animating = true;\r
-        this.updateExpandIcon();\r
-\r
-        ct.slideOut('t', {\r
-            callback : function(){\r
-               this.animating = false;\r
-               Ext.callback(callback);\r
-            },\r
-            scope: this,\r
-            duration: this.node.ownerTree.duration || .25\r
-        });\r
-    },\r
-\r
-    
-    getContainer : function(){\r
-        return this.ctNode;  \r
-    },\r
-\r
-    
-    getEl : function(){\r
-        return this.wrap;  \r
-    },\r
-\r
-    
-    appendDDGhost : function(ghostNode){\r
-        ghostNode.appendChild(this.elNode.cloneNode(true));\r
-    },\r
-\r
-    
-    getDDRepairXY : function(){\r
-        return Ext.lib.Dom.getXY(this.iconNode);\r
-    },\r
-\r
-    
-    onRender : function(){\r
-        this.render();    \r
-    },\r
-\r
-    
-    render : function(bulkRender){\r
-        var n = this.node, a = n.attributes;\r
-        var targetNode = n.parentNode ? \r
-              n.parentNode.ui.getContainer() : n.ownerTree.innerCt.dom;\r
-        \r
-        if(!this.rendered){\r
-            this.rendered = true;\r
-\r
-            this.renderElements(n, a, targetNode, bulkRender);\r
-\r
-            if(a.qtip){\r
-               if(this.textNode.setAttributeNS){\r
-                   this.textNode.setAttributeNS("ext", "qtip", a.qtip);\r
-                   if(a.qtipTitle){\r
-                       this.textNode.setAttributeNS("ext", "qtitle", a.qtipTitle);\r
-                   }\r
-               }else{\r
-                   this.textNode.setAttribute("ext:qtip", a.qtip);\r
-                   if(a.qtipTitle){\r
-                       this.textNode.setAttribute("ext:qtitle", a.qtipTitle);\r
-                   }\r
-               } \r
-            }else if(a.qtipCfg){\r
-                a.qtipCfg.target = Ext.id(this.textNode);\r
-                Ext.QuickTips.register(a.qtipCfg);\r
-            }\r
-            this.initEvents();\r
-            if(!this.node.expanded){\r
-                this.updateExpandIcon(true);\r
-            }\r
-        }else{\r
-            if(bulkRender === true) {\r
-                targetNode.appendChild(this.wrap);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    renderElements : function(n, a, targetNode, bulkRender){\r
-        
-        this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';\r
-\r
-        var cb = typeof a.checked == 'boolean';\r
-\r
-        var href = a.href ? a.href : Ext.isGecko ? "" : "#";\r
-        var buf = ['<li class="x-tree-node"><div ext:tree-node-id="',n.id,'" class="x-tree-node-el x-tree-node-leaf x-unselectable ', a.cls,'" unselectable="on">',\r
-            '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",\r
-            '<img src="', this.emptyIcon, '" class="x-tree-ec-icon x-tree-elbow" />',\r
-            '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on" />',\r
-            cb ? ('<input class="x-tree-node-cb" type="checkbox" ' + (a.checked ? 'checked="checked" />' : '/>')) : '',\r
-            '<a hidefocus="on" class="x-tree-node-anchor" href="',href,'" tabIndex="1" ',\r
-             a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '><span unselectable="on">',n.text,"</span></a></div>",\r
-            '<ul class="x-tree-node-ct" style="display:none;"></ul>',\r
-            "</li>"].join('');\r
-\r
-        var nel;\r
-        if(bulkRender !== true && n.nextSibling && (nel = n.nextSibling.ui.getEl())){\r
-            this.wrap = Ext.DomHelper.insertHtml("beforeBegin", nel, buf);\r
-        }else{\r
-            this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf);\r
-        }\r
-        \r
-        this.elNode = this.wrap.childNodes[0];\r
-        this.ctNode = this.wrap.childNodes[1];\r
-        var cs = this.elNode.childNodes;\r
-        this.indentNode = cs[0];\r
-        this.ecNode = cs[1];\r
-        this.iconNode = cs[2];\r
-        var index = 3;\r
-        if(cb){\r
-            this.checkbox = cs[3];\r
-            index++;\r
-        }\r
-        this.anchor = cs[index];\r
-        this.textNode = cs[index].firstChild;\r
-    },\r
-\r
-\r
-    getAnchor : function(){\r
-        return this.anchor;\r
-    },\r
-    \r
-\r
-    getTextEl : function(){\r
-        return this.textNode;\r
-    },\r
-    \r
-\r
-    getIconEl : function(){\r
-        return this.iconNode;\r
-    },\r
-\r
-\r
-    isChecked : function(){\r
-        return this.checkbox ? this.checkbox.checked : false; \r
-    },\r
-\r
-    
-    updateExpandIcon : function(){\r
-        if(this.rendered){\r
-            var n = this.node, c1, c2;\r
-            var cls = n.isLast() ? "x-tree-elbow-end" : "x-tree-elbow";\r
-            var hasChild = n.hasChildNodes();\r
-            if(hasChild || n.attributes.expandable){\r
-                if(n.expanded){\r
-                    cls += "-minus";\r
-                    c1 = "x-tree-node-collapsed";\r
-                    c2 = "x-tree-node-expanded";\r
-                }else{\r
-                    cls += "-plus";\r
-                    c1 = "x-tree-node-expanded";\r
-                    c2 = "x-tree-node-collapsed";\r
-                }\r
-                if(this.wasLeaf){\r
-                    this.removeClass("x-tree-node-leaf");\r
-                    this.wasLeaf = false;\r
-                }\r
-                if(this.c1 != c1 || this.c2 != c2){\r
-                    Ext.fly(this.elNode).replaceClass(c1, c2);\r
-                    this.c1 = c1; this.c2 = c2;\r
-                }\r
-            }else{\r
-                if(!this.wasLeaf){\r
-                    Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf");\r
-                    delete this.c1;\r
-                    delete this.c2;\r
-                    this.wasLeaf = true;\r
-                }\r
-            }\r
-            var ecc = "x-tree-ec-icon "+cls;\r
-            if(this.ecc != ecc){\r
-                this.ecNode.className = ecc;\r
-                this.ecc = ecc;\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    getChildIndent : function(){\r
-        if(!this.childIndent){\r
-            var buf = [];\r
-            var p = this.node;\r
-            while(p){\r
-                if(!p.isRoot || (p.isRoot && p.ownerTree.rootVisible)){\r
-                    if(!p.isLast()) {\r
-                        buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line" />');\r
-                    } else {\r
-                        buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon" />');\r
-                    }\r
-                }\r
-                p = p.parentNode;\r
-            }\r
-            this.childIndent = buf.join("");\r
-        }\r
-        return this.childIndent;\r
-    },\r
-\r
-    
-    renderIndent : function(){\r
-        if(this.rendered){\r
-            var indent = "";\r
-            var p = this.node.parentNode;\r
-            if(p){\r
-                indent = p.ui.getChildIndent();\r
-            }\r
-            if(this.indentMarkup != indent){ 
-                this.indentNode.innerHTML = indent;\r
-                this.indentMarkup = indent;\r
-            }\r
-            this.updateExpandIcon();\r
-        }\r
-    },\r
-\r
-    destroy : function(){\r
-        if(this.elNode){\r
-            Ext.dd.Registry.unregister(this.elNode.id);\r
-        }\r
-        delete this.elNode;\r
-        delete this.ctNode;\r
-        delete this.indentNode;\r
-        delete this.ecNode;\r
-        delete this.iconNode;\r
-        delete this.checkbox;\r
-        delete this.anchor;\r
-        delete this.textNode;\r
-        Ext.removeNode(this.ctNode);\r
-    }\r
-};\r
-\r
-\r
-Ext.tree.RootTreeNodeUI = Ext.extend(Ext.tree.TreeNodeUI, {\r
-    
-    render : function(){\r
-        if(!this.rendered){\r
-            var targetNode = this.node.ownerTree.innerCt.dom;\r
-            this.node.expanded = true;\r
-            targetNode.innerHTML = '<div class="x-tree-root-node"></div>';\r
-            this.wrap = this.ctNode = targetNode.firstChild;\r
-        }\r
-    },\r
-    collapse : Ext.emptyFn,\r
-    expand : Ext.emptyFn\r
-});
-\r
-Ext.tree.TreeLoader = function(config){\r
-    this.baseParams = {};\r
-    this.requestMethod = "POST";\r
-    Ext.apply(this, config);\r
-\r
-    this.addEvents(\r
-        \r
-        "beforeload",\r
-        \r
-        "load",\r
-        \r
-        "loadexception"\r
-    );\r
-\r
-    Ext.tree.TreeLoader.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    uiProviders : {},\r
-\r
-    \r
-    clearOnLoad : true,\r
-\r
-    \r
-    load : function(node, callback){\r
-        if(this.clearOnLoad){\r
-            while(node.firstChild){\r
-                node.removeChild(node.firstChild);\r
-            }\r
-        }\r
-        if(this.doPreload(node)){ 
-            if(typeof callback == "function"){\r
-                callback();\r
-            }\r
-        }else if(this.dataUrl||this.url){\r
-            this.requestData(node, callback);\r
-        }\r
-    },\r
-\r
-    doPreload : function(node){\r
-        if(node.attributes.children){\r
-            if(node.childNodes.length < 1){ 
-                var cs = node.attributes.children;\r
-                node.beginUpdate();\r
-                for(var i = 0, len = cs.length; i < len; i++){\r
-                    var cn = node.appendChild(this.createNode(cs[i]));\r
-                    if(this.preloadChildren){\r
-                        this.doPreload(cn);\r
-                    }\r
-                }\r
-                node.endUpdate();\r
-            }\r
-            return true;\r
-        }else {\r
-            return false;\r
-        }\r
-    },\r
-\r
-    getParams: function(node){\r
-        var buf = [], bp = this.baseParams;\r
-        for(var key in bp){\r
-            if(typeof bp[key] != "function"){\r
-                buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&");\r
-            }\r
-        }\r
-        buf.push("node=", encodeURIComponent(node.id));\r
-        return buf.join("");\r
-    },\r
-\r
-    requestData : function(node, callback){\r
-        if(this.fireEvent("beforeload", this, node, callback) !== false){\r
-            this.transId = Ext.Ajax.request({\r
-                method:this.requestMethod,\r
-                url: this.dataUrl||this.url,\r
-                success: this.handleResponse,\r
-                failure: this.handleFailure,\r
-                scope: this,\r
-                argument: {callback: callback, node: node},\r
-                params: this.getParams(node)\r
-            });\r
-        }else{\r
-            
-            
-            if(typeof callback == "function"){\r
-                callback();\r
-            }\r
-        }\r
-    },\r
-\r
-    isLoading : function(){\r
-        return this.transId ? true : false;\r
-    },\r
-\r
-    abort : function(){\r
-        if(this.isLoading()){\r
-            Ext.Ajax.abort(this.transId);\r
-        }\r
-    },\r
-\r
-    \r
-    createNode : function(attr){\r
-        
-        if(this.baseAttrs){\r
-            Ext.applyIf(attr, this.baseAttrs);\r
-        }\r
-        if(this.applyLoader !== false){\r
-            attr.loader = this;\r
-        }\r
-        if(typeof attr.uiProvider == 'string'){\r
-           attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);\r
-        }\r
-        return(attr.leaf ?\r
-                        new Ext.tree.TreeNode(attr) :\r
-                        new Ext.tree.AsyncTreeNode(attr));\r
-    },\r
-\r
-    processResponse : function(response, node, callback){\r
-        var json = response.responseText;\r
-        try {\r
-            var o = eval("("+json+")");\r
-            node.beginUpdate();\r
-            for(var i = 0, len = o.length; i < len; i++){\r
-                var n = this.createNode(o[i]);\r
-                if(n){\r
-                    node.appendChild(n);\r
-                }\r
-            }\r
-            node.endUpdate();\r
-            if(typeof callback == "function"){\r
-                callback(this, node);\r
-            }\r
-        }catch(e){\r
-            this.handleFailure(response);\r
-        }\r
-    },\r
-\r
-    handleResponse : function(response){\r
-        this.transId = false;\r
-        var a = response.argument;\r
-        this.processResponse(response, a.node, a.callback);\r
-        this.fireEvent("load", this, a.node, response);\r
-    },\r
-\r
-    handleFailure : function(response){\r
-        this.transId = false;\r
-        var a = response.argument;\r
-        this.fireEvent("loadexception", this, a.node, response);\r
-        if(typeof a.callback == "function"){\r
-            a.callback(this, a.node);\r
-        }\r
-    }\r
-});
-\r
-Ext.tree.TreeFilter = function(tree, config){\r
-    this.tree = tree;\r
-    this.filtered = {};\r
-    Ext.apply(this, config);\r
-};\r
-\r
-Ext.tree.TreeFilter.prototype = {\r
-    clearBlank:false,\r
-    reverse:false,\r
-    autoClear:false,\r
-    remove:false,\r
-\r
-     \r
-    filter : function(value, attr, startNode){\r
-        attr = attr || "text";\r
-        var f;\r
-        if(typeof value == "string"){\r
-            var vlen = value.length;\r
-            
-            if(vlen == 0 && this.clearBlank){\r
-                this.clear();\r
-                return;\r
-            }\r
-            value = value.toLowerCase();\r
-            f = function(n){\r
-                return n.attributes[attr].substr(0, vlen).toLowerCase() == value;\r
-            };\r
-        }else if(value.exec){ 
-            f = function(n){\r
-                return value.test(n.attributes[attr]);\r
-            };\r
-        }else{\r
-            throw 'Illegal filter type, must be string or regex';\r
-        }\r
-        this.filterBy(f, null, startNode);\r
-       },\r
-    \r
-    \r
-    filterBy : function(fn, scope, startNode){\r
-        startNode = startNode || this.tree.root;\r
-        if(this.autoClear){\r
-            this.clear();\r
-        }\r
-        var af = this.filtered, rv = this.reverse;\r
-        var f = function(n){\r
-            if(n == startNode){\r
-                return true;\r
-            }\r
-            if(af[n.id]){\r
-                return false;\r
-            }\r
-            var m = fn.call(scope || n, n);\r
-            if(!m || rv){\r
-                af[n.id] = n;\r
-                n.ui.hide();\r
-                return false;\r
-            }\r
-            return true;\r
-        };\r
-        startNode.cascade(f);\r
-        if(this.remove){\r
-           for(var id in af){\r
-               if(typeof id != "function"){\r
-                   var n = af[id];\r
-                   if(n && n.parentNode){\r
-                       n.parentNode.removeChild(n);\r
-                   }\r
-               }\r
-           } \r
-        }\r
-    },\r
-    \r
-    \r
-    clear : function(){\r
-        var t = this.tree;\r
-        var af = this.filtered;\r
-        for(var id in af){\r
-            if(typeof id != "function"){\r
-                var n = af[id];\r
-                if(n){\r
-                    n.ui.show();\r
-                }\r
-            }\r
-        }\r
-        this.filtered = {}; \r
-    }\r
-};\r
-
-\r
-Ext.tree.TreeSorter = function(tree, config){\r
-    Ext.apply(this, config);\r
-    tree.on("beforechildrenrendered", this.doSort, this);\r
-    tree.on("append", this.updateSort, this);\r
-    tree.on("insert", this.updateSort, this);\r
-    tree.on("textchange", this.updateSortParent, this);\r
-    \r
-    var dsc = this.dir && this.dir.toLowerCase() == "desc";\r
-    var p = this.property || "text";\r
-    var sortType = this.sortType;\r
-    var fs = this.folderSort;\r
-    var cs = this.caseSensitive === true;\r
-    var leafAttr = this.leafAttr || 'leaf';\r
-\r
-    this.sortFn = function(n1, n2){\r
-        if(fs){\r
-            if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){\r
-                return 1;\r
-            }\r
-            if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){\r
-                return -1;\r
-            }\r
-        }\r
-       var v1 = sortType ? sortType(n1) : (cs ? n1.attributes[p] : n1.attributes[p].toUpperCase());\r
-       var v2 = sortType ? sortType(n2) : (cs ? n2.attributes[p] : n2.attributes[p].toUpperCase());\r
-       if(v1 < v2){\r
-                       return dsc ? +1 : -1;\r
-               }else if(v1 > v2){\r
-                       return dsc ? -1 : +1;\r
-        }else{\r
-               return 0;\r
-        }\r
-    };\r
-};\r
-\r
-Ext.tree.TreeSorter.prototype = {\r
-    doSort : function(node){\r
-        node.sort(this.sortFn);\r
-    },\r
-    \r
-    compareNodes : function(n1, n2){\r
-        return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1);\r
-    },\r
-    \r
-    updateSort : function(tree, node){\r
-        if(node.childrenRendered){\r
-            this.doSort.defer(1, this, [node]);\r
-        }\r
-    },\r
-    \r
-    updateSortParent : function(node){\r
-               var p = node.parentNode;\r
-               if(p && p.childrenRendered){\r
-            this.doSort.defer(1, this, [p]);\r
-        }\r
-    }\r
-};
-\r
-if(Ext.dd.DropZone){\r
-    \r
-Ext.tree.TreeDropZone = function(tree, config){\r
-    \r
-    this.allowParentInsert = false;\r
-    \r
-    this.allowContainerDrop = false;\r
-    \r
-    this.appendOnly = false;\r
-    Ext.tree.TreeDropZone.superclass.constructor.call(this, tree.innerCt, config);\r
-    \r
-    this.tree = tree;\r
-    \r
-    this.dragOverData = {};\r
-    
-    this.lastInsertClass = "x-tree-no-status";\r
-};\r
-\r
-Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {\r
-    \r
-    ddGroup : "TreeDD",\r
-\r
-    \r
-    expandDelay : 1000,\r
-\r
-    
-    expandNode : function(node){\r
-        if(node.hasChildNodes() && !node.isExpanded()){\r
-            node.expand(false, null, this.triggerCacheRefresh.createDelegate(this));\r
-        }\r
-    },\r
-\r
-    
-    queueExpand : function(node){\r
-        this.expandProcId = this.expandNode.defer(this.expandDelay, this, [node]);\r
-    },\r
-\r
-    
-    cancelExpand : function(){\r
-        if(this.expandProcId){\r
-            clearTimeout(this.expandProcId);\r
-            this.expandProcId = false;\r
-        }\r
-    },\r
-\r
-    
-    isValidDropPoint : function(n, pt, dd, e, data){\r
-        if(!n || !data){ return false; }\r
-        var targetNode = n.node;\r
-        var dropNode = data.node;\r
-        
-        if(!(targetNode && targetNode.isTarget && pt)){\r
-            return false;\r
-        }\r
-        if(pt == "append" && targetNode.allowChildren === false){\r
-            return false;\r
-        }\r
-        if((pt == "above" || pt == "below") && (targetNode.parentNode && targetNode.parentNode.allowChildren === false)){\r
-            return false;\r
-        }\r
-        if(dropNode && (targetNode == dropNode || dropNode.contains(targetNode))){\r
-            return false;\r
-        }\r
-        
-        var overEvent = this.dragOverData;\r
-        overEvent.tree = this.tree;\r
-        overEvent.target = targetNode;\r
-        overEvent.data = data;\r
-        overEvent.point = pt;\r
-        overEvent.source = dd;\r
-        overEvent.rawEvent = e;\r
-        overEvent.dropNode = dropNode;\r
-        overEvent.cancel = false;  \r
-        var result = this.tree.fireEvent("nodedragover", overEvent);\r
-        return overEvent.cancel === false && result !== false;\r
-    },\r
-\r
-    
-    getDropPoint : function(e, n, dd){\r
-        var tn = n.node;\r
-        if(tn.isRoot){\r
-            return tn.allowChildren !== false ? "append" : false; 
-        }\r
-        var dragEl = n.ddel;\r
-        var t = Ext.lib.Dom.getY(dragEl), b = t + dragEl.offsetHeight;\r
-        var y = Ext.lib.Event.getPageY(e);\r
-        var noAppend = tn.allowChildren === false || tn.isLeaf();\r
-        if(this.appendOnly || tn.parentNode.allowChildren === false){\r
-            return noAppend ? false : "append";\r
-        }\r
-        var noBelow = false;\r
-        if(!this.allowParentInsert){\r
-            noBelow = tn.hasChildNodes() && tn.isExpanded();\r
-        }\r
-        var q = (b - t) / (noAppend ? 2 : 3);\r
-        if(y >= t && y < (t + q)){\r
-            return "above";\r
-        }else if(!noBelow && (noAppend || y >= b-q && y <= b)){\r
-            return "below";\r
-        }else{\r
-            return "append";\r
-        }\r
-    },\r
-\r
-    
-    onNodeEnter : function(n, dd, e, data){\r
-        this.cancelExpand();\r
-    },\r
-\r
-    
-    onNodeOver : function(n, dd, e, data){\r
-        var pt = this.getDropPoint(e, n, dd);\r
-        var node = n.node;\r
-        \r
-        
-        if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()){\r
-            this.queueExpand(node);\r
-        }else if(pt != "append"){\r
-            this.cancelExpand();\r
-        }\r
-        \r
-        
-        var returnCls = this.dropNotAllowed;\r
-        if(this.isValidDropPoint(n, pt, dd, e, data)){\r
-           if(pt){\r
-               var el = n.ddel;\r
-               var cls;\r
-               if(pt == "above"){\r
-                   returnCls = n.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";\r
-                   cls = "x-tree-drag-insert-above";\r
-               }else if(pt == "below"){\r
-                   returnCls = n.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";\r
-                   cls = "x-tree-drag-insert-below";\r
-               }else{\r
-                   returnCls = "x-tree-drop-ok-append";\r
-                   cls = "x-tree-drag-append";\r
-               }\r
-               if(this.lastInsertClass != cls){\r
-                   Ext.fly(el).replaceClass(this.lastInsertClass, cls);\r
-                   this.lastInsertClass = cls;\r
-               }\r
-           }\r
-       }\r
-       return returnCls;\r
-    },\r
-\r
-    
-    onNodeOut : function(n, dd, e, data){\r
-        this.cancelExpand();\r
-        this.removeDropIndicators(n);\r
-    },\r
-\r
-    
-    onNodeDrop : function(n, dd, e, data){\r
-        var point = this.getDropPoint(e, n, dd);\r
-        var targetNode = n.node;\r
-        targetNode.ui.startDrop();\r
-        if(!this.isValidDropPoint(n, point, dd, e, data)){\r
-            targetNode.ui.endDrop();\r
-            return false;\r
-        }\r
-        
-        var dropNode = data.node || (dd.getTreeNode ? dd.getTreeNode(data, targetNode, point, e) : null);\r
-        var dropEvent = {\r
-            tree : this.tree,\r
-            target: targetNode,\r
-            data: data,\r
-            point: point,\r
-            source: dd,\r
-            rawEvent: e,\r
-            dropNode: dropNode,\r
-            cancel: !dropNode,\r
-            dropStatus: false\r
-        };\r
-        var retval = this.tree.fireEvent("beforenodedrop", dropEvent);\r
-        if(retval === false || dropEvent.cancel === true || !dropEvent.dropNode){\r
-            targetNode.ui.endDrop();\r
-            return dropEvent.dropStatus;\r
-        }\r
-        
-        targetNode = dropEvent.target;\r
-        if(point == "append" && !targetNode.isExpanded()){\r
-            targetNode.expand(false, null, function(){\r
-                this.completeDrop(dropEvent);\r
-            }.createDelegate(this));\r
-        }else{\r
-            this.completeDrop(dropEvent);\r
-        }\r
-        return true;\r
-    },\r
-\r
-    
-    completeDrop : function(de){\r
-        var ns = de.dropNode, p = de.point, t = de.target;\r
-        if(!Ext.isArray(ns)){\r
-            ns = [ns];\r
-        }\r
-        var n;\r
-        for(var i = 0, len = ns.length; i < len; i++){\r
-            n = ns[i];\r
-            if(p == "above"){\r
-                t.parentNode.insertBefore(n, t);\r
-            }else if(p == "below"){\r
-                t.parentNode.insertBefore(n, t.nextSibling);\r
-            }else{\r
-                t.appendChild(n);\r
-            }\r
-        }\r
-        n.ui.focus();\r
-        if(this.tree.hlDrop){\r
-            n.ui.highlight();\r
-        }\r
-        t.ui.endDrop();\r
-        this.tree.fireEvent("nodedrop", de);\r
-    },\r
-\r
-    
-    afterNodeMoved : function(dd, data, e, targetNode, dropNode){\r
-        if(this.tree.hlDrop){\r
-            dropNode.ui.focus();\r
-            dropNode.ui.highlight();\r
-        }\r
-        this.tree.fireEvent("nodedrop", this.tree, targetNode, data, dd, e);\r
-    },\r
-\r
-    
-    getTree : function(){\r
-        return this.tree;\r
-    },\r
-\r
-    
-    removeDropIndicators : function(n){\r
-        if(n && n.ddel){\r
-            var el = n.ddel;\r
-            Ext.fly(el).removeClass([\r
-                    "x-tree-drag-insert-above",\r
-                    "x-tree-drag-insert-below",\r
-                    "x-tree-drag-append"]);\r
-            this.lastInsertClass = "_noclass";\r
-        }\r
-    },\r
-\r
-    
-    beforeDragDrop : function(target, e, id){\r
-        this.cancelExpand();\r
-        return true;\r
-    },\r
-\r
-    
-    afterRepair : function(data){\r
-        if(data && Ext.enableFx){\r
-            data.node.ui.highlight();\r
-        }\r
-        this.hideProxy();\r
-    }    \r
-});\r
-\r
-}
-\r
-if(Ext.dd.DragZone){\r
-Ext.tree.TreeDragZone = function(tree, config){\r
-    Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config);\r
-    \r
-    this.tree = tree;\r
-};\r
-\r
-Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {\r
-    \r
-    ddGroup : "TreeDD",\r
-\r
-    
-    onBeforeDrag : function(data, e){\r
-        var n = data.node;\r
-        return n && n.draggable && !n.disabled;\r
-    },\r
-\r
-    
-    onInitDrag : function(e){\r
-        var data = this.dragData;\r
-        this.tree.getSelectionModel().select(data.node);\r
-        this.tree.eventModel.disable();\r
-        this.proxy.update("");\r
-        data.node.ui.appendDDGhost(this.proxy.ghost.dom);\r
-        this.tree.fireEvent("startdrag", this.tree, data.node, e);\r
-    },\r
-\r
-    
-    getRepairXY : function(e, data){\r
-        return data.node.ui.getDDRepairXY();\r
-    },\r
-\r
-    
-    onEndDrag : function(data, e){\r
-        this.tree.eventModel.enable.defer(100, this.tree.eventModel);\r
-        this.tree.fireEvent("enddrag", this.tree, data.node, e);\r
-    },\r
-\r
-    
-    onValidDrop : function(dd, e, id){\r
-        this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);\r
-        this.hideProxy();\r
-    },\r
-\r
-    
-    beforeInvalidDrop : function(e, id){\r
-        
-        var sm = this.tree.getSelectionModel();\r
-        sm.clearSelections();\r
-        sm.select(this.dragData.node);\r
-    }\r
-});\r
-}
-
-Ext.tree.TreeEditor = function(tree, config){
-    config = config || {};
-    var field = config.events ? config : new Ext.form.TextField(config);
-    Ext.tree.TreeEditor.superclass.constructor.call(this, field);
-
-    this.tree = tree;
-
-    if(!tree.rendered){
-        tree.on('render', this.initEditor, this);
-    }else{
-        this.initEditor(tree);
-    }
-};
-
-Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {
-    
-    alignment: "l-l",
-        autoSize: false,
-    
-    hideEl : false,
-    
-    cls: "x-small-editor x-tree-editor",
-    
-    shim:false,
-        shadow:"frame",
-    
-    maxWidth: 250,
-    
-    editDelay : 350,
-
-    initEditor : function(tree){
-        tree.on('beforeclick', this.beforeNodeClick, this);
-        tree.on('dblclick', this.onNodeDblClick, this);
-        this.on('complete', this.updateNode, this);
-        this.on('beforestartedit', this.fitToTree, this);
-        this.on('startedit', this.bindScroll, this, {delay:10});
-        this.on('specialkey', this.onSpecialKey, this);
-    },
-
-        fitToTree : function(ed, el){
-        var td = this.tree.getTreeEl().dom, nd = el.dom;
-        if(td.scrollLeft >  nd.offsetLeft){             td.scrollLeft = nd.offsetLeft;
-        }
-        var w = Math.min(
-                this.maxWidth,
-                (td.clientWidth > 20 ? td.clientWidth : td.offsetWidth) - Math.max(0, nd.offsetLeft-td.scrollLeft) - 5);
-        this.setSize(w, '');
-    },
-
-        triggerEdit : function(node, defer){
-        this.completeEdit();
-               if(node.attributes.editable !== false){
-                       this.editNode = node;
-            this.autoEditTimer = this.startEdit.defer(this.editDelay, this, [node.ui.textNode, node.text]);
-            return false;
-        }
-    },
-
-        bindScroll : function(){
-        this.tree.getTreeEl().on('scroll', this.cancelEdit, this);
-    },
-
-        beforeNodeClick : function(node, e){
-        clearTimeout(this.autoEditTimer);
-        if(this.tree.getSelectionModel().isSelected(node)){
-            e.stopEvent();
-            return this.triggerEdit(node);
-        }
-    },
-
-    onNodeDblClick : function(node, e){
-        clearTimeout(this.autoEditTimer);
-    },
-
-        updateNode : function(ed, value){
-        this.tree.getTreeEl().un('scroll', this.cancelEdit, this);
-        this.editNode.setText(value);
-    },
-
-        onHide : function(){
-        Ext.tree.TreeEditor.superclass.onHide.call(this);
-        if(this.editNode){
-            this.editNode.ui.focus.defer(50, this.editNode.ui);
-        }
-    },
-
-        onSpecialKey : function(field, e){
-        var k = e.getKey();
-        if(k == e.ESC){
-            e.stopEvent();
-            this.cancelEdit();
-        }else if(k == e.ENTER && !e.hasModifier()){
-            e.stopEvent();
-            this.completeEdit();
-        }
-    }
-});
-
-Ext.menu.Menu = function(config){
-    if(Ext.isArray(config)){
-        config = {items:config};
-    }
-    Ext.apply(this, config);
-    this.id = this.id || Ext.id();
-    this.addEvents(
-        
-        'beforeshow',
-        
-        'beforehide',
-        
-        'show',
-        
-        'hide',
-        
-        'click',
-        
-        'mouseover',
-        
-        'mouseout',
-        
-        'itemclick'
-    );
-    Ext.menu.MenuMgr.register(this);
-    Ext.menu.Menu.superclass.constructor.call(this);
-    var mis = this.items;
-    
-
-    this.items = new Ext.util.MixedCollection();
-    if(mis){
-        this.add.apply(this, mis);
-    }
-};
-
-Ext.extend(Ext.menu.Menu, Ext.util.Observable, {
-    
-    
-    
-    minWidth : 120,
-    
-    shadow : "sides",
-    
-    subMenuAlign : "tl-tr?",
-    
-    defaultAlign : "tl-bl?",
-    
-    allowOtherMenus : false,
-
-    hidden:true,
-
-    createEl : function(){
-        return new Ext.Layer({
-            cls: "x-menu",
-            shadow:this.shadow,
-            constrain: false,
-            parentEl: this.parentEl || document.body,
-            zindex:15000
-        });
-    },
-
-        render : function(){
-        if(this.el){
-            return;
-        }
-        var el = this.el = this.createEl();
-
-        if(!this.keyNav){
-            this.keyNav = new Ext.menu.MenuNav(this);
-        }
-        if(this.plain){
-            el.addClass("x-menu-plain");
-        }
-        if(this.cls){
-            el.addClass(this.cls);
-        }
-                this.focusEl = el.createChild({
-            tag: "a", cls: "x-menu-focus", href: "#", onclick: "return false;", tabIndex:"-1"
-        });
-        var ul = el.createChild({tag: "ul", cls: "x-menu-list"});
-        ul.on("click", this.onClick, this);
-        ul.on("mouseover", this.onMouseOver, this);
-        ul.on("mouseout", this.onMouseOut, this);
-        this.items.each(function(item){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            ul.dom.appendChild(li);
-            item.render(li, this);
-        }, this);
-        this.ul = ul;
-        this.autoWidth();
-    },
-
-        autoWidth : function(){
-        var el = this.el, ul = this.ul;
-        if(!el){
-            return;
-        }
-        var w = this.width;
-        if(w){
-            el.setWidth(w);
-        }else if(Ext.isIE){
-            el.setWidth(this.minWidth);
-            var t = el.dom.offsetWidth;             el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));
-        }
-    },
-
-        delayAutoWidth : function(){
-        if(this.el){
-            if(!this.awTask){
-                this.awTask = new Ext.util.DelayedTask(this.autoWidth, this);
-            }
-            this.awTask.delay(20);
-        }
-    },
-
-        findTargetItem : function(e){
-        var t = e.getTarget(".x-menu-list-item", this.ul,  true);
-        if(t && t.menuItemId){
-            return this.items.get(t.menuItemId);
-        }
-    },
-
-        onClick : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            t.onClick(e);
-            this.fireEvent("click", this, t, e);
-        }
-    },
-
-        setActiveItem : function(item, autoExpand){
-        if(item != this.activeItem){
-            if(this.activeItem){
-                this.activeItem.deactivate();
-            }
-            this.activeItem = item;
-            item.activate(autoExpand);
-        }else if(autoExpand){
-            item.expandMenu();
-        }
-    },
-
-        tryActivate : function(start, step){
-        var items = this.items;
-        for(var i = start, len = items.length; i >= 0 && i < len; i+= step){
-            var item = items.get(i);
-            if(!item.disabled && item.canActivate){
-                this.setActiveItem(item, false);
-                return item;
-            }
-        }
-        return false;
-    },
-
-        onMouseOver : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            if(t.canActivate && !t.disabled){
-                this.setActiveItem(t, true);
-            }
-        }
-        this.fireEvent("mouseover", this, e, t);
-    },
-
-        onMouseOut : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            if(t == this.activeItem && t.shouldDeactivate(e)){
-                this.activeItem.deactivate();
-                delete this.activeItem;
-            }
-        }
-        this.fireEvent("mouseout", this, e, t);
-    },
-
-    
-    isVisible : function(){
-        return this.el && !this.hidden;
-    },
-
-    
-    show : function(el, pos, parentMenu){
-        this.parentMenu = parentMenu;
-        if(!this.el){
-            this.render();
-        }
-        this.fireEvent("beforeshow", this);
-        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
-    },
-
-    
-    showAt : function(xy, parentMenu, _e){
-        this.parentMenu = parentMenu;
-        if(!this.el){
-            this.render();
-        }
-        if(_e !== false){
-            this.fireEvent("beforeshow", this);
-            xy = this.el.adjustForConstraints(xy);
-        }
-        this.el.setXY(xy);
-        this.el.show();
-        this.hidden = false;
-        this.focus();
-        this.fireEvent("show", this);
-    },
-
-    
-
-    focus : function(){
-        if(!this.hidden){
-            this.doFocus.defer(50, this);
-        }
-    },
-
-    doFocus : function(){
-        if(!this.hidden){
-            this.focusEl.focus();
-        }
-    },
-
-    
-    hide : function(deep){
-        if(this.el && this.isVisible()){
-            this.fireEvent("beforehide", this);
-            if(this.activeItem){
-                this.activeItem.deactivate();
-                this.activeItem = null;
-            }
-            this.el.hide();
-            this.hidden = true;
-            this.fireEvent("hide", this);
-        }
-        if(deep === true && this.parentMenu){
-            this.parentMenu.hide(true);
-        }
-    },
-
-    
-    add : function(){
-        var a = arguments, l = a.length, item;
-        for(var i = 0; i < l; i++){
-            var el = a[i];
-            if(el.render){                 item = this.addItem(el);
-            }else if(typeof el == "string"){                 if(el == "separator" || el == "-"){
-                    item = this.addSeparator();
-                }else{
-                    item = this.addText(el);
-                }
-            }else if(el.tagName || el.el){                 item = this.addElement(el);
-            }else if(typeof el == "object"){                 Ext.applyIf(el, this.defaults);
-                item = this.addMenuItem(el);
-            }
-        }
-        return item;
-    },
-
-    
-    getEl : function(){
-        if(!this.el){
-            this.render();
-        }
-        return this.el;
-    },
-
-    
-    addSeparator : function(){
-        return this.addItem(new Ext.menu.Separator());
-    },
-
-    
-    addElement : function(el){
-        return this.addItem(new Ext.menu.BaseItem(el));
-    },
-
-    
-    addItem : function(item){
-        this.items.add(item);
-        if(this.ul){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            this.ul.dom.appendChild(li);
-            item.render(li, this);
-            this.delayAutoWidth();
-        }
-        return item;
-    },
-
-    
-    addMenuItem : function(config){
-        if(!(config instanceof Ext.menu.Item)){
-            if(typeof config.checked == "boolean"){                 config = new Ext.menu.CheckItem(config);
-            }else{
-                config = new Ext.menu.Item(config);
-            }
-        }
-        return this.addItem(config);
-    },
-
-    
-    addText : function(text){
-        return this.addItem(new Ext.menu.TextItem(text));
-    },
-
-    
-    insert : function(index, item){
-        this.items.insert(index, item);
-        if(this.ul){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            this.ul.dom.insertBefore(li, this.ul.dom.childNodes[index]);
-            item.render(li, this);
-            this.delayAutoWidth();
-        }
-        return item;
-    },
-
-    
-    remove : function(item){
-        this.items.removeKey(item.id);
-        item.destroy();
-    },
-
-    
-    removeAll : function(){
-        var f;
-        while(f = this.items.first()){
-            this.remove(f);
-        }
-    },
-
-    
-    destroy : function(){
-        this.beforeDestroy();
-        Ext.menu.MenuMgr.unregister(this);
-        if (this.keyNav) {
-               this.keyNav.disable();  
-        }
-        this.removeAll();
-        if (this.ul) {
-               this.ul.removeAllListeners();   
-        }
-        if (this.el) {
-               this.el.destroy();      
-        }
-    },
-
-           beforeDestroy : Ext.emptyFn
-
-});
-
-Ext.menu.MenuNav = function(menu){
-    Ext.menu.MenuNav.superclass.constructor.call(this, menu.el);
-    this.scope = this.menu = menu;
-};
-
-Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {
-    doRelay : function(e, h){
-        var k = e.getKey();
-        if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){
-            this.menu.tryActivate(0, 1);
-            return false;
-        }
-        return h.call(this.scope || this, e, this.menu);
-    },
-
-    up : function(e, m){
-        if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){
-            m.tryActivate(m.items.length-1, -1);
-        }
-    },
-
-    down : function(e, m){
-        if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){
-            m.tryActivate(0, 1);
-        }
-    },
-
-    right : function(e, m){
-        if(m.activeItem){
-            m.activeItem.expandMenu(true);
-        }
-    },
-
-    left : function(e, m){
-        m.hide();
-        if(m.parentMenu && m.parentMenu.activeItem){
-            m.parentMenu.activeItem.activate();
-        }
-    },
-
-    enter : function(e, m){
-        if(m.activeItem){
-            e.stopPropagation();
-            m.activeItem.onClick(e);
-            m.fireEvent("click", this, m.activeItem);
-            return true;
-        }
-    }
-});
-
-Ext.menu.MenuMgr = function(){
-   var menus, active, groups = {}, attached = false, lastShow = new Date();
-
-      function init(){
-       menus = {};
-       active = new Ext.util.MixedCollection();
-       Ext.getDoc().addKeyListener(27, function(){
-           if(active.length > 0){
-               hideAll();
-           }
-       });
-   }
-
-      function hideAll(){
-       if(active && active.length > 0){
-           var c = active.clone();
-           c.each(function(m){
-               m.hide();
-           });
-       }
-   }
-
-      function onHide(m){
-       active.remove(m);
-       if(active.length < 1){
-           Ext.getDoc().un("mousedown", onMouseDown);
-           attached = false;
-       }
-   }
-
-      function onShow(m){
-       var last = active.last();
-       lastShow = new Date();
-       active.add(m);
-       if(!attached){
-           Ext.getDoc().on("mousedown", onMouseDown);
-           attached = true;
-       }
-       if(m.parentMenu){
-          m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
-          m.parentMenu.activeChild = m;
-       }else if(last && last.isVisible()){
-          m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
-       }
-   }
-
-      function onBeforeHide(m){
-       if(m.activeChild){
-           m.activeChild.hide();
-       }
-       if(m.autoHideTimer){
-           clearTimeout(m.autoHideTimer);
-           delete m.autoHideTimer;
-       }
-   }
-
-      function onBeforeShow(m){
-       var pm = m.parentMenu;
-       if(!pm && !m.allowOtherMenus){
-           hideAll();
-       }else if(pm && pm.activeChild){
-           pm.activeChild.hide();
-       }
-   }
-
-      function onMouseDown(e){
-       if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
-           hideAll();
-       }
-   }
-
-      function onBeforeCheck(mi, state){
-       if(state){
-           var g = groups[mi.group];
-           for(var i = 0, l = g.length; i < l; i++){
-               if(g[i] != mi){
-                   g[i].setChecked(false);
-               }
-           }
-       }
-   }
-
-   return {
-
-       
-       hideAll : function(){
-            hideAll();  
-       },
-
-              register : function(menu){
-           if(!menus){
-               init();
-           }
-           menus[menu.id] = menu;
-           menu.on("beforehide", onBeforeHide);
-           menu.on("hide", onHide);
-           menu.on("beforeshow", onBeforeShow);
-           menu.on("show", onShow);
-           var g = menu.group;
-           if(g && menu.events["checkchange"]){
-               if(!groups[g]){
-                   groups[g] = [];
-               }
-               groups[g].push(menu);
-               menu.on("checkchange", onCheck);
-           }
-       },
-
-        
-       get : function(menu){
-           if(typeof menu == "string"){                if(!menus){                     return null;
-               }
-               return menus[menu];
-           }else if(menu.events){                 return menu;
-           }else if(typeof menu.length == 'number'){                return new Ext.menu.Menu({items:menu});
-           }else{                return new Ext.menu.Menu(menu);
-           }
-       },
-
-              unregister : function(menu){
-           delete menus[menu.id];
-           menu.un("beforehide", onBeforeHide);
-           menu.un("hide", onHide);
-           menu.un("beforeshow", onBeforeShow);
-           menu.un("show", onShow);
-           var g = menu.group;
-           if(g && menu.events["checkchange"]){
-               groups[g].remove(menu);
-               menu.un("checkchange", onCheck);
-           }
-       },
-
-              registerCheckable : function(menuItem){
-           var g = menuItem.group;
-           if(g){
-               if(!groups[g]){
-                   groups[g] = [];
-               }
-               groups[g].push(menuItem);
-               menuItem.on("beforecheckchange", onBeforeCheck);
-           }
-       },
-
-              unregisterCheckable : function(menuItem){
-           var g = menuItem.group;
-           if(g){
-               groups[g].remove(menuItem);
-               menuItem.un("beforecheckchange", onBeforeCheck);
-           }
-       },
-
-       getCheckedItem : function(groupId){
-           var g = groups[groupId];
-           if(g){
-               for(var i = 0, l = g.length; i < l; i++){
-                   if(g[i].checked){
-                       return g[i];
-                   }
-               }
-           }
-           return null;
-       },
-
-       setCheckedItem : function(groupId, itemId){
-           var g = groups[groupId];
-           if(g){
-               for(var i = 0, l = g.length; i < l; i++){
-                   if(g[i].id == itemId){
-                       g[i].setChecked(true);
-                   }
-               }
-           }
-           return null;
-       }
-   };
-}();
-
-
-Ext.menu.BaseItem = function(config){
-    Ext.menu.BaseItem.superclass.constructor.call(this, config);
-
-    this.addEvents(
-        
-        'click',
-        
-        'activate',
-        
-        'deactivate'
-    );
-
-    if(this.handler){
-        this.on("click", this.handler, this.scope);
-    }
-};
-
-Ext.extend(Ext.menu.BaseItem, Ext.Component, {
-    
-    
-    
-    canActivate : false,
-    
-    activeClass : "x-menu-item-active",
-    
-    hideOnClick : true,
-    
-    hideDelay : 100,
-
-        ctype: "Ext.menu.BaseItem",
-
-        actionMode : "container",
-
-        render : function(container, parentMenu){
-        this.parentMenu = parentMenu;
-        Ext.menu.BaseItem.superclass.render.call(this, container);
-        this.container.menuItemId = this.id;
-    },
-
-        onRender : function(container, position){
-        this.el = Ext.get(this.el);
-        container.dom.appendChild(this.el.dom);
-    },
-
-    
-    setHandler : function(handler, scope){
-        if(this.handler){
-            this.un("click", this.handler, this.scope);
-        }
-        this.on("click", this.handler = handler, this.scope = scope);
-    },
-
-        onClick : function(e){
-        if(!this.disabled && this.fireEvent("click", this, e) !== false
-                && this.parentMenu.fireEvent("itemclick", this, e) !== false){
-            this.handleClick(e);
-        }else{
-            e.stopEvent();
-        }
-    },
-
-        activate : function(){
-        if(this.disabled){
-            return false;
-        }
-        var li = this.container;
-        li.addClass(this.activeClass);
-        this.region = li.getRegion().adjust(2, 2, -2, -2);
-        this.fireEvent("activate", this);
-        return true;
-    },
-
-        deactivate : function(){
-        this.container.removeClass(this.activeClass);
-        this.fireEvent("deactivate", this);
-    },
-
-        shouldDeactivate : function(e){
-        return !this.region || !this.region.contains(e.getPoint());
-    },
-
-        handleClick : function(e){
-        if(this.hideOnClick){
-            this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
-        }
-    },
-
-        expandMenu : function(autoActivate){
-            },
-
-        hideMenu : function(){
-            }
-});
-
-Ext.menu.TextItem = function(text){
-    this.text = text;
-    Ext.menu.TextItem.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {
-    
-    
-    hideOnClick : false,
-    
-    itemCls : "x-menu-text",
-
-        onRender : function(){
-        var s = document.createElement("span");
-        s.className = this.itemCls;
-        s.innerHTML = this.text;
-        this.el = s;
-        Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
-    }
-});
-
-Ext.menu.Separator = function(config){
-    Ext.menu.Separator.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {
-    
-    itemCls : "x-menu-sep",
-    
-    hideOnClick : false,
-
-        onRender : function(li){
-        var s = document.createElement("span");
-        s.className = this.itemCls;
-        s.innerHTML = "&#160;";
-        this.el = s;
-        li.addClass("x-menu-sep-li");
-        Ext.menu.Separator.superclass.onRender.apply(this, arguments);
-    }
-});
-
-Ext.menu.Item = function(config){
-    Ext.menu.Item.superclass.constructor.call(this, config);
-    if(this.menu){
-        this.menu = Ext.menu.MenuMgr.get(this.menu);
-    }
-};
-Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {
-    
-    
-    
-    
-    
-    
-    itemCls : "x-menu-item",
-    
-    canActivate : true,
-    
-    showDelay: 200,
-        hideDelay: 200,
-
-        ctype: "Ext.menu.Item",
-
-        onRender : function(container, position){
-        var el = document.createElement("a");
-        el.hideFocus = true;
-        el.unselectable = "on";
-        el.href = this.href || "#";
-        if(this.hrefTarget){
-            el.target = this.hrefTarget;
-        }
-        el.className = this.itemCls + (this.menu ?  " x-menu-item-arrow" : "") + (this.cls ?  " " + this.cls : "");
-        el.innerHTML = String.format(
-                '<img src="{0}" class="x-menu-item-icon {2}" />{1}',
-                this.icon || Ext.BLANK_IMAGE_URL, this.itemText||this.text, this.iconCls || '');
-        this.el = el;
-        Ext.menu.Item.superclass.onRender.call(this, container, position);
-    },
-
-    
-    setText : function(text){
-        this.text = text;
-        if(this.rendered){
-            this.el.update(String.format(
-                '<img src="{0}" class="x-menu-item-icon {2}">{1}',
-                this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ''));
-            this.parentMenu.autoWidth();
-        }
-    },
-
-    
-    setIconClass : function(cls){
-        var oldCls = this.iconCls;
-        this.iconCls = cls;
-        if(this.rendered){
-            this.el.child('img.x-menu-item-icon').replaceClass(oldCls, this.iconCls);
-        }
-    },
-
-        handleClick : function(e){
-        if(!this.href){             e.stopEvent();
-        }
-        Ext.menu.Item.superclass.handleClick.apply(this, arguments);
-    },
-
-        activate : function(autoExpand){
-        if(Ext.menu.Item.superclass.activate.apply(this, arguments)){
-            this.focus();
-            if(autoExpand){
-                this.expandMenu();
-            }
-        }
-        return true;
-    },
-
-        shouldDeactivate : function(e){
-        if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){
-            if(this.menu && this.menu.isVisible()){
-                return !this.menu.getEl().getRegion().contains(e.getPoint());
-            }
-            return true;
-        }
-        return false;
-    },
-
-        deactivate : function(){
-        Ext.menu.Item.superclass.deactivate.apply(this, arguments);
-        this.hideMenu();
-    },
-
-        expandMenu : function(autoActivate){
-        if(!this.disabled && this.menu){
-            clearTimeout(this.hideTimer);
-            delete this.hideTimer;
-            if(!this.menu.isVisible() && !this.showTimer){
-                this.showTimer = this.deferExpand.defer(this.showDelay, this, [autoActivate]);
-            }else if (this.menu.isVisible() && autoActivate){
-                this.menu.tryActivate(0, 1);
-            }
-        }
-    },
-
-        deferExpand : function(autoActivate){
-        delete this.showTimer;
-        this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu);
-        if(autoActivate){
-            this.menu.tryActivate(0, 1);
-        }
-    },
-
-        hideMenu : function(){
-        clearTimeout(this.showTimer);
-        delete this.showTimer;
-        if(!this.hideTimer && this.menu && this.menu.isVisible()){
-            this.hideTimer = this.deferHide.defer(this.hideDelay, this);
-        }
-    },
-
-        deferHide : function(){
-        delete this.hideTimer;
-        this.menu.hide();
-    }
-});
-
-Ext.menu.CheckItem = function(config){
-    Ext.menu.CheckItem.superclass.constructor.call(this, config);
-    this.addEvents(
-        
-        "beforecheckchange" ,
-        
-        "checkchange"
-    );
-    
-    if(this.checkHandler){
-        this.on('checkchange', this.checkHandler, this.scope);
-    }
-    Ext.menu.MenuMgr.registerCheckable(this);
-};
-Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {
-    
-    
-    itemCls : "x-menu-item x-menu-check-item",
-    
-    groupClass : "x-menu-group-item",
-
-    
-    checked: false,
-
-        ctype: "Ext.menu.CheckItem",
-
-        onRender : function(c){
-        Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
-        if(this.group){
-            this.el.addClass(this.groupClass);
-        }
-        if(this.checked){
-            this.checked = false;
-            this.setChecked(true, true);
-        }
-    },
-
-        destroy : function(){
-        Ext.menu.MenuMgr.unregisterCheckable(this);
-        Ext.menu.CheckItem.superclass.destroy.apply(this, arguments);
-    },
-
-    
-    setChecked : function(state, suppressEvent){
-        if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){
-            if(this.container){
-                this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked");
-            }
-            this.checked = state;
-            if(suppressEvent !== true){
-                this.fireEvent("checkchange", this, state);
-            }
-        }
-    },
-
-        handleClick : function(e){
-       if(!this.disabled && !(this.checked && this.group)){           this.setChecked(!this.checked);
-       }
-       Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
-    }
-});
-
-Ext.menu.Adapter = function(component, config){
-    Ext.menu.Adapter.superclass.constructor.call(this, config);
-    this.component = component;
-};
-Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, {
-        canActivate : true,
-
-        onRender : function(container, position){
-        this.component.render(container);
-        this.el = this.component.getEl();
-    },
-
-        activate : function(){
-        if(this.disabled){
-            return false;
-        }
-        this.component.focus();
-        this.fireEvent("activate", this);
-        return true;
-    },
-
-        deactivate : function(){
-        this.fireEvent("deactivate", this);
-    },
-
-        disable : function(){
-        this.component.disable();
-        Ext.menu.Adapter.superclass.disable.call(this);
-    },
-
-        enable : function(){
-        this.component.enable();
-        Ext.menu.Adapter.superclass.enable.call(this);
-    }
-});
-
-Ext.menu.DateItem = function(config){
-    Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config);
-    
-    this.picker = this.component;
-    this.addEvents('select');
-    
-    this.picker.on("render", function(picker){
-        picker.getEl().swallowEvent("click");
-        picker.container.addClass("x-menu-date-item");
-    });
-
-    this.picker.on("select", this.onSelect, this);
-};
-
-Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, {
-        onSelect : function(picker, date){
-        this.fireEvent("select", this, date, picker);
-        Ext.menu.DateItem.superclass.handleClick.call(this);
-    }
-});
-
-Ext.menu.ColorItem = function(config){
-    Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config);
-    
-    this.palette = this.component;
-    this.relayEvents(this.palette, ["select"]);
-    if(this.selectHandler){
-        this.on('select', this.selectHandler, this.scope);
-    }
-};
-Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
-
-Ext.menu.DateMenu = function(config){
-    Ext.menu.DateMenu.superclass.constructor.call(this, config);
-    this.plain = true;
-    var di = new Ext.menu.DateItem(config);
-    this.add(di);
-    
-    this.picker = di.picker;
-    
-    this.relayEvents(di, ["select"]);
-
-    this.on('beforeshow', function(){
-        if(this.picker){
-            this.picker.hideMonthPicker(true);
-        }
-    }, this);
-};
-Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, {
-    cls:'x-date-menu',
-
-        beforeDestroy : function() {
-        this.picker.destroy();
-    }
-});
-
-Ext.menu.ColorMenu = function(config){
-    Ext.menu.ColorMenu.superclass.constructor.call(this, config);
-    this.plain = true;
-    var ci = new Ext.menu.ColorItem(config);
-    this.add(ci);
-    
-    this.palette = ci.palette;
-    
-    this.relayEvents(ci, ["select"]);
-};
-Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
-
-Ext.form.Field = Ext.extend(Ext.BoxComponent,  {
-    
-    
-    
-    
-    
-    
-
-    
-    invalidClass : "x-form-invalid",
-    
-    invalidText : "The value in this field is invalid",
-    
-    focusClass : "x-form-focus",
-    
-    validationEvent : "keyup",
-    
-    validateOnBlur : true,
-    
-    validationDelay : 250,
-    
-    defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"},
-    
-    fieldClass : "x-form-field",
-    
-    msgTarget : 'qtip',
-    
-    msgFx : 'normal',
-    
-    
-    readOnly : false,
-
-    
-    disabled : false,
-
-    
-
-    
-
-        isFormField : true,
-
-        hasFocus : false,
-
-    
-    
-    
-    
-
-               initComponent : function(){
-        Ext.form.Field.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'focus',
-            
-            'blur',
-            
-            'specialkey',
-            
-            'change',
-            
-            'invalid',
-            
-            'valid'
-        );
-    },
-
-    
-    getName: function(){
-         return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || '');
-    },
-
-        onRender : function(ct, position){
-        Ext.form.Field.superclass.onRender.call(this, ct, position);
-        if(!this.el){
-            var cfg = this.getAutoCreate();
-            if(!cfg.name){
-                cfg.name = this.name || this.id;
-            }
-            if(this.inputType){
-                cfg.type = this.inputType;
-            }
-            this.el = ct.createChild(cfg, position);
-        }
-        var type = this.el.dom.type;
-        if(type){
-            if(type == 'password'){
-                type = 'text';
-            }
-            this.el.addClass('x-form-'+type);
-        }
-        if(this.readOnly){
-            this.el.dom.readOnly = true;
-        }
-        if(this.tabIndex !== undefined){
-            this.el.dom.setAttribute('tabIndex', this.tabIndex);
-        }
-
-        this.el.addClass([this.fieldClass, this.cls]);
-        this.initValue();
-    },
-
-        initValue : function(){
-        if(this.value !== undefined){
-            this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0){
-            this.setValue(this.el.dom.value);
-        }
-    },
-
-    
-    isDirty : function() {
-        if(this.disabled) {
-            return false;
-        }
-        return String(this.getValue()) !== String(this.originalValue);
-    },
-
-        afterRender : function(){
-        Ext.form.Field.superclass.afterRender.call(this);
-        this.initEvents();
-    },
-
-        fireKey : function(e){
-        if(e.isSpecialKey()){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-    
-    reset : function(){
-        this.setValue(this.originalValue);
-        this.clearInvalid();
-    },
-
-        initEvents : function(){
-        this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey,  this);
-        this.el.on("focus", this.onFocus,  this);
-        this.el.on("blur", this.onBlur,  this);
-
-                this.originalValue = this.getValue();
-    },
-
-        onFocus : function(){
-        if(!Ext.isOpera && this.focusClass){             this.el.addClass(this.focusClass);
-        }
-        if(!this.hasFocus){
-            this.hasFocus = true;
-            this.startValue = this.getValue();
-            this.fireEvent("focus", this);
-        }
-    },
-
-    beforeBlur : Ext.emptyFn,
-
-        onBlur : function(){
-        this.beforeBlur();
-        if(!Ext.isOpera && this.focusClass){             this.el.removeClass(this.focusClass);
-        }
-        this.hasFocus = false;
-        if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){
-            this.validate();
-        }
-        var v = this.getValue();
-        if(String(v) !== String(this.startValue)){
-            this.fireEvent('change', this, v, this.startValue);
-        }
-        this.fireEvent("blur", this);
-    },
-
-    
-    isValid : function(preventMark){
-        if(this.disabled){
-            return true;
-        }
-        var restore = this.preventMark;
-        this.preventMark = preventMark === true;
-        var v = this.validateValue(this.processValue(this.getRawValue()));
-        this.preventMark = restore;
-        return v;
-    },
-
-    
-    validate : function(){
-        if(this.disabled || this.validateValue(this.processValue(this.getRawValue()))){
-            this.clearInvalid();
-            return true;
-        }
-        return false;
-    },
-
-    processValue : function(value){
-        return value;
-    },
-
-            validateValue : function(value){
-        return true;
-    },
-
-    
-    markInvalid : function(msg){
-        if(!this.rendered || this.preventMark){             return;
-        }
-        this.el.addClass(this.invalidClass);
-        msg = msg || this.invalidText;
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = msg;
-                this.el.dom.qclass = 'x-form-invalid-tip';
-                if(Ext.QuickTips){                     Ext.QuickTips.enable();
-                }
-                break;
-            case 'title':
-                this.el.dom.title = msg;
-                break;
-            case 'under':
-                if(!this.errorEl){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});
-                    this.errorEl.setWidth(elp.getWidth(true)-20);
-                }
-                this.errorEl.update(msg);
-                Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
-                break;
-            case 'side':
-                if(!this.errorIcon){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
-                }
-                this.alignErrorIcon();
-                this.errorIcon.dom.qtip = msg;
-                this.errorIcon.dom.qclass = 'x-form-invalid-tip';
-                this.errorIcon.show();
-                this.on('resize', this.alignErrorIcon, this);
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = msg;
-                t.style.display = this.msgDisplay;
-                break;
-        }
-        this.fireEvent('invalid', this, msg);
-    },
-
-        alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]);
-    },
-
-    
-    clearInvalid : function(){
-        if(!this.rendered || this.preventMark){             return;
-        }
-        this.el.removeClass(this.invalidClass);
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = '';
-                break;
-            case 'title':
-                this.el.dom.title = '';
-                break;
-            case 'under':
-                if(this.errorEl){
-                    Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
-                }
-                break;
-            case 'side':
-                if(this.errorIcon){
-                    this.errorIcon.dom.qtip = '';
-                    this.errorIcon.hide();
-                    this.un('resize', this.alignErrorIcon, this);
-                }
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = '';
-                t.style.display = 'none';
-                break;
-        }
-        this.fireEvent('valid', this);
-    },
-
-    
-    getRawValue : function(){
-        var v = this.rendered ? this.el.getValue() : Ext.value(this.value, '');
-        if(v === this.emptyText){
-            v = '';
-        }
-        return v;
-    },
-
-    
-    getValue : function(){
-        if(!this.rendered) {
-            return this.value;
-        }
-        var v = this.el.getValue();
-        if(v === this.emptyText || v === undefined){
-            v = '';
-        }
-        return v;
-    },
-
-    
-    setRawValue : function(v){
-        return this.el.dom.value = (v === null || v === undefined ? '' : v);
-    },
-
-    
-    setValue : function(v){
-        this.value = v;
-        if(this.rendered){
-            this.el.dom.value = (v === null || v === undefined ? '' : v);
-            this.validate();
-        }
-    },
-
-    adjustSize : function(w, h){
-        var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
-        s.width = this.adjustWidth(this.el.dom.tagName, s.width);
-        return s;
-    },
-
-    adjustWidth : function(tag, w){
-        tag = tag.toLowerCase();
-        if(typeof w == 'number' && !Ext.isSafari){
-            if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
-                if(tag == 'input' && !Ext.isStrict){
-                    return this.inEditor ? w : w - 3;
-                }
-                if(tag == 'input' && Ext.isStrict){
-                    return w - (Ext.isIE6 ? 4 : 1);
-                }
-                if(tag = 'textarea' && Ext.isStrict){
-                    return w-2;
-                }
-            }else if(Ext.isOpera && Ext.isStrict){
-                if(tag == 'input'){
-                    return w + 2;
-                }
-                if(tag = 'textarea'){
-                    return w-2;
-                }
-            }
-        }
-        return w;
-    }
-
-    
-    
-
-    
-});
-
-
-Ext.form.Field.msgFx = {
-    normal : {
-        show: function(msgEl, f){
-            msgEl.setDisplayed('block');
-        },
-
-        hide : function(msgEl, f){
-            msgEl.setDisplayed(false).update('');
-        }
-    },
-
-    slide : {
-        show: function(msgEl, f){
-            msgEl.slideIn('t', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('t', {stopFx:true,useDisplay:true});
-        }
-    },
-
-    slideRight : {
-        show: function(msgEl, f){
-            msgEl.fixDisplay();
-            msgEl.alignTo(f.el, 'tl-tr');
-            msgEl.slideIn('l', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('l', {stopFx:true,useDisplay:true});
-        }
-    }
-};
-Ext.reg('field', Ext.form.Field);
-
-
-Ext.form.TextField = Ext.extend(Ext.form.Field,  {
-    
-    
-    grow : false,
-    
-    growMin : 30,
-    
-    growMax : 800,
-    
-    vtype : null,
-    
-    maskRe : null,
-    
-    disableKeyFilter : false,
-    
-    allowBlank : true,
-    
-    minLength : 0,
-    
-    maxLength : Number.MAX_VALUE,
-    
-    minLengthText : "The minimum length for this field is {0}",
-    
-    maxLengthText : "The maximum length for this field is {0}",
-    
-    selectOnFocus : false,
-    
-    blankText : "This field is required",
-    
-    validator : null,
-    
-    regex : null,
-    
-    regexText : "",
-    
-    emptyText : null,
-    
-    emptyClass : 'x-form-empty-field',
-
-    initComponent : function(){
-        Ext.form.TextField.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'autosize'
-        );
-    },
-
-        initEvents : function(){
-        Ext.form.TextField.superclass.initEvents.call(this);
-        if(this.validationEvent == 'keyup'){
-            this.validationTask = new Ext.util.DelayedTask(this.validate, this);
-            this.el.on('keyup', this.filterValidation, this);
-        }
-        else if(this.validationEvent !== false){
-            this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay});
-        }
-        if(this.selectOnFocus || this.emptyText){
-            this.on("focus", this.preFocus, this);
-            if(this.emptyText){
-                this.on('blur', this.postBlur, this);
-                this.applyEmptyText();
-            }
-        }
-        if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
-            this.el.on("keypress", this.filterKeys, this);
-        }
-        if(this.grow){
-            this.el.on("keyup", this.onKeyUp,  this, {buffer:50});
-            this.el.on("click", this.autoSize,  this);
-        }
-    },
-
-    processValue : function(value){
-        if(this.stripCharsRe){
-            var newValue = value.replace(this.stripCharsRe, '');
-            if(newValue !== value){
-                this.setRawValue(newValue);
-                return newValue;
-            }
-        }
-        return value;
-    },
-
-    filterValidation : function(e){
-        if(!e.isNavKeyPress()){
-            this.validationTask.delay(this.validationDelay);
-        }
-    },
-
-        onKeyUp : function(e){
-        if(!e.isNavKeyPress()){
-            this.autoSize();
-        }
-    },
-
-    
-    reset : function(){
-        Ext.form.TextField.superclass.reset.call(this);
-        this.applyEmptyText();
-    },
-
-    applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
-            this.setRawValue(this.emptyText);
-            this.el.addClass(this.emptyClass);
-        }
-    },
-
-        preFocus : function(){
-        if(this.emptyText){
-            if(this.el.dom.value == this.emptyText){
-                this.setRawValue('');
-            }
-            this.el.removeClass(this.emptyClass);
-        }
-        if(this.selectOnFocus){
-            this.el.dom.select();
-        }
-    },
-
-        postBlur : function(){
-        this.applyEmptyText();
-    },
-
-        filterKeys : function(e){
-        var k = e.getKey();
-        if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
-            return;
-        }
-        var c = e.getCharCode(), cc = String.fromCharCode(c);
-        if(Ext.isIE && (e.isSpecialKey() || !cc)){
-            return;
-        }
-        if(!this.maskRe.test(cc)){
-            e.stopEvent();
-        }
-    },
-
-    setValue : function(v){
-        if(this.emptyText && this.el && v !== undefined && v !== null && v !== ''){
-            this.el.removeClass(this.emptyClass);
-        }
-        Ext.form.TextField.superclass.setValue.apply(this, arguments);
-        this.applyEmptyText();
-        this.autoSize();
-    },
-
-    
-    validateValue : function(value){
-        if(value.length < 1 || value === this.emptyText){              if(this.allowBlank){
-                 this.clearInvalid();
-                 return true;
-             }else{
-                 this.markInvalid(this.blankText);
-                 return false;
-             }
-        }
-        if(value.length < this.minLength){
-            this.markInvalid(String.format(this.minLengthText, this.minLength));
-            return false;
-        }
-        if(value.length > this.maxLength){
-            this.markInvalid(String.format(this.maxLengthText, this.maxLength));
-            return false;
-        }
-        if(this.vtype){
-            var vt = Ext.form.VTypes;
-            if(!vt[this.vtype](value, this)){
-                this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
-                return false;
-            }
-        }
-        if(typeof this.validator == "function"){
-            var msg = this.validator(value);
-            if(msg !== true){
-                this.markInvalid(msg);
-                return false;
-            }
-        }
-        if(this.regex && !this.regex.test(value)){
-            this.markInvalid(this.regexText);
-            return false;
-        }
-        return true;
-    },
-
-    
-    selectText : function(start, end){
-        var v = this.getRawValue();
-        if(v.length > 0){
-            start = start === undefined ? 0 : start;
-            end = end === undefined ? v.length : end;
-            var d = this.el.dom;
-            if(d.setSelectionRange){
-                d.setSelectionRange(start, end);
-            }else if(d.createTextRange){
-                var range = d.createTextRange();
-                range.moveStart("character", start);
-                range.moveEnd("character", end-v.length);
-                range.select();
-            }
-        }
-    },
-
-    
-    autoSize : function(){
-        if(!this.grow || !this.rendered){
-            return;
-        }
-        if(!this.metrics){
-            this.metrics = Ext.util.TextMetrics.createInstance(this.el);
-        }
-        var el = this.el;
-        var v = el.dom.value;
-        var d = document.createElement('div');
-        d.appendChild(document.createTextNode(v));
-        v = d.innerHTML;
-        d = null;
-        v += "&#160;";
-        var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) +  10, this.growMin));
-        this.el.setWidth(w);
-        this.fireEvent("autosize", this, w);
-    }
-});
-Ext.reg('textfield', Ext.form.TextField);
-
-
-Ext.form.TriggerField = Ext.extend(Ext.form.TextField,  {
-    
-    
-    defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"},
-    
-    hideTrigger:false,
-
-    
-    autoSize: Ext.emptyFn,
-        monitorTab : true,
-        deferHeight : true,
-        mimicing : false,
-
-        onResize : function(w, h){
-        Ext.form.TriggerField.superclass.onResize.call(this, w, h);
-        if(typeof w == 'number'){
-            this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth()));
-        }
-        this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
-    },
-
-        adjustSize : Ext.BoxComponent.prototype.adjustSize,
-
-        getResizeEl : function(){
-        return this.wrap;
-    },
-
-        getPositionEl : function(){
-        return this.wrap;
-    },
-
-        alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
-    },
-
-        onRender : function(ct, position){
-        Ext.form.TriggerField.superclass.onRender.call(this, ct, position);
-        this.wrap = this.el.wrap({cls: "x-form-field-wrap"});
-        this.trigger = this.wrap.createChild(this.triggerConfig ||
-                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass});
-        if(this.hideTrigger){
-            this.trigger.setDisplayed(false);
-        }
-        this.initTrigger();
-        if(!this.width){
-            this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
-        }
-    },
-
-        initTrigger : function(){
-        this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
-        this.trigger.addClassOnOver('x-form-trigger-over');
-        this.trigger.addClassOnClick('x-form-trigger-click');
-    },
-
-        onDestroy : function(){
-        if(this.trigger){
-            this.trigger.removeAllListeners();
-            this.trigger.remove();
-        }
-        if(this.wrap){
-            this.wrap.remove();
-        }
-        Ext.form.TriggerField.superclass.onDestroy.call(this);
-    },
-
-        onFocus : function(){
-        Ext.form.TriggerField.superclass.onFocus.call(this);
-        if(!this.mimicing){
-            this.wrap.addClass('x-trigger-wrap-focus');
-            this.mimicing = true;
-            Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this, {delay: 10});
-            if(this.monitorTab){
-                this.el.on("keydown", this.checkTab, this);
-            }
-        }
-    },
-
-        checkTab : function(e){
-        if(e.getKey() == e.TAB){
-            this.triggerBlur();
-        }
-    },
-
-        onBlur : function(){
-            },
-
-        mimicBlur : function(e){
-        if(!this.wrap.contains(e.target) && this.validateBlur(e)){
-            this.triggerBlur();
-        }
-    },
-
-        triggerBlur : function(){
-        this.mimicing = false;
-        Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
-        if(this.monitorTab){
-            this.el.un("keydown", this.checkTab, this);
-        }
-        this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
-        Ext.form.TriggerField.superclass.onBlur.call(this);
-    },
-
-    beforeBlur : Ext.emptyFn, 
-
-            validateBlur : function(e){
-        return true;
-    },
-
-        onDisable : function(){
-        Ext.form.TriggerField.superclass.onDisable.call(this);
-        if(this.wrap){
-            this.wrap.addClass('x-item-disabled');
-        }
-    },
-
-        onEnable : function(){
-        Ext.form.TriggerField.superclass.onEnable.call(this);
-        if(this.wrap){
-            this.wrap.removeClass('x-item-disabled');
-        }
-    },
-
-
-        onShow : function(){
-        if(this.wrap){
-            this.wrap.dom.style.display = '';
-            this.wrap.dom.style.visibility = 'visible';
-        }
-    },
-
-        onHide : function(){
-        this.wrap.dom.style.display = 'none';
-    },
-
-    
-    onTriggerClick : Ext.emptyFn
-
-    
-    
-    
-});
-
-Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {
-    initComponent : function(){
-        Ext.form.TwinTriggerField.superclass.initComponent.call(this);
-
-        this.triggerConfig = {
-            tag:'span', cls:'x-form-twin-triggers', cn:[
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class}
-        ]};
-    },
-
-    getTrigger : function(index){
-        return this.triggers[index];
-    },
-
-    initTrigger : function(){
-        var ts = this.trigger.select('.x-form-trigger', true);
-        this.wrap.setStyle('overflow', 'hidden');
-        var triggerField = this;
-        ts.each(function(t, all, index){
-            t.hide = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = 'none';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            t.show = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = '';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            var triggerIndex = 'Trigger'+(index+1);
-
-            if(this['hide'+triggerIndex]){
-                t.dom.style.display = 'none';
-            }
-            t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
-            t.addClassOnOver('x-form-trigger-over');
-            t.addClassOnClick('x-form-trigger-click');
-        }, this);
-        this.triggers = ts.elements;
-    },
-
-    onTrigger1Click : Ext.emptyFn,
-    onTrigger2Click : Ext.emptyFn
-});
-Ext.reg('trigger', Ext.form.TriggerField);
-
-Ext.form.TextArea = Ext.extend(Ext.form.TextField,  {
-    
-    growMin : 60,
-    
-    growMax: 1000,
-    growAppend : '&#160;\n&#160;',
-    growPad : 0,
-
-    enterIsSpecial : false,
-
-    
-    preventScrollbars: false,
-    
-
-        onRender : function(ct, position){
-        if(!this.el){
-            this.defaultAutoCreate = {
-                tag: "textarea",
-                style:"width:100px;height:60px;",
-                autocomplete: "off"
-            };
-        }
-        Ext.form.TextArea.superclass.onRender.call(this, ct, position);
-        if(this.grow){
-            this.textSizeEl = Ext.DomHelper.append(document.body, {
-                tag: "pre", cls: "x-form-grow-sizer"
-            });
-            if(this.preventScrollbars){
-                this.el.setStyle("overflow", "hidden");
-            }
-            this.el.setHeight(this.growMin);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.textSizeEl){
-            Ext.removeNode(this.textSizeEl);
-        }
-        Ext.form.TextArea.superclass.onDestroy.call(this);
-    },
-
-    fireKey : function(e){
-        if(e.isSpecialKey() && (this.enterIsSpecial || (e.getKey() != e.ENTER || e.hasModifier()))){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-        onKeyUp : function(e){
-        if(!e.isNavKeyPress() || e.getKey() == e.ENTER){
-            this.autoSize();
-        }
-    },
-
-    
-    autoSize : function(){
-        if(!this.grow || !this.textSizeEl){
-            return;
-        }
-        var el = this.el;
-        var v = el.dom.value;
-        var ts = this.textSizeEl;
-        ts.innerHTML = '';
-        ts.appendChild(document.createTextNode(v));
-        v = ts.innerHTML;
-
-        Ext.fly(ts).setWidth(this.el.getWidth());
-        if(v.length < 1){
-            v = "&#160;&#160;";
-        }else{
-            if(Ext.isIE){
-                v = v.replace(/\n/g, '<p>&#160;</p>');
-            }
-            v += this.growAppend;
-        }
-        ts.innerHTML = v;
-        var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin)+this.growPad);
-        if(h != this.lastHeight){
-            this.lastHeight = h;
-            this.el.setHeight(h);
-            this.fireEvent("autosize", this, h);
-        }
-    }
-});
-Ext.reg('textarea', Ext.form.TextArea);
-
-Ext.form.NumberField = Ext.extend(Ext.form.TextField,  {
-    
-    fieldClass: "x-form-field x-form-num-field",
-    
-    allowDecimals : true,
-    
-    decimalSeparator : ".",
-    
-    decimalPrecision : 2,
-    
-    allowNegative : true,
-    
-    minValue : Number.NEGATIVE_INFINITY,
-    
-    maxValue : Number.MAX_VALUE,
-    
-    minText : "The minimum value for this field is {0}",
-    
-    maxText : "The maximum value for this field is {0}",
-    
-    nanText : "{0} is not a valid number",
-    
-    baseChars : "0123456789",
-
-        initEvents : function(){
-        Ext.form.NumberField.superclass.initEvents.call(this);
-        var allowed = this.baseChars+'';
-        if(this.allowDecimals){
-            allowed += this.decimalSeparator;
-        }
-        if(this.allowNegative){
-            allowed += "-";
-        }
-        this.stripCharsRe = new RegExp('[^'+allowed+']', 'gi');
-        var keyPress = function(e){
-            var k = e.getKey();
-            if(!Ext.isIE && (e.isSpecialKey() || k == e.BACKSPACE || k == e.DELETE)){
-                return;
-            }
-            var c = e.getCharCode();
-            if(allowed.indexOf(String.fromCharCode(c)) === -1){
-                e.stopEvent();
-            }
-        };
-        this.el.on("keypress", keyPress, this);
-    },
-
-        validateValue : function(value){
-        if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){              return true;
-        }
-        value = String(value).replace(this.decimalSeparator, ".");
-        if(isNaN(value)){
-            this.markInvalid(String.format(this.nanText, value));
-            return false;
-        }
-        var num = this.parseValue(value);
-        if(num < this.minValue){
-            this.markInvalid(String.format(this.minText, this.minValue));
-            return false;
-        }
-        if(num > this.maxValue){
-            this.markInvalid(String.format(this.maxText, this.maxValue));
-            return false;
-        }
-        return true;
-    },
-
-    getValue : function(){
-        return this.fixPrecision(this.parseValue(Ext.form.NumberField.superclass.getValue.call(this)));
-    },
-
-    setValue : function(v){
-       v = parseFloat(v);
-       v = isNaN(v) ? '' : String(v).replace(".", this.decimalSeparator);
-        Ext.form.NumberField.superclass.setValue.call(this, v);
-    },
-
-        parseValue : function(value){
-        value = parseFloat(String(value).replace(this.decimalSeparator, "."));
-        return isNaN(value) ? '' : value;
-    },
-
-        fixPrecision : function(value){
-        var nan = isNaN(value);
-        if(!this.allowDecimals || this.decimalPrecision == -1 || nan || !value){
-           return nan ? '' : value;
-        }
-        return parseFloat(parseFloat(value).toFixed(this.decimalPrecision));
-    },
-
-    beforeBlur : function(){
-        var v = this.parseValue(this.getRawValue());
-        if(v){
-            this.setValue(this.fixPrecision(v));
-        }
-    }
-});
-Ext.reg('numberfield', Ext.form.NumberField);
-
-Ext.form.DateField = Ext.extend(Ext.form.TriggerField,  {
-    
-    format : "m/d/y",
-    
-    altFormats : "m/d/Y|n/j/Y|n/j/y|m/j/y|n/d/y|m/j/Y|n/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d|Y-m-d",
-    
-    disabledDays : null,
-    
-    disabledDaysText : "Disabled",
-    
-    disabledDates : null,
-    
-    disabledDatesText : "Disabled",
-    
-    minValue : null,
-    
-    maxValue : null,
-    
-    minText : "The date in this field must be equal to or after {0}",
-    
-    maxText : "The date in this field must be equal to or before {0}",
-    
-    invalidText : "{0} is not a valid date - it must be in the format {1}",
-    
-    triggerClass : 'x-form-date-trigger',
-    
-
-        defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
-
-    initComponent : function(){
-        Ext.form.DateField.superclass.initComponent.call(this);
-        if(typeof this.minValue == "string"){
-            this.minValue = this.parseDate(this.minValue);
-        }
-        if(typeof this.maxValue == "string"){
-            this.maxValue = this.parseDate(this.maxValue);
-        }
-        this.ddMatch = null;
-        if(this.disabledDates){
-            var dd = this.disabledDates;
-            var re = "(?:";
-            for(var i = 0; i < dd.length; i++){
-                re += dd[i];
-                if(i != dd.length-1) re += "|";
-            }
-            this.ddMatch = new RegExp(re + ")");
-        }
-    },
-
-        validateValue : function(value){
-        value = this.formatDate(value);
-        if(!Ext.form.DateField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){              return true;
-        }
-        var svalue = value;
-        value = this.parseDate(value);
-        if(!value){
-            this.markInvalid(String.format(this.invalidText, svalue, this.format));
-            return false;
-        }
-        var time = value.getTime();
-        if(this.minValue && time < this.minValue.getTime()){
-            this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
-            return false;
-        }
-        if(this.maxValue && time > this.maxValue.getTime()){
-            this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
-            return false;
-        }
-        if(this.disabledDays){
-            var day = value.getDay();
-            for(var i = 0; i < this.disabledDays.length; i++) {
-               if(day === this.disabledDays[i]){
-                   this.markInvalid(this.disabledDaysText);
-                    return false;
-               }
-            }
-        }
-        var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
-            this.markInvalid(String.format(this.disabledDatesText, fvalue));
-            return false;
-        }
-        return true;
-    },
-
-            validateBlur : function(){
-        return !this.menu || !this.menu.isVisible();
-    },
-
-    
-    getValue : function(){
-        return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "";
-    },
-
-    
-    setValue : function(date){
-        Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
-    },
-
-        parseDate : function(value){
-        if(!value || Ext.isDate(value)){
-            return value;
-        }
-        var v = Date.parseDate(value, this.format);
-        if(!v && this.altFormats){
-            if(!this.altFormatsArray){
-                this.altFormatsArray = this.altFormats.split("|");
-            }
-            for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
-                v = Date.parseDate(value, this.altFormatsArray[i]);
-            }
-        }
-        return v;
-    },
-
-        onDestroy : function(){
-        if(this.menu) {
-            this.menu.destroy();
-        }
-        if(this.wrap){
-            this.wrap.remove();
-        }
-        Ext.form.DateField.superclass.onDestroy.call(this);
-    },
-
-        formatDate : function(date){
-        return Ext.isDate(date) ? date.dateFormat(this.format) : date;
-    },
-
-        menuListeners : {
-        select: function(m, d){
-            this.setValue(d);
-        },
-        show : function(){             this.onFocus();
-        },
-        hide : function(){
-            this.focus.defer(10, this);
-            var ml = this.menuListeners;
-            this.menu.un("select", ml.select,  this);
-            this.menu.un("show", ml.show,  this);
-            this.menu.un("hide", ml.hide,  this);
-        }
-    },
-
-            onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.menu == null){
-            this.menu = new Ext.menu.DateMenu();
-        }
-        Ext.apply(this.menu.picker,  {
-            minDate : this.minValue,
-            maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
-            disabledDatesText : this.disabledDatesText,
-            disabledDays : this.disabledDays,
-            disabledDaysText : this.disabledDaysText,
-            format : this.format,
-            minText : String.format(this.minText, this.formatDate(this.minValue)),
-            maxText : String.format(this.maxText, this.formatDate(this.maxValue))
-        });
-        this.menu.on(Ext.apply({}, this.menuListeners, {
-            scope:this
-        }));
-        this.menu.picker.setValue(this.getValue() || new Date());
-        this.menu.show(this.el, "tl-bl?");
-    },
-
-    beforeBlur : function(){
-        var v = this.parseDate(this.getRawValue());
-        if(v){
-            this.setValue(v);
-        }
-    }
-
-    
-    
-    
-    
-});
-Ext.reg('datefield', Ext.form.DateField);
-
-Ext.form.ComboBox = Ext.extend(Ext.form.TriggerField, {
-    
-    
-    
-    
-    
-
-        defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
-    
-    
-    
-    
-    
-    
-    listClass: '',
-    
-    selectedClass: 'x-combo-selected',
-    
-    triggerClass : 'x-form-arrow-trigger',
-    
-    shadow:'sides',
-    
-    listAlign: 'tl-bl?',
-    
-    maxHeight: 300,
-    
-    minHeight: 90,
-    
-    triggerAction: 'query',
-    
-    minChars : 4,
-    
-    typeAhead: false,
-    
-    queryDelay: 500,
-    
-    pageSize: 0,
-    
-    selectOnFocus:false,
-    
-    queryParam: 'query',
-    
-    loadingText: 'Loading...',
-    
-    resizable: false,
-    
-    handleHeight : 8,
-    
-    editable: true,
-    
-    allQuery: '',
-    
-    mode: 'remote',
-    
-    minListWidth : 70,
-    
-    forceSelection:false,
-    
-    typeAheadDelay : 250,
-    
-
-    
-    lazyInit : true,
-
-    initComponent : function(){
-        Ext.form.ComboBox.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'expand',
-            
-            'collapse',
-            
-            'beforeselect',
-            
-            'select',
-            
-            'beforequery'
-        );
-        if(this.transform){
-            this.allowDomMove = false;
-            var s = Ext.getDom(this.transform);
-            if(!this.hiddenName){
-                this.hiddenName = s.name;
-            }
-            if(!this.store){
-                this.mode = 'local';
-                var d = [], opts = s.options;
-                for(var i = 0, len = opts.length;i < len; i++){
-                    var o = opts[i];
-                    var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text;
-                    if(o.selected) {
-                        this.value = value;
-                    }
-                    d.push([value, o.text]);
-                }
-                this.store = new Ext.data.SimpleStore({
-                    'id': 0,
-                    fields: ['value', 'text'],
-                    data : d
-                });
-                this.valueField = 'value';
-                this.displayField = 'text';
-            }
-            s.name = Ext.id();             if(!this.lazyRender){
-                this.target = true;
-                this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
-                Ext.removeNode(s);                 this.render(this.el.parentNode);
-            }else{
-                Ext.removeNode(s);             }
-
-        }
-        this.selectedIndex = -1;
-        if(this.mode == 'local'){
-            if(this.initialConfig.queryDelay === undefined){
-                this.queryDelay = 10;
-            }
-            if(this.initialConfig.minChars === undefined){
-                this.minChars = 0;
-            }
-        }
-    },
-
-        onRender : function(ct, position){
-        Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
-        if(this.hiddenName){
-            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: (this.hiddenId||this.hiddenName)},
-                    'before', true);
-            this.hiddenField.value =
-                this.hiddenValue !== undefined ? this.hiddenValue :
-                this.value !== undefined ? this.value : '';
-
-                        this.el.dom.removeAttribute('name');
-        }
-        if(Ext.isGecko){
-            this.el.dom.setAttribute('autocomplete', 'off');
-        }
-
-        if(!this.lazyInit){
-            this.initList();
-        }else{
-            this.on('focus', this.initList, this, {single: true});
-        }
-
-        if(!this.editable){
-            this.editable = true;
-            this.setEditable(false);
-        }
-    },
-
-    initList : function(){
-        if(!this.list){
-            var cls = 'x-combo-list';
-
-            this.list = new Ext.Layer({
-                shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
-            });
-
-            var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
-            this.list.setWidth(lw);
-            this.list.swallowEvent('mousewheel');
-            this.assetHeight = 0;
-
-            if(this.title){
-                this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
-                this.assetHeight += this.header.getHeight();
-            }
-
-            this.innerList = this.list.createChild({cls:cls+'-inner'});
-            this.innerList.on('mouseover', this.onViewOver, this);
-            this.innerList.on('mousemove', this.onViewMove, this);
-            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
-
-            if(this.pageSize){
-                this.footer = this.list.createChild({cls:cls+'-ft'});
-                this.pageTb = new Ext.PagingToolbar({
-                    store:this.store,
-                    pageSize: this.pageSize,
-                    renderTo:this.footer
-                });
-                this.assetHeight += this.footer.getHeight();
-            }
-
-            if(!this.tpl){
-                           
-                this.tpl = '<tpl for="."><div class="'+cls+'-item">{' + this.displayField + '}</div></tpl>';
-            }
-
-                   
-            this.view = new Ext.DataView({
-                applyTo: this.innerList,
-                tpl: this.tpl,
-                singleSelect: true,
-                selectedClass: this.selectedClass,
-                itemSelector: this.itemSelector || '.' + cls + '-item'
-            });
-
-            this.view.on('click', this.onViewClick, this);
-
-            this.bindStore(this.store, true);
-
-            if(this.resizable){
-                this.resizer = new Ext.Resizable(this.list,  {
-                   pinned:true, handles:'se'
-                });
-                this.resizer.on('resize', function(r, w, h){
-                    this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
-                    this.listWidth = w;
-                    this.innerList.setWidth(w - this.list.getFrameWidth('lr'));
-                    this.restrictHeight();
-                }, this);
-                this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
-            }
-        }
-    },
-
-
-        bindStore : function(store, initial){
-        if(this.store && !initial){
-            this.store.un('beforeload', this.onBeforeLoad, this);
-            this.store.un('load', this.onLoad, this);
-            this.store.un('loadexception', this.collapse, this);
-            if(!store){
-                this.store = null;
-                if(this.view){
-                    this.view.setStore(null);
-                }
-            }
-        }
-        if(store){
-            this.store = Ext.StoreMgr.lookup(store);
-
-            this.store.on('beforeload', this.onBeforeLoad, this);
-            this.store.on('load', this.onLoad, this);
-            this.store.on('loadexception', this.collapse, this);
-
-            if(this.view){
-                this.view.setStore(store);
-            }
-        }
-    },
-
-        initEvents : function(){
-        Ext.form.ComboBox.superclass.initEvents.call(this);
-
-        this.keyNav = new Ext.KeyNav(this.el, {
-            "up" : function(e){
-                this.inKeyMode = true;
-                this.selectPrev();
-            },
-
-            "down" : function(e){
-                if(!this.isExpanded()){
-                    this.onTriggerClick();
-                }else{
-                    this.inKeyMode = true;
-                    this.selectNext();
-                }
-            },
-
-            "enter" : function(e){
-                this.onViewClick();
-                this.delayedCheck = true;
-                               this.unsetDelayCheck.defer(10, this);
-            },
-
-            "esc" : function(e){
-                this.collapse();
-            },
-
-            "tab" : function(e){
-                this.onViewClick(false);
-                return true;
-            },
-
-            scope : this,
-
-            doRelay : function(foo, bar, hname){
-                if(hname == 'down' || this.scope.isExpanded()){
-                   return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
-                }
-                return true;
-            },
-
-            forceKeyDown : true
-        });
-        this.queryDelay = Math.max(this.queryDelay || 10,
-                this.mode == 'local' ? 10 : 250);
-        this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
-        if(this.typeAhead){
-            this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
-        }
-        if(this.editable !== false){
-            this.el.on("keyup", this.onKeyUp, this);
-        }
-        if(this.forceSelection){
-            this.on('blur', this.doForce, this);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.view){
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
-        }
-        if(this.list){
-            this.list.destroy();
-        }
-        this.bindStore(null);
-        Ext.form.ComboBox.superclass.onDestroy.call(this);
-    },
-
-       unsetDelayCheck : function(){
-               delete this.delayedCheck;
-       },
-        fireKey : function(e){
-        if(e.isNavKeyPress() && !this.isExpanded() && !this.delayedCheck){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-        onResize: function(w, h){
-        Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
-        if(this.list && this.listWidth === undefined){
-            var lw = Math.max(w, this.minListWidth);
-            this.list.setWidth(lw);
-            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'));
-        }
-    },
-
-        onEnable: function(){
-        Ext.form.ComboBox.superclass.onEnable.apply(this, arguments);
-        if(this.hiddenField){
-            this.hiddenField.disabled = false;
-        }
-    },
-
-        onDisable: function(){
-        Ext.form.ComboBox.superclass.onDisable.apply(this, arguments);
-        if(this.hiddenField){
-            this.hiddenField.disabled = true;
-        }
-    },
-
-    
-    setEditable : function(value){
-        if(value == this.editable){
-            return;
-        }
-        this.editable = value;
-        if(!value){
-            this.el.dom.setAttribute('readOnly', true);
-            this.el.on('mousedown', this.onTriggerClick,  this);
-            this.el.addClass('x-combo-noedit');
-        }else{
-            this.el.dom.setAttribute('readOnly', false);
-            this.el.un('mousedown', this.onTriggerClick,  this);
-            this.el.removeClass('x-combo-noedit');
-        }
-    },
-
-        onBeforeLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        this.innerList.update(this.loadingText ?
-               '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
-        this.restrictHeight();
-        this.selectedIndex = -1;
-    },
-
-        onLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        if(this.store.getCount() > 0){
-            this.expand();
-            this.restrictHeight();
-            if(this.lastQuery == this.allQuery){
-                if(this.editable){
-                    this.el.dom.select();
-                }
-                if(!this.selectByValue(this.value, true)){
-                    this.select(0, true);
-                }
-            }else{
-                this.selectNext();
-                if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
-                    this.taTask.delay(this.typeAheadDelay);
-                }
-            }
-        }else{
-            this.onEmptyResults();
-        }
-            },
-
-        onTypeAhead : function(){
-        if(this.store.getCount() > 0){
-            var r = this.store.getAt(0);
-            var newValue = r.data[this.displayField];
-            var len = newValue.length;
-            var selStart = this.getRawValue().length;
-            if(selStart != len){
-                this.setRawValue(newValue);
-                this.selectText(selStart, newValue.length);
-            }
-        }
-    },
-
-        onSelect : function(record, index){
-        if(this.fireEvent('beforeselect', this, record, index) !== false){
-            this.setValue(record.data[this.valueField || this.displayField]);
-            this.collapse();
-            this.fireEvent('select', this, record, index);
-        }
-    },
-
-    
-    getValue : function(){
-        if(this.valueField){
-            return typeof this.value != 'undefined' ? this.value : '';
-        }else{
-            return Ext.form.ComboBox.superclass.getValue.call(this);
-        }
-    },
-
-    
-    clearValue : function(){
-        if(this.hiddenField){
-            this.hiddenField.value = '';
-        }
-        this.setRawValue('');
-        this.lastSelectionText = '';
-        this.applyEmptyText();
-        this.value = '';
-    },
-
-    
-    setValue : function(v){
-        var text = v;
-        if(this.valueField){
-            var r = this.findRecord(this.valueField, v);
-            if(r){
-                text = r.data[this.displayField];
-            }else if(this.valueNotFoundText !== undefined){
-                text = this.valueNotFoundText;
-            }
-        }
-        this.lastSelectionText = text;
-        if(this.hiddenField){
-            this.hiddenField.value = v;
-        }
-        Ext.form.ComboBox.superclass.setValue.call(this, text);
-        this.value = v;
-    },
-
-        findRecord : function(prop, value){
-        var record;
-        if(this.store.getCount() > 0){
-            this.store.each(function(r){
-                if(r.data[prop] == value){
-                    record = r;
-                    return false;
-                }
-            });
-        }
-        return record;
-    },
-
-        onViewMove : function(e, t){
-        this.inKeyMode = false;
-    },
-
-        onViewOver : function(e, t){
-        if(this.inKeyMode){             return;
-        }
-        var item = this.view.findItemFromChild(t);
-        if(item){
-            var index = this.view.indexOf(item);
-            this.select(index, false);
-        }
-    },
-
-        onViewClick : function(doFocus){
-        var index = this.view.getSelectedIndexes()[0];
-        var r = this.store.getAt(index);
-        if(r){
-            this.onSelect(r, index);
-        }
-        if(doFocus !== false){
-            this.el.focus();
-        }
-    },
-
-       restrictHeight : function(){
-        this.innerList.dom.style.height = '';
-        var inner = this.innerList.dom;
-        var pad = this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight;
-        var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
-        var ha = this.getPosition()[1]-Ext.getBody().getScroll().top;
-        var hb = Ext.lib.Dom.getViewHeight()-ha-this.getSize().height;
-        var space = Math.max(ha, hb, this.minHeight || 0)-this.list.shadow.offset-pad-2;
-        h = Math.min(h, space, this.maxHeight);
-        
-        this.innerList.setHeight(h);
-        this.list.beginUpdate();
-        this.list.setHeight(h+pad);
-        this.list.alignTo(this.el, this.listAlign);
-        this.list.endUpdate();
-    },
-
-        onEmptyResults : function(){
-        this.collapse();
-    },
-
-    
-    isExpanded : function(){
-        return this.list && this.list.isVisible();
-    },
-
-    
-    selectByValue : function(v, scrollIntoView){
-        if(v !== undefined && v !== null){
-            var r = this.findRecord(this.valueField || this.displayField, v);
-            if(r){
-                this.select(this.store.indexOf(r), scrollIntoView);
-                return true;
-            }
-        }
-        return false;
-    },
-
-    
-    select : function(index, scrollIntoView){
-        this.selectedIndex = index;
-        this.view.select(index);
-        if(scrollIntoView !== false){
-            var el = this.view.getNode(index);
-            if(el){
-                this.innerList.scrollChildIntoView(el, false);
-            }
-        }
-    },
-
-        selectNext : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex < ct-1){
-                this.select(this.selectedIndex+1);
-            }
-        }
-    },
-
-        selectPrev : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex != 0){
-                this.select(this.selectedIndex-1);
-            }
-        }
-    },
-
-        onKeyUp : function(e){
-        if(this.editable !== false && !e.isSpecialKey()){
-            this.lastKey = e.getKey();
-            this.dqTask.delay(this.queryDelay);
-        }
-    },
-
-        validateBlur : function(){
-        return !this.list || !this.list.isVisible();
-    },
-
-        initQuery : function(){
-        this.doQuery(this.getRawValue());
-    },
-
-        doForce : function(){
-        if(this.el.dom.value.length > 0){
-            this.el.dom.value =
-                this.lastSelectionText === undefined ? '' : this.lastSelectionText;
-            this.applyEmptyText();
-        }
-    },
-
-    
-    doQuery : function(q, forceAll){
-        if(q === undefined || q === null){
-            q = '';
-        }
-        var qe = {
-            query: q,
-            forceAll: forceAll,
-            combo: this,
-            cancel:false
-        };
-        if(this.fireEvent('beforequery', qe)===false || qe.cancel){
-            return false;
-        }
-        q = qe.query;
-        forceAll = qe.forceAll;
-        if(forceAll === true || (q.length >= this.minChars)){
-            if(this.lastQuery !== q){
-                this.lastQuery = q;
-                if(this.mode == 'local'){
-                    this.selectedIndex = -1;
-                    if(forceAll){
-                        this.store.clearFilter();
-                    }else{
-                        this.store.filter(this.displayField, q);
-                    }
-                    this.onLoad();
-                }else{
-                    this.store.baseParams[this.queryParam] = q;
-                    this.store.load({
-                        params: this.getParams(q)
-                    });
-                    this.expand();
-                }
-            }else{
-                this.selectedIndex = -1;
-                this.onLoad();
-            }
-        }
-    },
-
-        getParams : function(q){
-        var p = {};
-                if(this.pageSize){
-            p.start = 0;
-            p.limit = this.pageSize;
-        }
-        return p;
-    },
-
-    
-    collapse : function(){
-        if(!this.isExpanded()){
-            return;
-        }
-        this.list.hide();
-        Ext.getDoc().un('mousewheel', this.collapseIf, this);
-        Ext.getDoc().un('mousedown', this.collapseIf, this);
-        this.fireEvent('collapse', this);
-    },
-
-        collapseIf : function(e){
-        if(!e.within(this.wrap) && !e.within(this.list)){
-            this.collapse();
-        }
-    },
-
-    
-    expand : function(){
-        if(this.isExpanded() || !this.hasFocus){
-            return;
-        }
-        this.list.alignTo(this.wrap, this.listAlign);
-        this.list.show();
-        this.innerList.setOverflow('auto');         Ext.getDoc().on('mousewheel', this.collapseIf, this);
-        Ext.getDoc().on('mousedown', this.collapseIf, this);
-        this.fireEvent('expand', this);
-    },
-
-            onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.isExpanded()){
-            this.collapse();
-            this.el.focus();
-        }else {
-            this.onFocus({});
-            if(this.triggerAction == 'all') {
-                this.doQuery(this.allQuery, true);
-            } else {
-                this.doQuery(this.getRawValue());
-            }
-            this.el.focus();
-        }
-    }
-
-    
-    
-    
-    
-
-});
-Ext.reg('combo', Ext.form.ComboBox);
-
-Ext.form.Checkbox = Ext.extend(Ext.form.Field,  {
-    
-    focusClass : undefined,
-    
-    fieldClass: "x-form-field",
-    
-    checked: false,
-    
-    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
-    
-    
-
-           initComponent : function(){
-        Ext.form.Checkbox.superclass.initComponent.call(this);
-        this.addEvents(
-            
-            'check'
-        );
-    },
-
-        onResize : function(){
-        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel){
-            this.el.alignTo(this.wrap, 'c-c');
-        }
-    },
-    
-        initEvents : function(){
-        Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.el.on("click", this.onClick,  this);
-        this.el.on("change", this.onClick,  this);
-    },
-
-           getResizeEl : function(){
-        return this.wrap;
-    },
-
-        getPositionEl : function(){
-        return this.wrap;
-    },
-
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn,
-
-        onRender : function(ct, position){
-        Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
-        if(this.inputValue !== undefined){
-            this.el.dom.value = this.inputValue;
-        }
-        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
-        if(this.boxLabel){
-            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
-        }
-        if(this.checked){
-            this.setValue(true);
-        }else{
-            this.checked = this.el.dom.checked;
-        }
-    },
-    
-        onDestroy : function(){
-        if(this.wrap){
-            this.wrap.remove();
-        }
-        Ext.form.Checkbox.superclass.onDestroy.call(this);
-    },
-
-        initValue : Ext.emptyFn,
-
-    
-    getValue : function(){
-        if(this.rendered){
-            return this.el.dom.checked;
-        }
-        return false;
-    },
-
-           onClick : function(){
-        if(this.el.dom.checked != this.checked){
-            this.setValue(this.el.dom.checked);
-        }
-    },
-
-    
-    setValue : function(v){
-        this.checked = (v === true || v === 'true' || v == '1' || String(v).toLowerCase() == 'on');
-        if(this.el && this.el.dom){
-            this.el.dom.checked = this.checked;
-            this.el.dom.defaultChecked = this.checked;
-        }
-        this.fireEvent("check", this, this.checked);
-    }
-});
-Ext.reg('checkbox', Ext.form.Checkbox);
-
-Ext.form.Radio = Ext.extend(Ext.form.Checkbox, {
-    inputType: 'radio',
-
-    
-    markInvalid : Ext.emptyFn,
-    
-    clearInvalid : Ext.emptyFn,
-
-    
-    getGroupValue : function(){
-       var p = this.el.up('form') || Ext.getBody();
-        var c = p.child('input[name='+this.el.dom.name+']:checked', true);
-        return c ? c.value : null;
-    },
-    
-        onClick : function(){
-       if(this.el.dom.checked != this.checked){
-               var p = this.el.up('form') || Ext.getBody();
-                       var els = p.select('input[name='+this.el.dom.name+']');
-                       els.each(function(el){
-                               if(el.dom.id == this.id){
-                                       this.setValue(true);
-                               }else{
-                                       Ext.getCmp(el.dom.id).setValue(false);
-                               }
-                       }, this);
-               }
-    },
-
-    
-    setValue : function(v){
-       if (typeof v == 'boolean') {
-            Ext.form.Radio.superclass.setValue.call(this, v);
-        } else {
-            var r = this.el.up('form').child('input[name='+this.el.dom.name+'][value='+v+']', true);
-            if (r){
-                r.checked = true;
-            };
-        }
-    }
-});
-Ext.reg('radio', Ext.form.Radio);
-\r
-Ext.form.Hidden = Ext.extend(Ext.form.Field, {\r
-    
-    inputType : 'hidden',\r
-\r
-    
-    onRender : function(){\r
-        Ext.form.Hidden.superclass.onRender.apply(this, arguments);\r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        this.originalValue = this.getValue();\r
-    },\r
-\r
-    
-    setSize : Ext.emptyFn,\r
-    setWidth : Ext.emptyFn,\r
-    setHeight : Ext.emptyFn,\r
-    setPosition : Ext.emptyFn,\r
-    setPagePosition : Ext.emptyFn,\r
-    markInvalid : Ext.emptyFn,\r
-    clearInvalid : Ext.emptyFn\r
-});\r
-Ext.reg('hidden', Ext.form.Hidden);
-
-Ext.form.BasicForm = function(el, config){
-    Ext.apply(this, config);
-    
-    this.items = new Ext.util.MixedCollection(false, function(o){
-        return o.id || (o.id = Ext.id());
-    });
-    this.addEvents(
-        
-        'beforeaction',
-        
-        'actionfailed',
-        
-        'actioncomplete'
-    );
-    
-    if(el){
-        this.initEl(el);
-    }
-    Ext.form.BasicForm.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {
-    
-    
-    
-    
-    
-    
-    
-    timeout: 30,
-
-        activeAction : null,
-
-    
-    trackResetOnLoad : false,
-
-    
-    
-    
-        initEl : function(el){
-        this.el = Ext.get(el);
-        this.id = this.el.id || Ext.id();
-        if(!this.standardSubmit){
-            this.el.on('submit', this.onSubmit, this);
-        }
-        this.el.addClass('x-form');
-    },
-
-    
-    getEl: function(){
-        return this.el;
-    },
-
-        onSubmit : function(e){
-        e.stopEvent();
-    },
-    
-       destroy: function() {
-        this.items.each(function(f){
-            Ext.destroy(f);
-        });
-        if(this.el){
-                       this.el.removeAllListeners();
-                       this.el.remove();
-        }
-               this.purgeListeners();
-       },
-
-    
-    isValid : function(){
-        var valid = true;
-        this.items.each(function(f){
-           if(!f.validate()){
-               valid = false;
-           }
-        });
-        return valid;
-    },
-
-    
-    isDirty : function(){
-        var dirty = false;
-        this.items.each(function(f){
-           if(f.isDirty()){
-               dirty = true;
-               return false;
-           }
-        });
-        return dirty;
-    },
-
-    
-    doAction : function(action, options){
-        if(typeof action == 'string'){
-            action = new Ext.form.Action.ACTION_TYPES[action](this, options);
-        }
-        if(this.fireEvent('beforeaction', this, action) !== false){
-            this.beforeAction(action);
-            action.run.defer(100, action);
-        }
-        return this;
-    },
-
-    
-    submit : function(options){
-        if(this.standardSubmit){
-            var v = this.isValid();
-            if(v){
-                this.el.dom.submit();
-            }
-            return v;
-        }
-        this.doAction('submit', options);
-        return this;
-    },
-
-    
-    load : function(options){
-        this.doAction('load', options);
-        return this;
-    },
-
-    
-    updateRecord : function(record){
-        record.beginEdit();
-        var fs = record.fields;
-        fs.each(function(f){
-            var field = this.findField(f.name);
-            if(field){
-                record.set(f.name, field.getValue());
-            }
-        }, this);
-        record.endEdit();
-        return this;
-    },
-
-    
-    loadRecord : function(record){
-        this.setValues(record.data);
-        return this;
-    },
-
-        beforeAction : function(action){
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.mask(o.waitMsg, 'x-mask-loading');
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget = Ext.get(this.waitMsgTarget);
-                this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading');
-            }else{
-                Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...');
-            }
-        }
-    },
-
-        afterAction : function(action, success){
-        this.activeAction = null;
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.unmask();
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget.unmask();
-            }else{
-                Ext.MessageBox.updateProgress(1);
-                Ext.MessageBox.hide();
-            }
-        }
-        if(success){
-            if(o.reset){
-                this.reset();
-            }
-            Ext.callback(o.success, o.scope, [this, action]);
-            this.fireEvent('actioncomplete', this, action);
-        }else{
-            Ext.callback(o.failure, o.scope, [this, action]);
-            this.fireEvent('actionfailed', this, action);
-        }
-    },
-
-    
-    findField : function(id){
-        var field = this.items.get(id);
-        if(!field){
-            this.items.each(function(f){
-                if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){
-                    field = f;
-                    return false;
-                }
-            });
-        }
-        return field || null;
-    },
-
-
-    
-    markInvalid : function(errors){
-        if(Ext.isArray(errors)){
-            for(var i = 0, len = errors.length; i < len; i++){
-                var fieldError = errors[i];
-                var f = this.findField(fieldError.id);
-                if(f){
-                    f.markInvalid(fieldError.msg);
-                }
-            }
-        }else{
-            var field, id;
-            for(id in errors){
-                if(typeof errors[id] != 'function' && (field = this.findField(id))){
-                    field.markInvalid(errors[id]);
-                }
-            }
-        }
-        return this;
-    },
-
-    
-    setValues : function(values){
-        if(Ext.isArray(values)){             for(var i = 0, len = values.length; i < len; i++){
-                var v = values[i];
-                var f = this.findField(v.id);
-                if(f){
-                    f.setValue(v.value);
-                    if(this.trackResetOnLoad){
-                        f.originalValue = f.getValue();
-                    }
-                }
-            }
-        }else{             var field, id;
-            for(id in values){
-                if(typeof values[id] != 'function' && (field = this.findField(id))){
-                    field.setValue(values[id]);
-                    if(this.trackResetOnLoad){
-                        field.originalValue = field.getValue();
-                    }
-                }
-            }
-        }
-        return this;
-    },
-
-    
-    getValues : function(asString){
-        var fs = Ext.lib.Ajax.serializeForm(this.el.dom);
-        if(asString === true){
-            return fs;
-        }
-        return Ext.urlDecode(fs);
-    },
-
-    
-    clearInvalid : function(){
-        this.items.each(function(f){
-           f.clearInvalid();
-        });
-        return this;
-    },
-
-    
-    reset : function(){
-        this.items.each(function(f){
-            f.reset();
-        });
-        return this;
-    },
-
-    
-    add : function(){
-        this.items.addAll(Array.prototype.slice.call(arguments, 0));
-        return this;
-    },
-
-
-    
-    remove : function(field){
-        this.items.remove(field);
-        return this;
-    },
-
-    
-    render : function(){
-        this.items.each(function(f){
-            if(f.isFormField && !f.rendered && document.getElementById(f.id)){                 f.applyToMarkup(f.id);
-            }
-        });
-        return this;
-    },
-
-    
-    applyToFields : function(o){
-        this.items.each(function(f){
-           Ext.apply(f, o);
-        });
-        return this;
-    },
-
-    
-    applyIfToFields : function(o){
-        this.items.each(function(f){
-           Ext.applyIf(f, o);
-        });
-        return this;
-    }
-});
-
-Ext.BasicForm = Ext.form.BasicForm;
-
-Ext.FormPanel = Ext.extend(Ext.Panel, {
-       
-    
-    
-    
-    buttonAlign:'center',
-
-    
-    minButtonWidth:75,
-
-    
-    labelAlign:'left',
-
-    
-    monitorValid : false,
-
-    
-    monitorPoll : 200,
-
-    
-    layout: 'form',
-
-        initComponent :function(){
-        this.form = this.createForm();
-        
-        Ext.FormPanel.superclass.initComponent.call(this);
-
-        this.addEvents(
-            
-            'clientvalidation'
-        );
-
-        this.relayEvents(this.form, ['beforeaction', 'actionfailed', 'actioncomplete']);
-    },
-
-        createForm: function(){
-        delete this.initialConfig.listeners;
-        return new Ext.form.BasicForm(null, this.initialConfig);
-    },
-
-        initFields : function(){
-        var f = this.form;
-        var formPanel = this;
-        var fn = function(c){
-            if(c.doLayout && c != formPanel){
-                Ext.applyIf(c, {
-                    labelAlign: c.ownerCt.labelAlign,
-                    labelWidth: c.ownerCt.labelWidth,
-                    itemCls: c.ownerCt.itemCls
-                });
-                if(c.items){
-                    c.items.each(fn);
-                }
-            }else if(c.isFormField){
-                f.add(c);
-            }
-        }
-        this.items.each(fn);
-    },
-
-        getLayoutTarget : function(){
-        return this.form.el;
-    },
-
-    
-    getForm : function(){
-        return this.form;
-    },
-
-        onRender : function(ct, position){
-        this.initFields();
-
-        Ext.FormPanel.superclass.onRender.call(this, ct, position);
-        var o = {
-            tag: 'form',
-            method : this.method || 'POST',
-            id : this.formId || Ext.id()
-        };
-        if(this.fileUpload) {
-            o.enctype = 'multipart/form-data';
-        }
-        this.form.initEl(this.body.createChild(o));
-    },
-    
-        beforeDestroy: function(){
-        Ext.FormPanel.superclass.beforeDestroy.call(this);
-        Ext.destroy(this.form);
-    },
-
-        initEvents : function(){
-        Ext.FormPanel.superclass.initEvents.call(this);
-               this.items.on('remove', this.onRemove, this);
-               this.items.on('add', this.onAdd, this);
-        if(this.monitorValid){             this.startMonitoring();
-        }
-    },
-    
-       onAdd : function(ct, c) {
-               if (c.isFormField) {
-                       this.form.add(c);
-               }
-       },
-       
-               onRemove : function(c) {
-               if (c.isFormField) {
-                       Ext.destroy(c.container.up('.x-form-item'));
-                       this.form.remove(c);
-               }
-       },
-
-    
-    startMonitoring : function(){
-        if(!this.bound){
-            this.bound = true;
-            Ext.TaskMgr.start({
-                run : this.bindHandler,
-                interval : this.monitorPoll || 200,
-                scope: this
-            });
-        }
-    },
-
-    
-    stopMonitoring : function(){
-        this.bound = false;
-    },
-
-    
-    load : function(){
-        this.form.load.apply(this.form, arguments);  
-    },
-
-        onDisable : function(){
-        Ext.FormPanel.superclass.onDisable.call(this);
-        if(this.form){
-            this.form.items.each(function(){
-                 this.disable();
-            });
-        }
-    },
-
-        onEnable : function(){
-        Ext.FormPanel.superclass.onEnable.call(this);
-        if(this.form){
-            this.form.items.each(function(){
-                 this.enable();
-            });
-        }
-    },
-
-        bindHandler : function(){
-        if(!this.bound){
-            return false;         }
-        var valid = true;
-        this.form.items.each(function(f){
-            if(!f.isValid(true)){
-                valid = false;
-                return false;
-            }
-        });
-        if(this.buttons){
-            for(var i = 0, len = this.buttons.length; i < len; i++){
-                var btn = this.buttons[i];
-                if(btn.formBind === true && btn.disabled === valid){
-                    btn.setDisabled(!valid);
-                }
-            }
-        }
-        this.fireEvent('clientvalidation', this, valid);
-    }
-});
-Ext.reg('form', Ext.FormPanel);
-
-Ext.form.FormPanel = Ext.FormPanel;
-
-
-\r
-Ext.form.FieldSet = Ext.extend(Ext.Panel, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    baseCls:'x-fieldset',\r
-    \r
-    layout: 'form',\r
-\r
-    
-    onRender : function(ct, position){\r
-        if(!this.el){\r
-            this.el = document.createElement('fieldset');\r
-            this.el.id = this.id;\r
-            if (this.title || this.header || this.checkboxToggle) {\r
-                this.el.appendChild(document.createElement('legend')).className = 'x-fieldset-header';\r
-            }\r
-        }\r
-\r
-        Ext.form.FieldSet.superclass.onRender.call(this, ct, position);\r
-\r
-        if(this.checkboxToggle){\r
-            var o = typeof this.checkboxToggle == 'object' ?\r
-                    this.checkboxToggle :\r
-                    {tag: 'input', type: 'checkbox', name: this.checkboxName || this.id+'-checkbox'};\r
-            this.checkbox = this.header.insertFirst(o);\r
-            this.checkbox.dom.checked = !this.collapsed;\r
-            this.checkbox.on('click', this.onCheckClick, this);\r
-        }\r
-    },\r
-\r
-    
-    onCollapse : function(doAnim, animArg){\r
-        if(this.checkbox){\r
-            this.checkbox.dom.checked = false;\r
-        }\r
-        this.afterCollapse();\r
-\r
-    },\r
-\r
-    
-    onExpand : function(doAnim, animArg){\r
-        if(this.checkbox){\r
-            this.checkbox.dom.checked = true;\r
-        }\r
-        this.afterExpand();\r
-    },\r
-\r
-    \r
-    onCheckClick : function(){\r
-        this[this.checkbox.dom.checked ? 'expand' : 'collapse']();\r
-    }\r
-\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-});\r
-Ext.reg('fieldset', Ext.form.FieldSet);\r
-\r
-
-\r
-\r
-Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {\r
-    \r
-    enableFormat : true,\r
-    \r
-    enableFontSize : true,\r
-    \r
-    enableColors : true,\r
-    \r
-    enableAlignments : true,\r
-    \r
-    enableLists : true,\r
-    \r
-    enableSourceEdit : true,\r
-    \r
-    enableLinks : true,\r
-    \r
-    enableFont : true,\r
-    \r
-    createLinkText : 'Please enter the URL for the link:',\r
-    \r
-    defaultLinkValue : 'http:/'+'/',\r
-    \r
-    fontFamilies : [\r
-        'Arial',\r
-        'Courier New',\r
-        'Tahoma',\r
-        'Times New Roman',\r
-        'Verdana'\r
-    ],\r
-    defaultFont: 'tahoma',\r
-\r
-    
-    validationEvent : false,\r
-    deferHeight: true,\r
-    initialized : false,\r
-    activated : false,\r
-    sourceEditMode : false,\r
-    onFocus : Ext.emptyFn,\r
-    iframePad:3,\r
-    hideMode:'offsets',\r
-    defaultAutoCreate : {\r
-        tag: "textarea",\r
-        style:"width:500px;height:300px;",\r
-        autocomplete: "off"\r
-    },\r
-\r
-    
-    initComponent : function(){\r
-        this.addEvents(\r
-            \r
-            'initialize',\r
-            \r
-            'activate',\r
-             \r
-            'beforesync',\r
-             \r
-            'beforepush',\r
-             \r
-            'sync',\r
-             \r
-            'push',\r
-             \r
-            'editmodechange'\r
-        )\r
-    },\r
-\r
-    createFontOptions : function(){\r
-        var buf = [], fs = this.fontFamilies, ff, lc;\r
-        for(var i = 0, len = fs.length; i< len; i++){\r
-            ff = fs[i];\r
-            lc = ff.toLowerCase();\r
-            buf.push(\r
-                '<option value="',lc,'" style="font-family:',ff,';"',\r
-                    (this.defaultFont == lc ? ' selected="true">' : '>'),\r
-                    ff,\r
-                '</option>'\r
-            );\r
-        }\r
-        return buf.join('');\r
-    },\r
-    \r
-    createToolbar : function(editor){\r
-\r
-        function btn(id, toggle, handler){\r
-            return {\r
-                itemId : id,\r
-                cls : 'x-btn-icon x-edit-'+id,\r
-                enableToggle:toggle !== false,\r
-                scope: editor,\r
-                handler:handler||editor.relayBtnCmd,\r
-                clickEvent:'mousedown',\r
-                tooltip: editor.buttonTips[id] || undefined,\r
-                tabIndex:-1\r
-            };\r
-        }\r
-\r
-        
-        var tb = new Ext.Toolbar({\r
-            renderTo:this.wrap.dom.firstChild\r
-        });\r
-\r
-        
-        tb.el.on('click', function(e){\r
-            e.preventDefault();\r
-        });\r
-\r
-        if(this.enableFont && !Ext.isSafari){\r
-            this.fontSelect = tb.el.createChild({\r
-                tag:'select',\r
-                cls:'x-font-select',\r
-                html: this.createFontOptions()\r
-            });\r
-            this.fontSelect.on('change', function(){\r
-                var font = this.fontSelect.dom.value;\r
-                this.relayCmd('fontname', font);\r
-                this.deferFocus();\r
-            }, this);\r
-            tb.add(\r
-                this.fontSelect.dom,\r
-                '-'\r
-            );\r
-        };\r
-\r
-        if(this.enableFormat){\r
-            tb.add(\r
-                btn('bold'),\r
-                btn('italic'),\r
-                btn('underline')\r
-            );\r
-        };\r
-\r
-        if(this.enableFontSize){\r
-            tb.add(\r
-                '-',\r
-                btn('increasefontsize', false, this.adjustFont),\r
-                btn('decreasefontsize', false, this.adjustFont)\r
-            );\r
-        };\r
-\r
-        if(this.enableColors){\r
-            tb.add(\r
-                '-', {\r
-                    itemId:'forecolor',\r
-                    cls:'x-btn-icon x-edit-forecolor',\r
-                    clickEvent:'mousedown',\r
-                    tooltip: editor.buttonTips['forecolor'] || undefined,\r
-                    tabIndex:-1,\r
-                    menu : new Ext.menu.ColorMenu({\r
-                        allowReselect: true,\r
-                        focus: Ext.emptyFn,\r
-                        value:'000000',\r
-                        plain:true,\r
-                        selectHandler: function(cp, color){\r
-                            this.execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#'+color : color);\r
-                            this.deferFocus();\r
-                        },\r
-                        scope: this,\r
-                        clickEvent:'mousedown'\r
-                    })\r
-                }, {\r
-                    itemId:'backcolor',\r
-                    cls:'x-btn-icon x-edit-backcolor',\r
-                    clickEvent:'mousedown',\r
-                    tooltip: editor.buttonTips['backcolor'] || undefined,\r
-                    tabIndex:-1,\r
-                    menu : new Ext.menu.ColorMenu({\r
-                        focus: Ext.emptyFn,\r
-                        value:'FFFFFF',\r
-                        plain:true,\r
-                        allowReselect: true,\r
-                        selectHandler: function(cp, color){\r
-                            if(Ext.isGecko){\r
-                                this.execCmd('useCSS', false);\r
-                                this.execCmd('hilitecolor', color);\r
-                                this.execCmd('useCSS', true);\r
-                                this.deferFocus();\r
-                            }else{\r
-                                this.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isSafari || Ext.isIE ? '#'+color : color);\r
-                                this.deferFocus();\r
-                            }\r
-                        },\r
-                        scope:this,\r
-                        clickEvent:'mousedown'\r
-                    })\r
-                }\r
-            );\r
-        };\r
-\r
-        if(this.enableAlignments){\r
-            tb.add(\r
-                '-',\r
-                btn('justifyleft'),\r
-                btn('justifycenter'),\r
-                btn('justifyright')\r
-            );\r
-        };\r
-\r
-        if(!Ext.isSafari){\r
-            if(this.enableLinks){\r
-                tb.add(\r
-                    '-',\r
-                    btn('createlink', false, this.createLink)\r
-                );\r
-            };\r
-\r
-            if(this.enableLists){\r
-                tb.add(\r
-                    '-',\r
-                    btn('insertorderedlist'),\r
-                    btn('insertunorderedlist')\r
-                );\r
-            }\r
-            if(this.enableSourceEdit){\r
-                tb.add(\r
-                    '-',\r
-                    btn('sourceedit', true, function(btn){\r
-                        this.toggleSourceEdit(btn.pressed);\r
-                    })\r
-                );\r
-            }\r
-        }\r
-\r
-        this.tb = tb;\r
-    },\r
-\r
-    \r
-    getDocMarkup : function(){\r
-        return '<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';\r
-    },\r
-\r
-    getEditorBody : function(){\r
-        return this.doc.body || this.doc.documentElement;\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        Ext.form.HtmlEditor.superclass.onRender.call(this, ct, position);\r
-        this.el.dom.style.border = '0 none';\r
-        this.el.dom.setAttribute('tabIndex', -1);\r
-        this.el.addClass('x-hidden');\r
-        if(Ext.isIE){ 
-            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')\r
-        }\r
-        this.wrap = this.el.wrap({\r
-            cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'}\r
-        });\r
-\r
-        this.createToolbar(this);\r
-\r
-        this.tb.items.each(function(item){\r
-           if(item.itemId != 'sourceedit'){\r
-                item.disable();\r
-            }\r
-        });\r
-\r
-        var iframe = document.createElement('iframe');\r
-        iframe.name = Ext.id();\r
-        iframe.frameBorder = 'no';\r
-\r
-        iframe.src=(Ext.SSL_SECURE_URL || "javascript:false");\r
-\r
-        this.wrap.dom.appendChild(iframe);\r
-\r
-        this.iframe = iframe;\r
-\r
-        if(Ext.isIE){\r
-            iframe.contentWindow.document.designMode = 'on';\r
-            this.doc = iframe.contentWindow.document;\r
-            this.win = iframe.contentWindow;\r
-        } else {\r
-            this.doc = (iframe.contentDocument || window.frames[iframe.name].document);\r
-            this.win = window.frames[iframe.name];\r
-            this.doc.designMode = 'on';\r
-        }\r
-        this.doc.open();\r
-        this.doc.write(this.getDocMarkup())\r
-        this.doc.close();\r
-\r
-        var task = { 
-            run : function(){\r
-                if(this.doc.body || this.doc.readyState == 'complete'){\r
-                    Ext.TaskMgr.stop(task);\r
-                    this.doc.designMode="on";\r
-                    this.initEditor.defer(10, this);\r
-                }\r
-            },\r
-            interval : 10,\r
-            duration:10000,\r
-            scope: this\r
-        };\r
-        Ext.TaskMgr.start(task);\r
-\r
-        if(!this.width){\r
-            this.setSize(this.el.getSize());\r
-        }\r
-    },\r
-\r
-    
-    onResize : function(w, h){\r
-        Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments);\r
-        if(this.el && this.iframe){\r
-            if(typeof w == 'number'){\r
-                var aw = w - this.wrap.getFrameWidth('lr');\r
-                this.el.setWidth(this.adjustWidth('textarea', aw));\r
-                this.iframe.style.width = aw + 'px';\r
-            }\r
-            if(typeof h == 'number'){\r
-                var ah = h - this.wrap.getFrameWidth('tb') - this.tb.el.getHeight();\r
-                this.el.setHeight(this.adjustWidth('textarea', ah));\r
-                this.iframe.style.height = ah + 'px';\r
-                if(this.doc){\r
-                    this.getEditorBody().style.height = (ah - (this.iframePad*2)) + 'px';\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    toggleSourceEdit : function(sourceEditMode){\r
-        if(sourceEditMode === undefined){\r
-            sourceEditMode = !this.sourceEditMode;\r
-        }\r
-        this.sourceEditMode = sourceEditMode === true;\r
-        var btn = this.tb.items.get('sourceedit');\r
-        if(btn.pressed !== this.sourceEditMode){\r
-            btn.toggle(this.sourceEditMode);\r
-            return;\r
-        }\r
-        if(this.sourceEditMode){\r
-            this.tb.items.each(function(item){\r
-                if(item.itemId != 'sourceedit'){\r
-                    item.disable();\r
-                }\r
-            });\r
-            this.syncValue();\r
-            this.iframe.className = 'x-hidden';\r
-            this.el.removeClass('x-hidden');\r
-            this.el.dom.removeAttribute('tabIndex');\r
-            this.el.focus();\r
-        }else{\r
-            if(this.initialized){\r
-                this.tb.items.each(function(item){\r
-                    item.enable();\r
-                });\r
-            }\r
-            this.pushValue();\r
-            this.iframe.className = '';\r
-            this.el.addClass('x-hidden');\r
-            this.el.dom.setAttribute('tabIndex', -1);\r
-            this.deferFocus();\r
-        }\r
-        var lastSize = this.lastSize;\r
-        if(lastSize){\r
-            delete this.lastSize;\r
-            this.setSize(lastSize);\r
-        }\r
-        this.fireEvent('editmodechange', this, this.sourceEditMode);\r
-    },\r
-\r
-    
-    createLink : function(){\r
-        var url = prompt(this.createLinkText, this.defaultLinkValue);\r
-        if(url && url != 'http:/'+'/'){\r
-            this.relayCmd('createlink', url);\r
-        }\r
-    },\r
-\r
-    
-    adjustSize : Ext.BoxComponent.prototype.adjustSize,\r
-\r
-    
-    getResizeEl : function(){\r
-        return this.wrap;\r
-    },\r
-\r
-    
-    getPositionEl : function(){\r
-        return this.wrap;\r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        this.originalValue = this.getValue();\r
-    },\r
-\r
-    \r
-    markInvalid : Ext.emptyFn,\r
-    \r
-    clearInvalid : Ext.emptyFn,\r
-\r
-    setValue : function(v){\r
-        Ext.form.HtmlEditor.superclass.setValue.call(this, v);\r
-        this.pushValue();\r
-    },\r
-\r
-    \r
-    cleanHtml : function(html){\r
-        html = String(html);\r
-        if(html.length > 5){\r
-            if(Ext.isSafari){ 
-                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');\r
-            }\r
-        }\r
-        if(html == '&nbsp;'){\r
-            html = '';\r
-        }\r
-        return html;\r
-    },\r
-\r
-    \r
-    syncValue : function(){\r
-        if(this.initialized){\r
-            var bd = this.getEditorBody();\r
-            var html = bd.innerHTML;\r
-            if(Ext.isSafari){\r
-                var bs = bd.getAttribute('style'); 
-                var m = bs.match(/text-align:(.*?);/i);\r
-                if(m && m[1]){\r
-                    html = '<div style="'+m[0]+'">' + html + '</div>';\r
-                }\r
-            }\r
-            html = this.cleanHtml(html);\r
-            if(this.fireEvent('beforesync', this, html) !== false){\r
-                this.el.dom.value = html;\r
-                this.fireEvent('sync', this, html);\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    pushValue : function(){\r
-        if(this.initialized){\r
-            var v = this.el.dom.value;\r
-            if(!this.activated && v.length < 1){\r
-                v = '&nbsp;';\r
-            }\r
-            if(this.fireEvent('beforepush', this, v) !== false){\r
-                this.getEditorBody().innerHTML = v;\r
-                this.fireEvent('push', this, v);\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    deferFocus : function(){\r
-        this.focus.defer(10, this);\r
-    },\r
-\r
-    
-    focus : function(){\r
-        if(this.win && !this.sourceEditMode){\r
-            this.win.focus();\r
-        }else{\r
-            this.el.focus();\r
-        }\r
-    },\r
-\r
-    
-    initEditor : function(){\r
-        var dbody = this.getEditorBody();\r
-        var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');\r
-        ss['background-attachment'] = 'fixed'; 
-        dbody.bgProperties = 'fixed'; 
-        Ext.DomHelper.applyStyles(dbody, ss);\r
-        Ext.EventManager.on(this.doc, {\r
-            'mousedown': this.onEditorEvent,\r
-            'dblclick': this.onEditorEvent,\r
-            'click': this.onEditorEvent,\r
-            'keyup': this.onEditorEvent,\r
-            buffer:100,\r
-            scope: this\r
-        });\r
-        if(Ext.isGecko){\r
-            Ext.EventManager.on(this.doc, 'keypress', this.applyCommand, this);\r
-        }\r
-        if(Ext.isIE || Ext.isSafari || Ext.isOpera){\r
-            Ext.EventManager.on(this.doc, 'keydown', this.fixKeys, this);\r
-        }\r
-        this.initialized = true;\r
-\r
-        this.fireEvent('initialize', this);\r
-        this.pushValue();\r
-    },\r
-\r
-    
-    onDestroy : function(){\r
-        if(this.rendered){\r
-            this.tb.items.each(function(item){\r
-                if(item.menu){\r
-                    item.menu.removeAll();\r
-                    if(item.menu.el){\r
-                        item.menu.el.destroy();\r
-                    }\r
-                }\r
-                item.destroy();\r
-            });\r
-            this.wrap.dom.innerHTML = '';\r
-            this.wrap.remove();\r
-        }\r
-    },\r
-\r
-    
-    onFirstFocus : function(){\r
-        this.activated = true;\r
-        this.tb.items.each(function(item){\r
-           item.enable();\r
-        });\r
-        if(Ext.isGecko){ 
-            this.win.focus();\r
-            var s = this.win.getSelection();\r
-            if(!s.focusNode || s.focusNode.nodeType != 3){\r
-                var r = s.getRangeAt(0);\r
-                r.selectNodeContents(this.getEditorBody());\r
-                r.collapse(true);\r
-                this.deferFocus();\r
-            }\r
-            try{\r
-                this.execCmd('useCSS', true);\r
-                this.execCmd('styleWithCSS', false);\r
-            }catch(e){}\r
-        }\r
-        this.fireEvent('activate', this);\r
-    },\r
-\r
-    
-    adjustFont: function(btn){\r
-        var adjust = btn.itemId == 'increasefontsize' ? 1 : -1;\r
-\r
-        var v = parseInt(this.doc.queryCommandValue('FontSize') || 2, 10);\r
-        if(Ext.isSafari3 || Ext.isAir){\r
-            
-            
-            if(v <= 10){\r
-                v = 1 + adjust;\r
-            }else if(v <= 13){\r
-                v = 2 + adjust;\r
-            }else if(v <= 16){\r
-                v = 3 + adjust;\r
-            }else if(v <= 18){\r
-                v = 4 + adjust;\r
-            }else if(v <= 24){\r
-                v = 5 + adjust;\r
-            }else {\r
-                v = 6 + adjust;\r
-            }\r
-            v = v.constrain(1, 6);\r
-        }else{\r
-            if(Ext.isSafari){ 
-                adjust *= 2;\r
-            }\r
-            v = Math.max(1, v+adjust) + (Ext.isSafari ? 'px' : 0);\r
-        }\r
-        this.execCmd('FontSize', v);\r
-    },\r
-\r
-    onEditorEvent : function(e){\r
-        this.updateToolbar();\r
-    },\r
-\r
-\r
-    \r
-    updateToolbar: function(){\r
-\r
-        if(!this.activated){\r
-            this.onFirstFocus();\r
-            return;\r
-        }\r
-\r
-        var btns = this.tb.items.map, doc = this.doc;\r
-\r
-        if(this.enableFont && !Ext.isSafari){\r
-            var name = (this.doc.queryCommandValue('FontName')||this.defaultFont).toLowerCase();\r
-            if(name != this.fontSelect.dom.value){\r
-                this.fontSelect.dom.value = name;\r
-            }\r
-        }\r
-        if(this.enableFormat){\r
-            btns.bold.toggle(doc.queryCommandState('bold'));\r
-            btns.italic.toggle(doc.queryCommandState('italic'));\r
-            btns.underline.toggle(doc.queryCommandState('underline'));\r
-        }\r
-        if(this.enableAlignments){\r
-            btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));\r
-            btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));\r
-            btns.justifyright.toggle(doc.queryCommandState('justifyright'));\r
-        }\r
-        if(!Ext.isSafari && this.enableLists){\r
-            btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));\r
-            btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));\r
-        }\r
-        \r
-        Ext.menu.MenuMgr.hideAll();\r
-\r
-        this.syncValue();\r
-    },\r
-\r
-    
-    relayBtnCmd : function(btn){\r
-        this.relayCmd(btn.itemId);\r
-    },\r
-\r
-    \r
-    relayCmd : function(cmd, value){\r
-        this.win.focus();\r
-        this.execCmd(cmd, value);\r
-        this.updateToolbar();\r
-        this.deferFocus();\r
-    },\r
-\r
-    \r
-    execCmd : function(cmd, value){\r
-        this.doc.execCommand(cmd, false, value === undefined ? null : value);\r
-        this.syncValue();\r
-    },\r
-\r
-    
-    applyCommand : function(e){\r
-        if(e.ctrlKey){\r
-            var c = e.getCharCode(), cmd;\r
-            if(c > 0){\r
-                c = String.fromCharCode(c);\r
-                switch(c){\r
-                    case 'b':\r
-                        cmd = 'bold';\r
-                    break;\r
-                    case 'i':\r
-                        cmd = 'italic';\r
-                    break;\r
-                    case 'u':\r
-                        cmd = 'underline';\r
-                    break;\r
-                }\r
-                if(cmd){\r
-                    this.win.focus();\r
-                    this.execCmd(cmd);\r
-                    this.deferFocus();\r
-                    e.preventDefault();\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    insertAtCursor : function(text){\r
-        if(!this.activated){\r
-            return;\r
-        }\r
-        if(Ext.isIE){\r
-            this.win.focus();\r
-            var r = this.doc.selection.createRange();\r
-            if(r){\r
-                r.collapse(true);\r
-                r.pasteHTML(text);\r
-                this.syncValue();\r
-                this.deferFocus();\r
-            }\r
-        }else if(Ext.isGecko || Ext.isOpera){\r
-            this.win.focus();\r
-            this.execCmd('InsertHTML', text);\r
-            this.deferFocus();\r
-        }else if(Ext.isSafari){\r
-            this.execCmd('InsertText', text);\r
-            this.deferFocus();\r
-        }\r
-    },\r
-\r
-    
-    fixKeys : function(){ 
-        if(Ext.isIE){\r
-            return function(e){\r
-                var k = e.getKey(), r;\r
-                if(k == e.TAB){\r
-                    e.stopEvent();\r
-                    r = this.doc.selection.createRange();\r
-                    if(r){\r
-                        r.collapse(true);\r
-                        r.pasteHTML('&nbsp;&nbsp;&nbsp;&nbsp;');\r
-                        this.deferFocus();\r
-                    }\r
-                }else if(k == e.ENTER){\r
-                    r = this.doc.selection.createRange();\r
-                    if(r){\r
-                        var target = r.parentElement();\r
-                        if(!target || target.tagName.toLowerCase() != 'li'){\r
-                            e.stopEvent();\r
-                            r.pasteHTML('<br />');\r
-                            r.collapse(false);\r
-                            r.select();\r
-                        }\r
-                    }\r
-                }\r
-            };\r
-        }else if(Ext.isOpera){\r
-            return function(e){\r
-                var k = e.getKey();\r
-                if(k == e.TAB){\r
-                    e.stopEvent();\r
-                    this.win.focus();\r
-                    this.execCmd('InsertHTML','&nbsp;&nbsp;&nbsp;&nbsp;');\r
-                    this.deferFocus();\r
-                }\r
-            };\r
-        }else if(Ext.isSafari){\r
-            return function(e){\r
-                var k = e.getKey();\r
-                if(k == e.TAB){\r
-                    e.stopEvent();\r
-                    this.execCmd('InsertText','\t');\r
-                    this.deferFocus();\r
-                }\r
-             };\r
-        }\r
-    }(),\r
-\r
-    \r
-    getToolbar : function(){\r
-        return this.tb;\r
-    },\r
-\r
-    \r
-    buttonTips : {\r
-        bold : {\r
-            title: 'Bold (Ctrl+B)',\r
-            text: 'Make the selected text bold.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        italic : {\r
-            title: 'Italic (Ctrl+I)',\r
-            text: 'Make the selected text italic.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        underline : {\r
-            title: 'Underline (Ctrl+U)',\r
-            text: 'Underline the selected text.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        increasefontsize : {\r
-            title: 'Grow Text',\r
-            text: 'Increase the font size.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        decreasefontsize : {\r
-            title: 'Shrink Text',\r
-            text: 'Decrease the font size.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        backcolor : {\r
-            title: 'Text Highlight Color',\r
-            text: 'Change the background color of the selected text.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        forecolor : {\r
-            title: 'Font Color',\r
-            text: 'Change the color of the selected text.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        justifyleft : {\r
-            title: 'Align Text Left',\r
-            text: 'Align text to the left.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        justifycenter : {\r
-            title: 'Center Text',\r
-            text: 'Center text in the editor.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        justifyright : {\r
-            title: 'Align Text Right',\r
-            text: 'Align text to the right.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        insertunorderedlist : {\r
-            title: 'Bullet List',\r
-            text: 'Start a bulleted list.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        insertorderedlist : {\r
-            title: 'Numbered List',\r
-            text: 'Start a numbered list.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        createlink : {\r
-            title: 'Hyperlink',\r
-            text: 'Make the selected text a hyperlink.',\r
-            cls: 'x-html-editor-tip'\r
-        },\r
-        sourceedit : {\r
-            title: 'Source Edit',\r
-            text: 'Switch to source editing mode.',\r
-            cls: 'x-html-editor-tip'\r
-        }\r
-    }\r
-\r
-    
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-});\r
-Ext.reg('htmleditor', Ext.form.HtmlEditor);
-\r
-Ext.form.TimeField = Ext.extend(Ext.form.ComboBox, {\r
-    \r
-    minValue : null,\r
-    \r
-    maxValue : null,\r
-    \r
-    minText : "The time in this field must be equal to or after {0}",\r
-    \r
-    maxText : "The time in this field must be equal to or before {0}",\r
-    \r
-    invalidText : "{0} is not a valid time",\r
-    \r
-    format : "g:i A",\r
-    \r
-    altFormats : "g:ia|g:iA|g:i a|g:i A|h:i|g:i|H:i|ga|ha|gA|h a|g a|g A|gi|hi|gia|hia|g|H",\r
-    \r
-    increment: 15,\r
-\r
-    
-    mode: 'local',\r
-    
-    triggerAction: 'all',\r
-    
-    typeAhead: false,\r
-\r
-    
-    initComponent : function(){\r
-        Ext.form.TimeField.superclass.initComponent.call(this);\r
-\r
-        if(typeof this.minValue == "string"){\r
-            this.minValue = this.parseDate(this.minValue);\r
-        }\r
-        if(typeof this.maxValue == "string"){\r
-            this.maxValue = this.parseDate(this.maxValue);\r
-        }\r
-\r
-        if(!this.store){\r
-            var min = this.parseDate(this.minValue);\r
-            if(!min){\r
-                min = new Date().clearTime();\r
-            }\r
-            var max = this.parseDate(this.maxValue);\r
-            if(!max){\r
-                max = new Date().clearTime().add('mi', (24 * 60) - 1);\r
-            }\r
-            var times = [];\r
-            while(min <= max){\r
-                times.push([min.dateFormat(this.format)]);\r
-                min = min.add('mi', this.increment);\r
-            }\r
-            this.store = new Ext.data.SimpleStore({\r
-                fields: ['text'],\r
-                data : times\r
-            });\r
-            this.displayField = 'text';\r
-        }\r
-    },\r
-\r
-    
-    getValue : function(){\r
-        var v = Ext.form.TimeField.superclass.getValue.call(this);\r
-        return this.formatDate(this.parseDate(v)) || '';\r
-    },\r
-\r
-    
-    setValue : function(value){\r
-        Ext.form.TimeField.superclass.setValue.call(this, this.formatDate(this.parseDate(value)));\r
-    },\r
-\r
-    
-    validateValue : Ext.form.DateField.prototype.validateValue,\r
-    parseDate : Ext.form.DateField.prototype.parseDate,\r
-    formatDate : Ext.form.DateField.prototype.formatDate,\r
-\r
-    
-    beforeBlur : function(){\r
-        var v = this.parseDate(this.getRawValue());\r
-        if(v){\r
-            this.setValue(v.dateFormat(this.format));\r
-        }\r
-    }\r
-\r
-    \r
-    \r
-    \r
-    \r
-});\r
-Ext.reg('timefield', Ext.form.TimeField);
-Ext.form.Label = Ext.extend(Ext.BoxComponent, {\r
-    onRender : function(ct, position){\r
-        if(!this.el){\r
-            this.el = document.createElement('label');\r
-            this.el.innerHTML = this.text ? Ext.util.Format.htmlEncode(this.text) : (this.html || '');\r
-            if(this.forId){\r
-                this.el.setAttribute('htmlFor', this.forId);\r
-            }\r
-        }\r
-        Ext.form.Label.superclass.onRender.call(this, ct, position);\r
-    }\r
-});\r
-\r
-Ext.reg('label', Ext.form.Label);
-
-Ext.form.Action = function(form, options){
-    this.form = form;
-    this.options = options || {};
-};
-
-
-Ext.form.Action.CLIENT_INVALID = 'client';
-
-Ext.form.Action.SERVER_INVALID = 'server';
-
-Ext.form.Action.CONNECT_FAILURE = 'connect';
-
-Ext.form.Action.LOAD_FAILURE = 'load';
-
-Ext.form.Action.prototype = {
-
-
-
-
-
-
-
-
-
-
-    type : 'default',
-
-
-        run : function(options){
-
-    },
-
-        success : function(response){
-
-    },
-
-        handleResponse : function(response){
-
-    },
-
-        failure : function(response){
-        this.response = response;
-        this.failureType = Ext.form.Action.CONNECT_FAILURE;
-        this.form.afterAction(this, false);
-    },
-
-        processResponse : function(response){
-        this.response = response;
-        if(!response.responseText){
-            return true;
-        }
-        this.result = this.handleResponse(response);
-        return this.result;
-    },
-
-        getUrl : function(appendParams){
-        var url = this.options.url || this.form.url || this.form.el.dom.action;
-        if(appendParams){
-            var p = this.getParams();
-            if(p){
-                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
-            }
-        }
-        return url;
-    },
-
-        getMethod : function(){
-        return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
-    },
-
-        getParams : function(){
-        var bp = this.form.baseParams;
-        var p = this.options.params;
-        if(p){
-            if(typeof p == "object"){
-                p = Ext.urlEncode(Ext.applyIf(p, bp));
-            }else if(typeof p == 'string' && bp){
-                p += '&' + Ext.urlEncode(bp);
-            }
-        }else if(bp){
-            p = Ext.urlEncode(bp);
-        }
-        return p;
-    },
-
-        createCallback : function(opts){
-               var opts = opts || {};
-        return {
-            success: this.success,
-            failure: this.failure,
-            scope: this,
-            timeout: (opts.timeout*1000) || (this.form.timeout*1000),
-            upload: this.form.fileUpload ? this.success : undefined
-        };
-    }
-};
-
-
-Ext.form.Action.Submit = function(form, options){
-    Ext.form.Action.Submit.superclass.constructor.call(this, form, options);
-};
-
-Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {
-    
-    type : 'submit',
-
-        run : function(){
-        var o = this.options;
-        var method = this.getMethod();
-        var isPost = method == 'POST';
-        if(o.clientValidation === false || this.form.isValid()){
-            Ext.Ajax.request(Ext.apply(this.createCallback(o), {
-                form:this.form.el.dom,
-                url:this.getUrl(!isPost),
-                method: method,
-                params:isPost ? this.getParams() : null,
-                isUpload: this.form.fileUpload
-            }));
-
-        }else if (o.clientValidation !== false){             this.failureType = Ext.form.Action.CLIENT_INVALID;
-            this.form.afterAction(this, false);
-        }
-    },
-
-        success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || result.success){
-            this.form.afterAction(this, true);
-            return;
-        }
-        if(result.errors){
-            this.form.markInvalid(result.errors);
-            this.failureType = Ext.form.Action.SERVER_INVALID;
-        }
-        this.form.afterAction(this, false);
-    },
-
-        handleResponse : function(response){
-        if(this.form.errorReader){
-            var rs = this.form.errorReader.read(response);
-            var errors = [];
-            if(rs.records){
-                for(var i = 0, len = rs.records.length; i < len; i++) {
-                    var r = rs.records[i];
-                    errors[i] = r.data;
-                }
-            }
-            if(errors.length < 1){
-                errors = null;
-            }
-            return {
-                success : rs.success,
-                errors : errors
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-
-
-Ext.form.Action.Load = function(form, options){
-    Ext.form.Action.Load.superclass.constructor.call(this, form, options);
-    this.reader = this.form.reader;
-};
-
-Ext.extend(Ext.form.Action.Load, Ext.form.Action, {
-        type : 'load',
-
-        run : function(){
-        Ext.Ajax.request(Ext.apply(
-                this.createCallback(this.options), {
-                    method:this.getMethod(),
-                    url:this.getUrl(false),
-                    params:this.getParams()
-        }));
-    },
-
-        success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || !result.success || !result.data){
-            this.failureType = Ext.form.Action.LOAD_FAILURE;
-            this.form.afterAction(this, false);
-            return;
-        }
-        this.form.clearInvalid();
-        this.form.setValues(result.data);
-        this.form.afterAction(this, true);
-    },
-
-        handleResponse : function(response){
-        if(this.form.reader){
-            var rs = this.form.reader.read(response);
-            var data = rs.records && rs.records[0] ? rs.records[0].data : null;
-            return {
-                success : rs.success,
-                data : data
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-Ext.form.Action.ACTION_TYPES = {
-    'load' : Ext.form.Action.Load,
-    'submit' : Ext.form.Action.Submit
-};
-
-
-Ext.form.VTypes = function(){
-        var alpha = /^[a-zA-Z_]+$/;
-    var alphanum = /^[a-zA-Z0-9_]+$/;
-    var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
-    var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
-
-        return {
-        
-        'email' : function(v){
-            return email.test(v);
-        },
-        
-        'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
-        
-        'emailMask' : /[a-z0-9_\.\-@]/i,
-
-        
-        'url' : function(v){
-            return url.test(v);
-        },
-        
-        'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
-        
-        
-        'alpha' : function(v){
-            return alpha.test(v);
-        },
-        
-        'alphaText' : 'This field should only contain letters and _',
-        
-        'alphaMask' : /[a-z_]/i,
-
-        
-        'alphanum' : function(v){
-            return alphanum.test(v);
-        },
-        
-        'alphanumText' : 'This field should only contain letters, numbers and _',
-        
-        'alphanumMask' : /[a-z0-9_]/i
-    };
-}();
-\r
-Ext.grid.GridPanel = Ext.extend(Ext.Panel, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-    \r
-    ddText : "{0} selected row{1}",\r
-    \r
-    minColumnWidth : 25,\r
-    \r
-    trackMouseOver : true,\r
-    \r
-    enableDragDrop : false,\r
-    \r
-    enableColumnMove : true,\r
-    \r
-    enableColumnHide : true,\r
-    \r
-    enableHdMenu : true,\r
-    \r
-    stripeRows : false,\r
-    \r
-    autoExpandColumn : false,\r
-    \r
-    autoExpandMin : 50,\r
-    \r
-    autoExpandMax : 1000,\r
-    \r
-    view : null,\r
-    \r
-    loadMask : false,\r
-\r
-    
-    rendered : false,\r
-    
-    viewReady: false,\r
-    
-    stateEvents: ["columnmove", "columnresize", "sortchange"],\r
-\r
-    
-    initComponent : function(){\r
-        Ext.grid.GridPanel.superclass.initComponent.call(this);\r
-\r
-        
-        
-        this.autoScroll = false;\r
-        this.autoWidth = false;\r
-\r
-        if(Ext.isArray(this.columns)){\r
-            this.colModel = new Ext.grid.ColumnModel(this.columns);\r
-            delete this.columns;\r
-        }\r
-\r
-        
-        if(this.ds){\r
-            this.store = this.ds;\r
-            delete this.ds;\r
-        }\r
-        if(this.cm){\r
-            this.colModel = this.cm;\r
-            delete this.cm;\r
-        }\r
-        if(this.sm){\r
-            this.selModel = this.sm;\r
-            delete this.sm;\r
-        }\r
-        this.store = Ext.StoreMgr.lookup(this.store);\r
-\r
-        this.addEvents(\r
-            
-            \r
-            "click",\r
-            \r
-            "dblclick",\r
-            \r
-            "contextmenu",\r
-            \r
-            "mousedown",\r
-            \r
-            "mouseup",\r
-            \r
-            "mouseover",\r
-            \r
-            "mouseout",\r
-            \r
-            "keypress",\r
-            \r
-            "keydown",\r
-\r
-            
-            \r
-            "cellmousedown",\r
-            \r
-            "rowmousedown",\r
-            \r
-            "headermousedown",\r
-\r
-            \r
-            "cellclick",\r
-            \r
-            "celldblclick",\r
-            \r
-            "rowclick",\r
-            \r
-            "rowdblclick",\r
-            \r
-            "headerclick",\r
-            \r
-            "headerdblclick",\r
-            \r
-            "rowcontextmenu",\r
-            \r
-            "cellcontextmenu",\r
-            \r
-            "headercontextmenu",\r
-            \r
-            "bodyscroll",\r
-            \r
-            "columnresize",\r
-            \r
-            "columnmove",\r
-            \r
-            "sortchange"\r
-        );\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        Ext.grid.GridPanel.superclass.onRender.apply(this, arguments);\r
-\r
-        var c = this.body;\r
-\r
-        this.el.addClass('x-grid-panel');\r
-\r
-        var view = this.getView();\r
-        view.init(this);\r
-\r
-        c.on("mousedown", this.onMouseDown, this);\r
-        c.on("click", this.onClick, this);\r
-        c.on("dblclick", this.onDblClick, this);\r
-        c.on("contextmenu", this.onContextMenu, this);\r
-        c.on("keydown", this.onKeyDown, this);\r
-\r
-        this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]);\r
-\r
-        this.getSelectionModel().init(this);\r
-        this.view.render();\r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        Ext.grid.GridPanel.superclass.initEvents.call(this);\r
-\r
-        if(this.loadMask){\r
-            this.loadMask = new Ext.LoadMask(this.bwrap,\r
-                    Ext.apply({store:this.store}, this.loadMask));\r
-        }\r
-    },\r
-\r
-    initStateEvents : function(){\r
-        Ext.grid.GridPanel.superclass.initStateEvents.call(this);\r
-        this.colModel.on('hiddenchange', this.saveState, this, {delay: 100});\r
-    },\r
-\r
-    applyState : function(state){\r
-        var cm = this.colModel;\r
-        var cs = state.columns;\r
-        if(cs){\r
-            for(var i = 0, len = cs.length; i < len; i++){\r
-                var s = cs[i];\r
-                var c = cm.getColumnById(s.id);\r
-                if(c){\r
-                    c.hidden = s.hidden;\r
-                    c.width = s.width;\r
-                    var oldIndex = cm.getIndexById(s.id);\r
-                    if(oldIndex != i){\r
-                        cm.moveColumn(oldIndex, i);\r
-                    }\r
-                }\r
-            }\r
-        }\r
-        if(state.sort){\r
-            this.store[this.store.remoteSort ? 'setDefaultSort' : 'sort'](state.sort.field, state.sort.direction);\r
-        }\r
-    },\r
-\r
-    getState : function(){\r
-        var o = {columns: []};\r
-        for(var i = 0, c; c = this.colModel.config[i]; i++){\r
-            o.columns[i] = {\r
-                id: c.id,\r
-                width: c.width\r
-            };\r
-            if(c.hidden){\r
-                o.columns[i].hidden = true;\r
-            }\r
-        }\r
-        var ss = this.store.getSortState();\r
-        if(ss){\r
-            o.sort = ss;\r
-        }\r
-        return o;\r
-    },\r
-\r
-    
-    afterRender : function(){\r
-        Ext.grid.GridPanel.superclass.afterRender.call(this);\r
-        this.view.layout();\r
-        this.viewReady = true;\r
-    },\r
-\r
-    \r
-    reconfigure : function(store, colModel){\r
-        if(this.loadMask){\r
-            this.loadMask.destroy();\r
-            this.loadMask = new Ext.LoadMask(this.bwrap,\r
-                    Ext.apply({store:store}, this.initialConfig.loadMask));\r
-        }\r
-        this.view.bind(store, colModel);\r
-        this.store = store;\r
-        this.colModel = colModel;\r
-        if(this.rendered){\r
-            this.view.refresh(true);\r
-        }\r
-    },\r
-\r
-    
-    onKeyDown : function(e){\r
-        this.fireEvent("keydown", e);\r
-    },\r
-\r
-    
-    onDestroy : function(){\r
-        if(this.rendered){\r
-            if(this.loadMask){\r
-                this.loadMask.destroy();\r
-            }\r
-            var c = this.body;\r
-            c.removeAllListeners();\r
-            this.view.destroy();\r
-            c.update("");\r
-        }\r
-        this.colModel.purgeListeners();\r
-        Ext.grid.GridPanel.superclass.onDestroy.call(this);\r
-    },\r
-\r
-    
-    processEvent : function(name, e){\r
-        this.fireEvent(name, e);\r
-        var t = e.getTarget();\r
-        var v = this.view;\r
-        var header = v.findHeaderIndex(t);\r
-        if(header !== false){\r
-            this.fireEvent("header" + name, this, header, e);\r
-        }else{\r
-            var row = v.findRowIndex(t);\r
-            var cell = v.findCellIndex(t);\r
-            if(row !== false){\r
-                this.fireEvent("row" + name, this, row, e);\r
-                if(cell !== false){\r
-                    this.fireEvent("cell" + name, this, row, cell, e);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onClick : function(e){\r
-        this.processEvent("click", e);\r
-    },\r
-\r
-    
-    onMouseDown : function(e){\r
-        this.processEvent("mousedown", e);\r
-    },\r
-\r
-    
-    onContextMenu : function(e, t){\r
-        this.processEvent("contextmenu", e);\r
-    },\r
-\r
-    
-    onDblClick : function(e){\r
-        this.processEvent("dblclick", e);\r
-    },\r
-\r
-    
-    walkCells : function(row, col, step, fn, scope){\r
-        var cm = this.colModel, clen = cm.getColumnCount();\r
-        var ds = this.store, rlen = ds.getCount(), first = true;\r
-        if(step < 0){\r
-            if(col < 0){\r
-                row--;\r
-                first = false;\r
-            }\r
-            while(row >= 0){\r
-                if(!first){\r
-                    col = clen-1;\r
-                }\r
-                first = false;\r
-                while(col >= 0){\r
-                    if(fn.call(scope || this, row, col, cm) === true){\r
-                        return [row, col];\r
-                    }\r
-                    col--;\r
-                }\r
-                row--;\r
-            }\r
-        } else {\r
-            if(col >= clen){\r
-                row++;\r
-                first = false;\r
-            }\r
-            while(row < rlen){\r
-                if(!first){\r
-                    col = 0;\r
-                }\r
-                first = false;\r
-                while(col < clen){\r
-                    if(fn.call(scope || this, row, col, cm) === true){\r
-                        return [row, col];\r
-                    }\r
-                    col++;\r
-                }\r
-                row++;\r
-            }\r
-        }\r
-        return null;\r
-    },\r
-\r
-    
-    getSelections : function(){\r
-        return this.selModel.getSelections();\r
-    },\r
-\r
-    
-    onResize : function(){\r
-        Ext.grid.GridPanel.superclass.onResize.apply(this, arguments);\r
-        if(this.viewReady){\r
-            this.view.layout();\r
-        }\r
-    },\r
-\r
-    \r
-    getGridEl : function(){\r
-        return this.body;\r
-    },\r
-\r
-    
-    stopEditing : function(){},\r
-\r
-    \r
-    getSelectionModel : function(){\r
-        if(!this.selModel){\r
-            this.selModel = new Ext.grid.RowSelectionModel(\r
-                    this.disableSelection ? {selectRow: Ext.emptyFn} : null);\r
-        }\r
-        return this.selModel;\r
-    },\r
-\r
-    \r
-    getStore : function(){\r
-        return this.store;\r
-    },\r
-\r
-    \r
-    getColumnModel : function(){\r
-        return this.colModel;\r
-    },\r
-\r
-    \r
-    getView : function(){\r
-        if(!this.view){\r
-            this.view = new Ext.grid.GridView(this.viewConfig);\r
-        }\r
-        return this.view;\r
-    },\r
-    \r
-    getDragDropText : function(){\r
-        var count = this.selModel.getCount();\r
-        return String.format(this.ddText, count, count == 1 ? '' : 's');\r
-    }\r
-\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-\r
-\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-});\r
-Ext.reg('grid', Ext.grid.GridPanel);
-
-Ext.grid.GridView = function(config){
-    Ext.apply(this, config);
-        this.addEvents(
-      
-      "beforerowremoved",
-      
-      "beforerowsinserted",
-      
-      "beforerefresh",
-      
-      "rowremoved",
-      
-      "rowsinserted",
-      
-      "rowupdated",
-      
-      "refresh"
-  );
-    Ext.grid.GridView.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.grid.GridView, Ext.util.Observable, {
-    
-    
-    
-    
-    scrollOffset: 19,
-    
-    autoFill: false,
-    
-    forceFit: false,
-    
-    sortClasses : ["sort-asc", "sort-desc"],
-    
-    sortAscText : "Sort Ascending",
-    
-    sortDescText : "Sort Descending",
-    
-    columnsText : "Columns",
-
-        borderWidth: 2,
-
-    
-
-        initTemplates : function(){
-        var ts = this.templates || {};
-        if(!ts.master){
-            ts.master = new Ext.Template(
-                    '<div class="x-grid3" hidefocus="true">',
-                        '<div class="x-grid3-viewport">',
-                            '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset">{header}</div></div><div class="x-clear"></div></div>',
-                            '<div class="x-grid3-scroller"><div class="x-grid3-body">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',
-                        "</div>",
-                        '<div class="x-grid3-resize-marker">&#160;</div>',
-                        '<div class="x-grid3-resize-proxy">&#160;</div>',
-                    "</div>"
-                    );
-        }
-
-        if(!ts.header){
-            ts.header = new Ext.Template(
-                    '<table border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
-                    '<thead><tr class="x-grid3-hd-row">{cells}</tr></thead>',
-                    "</table>"
-                    );
-        }
-
-        if(!ts.hcell){
-            ts.hcell = new Ext.Template(
-                    '<td class="x-grid3-hd x-grid3-cell x-grid3-td-{id}" style="{style}"><div {tooltip} {attr} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">', this.grid.enableHdMenu ? '<a class="x-grid3-hd-btn" href="#"></a>' : '',
-                    '{value}<img class="x-grid3-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" />',
-                    "</div></td>"
-                    );
-        }
-
-        if(!ts.body){
-            ts.body = new Ext.Template('{rows}');
-        }
-
-        if(!ts.row){
-            ts.row = new Ext.Template(
-                    '<div class="x-grid3-row {alt}" style="{tstyle}"><table class="x-grid3-row-table" border="0" cellspacing="0" cellpadding="0" style="{tstyle}">',
-                    '<tbody><tr>{cells}</tr>',
-                    (this.enableRowBody ? '<tr class="x-grid3-row-body-tr" style="{bodyStyle}"><td colspan="{cols}" class="x-grid3-body-cell" tabIndex="0" hidefocus="on"><div class="x-grid3-row-body">{body}</div></td></tr>' : ''),
-                    '</tbody></table></div>'
-                    );
-        }
-
-        if(!ts.cell){
-            ts.cell = new Ext.Template(
-                    '<td class="x-grid3-col x-grid3-cell x-grid3-td-{id} {css}" style="{style}" tabIndex="0" {cellAttr}>',
-                    '<div class="x-grid3-cell-inner x-grid3-col-{id}" unselectable="on" {attr}>{value}</div>',
-                    "</td>"
-                    );
-        }
-
-        for(var k in ts){
-            var t = ts[k];
-            if(t && typeof t.compile == 'function' && !t.compiled){
-                t.disableFormats = true;
-                t.compile();
-            }
-        }
-
-        this.templates = ts;
-
-        this.tdClass = 'x-grid3-cell';
-        this.cellSelector = 'td.x-grid3-cell';
-        this.hdCls = 'x-grid3-hd';
-        this.rowSelector = 'div.x-grid3-row';
-        this.colRe = new RegExp("x-grid3-td-([^\\s]+)", "");
-    },
-
-        fly : function(el){
-        if(!this._flyweight){
-            this._flyweight = new Ext.Element.Flyweight(document.body);
-        }
-        this._flyweight.dom = el;
-        return this._flyweight;
-    },
-
-        getEditorParent : function(ed){
-        return this.scroller.dom;
-    },
-
-        initElements : function(){
-        var E = Ext.Element;
-
-        var el = this.grid.getGridEl().dom.firstChild;
-        var cs = el.childNodes;
-
-        this.el = new E(el);
-
-        this.mainWrap = new E(cs[0]);
-        this.mainHd = new E(this.mainWrap.dom.firstChild);
-
-        if(this.grid.hideHeaders){
-            this.mainHd.setDisplayed(false);
-        }
-
-        this.innerHd = this.mainHd.dom.firstChild;
-        this.scroller = new E(this.mainWrap.dom.childNodes[1]);
-        if(this.forceFit){
-            this.scroller.setStyle('overflow-x', 'hidden');
-        }
-        this.mainBody = new E(this.scroller.dom.firstChild);
-
-        this.focusEl = new E(this.scroller.dom.childNodes[1]);
-        this.focusEl.swallowEvent("click", true);
-
-        this.resizeMarker = new E(cs[1]);
-        this.resizeProxy = new E(cs[2]);
-    },
-
-        getRows : function(){
-        return this.hasRows() ? this.mainBody.dom.childNodes : [];
-    },
-
-    
-        findCell : function(el){
-        if(!el){
-            return false;
-        }
-        return this.fly(el).findParent(this.cellSelector, 3);
-    },
-
-        findCellIndex : function(el, requiredCls){
-        var cell = this.findCell(el);
-        if(cell && (!requiredCls || this.fly(cell).hasClass(requiredCls))){
-            return this.getCellIndex(cell);
-        }
-        return false;
-    },
-
-        getCellIndex : function(el){
-        if(el){
-            var m = el.className.match(this.colRe);
-            if(m && m[1]){
-                return this.cm.getIndexById(m[1]);
-            }
-        }
-        return false;
-    },
-
-        findHeaderCell : function(el){
-        var cell = this.findCell(el);
-        return cell && this.fly(cell).hasClass(this.hdCls) ? cell : null;
-    },
-
-        findHeaderIndex : function(el){
-        return this.findCellIndex(el, this.hdCls);
-    },
-
-        findRow : function(el){
-        if(!el){
-            return false;
-        }
-        return this.fly(el).findParent(this.rowSelector, 10);
-    },
-
-        findRowIndex : function(el){
-        var r = this.findRow(el);
-        return r ? r.rowIndex : false;
-    },
-
-    
-
-    getRow : function(row){
-        return this.getRows()[row];
-    },
-
-
-    getCell : function(row, col){
-        return this.getRow(row).getElementsByTagName('td')[col];
-    },
-
-
-    getHeaderCell : function(index){
-      return this.mainHd.dom.getElementsByTagName('td')[index];
-    },
-
-    
-        addRowClass : function(row, cls){
-        var r = this.getRow(row);
-        if(r){
-            this.fly(r).addClass(cls);
-        }
-    },
-
-        removeRowClass : function(row, cls){
-        var r = this.getRow(row);
-        if(r){
-            this.fly(r).removeClass(cls);
-        }
-    },
-
-        removeRow : function(row){
-        Ext.removeNode(this.getRow(row));
-    },
-
-        removeRows : function(firstRow, lastRow){
-        var bd = this.mainBody.dom;
-        for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
-            Ext.removeNode(bd.childNodes[firstRow]);
-        }
-    },
-
-    
-        getScrollState : function(){
-        var sb = this.scroller.dom;
-        return {left: sb.scrollLeft, top: sb.scrollTop};
-    },
-
-        restoreScroll : function(state){
-        var sb = this.scroller.dom;
-        sb.scrollLeft = state.left;
-        sb.scrollTop = state.top;
-    },
-
-    
-    scrollToTop : function(){
-        this.scroller.dom.scrollTop = 0;
-        this.scroller.dom.scrollLeft = 0;
-    },
-
-        syncScroll : function(){
-      this.syncHeaderScroll();
-      var mb = this.scroller.dom;
-        this.grid.fireEvent("bodyscroll", mb.scrollLeft, mb.scrollTop);
-    },
-
-        syncHeaderScroll : function(){
-        var mb = this.scroller.dom;
-        this.innerHd.scrollLeft = mb.scrollLeft;
-        this.innerHd.scrollLeft = mb.scrollLeft;     },
-
-        updateSortIcon : function(col, dir){
-        var sc = this.sortClasses;
-        var hds = this.mainHd.select('td').removeClass(sc);
-        hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
-    },
-
-        updateAllColumnWidths : function(){
-        var tw = this.getTotalWidth();
-        var clen = this.cm.getColumnCount();
-        var ws = [];
-        for(var i = 0; i < clen; i++){
-            ws[i] = this.getColumnWidth(i);
-        }
-
-        this.innerHd.firstChild.firstChild.style.width = tw;
-
-        for(var i = 0; i < clen; i++){
-            var hd = this.getHeaderCell(i);
-            hd.style.width = ws[i];
-        }
-
-        var ns = this.getRows();
-        for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            var row = ns[i].firstChild.rows[0];
-            for(var j = 0; j < clen; j++){
-                row.childNodes[j].style.width = ws[j];
-            }
-        }
-
-        this.onAllColumnWidthsUpdated(ws, tw);
-    },
-
-        updateColumnWidth : function(col, width){
-        var w = this.getColumnWidth(col);
-        var tw = this.getTotalWidth();
-
-        this.innerHd.firstChild.firstChild.style.width = tw;
-        var hd = this.getHeaderCell(col);
-        hd.style.width = w;
-
-        var ns = this.getRows();
-        for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.width = w;
-        }
-
-        this.onColumnWidthUpdated(col, w, tw);
-    },
-
-        updateColumnHidden : function(col, hidden){
-        var tw = this.getTotalWidth();
-
-        this.innerHd.firstChild.firstChild.style.width = tw;
-
-        var display = hidden ? 'none' : '';
-
-        var hd = this.getHeaderCell(col);
-        hd.style.display = display;
-
-        var ns = this.getRows();
-        for(var i = 0, len = ns.length; i < len; i++){
-            ns[i].style.width = tw;
-            ns[i].firstChild.style.width = tw;
-            ns[i].firstChild.rows[0].childNodes[col].style.display = display;
-        }
-
-        this.onColumnHiddenUpdated(col, hidden, tw);
-
-        delete this.lastViewWidth;         this.layout();
-    },
-
-        doRender : function(cs, rs, ds, startRow, colCount, stripe){
-        var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1;
-        var tstyle = 'width:'+this.getTotalWidth()+';';
-                var buf = [], cb, c, p = {}, rp = {tstyle: tstyle}, r;
-        for(var j = 0, len = rs.length; j < len; j++){
-            r = rs[j]; cb = [];
-            var rowIndex = (j+startRow);
-            for(var i = 0; i < colCount; i++){
-                c = cs[i];
-                p.id = c.id;
-                p.css = i == 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '');
-                p.attr = p.cellAttr = "";
-                p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
-                p.style = c.style;
-                if(p.value == undefined || p.value === "") p.value = "&#160;";
-                if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
-                    p.css += ' x-grid3-dirty-cell';
-                }
-                cb[cb.length] = ct.apply(p);
-            }
-            var alt = [];
-            if(stripe && ((rowIndex+1) % 2 == 0)){
-                alt[0] = "x-grid3-row-alt";
-            }
-            if(r.dirty){
-                alt[1] = " x-grid3-dirty-row";
-            }
-            rp.cols = colCount;
-            if(this.getRowClass){
-                alt[2] = this.getRowClass(r, rowIndex, rp, ds);
-            }
-            rp.alt = alt.join(" ");
-            rp.cells = cb.join("");
-            buf[buf.length] =  rt.apply(rp);
-        }
-        return buf.join("");
-    },
-
-        processRows : function(startRow, skipStripe){
-        if(this.ds.getCount() < 1){
-            return;
-        }
-        skipStripe = skipStripe || !this.grid.stripeRows;
-        startRow = startRow || 0;
-        var rows = this.getRows();
-        var cls = ' x-grid3-row-alt ';
-        for(var i = startRow, len = rows.length; i < len; i++){
-            var row = rows[i];
-            row.rowIndex = i;
-            if(!skipStripe){
-                var isAlt = ((i+1) % 2 == 0);
-                var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1;
-                if(isAlt == hasAlt){
-                    continue;
-                }
-                if(isAlt){
-                    row.className += " x-grid3-row-alt";
-                }else{
-                    row.className = row.className.replace("x-grid3-row-alt", "");
-                }
-            }
-        }
-    },
-
-        renderUI : function(){
-
-        var header = this.renderHeaders();
-        var body = this.templates.body.apply({rows:''});
-
-
-        var html = this.templates.master.apply({
-            body: body,
-            header: header
-        });
-
-        var g = this.grid;
-
-        g.getGridEl().dom.innerHTML = html;
-
-        this.initElements();
-
-
-        this.mainBody.dom.innerHTML = this.renderRows();
-        this.processRows(0, true);
-
-
-                Ext.fly(this.innerHd).on("click", this.handleHdDown, this);
-        this.mainHd.on("mouseover", this.handleHdOver, this);
-        this.mainHd.on("mouseout", this.handleHdOut, this);
-        this.mainHd.on("mousemove", this.handleHdMove, this);
-
-        this.scroller.on('scroll', this.syncScroll,  this);
-        if(g.enableColumnResize !== false){
-            this.splitone = new Ext.grid.GridView.SplitDragZone(g, this.mainHd.dom);
-        }
-
-        if(g.enableColumnMove){
-            this.columnDrag = new Ext.grid.GridView.ColumnDragZone(g, this.innerHd);
-            this.columnDrop = new Ext.grid.HeaderDropZone(g, this.mainHd.dom);
-        }
-
-        if(g.enableHdMenu !== false){
-            if(g.enableColumnHide !== false){
-                this.colMenu = new Ext.menu.Menu({id:g.id + "-hcols-menu"});
-                this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
-                this.colMenu.on("itemclick", this.handleHdMenuClick, this);
-            }
-            this.hmenu = new Ext.menu.Menu({id: g.id + "-hctx"});
-            this.hmenu.add(
-                {id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"},
-                {id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"}
-            );
-            if(g.enableColumnHide !== false){
-                this.hmenu.add('-',
-                    {id:"columns", text: this.columnsText, menu: this.colMenu, iconCls: 'x-cols-icon'}
-                );
-            }
-            this.hmenu.on("itemclick", this.handleHdMenuClick, this);
-
-                    }
-
-        if(g.enableDragDrop || g.enableDrag){
-            var dd = new Ext.grid.GridDragZone(g, {
-                ddGroup : g.ddGroup || 'GridDD'
-            });
-        }
-
-        this.updateHeaderSortState();
-
-    },
-
-        layout : function(){
-        if(!this.mainBody){
-            return;         }
-        var g = this.grid;
-        var c = g.getGridEl(), cm = this.cm,
-                expandCol = g.autoExpandColumn,
-                gv = this;
-
-        var csize = c.getSize(true);
-        var vw = csize.width;
-
-        if(vw < 20 || csize.height < 20){             return;
-        }
-
-        if(g.autoHeight){
-            this.scroller.dom.style.overflow = 'visible';
-        }else{
-            this.el.setSize(csize.width, csize.height);
-
-            var hdHeight = this.mainHd.getHeight();
-            var vh = csize.height - (hdHeight);
-
-            this.scroller.setSize(vw, vh);
-            if(this.innerHd){
-                this.innerHd.style.width = (vw)+'px';
-            }
-        }
-        if(this.forceFit){
-            if(this.lastViewWidth != vw){
-                this.fitColumns(false, false);
-                this.lastViewWidth = vw;
-            }
-        }else {
-            this.autoExpand();
-            this.syncHeaderScroll();
-        }
-        this.onLayout(vw, vh);
-    },
-
-            onLayout : function(vw, vh){
-            },
-
-    onColumnWidthUpdated : function(col, w, tw){
-            },
-
-    onAllColumnWidthsUpdated : function(ws, tw){
-            },
-
-    onColumnHiddenUpdated : function(col, hidden, tw){
-            },
-
-    updateColumnText : function(col, text){
-            },
-
-    afterMove : function(colIndex){
-            },
-
-    
-        init: function(grid){
-        this.grid = grid;
-
-        this.initTemplates();
-        this.initData(grid.store, grid.colModel);
-        this.initUI(grid);
-    },
-
-        getColumnId : function(index){
-      return this.cm.getColumnId(index);
-    },
-
-        renderHeaders : function(){
-        var cm = this.cm, ts = this.templates;
-        var ct = ts.hcell;
-
-        var cb = [], sb = [], p = {};
-
-        for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-            p.id = cm.getColumnId(i);
-            p.value = cm.getColumnHeader(i) || "";
-            p.style = this.getColumnStyle(i, true);
-            p.tooltip = this.getColumnTooltip(i);
-            if(cm.config[i].align == 'right'){
-                p.istyle = 'padding-right:16px';
-            } else {
-                delete p.istyle;
-            }
-            cb[cb.length] = ct.apply(p);
-        }
-        return ts.header.apply({cells: cb.join(""), tstyle:'width:'+this.getTotalWidth()+';'});
-    },
-
-        getColumnTooltip : function(i){
-        var tt = this.cm.getColumnTooltip(i);
-        if(tt){
-            if(Ext.QuickTips.isEnabled()){
-                return 'ext:qtip="'+tt+'"';
-            }else{
-                return 'title="'+tt+'"';
-            }
-        }
-        return "";
-    },
-
-        beforeUpdate : function(){
-        this.grid.stopEditing(true);
-    },
-
-        updateHeaders : function(){
-        this.innerHd.firstChild.innerHTML = this.renderHeaders();
-    },
-
-    
-    focusRow : function(row){
-        this.focusCell(row, 0, false);
-    },
-
-    
-    focusCell : function(row, col, hscroll){
-        var xy = this.ensureVisible(row, col, hscroll);
-        this.focusEl.setXY(xy);
-        if(Ext.isGecko){
-            this.focusEl.focus();
-        }else{
-            this.focusEl.focus.defer(1, this.focusEl);
-        }
-    },
-
-        ensureVisible : function(row, col, hscroll){
-        if(typeof row != "number"){
-            row = row.rowIndex;
-        }
-        if(!this.ds){
-            return;
-        }
-        if(row < 0 || row >= this.ds.getCount()){
-            return;
-        }
-        col = (col !== undefined ? col : 0);
-
-        var rowEl = this.getRow(row), cellEl;
-        if(!(hscroll === false && col === 0)){
-            while(this.cm.isHidden(col)){
-                col++;
-            }
-            cellEl = this.getCell(row, col);
-        }
-        if(!rowEl){
-            return;
-        }
-
-        var c = this.scroller.dom;
-
-        var ctop = 0;
-        var p = rowEl, stop = this.el.dom;
-        while(p && p != stop){
-            ctop += p.offsetTop;
-            p = p.offsetParent;
-        }
-        ctop -= this.mainHd.dom.offsetHeight;
-
-        var cbot = ctop + rowEl.offsetHeight;
-
-        var ch = c.clientHeight;
-        var stop = parseInt(c.scrollTop, 10);
-        var sbot = stop + ch;
-
-        if(ctop < stop){
-          c.scrollTop = ctop;
-        }else if(cbot > sbot){
-            c.scrollTop = cbot-ch;
-        }
-
-        if(hscroll !== false){
-            var cleft = parseInt(cellEl.offsetLeft, 10);
-            var cright = cleft + cellEl.offsetWidth;
-
-            var sleft = parseInt(c.scrollLeft, 10);
-            var sright = sleft + c.clientWidth;
-            if(cleft < sleft){
-                c.scrollLeft = cleft;
-            }else if(cright > sright){
-                c.scrollLeft = cright-c.clientWidth;
-            }
-        }
-        return cellEl ? Ext.fly(cellEl).getXY() : [c.scrollLeft, Ext.fly(rowEl).getY()];
-    },
-
-        insertRows : function(dm, firstRow, lastRow, isUpdate){
-        if(!isUpdate && firstRow === 0 && lastRow == dm.getCount()-1){
-            this.refresh();
-        }else{
-            if(!isUpdate){
-                this.fireEvent("beforerowsinserted", this, firstRow, lastRow);
-            }
-            var html = this.renderRows(firstRow, lastRow);
-            var before = this.getRow(firstRow);
-            if(before){
-                Ext.DomHelper.insertHtml('beforeBegin', before, html);
-            }else{
-                Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html);
-            }
-            if(!isUpdate){
-                this.fireEvent("rowsinserted", this, firstRow, lastRow);
-                this.processRows(firstRow);
-            }
-        }
-    },
-
-        deleteRows : function(dm, firstRow, lastRow){
-        if(dm.getRowCount()<1){
-            this.refresh();
-        }else{
-            this.fireEvent("beforerowsdeleted", this, firstRow, lastRow);
-
-            this.removeRows(firstRow, lastRow);
-
-            this.processRows(firstRow);
-            this.fireEvent("rowsdeleted", this, firstRow, lastRow);
-        }
-    },
-
-        getColumnStyle : function(col, isHeader){
-        var style = !isHeader ? (this.cm.config[col].css || '') : '';
-        style += 'width:'+this.getColumnWidth(col)+';';
-        if(this.cm.isHidden(col)){
-            style += 'display:none;';
-        }
-        var align = this.cm.config[col].align;
-        if(align){
-            style += 'text-align:'+align+';';
-        }
-        return style;
-    },
-
-        getColumnWidth : function(col){
-        var w = this.cm.getColumnWidth(col);
-        if(typeof w == 'number'){
-            return (Ext.isBorderBox ? w : (w-this.borderWidth > 0 ? w-this.borderWidth:0)) + 'px';
-        }
-        return w;
-    },
-
-        getTotalWidth : function(){
-        return this.cm.getTotalWidth()+'px';
-    },
-
-        fitColumns : function(preventRefresh, onlyExpand, omitColumn){
-        var cm = this.cm, leftOver, dist, i;
-        var tw = cm.getTotalWidth(false);
-        var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
-
-        if(aw < 20){             return;
-        }
-        var extra = aw - tw;
-
-        if(extra === 0){
-            return false;
-        }
-
-        var vc = cm.getColumnCount(true);
-        var ac = vc-(typeof omitColumn == 'number' ? 1 : 0);
-        if(ac === 0){
-            ac = 1;
-            omitColumn = undefined;
-        }
-        var colCount = cm.getColumnCount();
-        var cols = [];
-        var extraCol = 0;
-        var width = 0;
-        var w;
-        for (i = 0; i < colCount; i++){
-            if(!cm.isHidden(i) && !cm.isFixed(i) && i !== omitColumn){
-                w = cm.getColumnWidth(i);
-                cols.push(i);
-                extraCol = i;
-                cols.push(w);
-                width += w;
-            }
-        }
-        var frac = (aw - cm.getTotalWidth())/width;
-        while (cols.length){
-            w = cols.pop();
-            i = cols.pop();
-            cm.setColumnWidth(i, Math.max(this.grid.minColumnWidth, Math.floor(w + w*frac)), true);
-        }
-
-        if((tw = cm.getTotalWidth(false)) > aw){
-            var adjustCol = ac != vc ? omitColumn : extraCol;
-             cm.setColumnWidth(adjustCol, Math.max(1,
-                     cm.getColumnWidth(adjustCol)- (tw-aw)), true);
-        }
-
-        if(preventRefresh !== true){
-            this.updateAllColumnWidths();
-        }
-
-
-        return true;
-    },
-
-        autoExpand : function(preventUpdate){
-        var g = this.grid, cm = this.cm;
-        if(!this.userResized && g.autoExpandColumn){
-            var tw = cm.getTotalWidth(false);
-            var aw = this.grid.getGridEl().getWidth(true)-this.scrollOffset;
-            if(tw != aw){
-                var ci = cm.getIndexById(g.autoExpandColumn);
-                var currentWidth = cm.getColumnWidth(ci);
-                var cw = Math.min(Math.max(((aw-tw)+currentWidth), g.autoExpandMin), g.autoExpandMax);
-                if(cw != currentWidth){
-                    cm.setColumnWidth(ci, cw, true);
-                    if(preventUpdate !== true){
-                        this.updateColumnWidth(ci, cw);
-                    }
-                }
-            }
-        }
-    },
-
-        getColumnData : function(){
-                var cs = [], cm = this.cm, colCount = cm.getColumnCount();
-        for(var i = 0; i < colCount; i++){
-            var name = cm.getDataIndex(i);
-            cs[i] = {
-                name : (typeof name == 'undefined' ? this.ds.fields.get(i).name : name),
-                renderer : cm.getRenderer(i),
-                id : cm.getColumnId(i),
-                style : this.getColumnStyle(i)
-            };
-        }
-        return cs;
-    },
-
-        renderRows : function(startRow, endRow){
-                var g = this.grid, cm = g.colModel, ds = g.store, stripe = g.stripeRows;
-        var colCount = cm.getColumnCount();
-
-        if(ds.getCount() < 1){
-            return "";
-        }
-
-        var cs = this.getColumnData();
-
-        startRow = startRow || 0;
-        endRow = typeof endRow == "undefined"? ds.getCount()-1 : endRow;
-
-                var rs = ds.getRange(startRow, endRow);
-
-        return this.doRender(cs, rs, ds, startRow, colCount, stripe);
-    },
-
-        renderBody : function(){
-        var markup = this.renderRows();
-        return this.templates.body.apply({rows: markup});
-    },
-
-        refreshRow : function(record){
-        var ds = this.ds, index;
-        if(typeof record == 'number'){
-            index = record;
-            record = ds.getAt(index);
-        }else{
-            index = ds.indexOf(record);
-        }
-        var cls = [];
-        this.insertRows(ds, index, index, true);
-        this.getRow(index).rowIndex = index;
-        this.onRemove(ds, record, index+1, true);
-        this.fireEvent("rowupdated", this, index, record);
-    },
-
-    
-    refresh : function(headersToo){
-        this.fireEvent("beforerefresh", this);
-        this.grid.stopEditing(true);
-
-        var result = this.renderBody();
-        this.mainBody.update(result);
-
-        if(headersToo === true){
-            this.updateHeaders();
-            this.updateHeaderSortState();
-        }
-        this.processRows(0, true);
-        this.layout();
-        this.applyEmptyText();
-        this.fireEvent("refresh", this);
-    },
-
-        applyEmptyText : function(){
-        if(this.emptyText && !this.hasRows()){
-            this.mainBody.update('<div class="x-grid-empty">' + this.emptyText + '</div>');
-        }
-    },
-
-        updateHeaderSortState : function(){
-        var state = this.ds.getSortState();
-        if(!state){
-            return;
-        }
-        if(!this.sortState || (this.sortState.field != state.field || this.sortState.direction != state.direction)){
-            this.grid.fireEvent('sortchange', this.grid, state);
-        }
-        this.sortState = state;
-        var sortColumn = this.cm.findColumnIndex(state.field);
-        if(sortColumn != -1){
-            var sortDir = state.direction;
-            this.updateSortIcon(sortColumn, sortDir);
-        }
-    },
-
-        destroy : function(){
-        if(this.colMenu){
-            this.colMenu.removeAll();
-            Ext.menu.MenuMgr.unregister(this.colMenu);
-            this.colMenu.getEl().remove();
-            delete this.colMenu;
-        }
-        if(this.hmenu){
-            this.hmenu.removeAll();
-            Ext.menu.MenuMgr.unregister(this.hmenu);
-            this.hmenu.getEl().remove();
-            delete this.hmenu;
-        }
-        if(this.grid.enableColumnMove){
-            var dds = Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
-            if(dds){
-                for(var dd in dds){
-                    if(!dds[dd].config.isTarget && dds[dd].dragElId){
-                        var elid = dds[dd].dragElId;
-                        dds[dd].unreg();
-                        Ext.get(elid).remove();
-                    } else if(dds[dd].config.isTarget){
-                        dds[dd].proxyTop.remove();
-                        dds[dd].proxyBottom.remove();
-                        dds[dd].unreg();
-                    }
-                    if(Ext.dd.DDM.locationCache[dd]){
-                        delete Ext.dd.DDM.locationCache[dd];
-                    }
-                }
-                delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
-            }
-        }
-
-        Ext.destroy(this.resizeMarker, this.resizeProxy);
-
-        this.initData(null, null);
-        Ext.EventManager.removeResizeListener(this.onWindowResize, this);
-    },
-
-        onDenyColumnHide : function(){
-
-    },
-
-        render : function(){
-
-        var cm = this.cm;
-        var colCount = cm.getColumnCount();
-
-        if(this.autoFill){
-            this.fitColumns(true, true);
-        }else if(this.forceFit){
-            this.fitColumns(true, false);
-        }else if(this.grid.autoExpandColumn){
-            this.autoExpand(true);
-        }
-
-        this.renderUI();
-    },
-
-    
-        initData : function(ds, cm){
-        if(this.ds){
-            this.ds.un("load", this.onLoad, this);
-            this.ds.un("datachanged", this.onDataChange, this);
-            this.ds.un("add", this.onAdd, this);
-            this.ds.un("remove", this.onRemove, this);
-            this.ds.un("update", this.onUpdate, this);
-            this.ds.un("clear", this.onClear, this);
-        }
-        if(ds){
-            ds.on("load", this.onLoad, this);
-            ds.on("datachanged", this.onDataChange, this);
-            ds.on("add", this.onAdd, this);
-            ds.on("remove", this.onRemove, this);
-            ds.on("update", this.onUpdate, this);
-            ds.on("clear", this.onClear, this);
-        }
-        this.ds = ds;
-
-        if(this.cm){
-            this.cm.un("configchange", this.onColConfigChange, this);
-            this.cm.un("widthchange", this.onColWidthChange, this);
-            this.cm.un("headerchange", this.onHeaderChange, this);
-            this.cm.un("hiddenchange", this.onHiddenChange, this);
-            this.cm.un("columnmoved", this.onColumnMove, this);
-            this.cm.un("columnlockchange", this.onColumnLock, this);
-        }
-        if(cm){
-            cm.on("configchange", this.onColConfigChange, this);
-            cm.on("widthchange", this.onColWidthChange, this);
-            cm.on("headerchange", this.onHeaderChange, this);
-            cm.on("hiddenchange", this.onHiddenChange, this);
-            cm.on("columnmoved", this.onColumnMove, this);
-            cm.on("columnlockchange", this.onColumnLock, this);
-        }
-        this.cm = cm;
-    },
-
-        onDataChange : function(){
-        this.refresh();
-        this.updateHeaderSortState();
-    },
-
-        onClear : function(){
-        this.refresh();
-    },
-
-        onUpdate : function(ds, record){
-        this.refreshRow(record);
-    },
-
-        onAdd : function(ds, records, index){
-        this.insertRows(ds, index, index + (records.length-1));
-    },
-
-        onRemove : function(ds, record, index, isUpdate){
-        if(isUpdate !== true){
-            this.fireEvent("beforerowremoved", this, index, record);
-        }
-        this.removeRow(index);
-        if(isUpdate !== true){
-            this.processRows(index);
-            this.applyEmptyText();
-            this.fireEvent("rowremoved", this, index, record);
-        }
-    },
-
-        onLoad : function(){
-        this.scrollToTop();
-    },
-
-        onColWidthChange : function(cm, col, width){
-        this.updateColumnWidth(col, width);
-    },
-
-        onHeaderChange : function(cm, col, text){
-        this.updateHeaders();
-    },
-
-        onHiddenChange : function(cm, col, hidden){
-        this.updateColumnHidden(col, hidden);
-    },
-
-        onColumnMove : function(cm, oldIndex, newIndex){
-        this.indexMap = null;
-        var s = this.getScrollState();
-        this.refresh(true);
-        this.restoreScroll(s);
-        this.afterMove(newIndex);
-    },
-
-        onColConfigChange : function(){
-        delete this.lastViewWidth;
-        this.indexMap = null;
-        this.refresh(true);
-    },
-
-    
-        initUI : function(grid){
-        grid.on("headerclick", this.onHeaderClick, this);
-
-        if(grid.trackMouseOver){
-            grid.on("mouseover", this.onRowOver, this);
-          grid.on("mouseout", this.onRowOut, this);
-      }
-    },
-
-        initEvents : function(){
-
-    },
-
-        onHeaderClick : function(g, index){
-        if(this.headersDisabled || !this.cm.isSortable(index)){
-            return;
-        }
-        g.stopEditing(true);
-        g.store.sort(this.cm.getDataIndex(index));
-    },
-
-        onRowOver : function(e, t){
-        var row;
-        if((row = this.findRowIndex(t)) !== false){
-            this.addRowClass(row, "x-grid3-row-over");
-        }
-    },
-
-        onRowOut : function(e, t){
-        var row;
-        if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
-            this.removeRowClass(row, "x-grid3-row-over");
-        }
-    },
-
-        handleWheel : function(e){
-        e.stopPropagation();
-    },
-
-        onRowSelect : function(row){
-        this.addRowClass(row, "x-grid3-row-selected");
-    },
-
-        onRowDeselect : function(row){
-        this.removeRowClass(row, "x-grid3-row-selected");
-    },
-
-        onCellSelect : function(row, col){
-        var cell = this.getCell(row, col);
-        if(cell){
-            this.fly(cell).addClass("x-grid3-cell-selected");
-        }
-    },
-
-        onCellDeselect : function(row, col){
-        var cell = this.getCell(row, col);
-        if(cell){
-            this.fly(cell).removeClass("x-grid3-cell-selected");
-        }
-    },
-
-        onColumnSplitterMoved : function(i, w){
-        this.userResized = true;
-        var cm = this.grid.colModel;
-        cm.setColumnWidth(i, w, true);
-
-        if(this.forceFit){
-            this.fitColumns(true, false, i);
-            this.updateAllColumnWidths();
-        }else{
-            this.updateColumnWidth(i, w);
-        }
-
-        this.grid.fireEvent("columnresize", i, w);
-    },
-
-        handleHdMenuClick : function(item){
-        var index = this.hdCtxIndex;
-        var cm = this.cm, ds = this.ds;
-        switch(item.id){
-            case "asc":
-                ds.sort(cm.getDataIndex(index), "ASC");
-                break;
-            case "desc":
-                ds.sort(cm.getDataIndex(index), "DESC");
-                break;
-            default:
-                index = cm.getIndexById(item.id.substr(4));
-                if(index != -1){
-                    if(item.checked && cm.getColumnsBy(this.isHideableColumn, this).length <= 1){
-                        this.onDenyColumnHide();
-                        return false;
-                    }
-                    cm.setHidden(index, item.checked);
-                }
-        }
-        return true;
-    },
-
-        isHideableColumn : function(c){
-        return !c.hidden && !c.fixed;
-    },
-
-        beforeColMenuShow : function(){
-        var cm = this.cm,  colCount = cm.getColumnCount();
-        this.colMenu.removeAll();
-        for(var i = 0; i < colCount; i++){
-            if(cm.config[i].fixed !== true && cm.config[i].hideable !== false){
-                this.colMenu.add(new Ext.menu.CheckItem({
-                    id: "col-"+cm.getColumnId(i),
-                    text: cm.getColumnHeader(i),
-                    checked: !cm.isHidden(i),
-                    hideOnClick:false,
-                    disabled: cm.config[i].hideable === false
-                }));
-            }
-        }
-    },
-
-        handleHdDown : function(e, t){
-        if(Ext.fly(t).hasClass('x-grid3-hd-btn')){
-            e.stopEvent();
-            var hd = this.findHeaderCell(t);
-            Ext.fly(hd).addClass('x-grid3-hd-menu-open');
-            var index = this.getCellIndex(hd);
-            this.hdCtxIndex = index;
-            var ms = this.hmenu.items, cm = this.cm;
-            ms.get("asc").setDisabled(!cm.isSortable(index));
-            ms.get("desc").setDisabled(!cm.isSortable(index));
-            this.hmenu.on("hide", function(){
-                Ext.fly(hd).removeClass('x-grid3-hd-menu-open');
-            }, this, {single:true});
-            this.hmenu.show(t, "tl-bl?");
-        }
-    },
-
-        handleHdOver : function(e, t){
-        var hd = this.findHeaderCell(t);
-        if(hd && !this.headersDisabled){
-            this.activeHd = hd;
-            this.activeHdIndex = this.getCellIndex(hd);
-            var fly = this.fly(hd);
-            this.activeHdRegion = fly.getRegion();
-            if(!this.cm.isMenuDisabled(this.activeHdIndex)){
-                fly.addClass("x-grid3-hd-over");
-                this.activeHdBtn = fly.child('.x-grid3-hd-btn');
-                if(this.activeHdBtn){
-                    this.activeHdBtn.dom.style.height = (hd.firstChild.offsetHeight-1)+'px';
-                }
-            }
-        }
-    },
-
-        handleHdMove : function(e, t){
-        if(this.activeHd && !this.headersDisabled){
-            var hw = this.splitHandleWidth || 5;
-            var r = this.activeHdRegion;
-            var x = e.getPageX();
-            var ss = this.activeHd.style;
-            if(x - r.left <= hw && this.cm.isResizable(this.activeHdIndex-1)){
-                ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'e-resize' : 'col-resize';             }else if(r.right - x <= (!this.activeHdBtn ? hw : 2) && this.cm.isResizable(this.activeHdIndex)){
-                ss.cursor = Ext.isAir ? 'move' : Ext.isSafari ? 'w-resize' : 'col-resize';
-            }else{
-                ss.cursor = '';
-            }
-        }
-    },
-
-        handleHdOut : function(e, t){
-        var hd = this.findHeaderCell(t);
-        if(hd && (!Ext.isIE || !e.within(hd, true))){
-            this.activeHd = null;
-            this.fly(hd).removeClass("x-grid3-hd-over");
-            hd.style.cursor = '';
-        }
-    },
-
-        hasRows : function(){
-        var fc = this.mainBody.dom.firstChild;
-        return fc && fc.className != 'x-grid-empty';
-    },
-
-        bind : function(d, c){
-        this.initData(d, c);
-    }
-});
-
-
-Ext.grid.GridView.SplitDragZone = function(grid, hd){
-    this.grid = grid;
-    this.view = grid.getView();
-    this.marker = this.view.resizeMarker;
-    this.proxy = this.view.resizeProxy;
-    Ext.grid.GridView.SplitDragZone.superclass.constructor.call(this, hd,
-        "gridSplitters" + this.grid.getGridEl().id, {
-        dragElId : Ext.id(this.proxy.dom), resizeFrame:false
-    });
-    this.scroll = false;
-    this.hw = this.view.splitHandleWidth || 5;
-};
-Ext.extend(Ext.grid.GridView.SplitDragZone, Ext.dd.DDProxy, {
-
-    b4StartDrag : function(x, y){
-        this.view.headersDisabled = true;
-        var h = this.view.mainWrap.getHeight();
-        this.marker.setHeight(h);
-        this.marker.show();
-        this.marker.alignTo(this.view.getHeaderCell(this.cellIndex), 'tl-tl', [-2, 0]);
-        this.proxy.setHeight(h);
-        var w = this.cm.getColumnWidth(this.cellIndex);
-        var minw = Math.max(w-this.grid.minColumnWidth, 0);
-        this.resetConstraints();
-        this.setXConstraint(minw, 1000);
-        this.setYConstraint(0, 0);
-        this.minX = x - minw;
-        this.maxX = x + 1000;
-        this.startPos = x;
-        Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
-    },
-
-
-    handleMouseDown : function(e){
-        var t = this.view.findHeaderCell(e.getTarget());
-        if(t){
-            var xy = this.view.fly(t).getXY(), x = xy[0], y = xy[1];
-            var exy = e.getXY(), ex = exy[0], ey = exy[1];
-            var w = t.offsetWidth, adjust = false;
-            if((ex - x) <= this.hw){
-                adjust = -1;
-            }else if((x+w) - ex <= this.hw){
-                adjust = 0;
-            }
-            if(adjust !== false){
-                this.cm = this.grid.colModel;
-                var ci = this.view.getCellIndex(t);
-                if(adjust == -1){
-                  if (ci + adjust < 0) {
-                    return;
-                  }
-                    while(this.cm.isHidden(ci+adjust)){
-                        --adjust;
-                        if(ci+adjust < 0){
-                            return;
-                        }
-                    }
-                }
-                this.cellIndex = ci+adjust;
-                this.split = t.dom;
-                if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
-                    Ext.grid.GridView.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
-                }
-            }else if(this.view.columnDrag){
-                this.view.columnDrag.callHandleMouseDown(e);
-            }
-        }
-    },
-
-    endDrag : function(e){
-        this.marker.hide();
-        var v = this.view;
-        var endX = Math.max(this.minX, e.getPageX());
-        var diff = endX - this.startPos;
-        v.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
-        setTimeout(function(){
-            v.headersDisabled = false;
-        }, 50);
-    },
-
-    autoOffset : function(){
-        this.setDelta(0,0);
-    }
-});
-
-\r
-Ext.grid.GroupingView = Ext.extend(Ext.grid.GridView, {\r
-    \r
-    hideGroupedColumn:false,\r
-    \r
-    showGroupName:true,\r
-    \r
-    startCollapsed:false,\r
-    \r
-    enableGrouping:true,\r
-    \r
-    enableGroupingMenu:true,\r
-    \r
-    enableNoGroups:true,\r
-    \r
-    emptyGroupText : '(None)',\r
-    \r
-    ignoreAdd: false,\r
-    \r
-    groupTextTpl : '{text}',\r
-    \r
-    \r
-\r
-    
-    gidSeed : 1000,\r
-\r
-    
-    initTemplates : function(){\r
-        Ext.grid.GroupingView.superclass.initTemplates.call(this);\r
-        this.state = {};\r
-\r
-        var sm = this.grid.getSelectionModel();\r
-        sm.on(sm.selectRow ? 'beforerowselect' : 'beforecellselect',\r
-                this.onBeforeRowSelect, this);\r
-\r
-        if(!this.startGroup){\r
-            this.startGroup = new Ext.XTemplate(\r
-                '<div id="{groupId}" class="x-grid-group {cls}">',\r
-                    '<div id="{groupId}-hd" class="x-grid-group-hd" style="{style}"><div>', this.groupTextTpl ,'</div></div>',\r
-                    '<div id="{groupId}-bd" class="x-grid-group-body">'\r
-            );\r
-        }\r
-        this.startGroup.compile();\r
-        this.endGroup = '</div></div>';\r
-    },\r
-\r
-    
-    findGroup : function(el){\r
-        return Ext.fly(el).up('.x-grid-group', this.mainBody.dom);\r
-    },\r
-\r
-    
-    getGroups : function(){\r
-        return this.hasRows() ? this.mainBody.dom.childNodes : [];\r
-    },\r
-\r
-    
-    onAdd : function(){\r
-        if(this.enableGrouping && !this.ignoreAdd){\r
-            var ss = this.getScrollState();\r
-            this.refresh();\r
-            this.restoreScroll(ss);\r
-        }else if(!this.enableGrouping){\r
-            Ext.grid.GroupingView.superclass.onAdd.apply(this, arguments);\r
-        }\r
-    },\r
-\r
-    
-    onRemove : function(ds, record, index, isUpdate){\r
-        Ext.grid.GroupingView.superclass.onRemove.apply(this, arguments);\r
-        var g = document.getElementById(record._groupId);\r
-        if(g && g.childNodes[1].childNodes.length < 1){\r
-            Ext.removeNode(g);\r
-        }\r
-        this.applyEmptyText();\r
-    },\r
-\r
-    
-    refreshRow : function(record){\r
-        if(this.ds.getCount()==1){\r
-            this.refresh();\r
-        }else{\r
-            this.isUpdating = true;\r
-            Ext.grid.GroupingView.superclass.refreshRow.apply(this, arguments);\r
-            this.isUpdating = false;\r
-        }\r
-    },\r
-\r
-    
-    beforeMenuShow : function(){\r
-        var field = this.getGroupField();\r
-        var g = this.hmenu.items.get('groupBy');\r
-        if(g){\r
-            g.setDisabled(this.cm.config[this.hdCtxIndex].groupable === false);\r
-        }\r
-        var s = this.hmenu.items.get('showGroups');\r
-        if(s){\r
-            if (!!field){ 
-                s.setDisabled(this.cm.config[this.hdCtxIndex].groupable === false)\r
-            }\r
-            s.setChecked(!!field);\r
-        }\r
-    },\r
-\r
-    
-    renderUI : function(){\r
-        Ext.grid.GroupingView.superclass.renderUI.call(this);\r
-        this.mainBody.on('mousedown', this.interceptMouse, this);\r
-\r
-        if(this.enableGroupingMenu && this.hmenu){\r
-            this.hmenu.add('-',{\r
-                id:'groupBy',\r
-                text: this.groupByText,\r
-                handler: this.onGroupByClick,\r
-                scope: this,\r
-                iconCls:'x-group-by-icon'\r
-            });\r
-            if(this.enableNoGroups){\r
-                this.hmenu.add({\r
-                    id:'showGroups',\r
-                    text: this.showGroupsText,\r
-                    checked: true,\r
-                    checkHandler: this.onShowGroupsClick,\r
-                    scope: this\r
-                });\r
-            }\r
-            this.hmenu.on('beforeshow', this.beforeMenuShow, this);\r
-        }\r
-    },\r
-\r
-    
-    onGroupByClick : function(){\r
-        this.grid.store.groupBy(this.cm.getDataIndex(this.hdCtxIndex));\r
-        this.beforeMenuShow(); 
-    },\r
-\r
-    
-    onShowGroupsClick : function(mi, checked){\r
-        if(checked){\r
-            this.onGroupByClick();\r
-        }else{\r
-            this.grid.store.clearGrouping();\r
-        }\r
-    },\r
-\r
-    \r
-    toggleGroup : function(group, expanded){\r
-        this.grid.stopEditing(true);\r
-        group = Ext.getDom(group);\r
-        var gel = Ext.fly(group);\r
-        expanded = expanded !== undefined ?\r
-                expanded : gel.hasClass('x-grid-group-collapsed');\r
-\r
-        this.state[gel.dom.id] = expanded;\r
-        gel[expanded ? 'removeClass' : 'addClass']('x-grid-group-collapsed');\r
-    },\r
-\r
-    \r
-    toggleAllGroups : function(expanded){\r
-        var groups = this.getGroups();\r
-        for(var i = 0, len = groups.length; i < len; i++){\r
-            this.toggleGroup(groups[i], expanded);\r
-        }\r
-    },\r
-\r
-    \r
-    expandAllGroups : function(){\r
-        this.toggleAllGroups(true);\r
-    },\r
-\r
-    \r
-    collapseAllGroups : function(){\r
-        this.toggleAllGroups(false);\r
-    },\r
-\r
-    
-    interceptMouse : function(e){\r
-        var hd = e.getTarget('.x-grid-group-hd', this.mainBody);\r
-        if(hd){\r
-            e.stopEvent();\r
-            this.toggleGroup(hd.parentNode);\r
-        }\r
-    },\r
-\r
-    
-    getGroup : function(v, r, groupRenderer, rowIndex, colIndex, ds){\r
-        var g = groupRenderer ? groupRenderer(v, {}, r, rowIndex, colIndex, ds) : String(v);\r
-        if(g === ''){\r
-            g = this.cm.config[colIndex].emptyGroupText || this.emptyGroupText;\r
-        }\r
-        return g;\r
-    },\r
-\r
-    
-    getGroupField : function(){\r
-        return this.grid.store.getGroupState();\r
-    },\r
-\r
-    
-    renderRows : function(){\r
-        var groupField = this.getGroupField();\r
-        var eg = !!groupField;\r
-        
-        if(this.hideGroupedColumn) {\r
-            var colIndex = this.cm.findColumnIndex(groupField);\r
-            if(!eg && this.lastGroupField !== undefined) {\r
-                this.mainBody.update('');\r
-                this.cm.setHidden(this.cm.findColumnIndex(this.lastGroupField), false);\r
-                delete this.lastGroupField;\r
-            }else if (eg && this.lastGroupField === undefined) {\r
-                this.lastGroupField = groupField;\r
-                this.cm.setHidden(colIndex, true);\r
-            }else if (eg && this.lastGroupField !== undefined && groupField !== this.lastGroupField) {\r
-                this.mainBody.update('');\r
-                var oldIndex = this.cm.findColumnIndex(this.lastGroupField);\r
-                this.cm.setHidden(oldIndex, false);\r
-                this.lastGroupField = groupField;\r
-                this.cm.setHidden(colIndex, true);\r
-            }\r
-        }\r
-        return Ext.grid.GroupingView.superclass.renderRows.apply(\r
-                    this, arguments);\r
-    },\r
-\r
-    
-    doRender : function(cs, rs, ds, startRow, colCount, stripe){\r
-        if(rs.length < 1){\r
-            return '';\r
-        }\r
-        var groupField = this.getGroupField();\r
-        var colIndex = this.cm.findColumnIndex(groupField);\r
-\r
-        this.enableGrouping = !!groupField;\r
-\r
-        if(!this.enableGrouping || this.isUpdating){\r
-            return Ext.grid.GroupingView.superclass.doRender.apply(\r
-                    this, arguments);\r
-        }\r
-        var gstyle = 'width:'+this.getTotalWidth()+';';\r
-\r
-        var gidPrefix = this.grid.getGridEl().id;\r
-        var cfg = this.cm.config[colIndex];\r
-        var groupRenderer = cfg.groupRenderer || cfg.renderer;\r
-        var prefix = this.showGroupName ?\r
-                     (cfg.groupName || cfg.header)+': ' : '';\r
-\r
-        var groups = [], curGroup, i, len, gid;\r
-        for(i = 0, len = rs.length; i < len; i++){\r
-            var rowIndex = startRow + i;\r
-            var r = rs[i],\r
-                gvalue = r.data[groupField],\r
-                g = this.getGroup(gvalue, r, groupRenderer, rowIndex, colIndex, ds);\r
-            if(!curGroup || curGroup.group != g){\r
-                gid = gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(g);\r
-                       
-                               
-                               var isCollapsed  = typeof this.state[gid] !== 'undefined' ? !this.state[gid] : this.startCollapsed;\r
-                               var gcls = isCollapsed ? 'x-grid-group-collapsed' : ''; \r
-                curGroup = {\r
-                    group: g,\r
-                    gvalue: gvalue,\r
-                    text: prefix + g,\r
-                    groupId: gid,\r
-                    startRow: rowIndex,\r
-                    rs: [r],\r
-                    cls: gcls,\r
-                    style: gstyle\r
-                };\r
-                groups.push(curGroup);\r
-            }else{\r
-                curGroup.rs.push(r);\r
-            }\r
-            r._groupId = gid;\r
-        }\r
-\r
-        var buf = [];\r
-        for(i = 0, len = groups.length; i < len; i++){\r
-            var g = groups[i];\r
-            this.doGroupStart(buf, g, cs, ds, colCount);\r
-            buf[buf.length] = Ext.grid.GroupingView.superclass.doRender.call(\r
-                    this, cs, g.rs, ds, g.startRow, colCount, stripe);\r
-\r
-            this.doGroupEnd(buf, g, cs, ds, colCount);\r
-        }\r
-        return buf.join('');\r
-    },\r
-\r
-    \r
-    getGroupId : function(value){\r
-        var gidPrefix = this.grid.getGridEl().id;\r
-        var groupField = this.getGroupField();\r
-        var colIndex = this.cm.findColumnIndex(groupField);\r
-        var cfg = this.cm.config[colIndex];\r
-        var groupRenderer = cfg.groupRenderer || cfg.renderer;\r
-        var gtext = this.getGroup(value, {data:{}}, groupRenderer, 0, colIndex, this.ds);\r
-        return gidPrefix + '-gp-' + groupField + '-' + Ext.util.Format.htmlEncode(value);\r
-    },\r
-\r
-    
-    doGroupStart : function(buf, g, cs, ds, colCount){\r
-        buf[buf.length] = this.startGroup.apply(g);\r
-    },\r
-\r
-    
-    doGroupEnd : function(buf, g, cs, ds, colCount){\r
-        buf[buf.length] = this.endGroup;\r
-    },\r
-\r
-    
-    getRows : function(){\r
-        if(!this.enableGrouping){\r
-            return Ext.grid.GroupingView.superclass.getRows.call(this);\r
-        }\r
-        var r = [];\r
-        var g, gs = this.getGroups();\r
-        for(var i = 0, len = gs.length; i < len; i++){\r
-            g = gs[i].childNodes[1].childNodes;\r
-            for(var j = 0, jlen = g.length; j < jlen; j++){\r
-                r[r.length] = g[j];\r
-            }\r
-        }\r
-        return r;\r
-    },\r
-\r
-    
-    updateGroupWidths : function(){\r
-        if(!this.enableGrouping || !this.hasRows()){\r
-            return;\r
-        }\r
-        var tw = Math.max(this.cm.getTotalWidth(), this.el.dom.offsetWidth-this.scrollOffset) +'px';\r
-        var gs = this.getGroups();\r
-        for(var i = 0, len = gs.length; i < len; i++){\r
-            gs[i].firstChild.style.width = tw;\r
-        }\r
-    },\r
-\r
-    
-    onColumnWidthUpdated : function(col, w, tw){\r
-        this.updateGroupWidths();\r
-    },\r
-\r
-    
-    onAllColumnWidthsUpdated : function(ws, tw){\r
-        this.updateGroupWidths();\r
-    },\r
-\r
-    
-    onColumnHiddenUpdated : function(col, hidden, tw){\r
-        this.updateGroupWidths();\r
-    },\r
-\r
-    
-    onLayout : function(){\r
-        this.updateGroupWidths();\r
-    },\r
-\r
-    
-    onBeforeRowSelect : function(sm, rowIndex){\r
-        if(!this.enableGrouping){\r
-            return;\r
-        }\r
-        var row = this.getRow(rowIndex);\r
-        if(row && !row.offsetParent){\r
-            var g = this.findGroup(row);\r
-            this.toggleGroup(g, true);\r
-        }\r
-    },\r
-\r
-    \r
-    groupByText: 'Group By This Field',\r
-    \r
-    showGroupsText: 'Show in Groups'\r
-});\r
-
-Ext.grid.GroupingView.GROUP_ID = 1000;
-
-
-Ext.grid.HeaderDragZone = function(grid, hd, hd2){\r
-    this.grid = grid;\r
-    this.view = grid.getView();\r
-    this.ddGroup = "gridHeader" + this.grid.getGridEl().id;\r
-    Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);\r
-    if(hd2){\r
-        this.setHandleElId(Ext.id(hd));\r
-        this.setOuterHandleElId(Ext.id(hd2));\r
-    }\r
-    this.scroll = false;\r
-};\r
-Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {\r
-    maxDragWidth: 120,\r
-    getDragData : function(e){\r
-        var t = Ext.lib.Event.getTarget(e);\r
-        var h = this.view.findHeaderCell(t);\r
-        if(h){\r
-            return {ddel: h.firstChild, header:h};\r
-        }\r
-        return false;\r
-    },\r
-\r
-    onInitDrag : function(e){\r
-        this.view.headersDisabled = true;\r
-        var clone = this.dragData.ddel.cloneNode(true);\r
-        clone.id = Ext.id();\r
-        clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";\r
-        this.proxy.update(clone);\r
-        return true;\r
-    },\r
-\r
-    afterValidDrop : function(){\r
-        var v = this.view;\r
-        setTimeout(function(){\r
-            v.headersDisabled = false;\r
-        }, 50);\r
-    },\r
-\r
-    afterInvalidDrop : function(){\r
-        var v = this.view;\r
-        setTimeout(function(){\r
-            v.headersDisabled = false;\r
-        }, 50);\r
-    }\r
-});\r
-\r
-
-
-Ext.grid.HeaderDropZone = function(grid, hd, hd2){\r
-    this.grid = grid;\r
-    this.view = grid.getView();\r
-    
-    this.proxyTop = Ext.DomHelper.append(document.body, {\r
-        cls:"col-move-top", html:"&#160;"\r
-    }, true);\r
-    this.proxyBottom = Ext.DomHelper.append(document.body, {\r
-        cls:"col-move-bottom", html:"&#160;"\r
-    }, true);\r
-    this.proxyTop.hide = this.proxyBottom.hide = function(){\r
-        this.setLeftTop(-100,-100);\r
-        this.setStyle("visibility", "hidden");\r
-    };\r
-    this.ddGroup = "gridHeader" + this.grid.getGridEl().id;\r
-    
-    
-    Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);\r
-};\r
-Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {\r
-    proxyOffsets : [-4, -9],\r
-    fly: Ext.Element.fly,\r
-\r
-    getTargetFromEvent : function(e){\r
-        var t = Ext.lib.Event.getTarget(e);\r
-        var cindex = this.view.findCellIndex(t);\r
-        if(cindex !== false){\r
-            return this.view.getHeaderCell(cindex);\r
-        }\r
-    },\r
-\r
-    nextVisible : function(h){\r
-        var v = this.view, cm = this.grid.colModel;\r
-        h = h.nextSibling;\r
-        while(h){\r
-            if(!cm.isHidden(v.getCellIndex(h))){\r
-                return h;\r
-            }\r
-            h = h.nextSibling;\r
-        }\r
-        return null;\r
-    },\r
-\r
-    prevVisible : function(h){\r
-        var v = this.view, cm = this.grid.colModel;\r
-        h = h.prevSibling;\r
-        while(h){\r
-            if(!cm.isHidden(v.getCellIndex(h))){\r
-                return h;\r
-            }\r
-            h = h.prevSibling;\r
-        }\r
-        return null;\r
-    },\r
-\r
-    positionIndicator : function(h, n, e){\r
-        var x = Ext.lib.Event.getPageX(e);\r
-        var r = Ext.lib.Dom.getRegion(n.firstChild);\r
-        var px, pt, py = r.top + this.proxyOffsets[1];\r
-        if((r.right - x) <= (r.right-r.left)/2){\r
-            px = r.right+this.view.borderWidth;\r
-            pt = "after";\r
-        }else{\r
-            px = r.left;\r
-            pt = "before";\r
-        }\r
-        var oldIndex = this.view.getCellIndex(h);\r
-        var newIndex = this.view.getCellIndex(n);\r
-\r
-        if(this.grid.colModel.isFixed(newIndex)){\r
-            return false;\r
-        }\r
-\r
-        var locked = this.grid.colModel.isLocked(newIndex);\r
-\r
-        if(pt == "after"){\r
-            newIndex++;\r
-        }\r
-        if(oldIndex < newIndex){\r
-            newIndex--;\r
-        }\r
-        if(oldIndex == newIndex && (locked == this.grid.colModel.isLocked(oldIndex))){\r
-            return false;\r
-        }\r
-        px +=  this.proxyOffsets[0];\r
-        this.proxyTop.setLeftTop(px, py);\r
-        this.proxyTop.show();\r
-        if(!this.bottomOffset){\r
-            this.bottomOffset = this.view.mainHd.getHeight();\r
-        }\r
-        this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);\r
-        this.proxyBottom.show();\r
-        return pt;\r
-    },\r
-\r
-    onNodeEnter : function(n, dd, e, data){\r
-        if(data.header != n){\r
-            this.positionIndicator(data.header, n, e);\r
-        }\r
-    },\r
-\r
-    onNodeOver : function(n, dd, e, data){\r
-        var result = false;\r
-        if(data.header != n){\r
-            result = this.positionIndicator(data.header, n, e);\r
-        }\r
-        if(!result){\r
-            this.proxyTop.hide();\r
-            this.proxyBottom.hide();\r
-        }\r
-        return result ? this.dropAllowed : this.dropNotAllowed;\r
-    },\r
-\r
-    onNodeOut : function(n, dd, e, data){\r
-        this.proxyTop.hide();\r
-        this.proxyBottom.hide();\r
-    },\r
-\r
-    onNodeDrop : function(n, dd, e, data){\r
-        var h = data.header;\r
-        if(h != n){\r
-            var cm = this.grid.colModel;\r
-            var x = Ext.lib.Event.getPageX(e);\r
-            var r = Ext.lib.Dom.getRegion(n.firstChild);\r
-            var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";\r
-            var oldIndex = this.view.getCellIndex(h);\r
-            var newIndex = this.view.getCellIndex(n);\r
-            var locked = cm.isLocked(newIndex);\r
-            if(pt == "after"){\r
-                newIndex++;\r
-            }\r
-            if(oldIndex < newIndex){\r
-                newIndex--;\r
-            }\r
-            if(oldIndex == newIndex && (locked == cm.isLocked(oldIndex))){\r
-                return false;\r
-            }\r
-            cm.setLocked(oldIndex, locked, true);\r
-            cm.moveColumn(oldIndex, newIndex);\r
-            this.grid.fireEvent("columnmove", oldIndex, newIndex);\r
-            return true;\r
-        }\r
-        return false;\r
-    }\r
-});\r
-\r
-\r
-Ext.grid.GridView.ColumnDragZone = function(grid, hd){\r
-    Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);\r
-    this.proxy.el.addClass('x-grid3-col-dd');\r
-};\r
-\r
-Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {\r
-    handleMouseDown : function(e){\r
-\r
-    },\r
-\r
-    callHandleMouseDown : function(e){\r
-        Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);\r
-    }\r
-});
-Ext.grid.SplitDragZone = function(grid, hd, hd2){
-    this.grid = grid;
-    this.view = grid.getView();
-    this.proxy = this.view.resizeProxy;
-    Ext.grid.SplitDragZone.superclass.constructor.call(this, hd,
-        "gridSplitters" + this.grid.getGridEl().id, {
-        dragElId : Ext.id(this.proxy.dom), resizeFrame:false
-    });
-    this.setHandleElId(Ext.id(hd));
-    this.setOuterHandleElId(Ext.id(hd2));
-    this.scroll = false;
-};
-Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, {
-    fly: Ext.Element.fly,
-
-    b4StartDrag : function(x, y){
-        this.view.headersDisabled = true;
-        this.proxy.setHeight(this.view.mainWrap.getHeight());
-        var w = this.cm.getColumnWidth(this.cellIndex);
-        var minw = Math.max(w-this.grid.minColumnWidth, 0);
-        this.resetConstraints();
-        this.setXConstraint(minw, 1000);
-        this.setYConstraint(0, 0);
-        this.minX = x - minw;
-        this.maxX = x + 1000;
-        this.startPos = x;
-        Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
-    },
-
-
-    handleMouseDown : function(e){
-        ev = Ext.EventObject.setEvent(e);
-        var t = this.fly(ev.getTarget());
-        if(t.hasClass("x-grid-split")){
-            this.cellIndex = this.view.getCellIndex(t.dom);
-            this.split = t.dom;
-            this.cm = this.grid.colModel;
-            if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
-                Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
-            }
-        }
-    },
-
-    endDrag : function(e){
-        this.view.headersDisabled = false;
-        var endX = Math.max(this.minX, Ext.lib.Event.getPageX(e));
-        var diff = endX - this.startPos;
-        this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
-    },
-
-    autoOffset : function(){
-        this.setDelta(0,0);
-    }
-});
-Ext.grid.GridDragZone = function(grid, config){
-    this.view = grid.getView();
-    Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, config);
-    if(this.view.lockedBody){
-        this.setHandleElId(Ext.id(this.view.mainBody.dom));
-        this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));
-    }
-    this.scroll = false;
-    this.grid = grid;
-    this.ddel = document.createElement('div');
-    this.ddel.className = 'x-grid-dd-wrap';
-};
-
-Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {
-    ddGroup : "GridDD",
-
-    getDragData : function(e){
-        var t = Ext.lib.Event.getTarget(e);
-        var rowIndex = this.view.findRowIndex(t);
-        if(rowIndex !== false){
-            var sm = this.grid.selModel;
-            if(!sm.isSelected(rowIndex) || e.hasModifier()){
-                sm.handleMouseDown(this.grid, rowIndex, e);
-            }
-            return {grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, selections:sm.getSelections()};
-        }
-        return false;
-    },
-
-    onInitDrag : function(e){
-        var data = this.dragData;
-        this.ddel.innerHTML = this.grid.getDragDropText();
-        this.proxy.update(this.ddel);
-            },
-
-    afterRepair : function(){
-        this.dragging = false;
-    },
-
-    getRepairXY : function(e, data){
-        return false;
-    },
-
-    onEndDrag : function(data, e){
-            },
-
-    onValidDrop : function(dd, e, id){
-                this.hideProxy();
-    },
-
-    beforeInvalidDrop : function(e, id){
-
-    }
-});
-
-\r
-Ext.grid.ColumnModel = function(config){\r
-       \r
-    this.defaultWidth = 100;\r
-\r
-    \r
-    this.defaultSortable = false;\r
-\r
-    \r
-    if(config.columns){\r
-        Ext.apply(this, config);\r
-        this.setConfig(config.columns, true);\r
-    }else{\r
-        this.setConfig(config, true);\r
-    }\r
-    this.addEvents(\r
-        \r
-           "widthchange",\r
-        \r
-           "headerchange",\r
-        \r
-           "hiddenchange",\r
-           \r
-        "columnmoved",\r
-        
-        "columnlockchange",\r
-        \r
-        "configchange"\r
-    );\r
-    Ext.grid.ColumnModel.superclass.constructor.call(this);\r
-};\r
-Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {\r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-    \r
-\r
-    \r
-    getColumnId : function(index){\r
-        return this.config[index].id;\r
-    },\r
-\r
-    \r
-    setConfig : function(config, initial){\r
-        if(!initial){ 
-            delete this.totalWidth;\r
-            for(var i = 0, len = this.config.length; i < len; i++){\r
-                var c = this.config[i];\r
-                if(c.editor){\r
-                    c.editor.destroy();\r
-                }\r
-            }\r
-        }\r
-        this.config = config;\r
-        this.lookup = {};\r
-        
-        for(var i = 0, len = config.length; i < len; i++){\r
-            var c = config[i];\r
-            if(typeof c.renderer == "string"){\r
-                c.renderer = Ext.util.Format[c.renderer];\r
-            }\r
-            if(typeof c.id == "undefined"){\r
-                c.id = i;\r
-            }\r
-            if(c.editor && c.editor.isFormField){\r
-                c.editor = new Ext.grid.GridEditor(c.editor);\r
-            }\r
-            this.lookup[c.id] = c;\r
-        }\r
-        if(!initial){\r
-            this.fireEvent('configchange', this);\r
-        }\r
-    },\r
-\r
-    \r
-    getColumnById : function(id){\r
-        return this.lookup[id];\r
-    },\r
-\r
-    \r
-    getIndexById : function(id){\r
-        for(var i = 0, len = this.config.length; i < len; i++){\r
-            if(this.config[i].id == id){\r
-                return i;\r
-            }\r
-        }\r
-        return -1;\r
-    },\r
-\r
-    
-    moveColumn : function(oldIndex, newIndex){\r
-        var c = this.config[oldIndex];\r
-        this.config.splice(oldIndex, 1);\r
-        this.config.splice(newIndex, 0, c);\r
-        this.dataMap = null;\r
-        this.fireEvent("columnmoved", this, oldIndex, newIndex);\r
-    },\r
-\r
-    
-    isLocked : function(colIndex){\r
-        return this.config[colIndex].locked === true;\r
-    },\r
-\r
-    
-    setLocked : function(colIndex, value, suppressEvent){\r
-        if(this.isLocked(colIndex) == value){\r
-            return;\r
-        }\r
-        this.config[colIndex].locked = value;\r
-        if(!suppressEvent){\r
-            this.fireEvent("columnlockchange", this, colIndex, value);\r
-        }\r
-    },\r
-\r
-    
-    getTotalLockedWidth : function(){\r
-        var totalWidth = 0;\r
-        for(var i = 0; i < this.config.length; i++){\r
-            if(this.isLocked(i) && !this.isHidden(i)){\r
-                this.totalWidth += this.getColumnWidth(i);\r
-            }\r
-        }\r
-        return totalWidth;\r
-    },\r
-\r
-    
-    getLockedCount : function(){\r
-        for(var i = 0, len = this.config.length; i < len; i++){\r
-            if(!this.isLocked(i)){\r
-                return i;\r
-            }\r
-        }\r
-    },\r
-\r
-    \r
-    getColumnCount : function(visibleOnly){\r
-        if(visibleOnly === true){\r
-            var c = 0;\r
-            for(var i = 0, len = this.config.length; i < len; i++){\r
-                if(!this.isHidden(i)){\r
-                    c++;\r
-                }\r
-            }\r
-            return c;\r
-        }\r
-        return this.config.length;\r
-    },\r
-\r
-    \r
-    getColumnsBy : function(fn, scope){\r
-        var r = [];\r
-        for(var i = 0, len = this.config.length; i < len; i++){\r
-            var c = this.config[i];\r
-            if(fn.call(scope||this, c, i) === true){\r
-                r[r.length] = c;\r
-            }\r
-        }\r
-        return r;\r
-    },\r
-\r
-    \r
-    isSortable : function(col){\r
-        if(typeof this.config[col].sortable == "undefined"){\r
-            return this.defaultSortable;\r
-        }\r
-        return this.config[col].sortable;\r
-    },\r
-\r
-    \r
-    isMenuDisabled : function(col){\r
-        return !!this.config[col].menuDisabled;\r
-    },\r
-\r
-    \r
-    getRenderer : function(col){\r
-        if(!this.config[col].renderer){\r
-            return Ext.grid.ColumnModel.defaultRenderer;\r
-        }\r
-        return this.config[col].renderer;\r
-    },\r
-\r
-    \r
-    setRenderer : function(col, fn){\r
-        this.config[col].renderer = fn;\r
-    },\r
-\r
-    \r
-    getColumnWidth : function(col){\r
-        return this.config[col].width || this.defaultWidth;\r
-    },\r
-\r
-    \r
-    setColumnWidth : function(col, width, suppressEvent){\r
-        this.config[col].width = width;\r
-        this.totalWidth = null;\r
-        if(!suppressEvent){\r
-             this.fireEvent("widthchange", this, col, width);\r
-        }\r
-    },\r
-\r
-    \r
-    getTotalWidth : function(includeHidden){\r
-        if(!this.totalWidth){\r
-            this.totalWidth = 0;\r
-            for(var i = 0, len = this.config.length; i < len; i++){\r
-                if(includeHidden || !this.isHidden(i)){\r
-                    this.totalWidth += this.getColumnWidth(i);\r
-                }\r
-            }\r
-        }\r
-        return this.totalWidth;\r
-    },\r
-\r
-    \r
-    getColumnHeader : function(col){\r
-        return this.config[col].header;\r
-    },\r
-\r
-    \r
-    setColumnHeader : function(col, header){\r
-        this.config[col].header = header;\r
-        this.fireEvent("headerchange", this, col, header);\r
-    },\r
-\r
-    \r
-    getColumnTooltip : function(col){\r
-            return this.config[col].tooltip;\r
-    },\r
-    \r
-    setColumnTooltip : function(col, tooltip){\r
-            this.config[col].tooltip = tooltip;\r
-    },\r
-\r
-    \r
-    getDataIndex : function(col){\r
-        return this.config[col].dataIndex;\r
-    },\r
-\r
-    \r
-    setDataIndex : function(col, dataIndex){\r
-        this.config[col].dataIndex = dataIndex;\r
-    },\r
-\r
-    findColumnIndex : function(dataIndex){\r
-        var c = this.config;\r
-        for(var i = 0, len = c.length; i < len; i++){\r
-            if(c[i].dataIndex == dataIndex){\r
-                return i;\r
-            }\r
-        }\r
-        return -1;\r
-    },\r
-\r
-    \r
-    isCellEditable : function(colIndex, rowIndex){\r
-        return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false;\r
-    },\r
-\r
-    \r
-    getCellEditor : function(colIndex, rowIndex){\r
-        return this.config[colIndex].editor;\r
-    },\r
-\r
-    \r
-    setEditable : function(col, editable){\r
-        this.config[col].editable = editable;\r
-    },\r
-\r
-\r
-    \r
-    isHidden : function(colIndex){\r
-        return this.config[colIndex].hidden;\r
-    },\r
-\r
-\r
-    \r
-    isFixed : function(colIndex){\r
-        return this.config[colIndex].fixed;\r
-    },\r
-\r
-    \r
-    isResizable : function(colIndex){\r
-        return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true;\r
-    },\r
-    \r
-    setHidden : function(colIndex, hidden){\r
-        var c = this.config[colIndex];\r
-        if(c.hidden !== hidden){\r
-            c.hidden = hidden;\r
-            this.totalWidth = null;\r
-            this.fireEvent("hiddenchange", this, colIndex, hidden);\r
-        }\r
-    },\r
-\r
-    \r
-    setEditor : function(col, editor){\r
-        this.config[col].editor = editor;\r
-    }\r
-});\r
-\r
-
-Ext.grid.ColumnModel.defaultRenderer = function(value){\r
-       if(typeof value == "string" && value.length < 1){\r
-           return "&#160;";\r
-       }\r
-       return value;\r
-};\r
-\r
-
-Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel;\r
-
-\r
-Ext.grid.AbstractSelectionModel = function(){\r
-    this.locked = false;\r
-    Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable,  {\r
-    \r
-    init : function(grid){\r
-        this.grid = grid;\r
-        this.initEvents();\r
-    },\r
-\r
-    \r
-    lock : function(){\r
-        this.locked = true;\r
-    },\r
-\r
-    \r
-    unlock : function(){\r
-        this.locked = false;\r
-    },\r
-\r
-    \r
-    isLocked : function(){\r
-        return this.locked;\r
-    }\r
-});
-
-Ext.grid.RowSelectionModel = function(config){
-    Ext.apply(this, config);
-    this.selections = new Ext.util.MixedCollection(false, function(o){
-        return o.id;
-    });
-
-    this.last = false;
-    this.lastActive = false;
-
-    this.addEvents(
-        
-           "selectionchange",
-        
-           "beforerowselect",
-        
-           "rowselect",
-        
-           "rowdeselect"
-    );
-
-    Ext.grid.RowSelectionModel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel,  {
-    
-    singleSelect : false,
-
-       
-        initEvents : function(){
-
-        if(!this.grid.enableDragDrop && !this.grid.enableDrag){
-            this.grid.on("rowmousedown", this.handleMouseDown, this);
-        }else{             this.grid.on("rowclick", function(grid, rowIndex, e) {
-                if(e.button === 0 && !e.shiftKey && !e.ctrlKey) {
-                    this.selectRow(rowIndex, false);
-                    grid.view.focusRow(rowIndex);
-                }
-            }, this);
-        }
-
-        this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
-            "up" : function(e){
-                if(!e.shiftKey){
-                    this.selectPrevious(e.shiftKey);
-                }else if(this.last !== false && this.lastActive !== false){
-                    var last = this.last;
-                    this.selectRange(this.last,  this.lastActive-1);
-                    this.grid.getView().focusRow(this.lastActive);
-                    if(last !== false){
-                        this.last = last;
-                    }
-                }else{
-                    this.selectFirstRow();
-                }
-            },
-            "down" : function(e){
-                if(!e.shiftKey){
-                    this.selectNext(e.shiftKey);
-                }else if(this.last !== false && this.lastActive !== false){
-                    var last = this.last;
-                    this.selectRange(this.last,  this.lastActive+1);
-                    this.grid.getView().focusRow(this.lastActive);
-                    if(last !== false){
-                        this.last = last;
-                    }
-                }else{
-                    this.selectFirstRow();
-                }
-            },
-            scope: this
-        });
-
-        var view = this.grid.view;
-        view.on("refresh", this.onRefresh, this);
-        view.on("rowupdated", this.onRowUpdated, this);
-        view.on("rowremoved", this.onRemove, this);
-    },
-
-        onRefresh : function(){
-        var ds = this.grid.store, index;
-        var s = this.getSelections();
-        this.clearSelections(true);
-        for(var i = 0, len = s.length; i < len; i++){
-            var r = s[i];
-            if((index = ds.indexOfId(r.id)) != -1){
-                this.selectRow(index, true);
-            }
-        }
-        if(s.length != this.selections.getCount()){
-            this.fireEvent("selectionchange", this);
-        }
-    },
-
-        onRemove : function(v, index, r){
-        if(this.selections.remove(r) !== false){
-            this.fireEvent('selectionchange', this);
-        }
-    },
-
-        onRowUpdated : function(v, index, r){
-        if(this.isSelected(r)){
-            v.onRowSelect(index);
-        }
-    },
-
-    
-    selectRecords : function(records, keepExisting){
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        var ds = this.grid.store;
-        for(var i = 0, len = records.length; i < len; i++){
-            this.selectRow(ds.indexOf(records[i]), true);
-        }
-    },
-
-    
-    getCount : function(){
-        return this.selections.length;
-    },
-
-    
-    selectFirstRow : function(){
-        this.selectRow(0);
-    },
-
-    
-    selectLastRow : function(keepExisting){
-        this.selectRow(this.grid.store.getCount() - 1, keepExisting);
-    },
-
-    
-    selectNext : function(keepExisting){
-        if(this.hasNext()){
-            this.selectRow(this.last+1, keepExisting);
-            this.grid.getView().focusRow(this.last);
-                       return true;
-        }
-               return false;
-    },
-
-    
-    selectPrevious : function(keepExisting){
-        if(this.hasPrevious()){
-            this.selectRow(this.last-1, keepExisting);
-            this.grid.getView().focusRow(this.last);
-                       return true;
-        }
-               return false;
-    },
-
-    
-    hasNext : function(){
-        return this.last !== false && (this.last+1) < this.grid.store.getCount();
-    },
-
-    
-    hasPrevious : function(){
-        return !!this.last;
-    },
-
-
-    
-    getSelections : function(){
-        return [].concat(this.selections.items);
-    },
-
-    
-    getSelected : function(){
-        return this.selections.itemAt(0);
-    },
-
-    
-    each : function(fn, scope){
-        var s = this.getSelections();
-        for(var i = 0, len = s.length; i < len; i++){
-            if(fn.call(scope || this, s[i], i) === false){
-                return false;
-            }
-        }
-        return true;
-    },
-
-    
-    clearSelections : function(fast){
-        if(this.locked) return;
-        if(fast !== true){
-            var ds = this.grid.store;
-            var s = this.selections;
-            s.each(function(r){
-                this.deselectRow(ds.indexOfId(r.id));
-            }, this);
-            s.clear();
-        }else{
-            this.selections.clear();
-        }
-        this.last = false;
-    },
-
-
-    
-    selectAll : function(){
-        if(this.locked) return;
-        this.selections.clear();
-        for(var i = 0, len = this.grid.store.getCount(); i < len; i++){
-            this.selectRow(i, true);
-        }
-    },
-
-    
-    hasSelection : function(){
-        return this.selections.length > 0;
-    },
-
-    
-    isSelected : function(index){
-        var r = typeof index == "number" ? this.grid.store.getAt(index) : index;
-        return (r && this.selections.key(r.id) ? true : false);
-    },
-
-    
-    isIdSelected : function(id){
-        return (this.selections.key(id) ? true : false);
-    },
-
-        handleMouseDown : function(g, rowIndex, e){
-        if(e.button !== 0 || this.isLocked()){
-            return;
-        };
-        var view = this.grid.getView();
-        if(e.shiftKey && this.last !== false){
-            var last = this.last;
-            this.selectRange(last, rowIndex, e.ctrlKey);
-            this.last = last;             view.focusRow(rowIndex);
-        }else{
-            var isSelected = this.isSelected(rowIndex);
-            if(e.ctrlKey && isSelected){
-                this.deselectRow(rowIndex);
-            }else if(!isSelected || this.getCount() > 1){
-                this.selectRow(rowIndex, e.ctrlKey || e.shiftKey);
-                view.focusRow(rowIndex);
-            }
-        }
-    },
-
-    
-    selectRows : function(rows, keepExisting){
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        for(var i = 0, len = rows.length; i < len; i++){
-            this.selectRow(rows[i], true);
-        }
-    },
-
-    
-    selectRange : function(startRow, endRow, keepExisting){
-        if(this.locked) return;
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        if(startRow <= endRow){
-            for(var i = startRow; i <= endRow; i++){
-                this.selectRow(i, true);
-            }
-        }else{
-            for(var i = startRow; i >= endRow; i--){
-                this.selectRow(i, true);
-            }
-        }
-    },
-
-    
-    deselectRange : function(startRow, endRow, preventViewNotify){
-        if(this.locked) return;
-        for(var i = startRow; i <= endRow; i++){
-            this.deselectRow(i, preventViewNotify);
-        }
-    },
-
-    
-    selectRow : function(index, keepExisting, preventViewNotify){
-        if(this.locked || (index < 0 || index >= this.grid.store.getCount())) return;
-        var r = this.grid.store.getAt(index);
-        if(r && this.fireEvent("beforerowselect", this, index, keepExisting, r) !== false){
-            if(!keepExisting || this.singleSelect){
-                this.clearSelections();
-            }
-            this.selections.add(r);
-            this.last = this.lastActive = index;
-            if(!preventViewNotify){
-                this.grid.getView().onRowSelect(index);
-            }
-            this.fireEvent("rowselect", this, index, r);
-            this.fireEvent("selectionchange", this);
-        }
-    },
-
-    
-    deselectRow : function(index, preventViewNotify){
-        if(this.locked) return;
-        if(this.last == index){
-            this.last = false;
-        }
-        if(this.lastActive == index){
-            this.lastActive = false;
-        }
-        var r = this.grid.store.getAt(index);
-        if(r){
-            this.selections.remove(r);
-            if(!preventViewNotify){
-                this.grid.getView().onRowDeselect(index);
-            }
-            this.fireEvent("rowdeselect", this, index, r);
-            this.fireEvent("selectionchange", this);
-        }
-    },
-
-        restoreLast : function(){
-        if(this._last){
-            this.last = this._last;
-        }
-    },
-
-        acceptsNav : function(row, col, cm){
-        return !cm.isHidden(col) && cm.isCellEditable(col, row);
-    },
-
-        onEditorKey : function(field, e){
-        var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
-        var shift = e.shiftKey;
-        if(k == e.TAB){
-            e.stopEvent();
-            ed.completeEdit();
-            if(shift){
-                newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
-            }else{
-                newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
-            }
-        }else if(k == e.ENTER){
-            e.stopEvent();
-            ed.completeEdit();
-                       if(this.moveEditorOnEnter !== false){
-                               if(shift){
-                                       newCell = g.walkCells(ed.row - 1, ed.col, -1, this.acceptsNav, this);
-                               }else{
-                                       newCell = g.walkCells(ed.row + 1, ed.col, 1, this.acceptsNav, this);
-                               }
-                       }
-        }else if(k == e.ESC){
-            ed.cancelEdit();
-        }
-        if(newCell){
-            g.startEditing(newCell[0], newCell[1]);
-        }
-    }
-});
-
-Ext.grid.CellSelectionModel = function(config){
-    Ext.apply(this, config);
-
-    this.selection = null;
-
-    this.addEvents(
-        
-           "beforecellselect",
-        
-           "cellselect",
-        
-           "selectionchange"
-    );
-
-    Ext.grid.CellSelectionModel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel,  {
-
-    
-    initEvents : function(){
-        this.grid.on("cellmousedown", this.handleMouseDown, this);
-        this.grid.getGridEl().on(Ext.isIE ? "keydown" : "keypress", this.handleKeyDown, this);
-        var view = this.grid.view;
-        view.on("refresh", this.onViewChange, this);
-        view.on("rowupdated", this.onRowUpdated, this);
-        view.on("beforerowremoved", this.clearSelections, this);
-        view.on("beforerowsinserted", this.clearSelections, this);
-        if(this.grid.isEditor){
-            this.grid.on("beforeedit", this.beforeEdit,  this);
-        }
-    },
-
-           beforeEdit : function(e){
-        this.select(e.row, e.column, false, true, e.record);
-    },
-
-           onRowUpdated : function(v, index, r){
-        if(this.selection && this.selection.record == r){
-            v.onCellSelect(index, this.selection.cell[1]);
-        }
-    },
-
-           onViewChange : function(){
-        this.clearSelections(true);
-    },
-
-       
-    getSelectedCell : function(){
-        return this.selection ? this.selection.cell : null;
-    },
-
-    
-    clearSelections : function(preventNotify){
-        var s = this.selection;
-        if(s){
-            if(preventNotify !== true){
-                this.grid.view.onCellDeselect(s.cell[0], s.cell[1]);
-            }
-            this.selection = null;
-            this.fireEvent("selectionchange", this, null);
-        }
-    },
-
-    
-    hasSelection : function(){
-        return this.selection ? true : false;
-    },
-
-    
-    handleMouseDown : function(g, row, cell, e){
-        if(e.button !== 0 || this.isLocked()){
-            return;
-        };
-        this.select(row, cell);
-    },
-
-    
-    select : function(rowIndex, colIndex, preventViewNotify, preventFocus,  r){
-        if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){
-            this.clearSelections();
-            r = r || this.grid.store.getAt(rowIndex);
-            this.selection = {
-                record : r,
-                cell : [rowIndex, colIndex]
-            };
-            if(!preventViewNotify){
-                var v = this.grid.getView();
-                v.onCellSelect(rowIndex, colIndex);
-                if(preventFocus !== true){
-                    v.focusCell(rowIndex, colIndex);
-                }
-            }
-            this.fireEvent("cellselect", this, rowIndex, colIndex);
-            this.fireEvent("selectionchange", this, this.selection);
-        }
-    },
-
-           isSelectable : function(rowIndex, colIndex, cm){
-        return !cm.isHidden(colIndex);
-    },
-
-    
-    handleKeyDown : function(e){
-        if(!e.isNavKeyPress()){
-            return;
-        }
-        var g = this.grid, s = this.selection;
-        if(!s){
-            e.stopEvent();
-            var cell = g.walkCells(0, 0, 1, this.isSelectable,  this);
-            if(cell){
-                this.select(cell[0], cell[1]);
-            }
-            return;
-        }
-        var sm = this;
-        var walk = function(row, col, step){
-            return g.walkCells(row, col, step, sm.isSelectable,  sm);
-        };
-        var k = e.getKey(), r = s.cell[0], c = s.cell[1];
-        var newCell;
-
-        switch(k){
-             case e.TAB:
-                 if(e.shiftKey){
-                     newCell = walk(r, c-1, -1);
-                 }else{
-                     newCell = walk(r, c+1, 1);
-                 }
-             break;
-             case e.DOWN:
-                 newCell = walk(r+1, c, 1);
-             break;
-             case e.UP:
-                 newCell = walk(r-1, c, -1);
-             break;
-             case e.RIGHT:
-                 newCell = walk(r, c+1, 1);
-             break;
-             case e.LEFT:
-                 newCell = walk(r, c-1, -1);
-             break;
-             case e.ENTER:
-                 if(g.isEditor && !g.editing){
-                    g.startEditing(r, c);
-                    e.stopEvent();
-                    return;
-                }
-             break;
-        };
-        if(newCell){
-            this.select(newCell[0], newCell[1]);
-            e.stopEvent();
-        }
-    },
-
-    acceptsNav : function(row, col, cm){
-        return !cm.isHidden(col) && cm.isCellEditable(col, row);
-    },
-
-    onEditorKey : function(field, e){
-        var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
-        if(k == e.TAB){
-            if(e.shiftKey){
-                newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
-            }else{
-                newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
-            }
-            e.stopEvent();
-        }else if(k == e.ENTER){
-            ed.completeEdit();
-            e.stopEvent();
-        }else if(k == e.ESC){
-               e.stopEvent();
-            ed.cancelEdit();
-        }
-        if(newCell){
-            g.startEditing(newCell[0], newCell[1]);
-        }
-    }
-});
-\r
-Ext.grid.EditorGridPanel = Ext.extend(Ext.grid.GridPanel, {\r
-    \r
-    clicksToEdit: 2,\r
-\r
-    
-    isEditor : true,\r
-    
-    detectEdit: false,\r
-\r
-       \r
-       autoEncode : false,\r
-\r
-       \r
-    
-    trackMouseOver: false, 
-    \r
-    
-    initComponent : function(){\r
-        Ext.grid.EditorGridPanel.superclass.initComponent.call(this);\r
-\r
-        if(!this.selModel){\r
-            this.selModel = new Ext.grid.CellSelectionModel();\r
-        }\r
-\r
-        this.activeEditor = null;\r
-\r
-           this.addEvents(\r
-            \r
-            "beforeedit",\r
-            \r
-            "afteredit",\r
-            \r
-            "validateedit"\r
-        );\r
-    },\r
-\r
-    
-    initEvents : function(){\r
-        Ext.grid.EditorGridPanel.superclass.initEvents.call(this);\r
-        \r
-        this.on("bodyscroll", this.stopEditing, this, [true]);\r
-\r
-        if(this.clicksToEdit == 1){\r
-            this.on("cellclick", this.onCellDblClick, this);\r
-        }else {\r
-            if(this.clicksToEdit == 'auto' && this.view.mainBody){\r
-                this.view.mainBody.on("mousedown", this.onAutoEditClick, this);\r
-            }\r
-            this.on("celldblclick", this.onCellDblClick, this);\r
-        }\r
-        this.getGridEl().addClass("xedit-grid");\r
-    },\r
-\r
-    
-    onCellDblClick : function(g, row, col){\r
-        this.startEditing(row, col);\r
-    },\r
-\r
-    
-    onAutoEditClick : function(e, t){\r
-        if(e.button !== 0){\r
-            return;\r
-        }\r
-        var row = this.view.findRowIndex(t);\r
-        var col = this.view.findCellIndex(t);\r
-        if(row !== false && col !== false){\r
-            this.stopEditing();\r
-            if(this.selModel.getSelectedCell){ 
-                var sc = this.selModel.getSelectedCell();\r
-                if(sc && sc.cell[0] === row && sc.cell[1] === col){\r
-                    this.startEditing(row, col);\r
-                }\r
-            }else{\r
-                if(this.selModel.isSelected(row)){\r
-                    this.startEditing(row, col);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onEditComplete : function(ed, value, startValue){\r
-        this.editing = false;\r
-        this.activeEditor = null;\r
-        ed.un("specialkey", this.selModel.onEditorKey, this.selModel);\r
-               var r = ed.record;\r
-        var field = this.colModel.getDataIndex(ed.col);\r
-        value = this.postEditValue(value, startValue, r, field);\r
-        if(String(value) !== String(startValue)){\r
-            var e = {\r
-                grid: this,\r
-                record: r,\r
-                field: field,\r
-                originalValue: startValue,\r
-                value: value,\r
-                row: ed.row,\r
-                column: ed.col,\r
-                cancel:false\r
-            };\r
-            if(this.fireEvent("validateedit", e) !== false && !e.cancel){\r
-                r.set(field, e.value);\r
-                delete e.cancel;\r
-                this.fireEvent("afteredit", e);\r
-            }\r
-        }\r
-        this.view.focusCell(ed.row, ed.col);\r
-    },\r
-\r
-    \r
-    startEditing : function(row, col){\r
-        this.stopEditing();\r
-        if(this.colModel.isCellEditable(col, row)){\r
-            this.view.ensureVisible(row, col, true);\r
-            var r = this.store.getAt(row);\r
-            var field = this.colModel.getDataIndex(col);\r
-            var e = {\r
-                grid: this,\r
-                record: r,\r
-                field: field,\r
-                value: r.data[field],\r
-                row: row,\r
-                column: col,\r
-                cancel:false\r
-            };\r
-            if(this.fireEvent("beforeedit", e) !== false && !e.cancel){\r
-                this.editing = true;\r
-                var ed = this.colModel.getCellEditor(col, row);\r
-                if(!ed.rendered){\r
-                    ed.render(this.view.getEditorParent(ed));\r
-                }\r
-                (function(){ 
-                    ed.row = row;\r
-                    ed.col = col;\r
-                    ed.record = r;\r
-                    ed.on("complete", this.onEditComplete, this, {single: true});\r
-                    ed.on("specialkey", this.selModel.onEditorKey, this.selModel);\r
-                    this.activeEditor = ed;\r
-                    var v = this.preEditValue(r, field);\r
-                    ed.startEdit(this.view.getCell(row, col), v);\r
-                }).defer(50, this);\r
-            }\r
-        }\r
-    },\r
-    \r
-       preEditValue : function(r, field){\r
-               return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlDecode(r.data[field]) : r.data[field];\r
-       },\r
-       \r
-       postEditValue : function(value, originalValue, r, field){\r
-               return this.autoEncode && typeof value == 'string' ? Ext.util.Format.htmlEncode(value) : value;\r
-       },\r
-           \r
-    \r
-    stopEditing : function(cancel){\r
-        if(this.activeEditor){\r
-            this.activeEditor[cancel === true ? 'cancelEdit' : 'completeEdit']();\r
-        }\r
-        this.activeEditor = null;\r
-    }\r
-});\r
-Ext.reg('editorgrid', Ext.grid.EditorGridPanel);
-Ext.grid.GridEditor = function(field, config){
-    Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
-    field.monitorTab = false;
-};
-
-Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
-    alignment: "tl-tl",
-    autoSize: "width",
-    hideEl : false,
-    cls: "x-small-editor x-grid-editor",
-    shim:false,
-    shadow:false
-});
-
-Ext.grid.PropertyRecord = Ext.data.Record.create([
-    {name:'name',type:'string'}, 'value'
-]);
-
-
-Ext.grid.PropertyStore = function(grid, source){
-    this.grid = grid;
-    this.store = new Ext.data.Store({
-        recordType : Ext.grid.PropertyRecord
-    });
-    this.store.on('update', this.onUpdate,  this);
-    if(source){
-        this.setSource(source);
-    }
-    Ext.grid.PropertyStore.superclass.constructor.call(this);
-};
-Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {
-        setSource : function(o){
-        this.source = o;
-        this.store.removeAll();
-        var data = [];
-        for(var k in o){
-            if(this.isEditableValue(o[k])){
-                data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
-            }
-        }
-        this.store.loadRecords({records: data}, {}, true);
-    },
-
-        onUpdate : function(ds, record, type){
-        if(type == Ext.data.Record.EDIT){
-            var v = record.data['value'];
-            var oldValue = record.modified['value'];
-            if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
-                this.source[record.id] = v;
-                record.commit();
-                this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
-            }else{
-                record.reject();
-            }
-        }
-    },
-
-        getProperty : function(row){
-       return this.store.getAt(row);
-    },
-
-        isEditableValue: function(val){
-        if(Ext.isDate(val)){
-            return true;
-        }else if(typeof val == 'object' || typeof val == 'function'){
-            return false;
-        }
-        return true;
-    },
-
-        setValue : function(prop, value){
-        this.source[prop] = value;
-        this.store.getById(prop).set('value', value);
-    },
-
-        getSource : function(){
-        return this.source;
-    }
-});
-
-
-Ext.grid.PropertyColumnModel = function(grid, store){
-    this.grid = grid;
-    var g = Ext.grid;
-    g.PropertyColumnModel.superclass.constructor.call(this, [
-        {header: this.nameText, width:50, sortable: true, dataIndex:'name', id: 'name', menuDisabled:true},
-        {header: this.valueText, width:50, resizable:false, dataIndex: 'value', id: 'value', menuDisabled:true}
-    ]);
-    this.store = store;
-    this.bselect = Ext.DomHelper.append(document.body, {
-        tag: 'select', cls: 'x-grid-editor x-hide-display', children: [
-            {tag: 'option', value: 'true', html: 'true'},
-            {tag: 'option', value: 'false', html: 'false'}
-        ]
-    });
-    var f = Ext.form;
-
-    var bfield = new f.Field({
-        el:this.bselect,
-        bselect : this.bselect,
-        autoShow: true,
-        getValue : function(){
-            return this.bselect.value == 'true';
-        }
-    });
-    this.editors = {
-        'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})),
-        'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
-        'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
-        'boolean' : new g.GridEditor(bfield)
-    };
-    this.renderCellDelegate = this.renderCell.createDelegate(this);
-    this.renderPropDelegate = this.renderProp.createDelegate(this);
-};
-
-Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {
-        nameText : 'Name',
-    valueText : 'Value',
-    dateFormat : 'm/j/Y',
-
-        renderDate : function(dateVal){
-        return dateVal.dateFormat(this.dateFormat);
-    },
-
-        renderBool : function(bVal){
-        return bVal ? 'true' : 'false';
-    },
-
-        isCellEditable : function(colIndex, rowIndex){
-        return colIndex == 1;
-    },
-
-        getRenderer : function(col){
-        return col == 1 ?
-            this.renderCellDelegate : this.renderPropDelegate;
-    },
-
-        renderProp : function(v){
-        return this.getPropertyName(v);
-    },
-
-        renderCell : function(val){
-        var rv = val;
-        if(Ext.isDate(val)){
-            rv = this.renderDate(val);
-        }else if(typeof val == 'boolean'){
-            rv = this.renderBool(val);
-        }
-        return Ext.util.Format.htmlEncode(rv);
-    },
-
-        getPropertyName : function(name){
-        var pn = this.grid.propertyNames;
-        return pn && pn[name] ? pn[name] : name;
-    },
-
-        getCellEditor : function(colIndex, rowIndex){
-        var p = this.store.getProperty(rowIndex);
-        var n = p.data['name'], val = p.data['value'];
-        if(this.grid.customEditors[n]){
-            return this.grid.customEditors[n];
-        }
-        if(Ext.isDate(val)){
-            return this.editors['date'];
-        }else if(typeof val == 'number'){
-            return this.editors['number'];
-        }else if(typeof val == 'boolean'){
-            return this.editors['boolean'];
-        }else{
-            return this.editors['string'];
-        }
-    }
-});
-
-
-Ext.grid.PropertyGrid = Ext.extend(Ext.grid.EditorGridPanel, {
-    
-    
-
-        enableColumnMove:false,
-    stripeRows:false,
-    trackMouseOver: false,
-    clicksToEdit:1,
-    enableHdMenu : false,
-    viewConfig : {
-        forceFit:true
-    },
-
-        initComponent : function(){
-        this.customEditors = this.customEditors || {};
-        this.lastEditRow = null;
-        var store = new Ext.grid.PropertyStore(this);
-        this.propStore = store;
-        var cm = new Ext.grid.PropertyColumnModel(this, store);
-        store.store.sort('name', 'ASC');
-        this.addEvents(
-            
-            'beforepropertychange',
-            
-            'propertychange'
-        );
-        this.cm = cm;
-        this.ds = store.store;
-        Ext.grid.PropertyGrid.superclass.initComponent.call(this);
-
-        this.selModel.on('beforecellselect', function(sm, rowIndex, colIndex){
-            if(colIndex === 0){
-                this.startEditing.defer(200, this, [rowIndex, 1]);
-                return false;
-            }
-        }, this);
-    },
-
-        onRender : function(){
-        Ext.grid.PropertyGrid.superclass.onRender.apply(this, arguments);
-
-        this.getGridEl().addClass('x-props-grid');
-    },
-
-        afterRender: function(){
-        Ext.grid.PropertyGrid.superclass.afterRender.apply(this, arguments);
-        if(this.source){
-            this.setSource(this.source);
-        }
-    },
-
-    
-    setSource : function(source){
-        this.propStore.setSource(source);
-    },
-
-    
-    getSource : function(){
-        return this.propStore.getSource();
-    }
-});
-\r
-Ext.grid.RowNumberer = function(config){\r
-    Ext.apply(this, config);\r
-    if(this.rowspan){\r
-        this.renderer = this.renderer.createDelegate(this);\r
-    }\r
-};\r
-\r
-Ext.grid.RowNumberer.prototype = {\r
-    \r
-    header: "",\r
-    \r
-    width: 23,\r
-    \r
-    sortable: false,\r
-\r
-    
-    fixed:true,\r
-    menuDisabled:true,\r
-    dataIndex: '',\r
-    id: 'numberer',\r
-    rowspan: undefined,\r
-\r
-    
-    renderer : function(v, p, record, rowIndex){\r
-        if(this.rowspan){\r
-            p.cellAttr = 'rowspan="'+this.rowspan+'"';\r
-        }\r
-        return rowIndex+1;\r
-    }\r
-};
-\r
-Ext.grid.CheckboxSelectionModel = Ext.extend(Ext.grid.RowSelectionModel, {\r
-    \r
-    header: '<div class="x-grid3-hd-checker">&#160;</div>',\r
-    \r
-    width: 20,\r
-    \r
-    sortable: false,\r
-\r
-    
-    menuDisabled:true,\r
-    fixed:true,\r
-    dataIndex: '',\r
-    id: 'checker',\r
-\r
-    
-    initEvents : function(){\r
-        Ext.grid.CheckboxSelectionModel.superclass.initEvents.call(this);\r
-        this.grid.on('render', function(){\r
-            var view = this.grid.getView();\r
-            view.mainBody.on('mousedown', this.onMouseDown, this);\r
-            Ext.fly(view.innerHd).on('mousedown', this.onHdMouseDown, this);\r
-\r
-        }, this);\r
-    },\r
-\r
-    
-    onMouseDown : function(e, t){\r
-        if(e.button === 0 && t.className == 'x-grid3-row-checker'){ 
-            e.stopEvent();\r
-            var row = e.getTarget('.x-grid3-row');\r
-            if(row){\r
-                var index = row.rowIndex;\r
-                if(this.isSelected(index)){\r
-                    this.deselectRow(index);\r
-                }else{\r
-                    this.selectRow(index, true);\r
-                }\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    onHdMouseDown : function(e, t){\r
-        if(t.className == 'x-grid3-hd-checker'){\r
-            e.stopEvent();\r
-            var hd = Ext.fly(t.parentNode);\r
-            var isChecked = hd.hasClass('x-grid3-hd-checker-on');\r
-            if(isChecked){\r
-                hd.removeClass('x-grid3-hd-checker-on');\r
-                this.clearSelections();\r
-            }else{\r
-                hd.addClass('x-grid3-hd-checker-on');\r
-                this.selectAll();\r
-            }\r
-        }\r
-    },\r
-\r
-    
-    renderer : function(v, p, record){\r
-        return '<div class="x-grid3-row-checker">&#160;</div>';\r
-    }\r
-});
-
-Ext.LoadMask = function(el, config){
-    this.el = Ext.get(el);
-    Ext.apply(this, config);
-    if(this.store){
-        this.store.on('beforeload', this.onBeforeLoad, this);
-        this.store.on('load', this.onLoad, this);
-        this.store.on('loadexception', this.onLoad, this);
-        this.removeMask = Ext.value(this.removeMask, false);
-    }else{
-        var um = this.el.getUpdater();
-        um.showLoadIndicator = false;         um.on('beforeupdate', this.onBeforeLoad, this);
-        um.on('update', this.onLoad, this);
-        um.on('failure', this.onLoad, this);
-        this.removeMask = Ext.value(this.removeMask, true);
-    }
-};
-
-Ext.LoadMask.prototype = {
-    
-    
-    
-    msg : 'Loading...',
-    
-    msgCls : 'x-mask-loading',
-
-    
-    disabled: false,
-
-    
-    disable : function(){
-       this.disabled = true;
-    },
-
-    
-    enable : function(){
-        this.disabled = false;
-    },
-
-        onLoad : function(){
-        this.el.unmask(this.removeMask);
-    },
-
-        onBeforeLoad : function(){
-        if(!this.disabled){
-            this.el.mask(this.msg, this.msgCls);
-        }
-    },
-
-    
-    show: function(){
-        this.onBeforeLoad();
-    },
-
-    
-    hide: function(){
-        this.onLoad();    
-    },
-
-        destroy : function(){
-        if(this.store){
-            this.store.un('beforeload', this.onBeforeLoad, this);
-            this.store.un('load', this.onLoad, this);
-            this.store.un('loadexception', this.onLoad, this);
-        }else{
-            var um = this.el.getUpdater();
-            um.un('beforeupdate', this.onBeforeLoad, this);
-            um.un('update', this.onLoad, this);
-            um.un('failure', this.onLoad, this);
-        }
-    }
-};
-\r
-Ext.ProgressBar = Ext.extend(Ext.BoxComponent, {\r
-   \r
-    baseCls : 'x-progress',\r
-\r
-    
-    waitTimer : null,\r
-\r
-    
-    initComponent : function(){\r
-        Ext.ProgressBar.superclass.initComponent.call(this);\r
-        this.addEvents(\r
-            \r
-            "update"\r
-        );\r
-    },\r
-\r
-    
-    onRender : function(ct, position){\r
-        Ext.ProgressBar.superclass.onRender.call(this, ct, position);\r
-\r
-        var tpl = new Ext.Template(\r
-            '<div class="{cls}-wrap">',\r
-                '<div class="{cls}-inner">',\r
-                    '<div class="{cls}-bar">',\r
-                        '<div class="{cls}-text">',\r
-                            '<div>&#160;</div>',\r
-                        '</div>',\r
-                    '</div>',\r
-                    '<div class="{cls}-text {cls}-text-back">',\r
-                        '<div>&#160;</div>',\r
-                    '</div>',\r
-                '</div>',\r
-            '</div>'\r
-        );\r
-\r
-        if(position){\r
-            this.el = tpl.insertBefore(position, {cls: this.baseCls}, true);\r
-        }else{\r
-            this.el = tpl.append(ct, {cls: this.baseCls}, true);\r
-        }\r
-        if(this.id){\r
-            this.el.dom.id = this.id;\r
-        }\r
-        var inner = this.el.dom.firstChild;\r
-        this.progressBar = Ext.get(inner.firstChild);\r
-\r
-        if(this.textEl){\r
-            
-            this.textEl = Ext.get(this.textEl);\r
-            delete this.textTopEl;\r
-        }else{\r
-            
-            this.textTopEl = Ext.get(this.progressBar.dom.firstChild);\r
-            var textBackEl = Ext.get(inner.childNodes[1]);\r
-            this.textTopEl.setStyle("z-index", 99).addClass('x-hidden');\r
-            this.textEl = new Ext.CompositeElement([this.textTopEl.dom.firstChild, textBackEl.dom.firstChild]);\r
-            this.textEl.setWidth(inner.offsetWidth);\r
-        }\r
-        if(this.value){\r
-            this.updateProgress(this.value, this.text);\r
-        }else{\r
-            this.updateText(this.text);\r
-        }\r
-        this.setSize(this.width || 'auto', 'auto');\r
-        this.progressBar.setHeight(inner.offsetHeight);\r
-    },\r
-\r
-    \r
-    updateProgress : function(value, text){\r
-        this.value = value || 0;\r
-        if(text){\r
-            this.updateText(text);\r
-        }\r
-        var w = Math.floor(value*this.el.dom.firstChild.offsetWidth);\r
-        this.progressBar.setWidth(w);\r
-        if(this.textTopEl){\r
-            
-            this.textTopEl.removeClass('x-hidden').setWidth(w);\r
-        }\r
-        this.fireEvent('update', this, value, text);\r
-        return this;\r
-    },\r
-\r
-    \r
-    wait : function(o){\r
-        if(!this.waitTimer){\r
-            var scope = this;\r
-            o = o || {};\r
-            this.waitTimer = Ext.TaskMgr.start({\r
-                run: function(i){\r
-                    var inc = o.increment || 10;\r
-                    this.updateProgress(((((i+inc)%inc)+1)*(100/inc))*.01);\r
-                },\r
-                interval: o.interval || 1000,\r
-                duration: o.duration,\r
-                onStop: function(){\r
-                    if(o.fn){\r
-                        o.fn.apply(o.scope || this);\r
-                    }\r
-                    this.reset();\r
-                },\r
-                scope: scope\r
-            });\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    isWaiting : function(){\r
-        return this.waitTimer != null;\r
-    },\r
-\r
-    \r
-    updateText : function(text){\r
-        this.text = text || '&#160;';\r
-        this.textEl.update(this.text);\r
-        return this;\r
-    },\r
-\r
-    \r
-    setSize : function(w, h){\r
-        Ext.ProgressBar.superclass.setSize.call(this, w, h);\r
-        if(this.textTopEl){\r
-            var inner = this.el.dom.firstChild;\r
-            this.textEl.setSize(inner.offsetWidth, inner.offsetHeight);\r
-        }\r
-        return this;\r
-    },\r
-\r
-    \r
-    reset : function(hide){\r
-        this.updateProgress(0);\r
-        if(this.textTopEl){\r
-            this.textTopEl.addClass('x-hidden');\r
-        }\r
-        if(this.waitTimer){\r
-            this.waitTimer.onStop = null; 
-            Ext.TaskMgr.stop(this.waitTimer);\r
-            this.waitTimer = null;\r
-        }\r
-        if(hide === true){\r
-            this.hide();\r
-        }\r
-        return this;\r
-    }\r
-});\r
-Ext.reg('progress', Ext.ProgressBar);
-Ext.debug = {};
-
-(function(){
-
-var cp;
-
-function createConsole(){
-
-    var scriptPanel = new Ext.debug.ScriptsPanel();
-    var logView = new Ext.debug.LogPanel();
-    var tree = new Ext.debug.DomTree();
-
-    var tabs = new Ext.TabPanel({
-        activeTab: 0,
-        border: false,
-        tabPosition: 'bottom',
-        items: [{
-            title: 'Debug Console',
-            layout:'border',
-            items: [logView, scriptPanel]
-        },{
-            title: 'DOM Inspector',
-            layout:'border',
-            items: [tree]
-        }]
-    });
-
-    cp = new Ext.Panel({
-        id: 'x-debug-browser',
-        title: 'Console',
-        collapsible: true,
-        animCollapse: false,
-        style: 'position:absolute;left:0;bottom:0;',
-        height:200,
-        logView: logView,
-        layout: 'fit',
-        
-        tools:[{
-            id: 'close',
-            handler: function(){
-                cp.destroy();
-                cp = null;
-                Ext.EventManager.removeResizeListener(handleResize);
-            }
-        }],
-
-        items: tabs
-    });
-
-    cp.render(document.body);
-
-    cp.resizer = new Ext.Resizable(cp.el, {
-        minHeight:50,
-        handles: "n",
-        pinned: true,
-        transparent:true,
-        resizeElement : function(){
-            var box = this.proxy.getBox();
-            this.proxy.hide();
-            cp.setHeight(box.height);
-            return box;
-        }
-    });
-
-    function handleResize(){
-        cp.setWidth(Ext.getBody().getViewSize().width);
-    }
-    Ext.EventManager.onWindowResize(handleResize);
-
-    handleResize();
-}
-
-
-Ext.apply(Ext, {
-    log : function(){
-        if(!cp){
-            createConsole();
-        }
-        cp.logView.log.apply(cp.logView, arguments);
-    },
-
-    logf : function(format, arg1, arg2, etc){
-        Ext.log(String.format.apply(String, arguments));
-    },
-
-    dump : function(o){
-        if(typeof o == 'string' || typeof o == 'number' || typeof o == 'undefined' || Ext.isDate(o)){
-            Ext.log(o);
-        }else if(!o){
-            Ext.log("null");
-        }else if(typeof o != "object"){
-            Ext.log('Unknown return type');
-        }else if(Ext.isArray(o)){
-            Ext.log('['+o.join(',')+']');
-        }else{
-            var b = ["{\n"];
-            for(var key in o){
-                var to = typeof o[key];
-                if(to != "function" && to != "object"){
-                    b.push(String.format("  {0}: {1},\n", key, o[key]));
-                }
-            }
-            var s = b.join("");
-            if(s.length > 3){
-                s = s.substr(0, s.length-2);
-            }
-            Ext.log(s + "\n}");
-        }
-    },
-
-    _timers : {},
-
-    time : function(name){
-        name = name || "def";
-        Ext._timers[name] = new Date().getTime();
-    },
-
-    timeEnd : function(name, printResults){
-        var t = new Date().getTime();
-        name = name || "def";
-        var v = String.format("{0} ms", t-Ext._timers[name]);
-        Ext._timers[name] = new Date().getTime();
-        if(printResults !== false){
-            Ext.log('Timer ' + (name == "def" ? v : name + ": " + v));
-        }
-        return v;
-    }
-});
-
-})();
-
-
-Ext.debug.ScriptsPanel = Ext.extend(Ext.Panel, {
-    id:'x-debug-scripts',
-    region: 'east',
-    minWidth: 200,
-    split: true,
-    width: 350,
-    border: false,
-    layout:'anchor',
-    style:'border-width:0 0 0 1px;',
-
-    initComponent : function(){
-
-        this.scriptField = new Ext.form.TextArea({
-            anchor: '100% -26',
-            style:'border-width:0;'
-        });
-
-        this.trapBox = new Ext.form.Checkbox({
-            id: 'console-trap',
-            boxLabel: 'Trap Errors',
-            checked: true
-        });
-
-        this.toolbar = new Ext.Toolbar([{
-                text: 'Run',
-                scope: this,
-                handler: this.evalScript
-            },{
-                text: 'Clear',
-                scope: this,
-                handler: this.clear
-            },
-            '->',
-            this.trapBox,
-            ' ', ' '
-        ]);
-
-        this.items = [this.toolbar, this.scriptField];
-
-        Ext.debug.ScriptsPanel.superclass.initComponent.call(this);
-    },
-
-    evalScript : function(){
-        var s = this.scriptField.getValue();
-        if(this.trapBox.getValue()){
-            try{
-                var rt = eval(s);
-                Ext.dump(rt === undefined? '(no return)' : rt);
-            }catch(e){
-                Ext.log(e.message || e.descript);
-            }
-        }else{
-            var rt = eval(s);
-            Ext.dump(rt === undefined? '(no return)' : rt);
-        }
-    },
-
-    clear : function(){
-        this.scriptField.setValue('');
-        this.scriptField.focus();
-    }
-
-});
-
-Ext.debug.LogPanel = Ext.extend(Ext.Panel, {
-    autoScroll: true,
-    region: 'center',
-    border: false,
-    style:'border-width:0 1px 0 0',
-
-    log : function(){
-        var markup = [  '<div style="padding:5px !important;border-bottom:1px solid #ccc;">',
-                    Ext.util.Format.htmlEncode(Array.prototype.join.call(arguments, ', ')).replace(/\n/g, '<br />').replace(/\s/g, '&#160;'),
-                    '</div>'].join('');
-
-        this.body.insertHtml('beforeend', markup);
-        this.body.scrollTo('top', 100000);
-    },
-
-    clear : function(){
-        this.body.update('');
-        this.body.dom.scrollTop = 0;
-    }
-});
-
-Ext.debug.DomTree = Ext.extend(Ext.tree.TreePanel, {
-    enableDD:false ,
-    lines:false,
-    rootVisible:false,
-    animate:false,
-    hlColor:'ffff9c',
-    autoScroll: true,
-    region:'center',
-    border:false,
-
-    initComponent : function(){
-
-
-        Ext.debug.DomTree.superclass.initComponent.call(this);
-        
-                var styles = false, hnode;
-        var nonSpace = /^\s*$/;
-        var html = Ext.util.Format.htmlEncode;
-        var ellipsis = Ext.util.Format.ellipsis;
-        var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;
-
-        function findNode(n){
-            if(!n || n.nodeType != 1 || n == document.body || n == document){
-                return false;
-            }
-            var pn = [n], p = n;
-            while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){
-                pn.unshift(p);
-            }
-            var cn = hnode;
-            for(var i = 0, len = pn.length; i < len; i++){
-                cn.expand();
-                cn = cn.findChild('htmlNode', pn[i]);
-                if(!cn){                     return false;
-                }
-            }
-            cn.select();
-            var a = cn.ui.anchor;
-            treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10);
-                        cn.highlight();
-            return true;
-        }
-
-        function nodeTitle(n){
-            var s = n.tagName;
-            if(n.id){
-                s += '#'+n.id;
-            }else if(n.className){
-                s += '.'+n.className;
-            }
-            return s;
-        }
-
-        function onNodeSelect(t, n, last){
-            return;
-            if(last && last.unframe){
-                last.unframe();
-            }
-            var props = {};
-            if(n && n.htmlNode){
-                if(frameEl.pressed){
-                    n.frame();
-                }
-                if(inspecting){
-                    return;
-                }
-                addStyle.enable();
-                reload.setDisabled(n.leaf);
-                var dom = n.htmlNode;
-                stylePanel.setTitle(nodeTitle(dom));
-                if(styles && !showAll.pressed){
-                    var s = dom.style ? dom.style.cssText : '';
-                    if(s){
-                        var m;
-                        while ((m = styleRe.exec(s)) != null){
-                            props[m[1].toLowerCase()] = m[2];
-                        }
-                    }
-                }else if(styles){
-                    var cl = Ext.debug.cssList;
-                    var s = dom.style, fly = Ext.fly(dom);
-                    if(s){
-                        for(var i = 0, len = cl.length; i<len; i++){
-                            var st = cl[i];
-                            var v = s[st] || fly.getStyle(st);
-                            if(v != undefined && v !== null && v !== ''){
-                                props[st] = v;
-                            }
-                        }
-                    }
-                }else{
-                    for(var a in dom){
-                        var v = dom[a];
-                        if((isNaN(a+10)) && v != undefined && v !== null && v !== '' && !(Ext.isGecko && a[0] == a[0].toUpperCase())){
-                            props[a] = v;
-                        }
-                    }
-                }
-            }else{
-                if(inspecting){
-                    return;
-                }
-                addStyle.disable();
-                reload.disabled();
-            }
-            stylesGrid.setSource(props);
-            stylesGrid.treeNode = n;
-            stylesGrid.view.fitColumns();
-        }
-
-        this.loader = new Ext.tree.TreeLoader();
-        this.loader.load = function(n, cb){
-            var isBody = n.htmlNode == document.body;
-            var cn = n.htmlNode.childNodes;
-            for(var i = 0, c; c = cn[i]; i++){
-                if(isBody && c.id == 'x-debug-browser'){
-                    continue;
-                }
-                if(c.nodeType == 1){
-                    n.appendChild(new Ext.debug.HtmlNode(c));
-                }else if(c.nodeType == 3 && !nonSpace.test(c.nodeValue)){
-                    n.appendChild(new Ext.tree.TreeNode({
-                        text:'<em>' + ellipsis(html(String(c.nodeValue)), 35) + '</em>',
-                        cls: 'x-tree-noicon'
-                    }));
-                }
-            }
-            cb();
-        };
-
-        
-        this.root = this.setRootNode(new Ext.tree.TreeNode('Ext'));
-
-        hnode = this.root.appendChild(new Ext.debug.HtmlNode(
-                document.getElementsByTagName('html')[0]
-        ));
-
-    }
-});
-
-
-Ext.debug.HtmlNode = function(){
-    var html = Ext.util.Format.htmlEncode;
-    var ellipsis = Ext.util.Format.ellipsis;
-    var nonSpace = /^\s*$/;
-
-    var attrs = [
-        {n: 'id', v: 'id'},
-        {n: 'className', v: 'class'},
-        {n: 'name', v: 'name'},
-        {n: 'type', v: 'type'},
-        {n: 'src', v: 'src'},
-        {n: 'href', v: 'href'}
-    ];
-
-    function hasChild(n){
-        for(var i = 0, c; c = n.childNodes[i]; i++){
-            if(c.nodeType == 1){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    function renderNode(n, leaf){
-        var tag = n.tagName.toLowerCase();
-        var s = '&lt;' + tag;
-        for(var i = 0, len = attrs.length; i < len; i++){
-            var a = attrs[i];
-            var v = n[a.n];
-            if(v && !nonSpace.test(v)){
-                s += ' ' + a.v + '=&quot;<i>' + html(v) +'</i>&quot;';
-            }
-        }
-        var style = n.style ? n.style.cssText : '';
-        if(style){
-            s += ' style=&quot;<i>' + html(style.toLowerCase()) +'</i>&quot;';
-        }
-        if(leaf && n.childNodes.length > 0){
-            s+='&gt;<em>' + ellipsis(html(String(n.innerHTML)), 35) + '</em>&lt;/'+tag+'&gt;';
-        }else if(leaf){
-            s += ' /&gt;';
-        }else{
-            s += '&gt;';
-        }
-        return s;
-    }
-
-    var HtmlNode = function(n){
-        var leaf = !hasChild(n);
-        this.htmlNode = n;
-        this.tagName = n.tagName.toLowerCase();
-        var attr = {
-            text : renderNode(n, leaf),
-            leaf : leaf,
-            cls: 'x-tree-noicon'
-        };
-        HtmlNode.superclass.constructor.call(this, attr);
-        this.attributes.htmlNode = n;         if(!leaf){
-            this.on('expand', this.onExpand,  this);
-            this.on('collapse', this.onCollapse,  this);
-        }
-    };
-
-
-    Ext.extend(HtmlNode, Ext.tree.AsyncTreeNode, {
-        cls: 'x-tree-noicon',
-        preventHScroll: true,
-        refresh : function(highlight){
-            var leaf = !hasChild(this.htmlNode);
-            this.setText(renderNode(this.htmlNode, leaf));
-            if(highlight){
-                Ext.fly(this.ui.textNode).highlight();
-            }
-        },
-
-        onExpand : function(){
-            if(!this.closeNode && this.parentNode){
-                this.closeNode = this.parentNode.insertBefore(new Ext.tree.TreeNode({
-                    text:'&lt;/' + this.tagName + '&gt;',
-                    cls: 'x-tree-noicon'
-                }), this.nextSibling);
-            }else if(this.closeNode){
-                this.closeNode.ui.show();
-            }
-        },
-
-        onCollapse : function(){
-            if(this.closeNode){
-                this.closeNode.ui.hide();
-            }
-        },
-
-        render : function(bulkRender){
-            HtmlNode.superclass.render.call(this, bulkRender);
-        },
-
-        highlightNode : function(){
-                    },
-
-        highlight : function(){
-                    },
-
-        frame : function(){
-            this.htmlNode.style.border = '1px solid #0000ff';
-                    },
-
-        unframe : function(){
-                        this.htmlNode.style.border = '';
-        }
-    });
-
-    return HtmlNode;
-}();
-
-
-