/*
 * Ext JS Library 3.2.0
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.DomHelper=function(){
    var s=null,j=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i,l=/^table|tbody|tr|td$/i,p,m="afterbegin",n="afterend",c="beforebegin",o="beforeend",a="<table>",h="</table>",b=a+"<tbody>",i="</tbody>"+h,k=b+"<tr>",r="</tr>"+i;
    function g(x,z,y,A,v,t){
        var u=p.insertHtml(A,Ext.getDom(x),q(z));
        return y?Ext.get(u,true):u
        }
        function q(A){
        var v="",u,z,y,t,B;
        if(Ext.isString(A)){
            v=A
            }else{
            if(Ext.isArray(A)){
                for(var x=0;x<A.length;x++){
                    if(A[x]){
                        v+=q(A[x])
                        }
                    }
                }else{
        v+="<"+(A.tag=A.tag||"div");
        Ext.iterate(A,function(C,D){
            if(!/tag|children|cn|html$/i.test(C)){
                if(Ext.isObject(D)){
                    v+=" "+C+'="';
                    Ext.iterate(D,function(F,E){
                        v+=F+":"+E+";"
                        });
                    v+='"'
                    }else{
                    v+=" "+({
                        cls:"class",
                        htmlFor:"for"
                    }
                    [C]||C)+'="'+D+'"'
                    }
                }
        });
if(j.test(A.tag)){
    v+="/>"
    }else{
    v+=">";
    if((B=A.children||A.cn)){
        v+=q(B)
        }else{
        if(A.html){
            v+=A.html
            }
        }
    v+="</"+A.tag+">"
}
}
}
return v
}
function e(B,y,x,z){
    s.innerHTML=[y,x,z].join("");
    var t=-1,v=s,u;
    while(++t<B){
        v=v.firstChild
        }
        if(u=v.nextSibling){
        var A=document.createDocumentFragment();
        while(v){
            u=v.nextSibling;
            A.appendChild(v);
            v=u
            }
            v=A
        }
        return v
    }
    function d(t,u,x,v){
    var y,z;
    s=s||document.createElement("div");
    if(t=="td"&&(u==m||u==o)||!/td|tr|tbody/i.test(t)&&(u==c||u==n)){
        return
    }
    z=u==c?x:u==n?x.nextSibling:u==m?x.firstChild:null;
    if(u==c||u==n){
        x=x.parentNode
        }
        if(t=="td"||(t=="tr"&&(u==o||u==m))){
        y=e(4,k,v,r)
        }else{
        if((t=="tbody"&&(u==o||u==m))||(t=="tr"&&(u==c||u==n))){
            y=e(3,b,v,i)
            }else{
            y=e(2,a,v,h)
            }
        }
    x.insertBefore(y,z);
return y
}
p={
    markup:function(t){
        return q(t)
        },
    applyStyles:function(x,y){
        if(y){
            var u=0,t,v;
            x=Ext.fly(x);
            if(Ext.isFunction(y)){
                y=y.call()
                }
                if(Ext.isString(y)){
                y=y.trim().split(/\s*(?::|;)\s*/);
                for(t=y.length;u<t;){
                    x.setStyle(y[u++],y[u++])
                    }
                }else{
            if(Ext.isObject(y)){
                x.setStyle(y)
                }
            }
    }
},
insertHtml:function(z,t,A){
    var y={},v,C,B,D,x,u;
    z=z.toLowerCase();
    y[c]=["BeforeBegin","previousSibling"];
    y[n]=["AfterEnd","nextSibling"];
    if(t.insertAdjacentHTML){
        if(l.test(t.tagName)&&(u=d(t.tagName.toLowerCase(),z,t,A))){
            return u
            }
            y[m]=["AfterBegin","firstChild"];
        y[o]=["BeforeEnd","lastChild"];
        if((v=y[z])){
            t.insertAdjacentHTML(v[0],A);
            return t[v[1]]
            }
        }else{
    B=t.ownerDocument.createRange();
    C="setStart"+(/end/i.test(z)?"After":"Before");
    if(y[z]){
        B[C](t);
        D=B.createContextualFragment(A);
        t.parentNode.insertBefore(D,z==c?t:t.nextSibling);
        return t[(z==c?"previous":"next")+"Sibling"]
        }else{
        x=(z==m?"first":"last")+"Child";
        if(t.firstChild){
            B[C](t[x]);
            D=B.createContextualFragment(A);
            if(z==m){
                t.insertBefore(D,t.firstChild)
                }else{
                t.appendChild(D)
                }
            }else{
        t.innerHTML=A
        }
        return t[x]
    }
}
throw'Illegal insertion point -> "'+z+'"'
},
insertBefore:function(t,v,u){
    return g(t,v,u,c)
    },
insertAfter:function(t,v,u){
    return g(t,v,u,n,"nextSibling")
    },
insertFirst:function(t,v,u){
    return g(t,v,u,m,"firstChild")
    },
append:function(t,v,u){
    return g(t,v,u,o,"",true)
    },
overwrite:function(t,v,u){
    t=Ext.getDom(t);
    t.innerHTML=q(v);
    return u?Ext.get(t.firstChild):t.firstChild
    },
createHtml:q
};

return p
}();
Ext.apply(Ext.DomHelper,function(){
    var d,a="afterbegin",g="afterend",h="beforebegin",c="beforeend";
    function e(l,n,m,p,k,i){
        l=Ext.getDom(l);
        var j;
        if(d.useDom){
            j=b(n,null);
            if(i){
                l.appendChild(j)
                }else{
                (k=="firstChild"?l:l.parentNode).insertBefore(j,l[k]||l)
                }
            }else{
        j=Ext.DomHelper.insertHtml(p,l,Ext.DomHelper.createHtml(n))
        }
        return m?Ext.get(j,true):j
    }
    function b(p,j){
    var l,m=document,k,i,n,q;
    if(Ext.isArray(p)){
        l=m.createDocumentFragment();
        Ext.each(p,function(o){
            b(o,l)
            })
        }else{
        if(Ext.isString(p)){
            l=m.createTextNode(p)
            }else{
            l=m.createElement(p.tag||"div");
            k=!!l.setAttribute;
            Ext.iterate(p,function(o,r){
                if(!/tag|children|cn|html|style/.test(o)){
                    if(o=="cls"){
                        l.className=r
                        }else{
                        if(k){
                            l.setAttribute(o,r)
                            }else{
                            l[o]=r
                            }
                        }
                }
            });
Ext.DomHelper.applyStyles(l,p.style);
    if((q=p.children||p.cn)){
    b(q,l)
    }else{
    if(p.html){
        l.innerHTML=p.html
        }
    }
}
}
if(j){
    j.appendChild(l)
    }
    return l
}
d={
    createTemplate:function(j){
        var i=Ext.DomHelper.createHtml(j);
        return new Ext.Template(i)
        },
    useDom:false,
    insertBefore:function(i,k,j){
        return e(i,k,j,h)
        },
    insertAfter:function(i,k,j){
        return e(i,k,j,g,"nextSibling")
        },
    insertFirst:function(i,k,j){
        return e(i,k,j,a,"firstChild")
        },
    append:function(i,k,j){
        return e(i,k,j,c,"",true)
        },
    createDom:b
};

return d
}());
Ext.Template=function(d){
    var e=this,b=arguments,c=[];
    if(Ext.isArray(d)){
        d=d.join("")
        }else{
        if(b.length>1){
            Ext.each(b,function(a){
                if(Ext.isObject(a)){
                    Ext.apply(e,a)
                    }else{
                    c.push(a)
                    }
                });
        d=c.join("")
        }
    }
e.html=d;
if(e.compiled){
    e.compile()
    }
};

Ext.Template.prototype={
    re:/\{([\w-]+)\}/g,
    applyTemplate:function(a){
        var b=this;
        return b.compiled?b.compiled(a):b.html.replace(b.re,function(c,d){
            return a[d]!==undefined?a[d]:""
            })
        },
    set:function(a,c){
        var b=this;
        b.html=a;
        b.compiled=null;
        return c?b.compile():b
        },
    compile:function(){
        var me=this,sep=Ext.isGecko?"+":",";
        function fn(m,name){
            name="values['"+name+"']";
            return"'"+sep+"("+name+" == undefined ? '' : "+name+")"+sep+"'"
            }
            eval("this.compiled = function(values){ return "+(Ext.isGecko?"'":"['")+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+(Ext.isGecko?"';};":"'].join('');};"));
        return me
        },
    insertFirst:function(b,a,c){
        return this.doInsert("afterBegin",b,a,c)
        },
    insertBefore:function(b,a,c){
        return this.doInsert("beforeBegin",b,a,c)
        },
    insertAfter:function(b,a,c){
        return this.doInsert("afterEnd",b,a,c)
        },
    append:function(b,a,c){
        return this.doInsert("beforeEnd",b,a,c)
        },
    doInsert:function(c,e,b,a){
        e=Ext.getDom(e);
        var d=Ext.DomHelper.insertHtml(c,e,this.applyTemplate(b));
        return a?Ext.get(d,true):d
        },
    overwrite:function(b,a,c){
        b=Ext.getDom(b);
        b.innerHTML=this.applyTemplate(a);
        return c?Ext.get(b.firstChild,true):b.firstChild
        }
    };

Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;
Ext.Template.from=function(b,a){
    b=Ext.getDom(b);
    return new Ext.Template(b.value||b.innerHTML,a||"")
    };

Ext.apply(Ext.Template.prototype,{
    disableFormats:false,
    re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
    applyTemplate:function(b){
        var g=this,a=g.disableFormats!==true,e=Ext.util.Format,c=g;
        if(g.compiled){
            return g.compiled(b)
            }
            function d(j,l,p,k){
            if(p&&a){
                if(p.substr(0,5)=="this."){
                    return c.call(p.substr(5),b[l],b)
                    }else{
                    if(k){
                        var o=/^\s*['"](.*)["']\s*$/;
                        k=k.split(",");
                        for(var n=0,h=k.length;n<h;n++){
                            k[n]=k[n].replace(o,"$1")
                            }
                            k=[b[l]].concat(k)
                        }else{
                        k=[b[l]]
                        }
                        return e[p].apply(e,k)
                    }
                }else{
            return b[l]!==undefined?b[l]:""
            }
        }
    return g.html.replace(g.re,d)
    },
compile:function(){
    var me=this,fm=Ext.util.Format,useF=me.disableFormats!==true,sep=Ext.isGecko?"+":",",body;
    function fn(m,name,format,args){
        if(format&&useF){
            args=args?","+args:"";
            if(format.substr(0,5)!="this."){
                format="fm."+format+"("
                }else{
                format='this.call("'+format.substr(5)+'", ';
                args=", values"
                }
            }else{
        args="";
        format="(values['"+name+"'] == undefined ? '' : "
        }
        return"'"+sep+format+"values['"+name+"']"+args+")"+sep+"'"
    }
    if(Ext.isGecko){
    body="this.compiled = function(values){ return '"+me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn)+"';};"
    }else{
    body=["this.compiled = function(values){ return ['"];
    body.push(me.html.replace(/\\/g,"\\\\").replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn));
    body.push("'].join('');};");
    body=body.join("")
    }
    eval(body);
    return me
    },
call:function(c,b,a){
    return this[c](b,a)
    }
});
Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;
Ext.DomQuery=function(){
    var cache={},simpleCache={},valueCache={},nonSpace=/\S/,trimRe=/^\s+|\s+$/g,tplRe=/\{(\d+)\}/g,modeRe=/^(\s?[\/>+~]\s?|\s|$)/,tagTokenRe=/^(#)?([\w-\*]+)/,nthRe=/(\d*)n\+?(\d*)/,nthRe2=/\D/,isIE=window.ActiveXObject?true:false,key=30803;
    eval("var batch = 30803;");
    function child(parent,index){
        var i=0,n=parent.firstChild;
        while(n){
            if(n.nodeType==1){
                if(++i==index){
                    return n
                    }
                }
            n=n.nextSibling
        }
        return null
    }
    function next(n){
    while((n=n.nextSibling)&&n.nodeType!=1){}
    return n
    }
    function prev(n){
    while((n=n.previousSibling)&&n.nodeType!=1){}
    return n
    }
    function children(parent){
    var n=parent.firstChild,nodeIndex=-1,nextNode;
    while(n){
        nextNode=n.nextSibling;
        if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){
            parent.removeChild(n)
            }else{
            n.nodeIndex=++nodeIndex
            }
            n=nextNode
        }
        return this
    }
    function byClassName(nodeSet,cls){
    if(!cls){
        return nodeSet
        }
        var result=[],ri=-1;
    for(var i=0,ci;ci=nodeSet[i];i++){
        if((" "+ci.className+" ").indexOf(cls)!=-1){
            result[++ri]=ci
            }
        }
    return result
}
function attrValue(n,attr){
    if(!n.tagName&&typeof n.length!="undefined"){
        n=n[0]
        }
        if(!n){
        return null
        }
        if(attr=="for"){
        return n.htmlFor
        }
        if(attr=="class"||attr=="className"){
        return n.className
        }
        return n.getAttribute(attr)||n[attr]
    }
    function getNodes(ns,mode,tagName){
    var result=[],ri=-1,cs;
    if(!ns){
        return result
        }
        tagName=tagName||"*";
    if(typeof ns.getElementsByTagName!="undefined"){
        ns=[ns]
        }
        if(!mode){
        for(var i=0,ni;ni=ns[i];i++){
            cs=ni.getElementsByTagName(tagName);
            for(var j=0,ci;ci=cs[j];j++){
                result[++ri]=ci
                }
            }
        }else{
    if(mode=="/"||mode==">"){
        var utag=tagName.toUpperCase();
        for(var i=0,ni,cn;ni=ns[i];i++){
            cn=ni.childNodes;
            for(var j=0,cj;cj=cn[j];j++){
                if(cj.nodeName==utag||cj.nodeName==tagName||tagName=="*"){
                    result[++ri]=cj
                    }
                }
            }
        }else{
    if(mode=="+"){
        var utag=tagName.toUpperCase();
        for(var i=0,n;n=ns[i];i++){
            while((n=n.nextSibling)&&n.nodeType!=1){}
            if(n&&(n.nodeName==utag||n.nodeName==tagName||tagName=="*")){
                result[++ri]=n
                }
            }
        }else{
    if(mode=="~"){
        var utag=tagName.toUpperCase();
        for(var i=0,n;n=ns[i];i++){
            while((n=n.nextSibling)){
                if(n.nodeName==utag||n.nodeName==tagName||tagName=="*"){
                    result[++ri]=n
                    }
                }
        }
    }
}
}
}
return result
}
function concat(a,b){
    if(b.slice){
        return a.concat(b)
        }
        for(var i=0,l=b.length;i<l;i++){
        a[a.length]=b[i]
        }
        return a
    }
    function byTag(cs,tagName){
    if(cs.tagName||cs==document){
        cs=[cs]
        }
        if(!tagName){
        return cs
        }
        var result=[],ri=-1;
    tagName=tagName.toLowerCase();
    for(var i=0,ci;ci=cs[i];i++){
        if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){
            result[++ri]=ci
            }
        }
    return result
}
function byId(cs,id){
    if(cs.tagName||cs==document){
        cs=[cs]
        }
        if(!id){
        return cs
        }
        var result=[],ri=-1;
    for(var i=0,ci;ci=cs[i];i++){
        if(ci&&ci.id==id){
            result[++ri]=ci;
            return result
            }
        }
    return result
}
function byAttribute(cs,attr,value,op,custom){
    var result=[],ri=-1,useGetStyle=custom=="{",fn=Ext.DomQuery.operators[op],a,innerHTML;
    for(var i=0,ci;ci=cs[i];i++){
        if(ci.nodeType!=1){
            continue
        }
        innerHTML=ci.innerHTML;
        if(innerHTML!==null&&innerHTML!==undefined){
            if(useGetStyle){
                a=Ext.DomQuery.getStyle(ci,attr)
                }else{
                if(attr=="class"||attr=="className"){
                    a=ci.className
                    }else{
                    if(attr=="for"){
                        a=ci.htmlFor
                        }else{
                        if(attr=="href"){
                            a=ci.getAttribute("href",2)
                            }else{
                            a=ci.getAttribute(attr)
                            }
                        }
                }
        }
    }else{
    a=ci.getAttribute(attr)
    }
    if((fn&&fn(a,value))||(!fn&&a)){
    result[++ri]=ci
    }
}
return result
}
function byPseudo(cs,name,value){
    return Ext.DomQuery.pseudos[name](cs,value)
    }
    function nodupIEXml(cs){
    var d=++key,r;
    cs[0].setAttribute("_nodup",d);
    r=[cs[0]];
    for(var i=1,len=cs.length;i<len;i++){
        var c=cs[i];
        if(!c.getAttribute("_nodup")!=d){
            c.setAttribute("_nodup",d);
            r[r.length]=c
            }
        }
    for(var i=0,len=cs.length;i<len;i++){
    cs[i].removeAttribute("_nodup")
    }
    return r
}
function nodup(cs){
    if(!cs){
        return[]
        }
        var len=cs.length,c,i,r=cs,cj,ri=-1;
    if(!len||typeof cs.nodeType!="undefined"||len==1){
        return cs
        }
        if(isIE&&typeof cs[0].selectSingleNode!="undefined"){
        return nodupIEXml(cs)
        }
        var d=++key;
    cs[0]._nodup=d;
    for(i=1;c=cs[i];i++){
        if(c._nodup!=d){
            c._nodup=d
            }else{
            r=[];
            for(var j=0;j<i;j++){
                r[++ri]=cs[j]
                }
                for(j=i+1;cj=cs[j];j++){
                if(cj._nodup!=d){
                    cj._nodup=d;
                    r[++ri]=cj
                    }
                }
            return r
        }
    }
    return r
}
function quickDiffIEXml(c1,c2){
    var d=++key,r=[];
    for(var i=0,len=c1.length;i<len;i++){
        c1[i].setAttribute("_qdiff",d)
        }
        for(var i=0,len=c2.length;i<len;i++){
        if(c2[i].getAttribute("_qdiff")!=d){
            r[r.length]=c2[i]
            }
        }
    for(var i=0,len=c1.length;i<len;i++){
    c1[i].removeAttribute("_qdiff")
    }
    return r
}
function quickDiff(c1,c2){
    var len1=c1.length,d=++key,r=[];
    if(!len1){
        return c2
        }
        if(isIE&&typeof c1[0].selectSingleNode!="undefined"){
        return quickDiffIEXml(c1,c2)
        }
        for(var i=0;i<len1;i++){
        c1[i]._qdiff=d
        }
        for(var i=0,len=c2.length;i<len;i++){
        if(c2[i]._qdiff!=d){
            r[r.length]=c2[i]
            }
        }
    return r
}
function quickId(ns,mode,root,id){
    if(ns==root){
        var d=root.ownerDocument||root;
        return d.getElementById(id)
        }
        ns=getNodes(ns,mode,"*");
    return byId(ns,id)
    }
    return{
    getStyle:function(el,name){
        return Ext.fly(el).getStyle(name)
        },
    compile:function(path,type){
        type=type||"select";
        var fn=["var f = function(root){\n var mode; ++batch; var n = root || document;\n"],mode,lastPath,matchers=Ext.DomQuery.matchers,matchersLn=matchers.length,modeMatch,lmode=path.match(modeRe);
        if(lmode&&lmode[1]){
            fn[fn.length]='mode="'+lmode[1].replace(trimRe,"")+'";';
            path=path.replace(lmode[1],"")
            }while(path.substr(0,1)=="/"){
            path=path.substr(1)
            }while(path&&lastPath!=path){
            lastPath=path;
            var tokenMatch=path.match(tagTokenRe);
            if(type=="select"){
                if(tokenMatch){
                    if(tokenMatch[1]=="#"){
                        fn[fn.length]='n = quickId(n, mode, root, "'+tokenMatch[2]+'");'
                        }else{
                        fn[fn.length]='n = getNodes(n, mode, "'+tokenMatch[2]+'");'
                        }
                        path=path.replace(tokenMatch[0],"")
                    }else{
                    if(path.substr(0,1)!="@"){
                        fn[fn.length]='n = getNodes(n, mode, "*");'
                        }
                    }
            }else{
        if(tokenMatch){
            if(tokenMatch[1]=="#"){
                fn[fn.length]='n = byId(n, "'+tokenMatch[2]+'");'
                }else{
                fn[fn.length]='n = byTag(n, "'+tokenMatch[2]+'");'
                }
                path=path.replace(tokenMatch[0],"")
            }
        }while(!(modeMatch=path.match(modeRe))){
    var matched=false;
    for(var j=0;j<matchersLn;j++){
        var t=matchers[j];
        var m=path.match(t.re);
        if(m){
            fn[fn.length]=t.select.replace(tplRe,function(x,i){
                return m[i]
                });
            path=path.replace(m[0],"");
            matched=true;
            break
        }
    }
    if(!matched){
    throw'Error parsing selector, parsing failed at "'+path+'"'
    }
}
if(modeMatch[1]){
    fn[fn.length]='mode="'+modeMatch[1].replace(trimRe,"")+'";';
    path=path.replace(modeMatch[1],"")
    }
}
fn[fn.length]="return nodup(n);\n}";
eval(fn.join(""));
return f
},
jsSelect:function(path,root,type){
    root=root||document;
    if(typeof root=="string"){
        root=document.getElementById(root)
        }
        var paths=path.split(","),results=[];
    for(var i=0,len=paths.length;i<len;i++){
        var subPath=paths[i].replace(trimRe,"");
        if(!cache[subPath]){
            cache[subPath]=Ext.DomQuery.compile(subPath);
            if(!cache[subPath]){
                throw subPath+" is not a valid selector"
                }
            }
        var result=cache[subPath](root);
        if(result&&result!=document){
        results=results.concat(result)
        }
    }
    if(paths.length>1){
    return nodup(results)
    }
    return results
},
isXml:function(el){
    var docEl=(el?el.ownerDocument||el:0).documentElement;
    return docEl?docEl.nodeName!=="HTML":false
    },
select:document.querySelectorAll?function(path,root,type){
    root=root||document;
    if(!Ext.DomQuery.isXml(root)){
        try{
            var cs=root.querySelectorAll(path);
            return Ext.toArray(cs)
            }catch(ex){}
    }
    return Ext.DomQuery.jsSelect.call(this,path,root,type)
}:function(path,root,type){
    return Ext.DomQuery.jsSelect.call(this,path,root,type)
    },
selectNode:function(path,root){
    return Ext.DomQuery.select(path,root)[0]
    },
selectValue:function(path,root,defaultValue){
    path=path.replace(trimRe,"");
    if(!valueCache[path]){
        valueCache[path]=Ext.DomQuery.compile(path,"select")
        }
        var n=valueCache[path](root),v;
    n=n[0]?n[0]:n;
    if(typeof n.normalize=="function"){
        n.normalize()
        }
        v=(n&&n.firstChild?n.firstChild.nodeValue:null);
    return((v===null||v===undefined||v==="")?defaultValue:v)
    },
selectNumber:function(path,root,defaultValue){
    var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);
    return parseFloat(v)
    },
is:function(el,ss){
    if(typeof el=="string"){
        el=document.getElementById(el)
        }
        var isArray=Ext.isArray(el),result=Ext.DomQuery.filter(isArray?el:[el],ss);
    return isArray?(result.length==el.length):(result.length>0)
    },
filter:function(els,ss,nonMatches){
    ss=ss.replace(trimRe,"");
    if(!simpleCache[ss]){
        simpleCache[ss]=Ext.DomQuery.compile(ss,"simple")
        }
        var result=simpleCache[ss](els);
    return nonMatches?quickDiff(result,els):result
    },
matchers:[{
    re:/^\.([\w-]+)/,
    select:'n = byClassName(n, " {1} ");'
},{
    re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
    select:'n = byPseudo(n, "{1}", "{2}");'
},{
    re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
    select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
},{
    re:/^#([\w-]+)/,
    select:'n = byId(n, "{1}");'
},{
    re:/^@([\w-]+)/,
    select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
}],
operators:{
    "=":function(a,v){
        return a==v
        },
    "!=":function(a,v){
        return a!=v
        },
    "^=":function(a,v){
        return a&&a.substr(0,v.length)==v
        },
    "$=":function(a,v){
        return a&&a.substr(a.length-v.length)==v
        },
    "*=":function(a,v){
        return a&&a.indexOf(v)!==-1
        },
    "%=":function(a,v){
        return(a%v)==0
        },
    "|=":function(a,v){
        return a&&(a==v||a.substr(0,v.length+1)==v+"-")
        },
    "~=":function(a,v){
        return a&&(" "+a+" ").indexOf(" "+v+" ")!=-1
        }
    },
pseudos:{
    "first-child":function(c){
        var r=[],ri=-1,n;
        for(var i=0,ci;ci=n=c[i];i++){
            while((n=n.previousSibling)&&n.nodeType!=1){}
            if(!n){
                r[++ri]=ci
                }
            }
        return r
    },
"last-child":function(c){
    var r=[],ri=-1,n;
    for(var i=0,ci;ci=n=c[i];i++){
        while((n=n.nextSibling)&&n.nodeType!=1){}
        if(!n){
            r[++ri]=ci
            }
        }
    return r
},
"nth-child":function(c,a){
    var r=[],ri=-1,m=nthRe.exec(a=="even"&&"2n"||a=="odd"&&"2n+1"||!nthRe2.test(a)&&"n+"+a||a),f=(m[1]||1)-0,l=m[2]-0;
    for(var i=0,n;n=c[i];i++){
        var pn=n.parentNode;
        if(batch!=pn._batch){
            var j=0;
            for(var cn=pn.firstChild;cn;cn=cn.nextSibling){
                if(cn.nodeType==1){
                    cn.nodeIndex=++j
                    }
                }
            pn._batch=batch
        }
        if(f==1){
        if(l==0||n.nodeIndex==l){
            r[++ri]=n
            }
        }else{
        if((n.nodeIndex+l)%f==0){
            r[++ri]=n
            }
        }
}
return r
},
"only-child":function(c){
    var r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        if(!prev(ci)&&!next(ci)){
            r[++ri]=ci
            }
        }
    return r
},
empty:function(c){
    var r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        var cns=ci.childNodes,j=0,cn,empty=true;
        while(cn=cns[j]){
            ++j;
            if(cn.nodeType==1||cn.nodeType==3){
                empty=false;
                break
            }
        }
        if(empty){
        r[++ri]=ci
        }
    }
    return r
},
contains:function(c,v){
    var r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        if((ci.textContent||ci.innerText||"").indexOf(v)!=-1){
            r[++ri]=ci
            }
        }
    return r
},
nodeValue:function(c,v){
    var r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        if(ci.firstChild&&ci.firstChild.nodeValue==v){
            r[++ri]=ci
            }
        }
    return r
},
checked:function(c){
    var r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        if(ci.checked==true){
            r[++ri]=ci
            }
        }
    return r
},
not:function(c,ss){
    return Ext.DomQuery.filter(c,ss,true)
    },
any:function(c,selectors){
    var ss=selectors.split("|"),r=[],ri=-1,s;
    for(var i=0,ci;ci=c[i];i++){
        for(var j=0;s=ss[j];j++){
            if(Ext.DomQuery.is(ci,s)){
                r[++ri]=ci;
                break
            }
        }
        }
    return r
},
odd:function(c){
    return this["nth-child"](c,"odd")
    },
even:function(c){
    return this["nth-child"](c,"even")
    },
nth:function(c,a){
    return c[a-1]||[]
    },
first:function(c){
    return c[0]||[]
    },
last:function(c){
    return c[c.length-1]||[]
    },
has:function(c,ss){
    var s=Ext.DomQuery.select,r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        if(s(ss,ci).length>0){
            r[++ri]=ci
            }
        }
    return r
},
next:function(c,ss){
    var is=Ext.DomQuery.is,r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        var n=next(ci);
        if(n&&is(n,ss)){
            r[++ri]=ci
            }
        }
    return r
},
prev:function(c,ss){
    var is=Ext.DomQuery.is,r=[],ri=-1;
    for(var i=0,ci;ci=c[i];i++){
        var n=prev(ci);
        if(n&&is(n,ss)){
            r[++ri]=ci
            }
        }
    return r
}
}
}
}();
Ext.query=Ext.DomQuery.select;
Ext.util.DelayedTask=function(d,c,a){
    var e=this,g,b=function(){
        clearInterval(g);
        g=null;
        d.apply(c,a||[])
        };

    e.delay=function(i,k,j,h){
        e.cancel();
        d=k||d;
        c=j||c;
        a=h||a;
        g=setInterval(b,i)
        };

    e.cancel=function(){
        if(g){
            clearInterval(g);
            g=null
            }
        }
};
(function(){
    var i=Ext.util,l=Ext.toArray,k=Ext.each,a=Ext.isObject,h=true,j=false;
    i.Observable=function(){
        var m=this,n=m.events;
        if(m.listeners){
            m.on(m.listeners);
            delete m.listeners
            }
            m.events=n||{}
    };

i.Observable.prototype={
    filterOptRe:/^(?:scope|delay|buffer|single)$/,
    fireEvent:function(){
        var m=l(arguments),o=m[0].toLowerCase(),p=this,n=h,s=p.events[o],r,t;
        if(p.eventsSuspended===h){
            if(r=p.eventQueue){
                r.push(m)
                }
            }else{
        if(a(s)&&s.bubble){
            if(s.fire.apply(s,m.slice(1))===j){
                return j
                }
                t=p.getBubbleTarget&&p.getBubbleTarget();
            if(t&&t.enableBubble){
                if(!t.events[o]||!Ext.isObject(t.events[o])||!t.events[o].bubble){
                    t.enableBubble(o)
                    }
                    return t.fireEvent.apply(t,m)
                }
            }else{
        if(a(s)){
            m.shift();
            n=s.fire.apply(s,m)
            }
        }
}
return n
},
addListener:function(p,s,u,n){
    var r=this,q,v,t,m;
    if(a(p)){
        n=p;
        for(q in n){
            v=n[q];
            if(!r.filterOptRe.test(q)){
                r.addListener(q,v.fn||v,v.scope||n.scope,v.fn?v:n)
                }
            }
        }else{
    p=p.toLowerCase();
    m=r.events[p]||h;
    if(Ext.isBoolean(m)){
        r.events[p]=m=new i.Event(r,p)
        }
        m.addListener(s,u,a(n)?n:{})
    }
},
removeListener:function(m,o,n){
    var p=this.events[m.toLowerCase()];
    if(a(p)){
        p.removeListener(o,n)
        }
    },
purgeListeners:function(){
    var o=this.events,m,n;
    for(n in o){
        m=o[n];
        if(a(m)){
            m.clearListeners()
            }
        }
    },
addEvents:function(q){
    var p=this;
    p.events=p.events||{};

    if(Ext.isString(q)){
        var m=arguments,n=m.length;
        while(n--){
            p.events[m[n]]=p.events[m[n]]||h
            }
        }else{
    Ext.applyIf(p.events,q)
    }
},
hasListener:function(m){
    var n=this.events[m.toLowerCase()];
    return a(n)&&n.listeners.length>0
    },
suspendEvents:function(m){
    this.eventsSuspended=h;
    if(m&&!this.eventQueue){
        this.eventQueue=[]
        }
    },
resumeEvents:function(){
    var m=this,n=m.eventQueue||[];
    m.eventsSuspended=j;
    delete m.eventQueue;
    k(n,function(o){
        m.fireEvent.apply(m,o)
        })
    }
};

var e=i.Observable.prototype;
e.on=e.addListener;
e.un=e.removeListener;
i.Observable.releaseCapture=function(m){
    m.fireEvent=e.fireEvent
    };

function g(n,p,m){
    return function(){
        if(p.target==arguments[0]){
            n.apply(m,l(arguments))
            }
        }
}
function c(p,q,m,n){
    m.task=new i.DelayedTask();
    return function(){
        m.task.delay(q.buffer,p,n,l(arguments))
        }
    }
function d(o,p,n,m){
    return function(){
        p.removeListener(n,m);
        return o.apply(m,arguments)
        }
    }
function b(p,q,m,n){
    return function(){
        var o=new i.DelayedTask();
        if(!m.tasks){
            m.tasks=[]
            }
            m.tasks.push(o);
        o.delay(q.delay||10,p,n,l(arguments))
        }
    }
i.Event=function(n,m){
    this.name=m;
    this.obj=n;
    this.listeners=[]
    };

i.Event.prototype={
    addListener:function(p,o,n){
        var q=this,m;
        o=o||q.obj;
        if(!q.isListening(p,o)){
            m=q.createListener(p,o,n);
            if(q.firing){
                q.listeners=q.listeners.slice(0)
                }
                q.listeners.push(m)
            }
        },
createListener:function(q,p,r){
    r=r||{},p=p||this.obj;
    var m={
        fn:q,
        scope:p,
        options:r
    },n=q;
    if(r.target){
        n=g(n,r,p)
        }
        if(r.delay){
        n=b(n,r,m,p)
        }
        if(r.single){
        n=d(n,this,q,p)
        }
        if(r.buffer){
        n=c(n,r,m,p)
        }
        m.fireFn=n;
    return m
    },
findListener:function(p,o){
    var q=this.listeners,n=q.length,m;
    o=o||this.obj;
    while(n--){
        m=q[n];
        if(m){
            if(m.fn==p&&m.scope==o){
                return n
                }
            }
    }
return -1
},
isListening:function(n,m){
    return this.findListener(n,m)!=-1
    },
removeListener:function(r,q){
    var p,m,n,s=this,o=j;
    if((p=s.findListener(r,q))!=-1){
        if(s.firing){
            s.listeners=s.listeners.slice(0)
            }
            m=s.listeners[p];
        if(m.task){
            m.task.cancel();
            delete m.task
            }
            n=m.tasks&&m.tasks.length;
        if(n){
            while(n--){
                m.tasks[n].cancel()
                }
                delete m.tasks
            }
            s.listeners.splice(p,1);
        o=h
        }
        return o
    },
clearListeners:function(){
    var o=this,m=o.listeners,n=m.length;
    while(n--){
        o.removeListener(m[n].fn,m[n].scope)
        }
    },
fire:function(){
    var r=this,o=l(arguments),q=r.listeners,m=q.length,p=0,n;
    if(m>0){
        r.firing=h;
        for(;p<m;p++){
            n=q[p];
            if(n&&n.fireFn.apply(n.scope||r.obj||window,o)===j){
                return(r.firing=j)
                }
            }
        }
    r.firing=j;
return h
}
}
})();
Ext.apply(Ext.util.Observable.prototype,function(){
    function a(j){
        var i=(this.methodEvents=this.methodEvents||{})[j],d,c,g,h=this;
        if(!i){
            this.methodEvents[j]=i={};

            i.originalFn=this[j];
            i.methodName=j;
            i.before=[];
            i.after=[];
            var b=function(l,k,e){
                if(!Ext.isEmpty(c=l.apply(k||h,e))){
                    if(Ext.isObject(c)){
                        d=!Ext.isEmpty(c.returnValue)?c.returnValue:c;
                        g=!!c.cancel
                        }else{
                        if(c===false){
                            g=true
                            }else{
                            d=c
                            }
                        }
                }
        };

this[j]=function(){
    var e=Ext.toArray(arguments);
    d=c=undefined;
    g=false;
    Ext.each(i.before,function(k){
        b(k.fn,k.scope,e);
        if(g){
            return d
            }
        });
if(!Ext.isEmpty(c=i.originalFn.apply(h,e))){
    d=c
    }
    Ext.each(i.after,function(k){
    b(k.fn,k.scope,e);
    if(g){
        return d
        }
    });
return d
}
}
return i
}
return{
    beforeMethod:function(d,c,b){
        a.call(this,d).before.push({
            fn:c,
            scope:b
        })
        },
    afterMethod:function(d,c,b){
        a.call(this,d).after.push({
            fn:c,
            scope:b
        })
        },
    removeMethodListener:function(h,c,b){
        var g=a.call(this,h),d=false;
        Ext.each(g.before,function(j,k,e){
            if(j.fn==c&&j.scope==b){
                e.splice(k,1);
                d=true;
                return false
                }
            });
    if(!d){
        Ext.each(g.after,function(j,k,e){
            if(j.fn==c&&j.scope==b){
                e.splice(k,1);
                return false
                }
            })
    }
},
relayEvents:function(e,b){
    var d=this;
    function c(g){
        return function(){
            return d.fireEvent.apply(d,[g].concat(Ext.toArray(arguments)))
            }
        }
    Ext.each(b,function(g){
    d.events[g]=d.events[g]||true;
    e.on(g,c(g),d)
    })
},
enableBubble:function(b){
    var c=this;
    if(!Ext.isEmpty(b)){
        b=Ext.isArray(b)?b:Ext.toArray(arguments);
        Ext.each(b,function(d){
            d=d.toLowerCase();
            var e=c.events[d]||true;
            if(Ext.isBoolean(e)){
                e=new Ext.util.Event(c,d);
                c.events[d]=e
                }
                e.bubble=true
            })
        }
    }
}
}());
Ext.util.Observable.capture=function(c,b,a){
    c.fireEvent=c.fireEvent.createInterceptor(b,a)
    };

Ext.util.Observable.observeClass=function(b,a){
    if(b){
        if(!b.fireEvent){
            Ext.apply(b,new Ext.util.Observable());
            Ext.util.Observable.capture(b.prototype,b.fireEvent,b)
            }
            if(Ext.isObject(a)){
            b.on(a)
            }
            return b
        }
    };

Ext.EventManager=function(){
    var A,p,j=false,l=Ext.isGecko||Ext.isWebKit||Ext.isSafari,o=Ext.lib.Event,q=Ext.lib.Dom,c=document,B=window,r="DOMContentLoaded",t="complete",g=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,u=[];
    function n(F){
        var I=false,E=0,D=u.length,I=false,G=false,H;
        if(F){
            if(F.getElementById||F.navigator){
                for(;E<D;++E){
                    H=u[E];
                    if(H.el===F){
                        I=H.id;
                        break
                    }
                }
                if(!I){
                I=Ext.id(F);
                u.push({
                    id:I,
                    el:F
                });
                G=true
                }
            }else{
        I=Ext.id(F)
        }
        if(!Ext.elCache[I]){
        Ext.Element.addToCache(new Ext.Element(F),I);
        if(G){
            Ext.elCache[I].skipGC=true
            }
        }
}
return I
}
function m(F,H,K,G,E,M){
    F=Ext.getDom(F);
    var D=n(F),L=Ext.elCache[D].events,I;
    I=o.on(F,H,E);
    L[H]=L[H]||[];
    L[H].push([K,E,M,I,G]);
    if(F.addEventListener&&H=="mousewheel"){
        var J=["DOMMouseScroll",E,false];
        F.addEventListener.apply(F,J);
        Ext.EventManager.addListener(B,"unload",function(){
            F.removeEventListener.apply(F,J)
            })
        }
        if(F==c&&H=="mousedown"){
        Ext.EventManager.stoppedMouseDownEvent.addListener(E)
        }
    }
function d(){
    if(window!=top){
        return false
        }
        try{
        c.documentElement.doScroll("left")
        }catch(D){
        return false
        }
        b();
    return true
    }
    function C(D){
    if(Ext.isIE&&d()){
        return true
        }
        if(c.readyState==t){
        b();
        return true
        }
        j||(p=setTimeout(arguments.callee,2));
    return false
    }
    var k;
function i(D){
    k||(k=Ext.query("style, link[rel=stylesheet]"));
    if(k.length==c.styleSheets.length){
        b();
        return true
        }
        j||(p=setTimeout(arguments.callee,2));
    return false
    }
    function z(D){
    c.removeEventListener(r,arguments.callee,false);
    i()
    }
    function b(D){
    if(!j){
        j=true;
        if(p){
            clearTimeout(p)
            }
            if(l){
            c.removeEventListener(r,b,false)
            }
            if(Ext.isIE&&C.bindIE){
            c.detachEvent("onreadystatechange",C)
            }
            o.un(B,"load",arguments.callee)
        }
        if(A&&!Ext.isReady){
        Ext.isReady=true;
        A.fire();
        A.listeners=[]
        }
    }
function a(){
    A||(A=new Ext.util.Event());
    if(l){
        c.addEventListener(r,b,false)
        }
        if(Ext.isIE){
        if(!C()){
            C.bindIE=true;
            c.attachEvent("onreadystatechange",C)
            }
        }else{
    if(Ext.isOpera){
        (c.readyState==t&&i())||c.addEventListener(r,z,false)
        }else{
        if(Ext.isWebKit){
            C()
            }
        }
}
o.on(B,"load",b)
}
function y(D,E){
    return function(){
        var F=Ext.toArray(arguments);
        if(E.target==Ext.EventObject.setEvent(F[0]).target){
            D.apply(this,F)
            }
        }
}
function x(E,F,D){
    return function(G){
        D.delay(F.buffer,E,null,[new Ext.EventObjectImpl(G)])
        }
    }
function s(H,G,D,F,E){
    return function(I){
        Ext.EventManager.removeListener(G,D,F,E);
        H(I)
        }
    }
function e(E,F,D){
    return function(H){
        var G=new Ext.util.DelayedTask(E);
        if(!D.tasks){
            D.tasks=[]
            }
            D.tasks.push(G);
        G.delay(F.delay||10,E,null,[new Ext.EventObjectImpl(H)])
        }
    }
function h(I,H,D,K,L){
    var E=!Ext.isObject(D)?{}:D,F=Ext.getDom(I),G;
    K=K||E.fn;
    L=L||E.scope;
    if(!F){
        throw'Error listening for "'+H+'". Element "'+I+"\" doesn't exist."
        }
        function J(N){
        if(!Ext){
            return
        }
        N=Ext.EventObject.setEvent(N);
        var M;
        if(E.delegate){
            if(!(M=N.getTarget(E.delegate,F))){
                return
            }
        }else{
        M=N.target
        }
        if(E.stopEvent){
        N.stopEvent()
        }
        if(E.preventDefault){
        N.preventDefault()
        }
        if(E.stopPropagation){
        N.stopPropagation()
        }
        if(E.normalized){
        N=N.browserEvent
        }
        K.call(L||F,N,M,E)
    }
    if(E.target){
    J=y(J,E)
    }
    if(E.delay){
    J=e(J,E,K)
    }
    if(E.single){
    J=s(J,F,H,K,L)
    }
    if(E.buffer){
    G=new Ext.util.DelayedTask(J);
    J=x(J,E,G)
    }
    m(F,H,K,G,J,L);
return J
}
var v={
    addListener:function(F,D,H,G,E){
        if(Ext.isObject(D)){
            var K=D,I,J;
            for(I in K){
                J=K[I];
                if(!g.test(I)){
                    if(Ext.isFunction(J)){
                        h(F,I,K,J,K.scope)
                        }else{
                        h(F,I,J)
                        }
                    }
            }
            }else{
    h(F,D,E,H,G)
    }
},
removeListener:function(F,J,N,O){
    F=Ext.getDom(F);
    var D=n(F),L=F&&(Ext.elCache[D].events)[J]||[],E,I,G,H,K,M;
    for(I=0,K=L.length;I<K;I++){
        if(Ext.isArray(M=L[I])&&M[0]==N&&(!O||M[2]==O)){
            if(M[4]){
                M[4].cancel()
                }
                H=N.tasks&&N.tasks.length;
            if(H){
                while(H--){
                    N.tasks[H].cancel()
                    }
                    delete N.tasks
                }
                E=M[1];
            o.un(F,J,o.extAdapter?M[3]:E);
            if(E&&F.addEventListener&&J=="mousewheel"){
                F.removeEventListener("DOMMouseScroll",E,false)
                }
                if(E&&F==c&&J=="mousedown"){
                Ext.EventManager.stoppedMouseDownEvent.removeListener(E)
                }
                L.splice(I,1);
            if(L.length===0){
                delete Ext.elCache[D].events[J]
            }
            for(H in Ext.elCache[D].events){
                return false
                }
                Ext.elCache[D].events={};

            return false
            }
        }
    },
removeAll:function(F){
    F=Ext.getDom(F);
    var E=n(F),K=Ext.elCache[E]||{},N=K.events||{},J,I,L,G,M,H,D;
    for(G in N){
        if(N.hasOwnProperty(G)){
            J=N[G];
            for(I=0,L=J.length;I<L;I++){
                M=J[I];
                if(M[4]){
                    M[4].cancel()
                    }
                    if(M[0].tasks&&(H=M[0].tasks.length)){
                    while(H--){
                        M[0].tasks[H].cancel()
                        }
                        delete M.tasks
                    }
                    D=M[1];
                o.un(F,G,o.extAdapter?M[3]:D);
                if(F.addEventListener&&D&&G=="mousewheel"){
                    F.removeEventListener("DOMMouseScroll",D,false)
                    }
                    if(D&&F==c&&G=="mousedown"){
                    Ext.EventManager.stoppedMouseDownEvent.removeListener(D)
                    }
                }
            }
    }
    if(Ext.elCache[E]){
    Ext.elCache[E].events={}
}
},
getListeners:function(G,D){
    G=Ext.getDom(G);
    var I=n(G),E=Ext.elCache[I]||{},H=E.events||{},F=[];
    if(H&&H[D]){
        return H[D]
        }else{
        return null
        }
    },
purgeElement:function(F,D,H){
    F=Ext.getDom(F);
    var E=n(F),K=Ext.elCache[E]||{},L=K.events||{},G,J,I;
    if(H){
        if(L&&L.hasOwnProperty(H)){
            J=L[H];
            for(G=0,I=J.length;G<I;G++){
                Ext.EventManager.removeListener(F,H,J[G][0])
                }
            }
        }else{
    Ext.EventManager.removeAll(F)
    }
    if(D&&F&&F.childNodes){
    for(G=0,I=F.childNodes.length;G<I;G++){
        Ext.EventManager.purgeElement(F.childNodes[G],D,H)
        }
    }
},
_unload:function(){
    var D;
    for(D in Ext.elCache){
        Ext.EventManager.removeAll(D)
        }
        delete Ext.elCache;
    delete Ext.Element._flyweights;
    var H,E,G,F=Ext.lib.Ajax;
    (Ext.isObject(F.conn))?E=F.conn:E={};

    for(G in E){
        H=E[G];
        if(H){
            F.abort({
                conn:H,
                tId:G
            })
            }
        }
    },
onDocumentReady:function(F,E,D){
    if(Ext.isReady){
        A||(A=new Ext.util.Event());
        A.addListener(F,E,D);
        A.fire();
        A.listeners=[]
        }else{
        if(!A){
            a()
            }
            D=D||{};

        D.delay=D.delay||1;
        A.addListener(F,E,D)
        }
    },
fireDocReady:b
};

v.on=v.addListener;
v.un=v.removeListener;
v.stoppedMouseDownEvent=new Ext.util.Event();
return v
}();
Ext.onReady=Ext.EventManager.onDocumentReady;
(function(){
    var a=function(){
        var c=document.body||document.getElementsByTagName("body")[0];
        if(!c){
            return false
            }
            var b=[" ",Ext.isIE?"ext-ie "+(Ext.isIE6?"ext-ie6":(Ext.isIE7?"ext-ie7":"ext-ie8")):Ext.isGecko?"ext-gecko "+(Ext.isGecko2?"ext-gecko2":"ext-gecko3"):Ext.isOpera?"ext-opera":Ext.isWebKit?"ext-webkit":""];
        if(Ext.isSafari){
            b.push("ext-safari "+(Ext.isSafari2?"ext-safari2":(Ext.isSafari3?"ext-safari3":"ext-safari4")))
            }else{
            if(Ext.isChrome){
                b.push("ext-chrome")
                }
            }
        if(Ext.isMac){
        b.push("ext-mac")
        }
        if(Ext.isLinux){
        b.push("ext-linux")
        }
        if(Ext.isStrict||Ext.isBorderBox){
        var d=c.parentNode;
        if(d){
            d.className+=Ext.isStrict?" ext-strict":" ext-border-box"
            }
        }
    c.className+=b.join(" ");
    return true
    };

if(!a()){
    Ext.onReady(a)
    }
})();
Ext.EventObject=function(){
    var b=Ext.lib.Event,a={
        3:13,
        63234:37,
        63235:39,
        63232:38,
        63233:40,
        63276:33,
        63277:34,
        63272:46,
        63273:36,
        63275:35
    },c=Ext.isIE?{
        1:0,
        4:1,
        2:2
    }:(Ext.isWebKit?{
        1:0,
        2:1,
        3:2
    }:{
        0:0,
        1:1,
        2:2
    });
    Ext.EventObjectImpl=function(d){
        if(d){
            this.setEvent(d.browserEvent||d)
            }
        };

Ext.EventObjectImpl.prototype={
    setEvent:function(g){
        var d=this;
        if(g==d||(g&&g.browserEvent)){
            return g
            }
            d.browserEvent=g;
        if(g){
            d.button=g.button?c[g.button]:(g.which?g.which-1:-1);
            if(g.type=="click"&&d.button==-1){
                d.button=0
                }
                d.type=g.type;
            d.shiftKey=g.shiftKey;
            d.ctrlKey=g.ctrlKey||g.metaKey||false;
            d.altKey=g.altKey;
            d.keyCode=g.keyCode;
            d.charCode=g.charCode;
            d.target=b.getTarget(g);
            d.xy=b.getXY(g)
            }else{
            d.button=-1;
            d.shiftKey=false;
            d.ctrlKey=false;
            d.altKey=false;
            d.keyCode=0;
            d.charCode=0;
            d.target=null;
            d.xy=[0,0]
            }
            return d
        },
    stopEvent:function(){
        var d=this;
        if(d.browserEvent){
            if(d.browserEvent.type=="mousedown"){
                Ext.EventManager.stoppedMouseDownEvent.fire(d)
                }
                b.stopEvent(d.browserEvent)
            }
        },
preventDefault:function(){
    if(this.browserEvent){
        b.preventDefault(this.browserEvent)
        }
    },
stopPropagation:function(){
    var d=this;
    if(d.browserEvent){
        if(d.browserEvent.type=="mousedown"){
            Ext.EventManager.stoppedMouseDownEvent.fire(d)
            }
            b.stopPropagation(d.browserEvent)
        }
    },
getCharCode:function(){
    return this.charCode||this.keyCode
    },
getKey:function(){
    return this.normalizeKey(this.keyCode||this.charCode)
    },
normalizeKey:function(d){
    return Ext.isSafari?(a[d]||d):d
    },
getPageX:function(){
    return this.xy[0]
    },
getPageY:function(){
    return this.xy[1]
    },
getXY:function(){
    return this.xy
    },
getTarget:function(e,g,d){
    return e?Ext.fly(this.target).findParent(e,g,d):(d?Ext.get(this.target):this.target)
    },
getRelatedTarget:function(){
    return this.browserEvent?b.getRelatedTarget(this.browserEvent):null
    },
getWheelDelta:function(){
    var d=this.browserEvent;
    var g=0;
    if(d.wheelDelta){
        g=d.wheelDelta/120
        }else{
        if(d.detail){
            g=-d.detail/3
            }
        }
    return g
},
within:function(g,h,d){
    if(g){
        var e=this[h?"getRelatedTarget":"getTarget"]();
        return e&&((d?(e==Ext.getDom(g)):false)||Ext.fly(g).contains(e))
        }
        return false
    }
};

return new Ext.EventObjectImpl()
}();
Ext.apply(Ext.EventManager,function(){
    var c,j,e,b,a=Ext.lib.Dom,i=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/,h=0,g=0,d=Ext.isWebKit?Ext.num(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1])>=525:!((Ext.isGecko&&!Ext.isWindows)||Ext.isOpera);
    return{
        doResizeEvent:function(){
            var l=a.getViewHeight(),k=a.getViewWidth();
            if(g!=l||h!=k){
                c.fire(h=k,g=l)
                }
            },
    onWindowResize:function(m,l,k){
        if(!c){
            c=new Ext.util.Event();
            j=new Ext.util.DelayedTask(this.doResizeEvent);
            Ext.EventManager.on(window,"resize",this.fireWindowResize,this)
            }
            c.addListener(m,l,k)
        },
    fireWindowResize:function(){
        if(c){
            j.delay(100)
            }
        },
onTextResize:function(n,m,k){
    if(!e){
        e=new Ext.util.Event();
        var l=new Ext.Element(document.createElement("div"));
        l.dom.className="x-text-resize";
        l.dom.innerHTML="X";
        l.appendTo(document.body);
        b=l.dom.offsetHeight;
        setInterval(function(){
            if(l.dom.offsetHeight!=b){
                e.fire(b,b=l.dom.offsetHeight)
                }
            },this.textResizeInterval)
    }
    e.addListener(n,m,k)
    },
removeResizeListener:function(l,k){
    if(c){
        c.removeListener(l,k)
        }
    },
fireResize:function(){
    if(c){
        c.fire(a.getViewWidth(),a.getViewHeight())
        }
    },
textResizeInterval:50,
ieDeferSrc:false,
useKeydown:d
}
}());
Ext.EventManager.on=Ext.EventManager.addListener;
Ext.apply(Ext.EventObjectImpl.prototype,{
    BACKSPACE:8,
    TAB:9,
    NUM_CENTER:12,
    ENTER:13,
    RETURN:13,
    SHIFT:16,
    CTRL:17,
    CONTROL:17,
    ALT:18,
    PAUSE:19,
    CAPS_LOCK:20,
    ESC:27,
    SPACE:32,
    PAGE_UP:33,
    PAGEUP:33,
    PAGE_DOWN:34,
    PAGEDOWN:34,
    END:35,
    HOME:36,
    LEFT:37,
    UP:38,
    RIGHT:39,
    DOWN:40,
    PRINT_SCREEN:44,
    INSERT:45,
    DELETE:46,
    ZERO:48,
    ONE:49,
    TWO:50,
    THREE:51,
    FOUR:52,
    FIVE:53,
    SIX:54,
    SEVEN:55,
    EIGHT:56,
    NINE:57,
    A:65,
    B:66,
    C:67,
    D:68,
    E:69,
    F:70,
    G:71,
    H:72,
    I:73,
    J:74,
    K:75,
    L:76,
    M:77,
    N:78,
    O:79,
    P:80,
    Q:81,
    R:82,
    S:83,
    T:84,
    U:85,
    V:86,
    W:87,
    X:88,
    Y:89,
    Z:90,
    CONTEXT_MENU:93,
    NUM_ZERO:96,
    NUM_ONE:97,
    NUM_TWO:98,
    NUM_THREE:99,
    NUM_FOUR:100,
    NUM_FIVE:101,
    NUM_SIX:102,
    NUM_SEVEN:103,
    NUM_EIGHT:104,
    NUM_NINE:105,
    NUM_MULTIPLY:106,
    NUM_PLUS:107,
    NUM_MINUS:109,
    NUM_PERIOD:110,
    NUM_DIVISION:111,
    F1:112,
    F2:113,
    F3:114,
    F4:115,
    F5:116,
    F6:117,
    F7:118,
    F8:119,
    F9:120,
    F10:121,
    F11:122,
    F12:123,
    isNavKeyPress:function(){
        var b=this,a=this.normalizeKey(b.keyCode);
        return(a>=33&&a<=40)||a==b.RETURN||a==b.TAB||a==b.ESC
        },
    isSpecialKey:function(){
        var a=this.normalizeKey(this.keyCode);
        return(this.type=="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(a==this.BACKSPACE)||(a>=16&&a<=20)||(a>=44&&a<=46)
        },
    getPoint:function(){
        return new Ext.lib.Point(this.xy[0],this.xy[1])
        },
    hasModifier:function(){
        return((this.ctrlKey||this.altKey)||this.shiftKey)
        }
    });
(function(){
    var j=document;
    Ext.Element=function(o,p){
        var q=typeof o=="string"?j.getElementById(o):o,r;
        if(!q){
            return null
            }
            r=q.id;
        if(!p&&r&&Ext.elCache[r]){
            return Ext.elCache[r].el
            }
            this.dom=q;
        this.id=r||Ext.id(q)
        };

    var a=Ext.lib.Dom,g=Ext.DomHelper,m=Ext.lib.Event,e=Ext.lib.Anim,h=Ext.Element,b=Ext.elCache;
    h.prototype={
        set:function(t,q){
            var r=this.dom,p,s,q=(q!==false)&&!!r.setAttribute;
            for(p in t){
                if(t.hasOwnProperty(p)){
                    s=t[p];
                    if(p=="style"){
                        g.applyStyles(r,s)
                        }else{
                        if(p=="cls"){
                            r.className=s
                            }else{
                            if(q){
                                r.setAttribute(p,s)
                                }else{
                                r[p]=s
                                }
                            }
                    }
            }
            }
        return this
},
defaultUnit:"px",
is:function(o){
    return Ext.DomQuery.is(this.dom,o)
    },
focus:function(r,q){
    var o=this,q=q||o.dom;
    try{
        if(Number(r)){
            o.focus.defer(r,null,[null,q])
            }else{
            q.focus()
            }
        }catch(p){}
return o
},
blur:function(){
    try{
        this.dom.blur()
        }catch(o){}
    return this
    },
getValue:function(o){
    var p=this.dom.value;
    return o?parseInt(p,10):p
    },
addListener:function(o,r,q,p){
    Ext.EventManager.on(this.dom,o,r,q||this,p);
    return this
    },
removeListener:function(o,q,p){
    Ext.EventManager.removeListener(this.dom,o,q,p||this);
    return this
    },
removeAllListeners:function(){
    Ext.EventManager.removeAll(this.dom);
    return this
    },
purgeAllListeners:function(){
    Ext.EventManager.purgeElement(this,true);
    return this
    },
addUnits:function(o){
    if(o===""||o=="auto"||o===undefined){
        o=o||""
        }else{
        if(!isNaN(o)||!k.test(o)){
            o=o+(this.defaultUnit||"px")
            }
        }
    return o
},
load:function(p,q,o){
    Ext.Ajax.request(Ext.apply({
        params:q,
        url:p.url||p,
        callback:o,
        el:this.dom,
        indicatorText:p.indicatorText||""
        },Ext.isObject(p)?p:{}));
    return this
    },
isBorderBox:function(){
    return i[(this.dom.tagName||"").toLowerCase()]||Ext.isBorderBox
    },
remove:function(){
    var o=this,p=o.dom;
    if(p){
        delete o.dom;
        Ext.removeNode(p)
        }
    },
hover:function(p,o,r,q){
    var s=this;
    s.on("mouseenter",p,r||s.dom,q);
    s.on("mouseleave",o,r||s.dom,q);
    return s
    },
contains:function(o){
    return !o?false:Ext.lib.Dom.isAncestor(this.dom,o.dom?o.dom:o)
    },
getAttributeNS:function(p,o){
    return this.getAttribute(o,p)
    },
getAttribute:Ext.isIE?function(o,q){
    var r=this.dom,p=typeof r[q+":"+o];
    if(["undefined","unknown"].indexOf(p)==-1){
        return r[q+":"+o]
        }
        return r[o]
    }:function(o,p){
    var q=this.dom;
    return q.getAttributeNS(p,o)||q.getAttribute(p+":"+o)||q.getAttribute(o)||q[o]
    },
update:function(o){
    if(this.dom){
        this.dom.innerHTML=o
        }
        return this
    }
};

var n=h.prototype;
h.addMethods=function(p){
    Ext.apply(n,p)
    };

n.on=n.addListener;
n.un=n.removeListener;
n.autoBoxAdjust=true;
var k=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i,d;
h.get=function(p){
    var o,s,r;
    if(!p){
        return null
        }
        if(typeof p=="string"){
        if(!(s=j.getElementById(p))){
            return null
            }
            if(b[p]&&b[p].el){
            o=b[p].el;
            o.dom=s
            }else{
            o=h.addToCache(new h(s))
            }
            return o
        }else{
        if(p.tagName){
            if(!(r=p.id)){
                r=Ext.id(p)
                }
                if(b[r]&&b[r].el){
                o=b[r].el;
                o.dom=p
                }else{
                o=h.addToCache(new h(p))
                }
                return o
            }else{
            if(p instanceof h){
                if(p!=d){
                    if(Ext.isIE&&(p.id==undefined||p.id=="")){
                        p.dom=p.dom
                        }else{
                        p.dom=j.getElementById(p.id)||p.dom
                        }
                    }
                return p
            }else{
            if(p.isComposite){
                return p
                }else{
                if(Ext.isArray(p)){
                    return h.select(p)
                    }else{
                    if(p==j){
                        if(!d){
                            var q=function(){};

                            q.prototype=h.prototype;
                            d=new q();
                            d.dom=j
                            }
                            return d
                        }
                    }
            }
    }
}
}
return null
};

h.addToCache=function(o,p){
    p=p||o.id;
    b[p]={
        el:o,
        data:{},
        events:{}
};

return o
};

h.data=function(p,o,q){
    p=h.get(p);
    if(!p){
        return null
        }
        var r=b[p.id].data;
    if(arguments.length==2){
        return r[o]
        }else{
        return(r[o]=q)
        }
    };

function l(){
    if(!Ext.enableGarbageCollector){
        clearInterval(h.collectorThreadId)
        }else{
        var p,r,u,s;
        for(p in b){
            s=b[p];
            if(s.skipGC){
                continue
            }
            r=s.el;
            u=r.dom;
            if(!u||!u.parentNode||(!u.offsetParent&&!j.getElementById(p))){
                if(Ext.enableListenerCollection){
                    Ext.EventManager.removeAll(u)
                    }
                    delete b[p]
            }
        }
        if(Ext.isIE){
        var q={};

        for(p in b){
            q[p]=b[p]
            }
            b=Ext.elCache=q
        }
    }
}
h.collectorThreadId=setInterval(l,30000);
var c=function(){};

c.prototype=h.prototype;
h.Flyweight=function(o){
    this.dom=o
    };

h.Flyweight.prototype=new c();
h.Flyweight.prototype.isFlyweight=true;
h._flyweights={};

h.fly=function(q,o){
    var p=null;
    o=o||"_global";
    if(q=Ext.getDom(q)){
        (h._flyweights[o]=h._flyweights[o]||new h.Flyweight()).dom=q;
        p=h._flyweights[o]
        }
        return p
    };

Ext.get=h.get;
Ext.fly=h.fly;
var i=Ext.isStrict?{
    select:1
}:{
    input:1,
    select:1,
    textarea:1
};

if(Ext.isIE||Ext.isGecko){
    i.button=1
    }
})();
Ext.Element.addMethods({
    swallowEvent:function(a,b){
        var d=this;
        function c(g){
            g.stopPropagation();
            if(b){
                g.preventDefault()
                }
            }
        if(Ext.isArray(a)){
        Ext.each(a,function(g){
            d.on(g,c)
            });
        return d
        }
        d.on(a,c);
    return d
    },
relayEvent:function(a,b){
    this.on(a,function(c){
        b.fireEvent(a,c)
        })
    },
clean:function(b){
    var d=this,e=d.dom,g=e.firstChild,c=-1;
    if(Ext.Element.data(e,"isCleaned")&&b!==true){
        return d
        }while(g){
        var a=g.nextSibling;
        if(g.nodeType==3&&!/\S/.test(g.nodeValue)){
            e.removeChild(g)
            }else{
            g.nodeIndex=++c
            }
            g=a
        }
        Ext.Element.data(e,"isCleaned",true);
    return d
    },
load:function(){
    var a=this.getUpdater();
    a.update.apply(a,arguments);
    return this
    },
getUpdater:function(){
    return this.updateManager||(this.updateManager=new Ext.Updater(this))
    },
update:function(html,loadScripts,callback){
    if(!this.dom){
        return this
        }
        html=html||"";
    if(loadScripts!==true){
        this.dom.innerHTML=html;
        if(Ext.isFunction(callback)){
            callback()
            }
            return this
        }
        var id=Ext.id(),dom=this.dom;
    html+='<span id="'+id+'"></span>';
    Ext.lib.Event.onAvailable(id,function(){
        var DOC=document,hd=DOC.getElementsByTagName("head")[0],re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,typeRe=/\stype=([\'\"])(.*?)\1/i,match,attrs,srcMatch,typeMatch,el,s;
        while((match=re.exec(html))){
            attrs=match[1];
            srcMatch=attrs?attrs.match(srcRe):false;
            if(srcMatch&&srcMatch[2]){
                s=DOC.createElement("script");
                s.src=srcMatch[2];
                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])
                        }
                    }
            }
    }
    el=DOC.getElementById(id);
    if(el){
    Ext.removeNode(el)
    }
    if(Ext.isFunction(callback)){
    callback()
    }
});
dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");
return this
},
removeAllListeners:function(){
    this.removeAnchor();
    Ext.EventManager.removeAll(this.dom);
    return this
    },
createProxy:function(a,e,d){
    a=Ext.isObject(a)?a:{
        tag:"div",
        cls:a
    };

    var c=this,b=e?Ext.DomHelper.append(e,a,true):Ext.DomHelper.insertBefore(c.dom,a,true);
    if(d&&c.setBox&&c.getBox){
        b.setBox(c.getBox())
        }
        return b
    }
});
Ext.Element.prototype.getUpdateManager=Ext.Element.prototype.getUpdater;
Ext.Element.addMethods({
    getAnchorXY:function(e,l,q){
        e=(e||"tl").toLowerCase();
        q=q||{};

        var k=this,b=k.dom==document.body||k.dom==document,n=q.width||b?Ext.lib.Dom.getViewWidth():k.getWidth(),i=q.height||b?Ext.lib.Dom.getViewHeight():k.getHeight(),p,a=Math.round,c=k.getXY(),m=k.getScroll(),j=b?m.left:!l?c[0]:0,g=b?m.top:!l?c[1]:0,d={
            c:[a(n*0.5),a(i*0.5)],
            t:[a(n*0.5),0],
            l:[0,a(i*0.5)],
            r:[n,a(i*0.5)],
            b:[a(n*0.5),i],
            tl:[0,0],
            bl:[0,i],
            br:[n,i],
            tr:[n,0]
            };

        p=d[e];
        return[p[0]+j,p[1]+g]
        },
    anchorTo:function(b,h,c,a,k,l){
        var i=this,e=i.dom,j=!Ext.isEmpty(k),d=function(){
            Ext.fly(e).alignTo(b,h,c,a);
            Ext.callback(l,Ext.fly(e))
            },g=this.getAnchor();
        this.removeAnchor();
        Ext.apply(g,{
            fn:d,
            scroll:j
        });
        Ext.EventManager.onWindowResize(d,null);
        if(j){
            Ext.EventManager.on(window,"scroll",d,null,{
                buffer:!isNaN(k)?k:50
                })
            }
            d.call(i);
        return i
        },
    removeAnchor:function(){
        var b=this,a=this.getAnchor();
        if(a&&a.fn){
            Ext.EventManager.removeResizeListener(a.fn);
            if(a.scroll){
                Ext.EventManager.un(window,"scroll",a.fn)
                }
                delete a.fn
            }
            return b
        },
    getAnchor:function(){
        var b=Ext.Element.data,c=this.dom;
        if(!c){
            return
        }
        var a=b(c,"_anchor");
        if(!a){
            a=b(c,"_anchor",{})
            }
            return a
        },
    getAlignToXY:function(g,A,B){
        g=Ext.get(g);
        if(!g||!g.dom){
            throw"Element.alignToXY with an element that doesn't exist"
            }
            B=B||[0,0];
        A=(!A||A=="?"?"tl-bl?":(!/-/.test(A)&&A!==""?"tl-"+A:A||"tl-bl")).toLowerCase();
        var K=this,H=K.dom,M,L,n,l,s,F,v,t=Ext.lib.Dom.getViewWidth()-10,G=Ext.lib.Dom.getViewHeight()-10,b,i,j,k,u,z,N=document,J=N.documentElement,q=N.body,E=(J.scrollLeft||q.scrollLeft||0)+5,D=(J.scrollTop||q.scrollTop||0)+5,I=false,e="",a="",C=A.match(/^([a-z]+)-([a-z]+)(\?)?$/);
        if(!C){
            throw"Element.alignTo with an invalid alignment "+A
            }
            e=C[1];
        a=C[2];
        I=!!C[3];
        M=K.getAnchorXY(e,true);
        L=g.getAnchorXY(a,false);
        n=L[0]-M[0]+B[0];
        l=L[1]-M[1]+B[1];
        if(I){
            s=K.getWidth();
            F=K.getHeight();
            v=g.getRegion();
            b=e.charAt(0);
            i=e.charAt(e.length-1);
            j=a.charAt(0);
            k=a.charAt(a.length-1);
            u=((b=="t"&&j=="b")||(b=="b"&&j=="t"));
            z=((i=="r"&&k=="l")||(i=="l"&&k=="r"));
            if(n+s>t+E){
                n=z?v.left-s:t+E-s
                }
                if(n<E){
                n=z?v.right:E
                }
                if(l+F>G+D){
                l=u?v.top-F:G+D-F
                }
                if(l<D){
                l=u?v.bottom:D
                }
            }
        return[n,l]
    },
alignTo:function(c,a,e,b){
    var d=this;
    return d.setXY(d.getAlignToXY(c,a,e),d.preanim&&!!b?d.preanim(arguments,3):false)
    },
adjustForConstraints:function(c,a,b){
    return this.getConstrainToXY(a||document,false,b,c)||c
    },
getConstrainToXY:function(b,a,c,e){
    var d={
        top:0,
        left:0,
        bottom:0,
        right:0
    };

    return function(i,z,k,m){
        i=Ext.get(i);
        k=k?Ext.applyIf(k,d):d;
        var v,C,u=0,t=0;
        if(i.dom==document.body||i.dom==document){
            v=Ext.lib.Dom.getViewWidth();
            C=Ext.lib.Dom.getViewHeight()
            }else{
            v=i.dom.clientWidth;
            C=i.dom.clientHeight;
            if(!z){
                var r=i.getXY();
                u=r[0];
                t=r[1]
                }
            }
        var q=i.getScroll();
    u+=k.left+q.left;
    t+=k.top+q.top;
    v-=k.right;
    C-=k.bottom;
    var A=u+v;
    var g=t+C;
    var j=m||(!z?this.getXY():[this.getLeft(true),this.getTop(true)]);
    var o=j[0],n=j[1];
    var p=this.dom.offsetWidth,B=this.dom.offsetHeight;
    var l=false;
    if((o+p)>A){
        o=A-p;
        l=true
        }
        if((n+B)>g){
        n=g-B;
        l=true
        }
        if(o<u){
        o=u;
        l=true
        }
        if(n<t){
        n=t;
        l=true
        }
        return l?[o,n]:false
    }
}(),
getCenterXY:function(){
    return this.getAlignToXY(document,"c-c")
    },
center:function(a){
    return this.alignTo(a||document,"c-c")
    }
});
Ext.Element.addMethods(function(){
    var d="parentNode",b="nextSibling",c="previousSibling",e=Ext.DomQuery,a=Ext.get;
    return{
        findParent:function(m,l,h){
            var j=this.dom,g=document.body,k=0,i;
            if(Ext.isGecko&&Object.prototype.toString.call(j)=="[object XULElement]"){
                return null
                }
                l=l||50;
            if(isNaN(l)){
                i=Ext.getDom(l);
                l=Number.MAX_VALUE
                }while(j&&j.nodeType==1&&k<l&&j!=g&&j!=i){
                if(e.is(j,m)){
                    return h?a(j):j
                    }
                    k++;
                j=j.parentNode
                }
                return null
            },
        findParentNode:function(j,i,g){
            var h=Ext.fly(this.dom.parentNode,"_internal");
            return h?h.findParent(j,i,g):null
            },
        up:function(h,g){
            return this.findParentNode(h,g,true)
            },
        select:function(g){
            return Ext.Element.select(g,this.dom)
            },
        query:function(g){
            return e.select(g,this.dom)
            },
        child:function(g,h){
            var i=e.selectNode(g,this.dom);
            return h?i:a(i)
            },
        down:function(g,h){
            var i=e.selectNode(" > "+g,this.dom);
            return h?i:a(i)
            },
        parent:function(g,h){
            return this.matchNode(d,d,g,h)
            },
        next:function(g,h){
            return this.matchNode(b,b,g,h)
            },
        prev:function(g,h){
            return this.matchNode(c,c,g,h)
            },
        first:function(g,h){
            return this.matchNode(b,"firstChild",g,h)
            },
        last:function(g,h){
            return this.matchNode(c,"lastChild",g,h)
            },
        matchNode:function(h,k,g,i){
            var j=this.dom[k];
            while(j){
                if(j.nodeType==1&&(!g||e.is(j,g))){
                    return !i?a(j):j
                    }
                    j=j[h]
                }
                return null
            }
        }
}());
Ext.Element.addMethods({
    select:function(a,b){
        return Ext.Element.select(a,b,this.dom)
        }
    });
Ext.Element.addMethods(function(){
    var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;
    return{
        appendChild:function(d){
            return a(d).appendTo(this)
            },
        appendTo:function(d){
            c(d).appendChild(this.dom);
            return this
            },
        insertBefore:function(d){
            (d=c(d)).parentNode.insertBefore(this.dom,d);
            return this
            },
        insertAfter:function(d){
            (d=c(d)).parentNode.insertBefore(this.dom,d.nextSibling);
            return this
            },
        insertFirst:function(e,d){
            e=e||{};

            if(e.nodeType||e.dom||typeof e=="string"){
                e=c(e);
                this.dom.insertBefore(e,this.dom.firstChild);
                return !d?a(e):e
                }else{
                return this.createChild(e,this.dom.firstChild,d)
                }
            },
    replace:function(d){
        d=a(d);
        this.insertBefore(d);
        d.remove();
        return this
        },
    replaceWith:function(d){
        var e=this;
        if(d.nodeType||d.dom||typeof d=="string"){
            d=c(d);
            e.dom.parentNode.insertBefore(d,e.dom)
            }else{
            d=b.insertBefore(e.dom,d)
            }
            delete Ext.elCache[e.id];
        Ext.removeNode(e.dom);
        e.id=Ext.id(e.dom=d);
        Ext.Element.addToCache(e.isFlyweight?new Ext.Element(e.dom):e);
        return e
        },
    createChild:function(e,d,g){
        e=e||{
            tag:"div"
        };

        return d?b.insertBefore(d,e,g!==true):b[!this.dom.firstChild?"overwrite":"append"](this.dom,e,g!==true)
        },
    wrap:function(d,e){
        var g=b.insertBefore(this.dom,d||{
            tag:"div"
        },!e);
        g.dom?g.dom.appendChild(this.dom):g.appendChild(this.dom);
        return g
        },
    insertHtml:function(e,g,d){
        var h=b.insertHtml(e,this.dom,g);
        return d?Ext.get(h):h
        }
    }
}());
Ext.apply(Ext.Element.prototype,function(){
    var c=Ext.getDom,a=Ext.get,b=Ext.DomHelper;
    return{
        insertSibling:function(i,g,h){
            var j=this,e,d=(g||"before").toLowerCase()=="after",k;
            if(Ext.isArray(i)){
                k=j;
                Ext.each(i,function(l){
                    e=Ext.fly(k,"_internal").insertSibling(l,g,h);
                    if(d){
                        k=e
                        }
                    });
            return e
            }
            i=i||{};

        if(i.nodeType||i.dom){
            e=j.dom.parentNode.insertBefore(c(i),d?j.dom.nextSibling:j.dom);
            if(!h){
                e=a(e)
                }
            }else{
        if(d&&!j.dom.nextSibling){
            e=b.append(j.dom.parentNode,i,!h)
            }else{
            e=b[d?"insertAfter":"insertBefore"](j.dom,i,!h)
            }
        }
    return e
}
}
}());
Ext.Element.addMethods(function(){
    var h={},y=/(-[a-z])/gi,b={},s=document.defaultView,u=Ext.isIE?"styleFloat":"cssFloat",D=/alpha\(opacity=(.*)\)/i,l=/^\s+|\s+$/g,B=Ext.Element,d="padding",c="margin",z="border",t="-left",q="-right",x="-top",o="-bottom",j="-width",r=Math,A="hidden",e="isClipped",k="overflow",n="overflow-x",m="overflow-y",C="originalClip",i={
        l:z+t+j,
        r:z+q+j,
        t:z+x+j,
        b:z+o+j
        },g={
        l:d+t,
        r:d+q,
        t:d+x,
        b:d+o
        },a={
        l:c+t,
        r:c+q,
        t:c+x,
        b:c+o
        },E=Ext.Element.data;
    function p(F,G){
        return G.charAt(1).toUpperCase()
        }
        function v(F){
        return h[F]||(h[F]=F=="float"?u:F.replace(y,p))
        }
        return{
        adjustWidth:function(F){
            var G=this;
            var H=Ext.isNumber(F);
            if(H&&G.autoBoxAdjust&&!G.isBorderBox()){
                F-=(G.getBorderWidth("lr")+G.getPadding("lr"))
                }
                return(H&&F<0)?0:F
            },
        adjustHeight:function(F){
            var G=this;
            var H=Ext.isNumber(F);
            if(H&&G.autoBoxAdjust&&!G.isBorderBox()){
                F-=(G.getBorderWidth("tb")+G.getPadding("tb"))
                }
                return(H&&F<0)?0:F
            },
        addClass:function(I){
            var J=this,H,F,G;
            I=Ext.isArray(I)?I:[I];
            for(H=0,F=I.length;H<F;H++){
                G=I[H];
                if(G){
                    J.dom.className+=(!J.hasClass(G)&&G?" "+G:"")
                    }
                }
            return J
        },
    radioClass:function(I){
        var J=this.dom.parentNode.childNodes,G;
        I=Ext.isArray(I)?I:[I];
        for(var H=0,F=J.length;H<F;H++){
            G=J[H];
            if(G&&G.nodeType==1){
                Ext.fly(G,"_internal").removeClass(I)
                }
            }
        return this.addClass(I)
    },
removeClass:function(I){
    var J=this,G;
    I=Ext.isArray(I)?I:[I];
    if(J.dom&&J.dom.className){
        for(var H=0,F=I.length;H<F;H++){
            G=I[H];
            if(G){
                J.dom.className=J.dom.className.replace(b[G]=b[G]||new RegExp("(?:^|\\s+)"+G+"(?:\\s+|$)","g")," ")
                }
            }
        }
    return J
},
toggleClass:function(F){
    return this.hasClass(F)?this.removeClass(F):this.addClass(F)
    },
hasClass:function(F){
    return F&&(" "+this.dom.className+" ").indexOf(" "+F+" ")!=-1
    },
replaceClass:function(G,F){
    return this.removeClass(G).addClass(F)
    },
isStyle:function(F,G){
    return this.getStyle(F)==G
    },
getStyle:function(){
    return s&&s.getComputedStyle?function(L){
        var I=this.dom,F,H,G,J,K=Ext.isWebKit,J;
        if(I==document){
            return null
            }
            L=v(L);
        if(K&&/marginRight/.test(L)){
            J=this.getStyle("display");
            I.style.display="inline-block"
            }
            G=(F=I.style[L])?F:(H=s.getComputedStyle(I,""))?H[L]:null;
        if(K){
            if(G=="rgba(0, 0, 0, 0)"){
                G="transparent"
                }else{
                if(J){
                    I.style.display=J
                    }
                }
        }
    return G
}:function(J){
    var H=this.dom,F,G;
    if(H==document){
        return null
        }
        if(J=="opacity"){
        if(H.style.filter.match){
            if(F=H.style.filter.match(D)){
                var I=parseFloat(F[1]);
                if(!isNaN(I)){
                    return I?I/100:0
                    }
                }
        }
    return 1
}
J=v(J);
return H.style[J]||((G=H.currentStyle)?G[J]:null)
}
}(),
getColor:function(F,G,K){
    var I=this.getStyle(F),H=Ext.isDefined(K)?K:"#",J;
    if(!I||/transparent|inherit/.test(I)){
        return G
        }
        if(/^r/.test(I)){
        Ext.each(I.slice(4,I.length-1).split(","),function(L){
            J=parseInt(L,10);
            H+=(J<16?"0":"")+J.toString(16)
            })
        }else{
        I=I.replace("#","");
        H+=I.length==3?I.replace(/^(\w)(\w)(\w)$/,"$1$1$2$2$3$3"):I
        }
        return(H.length>5?H.toLowerCase():G)
    },
setStyle:function(J,I){
    var G,H,F;
    if(!Ext.isObject(J)){
        G={};

        G[J]=I;
        J=G
        }
        for(H in J){
        I=J[H];
        H=="opacity"?this.setOpacity(I):this.dom.style[v(H)]=I
        }
        return this
    },
setOpacity:function(G,F){
    var J=this,H=J.dom.style;
    if(!F||!J.anim){
        if(Ext.isIE){
            var I=G<1?"alpha(opacity="+G*100+")":"",K=H.filter.replace(D,"").replace(l,"");
            H.zoom=1;
            H.filter=K+(K.length>0?" ":"")+I
            }else{
            H.opacity=G
            }
        }else{
    J.anim({
        opacity:{
            to:G
        }
    },J.preanim(arguments,1),null,0.35,"easeIn")
}
return J
},
clearOpacity:function(){
    var F=this.dom.style;
    if(Ext.isIE){
        if(!Ext.isEmpty(F.filter)){
            F.filter=F.filter.replace(D,"").replace(l,"")
            }
        }else{
    F.opacity=F["-moz-opacity"]=F["-khtml-opacity"]=""
    }
    return this
},
getHeight:function(H){
    var G=this,J=G.dom,I=Ext.isIE&&G.isStyle("display","none"),F=r.max(J.offsetHeight,I?0:J.clientHeight)||0;
    F=!H?F:F-G.getBorderWidth("tb")-G.getPadding("tb");
    return F<0?0:F
    },
getWidth:function(G){
    var H=this,J=H.dom,I=Ext.isIE&&H.isStyle("display","none"),F=r.max(J.offsetWidth,I?0:J.clientWidth)||0;
    F=!G?F:F-H.getBorderWidth("lr")-H.getPadding("lr");
    return F<0?0:F
    },
setWidth:function(G,F){
    var H=this;
    G=H.adjustWidth(G);
    !F||!H.anim?H.dom.style.width=H.addUnits(G):H.anim({
        width:{
            to:G
        }
    },H.preanim(arguments,1));
return H
},
setHeight:function(F,G){
    var H=this;
    F=H.adjustHeight(F);
    !G||!H.anim?H.dom.style.height=H.addUnits(F):H.anim({
        height:{
            to:F
        }
    },H.preanim(arguments,1));
return H
},
getBorderWidth:function(F){
    return this.addStyles(F,i)
    },
getPadding:function(F){
    return this.addStyles(F,g)
    },
clip:function(){
    var F=this,G=F.dom;
    if(!E(G,e)){
        E(G,e,true);
        E(G,C,{
            o:F.getStyle(k),
            x:F.getStyle(n),
            y:F.getStyle(m)
            });
        F.setStyle(k,A);
        F.setStyle(n,A);
        F.setStyle(m,A)
        }
        return F
    },
unclip:function(){
    var F=this,H=F.dom;
    if(E(H,e)){
        E(H,e,false);
        var G=E(H,C);
        if(G.o){
            F.setStyle(k,G.o)
            }
            if(G.x){
            F.setStyle(n,G.x)
            }
            if(G.y){
            F.setStyle(m,G.y)
            }
        }
    return F
},
addStyles:function(K,J){
    var L=0,G=K.match(/\w/g),I;
    for(var H=0,F=G.length;H<F;H++){
        I=G[H]&&parseInt(this.getStyle(J[G[H]]),10);
        if(I){
            L+=r.abs(I)
            }
        }
    return L
},
margins:a
}
}());
Ext.Element.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>';
Ext.Element.addMethods(function(){
    var a="_internal",b=/(\d+\.?\d+)px/;
    return{
        applyStyles:function(c){
            Ext.DomHelper.applyStyles(this.dom,c);
            return this
            },
        getStyles:function(){
            var c={};

            Ext.each(arguments,function(d){
                c[d]=this.getStyle(d)
                },this);
            return c
            },
        setOverflow:function(c){
            var d=this.dom;
            if(c=="auto"&&Ext.isMac&&Ext.isGecko2){
                d.style.overflow="hidden";
                (function(){
                    d.style.overflow="auto"
                    }).defer(1)
                }else{
                d.style.overflow=c
                }
            },
    boxWrap:function(c){
        c=c||"x-box";
        var d=Ext.get(this.insertHtml("beforeBegin","<div class='"+c+"'>"+String.format(Ext.Element.boxMarkup,c)+"</div>"));
        Ext.DomQuery.selectNode("."+c+"-mc",d.dom).appendChild(this.dom);
        return d
        },
    setSize:function(e,c,d){
        var g=this;
        if(Ext.isObject(e)){
            c=e.height;
            e=e.width
            }
            e=g.adjustWidth(e);
        c=g.adjustHeight(c);
        if(!d||!g.anim){
            g.dom.style.width=g.addUnits(e);
            g.dom.style.height=g.addUnits(c)
            }else{
            g.anim({
                width:{
                    to:e
                },
                height:{
                    to:c
                }
            },g.preanim(arguments,2))
        }
        return g
    },
getComputedHeight:function(){
    var d=this,c=Math.max(d.dom.offsetHeight,d.dom.clientHeight);
    if(!c){
        c=parseFloat(d.getStyle("height"))||0;
        if(!d.isBorderBox()){
            c+=d.getFrameWidth("tb")
            }
        }
    return c
},
getComputedWidth:function(){
    var c=Math.max(this.dom.offsetWidth,this.dom.clientWidth);
    if(!c){
        c=parseFloat(this.getStyle("width"))||0;
        if(!this.isBorderBox()){
            c+=this.getFrameWidth("lr")
            }
        }
    return c
},
getFrameWidth:function(d,c){
    return c&&this.isBorderBox()?0:(this.getPadding(d)+this.getBorderWidth(d))
    },
addClassOnOver:function(c){
    this.hover(function(){
        Ext.fly(this,a).addClass(c)
        },function(){
        Ext.fly(this,a).removeClass(c)
        });
    return this
    },
addClassOnFocus:function(c){
    this.on("focus",function(){
        Ext.fly(this,a).addClass(c)
        },this.dom);
    this.on("blur",function(){
        Ext.fly(this,a).removeClass(c)
        },this.dom);
    return this
    },
addClassOnClick:function(c){
    var d=this.dom;
    this.on("mousedown",function(){
        Ext.fly(d,a).addClass(c);
        var g=Ext.getDoc(),e=function(){
            Ext.fly(d,a).removeClass(c);
            g.removeListener("mouseup",e)
            };

        g.on("mouseup",e)
        });
    return this
    },
getViewSize:function(){
    var g=document,h=this.dom,c=(h==g||h==g.body);
    if(c){
        var e=Ext.lib.Dom;
        return{
            width:e.getViewWidth(),
            height:e.getViewHeight()
            }
        }else{
    return{
        width:h.clientWidth,
        height:h.clientHeight
        }
    }
},
getStyleSize:function(){
    var j=this,c,i,l=document,m=this.dom,e=(m==l||m==l.body),g=m.style;
    if(e){
        var k=Ext.lib.Dom;
        return{
            width:k.getViewWidth(),
            height:k.getViewHeight()
            }
        }
    if(g.width&&g.width!="auto"){
    c=parseFloat(g.width);
    if(j.isBorderBox()){
        c-=j.getFrameWidth("lr")
        }
    }
if(g.height&&g.height!="auto"){
    i=parseFloat(g.height);
    if(j.isBorderBox()){
        i-=j.getFrameWidth("tb")
        }
    }
return{
    width:c||j.getWidth(true),
    height:i||j.getHeight(true)
    }
},
getSize:function(c){
    return{
        width:this.getWidth(c),
        height:this.getHeight(c)
        }
    },
repaint:function(){
    var c=this.dom;
    this.addClass("x-repaint");
    setTimeout(function(){
        Ext.fly(c).removeClass("x-repaint")
        },1);
    return this
    },
unselectable:function(){
    this.dom.unselectable="on";
    return this.swallowEvent("selectstart",true).applyStyles("-moz-user-select:none;-khtml-user-select:none;").addClass("x-unselectable")
    },
getMargins:function(d){
    var e=this,c,g={
        t:"top",
        l:"left",
        r:"right",
        b:"bottom"
    },h={};

    if(!d){
        for(c in e.margins){
            h[g[c]]=parseFloat(e.getStyle(e.margins[c]))||0
            }
            return h
        }else{
        return e.addStyles.call(e,d,e.margins)
        }
    }
}
}());
(function(){
    var a=Ext.lib.Dom,b="left",g="right",d="top",i="bottom",h="position",c="static",e="relative",j="auto",k="z-index";
    Ext.Element.addMethods({
        getX:function(){
            return a.getX(this.dom)
            },
        getY:function(){
            return a.getY(this.dom)
            },
        getXY:function(){
            return a.getXY(this.dom)
            },
        getOffsetsTo:function(l){
            var n=this.getXY(),m=Ext.fly(l,"_internal").getXY();
            return[n[0]-m[0],n[1]-m[1]]
            },
        setX:function(l,m){
            return this.setXY([l,this.getY()],this.animTest(arguments,m,1))
            },
        setY:function(m,l){
            return this.setXY([this.getX(),m],this.animTest(arguments,l,1))
            },
        setLeft:function(l){
            this.setStyle(b,this.addUnits(l));
            return this
            },
        setTop:function(l){
            this.setStyle(d,this.addUnits(l));
            return this
            },
        setRight:function(l){
            this.setStyle(g,this.addUnits(l));
            return this
            },
        setBottom:function(l){
            this.setStyle(i,this.addUnits(l));
            return this
            },
        setXY:function(n,l){
            var m=this;
            if(!l||!m.anim){
                a.setXY(m.dom,n)
                }else{
                m.anim({
                    points:{
                        to:n
                    }
                },m.preanim(arguments,1),"motion")
            }
            return m
        },
    setLocation:function(l,n,m){
        return this.setXY([l,n],this.animTest(arguments,m,2))
        },
    moveTo:function(l,n,m){
        return this.setXY([l,n],this.animTest(arguments,m,2))
        },
    getLeft:function(l){
        return !l?this.getX():parseInt(this.getStyle(b),10)||0
        },
    getRight:function(l){
        var m=this;
        return !l?m.getX()+m.getWidth():(m.getLeft(true)+m.getWidth())||0
        },
    getTop:function(l){
        return !l?this.getY():parseInt(this.getStyle(d),10)||0
        },
    getBottom:function(l){
        var m=this;
        return !l?m.getY()+m.getHeight():(m.getTop(true)+m.getHeight())||0
        },
    position:function(p,o,l,n){
        var m=this;
        if(!p&&m.isStyle(h,c)){
            m.setStyle(h,e)
            }else{
            if(p){
                m.setStyle(h,p)
                }
            }
        if(o){
        m.setStyle(k,o)
        }
        if(l||n){
        m.setXY([l||false,n||false])
        }
    },
clearPositioning:function(l){
    l=l||"";
    this.setStyle({
        left:l,
        right:l,
        top:l,
        bottom:l,
        "z-index":"",
        position:c
    });
    return this
    },
getPositioning:function(){
    var m=this.getStyle(b);
    var n=this.getStyle(d);
    return{
        position:this.getStyle(h),
        left:m,
        right:m?"":this.getStyle(g),
        top:n,
        bottom:n?"":this.getStyle(i),
        "z-index":this.getStyle(k)
        }
    },
setPositioning:function(l){
    var n=this,m=n.dom.style;
    n.setStyle(l);
    if(l.right==j){
        m.right=""
        }
        if(l.bottom==j){
        m.bottom=""
        }
        return n
    },
translatePoints:function(m,u){
    u=isNaN(m[1])?u:m[1];
    m=isNaN(m[0])?m:m[0];
    var q=this,r=q.isStyle(h,e),s=q.getXY(),n=parseInt(q.getStyle(b),10),p=parseInt(q.getStyle(d),10);
    n=!isNaN(n)?n:(r?0:q.dom.offsetLeft);
    p=!isNaN(p)?p:(r?0:q.dom.offsetTop);
    return{
        left:(m-s[0]+n),
        top:(u-s[1]+p)
        }
    },
animTest:function(m,l,n){
    return !!l&&this.preanim?this.preanim(m,n):false
    }
})
})();
Ext.Element.addMethods({
    setBox:function(e,g,b){
        var d=this,a=e.width,c=e.height;
        if((g&&!d.autoBoxAdjust)&&!d.isBorderBox()){
            a-=(d.getBorderWidth("lr")+d.getPadding("lr"));
            c-=(d.getBorderWidth("tb")+d.getPadding("tb"))
            }
            d.setBounds(e.x,e.y,a,c,d.animTest.call(d,arguments,b,2));
        return d
        },
    getBox:function(j,p){
        var m=this,v,e,o,d=m.getBorderWidth,q=m.getPadding,g,a,u,n;
        if(!p){
            v=m.getXY()
            }else{
            e=parseInt(m.getStyle("left"),10)||0;
            o=parseInt(m.getStyle("top"),10)||0;
            v=[e,o]
            }
            var c=m.dom,s=c.offsetWidth,i=c.offsetHeight,k;
        if(!j){
            k={
                x:v[0],
                y:v[1],
                0:v[0],
                1:v[1],
                width:s,
                height:i
            }
        }else{
        g=d.call(m,"l")+q.call(m,"l");
        a=d.call(m,"r")+q.call(m,"r");
        u=d.call(m,"t")+q.call(m,"t");
        n=d.call(m,"b")+q.call(m,"b");
        k={
            x:v[0]+g,
            y:v[1]+u,
            0:v[0]+g,
            1:v[1]+u,
            width:s-(g+a),
            height:i-(u+n)
            }
        }
    k.right=k.x+k.width;
k.bottom=k.y+k.height;
return k
},
move:function(j,b,c){
    var g=this,m=g.getXY(),k=m[0],i=m[1],d=[k-b,i],l=[k+b,i],h=[k,i-b],a=[k,i+b],e={
        l:d,
        left:d,
        r:l,
        right:l,
        t:h,
        top:h,
        up:h,
        b:a,
        bottom:a,
        down:a
    };

    j=j.toLowerCase();
    g.moveTo(e[j][0],e[j][1],g.animTest.call(g,arguments,c,2))
    },
setLeftTop:function(d,c){
    var b=this,a=b.dom.style;
    a.left=b.addUnits(d);
    a.top=b.addUnits(c);
    return b
    },
getRegion:function(){
    return Ext.lib.Dom.getRegion(this.dom)
    },
setBounds:function(b,g,d,a,c){
    var e=this;
    if(!c||!e.anim){
        e.setSize(d,a);
        e.setLocation(b,g)
        }else{
        e.anim({
            points:{
                to:[b,g]
                },
            width:{
                to:e.adjustWidth(d)
                },
            height:{
                to:e.adjustHeight(a)
                }
            },e.preanim(arguments,4),"motion")
    }
    return e
},
setRegion:function(b,a){
    return this.setBounds(b.left,b.top,b.right-b.left,b.bottom-b.top,this.animTest.call(this,arguments,a,1))
    }
});
Ext.Element.addMethods({
    isScrollable:function(){
        var a=this.dom;
        return a.scrollHeight>a.clientHeight||a.scrollWidth>a.clientWidth
        },
    scrollTo:function(a,b){
        this.dom["scroll"+(/top/i.test(a)?"Top":"Left")]=b;
        return this
        },
    getScroll:function(){
        var i=this.dom,h=document,a=h.body,c=h.documentElement,b,g,e;
        if(i==h||i==a){
            if(Ext.isIE&&Ext.isStrict){
                b=c.scrollLeft;
                g=c.scrollTop
                }else{
                b=window.pageXOffset;
                g=window.pageYOffset
                }
                e={
                left:b||(a?a.scrollLeft:0),
                top:g||(a?a.scrollTop:0)
                }
            }else{
        e={
            left:i.scrollLeft,
            top:i.scrollTop
            }
        }
    return e
}
});
Ext.Element.addMethods({
    scrollTo:function(b,d,a){
        var e=/top/i.test(b),c=this,g=c.dom,h;
        if(!a||!c.anim){
            h="scroll"+(e?"Top":"Left"),g[h]=d
            }else{
            h="scroll"+(e?"Left":"Top"),c.anim({
                scroll:{
                    to:e?[g[h],d]:[d,g[h]]
                    }
                },c.preanim(arguments,2),"scroll")
        }
        return c
    },
scrollIntoView:function(e,i){
    var p=Ext.getDom(e)||Ext.getBody().dom,h=this.dom,g=this.getOffsetsTo(p),k=g[0]+p.scrollLeft,u=g[1]+p.scrollTop,q=u+h.offsetHeight,d=k+h.offsetWidth,a=p.clientHeight,m=parseInt(p.scrollTop,10),s=parseInt(p.scrollLeft,10),j=m+a,n=s+p.clientWidth;
    if(h.offsetHeight>a||u<m){
        p.scrollTop=u
        }else{
        if(q>j){
            p.scrollTop=q-a
            }
        }
    p.scrollTop=p.scrollTop;
if(i!==false){
    if(h.offsetWidth>p.clientWidth||k<s){
        p.scrollLeft=k
        }else{
        if(d>n){
            p.scrollLeft=d-p.clientWidth
            }
        }
    p.scrollLeft=p.scrollLeft
}
return this
},
scrollChildIntoView:function(b,a){
    Ext.fly(b,"_scrollChildIntoView").scrollIntoView(this,a)
    },
scroll:function(m,b,d){
    if(!this.isScrollable()){
        return
    }
    var e=this.dom,g=e.scrollLeft,p=e.scrollTop,n=e.scrollWidth,k=e.scrollHeight,i=e.clientWidth,a=e.clientHeight,c=false,o,j={
        l:Math.min(g+b,n-i),
        r:o=Math.max(g-b,0),
        t:Math.max(p-b,0),
        b:Math.min(p+b,k-a)
        };

    j.d=j.b;
    j.u=j.t;
    m=m.substr(0,1);
    if((o=j[m])>-1){
        c=true;
        this.scrollTo(m=="l"||m=="r"?"left":"top",o,this.preanim(arguments,2))
        }
        return c
    }
});
Ext.Element.VISIBILITY=1;
Ext.Element.DISPLAY=2;
Ext.Element.addMethods(function(){
    var h="visibility",d="display",b="hidden",k="offsets",j="none",a="originalDisplay",c="visibilityMode",e=Ext.Element.DISPLAY,g=Ext.Element.data,i=function(n){
        var m=g(n,a);
        if(m===undefined){
            g(n,a,m="")
            }
            return m
        },l=function(o){
        var n=g(o,c);
        if(n===undefined){
            g(o,c,n=1)
            }
            return n
        };

    return{
        originalDisplay:"",
        visibilityMode:1,
        setVisibilityMode:function(m){
            g(this.dom,c,m);
            return this
            },
        animate:function(n,p,o,q,m){
            this.anim(n,{
                duration:p,
                callback:o,
                easing:q
            },m);
            return this
            },
        anim:function(p,q,n,s,o,m){
            n=n||"run";
            q=q||{};

            var r=this,t=Ext.lib.Anim[n](r.dom,p,(q.duration||s)||0.35,(q.easing||o)||"easeOut",function(){
                if(m){
                    m.call(r)
                    }
                    if(q.callback){
                    q.callback.call(q.scope||r,r,q)
                    }
                },r);
        q.anim=t;
        return t
        },
    preanim:function(m,n){
        return !m[n]?false:(Ext.isObject(m[n])?m[n]:{
            duration:m[n+1],
            callback:m[n+2],
            easing:m[n+3]
            })
        },
    isVisible:function(){
        return !this.isStyle(h,b)&&!this.isStyle(d,j)
        },
    setVisible:function(r,o){
        var p=this,n,m,s,q=p.dom;
        if(Ext.isString(o)){
            n=o==d;
            m=o==h;
            s=o==k;
            o=false
            }else{
            n=l(this.dom)==e;
            m=!n
            }
            if(!o||!p.anim){
            if(n){
                p.setDisplayed(r)
                }else{
                if(s){
                    if(!r){
                        p.hideModeStyles={
                            position:p.getStyle("position"),
                            top:p.getStyle("top"),
                            left:p.getStyle("left")
                            };

                        p.applyStyles({
                            position:"absolute",
                            top:"-10000px",
                            left:"-10000px"
                        })
                        }else{
                        p.applyStyles(p.hideModeStyles||{
                            position:"",
                            top:"",
                            left:""
                        })
                        }
                    }else{
                p.fixDisplay();
                q.style.visibility=r?"visible":b
                }
            }
    }else{
    if(r){
        p.setOpacity(0.01);
        p.setVisible(true)
        }
        p.anim({
        opacity:{
            to:(r?1:0)
            }
        },p.preanim(arguments,1),null,0.35,"easeIn",function(){
        if(!r){
            q.style[n?d:h]=(n)?j:b;
            Ext.fly(q).setOpacity(1)
            }
        })
}
return p
},
toggle:function(m){
    var n=this;
    n.setVisible(!n.isVisible(),n.preanim(arguments,0));
    return n
    },
setDisplayed:function(m){
    if(typeof m=="boolean"){
        m=m?i(this.dom):j
        }
        this.setStyle(d,m);
    return this
    },
fixDisplay:function(){
    var m=this;
    if(m.isStyle(d,j)){
        m.setStyle(h,b);
        m.setStyle(d,i(this.dom));
        if(m.isStyle(d,j)){
            m.setStyle(d,"block")
            }
        }
},
hide:function(m){
    if(Ext.isString(m)){
        this.setVisible(false,m);
        return this
        }
        this.setVisible(false,this.preanim(arguments,0));
    return this
    },
show:function(m){
    if(Ext.isString(m)){
        this.setVisible(true,m);
        return this
        }
        this.setVisible(true,this.preanim(arguments,0));
    return this
    }
}
}());
Ext.Element.addMethods(function(){
    var d="visibility",b="display",a="hidden",h="none",c="x-masked",g="x-masked-relative",e=Ext.Element.data;
    return{
        isVisible:function(i){
            var j=!this.isStyle(d,a)&&!this.isStyle(b,h),k=this.dom.parentNode;
            if(i!==true||!j){
                return j
                }while(k&&!/^body/i.test(k.tagName)){
                if(!Ext.fly(k,"_isVisible").isVisible()){
                    return false
                    }
                    k=k.parentNode
                }
                return true
            },
        isDisplayed:function(){
            return !this.isStyle(b,h)
            },
        enableDisplayMode:function(i){
            this.setVisibilityMode(Ext.Element.DISPLAY);
            if(!Ext.isEmpty(i)){
                e(this.dom,"originalDisplay",i)
                }
                return this
            },
        mask:function(j,n){
            var p=this,l=p.dom,o=Ext.DomHelper,m="ext-el-mask-msg",i,q;
            if(!/^body/i.test(l.tagName)&&p.getStyle("position")=="static"){
                p.addClass(g)
                }
                if((i=e(l,"maskMsg"))){
                i.remove()
                }
                if((i=e(l,"mask"))){
                i.remove()
                }
                q=o.append(l,{
                cls:"ext-el-mask"
            },true);
            e(l,"mask",q);
            p.addClass(c);
            q.setDisplayed(true);
            if(typeof j=="string"){
                var k=o.append(l,{
                    cls:m,
                    cn:{
                        tag:"div"
                    }
                },true);
            e(l,"maskMsg",k);
            k.dom.className=n?m+" "+n:m;
            k.dom.firstChild.innerHTML=j;
            k.setDisplayed(true);
            k.center(p)
            }
            if(Ext.isIE&&!(Ext.isIE7&&Ext.isStrict)&&p.getStyle("height")=="auto"){
            q.setSize(undefined,p.getHeight())
            }
            return q
        },
    unmask:function(){
        var k=this,l=k.dom,i=e(l,"mask"),j=e(l,"maskMsg");
        if(i){
            if(j){
                j.remove();
                e(l,"maskMsg",undefined)
                }
                i.remove();
            e(l,"mask",undefined)
            }
            k.removeClass([c,g])
        },
    isMasked:function(){
        var i=e(this.dom,"mask");
        return i&&i.isVisible()
        },
    createShim:function(){
        var i=document.createElement("iframe"),j;
        i.frameBorder="0";
        i.className="ext-shim";
        i.src=Ext.SSL_SECURE_URL;
        j=Ext.get(this.dom.parentNode.insertBefore(i,this.dom));
        j.autoBoxAdjust=false;
        return j
        }
    }
}());
Ext.Element.addMethods({
    addKeyListener:function(b,d,c){
        var a;
        if(!Ext.isObject(b)||Ext.isArray(b)){
            a={
                key:b,
                fn:d,
                scope:c
            }
        }else{
        a={
            key:b.key,
            shift:b.shift,
            ctrl:b.ctrl,
            alt:b.alt,
            fn:d,
            scope:c
        }
    }
    return new Ext.KeyMap(this,a)
    },
addKeyMap:function(a){
    return new Ext.KeyMap(this,a)
    }
});
(function(){
    var z=null,B=undefined,k=true,t=false,j="setX",h="setY",a="setXY",n="left",l="bottom",s="top",m="right",q="height",g="width",i="points",x="hidden",A="absolute",u="visible",e="motion",o="position",r="easeOut",d=new Ext.Element.Flyweight(),v={},y=function(C){
        return C||{}
    },p=function(C){
    d.dom=C;
    d.id=Ext.id(C);
    return d
    },c=function(C){
    if(!v[C]){
        v[C]=[]
        }
        return v[C]
    },b=function(D,C){
    v[D]=C
    };

Ext.enableFx=k;
Ext.Fx={
    switchStatements:function(D,E,C){
        return E.apply(this,C[D])
        },
    slideIn:function(I,F){
        F=y(F);
        var K=this,H=K.dom,N=H.style,P,C,M,E,D,N,J,O,L,G;
        I=I||"t";
        K.queueFx(F,function(){
            P=p(H).getXY();
            p(H).fixDisplay();
            C=p(H).getFxRestore();
            M={
                x:P[0],
                y:P[1],
                0:P[0],
                1:P[1],
                width:H.offsetWidth,
                height:H.offsetHeight
                };

            M.right=M.x+M.width;
            M.bottom=M.y+M.height;
            p(H).setWidth(M.width).setHeight(M.height);
            E=p(H).fxWrap(C.pos,F,x);
            N.visibility=u;
            N.position=A;
            function Q(){
                p(H).fxUnwrap(E,C.pos,F);
                N.width=C.width;
                N.height=C.height;
                p(H).afterFx(F)
                }
                O={
                to:[M.x,M.y]
                };

            L={
                to:M.width
                };

            G={
                to:M.height
                };

            function R(V,S,W,T,Y,aa,ad,ac,ab,X,U){
                var Z={};

                p(V).setWidth(W).setHeight(T);
                if(p(V)[Y]){
                    p(V)[Y](aa)
                    }
                    S[ad]=S[ac]="0";
                if(ab){
                    Z.width=ab
                    }
                    if(X){
                    Z.height=X
                    }
                    if(U){
                    Z.points=U
                    }
                    return Z
                }
                J=p(H).switchStatements(I.toLowerCase(),R,{
                t:[E,N,M.width,0,z,z,n,l,z,G,z],
                l:[E,N,0,M.height,z,z,m,s,L,z,z],
                r:[E,N,M.width,M.height,j,M.right,n,s,z,z,O],
                b:[E,N,M.width,M.height,h,M.bottom,n,s,z,G,O],
                tl:[E,N,0,0,z,z,m,l,L,G,O],
                bl:[E,N,0,0,h,M.y+M.height,m,s,L,G,O],
                br:[E,N,0,0,a,[M.right,M.bottom],n,s,L,G,O],
                tr:[E,N,0,0,j,M.x+M.width,n,l,L,G,O]
                });
            N.visibility=u;
            p(E).show();
            arguments.callee.anim=p(E).fxanim(J,F,e,0.5,r,Q)
            });
        return K
        },
    slideOut:function(G,E){
        E=y(E);
        var I=this,F=I.dom,L=F.style,M=I.getXY(),D,C,J,K,H={
            to:0
        };

        G=G||"t";
        I.queueFx(E,function(){
            C=p(F).getFxRestore();
            J={
                x:M[0],
                y:M[1],
                0:M[0],
                1:M[1],
                width:F.offsetWidth,
                height:F.offsetHeight
                };

            J.right=J.x+J.width;
            J.bottom=J.y+J.height;
            p(F).setWidth(J.width).setHeight(J.height);
            D=p(F).fxWrap(C.pos,E,u);
            L.visibility=u;
            L.position=A;
            p(D).setWidth(J.width).setHeight(J.height);
            function N(){
                E.useDisplay?p(F).setDisplayed(t):p(F).hide();
                p(F).fxUnwrap(D,C.pos,E);
                L.width=C.width;
                L.height=C.height;
                p(F).afterFx(E)
                }
                function O(P,X,V,Y,T,W,S,U,R){
                var Q={};

                P[X]=P[V]="0";
                Q[Y]=T;
                if(W){
                    Q[W]=S
                    }
                    if(U){
                    Q[U]=R
                    }
                    return Q
                }
                K=p(F).switchStatements(G.toLowerCase(),O,{
                t:[L,n,l,q,H],
                l:[L,m,s,g,H],
                r:[L,n,s,g,H,i,{
                    to:[J.right,J.y]
                    }],
                b:[L,n,s,q,H,i,{
                    to:[J.x,J.bottom]
                    }],
                tl:[L,m,l,g,H,q,H],
                bl:[L,m,s,g,H,q,H,i,{
                    to:[J.x,J.bottom]
                    }],
                br:[L,n,s,g,H,q,H,i,{
                    to:[J.x+J.width,J.bottom]
                    }],
                tr:[L,n,l,g,H,q,H,i,{
                    to:[J.right,J.y]
                    }]
                });
            arguments.callee.anim=p(D).fxanim(K,E,e,0.5,r,N)
            });
        return I
        },
    puff:function(I){
        I=y(I);
        var G=this,H=G.dom,D=H.style,E,C,F;
        G.queueFx(I,function(){
            E=p(H).getWidth();
            C=p(H).getHeight();
            p(H).clearOpacity();
            p(H).show();
            F=p(H).getFxRestore();
            function J(){
                I.useDisplay?p(H).setDisplayed(t):p(H).hide();
                p(H).clearOpacity();
                p(H).setPositioning(F.pos);
                D.width=F.width;
                D.height=F.height;
                D.fontSize="";
                p(H).afterFx(I)
                }
                arguments.callee.anim=p(H).fxanim({
                width:{
                    to:p(H).adjustWidth(E*2)
                    },
                height:{
                    to:p(H).adjustHeight(C*2)
                    },
                points:{
                    by:[-E*0.5,-C*0.5]
                    },
                opacity:{
                    to:0
                },
                fontSize:{
                    to:200,
                    unit:"%"
                }
            },I,e,0.5,r,J)
        });
    return G
    },
switchOff:function(G){
    G=y(G);
    var E=this,F=E.dom,C=F.style,D;
    E.queueFx(G,function(){
        p(F).clearOpacity();
        p(F).clip();
        D=p(F).getFxRestore();
        function H(){
            G.useDisplay?p(F).setDisplayed(t):p(F).hide();
            p(F).clearOpacity();
            p(F).setPositioning(D.pos);
            C.width=D.width;
            C.height=D.height;
            p(F).afterFx(G)
            }
            p(F).fxanim({
            opacity:{
                to:0.3
            }
        },z,z,0.1,z,function(){
            p(F).clearOpacity();
            (function(){
                p(F).fxanim({
                    height:{
                        to:1
                    },
                    points:{
                        by:[0,p(F).getHeight()*0.5]
                        }
                    },G,e,0.3,"easeIn",H)
            }).defer(100)
        })
    });
return E
},
highlight:function(E,I){
    I=y(I);
    var G=this,H=G.dom,C=I.attr||"backgroundColor",D={},F;
    G.queueFx(I,function(){
        p(H).clearOpacity();
        p(H).show();
        function J(){
            H.style[C]=F;
            p(H).afterFx(I)
            }
            F=H.style[C];
        D[C]={
            from:E||"ffff9c",
            to:I.endColor||p(H).getColor(C)||"ffffff"
            };

        arguments.callee.anim=p(H).fxanim(D,I,"color",1,"easeIn",J)
        });
    return G
    },
frame:function(C,F,I){
    I=y(I);
    var E=this,H=E.dom,D,G;
    E.queueFx(I,function(){
        C=C||"#C3DAF9";
        if(C.length==6){
            C="#"+C
            }
            F=F||1;
        p(H).show();
        var M=p(H).getXY(),K={
            x:M[0],
            y:M[1],
            0:M[0],
            1:M[1],
            width:H.offsetWidth,
            height:H.offsetHeight
            },J=function(){
            D=p(document.body||document.documentElement).createChild({
                style:{
                    position:A,
                    "z-index":35000,
                    border:"0px solid "+C
                    }
                });
        return D.queueFx({},L)
        };

    arguments.callee.anim={
        isAnimated:true,
        stop:function(){
            F=0;
            D.stopFx()
            }
        };

    function L(){
        var N=Ext.isBorderBox?2:1;
        G=D.anim({
            top:{
                from:K.y,
                to:K.y-20
                },
            left:{
                from:K.x,
                to:K.x-20
                },
            borderWidth:{
                from:0,
                to:10
            },
            opacity:{
                from:1,
                to:0
            },
            height:{
                from:K.height,
                to:K.height+20*N
                },
            width:{
                from:K.width,
                to:K.width+20*N
                }
            },{
            duration:I.duration||1,
            callback:function(){
                D.remove();
                --F>0?J():p(H).afterFx(I)
                }
            });
arguments.callee.anim={
    isAnimated:true,
    stop:function(){
        G.stop()
        }
    }
}
J()
});
return E
},
pause:function(E){
    var D=this.dom,C;
    this.queueFx({},function(){
        C=setTimeout(function(){
            p(D).afterFx({})
            },E*1000);
        arguments.callee.anim={
            isAnimated:true,
            stop:function(){
                clearTimeout(C);
                p(D).afterFx({})
                }
            }
    });
return this
},
fadeIn:function(E){
    E=y(E);
    var C=this,D=C.dom,F=E.endOpacity||1;
    C.queueFx(E,function(){
        p(D).setOpacity(0);
        p(D).fixDisplay();
        D.style.visibility=u;
        arguments.callee.anim=p(D).fxanim({
            opacity:{
                to:F
            }
        },E,z,0.5,r,function(){
            if(F==1){
                p(D).clearOpacity()
                }
                p(D).afterFx(E)
            })
    });
return C
},
fadeOut:function(F){
    F=y(F);
    var D=this,E=D.dom,C=E.style,G=F.endOpacity||0;
    D.queueFx(F,function(){
        arguments.callee.anim=p(E).fxanim({
            opacity:{
                to:G
            }
        },F,z,0.5,r,function(){
            if(G==0){
                Ext.Element.data(E,"visibilityMode")==Ext.Element.DISPLAY||F.useDisplay?C.display="none":C.visibility=x;
                p(E).clearOpacity()
                }
                p(E).afterFx(F)
            })
    });
return D
},
scale:function(C,D,E){
    this.shift(Ext.apply({},E,{
        width:C,
        height:D
    }));
    return this
    },
shift:function(E){
    E=y(E);
    var D=this.dom,C={};

    this.queueFx(E,function(){
        for(var F in E){
            if(E[F]!=B){
                C[F]={
                    to:E[F]
                    }
                }
        }
        C.width?C.width.to=p(D).adjustWidth(E.width):C;
    C.height?C.height.to=p(D).adjustWidth(E.height):C;
    if(C.x||C.y||C.xy){
        C.points=C.xy||{
            to:[C.x?C.x.to:p(D).getX(),C.y?C.y.to:p(D).getY()]
            }
        }
    arguments.callee.anim=p(D).fxanim(C,E,e,0.35,r,function(){
    p(D).afterFx(E)
    })
});
return this
},
ghost:function(F,D){
    D=y(D);
    var H=this,E=H.dom,K=E.style,I={
        opacity:{
            to:0
        },
        points:{}
},L=I.points,C,J,G;
F=F||"b";
H.queueFx(D,function(){
    C=p(E).getFxRestore();
    J=p(E).getWidth();
    G=p(E).getHeight();
    function M(){
        D.useDisplay?p(E).setDisplayed(t):p(E).hide();
        p(E).clearOpacity();
        p(E).setPositioning(C.pos);
        K.width=C.width;
        K.height=C.height;
        p(E).afterFx(D)
        }
        L.by=p(E).switchStatements(F.toLowerCase(),function(O,N){
        return[O,N]
        },{
        t:[0,-G],
        l:[-J,0],
        r:[J,0],
        b:[0,G],
        tl:[-J,-G],
        bl:[-J,G],
        br:[J,G],
        tr:[J,-G]
        });
    arguments.callee.anim=p(E).fxanim(I,D,e,0.5,r,M)
    });
return H
},
syncFx:function(){
    var C=this;
    C.fxDefaults=Ext.apply(C.fxDefaults||{},{
        block:t,
        concurrent:k,
        stopFx:t
    });
    return C
    },
sequenceFx:function(){
    var C=this;
    C.fxDefaults=Ext.apply(C.fxDefaults||{},{
        block:t,
        concurrent:t,
        stopFx:t
    });
    return C
    },
nextFx:function(){
    var C=c(this.dom.id)[0];
    if(C){
        C.call(this)
        }
    },
hasActiveFx:function(){
    return c(this.dom.id)[0]
    },
stopFx:function(C){
    var D=this,F=D.dom.id;
    if(D.hasActiveFx()){
        var E=c(F)[0];
        if(E&&E.anim){
            if(E.anim.isAnimated){
                b(F,[E]);
                E.anim.stop(C!==undefined?C:k)
                }else{
                b(F,[])
                }
            }
    }
return D
},
beforeFx:function(C){
    if(this.hasActiveFx()&&!C.concurrent){
        if(C.stopFx){
            this.stopFx();
            return k
            }
            return t
        }
        return k
    },
hasFxBlock:function(){
    var C=c(this.dom.id);
    return C&&C[0]&&C[0].block
    },
queueFx:function(F,C){
    var D=p(this.dom);
    if(!D.hasFxBlock()){
        Ext.applyIf(F,D.fxDefaults);
        if(!F.concurrent){
            var E=D.beforeFx(F);
            C.block=F.block;
            c(D.dom.id).push(C);
            if(E){
                D.nextFx()
                }
            }else{
        C.call(D)
        }
    }
return D
},
fxWrap:function(I,G,E){
    var F=this.dom,D,C;
    if(!G.wrap||!(D=Ext.getDom(G.wrap))){
        if(G.fixPosition){
            C=p(F).getXY()
            }
            var H=document.createElement("div");
        H.style.visibility=E;
        D=F.parentNode.insertBefore(H,F);
        p(D).setPositioning(I);
        if(p(D).isStyle(o,"static")){
            p(D).position("relative")
            }
            p(F).clearPositioning("auto");
        p(D).clip();
        D.appendChild(F);
        if(C){
            p(D).setXY(C)
            }
        }
    return D
},
fxUnwrap:function(D,G,F){
    var E=this.dom;
    p(E).clearPositioning();
    p(E).setPositioning(G);
    if(!F.wrap){
        var C=p(D).dom.parentNode;
        C.insertBefore(E,D);
        p(D).remove()
        }
    },
getFxRestore:function(){
    var C=this.dom.style;
    return{
        pos:this.getPositioning(),
        width:C.width,
        height:C.height
        }
    },
afterFx:function(D){
    var C=this.dom,E=C.id;
    if(D.afterStyle){
        p(C).setStyle(D.afterStyle)
        }
        if(D.afterCls){
        p(C).addClass(D.afterCls)
        }
        if(D.remove==k){
        p(C).remove()
        }
        if(D.callback){
        D.callback.call(D.scope,p(C))
        }
        if(!D.concurrent){
        c(E).shift();
        p(C).nextFx()
        }
    },
fxanim:function(F,G,D,H,E,C){
    D=D||"run";
    G=G||{};

    var I=Ext.lib.Anim[D](this.dom,F,(G.duration||H)||0.35,(G.easing||E)||r,C,this);
    G.anim=I;
    return I
    }
};

Ext.Fx.resize=Ext.Fx.scale;
Ext.Element.addMethods(Ext.Fx)
})();
Ext.CompositeElementLite=function(b,a){
    this.elements=[];
    this.add(b,a);
    this.el=new Ext.Element.Flyweight()
    };

Ext.CompositeElementLite.prototype={
    isComposite:true,
    getElement:function(a){
        var b=this.el;
        b.dom=a;
        b.id=a.id;
        return b
        },
    transformElement:function(a){
        return Ext.getDom(a)
        },
    getCount:function(){
        return this.elements.length
        },
    add:function(d,b){
        var e=this,g=e.elements;
        if(!d){
            return this
            }
            if(Ext.isString(d)){
            d=Ext.Element.selectorFunction(d,b)
            }else{
            if(d.isComposite){
                d=d.elements
                }else{
                if(!Ext.isIterable(d)){
                    d=[d]
                    }
                }
        }
    for(var c=0,a=d.length;c<a;++c){
    g.push(e.transformElement(d[c]))
    }
    return e
},
invoke:function(g,b){
    var h=this,d=h.elements,a=d.length,j,c;
    for(c=0;c<a;c++){
        j=d[c];
        if(j){
            Ext.Element.prototype[g].apply(h.getElement(j),b)
            }
        }
    return h
},
item:function(b){
    var d=this,c=d.elements[b],a=null;
    if(c){
        a=d.getElement(c)
        }
        return a
    },
addListener:function(b,j,h,g){
    var d=this.elements,a=d.length,c,k;
    for(c=0;c<a;c++){
        k=d[c];
        if(k){
            Ext.EventManager.on(k,b,j,h||k,g)
            }
        }
    return this
},
each:function(g,d){
    var h=this,c=h.elements,a=c.length,b,j;
    for(b=0;b<a;b++){
        j=c[b];
        if(j){
            j=this.getElement(j);
            if(g.call(d||j,j,h,b)===false){
                break
            }
        }
    }
    return h
},
fill:function(a){
    var b=this;
    b.elements=[];
    b.add(a);
    return b
    },
filter:function(a){
    var b=[],d=this,e=d.elements,c=Ext.isFunction(a)?a:function(g){
        return g.is(a)
        };

    d.each(function(j,g,h){
        if(c(j,h)!==false){
            b[b.length]=d.transformElement(j)
            }
        });
d.elements=b;
return d
},
indexOf:function(a){
    return this.elements.indexOf(this.transformElement(a))
    },
replaceElement:function(e,c,a){
    var b=!isNaN(e)?e:this.indexOf(e),g;
    if(b>-1){
        c=Ext.getDom(c);
        if(a){
            g=this.elements[b];
            g.parentNode.insertBefore(c,g);
            Ext.removeNode(g)
            }
            this.elements.splice(b,1,c)
        }
        return this
    },
clear:function(){
    this.elements=[]
    }
};

Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;
(function(){
    var c,b=Ext.Element.prototype,a=Ext.CompositeElementLite.prototype;
    for(c in b){
        if(Ext.isFunction(b[c])){
            (function(d){
                a[d]=a[d]||function(){
                    return this.invoke(d,arguments)
                    }
                }).call(a,c)
        }
    }
    })();
if(Ext.DomQuery){
    Ext.Element.selectorFunction=Ext.DomQuery.select
        }
        Ext.Element.select=function(a,b){
    var c;
    if(typeof a=="string"){
        c=Ext.Element.selectorFunction(a,b)
        }else{
        if(a.length!==undefined){
            c=a
            }else{
            throw"Invalid selector"
            }
        }
    return new Ext.CompositeElementLite(c)
    };

Ext.select=Ext.Element.select;
Ext.apply(Ext.CompositeElementLite.prototype,{
    addElements:function(c,a){
        if(!c){
            return this
            }
            if(typeof c=="string"){
            c=Ext.Element.selectorFunction(c,a)
            }
            var b=this.elements;
        Ext.each(c,function(d){
            b.push(Ext.get(d))
            });
        return this
        },
    first:function(){
        return this.item(0)
        },
    last:function(){
        return this.item(this.getCount()-1)
        },
    contains:function(a){
        return this.indexOf(a)!=-1
        },
    removeElement:function(d,e){
        var c=this,a=this.elements,b;
        Ext.each(d,function(g){
            if((b=(a[g]||a[g=c.indexOf(g)]))){
                if(e){
                    if(b.dom){
                        b.remove()
                        }else{
                        Ext.removeNode(b)
                        }
                    }
                a.splice(g,1)
            }
        });
return this
}
});
Ext.CompositeElement=function(b,a){
    this.elements=[];
    this.add(b,a)
    };

Ext.extend(Ext.CompositeElement,Ext.CompositeElementLite,{
    getElement:function(a){
        return a
        },
    transformElement:function(a){
        return Ext.get(a)
        }
    });
Ext.Element.select=function(a,d,b){
    var c;
    if(typeof a=="string"){
        c=Ext.Element.selectorFunction(a,b)
        }else{
        if(a.length!==undefined){
            c=a
            }else{
            throw"Invalid selector"
            }
        }
    return(d===true)?new Ext.CompositeElement(c):new Ext.CompositeElementLite(c)
    };

Ext.select=Ext.Element.select;
(function(){
    var b="beforerequest",e="requestcomplete",d="requestexception",h=undefined,c="load",i="POST",a="GET",g=window;
    Ext.data.Connection=function(j){
        Ext.apply(this,j);
        this.addEvents(b,e,d);
        Ext.data.Connection.superclass.constructor.call(this)
        };

    Ext.extend(Ext.data.Connection,Ext.util.Observable,{
        timeout:30000,
        autoAbort:false,
        disableCaching:true,
        disableCachingParam:"_dc",
        request:function(n){
            var s=this;
            if(s.fireEvent(b,s,n)){
                if(n.el){
                    if(!Ext.isEmpty(n.indicatorText)){
                        s.indicatorText='<div class="loading-indicator">'+n.indicatorText+"</div>"
                        }
                        if(s.indicatorText){
                        Ext.getDom(n.el).innerHTML=s.indicatorText
                        }
                        n.success=(Ext.isFunction(n.success)?n.success:function(){}).createInterceptor(function(o){
                        Ext.getDom(n.el).innerHTML=o.responseText
                        })
                    }
                    var l=n.params,k=n.url||s.url,j,q={
                    success:s.handleResponse,
                    failure:s.handleFailure,
                    scope:s,
                    argument:{
                        options:n
                    },
                    timeout:n.timeout||s.timeout
                    },m,t;
                if(Ext.isFunction(l)){
                    l=l.call(n.scope||g,n)
                    }
                    l=Ext.urlEncode(s.extraParams,Ext.isObject(l)?Ext.urlEncode(l):l);
                if(Ext.isFunction(k)){
                    k=k.call(n.scope||g,n)
                    }
                    if((m=Ext.getDom(n.form))){
                    k=k||m.action;
                    if(n.isUpload||/multipart\/form-data/i.test(m.getAttribute("enctype"))){
                        return s.doFormUpload.call(s,n,l,k)
                        }
                        t=Ext.lib.Ajax.serializeForm(m);
                    l=l?(l+"&"+t):t
                    }
                    j=n.method||s.method||((l||n.xmlData||n.jsonData)?i:a);
                if(j===a&&(s.disableCaching&&n.disableCaching!==false)||n.disableCaching===true){
                    var r=n.disableCachingParam||s.disableCachingParam;
                    k=Ext.urlAppend(k,r+"="+(new Date().getTime()))
                    }
                    n.headers=Ext.apply(n.headers||{},s.defaultHeaders||{});
                if(n.autoAbort===true||s.autoAbort){
                    s.abort()
                    }
                    if((j==a||n.xmlData||n.jsonData)&&l){
                    k=Ext.urlAppend(k,l);
                    l=""
                    }
                    return(s.transId=Ext.lib.Ajax.request(j,k,q,l,n))
                }else{
                return n.callback?n.callback.apply(n.scope,[n,h,h]):null
                }
            },
    isLoading:function(j){
        return j?Ext.lib.Ajax.isCallInProgress(j):!!this.transId
        },
    abort:function(j){
        if(j||this.isLoading()){
            Ext.lib.Ajax.abort(j||this.transId)
            }
        },
    handleResponse:function(j){
        this.transId=false;
        var k=j.argument.options;
        j.argument=k?k.argument:null;
        this.fireEvent(e,this,j,k);
        if(k.success){
            k.success.call(k.scope,j,k)
            }
            if(k.callback){
            k.callback.call(k.scope,k,true,j)
            }
        },
handleFailure:function(j,l){
    this.transId=false;
    var k=j.argument.options;
    j.argument=k?k.argument:null;
    this.fireEvent(d,this,j,k,l);
    if(k.failure){
        k.failure.call(k.scope,j,k)
        }
        if(k.callback){
        k.callback.call(k.scope,k,false,j)
        }
    },
doFormUpload:function(q,j,k){
    var l=Ext.id(),v=document,r=v.createElement("iframe"),m=Ext.getDom(q.form),u=[],t,p="multipart/form-data",n={
        target:m.target,
        method:m.method,
        encoding:m.encoding,
        enctype:m.enctype,
        action:m.action
        };

    Ext.fly(r).set({
        id:l,
        name:l,
        cls:"x-hidden"
    });
    v.body.appendChild(r);
    Ext.fly(r).set({
        src:Ext.SSL_SECURE_URL
        });
    if(Ext.isIE){
        document.frames[l].name=l
        }
        Ext.fly(m).set({
        target:l,
        method:i,
        enctype:p,
        encoding:p,
        action:k||n.action
        });
    Ext.iterate(Ext.urlDecode(j,false),function(x,o){
        t=v.createElement("input");
        Ext.fly(t).set({
            type:"hidden",
            value:o,
            name:x
        });
        m.appendChild(t);
        u.push(t)
        });
    function s(){
        var y=this,x={
            responseText:"",
            responseXML:null,
            argument:q.argument
            },B,A;
        try{
            B=r.contentWindow.document||r.contentDocument||g.frames[l].document;
            if(B){
                if(B.body){
                    if(/textarea/i.test((A=B.body.firstChild||{}).tagName)){
                        x.responseText=A.value
                        }else{
                        x.responseText=B.body.innerHTML
                        }
                    }
                x.responseXML=B.XMLDocument||B
            }
        }catch(z){}
    Ext.EventManager.removeListener(r,c,s,y);
    y.fireEvent(e,y,x,q);
    function o(E,D,C){
    if(Ext.isFunction(E)){
        E.apply(D,C)
        }
    }
o(q.success,q.scope,[x,q]);
o(q.callback,q.scope,[q,true,x]);
if(!y.debugUploads){
    setTimeout(function(){
        Ext.removeNode(r)
        },100)
    }
}
Ext.EventManager.on(r,c,s,this);
m.submit();
Ext.fly(m).set(n);
Ext.each(u,function(o){
    Ext.removeNode(o)
    })
}
})
})();
Ext.Ajax=new Ext.data.Connection({
    autoAbort:false,
    serializeForm:function(a){
        return Ext.lib.Ajax.serializeForm(a)
        }
    });
Ext.UpdateManager=Ext.Updater=Ext.extend(Ext.util.Observable,function(){
    var b="beforeupdate",d="update",c="failure";
    function a(h){
        var i=this;
        i.transaction=null;
        if(h.argument.form&&h.argument.reset){
            try{
                h.argument.form.reset()
                }catch(j){}
        }
        if(i.loadScripts){
        i.renderer.render(i.el,h,i,g.createDelegate(i,[h]))
        }else{
        i.renderer.render(i.el,h,i);
        g.call(i,h)
        }
    }
function g(h,i,j){
    this.fireEvent(i||d,this.el,h);
    if(Ext.isFunction(h.argument.callback)){
        h.argument.callback.call(h.argument.scope,this.el,Ext.isEmpty(j)?true:false,h,h.argument.options)
        }
    }
function e(h){
    g.call(this,h,c,!!(this.transaction=null))
    }
    return{
    constructor:function(i,h){
        var j=this;
        i=Ext.get(i);
        if(!h&&i.updateManager){
            return i.updateManager
            }
            j.el=i;
        j.defaultUrl=null;
        j.addEvents(b,d,c);
        Ext.apply(j,Ext.Updater.defaults);
        j.transaction=null;
        j.refreshDelegate=j.refresh.createDelegate(j);
        j.updateDelegate=j.update.createDelegate(j);
        j.formUpdateDelegate=(j.formUpdate||function(){}).createDelegate(j);
        j.renderer=j.renderer||j.getDefaultRenderer();
        Ext.Updater.superclass.constructor.call(j)
        },
    setRenderer:function(h){
        this.renderer=h
        },
    getRenderer:function(){
        return this.renderer
        },
    getDefaultRenderer:function(){
        return new Ext.Updater.BasicRenderer()
        },
    setDefaultUrl:function(h){
        this.defaultUrl=h
        },
    getEl:function(){
        return this.el
        },
    update:function(i,n,p,l){
        var k=this,h,j;
        if(k.fireEvent(b,k.el,i,n)!==false){
            if(Ext.isObject(i)){
                h=i;
                i=h.url;
                n=n||h.params;
                p=p||h.callback;
                l=l||h.discardUrl;
                j=h.scope;
                if(!Ext.isEmpty(h.nocache)){
                    k.disableCaching=h.nocache
                    }
                    if(!Ext.isEmpty(h.text)){
                    k.indicatorText='<div class="loading-indicator">'+h.text+"</div>"
                    }
                    if(!Ext.isEmpty(h.scripts)){
                    k.loadScripts=h.scripts
                    }
                    if(!Ext.isEmpty(h.timeout)){
                    k.timeout=h.timeout
                    }
                }
            k.showLoading();
        if(!l){
            k.defaultUrl=i
            }
            if(Ext.isFunction(i)){
            i=i.call(k)
            }
            var m=Ext.apply({},{
            url:i,
            params:(Ext.isFunction(n)&&j)?n.createDelegate(j):n,
            success:a,
            failure:e,
            scope:k,
            callback:undefined,
            timeout:(k.timeout*1000),
            disableCaching:k.disableCaching,
            argument:{
                options:h,
                url:i,
                form:null,
                callback:p,
                scope:j||window,
                params:n
            }
        },h);
    k.transaction=Ext.Ajax.request(m)
    }
},
formUpdate:function(k,h,j,l){
    var i=this;
    if(i.fireEvent(b,i.el,k,h)!==false){
        if(Ext.isFunction(h)){
            h=h.call(i)
            }
            k=Ext.getDom(k);
        i.transaction=Ext.Ajax.request({
            form:k,
            url:h,
            success:a,
            failure:e,
            scope:i,
            timeout:(i.timeout*1000),
            argument:{
                url:h,
                form:k,
                callback:l,
                reset:j
            }
        });
    i.showLoading.defer(1,i)
    }
},
startAutoRefresh:function(i,j,l,m,h){
    var k=this;
    if(h){
        k.update(j||k.defaultUrl,l,m,true)
        }
        if(k.autoRefreshProcId){
        clearInterval(k.autoRefreshProcId)
        }
        k.autoRefreshProcId=setInterval(k.update.createDelegate(k,[j||k.defaultUrl,l,m,true]),i*1000)
    },
stopAutoRefresh:function(){
    if(this.autoRefreshProcId){
        clearInterval(this.autoRefreshProcId);
        delete this.autoRefreshProcId
        }
    },
isAutoRefreshing:function(){
    return !!this.autoRefreshProcId
    },
showLoading:function(){
    if(this.showLoadIndicator){
        this.el.dom.innerHTML=this.indicatorText
        }
    },
abort:function(){
    if(this.transaction){
        Ext.Ajax.abort(this.transaction)
        }
    },
isUpdating:function(){
    return this.transaction?Ext.Ajax.isLoading(this.transaction):false
    },
refresh:function(h){
    if(this.defaultUrl){
        this.update(this.defaultUrl,null,h,true)
        }
    }
}
}());
Ext.Updater.defaults={
    timeout:30,
    disableCaching:false,
    showLoadIndicator:true,
    indicatorText:'<div class="loading-indicator">Loading...</div>',
    loadScripts:false,
    sslBlankUrl:Ext.SSL_SECURE_URL
    };

Ext.Updater.updateElement=function(d,c,e,b){
    var a=Ext.get(d).getUpdater();
    Ext.apply(a,b);
    a.update(c,e,b?b.callback:null)
    };

Ext.Updater.BasicRenderer=function(){};

Ext.Updater.BasicRenderer.prototype={
    render:function(c,a,b,d){
        c.update(a.responseText,b.loadScripts,d)
        }
    };
(function(){
    Date.useStrict=false;
    function b(d){
        var c=Array.prototype.slice.call(arguments,1);
        return d.replace(/\{(\d+)\}/g,function(e,g){
            return c[g]
            })
        }
        Date.formatCodeToRegex=function(d,c){
        var e=Date.parseCodes[d];
        if(e){
            e=typeof e=="function"?e():e;
            Date.parseCodes[d]=e
            }
            return e?Ext.applyIf({
            c:e.c?b(e.c,c||"{0}"):e.c
            },e):{
            g:0,
            c:null,
            s:Ext.escapeRe(d)
            }
        };

var a=Date.formatCodeToRegex;
Ext.apply(Date,{
    parseFunctions:{
        "M$":function(d,c){
            var e=new RegExp("\\/Date\\(([-+])?(\\d+)(?:[+-]\\d{4})?\\)\\/");
            var g=(d||"").match(e);
            return g?new Date(((g[1]||"")+g[2])*1):null
            }
        },
parseRegexes:[],
formatFunctions:{
    "M$":function(){
        return"\\/Date("+this.getTime()+")\\/"
        }
    },
y2kYear:50,
MILLI:"ms",
SECOND:"s",
MINUTE:"mi",
HOUR:"h",
DAY:"d",
MONTH:"mo",
YEAR:"y",
defaults:{},
dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],
monthNumbers:{
    Jan:0,
    Feb:1,
    Mar:2,
    Apr:3,
    May:4,
    Jun:5,
    Jul:6,
    Aug:7,
    Sep:8,
    Oct:9,
    Nov:10,
    Dec:11
},
getShortMonthName:function(c){
    return Date.monthNames[c].substring(0,3)
    },
getShortDayName:function(c){
    return Date.dayNames[c].substring(0,3)
    },
getMonthNumber:function(c){
    return Date.monthNumbers[c.substring(0,1).toUpperCase()+c.substring(1,3).toLowerCase()]
    },
formatCodes:{
    d:"String.leftPad(this.getDate(), 2, '0')",
    D:"Date.getShortDayName(this.getDay())",
    j:"this.getDate()",
    l:"Date.dayNames[this.getDay()]",
    N:"(this.getDay() ? this.getDay() : 7)",
    S:"this.getSuffix()",
    w:"this.getDay()",
    z:"this.getDayOfYear()",
    W:"String.leftPad(this.getWeekOfYear(), 2, '0')",
    F:"Date.monthNames[this.getMonth()]",
    m:"String.leftPad(this.getMonth() + 1, 2, '0')",
    M:"Date.getShortMonthName(this.getMonth())",
    n:"(this.getMonth() + 1)",
    t:"this.getDaysInMonth()",
    L:"(this.isLeapYear() ? 1 : 0)",
    o:"(this.getFullYear() + (this.getWeekOfYear() == 1 && this.getMonth() > 0 ? +1 : (this.getWeekOfYear() >= 52 && this.getMonth() < 11 ? -1 : 0)))",
    Y:"this.getFullYear()",
    y:"('' + this.getFullYear()).substring(2, 4)",
    a:"(this.getHours() < 12 ? 'am' : 'pm')",
    A:"(this.getHours() < 12 ? 'AM' : 'PM')",
    g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",
    G:"this.getHours()",
    h:"String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",
    H:"String.leftPad(this.getHours(), 2, '0')",
    i:"String.leftPad(this.getMinutes(), 2, '0')",
    s:"String.leftPad(this.getSeconds(), 2, '0')",
    u:"String.leftPad(this.getMilliseconds(), 3, '0')",
    O:"this.getGMTOffset()",
    P:"this.getGMTOffset(true)",
    T:"this.getTimezone()",
    Z:"(this.getTimezoneOffset() * -60)",
    c:function(){
        for(var k="Y-m-dTH:i:sP",h=[],g=0,d=k.length;g<d;++g){
            var j=k.charAt(g);
            h.push(j=="T"?"'T'":Date.getFormatCode(j))
            }
            return h.join(" + ")
        },
    U:"Math.round(this.getTime() / 1000)"
},
isValid:function(o,c,n,k,g,j,e){
    k=k||0;
    g=g||0;
    j=j||0;
    e=e||0;
    var l=new Date(o,c-1,n,k,g,j,e);
    return o==l.getFullYear()&&c==l.getMonth()+1&&n==l.getDate()&&k==l.getHours()&&g==l.getMinutes()&&j==l.getSeconds()&&e==l.getMilliseconds()
    },
parseDate:function(d,g,c){
    var e=Date.parseFunctions;
    if(e[g]==null){
        Date.createParser(g)
        }
        return e[g](d,Ext.isDefined(c)?c:Date.useStrict)
    },
getFormatCode:function(d){
    var c=Date.formatCodes[d];
    if(c){
        c=typeof c=="function"?c():c;
        Date.formatCodes[d]=c
        }
        return c||("'"+String.escape(d)+"'")
    },
createFormat:function(h){
    var g=[],c=false,e="";
    for(var d=0;d<h.length;++d){
        e=h.charAt(d);
        if(!c&&e=="\\"){
            c=true
            }else{
            if(c){
                c=false;
                g.push("'"+String.escape(e)+"'")
                }else{
                g.push(Date.getFormatCode(e))
                }
            }
    }
    Date.formatFunctions[h]=new Function("return "+g.join("+"))
    },
createParser:function(){
    var c=["var dt, y, m, d, h, i, s, ms, o, z, zz, u, v,","def = Date.defaults,","results = String(input).match(Date.parseRegexes[{0}]);","if(results){","{1}","if(u != null){","v = new Date(u * 1000);","}else{","dt = (new Date()).clearTime();","y = Ext.num(y, Ext.num(def.y, dt.getFullYear()));","m = Ext.num(m, Ext.num(def.m - 1, dt.getMonth()));","d = Ext.num(d, Ext.num(def.d, dt.getDate()));","h  = Ext.num(h, Ext.num(def.h, dt.getHours()));","i  = Ext.num(i, Ext.num(def.i, dt.getMinutes()));","s  = Ext.num(s, Ext.num(def.s, dt.getSeconds()));","ms = Ext.num(ms, Ext.num(def.ms, dt.getMilliseconds()));","if(z >= 0 && y >= 0){","v = new Date(y, 0, 1, h, i, s, ms);","v = !strict? v : (strict === true && (z <= 364 || (v.isLeapYear() && z <= 365))? v.add(Date.DAY, z) : null);","}else if(strict === true && !Date.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","v = new Date(y, m, d, h, i, s, ms);","}","}","}","if(v){","if(zz != null){","v = v.add(Date.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = v.add(Date.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");
    return function(m){
        var e=Date.parseRegexes.length,n=1,g=[],l=[],k=false,d="";
        for(var j=0;j<m.length;++j){
            d=m.charAt(j);
            if(!k&&d=="\\"){
                k=true
                }else{
                if(k){
                    k=false;
                    l.push(String.escape(d))
                    }else{
                    var h=a(d,n);
                    n+=h.g;
                    l.push(h.s);
                    if(h.g&&h.c){
                        g.push(h.c)
                        }
                    }
            }
        }
    Date.parseRegexes[e]=new RegExp("^"+l.join("")+"$");
Date.parseFunctions[m]=new Function("input","strict",b(c,e,g.join("")))
}
}(),
parseCodes:{
    d:{
        g:1,
        c:"d = parseInt(results[{0}], 10);\n",
        s:"(\\d{2})"
    },
    j:{
        g:1,
        c:"d = parseInt(results[{0}], 10);\n",
        s:"(\\d{1,2})"
    },
    D:function(){
        for(var c=[],d=0;d<7;c.push(Date.getShortDayName(d)),++d){}
        return{
            g:0,
            c:null,
            s:"(?:"+c.join("|")+")"
            }
        },
l:function(){
    return{
        g:0,
        c:null,
        s:"(?:"+Date.dayNames.join("|")+")"
        }
    },
N:{
    g:0,
    c:null,
    s:"[1-7]"
},
S:{
    g:0,
    c:null,
    s:"(?:st|nd|rd|th)"
},
w:{
    g:0,
    c:null,
    s:"[0-6]"
},
z:{
    g:1,
    c:"z = parseInt(results[{0}], 10);\n",
    s:"(\\d{1,3})"
},
W:{
    g:0,
    c:null,
    s:"(?:\\d{2})"
},
F:function(){
    return{
        g:1,
        c:"m = parseInt(Date.getMonthNumber(results[{0}]), 10);\n",
        s:"("+Date.monthNames.join("|")+")"
        }
    },
M:function(){
    for(var c=[],d=0;d<12;c.push(Date.getShortMonthName(d)),++d){}
    return Ext.applyIf({
        s:"("+c.join("|")+")"
        },a("F"))
    },
m:{
    g:1,
    c:"m = parseInt(results[{0}], 10) - 1;\n",
    s:"(\\d{2})"
},
n:{
    g:1,
    c:"m = parseInt(results[{0}], 10) - 1;\n",
    s:"(\\d{1,2})"
},
t:{
    g:0,
    c:null,
    s:"(?:\\d{2})"
},
L:{
    g:0,
    c:null,
    s:"(?:1|0)"
},
o:function(){
    return a("Y")
    },
Y:{
    g:1,
    c:"y = parseInt(results[{0}], 10);\n",
    s:"(\\d{4})"
},
y:{
    g:1,
    c:"var ty = parseInt(results[{0}], 10);\ny = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
    s:"(\\d{1,2})"
},
a:{
    g:1,
    c:"if (results[{0}] == 'am') {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",
    s:"(am|pm)"
},
A:{
    g:1,
    c:"if (results[{0}] == 'AM') {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",
    s:"(AM|PM)"
},
g:function(){
    return a("G")
    },
G:{
    g:1,
    c:"h = parseInt(results[{0}], 10);\n",
    s:"(\\d{1,2})"
},
h:function(){
    return a("H")
    },
H:{
    g:1,
    c:"h = parseInt(results[{0}], 10);\n",
    s:"(\\d{2})"
},
i:{
    g:1,
    c:"i = parseInt(results[{0}], 10);\n",
    s:"(\\d{2})"
},
s:{
    g:1,
    c:"s = parseInt(results[{0}], 10);\n",
    s:"(\\d{2})"
},
u:{
    g:1,
    c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",
    s:"(\\d+)"
},
O:{
    g:1,
    c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),
    s:"([+-]\\d{4})"
},
P:{
    g:1,
    c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + String.leftPad(hr, 2, '0') + String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),
    s:"([+-]\\d{2}:\\d{2})"
},
T:{
    g:0,
    c:null,
    s:"[A-Z]{1,4}"
},
Z:{
    g:1,
    c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",
    s:"([+-]?\\d{1,5})"
},
c:function(){
    var e=[],c=[a("Y",1),a("m",2),a("d",3),a("h",4),a("i",5),a("s",6),{
        c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"
    },{
        c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",a("P",8).c,"}else{",a("O",8).c,"}","}"].join("\n")
        }];
    for(var g=0,d=c.length;g<d;++g){
        e.push(c[g].c)
        }
        return{
        g:1,
        c:e.join(""),
        s:[c[0].s,"(?:","-",c[1].s,"(?:","-",c[2].s,"(?:","(?:T| )?",c[3].s,":",c[4].s,"(?::",c[5].s,")?","(?:(?:\\.|,)(\\d+))?","(Z|(?:[-+]\\d{2}(?::)?\\d{2}))?",")?",")?",")?"].join("")
        }
    },
U:{
    g:1,
    c:"u = parseInt(results[{0}], 10);\n",
    s:"(-?\\d+)"
}
}
})
}());
Ext.apply(Date.prototype,{
    dateFormat:function(a){
        if(Date.formatFunctions[a]==null){
            Date.createFormat(a)
            }
            return Date.formatFunctions[a].call(this)
        },
    getTimezone:function(){
        return this.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/,"$1$2").replace(/[^A-Z]/g,"")
        },
    getGMTOffset:function(a){
        return(this.getTimezoneOffset()>0?"-":"+")+String.leftPad(Math.floor(Math.abs(this.getTimezoneOffset())/60),2,"0")+(a?":":"")+String.leftPad(Math.abs(this.getTimezoneOffset()%60),2,"0")
        },
    getDayOfYear:function(){
        var b=0,e=this.clone(),a=this.getMonth(),c;
        for(c=0,e.setDate(1),e.setMonth(0);c<a;e.setMonth(++c)){
            b+=e.getDaysInMonth()
            }
            return b+this.getDate()-1
        },
    getWeekOfYear:function(){
        var a=86400000,b=7*a;
        return function(){
            var d=Date.UTC(this.getFullYear(),this.getMonth(),this.getDate()+3)/a,c=Math.floor(d/7),e=new Date(c*b).getUTCFullYear();
            return c-Math.floor(Date.UTC(e,0,7)/b)+1
            }
        }(),
    isLeapYear:function(){
    var a=this.getFullYear();
    return !!((a&3)==0&&(a%100||(a%400==0&&a)))
    },
getFirstDayOfMonth:function(){
    var a=(this.getDay()-(this.getDate()-1))%7;
    return(a<0)?(a+7):a
    },
getLastDayOfMonth:function(){
    return this.getLastDateOfMonth().getDay()
    },
getFirstDateOfMonth:function(){
    return new Date(this.getFullYear(),this.getMonth(),1)
    },
getLastDateOfMonth:function(){
    return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth())
    },
getDaysInMonth:function(){
    var a=[31,28,31,30,31,30,31,31,30,31,30,31];
    return function(){
        var b=this.getMonth();
        return b==1&&this.isLeapYear()?29:a[b]
        }
    }(),
    getSuffix:function(){
    switch(this.getDate()){
        case 1:case 21:case 31:
            return"st";
        case 2:case 22:
            return"nd";
        case 3:case 23:
            return"rd";
        default:
            return"th"
            }
        },
clone:function(){
    return new Date(this.getTime())
    },
isDST:function(){
    return new Date(this.getFullYear(),0,1).getTimezoneOffset()!=this.getTimezoneOffset()
    },
clearTime:function(g){
    if(g){
        return this.clone().clearTime()
        }
        var b=this.getDate();
    this.setHours(0);
    this.setMinutes(0);
    this.setSeconds(0);
    this.setMilliseconds(0);
    if(this.getDate()!=b){
        for(var a=1,e=this.add(Date.HOUR,a);e.getDate()!=b;a++,e=this.add(Date.HOUR,a)){}
        this.setDate(b);
        this.setHours(e.getHours())
        }
        return this
    },
add:function(b,c){
    var e=this.clone();
    if(!b||c===0){
        return e
        }
        switch(b.toLowerCase()){
        case Date.MILLI:
            e.setMilliseconds(this.getMilliseconds()+c);
            break;
        case Date.SECOND:
            e.setSeconds(this.getSeconds()+c);
            break;
        case Date.MINUTE:
            e.setMinutes(this.getMinutes()+c);
            break;
        case Date.HOUR:
            e.setHours(this.getHours()+c);
            break;
        case Date.DAY:
            e.setDate(this.getDate()+c);
            break;
        case Date.MONTH:
            var a=this.getDate();
            if(a>28){
            a=Math.min(a,this.getFirstDateOfMonth().add("mo",c).getLastDateOfMonth().getDate())
            }
            e.setDate(a);
            e.setMonth(this.getMonth()+c);
            break;
        case Date.YEAR:
            e.setFullYear(this.getFullYear()+c);
            break
            }
            return e
    },
between:function(c,a){
    var b=this.getTime();
    return c.getTime()<=b&&b<=a.getTime()
    }
});
Date.prototype.format=Date.prototype.dateFormat;
if(Ext.isSafari&&(navigator.userAgent.match(/WebKit\/(\d+)/)[1]||NaN)<420){
    Ext.apply(Date.prototype,{
        _xMonth:Date.prototype.setMonth,
        _xDate:Date.prototype.setDate,
        setMonth:function(a){
            if(a<=-1){
                var d=Math.ceil(-a),c=Math.ceil(d/12),b=(d%12)?12-d%12:0;
                this.setFullYear(this.getFullYear()-c);
                return this._xMonth(b)
                }else{
                return this._xMonth(a)
                }
            },
    setDate:function(a){
        return this.setTime(this.getTime()-(this.getDate()-a)*86400000)
        }
    })
}
Ext.util.MixedCollection=function(b,a){
    this.items=[];
    this.map={};

    this.keys=[];
    this.length=0;
    this.addEvents("clear","add","replace","remove","sort");
    this.allowFunctions=b===true;
    if(a){
        this.getKey=a
        }
        Ext.util.MixedCollection.superclass.constructor.call(this)
    };

Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{
    allowFunctions:false,
    add:function(b,c){
        if(arguments.length==1){
            c=arguments[0];
            b=this.getKey(c)
            }
            if(typeof b!="undefined"&&b!==null){
            var a=this.map[b];
            if(typeof a!="undefined"){
                return this.replace(b,c)
                }
                this.map[b]=c
            }
            this.length++;
        this.items.push(c);
        this.keys.push(b);
        this.fireEvent("add",this.length-1,c,b);
        return c
        },
    getKey:function(a){
        return a.id
        },
    replace:function(c,d){
        if(arguments.length==1){
            d=arguments[0];
            c=this.getKey(d)
            }
            var a=this.map[c];
        if(typeof c=="undefined"||c===null||typeof a=="undefined"){
            return this.add(c,d)
            }
            var b=this.indexOfKey(c);
        this.items[b]=d;
        this.map[c]=d;
        this.fireEvent("replace",c,a,d);
        return d
        },
    addAll:function(e){
        if(arguments.length>1||Ext.isArray(e)){
            var b=arguments.length>1?arguments:e;
            for(var d=0,a=b.length;d<a;d++){
                this.add(b[d])
                }
            }else{
        for(var c in e){
            if(this.allowFunctions||typeof e[c]!="function"){
                this.add(c,e[c])
                }
            }
        }
    },
each:function(e,d){
    var b=[].concat(this.items);
    for(var c=0,a=b.length;c<a;c++){
        if(e.call(d||b[c],b[c],c,a)===false){
            break
        }
    }
    },
eachKey:function(d,c){
    for(var b=0,a=this.keys.length;b<a;b++){
        d.call(c||window,this.keys[b],this.items[b],b,a)
        }
    },
find:function(d,c){
    for(var b=0,a=this.items.length;b<a;b++){
        if(d.call(c||window,this.items[b],this.keys[b])){
            return this.items[b]
            }
        }
    return null
},
insert:function(a,b,c){
    if(arguments.length==2){
        c=arguments[1];
        b=this.getKey(c)
        }
        if(this.containsKey(b)){
        this.suspendEvents();
        this.removeKey(b);
        this.resumeEvents()
        }
        if(a>=this.length){
        return this.add(b,c)
        }
        this.length++;
    this.items.splice(a,0,c);
    if(typeof b!="undefined"&&b!==null){
        this.map[b]=c
        }
        this.keys.splice(a,0,b);
    this.fireEvent("add",a,c,b);
    return c
    },
remove:function(a){
    return this.removeAt(this.indexOf(a))
    },
removeAt:function(a){
    if(a<this.length&&a>=0){
        this.length--;
        var c=this.items[a];
        this.items.splice(a,1);
        var b=this.keys[a];
        if(typeof b!="undefined"){
            delete this.map[b]
        }
        this.keys.splice(a,1);
        this.fireEvent("remove",c,b);
        return c
        }
        return false
    },
removeKey:function(a){
    return this.removeAt(this.indexOfKey(a))
    },
getCount:function(){
    return this.length
    },
indexOf:function(a){
    return this.items.indexOf(a)
    },
indexOfKey:function(a){
    return this.keys.indexOf(a)
    },
item:function(b){
    var a=this.map[b],c=a!==undefined?a:(typeof b=="number")?this.items[b]:undefined;
    return !Ext.isFunction(c)||this.allowFunctions?c:null
    },
itemAt:function(a){
    return this.items[a]
    },
key:function(a){
    return this.map[a]
    },
contains:function(a){
    return this.indexOf(a)!=-1
    },
containsKey:function(a){
    return typeof this.map[a]!="undefined"
    },
clear:function(){
    this.length=0;
    this.items=[];
    this.keys=[];
    this.map={};

    this.fireEvent("clear")
    },
first:function(){
    return this.items[0]
    },
last:function(){
    return this.items[this.length-1]
    },
_sort:function(k,a,j){
    var d,e,b=String(a).toUpperCase()=="DESC"?-1:1,h=[],l=this.keys,g=this.items;
    j=j||function(i,c){
        return i-c
        };

    for(d=0,e=g.length;d<e;d++){
        h[h.length]={
            key:l[d],
            value:g[d],
            index:d
        }
    }
    h.sort(function(i,c){
    var m=j(i[k],c[k])*b;
    if(m===0){
        m=(i.index<c.index?-1:1)
        }
        return m
    });
for(d=0,e=h.length;d<e;d++){
    g[d]=h[d].value;
    l[d]=h[d].key
    }
    this.fireEvent("sort",this)
},
sort:function(a,b){
    this._sort("value",a,b)
    },
reorder:function(d){
    this.suspendEvents();
    var b=this.items,c=0,g=b.length,a=[],e=[];
    for(oldIndex in d){
        a[d[oldIndex]]=b[oldIndex]
        }
        for(c=0;c<g;c++){
        if(d[c]==undefined){
            e.push(b[c])
            }
        }
    for(c=0;c<g;c++){
    if(a[c]==undefined){
        a[c]=e.shift()
        }
    }
this.clear();
this.addAll(a);
this.resumeEvents();
this.fireEvent("sort",this)
},
keySort:function(a,b){
    this._sort("key",a,b||function(d,c){
        var g=String(d).toUpperCase(),e=String(c).toUpperCase();
        return g>e?1:(g<e?-1:0)
        })
    },
getRange:function(e,a){
    var b=this.items;
    if(b.length<1){
        return[]
        }
        e=e||0;
    a=Math.min(typeof a=="undefined"?this.length-1:a,this.length-1);
    var c,d=[];
    if(e<=a){
        for(c=e;c<=a;c++){
            d[d.length]=b[c]
            }
        }else{
    for(c=e;c>=a;c--){
        d[d.length]=b[c]
        }
    }
    return d
},
filter:function(c,b,d,a){
    if(Ext.isEmpty(b,false)){
        return this.clone()
        }
        b=this.createValueMatcher(b,d,a);
    return this.filterBy(function(e){
        return e&&b.test(e[c])
        })
    },
filterBy:function(g,e){
    var h=new Ext.util.MixedCollection();
    h.getKey=this.getKey;
    var b=this.keys,d=this.items;
    for(var c=0,a=d.length;c<a;c++){
        if(g.call(e||this,d[c],b[c])){
            h.add(b[c],d[c])
            }
        }
    return h
},
findIndex:function(c,b,e,d,a){
    if(Ext.isEmpty(b,false)){
        return -1
        }
        b=this.createValueMatcher(b,d,a);
    return this.findIndexBy(function(g){
        return g&&b.test(g[c])
        },null,e)
    },
findIndexBy:function(g,e,h){
    var b=this.keys,d=this.items;
    for(var c=(h||0),a=d.length;c<a;c++){
        if(g.call(e||this,d[c],b[c])){
            return c
            }
        }
    return -1
},
createValueMatcher:function(c,e,a,b){
    if(!c.exec){
        var d=Ext.escapeRe;
        c=String(c);
        if(e===true){
            c=d(c)
            }else{
            c="^"+d(c);
            if(b===true){
                c+="$"
                }
            }
        c=new RegExp(c,a?"":"i")
    }
    return c
},
clone:function(){
    var e=new Ext.util.MixedCollection();
    var b=this.keys,d=this.items;
    for(var c=0,a=d.length;c<a;c++){
        e.add(b[c],d[c])
        }
        e.getKey=this.getKey;
    return e
    }
});
Ext.util.MixedCollection.prototype.get=Ext.util.MixedCollection.prototype.item;
Ext.util.JSON=new (function(){
    var useHasOwn=!!{}.hasOwnProperty,isNative=function(){
        var useNative=null;
        return function(){
            if(useNative===null){
                useNative=Ext.USE_NATIVE_JSON&&window.JSON&&JSON.toString()=="[object JSON]"
                }
                return useNative
            }
        }(),pad=function(n){
    return n<10?"0"+n:n
    },doDecode=function(json){
    return eval("("+json+")")
    },doEncode=function(o){
    if(!Ext.isDefined(o)||o===null){
        return"null"
        }else{
        if(Ext.isArray(o)){
            return encodeArray(o)
            }else{
            if(Ext.isDate(o)){
                return Ext.util.JSON.encodeDate(o)
                }else{
                if(Ext.isString(o)){
                    return encodeString(o)
                    }else{
                    if(typeof o=="number"){
                        return isFinite(o)?String(o):"null"
                        }else{
                        if(Ext.isBoolean(o)){
                            return String(o)
                            }else{
                            var a=["{"],b,i,v;
                            for(i in o){
                                if(!o.getElementsByTagName){
                                    if(!useHasOwn||o.hasOwnProperty(i)){
                                        v=o[i];
                                        switch(typeof v){
                                            case"undefined":case"function":case"unknown":
                                                break;
                                            default:
                                                if(b){
                                                a.push(",")
                                                }
                                                a.push(doEncode(i),":",v===null?"null":doEncode(v));
                                                b=true
                                                }
                                            }
                                }
                            }
                            a.push("}");
                return a.join("")
                }
            }
    }
}
}
}
},m={
    "\b":"\\b",
    "\t":"\\t",
    "\n":"\\n",
    "\f":"\\f",
    "\r":"\\r",
    '"':'\\"',
    "\\":"\\\\"
},encodeString=function(s){
    if(/["\\\x00-\x1f]/.test(s)){
        return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){
            var c=m[b];
            if(c){
                return c
                }
                c=b.charCodeAt();
            return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)
            })+'"'
        }
        return'"'+s+'"'
    },encodeArray=function(o){
    var a=["["],b,i,l=o.length,v;
    for(i=0;i<l;i+=1){
        v=o[i];
        switch(typeof v){
            case"undefined":case"function":case"unknown":
                break;
            default:
                if(b){
                a.push(",")
                }
                a.push(v===null?"null":Ext.util.JSON.encode(v));
                b=true
                }
            }
    a.push("]");
return a.join("")
};

this.encodeDate=function(o){
    return'"'+o.getFullYear()+"-"+pad(o.getMonth()+1)+"-"+pad(o.getDate())+"T"+pad(o.getHours())+":"+pad(o.getMinutes())+":"+pad(o.getSeconds())+'"'
    };

this.encode=function(){
    var ec;
    return function(o){
        if(!ec){
            ec=isNative()?JSON.stringify:doEncode
            }
            return ec(o)
        }
    }();
this.decode=function(){
    var dc;
    return function(json){
        if(!dc){
            dc=isNative()?JSON.parse:doDecode
            }
            return dc(json)
        }
    }()
})();
Ext.encode=Ext.util.JSON.encode;
Ext.decode=Ext.util.JSON.decode;
Ext.util.Format=function(){
    var trimRe=/^\s+|\s+$/g,stripTagsRE=/<\/?[^>]+>/gi,stripScriptsRe=/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe=/\r?\n/g;
    return{
        ellipsis:function(value,len,word){
            if(value&&value.length>len){
                if(word){
                    var vs=value.substr(0,len-2),index=Math.max(vs.lastIndexOf(" "),vs.lastIndexOf("."),vs.lastIndexOf("!"),vs.lastIndexOf("?"));
                    if(index==-1||index<(len-15)){
                        return value.substr(0,len-3)+"..."
                        }else{
                        return vs.substr(0,index)+"..."
                        }
                    }else{
                return value.substr(0,len-3)+"..."
                }
            }
        return value
    },
undef:function(value){
    return value!==undefined?value:""
    },
defaultValue:function(value,defaultValue){
    return value!==undefined&&value!==""?value:defaultValue
    },
htmlEncode:function(value){
    return !value?value:String(value).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;")
    },
htmlDecode:function(value){
    return !value?value:String(value).replace(/&gt;/g,">").replace(/&lt;/g,"<").replace(/&quot;/g,'"').replace(/&amp;/g,"&")
    },
trim:function(value){
    return String(value).replace(trimRe,"")
    },
substr:function(value,start,length){
    return String(value).substr(start,length)
    },
lowercase:function(value){
    return String(value).toLowerCase()
    },
uppercase:function(value){
    return String(value).toUpperCase()
    },
capitalize:function(value){
    return !value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase()
    },
call:function(value,fn){
    if(arguments.length>2){
        var args=Array.prototype.slice.call(arguments,2);
        args.unshift(value);
        return eval(fn).apply(window,args)
        }else{
        return eval(fn).call(window,value)
        }
    },
usMoney:function(v){
    v=(Math.round((v-0)*100))/100;
    v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);
    v=String(v);
    var ps=v.split("."),whole=ps[0],sub=ps[1]?"."+ps[1]:".00",r=/(\d+)(\d{3})/;
    while(r.test(whole)){
        whole=whole.replace(r,"$1,$2")
        }
        v=whole+sub;
    if(v.charAt(0)=="-"){
        return"-$"+v.substr(1)
        }
        return"$"+v
    },
date:function(v,format){
    if(!v){
        return""
        }
        if(!Ext.isDate(v)){
        v=new Date(Date.parse(v))
        }
        return v.dateFormat(format||"m/d/Y")
    },
dateRenderer:function(format){
    return function(v){
        return Ext.util.Format.date(v,format)
        }
    },
stripTags:function(v){
    return !v?v:String(v).replace(stripTagsRE,"")
    },
stripScripts:function(v){
    return !v?v:String(v).replace(stripScriptsRe,"")
    },
fileSize:function(size){
    if(size<1024){
        return size+" bytes"
        }else{
        if(size<1048576){
            return(Math.round(((size*10)/1024))/10)+" KB"
            }else{
            return(Math.round(((size*10)/1048576))/10)+" MB"
            }
        }
},
math:function(){
    var fns={};

    return function(v,a){
        if(!fns[a]){
            fns[a]=new Function("v","return v "+a+";")
            }
            return fns[a](v)
        }
    }(),
round:function(value,precision){
    var result=Number(value);
    if(typeof precision=="number"){
        precision=Math.pow(10,precision);
        result=Math.round(value*precision)/precision
        }
        return result
    },
number:function(v,format){
    if(!format){
        return v
        }
        v=Ext.num(v,NaN);
    if(isNaN(v)){
        return""
        }
        var comma=",",dec=".",i18n=false,neg=v<0;
    v=Math.abs(v);
    if(format.substr(format.length-2)=="/i"){
        format=format.substr(0,format.length-2);
        i18n=true;
        comma=".";
        dec=","
        }
        var hasComma=format.indexOf(comma)!=-1,psplit=(i18n?format.replace(/[^\d\,]/g,""):format.replace(/[^\d\.]/g,"")).split(dec);
    if(1<psplit.length){
        v=v.toFixed(psplit[1].length)
        }else{
        if(2<psplit.length){
            throw ("NumberFormatException: invalid format, formats should have no more than 1 period: "+format)
            }else{
            v=v.toFixed(0)
            }
        }
    var fnum=v.toString();
psplit=fnum.split(".");
if(hasComma){
    var cnum=psplit[0],parr=[],j=cnum.length,m=Math.floor(j/3),n=cnum.length%3||3;
    for(var i=0;i<j;i+=n){
        if(i!=0){
            n=3
            }
            parr[parr.length]=cnum.substr(i,n);
        m-=1
        }
        fnum=parr.join(comma);
    if(psplit[1]){
        fnum+=dec+psplit[1]
        }
    }else{
    if(psplit[1]){
        fnum=psplit[0]+dec+psplit[1]
        }
    }
return(neg?"-":"")+format.replace(/[\d,?\.?]+/,fnum)
},
numberRenderer:function(format){
    return function(v){
        return Ext.util.Format.number(v,format)
        }
    },
plural:function(v,s,p){
    return v+" "+(v==1?s:(p?p:s+"s"))
    },
nl2br:function(v){
    return Ext.isEmpty(v)?"":v.replace(nl2brRe,"<br/>")
    }
}
}();
Ext.XTemplate=function(){
    Ext.XTemplate.superclass.constructor.apply(this,arguments);
    var x=this,i=x.html,p=/<tpl\b[^>]*>((?:(?=([^<]+))\2|<(?!tpl\b[^>]*>))*?)<\/tpl>/,d=/^<tpl\b[^>]*?for="(.*?)"/,t=/^<tpl\b[^>]*?if="(.*?)"/,v=/^<tpl\b[^>]*?exec="(.*?)"/,q,o=0,j=[],n="values",u="parent",k="xindex",l="xcount",e="return ",c="with(values){ ";
    i=["<tpl>",i,"</tpl>"].join("");
    while((q=i.match(p))){
        var b=q[0].match(d),a=q[0].match(t),z=q[0].match(v),g=null,h=null,r=null,y=b&&b[1]?b[1]:"";
        if(a){
            g=a&&a[1]?a[1]:null;
            if(g){
                h=new Function(n,u,k,l,c+e+(Ext.util.Format.htmlDecode(g))+"; }")
                }
            }
        if(z){
        g=z&&z[1]?z[1]:null;
        if(g){
            r=new Function(n,u,k,l,c+(Ext.util.Format.htmlDecode(g))+"; }")
            }
        }
    if(y){
    switch(y){
        case".":
            y=new Function(n,u,c+e+n+"; }");
            break;
        case"..":
            y=new Function(n,u,c+e+u+"; }");
            break;
        default:
            y=new Function(n,u,c+e+y+"; }")
            }
        }
j.push({
    id:o,
    target:y,
    exec:r,
    test:h,
    body:q[1]||""
    });
i=i.replace(q[0],"{xtpl"+o+"}");
++o
}
Ext.each(j,function(m){
    x.compileTpl(m)
    });
x.master=j[j.length-1];
x.tpls=j
};

Ext.extend(Ext.XTemplate,Ext.Template,{
    re:/\{([\w-\.\#]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\\]\s?[\d\.\+\-\*\\\(\)]+)?\}/g,
    codeRe:/\{\[((?:\\\]|.|\n)*?)\]\}/g,
    applySubTemplate:function(a,i,h,d,c){
        var g=this,e,k=g.tpls[a],j,b=[];
        if((k.test&&!k.test.call(g,i,h,d,c))||(k.exec&&k.exec.call(g,i,h,d,c))){
            return""
            }
            j=k.target?k.target.call(g,i,h):i;
        e=j.length;
        h=k.target?i:h;
        if(k.target&&Ext.isArray(j)){
            Ext.each(j,function(l,m){
                b[b.length]=k.compiled.call(g,l,h,m+1,e)
                });
            return b.join("")
            }
            return k.compiled.call(g,j,h,d,c)
        },
    compileTpl:function(tpl){
        var fm=Ext.util.Format,useF=this.disableFormats!==true,sep=Ext.isGecko?"+":",",body;
        function fn(m,name,format,args,math){
            if(name.substr(0,4)=="xtpl"){
                return"'"+sep+"this.applySubTemplate("+name.substr(4)+", values, parent, xindex, xcount)"+sep+"'"
                }
                var v;
            if(name==="."){
                v="values"
                }else{
                if(name==="#"){
                    v="xindex"
                    }else{
                    if(name.indexOf(".")!=-1){
                        v=name
                        }else{
                        v="values['"+name+"']"
                        }
                    }
            }
        if(math){
        v="("+v+math+")"
        }
        if(format&&useF){
        args=args?","+args:"";
        if(format.substr(0,5)!="this."){
            format="fm."+format+"("
            }else{
            format='this.call("'+format.substr(5)+'", ';
            args=", values"
            }
        }else{
    args="";
    format="("+v+" === undefined ? '' : "
    }
    return"'"+sep+format+v+args+")"+sep+"'"
}
function codeFn(m,code){
    return"'"+sep+"("+code.replace(/\\'/g,"'")+")"+sep+"'"
    }
    if(Ext.isGecko){
    body="tpl.compiled = function(values, parent, xindex, xcount){ return '"+tpl.body.replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn).replace(this.codeRe,codeFn)+"';};"
    }else{
    body=["tpl.compiled = function(values, parent, xindex, xcount){ return ['"];
    body.push(tpl.body.replace(/(\r\n|\n)/g,"\\n").replace(/'/g,"\\'").replace(this.re,fn).replace(this.codeRe,codeFn));
    body.push("'].join('');};");
    body=body.join("")
    }
    eval(body);
    return this
    },
applyTemplate:function(a){
    return this.master.compiled.call(this,a,{},1,1)
    },
compile:function(){
    return this
    }
});
Ext.XTemplate.prototype.apply=Ext.XTemplate.prototype.applyTemplate;
Ext.XTemplate.from=function(a){
    a=Ext.getDom(a);
    return new Ext.XTemplate(a.value||a.innerHTML)
    };

Ext.util.CSS=function(){
    var d=null;
    var c=document;
    var b=/(-[a-z])/gi;
    var a=function(e,g){
        return g.charAt(1).toUpperCase()
        };

    return{
        createStyleSheet:function(i,l){
            var h;
            var g=c.getElementsByTagName("head")[0];
            var k=c.createElement("style");
            k.setAttribute("type","text/css");
            if(l){
                k.setAttribute("id",l)
                }
                if(Ext.isIE){
                g.appendChild(k);
                h=k.styleSheet;
                h.cssText=i
                }else{
                try{
                    k.appendChild(c.createTextNode(i))
                    }catch(j){
                    k.cssText=i
                    }
                    g.appendChild(k);
                h=k.styleSheet?k.styleSheet:(k.sheet||c.styleSheets[c.styleSheets.length-1])
                }
                this.cacheStyleSheet(h);
            return h
            },
        removeStyleSheet:function(g){
            var e=c.getElementById(g);
            if(e){
                e.parentNode.removeChild(e)
                }
            },
    swapStyleSheet:function(h,e){
        this.removeStyleSheet(h);
        var g=c.createElement("link");
        g.setAttribute("rel","stylesheet");
        g.setAttribute("type","text/css");
        g.setAttribute("id",h);
        g.setAttribute("href",e);
        c.getElementsByTagName("head")[0].appendChild(g)
        },
    refreshCache:function(){
        return this.getRules(true)
        },
    cacheStyleSheet:function(h){
        if(!d){
            d={}
        }
        try{
        var k=h.cssRules||h.rules;
        for(var g=k.length-1;g>=0;--g){
            d[k[g].selectorText.toLowerCase()]=k[g]
            }
        }catch(i){}
},
getRules:function(h){
    if(d===null||h){
        d={};

        var k=c.styleSheets;
        for(var j=0,g=k.length;j<g;j++){
            try{
                this.cacheStyleSheet(k[j])
                }catch(l){}
        }
        }
    return d
},
getRule:function(e,h){
    var g=this.getRules(h);
    if(!Ext.isArray(e)){
        return g[e.toLowerCase()]
        }
        for(var j=0;j<e.length;j++){
        if(g[e[j]]){
            return g[e[j].toLowerCase()]
            }
        }
    return null
},
updateRule:function(e,j,h){
    if(!Ext.isArray(e)){
        var k=this.getRule(e);
        if(k){
            k.style[j.replace(b,a)]=h;
            return true
            }
        }else{
    for(var g=0;g<e.length;g++){
        if(this.updateRule(e[g],j,h)){
            return true
            }
        }
    }
return false
}
}
}();
Ext.util.ClickRepeater=function(b,a){
    this.el=Ext.get(b);
    this.el.unselectable();
    Ext.apply(this,a);
    this.addEvents("mousedown","click","mouseup");
    if(!this.disabled){
        this.disabled=true;
        this.enable()
        }
        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,
    enable:function(){
        if(this.disabled){
            this.el.on("mousedown",this.handleMouseDown,this);
            if(Ext.isIE){
                this.el.on("dblclick",this.handleDblClick,this)
                }
                if(this.preventDefault||this.stopDefault){
                this.el.on("click",this.eventOptions,this)
                }
            }
        this.disabled=false
    },
disable:function(a){
    if(a||!this.disabled){
        clearTimeout(this.timer);
        if(this.pressClass){
            this.el.removeClass(this.pressClass)
            }
            Ext.getDoc().un("mouseup",this.handleMouseUp,this);
        this.el.removeAllListeners()
        }
        this.disabled=true
    },
setDisabled:function(a){
    this[a?"disable":"enable"]()
    },
eventOptions:function(a){
    if(this.preventDefault){
        a.preventDefault()
        }
        if(this.stopDefault){
        a.stopEvent()
        }
    },
destroy:function(){
    this.disable(true);
    Ext.destroy(this.el);
    this.purgeListeners()
    },
handleDblClick:function(){
    clearTimeout(this.timer);
    this.el.blur();
    this.fireEvent("mousedown",this);
    this.fireEvent("click",this)
    },
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(e,a,h,g){
    return(e==g)?a+h:h*(-Math.pow(2,-10*e/g)+1)+a
    },
handleMouseOut:function(){
    clearTimeout(this.timer);
    if(this.pressClass){
        this.el.removeClass(this.pressClass)
        }
        this.el.on("mouseover",this.handleMouseReturn,this)
    },
handleMouseReturn:function(){
    this.el.un("mouseover",this.handleMouseReturn,this);
    if(this.pressClass){
        this.el.addClass(this.pressClass)
        }
        this.click()
    },
handleMouseUp:function(){
    clearTimeout(this.timer);
    this.el.un("mouseover",this.handleMouseReturn,this);
    this.el.un("mouseout",this.handleMouseOut,this);
    Ext.getDoc().un("mouseup",this.handleMouseUp,this);
    this.el.removeClass(this.pressClass);
    this.fireEvent("mouseup",this)
    }
});
Ext.KeyNav=function(b,a){
    this.el=Ext.get(b);
    Ext.apply(this,a);
    if(!this.disabled){
        this.disabled=true;
        this.enable()
        }
    };

Ext.KeyNav.prototype={
    disabled:false,
    defaultEventAction:"stopEvent",
    forceKeyDown:false,
    relay:function(c){
        var a=c.getKey();
        var b=this.keyToHandler[a];
        if(b&&this[b]){
            if(this.doRelay(c,this[b],b)!==true){
                c[this.defaultEventAction]()
                }
            }
    },
doRelay:function(c,b,a){
    return b.call(this.scope||this,c)
    },
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"
},
stopKeyUp:function(b){
    var a=b.getKey();
    if(a>=37&&a<=40){
        b.stopEvent()
        }
    },
destroy:function(){
    this.disable()
    },
enable:function(){
    if(this.disabled){
        if(Ext.isSafari2){
            this.el.on("keyup",this.stopKeyUp,this)
            }
            this.el.on(this.isKeydown()?"keydown":"keypress",this.relay,this);
        this.disabled=false
        }
    },
disable:function(){
    if(!this.disabled){
        if(Ext.isSafari2){
            this.el.un("keyup",this.stopKeyUp,this)
            }
            this.el.un(this.isKeydown()?"keydown":"keypress",this.relay,this);
        this.disabled=true
        }
    },
setDisabled:function(a){
    this[a?"disable":"enable"]()
    },
isKeydown:function(){
    return this.forceKeyDown||Ext.EventManager.useKeydown
    }
};

Ext.KeyMap=function(c,b,a){
    this.el=Ext.get(c);
    this.eventName=a||"keydown";
    this.bindings=[];
    if(b){
        this.addBinding(b)
        }
        this.enable()
    };

Ext.KeyMap.prototype={
    stopEvent:false,
    addBinding:function(b){
        if(Ext.isArray(b)){
            Ext.each(b,function(j){
                this.addBinding(j)
                },this);
            return
        }
        var k=b.key,g=b.fn||b.handler,l=b.scope;
        if(b.stopEvent){
            this.stopEvent=b.stopEvent
            }
            if(typeof k=="string"){
            var h=[];
            var e=k.toUpperCase();
            for(var c=0,d=e.length;c<d;c++){
                h.push(e.charCodeAt(c))
                }
                k=h
            }
            var a=Ext.isArray(k);
        var i=function(o){
            if(this.checkModifiers(b,o)){
                var m=o.getKey();
                if(a){
                    for(var n=0,j=k.length;n<j;n++){
                        if(k[n]==m){
                            if(this.stopEvent){
                                o.stopEvent()
                                }
                                g.call(l||window,m,o);
                            return
                        }
                    }
                    }else{
            if(m==k){
                if(this.stopEvent){
                    o.stopEvent()
                    }
                    g.call(l||window,m,o)
                }
            }
    }
};

this.bindings.push(i)
},
checkModifiers:function(b,h){
    var j,d,g=["shift","ctrl","alt"];
    for(var c=0,a=g.length;c<a;++c){
        d=g[c];
        j=b[d];
        if(!(j===undefined||(j===h[d+"Key"]))){
            return false
            }
        }
    return true
},
on:function(b,d,c){
    var h,a,e,g;
    if(typeof b=="object"&&!Ext.isArray(b)){
        h=b.key;
        a=b.shift;
        e=b.ctrl;
        g=b.alt
        }else{
        h=b
        }
        this.addBinding({
        key:h,
        shift:a,
        ctrl:e,
        alt:g,
        fn:d,
        scope:c
    })
    },
handleKeyDown:function(g){
    if(this.enabled){
        var c=this.bindings;
        for(var d=0,a=c.length;d<a;d++){
            c[d].call(this,g)
            }
        }
    },
isEnabled:function(){
    return this.enabled
    },
enable:function(){
    if(!this.enabled){
        this.el.on(this.eventName,this.handleKeyDown,this);
        this.enabled=true
        }
    },
disable:function(){
    if(this.enabled){
        this.el.removeListener(this.eventName,this.handleKeyDown,this);
        this.enabled=false
        }
    },
setDisabled:function(a){
    this[a?"disable":"enable"]()
    }
};

Ext.util.TextMetrics=function(){
    var a;
    return{
        measure:function(b,c,d){
            if(!a){
                a=Ext.util.TextMetrics.Instance(b,d)
                }
                a.bind(b);
            a.setFixedWidth(d||"auto");
            return a.getSize(c)
            },
        createInstance:function(b,c){
            return Ext.util.TextMetrics.Instance(b,c)
            }
        }
}();
Ext.util.TextMetrics.Instance=function(b,d){
    var c=new Ext.Element(document.createElement("div"));
    document.body.appendChild(c.dom);
    c.position("absolute");
    c.setLeftTop(-1000,-1000);
    c.hide();
    if(d){
        c.setWidth(d)
        }
        var a={
        getSize:function(g){
            c.update(g);
            var e=c.getSize();
            c.update("");
            return e
            },
        bind:function(e){
            c.setStyle(Ext.fly(e).getStyles("font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"))
            },
        setFixedWidth:function(e){
            c.setWidth(e)
            },
        getWidth:function(e){
            c.dom.style.width="auto";
            return this.getSize(e).width
            },
        getHeight:function(e){
            return this.getSize(e).height
            }
        };

a.bind(b);
    return a
    };

Ext.Element.addMethods({
    getTextWidth:function(c,b,a){
        return(Ext.util.TextMetrics.measure(this.dom,Ext.value(c,this.dom.innerHTML,true)).width).constrain(b||0,a||1000000)
        }
    });
Ext.util.Cookies={
    set:function(c,e){
        var a=arguments;
        var i=arguments.length;
        var b=(i>2)?a[2]:null;
        var h=(i>3)?a[3]:"/";
        var d=(i>4)?a[4]:null;
        var g=(i>5)?a[5]:false;
        document.cookie=c+"="+escape(e)+((b===null)?"":("; expires="+b.toGMTString()))+((h===null)?"":("; path="+h))+((d===null)?"":("; domain="+d))+((g===true)?"; secure":"")
        },
    get:function(d){
        var b=d+"=";
        var g=b.length;
        var a=document.cookie.length;
        var e=0;
        var c=0;
        while(e<a){
            c=e+g;
            if(document.cookie.substring(e,c)==b){
                return Ext.util.Cookies.getCookieVal(c)
                }
                e=document.cookie.indexOf(" ",e)+1;
            if(e===0){
                break
            }
        }
        return null
    },
clear:function(a){
    if(Ext.util.Cookies.get(a)){
        document.cookie=a+"=; expires=Thu, 01-Jan-70 00:00:01 GMT"
        }
    },
getCookieVal:function(b){
    var a=document.cookie.indexOf(";",b);
    if(a==-1){
        a=document.cookie.length
        }
        return unescape(document.cookie.substring(b,a))
    }
};

Ext.handleError=function(a){
    throw a
    };

Ext.Error=function(a){
    this.message=(this.lang[a])?this.lang[a]:a
    };

Ext.Error.prototype=new Error();
Ext.apply(Ext.Error.prototype,{
    lang:{},
    name:"Ext.Error",
    getName:function(){
        return this.name
        },
    getMessage:function(){
        return this.message
        },
    toJson:function(){
        return Ext.encode(this)
        }
    });
Ext.ComponentMgr=function(){
    var c=new Ext.util.MixedCollection();
    var b={};

    var a={};

    return{
        register:function(d){
            c.add(d)
            },
        unregister:function(d){
            c.remove(d)
            },
        get:function(d){
            return c.get(d)
            },
        onAvailable:function(g,e,d){
            c.on("add",function(h,i){
                if(i.id==g){
                    e.call(d||i,i);
                    c.un("add",e,d)
                    }
                })
        },
    all:c,
    types:b,
    ptypes:a,
    isRegistered:function(d){
        return b[d]!==undefined
        },
    isPluginRegistered:function(d){
        return a[d]!==undefined
        },
    registerType:function(e,d){
        b[e]=d;
        d.xtype=e
        },
    create:function(d,e){
        return d.render?d:new b[d.xtype||e](d)
        },
    registerPlugin:function(e,d){
        a[e]=d;
        d.ptype=e
        },
    createPlugin:function(e,g){
        var d=a[e.ptype||g];
        if(d.init){
            return d
            }else{
            return new d(e)
            }
        }
}
}();
Ext.reg=Ext.ComponentMgr.registerType;
Ext.preg=Ext.ComponentMgr.registerPlugin;
Ext.create=Ext.ComponentMgr.create;
Ext.Component=function(b){
    b=b||{};

    if(b.initialConfig){
        if(b.isAction){
            this.baseAction=b
            }
            b=b.initialConfig
        }else{
        if(b.tagName||b.dom||Ext.isString(b)){
            b={
                applyTo:b,
                id:b.id||b
                }
            }
    }
this.initialConfig=b;
Ext.apply(this,b);
this.addEvents("added","disable","enable","beforeshow","show","beforehide","hide","removed","beforerender","render","afterrender","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 c=0,a=this.plugins.length;c<a;c++){
            this.plugins[c]=this.initPlugin(this.plugins[c])
            }
        }else{
    this.plugins=this.initPlugin(this.plugins)
    }
}
if(this.stateful!==false){
    this.initState()
    }
    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,{
    disabled:false,
    hidden:false,
    autoEl:"div",
    disabledClass:"x-item-disabled",
    allowDomMove:true,
    autoShow:false,
    hideMode:"display",
    hideParent:false,
    rendered:false,
    tplWriteMode:"overwrite",
    bubbleEvents:[],
    ctype:"Ext.Component",
    actionMode:"el",
    getActionEl:function(){
        return this[this.actionMode]
        },
    initPlugin:function(a){
        if(a.ptype&&!Ext.isFunction(a.init)){
            a=Ext.ComponentMgr.createPlugin(a)
            }else{
            if(Ext.isString(a)){
                a=Ext.ComponentMgr.createPlugin({
                    ptype:a
                })
                }
            }
        a.init(this);
    return a
    },
initComponent:function(){
    if(this.listeners){
        this.on(this.listeners);
        delete this.listeners
        }
        this.enableBubble(this.bubbleEvents)
    },
render:function(b,a){
    if(!this.rendered&&this.fireEvent("beforerender",this)!==false){
        if(!b&&this.el){
            this.el=Ext.get(this.el);
            b=this.el.dom.parentNode;
            this.allowDomMove=false
            }
            this.container=Ext.get(b);
        if(this.ctCls){
            this.container.addClass(this.ctCls)
            }
            this.rendered=true;
        if(a!==undefined){
            if(Ext.isNumber(a)){
                a=this.container.dom.childNodes[a]
                }else{
                a=Ext.getDom(a)
                }
            }
        this.onRender(this.container,a||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
        }
        if(this.overCls){
        this.el.addClassOnOver(this.overCls)
        }
        this.fireEvent("render",this);
    var c=this.getContentTarget();
    if(this.html){
        c.update(Ext.DomHelper.markup(this.html));
        delete this.html
        }
        if(this.contentEl){
        var d=Ext.getDom(this.contentEl);
        Ext.fly(d).removeClass(["x-hidden","x-hide-display"]);
        c.appendChild(d)
        }
        if(this.tpl){
        if(!this.tpl.compile){
            this.tpl=new Ext.XTemplate(this.tpl)
            }
            if(this.data){
            this.tpl[this.tplWriteMode](c,this.data);
            delete this.data
            }
        }
    this.afterRender(this.container);
    if(this.hidden){
    this.doHide()
    }
    if(this.disabled){
    this.disable(true)
    }
    if(this.stateful!==false){
    this.initStateEvents()
    }
    this.fireEvent("afterrender",this)
    }
    return this
},
update:function(b,d,a){
    var c=this.getContentTarget();
    if(this.tpl&&typeof b!=="string"){
        this.tpl[this.tplWriteMode](c,b||{})
        }else{
        var e=Ext.isObject(b)?Ext.DomHelper.markup(b):b;
        c.update(e,d,a)
        }
    },
onAdded:function(a,b){
    this.ownerCt=a;
    this.initRef();
    this.fireEvent("added",this,a,b)
    },
onRemoved:function(){
    this.removeRef();
    this.fireEvent("removed",this,this.ownerCt);
    delete this.ownerCt
    },
initRef:function(){
    if(this.ref&&!this.refOwner){
        var d=this.ref.split("/"),c=d.length,b=0,a=this;
        while(a&&b<c){
            a=a.ownerCt;
            ++b
            }
            if(a){
            a[this.refName=d[--b]]=this;
            this.refOwner=a
            }
        }
},
removeRef:function(){
    if(this.refOwner&&this.refName){
        delete this.refOwner[this.refName];
        delete this.refOwner
        }
    },
initState:function(){
    if(Ext.state.Manager){
        var b=this.getStateId();
        if(b){
            var a=Ext.state.Manager.get(b);
            if(a){
                if(this.fireEvent("beforestaterestore",this,a)!==false){
                    this.applyState(Ext.apply({},a));
                    this.fireEvent("staterestore",this,a)
                    }
                }
        }
}
},
getStateId:function(){
    return this.stateId||((/^(ext-comp-|ext-gen)/).test(String(this.id))?null:this.id)
    },
initStateEvents:function(){
    if(this.stateEvents){
        for(var a=0,b;b=this.stateEvents[a];a++){
            this.on(b,this.saveState,this,{
                delay:100
            })
            }
        }
    },
applyState:function(a){
    if(a){
        Ext.apply(this,a)
        }
    },
getState:function(){
    return null
    },
saveState:function(){
    if(Ext.state.Manager&&this.stateful!==false){
        var b=this.getStateId();
        if(b){
            var a=this.getState();
            if(this.fireEvent("beforestatesave",this,a)!==false){
                Ext.state.Manager.set(b,a);
                this.fireEvent("statesave",this,a)
                }
            }
    }
},
applyToMarkup:function(a){
    this.allowDomMove=false;
    this.el=Ext.get(a);
    this.render(this.el.dom.parentNode)
    },
addClass:function(a){
    if(this.el){
        this.el.addClass(a)
        }else{
        this.cls=this.cls?this.cls+" "+a:a
        }
        return this
    },
removeClass:function(a){
    if(this.el){
        this.el.removeClass(a)
        }else{
        if(this.cls){
            this.cls=this.cls.split(" ").remove(a).join(" ")
            }
        }
    return this
},
onRender:function(b,a){
    if(!this.el&&this.autoEl){
        if(Ext.isString(this.autoEl)){
            this.el=document.createElement(this.autoEl)
            }else{
            var c=document.createElement("div");
            Ext.DomHelper.overwrite(c,this.autoEl);
            this.el=c.firstChild
            }
            if(!this.el.id){
            this.el.id=this.getId()
            }
        }
    if(this.el){
    this.el=Ext.get(this.el);
    if(this.allowDomMove!==false){
        b.dom.insertBefore(this.el.dom,a);
        if(c){
            Ext.removeNode(c);
            c=null
            }
        }
}
},
getAutoCreate:function(){
    var a=Ext.isObject(this.autoCreate)?this.autoCreate:Ext.apply({},this.defaultAutoCreate);
    if(this.id&&!a.id){
        a.id=this.id
        }
        return a
    },
afterRender:Ext.emptyFn,
destroy:function(){
    if(!this.isDestroyed){
        if(this.fireEvent("beforedestroy",this)!==false){
            this.destroying=true;
            this.beforeDestroy();
            if(this.ownerCt&&this.ownerCt.remove){
                this.ownerCt.remove(this,false)
                }
                if(this.rendered){
                this.el.remove();
                if(this.actionMode=="container"||this.removeMode=="container"){
                    this.container.remove()
                    }
                }
            if(this.focusTask&&this.focusTask.cancel){
            this.focusTask.cancel()
            }
            this.onDestroy();
        Ext.ComponentMgr.unregister(this);
        this.fireEvent("destroy",this);
        this.purgeListeners();
        this.destroying=false;
        this.isDestroyed=true
        }
    }
},
deleteMembers:function(){
    var b=arguments;
    for(var c=0,a=b.length;c<a;++c){
        delete this[b[c]]
    }
    },
beforeDestroy:Ext.emptyFn,
onDestroy:Ext.emptyFn,
getEl:function(){
    return this.el
    },
getContentTarget: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(b,a){
    if(a){
        this.focusTask=new Ext.util.DelayedTask(this.focus,this,[b,false]);
        this.focusTask.delay(Ext.isNumber(a)?a:10);
        return
    }
    if(this.rendered&&!this.isDestroyed){
        this.el.focus();
        if(b===true){
            this.el.dom.select()
            }
        }
    return this
},
blur:function(){
    if(this.rendered){
        this.el.blur()
        }
        return this
    },
disable:function(a){
    if(this.rendered){
        this.onDisable()
        }
        this.disabled=true;
    if(a!==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(a){
    return this[a?"disable":"enable"]()
    },
show:function(){
    if(this.fireEvent("beforeshow",this)!==false){
        this.hidden=false;
        if(this.autoRender){
            this.render(Ext.isBoolean(this.autoRender)?Ext.getBody():this.autoRender)
            }
            if(this.rendered){
            this.onShow()
            }
            this.fireEvent("show",this)
        }
        return this
    },
onShow:function(){
    this.getVisibilityEl().removeClass("x-hide-"+this.hideMode)
    },
hide:function(){
    if(this.fireEvent("beforehide",this)!==false){
        this.doHide();
        this.fireEvent("hide",this)
        }
        return this
    },
doHide:function(){
    this.hidden=true;
    if(this.rendered){
        this.onHide()
        }
    },
onHide:function(){
    this.getVisibilityEl().addClass("x-hide-"+this.hideMode)
    },
getVisibilityEl:function(){
    return this.hideParent?this.container:this.getActionEl()
    },
setVisible:function(a){
    return this[a?"show":"hide"]()
    },
isVisible:function(){
    return this.rendered&&this.getVisibilityEl().isVisible()
    },
cloneConfig:function(b){
    b=b||{};

    var c=b.id||Ext.id();
    var a=Ext.applyIf(b,this.initialConfig);
    a.id=c;
    return new this.constructor(a)
    },
getXType:function(){
    return this.constructor.xtype
    },
isXType:function(b,a){
    if(Ext.isFunction(b)){
        b=b.xtype
        }else{
        if(Ext.isObject(b)){
            b=b.constructor.xtype
            }
        }
    return !a?("/"+this.getXTypes()+"/").indexOf("/"+b+"/")!=-1:this.constructor.xtype==b
},
getXTypes:function(){
    var a=this.constructor;
    if(!a.xtypes){
        var d=[],b=this;
        while(b&&b.constructor.xtype){
            d.unshift(b.constructor.xtype);
            b=b.constructor.superclass
            }
            a.xtypeChain=d;
        a.xtypes=d.join("/")
        }
        return a.xtypes
    },
findParentBy:function(a){
    for(var b=this.ownerCt;(b!=null)&&!a(b,this);b=b.ownerCt){}
    return b||null
    },
findParentByType:function(a){
    return Ext.isFunction(a)?this.findParentBy(function(b){
        return b.constructor===a
        }):this.findParentBy(function(b){
        return b.constructor.xtype===a
        })
    },
getPositionEl:function(){
    return this.positionEl||this.el
    },
purgeListeners:function(){
    Ext.Component.superclass.purgeListeners.call(this);
    if(this.mons){
        this.on("beforedestroy",this.clearMons,this,{
            single:true
        })
        }
    },
clearMons:function(){
    Ext.each(this.mons,function(a){
        a.item.un(a.ename,a.fn,a.scope)
        },this);
    this.mons=[]
    },
createMons:function(){
    if(!this.mons){
        this.mons=[];
        this.on("beforedestroy",this.clearMons,this,{
            single:true
        })
        }
    },
mon:function(g,b,d,c,a){
    this.createMons();
    if(Ext.isObject(b)){
        var j=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized|args|delegate)$/;
        var i=b;
        for(var h in i){
            if(j.test(h)){
                continue
            }
            if(Ext.isFunction(i[h])){
                this.mons.push({
                    item:g,
                    ename:h,
                    fn:i[h],
                    scope:i.scope
                    });
                g.on(h,i[h],i.scope,i)
                }else{
                this.mons.push({
                    item:g,
                    ename:h,
                    fn:i[h],
                    scope:i.scope
                    });
                g.on(h,i[h])
                }
            }
        return
}
this.mons.push({
    item:g,
    ename:b,
    fn:d,
    scope:c
});
g.on(b,d,c,a)
},
mun:function(h,c,g,e){
    var j,d;
    this.createMons();
    for(var b=0,a=this.mons.length;b<a;++b){
        d=this.mons[b];
        if(h===d.item&&c==d.ename&&g===d.fn&&e===d.scope){
            this.mons.splice(b,1);
            h.un(c,g,e);
            j=true;
            break
        }
    }
    return j
},
nextSibling:function(){
    if(this.ownerCt){
        var a=this.ownerCt.items.indexOf(this);
        if(a!=-1&&a+1<this.ownerCt.items.getCount()){
            return this.ownerCt.items.itemAt(a+1)
            }
        }
    return null
},
previousSibling:function(){
    if(this.ownerCt){
        var a=this.ownerCt.items.indexOf(this);
        if(a>0){
            return this.ownerCt.items.itemAt(a-1)
            }
        }
    return null
},
getBubbleTarget:function(){
    return this.ownerCt
    }
});
Ext.reg("component",Ext.Component);
Ext.Action=Ext.extend(Object,{
    constructor:function(a){
        this.initialConfig=a;
        this.itemId=a.itemId=(a.itemId||a.id||Ext.id());
        this.items=[]
        },
    isAction:true,
    setText:function(a){
        this.initialConfig.text=a;
        this.callEach("setText",[a])
        },
    getText:function(){
        return this.initialConfig.text
        },
    setIconClass:function(a){
        this.initialConfig.iconCls=a;
        this.callEach("setIconClass",[a])
        },
    getIconClass:function(){
        return this.initialConfig.iconCls
        },
    setDisabled:function(a){
        this.initialConfig.disabled=a;
        this.callEach("setDisabled",[a])
        },
    enable:function(){
        this.setDisabled(false)
        },
    disable:function(){
        this.setDisabled(true)
        },
    isDisabled:function(){
        return this.initialConfig.disabled
        },
    setHidden:function(a){
        this.initialConfig.hidden=a;
        this.callEach("setVisible",[!a])
        },
    show:function(){
        this.setHidden(false)
        },
    hide:function(){
        this.setHidden(true)
        },
    isHidden:function(){
        return this.initialConfig.hidden
        },
    setHandler:function(b,a){
        this.initialConfig.handler=b;
        this.initialConfig.scope=a;
        this.callEach("setHandler",[b,a])
        },
    each:function(b,a){
        Ext.each(this.items,b,a)
        },
    callEach:function(e,b){
        var d=this.items;
        for(var c=0,a=d.length;c<a;c++){
            d[c][e].apply(d[c],b)
            }
        },
addComponent:function(a){
    this.items.push(a);
    a.on("destroy",this.removeComponent,this)
    },
removeComponent:function(a){
    this.items.remove(a)
    },
execute:function(){
    this.initialConfig.handler.apply(this.initialConfig.scope||window,arguments)
    }
});
(function(){
    Ext.Layer=function(d,c){
        d=d||{};

        var e=Ext.DomHelper;
        var h=d.parentEl,g=h?Ext.getDom(h):document.body;
        if(c){
            this.dom=Ext.getDom(c)
            }
            if(!this.dom){
            var i=d.dh||{
                tag:"div",
                cls:"x-layer"
            };

            this.dom=e.append(g,i)
            }
            if(d.cls){
            this.addClass(d.cls)
            }
            this.constrain=d.constrain!==false;
        this.setVisibilityMode(Ext.Element.VISIBILITY);
        if(d.id){
            this.id=this.dom.id=d.id
            }else{
            this.id=Ext.id(this.dom)
            }
            this.zindex=d.zindex||this.getZIndex();
        this.position("absolute",this.zindex);
        if(d.shadow){
            this.shadowOffset=d.shadowOffset||4;
            this.shadow=new Ext.Shadow({
                offset:this.shadowOffset,
                mode:d.shadow
                })
            }else{
            this.shadowOffset=0
            }
            this.useShim=d.shim!==false&&Ext.useShims;
        this.useDisplay=d.useDisplay;
        this.hide()
        };

    var a=Ext.Element.prototype;
    var b=[];
    Ext.extend(Ext.Layer,Ext.Element,{
        getZIndex:function(){
            return this.zindex||parseInt((this.getShim()||this).getStyle("z-index"),10)||11000
            },
        getShim:function(){
            if(!this.useShim){
                return null
                }
                if(this.shim){
                return this.shim
                }
                var d=b.shift();
            if(!d){
                d=this.createShim();
                d.enableDisplayMode("block");
                d.dom.style.display="none";
                d.dom.style.visibility="visible"
                }
                var c=this.dom.parentNode;
            if(d.dom.parentNode!=c){
                c.insertBefore(d.dom,this.dom)
                }
                d.setStyle("z-index",this.getZIndex()-2);
            this.shim=d;
            return d
            },
        hideShim:function(){
            if(this.shim){
                this.shim.setDisplayed(false);
                b.push(this.shim);
                delete this.shim
                }
            },
    disableShadow:function(){
        if(this.shadow){
            this.shadowDisabled=true;
            this.shadow.hide();
            this.lastShadowOffset=this.shadowOffset;
            this.shadowOffset=0
            }
        },
    enableShadow:function(c){
        if(this.shadow){
            this.shadowDisabled=false;
            this.shadowOffset=this.lastShadowOffset;
            delete this.lastShadowOffset;
            if(c){
                this.sync(true)
                }
            }
    },
sync:function(d){
    var n=this.shadow;
    if(!this.updating&&this.isVisible()&&(n||this.useShim)){
        var i=this.getShim(),m=this.getWidth(),j=this.getHeight(),e=this.getLeft(true),o=this.getTop(true);
        if(n&&!this.shadowDisabled){
            if(d&&!n.isVisible()){
                n.show(this)
                }else{
                n.realign(e,o,m,j)
                }
                if(i){
                if(d){
                    i.show()
                    }
                    var k=n.el.getXY(),g=i.dom.style,c=n.el.getSize();
                g.left=(k[0])+"px";
                g.top=(k[1])+"px";
                g.width=(c.width)+"px";
                g.height=(c.height)+"px"
                }
            }else{
        if(i){
            if(d){
                i.show()
                }
                i.setSize(m,j);
            i.setLeftTop(e,o)
            }
        }
}
},
destroy:function(){
    this.hideShim();
    if(this.shadow){
        this.shadow.hide()
        }
        this.removeAllListeners();
    Ext.removeNode(this.dom);
    delete this.dom
    },
remove:function(){
    this.destroy()
    },
beginUpdate:function(){
    this.updating=true
    },
endUpdate:function(){
    this.updating=false;
    this.sync(true)
    },
hideUnders:function(c){
    if(this.shadow){
        this.shadow.hide()
        }
        this.hideShim()
    },
constrainXY:function(){
    if(this.constrain){
        var j=Ext.lib.Dom.getViewWidth(),d=Ext.lib.Dom.getViewHeight();
        var o=Ext.getDoc().getScroll();
        var n=this.getXY();
        var k=n[0],i=n[1];
        var c=this.shadowOffset;
        var l=this.dom.offsetWidth+c,e=this.dom.offsetHeight+c;
        var g=false;
        if((k+l)>j+o.left){
            k=j-l-c;
            g=true
            }
            if((i+e)>d+o.top){
            i=d-e-c;
            g=true
            }
            if(k<o.left){
            k=o.left;
            g=true
            }
            if(i<o.top){
            i=o.top;
            g=true
            }
            if(g){
            if(this.avoidY){
                var m=this.avoidY;
                if(i<=m&&(i+e)>=m){
                    i=m-e-5
                    }
                }
            n=[k,i];
        this.storeXY(n);
        a.setXY.call(this,n);
        this.sync()
        }
    }
return this
},
isVisible:function(){
    return this.visible
    },
showAction:function(){
    this.visible=true;
    if(this.useDisplay===true){
        this.setDisplayed("")
        }else{
        if(this.lastXY){
            a.setXY.call(this,this.lastXY)
            }else{
            if(this.lastLT){
                a.setLeftTop.call(this,this.lastLT[0],this.lastLT[1])
                }
            }
    }
},
hideAction:function(){
    this.visible=false;
    if(this.useDisplay===true){
        this.setDisplayed(false)
        }else{
        this.setLeftTop(-10000,-10000)
        }
    },
setVisible:function(i,h,k,l,j){
    if(i){
        this.showAction()
        }
        if(h&&i){
        var g=function(){
            this.sync(true);
            if(l){
                l()
                }
            }.createDelegate(this);
    a.setVisible.call(this,true,true,k,g,j)
    }else{
    if(!i){
        this.hideUnders(true)
        }
        var g=l;
    if(h){
        g=function(){
            this.hideAction();
            if(l){
                l()
                }
            }.createDelegate(this)
    }
    a.setVisible.call(this,i,h,k,g,j);
if(i){
    this.sync(true)
    }else{
    if(!h){
        this.hideAction()
        }
    }
}
return this
},
storeXY:function(c){
    delete this.lastLT;
    this.lastXY=c
    },
storeLeftTop:function(d,c){
    delete this.lastXY;
    this.lastLT=[d,c]
    },
beforeFx:function(){
    this.beforeAction();
    return Ext.Layer.superclass.beforeFx.apply(this,arguments)
    },
afterFx:function(){
    Ext.Layer.superclass.afterFx.apply(this,arguments);
    this.sync(this.isVisible())
    },
beforeAction:function(){
    if(!this.updating&&this.shadow){
        this.shadow.hide()
        }
    },
setLeft:function(c){
    this.storeLeftTop(c,this.getTop(true));
    a.setLeft.apply(this,arguments);
    this.sync();
    return this
    },
setTop:function(c){
    this.storeLeftTop(this.getLeft(true),c);
    a.setTop.apply(this,arguments);
    this.sync();
    return this
    },
setLeftTop:function(d,c){
    this.storeLeftTop(d,c);
    a.setLeftTop.apply(this,arguments);
    this.sync();
    return this
    },
setXY:function(j,h,k,l,i){
    this.fixDisplay();
    this.beforeAction();
    this.storeXY(j);
    var g=this.createCB(l);
    a.setXY.call(this,j,h,k,g,i);
    if(!h){
        g()
        }
        return this
    },
createCB:function(e){
    var d=this;
    return function(){
        d.constrainXY();
        d.sync(true);
        if(e){
            e()
            }
        }
},
setX:function(g,h,j,k,i){
    this.setXY([g,this.getY()],h,j,k,i);
    return this
    },
setY:function(k,g,i,j,h){
    this.setXY([this.getX(),k],g,i,j,h);
    return this
    },
setSize:function(j,k,i,m,n,l){
    this.beforeAction();
    var g=this.createCB(n);
    a.setSize.call(this,j,k,i,m,g,l);
    if(!i){
        g()
        }
        return this
    },
setWidth:function(i,h,k,l,j){
    this.beforeAction();
    var g=this.createCB(l);
    a.setWidth.call(this,i,h,k,g,j);
    if(!h){
        g()
        }
        return this
    },
setHeight:function(j,i,l,m,k){
    this.beforeAction();
    var g=this.createCB(m);
    a.setHeight.call(this,j,i,l,g,k);
    if(!i){
        g()
        }
        return this
    },
setBounds:function(o,m,p,i,n,k,l,j){
    this.beforeAction();
    var g=this.createCB(l);
    if(!n){
        this.storeXY([o,m]);
        a.setXY.call(this,[o,m]);
        a.setSize.call(this,p,i,n,k,g,j);
        g()
        }else{
        a.setBounds.call(this,o,m,p,i,n,k,g,j)
        }
        return this
    },
setZIndex:function(c){
    this.zindex=c;
    this.setStyle("z-index",c+2);
    if(this.shadow){
        this.shadow.setZIndex(c+1)
        }
        if(this.shim){
        this.shim.setStyle("z-index",c)
        }
        return this
    }
})
})();
Ext.Shadow=function(d){
    Ext.apply(this,d);
    if(typeof this.mode!="string"){
        this.mode=this.defaultMode
        }
        var e=this.offset,c={
        h:0
    };

    var b=Math.floor(this.offset/2);
    switch(this.mode.toLowerCase()){
        case"drop":
            c.w=0;
            c.l=c.t=e;
            c.t-=1;
            if(Ext.isIE){
            c.l-=this.offset+b;
            c.t-=this.offset+b;
            c.w-=b;
            c.h-=b;
            c.t+=1
            }
            break;
        case"sides":
            c.w=(e*2);
            c.l=-e;
            c.t=e-1;
            if(Ext.isIE){
            c.l-=(this.offset-b);
            c.t-=this.offset+b;
            c.l+=1;
            c.w-=(this.offset-b)*2;
            c.w-=b+1;
            c.h-=1
            }
            break;
        case"frame":
            c.w=c.h=(e*2);
            c.l=c.t=-e;
            c.t+=1;
            c.h-=2;
            if(Ext.isIE){
            c.l-=(this.offset-b);
            c.t-=(this.offset-b);
            c.l+=1;
            c.w-=(this.offset+b+1);
            c.h-=(this.offset+b);
            c.h+=1
            }
            break
        }
        this.adjusts=c
    };

Ext.Shadow.prototype={
    offset:4,
    defaultMode:"drop",
    show:function(a){
        a=Ext.get(a);
        if(!this.el){
            this.el=Ext.Shadow.Pool.pull();
            if(this.el.dom.nextSibling!=a.dom){
                this.el.insertBefore(a)
                }
            }
        this.el.setStyle("z-index",this.zIndex||parseInt(a.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(a.getLeft(true),a.getTop(true),a.getWidth(),a.getHeight());
    this.el.dom.style.display="block"
    },
isVisible:function(){
    return this.el?true:false
    },
realign:function(b,r,q,g){
    if(!this.el){
        return
    }
    var n=this.adjusts,k=this.el.dom,u=k.style;
    var i=0;
    u.left=(b+n.l)+"px";
    u.top=(r+n.t)+"px";
    var p=(q+n.w),e=(g+n.h),j=p+"px",o=e+"px";
    if(u.width!=j||u.height!=o){
        u.width=j;
        u.height=o;
        if(!Ext.isIE){
            var m=k.childNodes;
            var c=Math.max(0,(p-12))+"px";
            m[0].childNodes[1].style.width=c;
            m[1].childNodes[1].style.width=c;
            m[2].childNodes[1].style.width=c;
            m[1].style.height=Math.max(0,(e-12))+"px"
            }
        }
},
hide:function(){
    if(this.el){
        this.el.dom.style.display="none";
        Ext.Shadow.Pool.push(this.el);
        delete this.el
        }
    },
setZIndex:function(a){
    this.zIndex=a;
    if(this.el){
        this.el.setStyle("z-index",a)
        }
    }
};

Ext.Shadow.Pool=function(){
    var b=[];
    var a=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 c=b.shift();
            if(!c){
                c=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,a));
                c.autoBoxAdjust=false
                }
                return c
            },
        push:function(c){
            b.push(c)
            }
        }
}();
Ext.BoxComponent=Ext.extend(Ext.Component,{
    initComponent:function(){
        Ext.BoxComponent.superclass.initComponent.call(this);
        this.addEvents("resize","move")
        },
    boxReady:false,
    deferHeight:false,
    setSize:function(b,d){
        if(typeof b=="object"){
            d=b.height;
            b=b.width
            }
            if(Ext.isDefined(b)&&Ext.isDefined(this.boxMinWidth)&&(b<this.boxMinWidth)){
            b=this.boxMinWidth
            }
            if(Ext.isDefined(d)&&Ext.isDefined(this.boxMinHeight)&&(d<this.boxMinHeight)){
            d=this.boxMinHeight
            }
            if(Ext.isDefined(b)&&Ext.isDefined(this.boxMaxWidth)&&(b>this.boxMaxWidth)){
            b=this.boxMaxWidth
            }
            if(Ext.isDefined(d)&&Ext.isDefined(this.boxMaxHeight)&&(d>this.boxMaxHeight)){
            d=this.boxMaxHeight
            }
            if(!this.boxReady){
            this.width=b;
            this.height=d;
            return this
            }
            if(this.cacheSizes!==false&&this.lastSize&&this.lastSize.width==b&&this.lastSize.height==d){
            return this
            }
            this.lastSize={
            width:b,
            height:d
        };

        var c=this.adjustSize(b,d),g=c.width,a=c.height,e;
        if(g!==undefined||a!==undefined){
            e=this.getResizeEl();
            if(!this.deferHeight&&g!==undefined&&a!==undefined){
                e.setSize(g,a)
                }else{
                if(!this.deferHeight&&a!==undefined){
                    e.setHeight(a)
                    }else{
                    if(g!==undefined){
                        e.setWidth(g)
                        }
                    }
            }
        this.onResize(g,a,b,d);
    this.fireEvent("resize",this,g,a,b,d)
    }
    return this
},
setWidth:function(a){
    return this.setSize(a)
    },
setHeight:function(a){
    return this.setSize(undefined,a)
    },
getSize:function(){
    return this.getResizeEl().getSize()
    },
getWidth:function(){
    return this.getResizeEl().getWidth()
    },
getHeight:function(){
    return this.getResizeEl().getHeight()
    },
getOuterSize:function(){
    var a=this.getResizeEl();
    return{
        width:a.getWidth()+a.getMargins("lr"),
        height:a.getHeight()+a.getMargins("tb")
        }
    },
getPosition:function(a){
    var b=this.getPositionEl();
    if(a===true){
        return[b.getLeft(true),b.getTop(true)]
        }
        return this.xy||b.getXY()
    },
getBox:function(a){
    var c=this.getPosition(a);
    var b=this.getSize();
    b.x=c[0];
    b.y=c[1];
    return b
    },
updateBox:function(a){
    this.setSize(a.width,a.height);
    this.setPagePosition(a.x,a.y);
    return this
    },
getResizeEl:function(){
    return this.resizeEl||this.el
    },
setAutoScroll:function(a){
    if(this.rendered){
        this.getContentTarget().setOverflow(a?"auto":"")
        }
        this.autoScroll=a;
    return this
    },
setPosition:function(a,g){
    if(a&&typeof a[1]=="number"){
        g=a[1];
        a=a[0]
        }
        this.x=a;
    this.y=g;
    if(!this.boxReady){
        return this
        }
        var b=this.adjustPosition(a,g);
    var e=b.x,d=b.y;
    var c=this.getPositionEl();
    if(e!==undefined||d!==undefined){
        if(e!==undefined&&d!==undefined){
            c.setLeftTop(e,d)
            }else{
            if(e!==undefined){
                c.setLeft(e)
                }else{
                if(d!==undefined){
                    c.setTop(d)
                    }
                }
        }
    this.onPosition(e,d);
this.fireEvent("move",this,e,d)
}
return this
},
setPagePosition:function(a,c){
    if(a&&typeof a[1]=="number"){
        c=a[1];
        a=a[0]
        }
        this.pageX=a;
    this.pageY=c;
    if(!this.boxReady){
        return
    }
    if(a===undefined||c===undefined){
        return
    }
    var b=this.getPositionEl().translatePoints(a,c);
    this.setPosition(b.left,b.top);
    return this
    },
afterRender:function(){
    Ext.BoxComponent.superclass.afterRender.call(this);
    if(this.resizeEl){
        this.resizeEl=Ext.get(this.resizeEl)
        }
        if(this.positionEl){
        this.positionEl=Ext.get(this.positionEl)
        }
        this.boxReady=true;
    Ext.isDefined(this.autoScroll)&&this.setAutoScroll(this.autoScroll);
    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.getResizeEl().getWidth(),this.autoHeight?undefined:this.getResizeEl().getHeight());
    return this
    },
onResize:function(d,b,a,c){},
onPosition:function(a,b){},
adjustSize:function(a,b){
    if(this.autoWidth){
        a="auto"
        }
        if(this.autoHeight){
        b="auto"
        }
        return{
        width:a,
        height:b
    }
},
adjustPosition:function(a,b){
    return{
        x:a,
        y:b
    }
}
});
Ext.reg("box",Ext.BoxComponent);
Ext.Spacer=Ext.extend(Ext.BoxComponent,{
    autoEl:"div"
});
Ext.reg("spacer",Ext.Spacer);
Ext.SplitBar=function(c,e,b,d,a){
    this.el=Ext.get(c,true);
    this.el.dom.unselectable="on";
    this.resizingEl=Ext.get(e,true);
    this.orientation=b||Ext.SplitBar.HORIZONTAL;
    this.minSize=0;
    this.maxSize=2000;
    this.animate=false;
    this.useShim=false;
    this.shim=null;
    if(!a){
        this.proxy=Ext.SplitBar.createProxy(this.orientation)
        }else{
        this.proxy=Ext.get(a).dom
        }
        this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{
        dragElId:this.proxy.id
        });
    this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);
    this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);
    this.dragSpecs={};

    this.adapter=new Ext.SplitBar.BasicLayoutAdapter();
    this.adapter.init(this);
    if(this.orientation==Ext.SplitBar.HORIZONTAL){
        this.placement=d||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);
        this.el.addClass("x-splitbar-h")
        }else{
        this.placement=d||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);
        this.el.addClass("x-splitbar-v")
        }
        this.addEvents("resize","moved","beforeresize","beforeapply");
    Ext.SplitBar.superclass.constructor.call(this)
    };

Ext.extend(Ext.SplitBar,Ext.util.Observable,{
    onStartProxyDrag:function(a,e){
        this.fireEvent("beforeresize",this);
        this.overlay=Ext.DomHelper.append(document.body,{
            cls:"x-drag-overlay",
            html:"&#160;"
        },true);
        this.overlay.unselectable();
        this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));
        this.overlay.show();
        Ext.get(this.proxy).setDisplayed("block");
        var c=this.adapter.getElementSize(this);
        this.activeMinSize=this.getMinimumSize();
        this.activeMaxSize=this.getMaximumSize();
        var d=c-this.activeMinSize;
        var b=Math.max(this.activeMaxSize-c,0);
        if(this.orientation==Ext.SplitBar.HORIZONTAL){
            this.dd.resetConstraints();
            this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?d:b,this.placement==Ext.SplitBar.LEFT?b:d,this.tickSize);
            this.dd.setYConstraint(0,0)
            }else{
            this.dd.resetConstraints();
            this.dd.setXConstraint(0,0);
            this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?d:b,this.placement==Ext.SplitBar.TOP?b:d,this.tickSize)
            }
            this.dragSpecs.startSize=c;
        this.dragSpecs.startPoint=[a,e];
        Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,a,e)
        },
    onEndProxyDrag:function(c){
        Ext.get(this.proxy).setDisplayed(false);
        var b=Ext.lib.Event.getXY(c);
        if(this.overlay){
            Ext.destroy(this.overlay);
            delete this.overlay
            }
            var a;
        if(this.orientation==Ext.SplitBar.HORIZONTAL){
            a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.LEFT?b[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-b[0])
            }else{
            a=this.dragSpecs.startSize+(this.placement==Ext.SplitBar.TOP?b[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-b[1])
            }
            a=Math.min(Math.max(a,this.activeMinSize),this.activeMaxSize);
        if(a!=this.dragSpecs.startSize){
            if(this.fireEvent("beforeapply",this,a)!==false){
                this.adapter.setElementSize(this,a);
                this.fireEvent("moved",this,a);
                this.fireEvent("resize",this,a)
                }
            }
    },
getAdapter:function(){
    return this.adapter
    },
setAdapter:function(a){
    this.adapter=a;
    this.adapter.init(this)
    },
getMinimumSize:function(){
    return this.minSize
    },
setMinimumSize:function(a){
    this.minSize=a
    },
getMaximumSize:function(){
    return this.maxSize
    },
setMaximumSize:function(a){
    this.maxSize=a
    },
setCurrentSize:function(b){
    var a=this.animate;
    this.animate=false;
    this.adapter.setElementSize(this,b);
    this.animate=a
    },
destroy:function(a){
    Ext.destroy(this.shim,Ext.get(this.proxy));
    this.dd.unreg();
    if(a){
        this.el.remove()
        }
        this.purgeListeners()
    }
});
Ext.SplitBar.createProxy=function(b){
    var c=new Ext.Element(document.createElement("div"));
    document.body.appendChild(c.dom);
    c.unselectable();
    var a="x-splitbar-proxy";
    c.addClass(a+" "+(b==Ext.SplitBar.HORIZONTAL?a+"-h":a+"-v"));
    return c.dom
    };

Ext.SplitBar.BasicLayoutAdapter=function(){};

Ext.SplitBar.BasicLayoutAdapter.prototype={
    init:function(a){},
    getElementSize:function(a){
        if(a.orientation==Ext.SplitBar.HORIZONTAL){
            return a.resizingEl.getWidth()
            }else{
            return a.resizingEl.getHeight()
            }
        },
setElementSize:function(b,a,c){
    if(b.orientation==Ext.SplitBar.HORIZONTAL){
        if(!b.animate){
            b.resizingEl.setWidth(a);
            if(c){
                c(b,a)
                }
            }else{
        b.resizingEl.setWidth(a,true,0.1,c,"easeOut")
        }
    }else{
    if(!b.animate){
        b.resizingEl.setHeight(a);
        if(c){
            c(b,a)
            }
        }else{
    b.resizingEl.setHeight(a,true,0.1,c,"easeOut")
    }
}
}
};

Ext.SplitBar.AbsoluteLayoutAdapter=function(a){
    this.basic=new Ext.SplitBar.BasicLayoutAdapter();
    this.container=Ext.get(a)
    };

Ext.SplitBar.AbsoluteLayoutAdapter.prototype={
    init:function(a){
        this.basic.init(a)
        },
    getElementSize:function(a){
        return this.basic.getElementSize(a)
        },
    setElementSize:function(b,a,c){
        this.basic.setElementSize(b,a,this.moveSplitter.createDelegate(this,[b]))
        },
    moveSplitter:function(a){
        var b=Ext.SplitBar;
        switch(a.placement){
            case b.LEFT:
                a.el.setX(a.resizingEl.getRight());
                break;
            case b.RIGHT:
                a.el.setStyle("right",(this.container.getWidth()-a.resizingEl.getLeft())+"px");
                break;
            case b.TOP:
                a.el.setY(a.resizingEl.getBottom());
                break;
            case b.BOTTOM:
                a.el.setY(a.resizingEl.getTop()-a.el.getHeight());
                break
                }
            }
};

Ext.SplitBar.VERTICAL=1;
Ext.SplitBar.HORIZONTAL=2;
Ext.SplitBar.LEFT=1;
Ext.SplitBar.RIGHT=2;
Ext.SplitBar.TOP=3;
Ext.SplitBar.BOTTOM=4;
Ext.Container=Ext.extend(Ext.BoxComponent,{
    bufferResize:50,
    autoDestroy:true,
    forceLayout:false,
    defaultType:"panel",
    resizeEvent:"resize",
    bubbleEvents:["add","remove"],
    initComponent:function(){
        Ext.Container.superclass.initComponent.call(this);
        this.addEvents("afterlayout","beforeadd","beforeremove","add","remove");
        var a=this.items;
        if(a){
            delete this.items;
            this.add(a)
            }
        },
initItems:function(){
    if(!this.items){
        this.items=new Ext.util.MixedCollection(false,this.getComponentId);
        this.getLayout()
        }
    },
setLayout:function(a){
    if(this.layout&&this.layout!=a){
        this.layout.setContainer(null)
        }
        this.initItems();
    this.layout=a;
    a.setContainer(this)
    },
afterRender:function(){
    Ext.Container.superclass.afterRender.call(this);
    if(!this.layout){
        this.layout="auto"
        }
        if(Ext.isObject(this.layout)&&!this.layout.layout){
        this.layoutConfig=this.layout;
        this.layout=this.layoutConfig.type
        }
        if(Ext.isString(this.layout)){
        this.layout=new Ext.Container.LAYOUTS[this.layout.toLowerCase()](this.layoutConfig)
        }
        this.setLayout(this.layout);
    if(this.activeItem!==undefined){
        var a=this.activeItem;
        delete this.activeItem;
        this.layout.setActiveItem(a)
        }
        if(!this.ownerCt){
        this.doLayout(false,true)
        }
        if(this.monitorResize===true){
        Ext.EventManager.onWindowResize(this.doLayout,this,[false])
        }
    },
getLayoutTarget:function(){
    return this.el
    },
getComponentId:function(a){
    return a.getItemId()
    },
add:function(b){
    this.initItems();
    var e=arguments.length>1;
    if(e||Ext.isArray(b)){
        var a=[];
        Ext.each(e?arguments:b,function(h){
            a.push(this.add(h))
            },this);
        return a
        }
        var g=this.lookupComponent(this.applyDefaults(b));
    var d=this.items.length;
    if(this.fireEvent("beforeadd",this,g,d)!==false&&this.onBeforeAdd(g)!==false){
        this.items.add(g);
        g.onAdded(this,d);
        this.onAdd(g);
        this.fireEvent("add",this,g,d)
        }
        return g
    },
onAdd:function(a){},
onAdded:function(a,b){
    this.ownerCt=a;
    this.initRef();
    this.cascade(function(d){
        d.initRef()
        });
    this.fireEvent("added",this,a,b)
    },
insert:function(h,g){
    this.initItems();
    var e=arguments,d=e.length;
    if(d>2){
        var b=[];
        for(var j=d-1;j>=1;--j){
            b.push(this.insert(h,e[j]))
            }
            return b
        }
        var k=this.lookupComponent(this.applyDefaults(g));
    h=Math.min(h,this.items.length);
    if(this.fireEvent("beforeadd",this,k,h)!==false&&this.onBeforeAdd(k)!==false){
        if(k.ownerCt==this){
            this.items.remove(k)
            }
            this.items.insert(h,k);
        k.onAdded(this,h);
        this.onAdd(k);
        this.fireEvent("add",this,k,h)
        }
        return k
    },
applyDefaults:function(b){
    var a=this.defaults;
    if(a){
        if(Ext.isFunction(a)){
            a=a.call(this,b)
            }
            if(Ext.isString(b)){
            b=Ext.ComponentMgr.get(b);
            Ext.apply(b,a)
            }else{
            if(!b.events){
                Ext.applyIf(b,a)
                }else{
                Ext.apply(b,a)
                }
            }
    }
return b
},
onBeforeAdd:function(a){
    if(a.ownerCt){
        a.ownerCt.remove(a,false)
        }
        if(this.hideBorders===true){
        a.border=(a.border===true)
        }
    },
remove:function(a,b){
    this.initItems();
    var d=this.getComponent(a);
    if(d&&this.fireEvent("beforeremove",this,d)!==false){
        this.doRemove(d,b);
        this.fireEvent("remove",this,d)
        }
        return d
    },
onRemove:function(a){},
doRemove:function(e,d){
    var b=this.layout,a=b&&this.rendered;
    if(a){
        b.onRemove(e)
        }
        this.items.remove(e);
    e.onRemoved();
    this.onRemove(e);
    if(d===true||(d!==false&&this.autoDestroy)){
        e.destroy()
        }
        if(a){
        b.afterRemove(e)
        }
    },
removeAll:function(c){
    this.initItems();
    var e,g=[],b=[];
    this.items.each(function(h){
        g.push(h)
        });
    for(var d=0,a=g.length;d<a;++d){
        e=g[d];
        this.remove(e,c);
        if(e.ownerCt!==this){
            b.push(e)
            }
        }
    return b
},
getComponent:function(a){
    if(Ext.isObject(a)){
        a=a.getItemId()
        }
        return this.items.get(a)
    },
lookupComponent:function(a){
    if(Ext.isString(a)){
        return Ext.ComponentMgr.get(a)
        }else{
        if(!a.events){
            return this.createComponent(a)
            }
        }
    return a
},
createComponent:function(a,d){
    if(a.render){
        return a
        }
        var b=Ext.create(Ext.apply({
        ownerCt:this
    },a),d||this.defaultType);
    delete b.initialConfig.ownerCt;
    delete b.ownerCt;
    return b
    },
canLayout:function(){
    var a=this.getVisibilityEl();
    return a&&a.dom&&!a.isStyle("display","none")
    },
doLayout:function(g,e){
    var k=this.rendered,j=e||this.forceLayout;
    if(this.collapsed||!this.canLayout()){
        this.deferLayout=this.deferLayout||!g;
        if(!j){
            return
        }
        g=g&&!this.deferLayout
        }else{
        delete this.deferLayout
        }
        if(k&&this.layout){
        this.layout.layout()
        }
        if(g!==true&&this.items){
        var d=this.items.items;
        for(var b=0,a=d.length;b<a;b++){
            var h=d[b];
            if(h.doLayout){
                h.doLayout(false,j)
                }
            }
        }
    if(k){
    this.onLayout(g,j)
    }
    this.hasLayout=true;
delete this.forceLayout
},
onLayout:Ext.emptyFn,
shouldBufferLayout:function(){
    var a=this.hasLayout;
    if(this.ownerCt){
        return a?!this.hasLayoutPending():false
        }
        return a
    },
hasLayoutPending:function(){
    var a=false;
    this.ownerCt.bubble(function(b){
        if(b.layoutPending){
            a=true;
            return false
            }
        });
return a
},
onShow:function(){
    Ext.Container.superclass.onShow.call(this);
    if(Ext.isDefined(this.deferLayout)){
        delete this.deferLayout;
        this.doLayout(true)
        }
    },
getLayout:function(){
    if(!this.layout){
        var a=new Ext.layout.AutoLayout(this.layoutConfig);
        this.setLayout(a)
        }
        return this.layout
    },
beforeDestroy:function(){
    var a;
    if(this.items){
        while(a=this.items.first()){
            this.doRemove(a,true)
            }
        }
    if(this.monitorResize){
    Ext.EventManager.removeResizeListener(this.doLayout,this)
    }
    Ext.destroy(this.layout);
Ext.Container.superclass.beforeDestroy.call(this)
},
bubble:function(c,b,a){
    var d=this;
    while(d){
        if(c.apply(b||d,a||[d])===false){
            break
        }
        d=d.ownerCt
        }
        return this
    },
cascade:function(g,e,b){
    if(g.apply(e||this,b||[this])!==false){
        if(this.items){
            var d=this.items.items;
            for(var c=0,a=d.length;c<a;c++){
                if(d[c].cascade){
                    d[c].cascade(g,e,b)
                    }else{
                    g.apply(e||d[c],b||[d[c]])
                    }
                }
            }
    }
return this
},
findById:function(c){
    var a,b=this;
    this.cascade(function(d){
        if(b!=d&&d.id===c){
            a=d;
            return false
            }
        });
return a||null
},
findByType:function(b,a){
    return this.findBy(function(d){
        return d.isXType(b,a)
        })
    },
find:function(b,a){
    return this.findBy(function(d){
        return d[b]===a
        })
    },
findBy:function(d,c){
    var a=[],b=this;
    this.cascade(function(e){
        if(b!=e&&d.call(c||e,e,b)===true){
            a.push(e)
            }
        });
return a
},
get:function(a){
    return this.items.get(a)
    }
});
Ext.Container.LAYOUTS={};

Ext.reg("container",Ext.Container);
Ext.layout.ContainerLayout=Ext.extend(Object,{
    monitorResize:false,
    activeItem:null,
    constructor:function(a){
        this.id=Ext.id(null,"ext-layout-");
        Ext.apply(this,a)
        },
    type:"container",
    IEMeasureHack:function(k,g){
        var a=k.dom.childNodes,b=a.length,n,m=[],l,h,j;
        for(h=0;h<b;h++){
            n=a[h];
            l=Ext.get(n);
            if(l){
                m[h]=l.getStyle("display");
                l.setStyle({
                    display:"none"
                })
                }
            }
        j=k?k.getViewSize(g):{};

    for(h=0;h<b;h++){
        n=a[h];
        l=Ext.get(n);
        if(l){
            l.setStyle({
                display:m[h]
                })
            }
        }
    return j
},
getLayoutTargetSize:Ext.EmptyFn,
layout:function(){
    var a=this.container,b=a.getLayoutTarget();
    if(!(this.hasLayout||Ext.isEmpty(this.targetCls))){
        b.addClass(this.targetCls)
        }
        this.onLayout(a,b);
    a.fireEvent("afterlayout",a,this)
    },
onLayout:function(a,b){
    this.renderAll(a,b)
    },
isValidParent:function(b,a){
    return a&&b.getPositionEl().dom.parentNode==(a.dom||a)
    },
renderAll:function(e,g){
    var b=e.items.items,d,h,a=b.length;
    for(d=0;d<a;d++){
        h=b[d];
        if(h&&(!h.rendered||!this.isValidParent(h,g))){
            this.renderItem(h,d,g)
            }
        }
    },
renderItem:function(d,a,b){
    if(d){
        if(!d.rendered){
            d.render(b,a);
            this.configureItem(d,a)
            }else{
            if(!this.isValidParent(d,b)){
                if(Ext.isNumber(a)){
                    a=b.dom.childNodes[a]
                    }
                    b.dom.insertBefore(d.getPositionEl().dom,a||null);
                d.container=b;
                this.configureItem(d,a)
                }
            }
    }
},
getRenderedItems:function(g){
    var e=g.getLayoutTarget(),h=g.items.items,a=h.length,d,j,b=[];
    for(d=0;d<a;d++){
        if((j=h[d]).rendered&&this.isValidParent(j,e)){
            b.push(j)
            }
        }
    return b
},
configureItem:function(d,a){
    if(this.extraCls){
        var b=d.getPositionEl?d.getPositionEl():d;
        b.addClass(this.extraCls)
        }
        if(d.doLayout&&this.forceLayout){
        d.doLayout()
        }
        if(this.renderHidden&&d!=this.activeItem){
        d.hide()
        }
    },
onRemove:function(b){
    if(this.activeItem==b){
        delete this.activeItem
        }
        if(b.rendered&&this.extraCls){
        var a=b.getPositionEl?b.getPositionEl():b;
        a.removeClass(this.extraCls)
        }
    },
afterRemove:function(a){
    if(a.removeRestore){
        a.removeMode="container";
        delete a.removeRestore
        }
    },
onResize:function(){
    var c=this.container,a;
    if(c.collapsed){
        return
    }
    if(a=c.bufferResize&&c.shouldBufferLayout()){
        if(!this.resizeTask){
            this.resizeTask=new Ext.util.DelayedTask(this.runLayout,this);
            this.resizeBuffer=Ext.isNumber(a)?a:50
            }
            c.layoutPending=true;
        this.resizeTask.delay(this.resizeBuffer)
        }else{
        this.runLayout()
        }
    },
runLayout:function(){
    var a=this.container;
    this.layout();
    a.onLayout();
    delete a.layoutPending
    },
setContainer:function(b){
    if(this.monitorResize&&b!=this.container){
        var a=this.container;
        if(a){
            a.un(a.resizeEvent,this.onResize,this)
            }
            if(b){
            b.on(b.resizeEvent,this.onResize,this)
            }
        }
    this.container=b
},
parseMargins:function(b){
    if(Ext.isNumber(b)){
        b=b.toString()
        }
        var c=b.split(" "),a=c.length;
    if(a==1){
        c[1]=c[2]=c[3]=c[0]
        }else{
        if(a==2){
            c[2]=c[0];
            c[3]=c[1]
            }else{
            if(a==3){
                c[3]=c[1]
                }
            }
    }
return{
    top:parseInt(c[0],10)||0,
    right:parseInt(c[1],10)||0,
    bottom:parseInt(c[2],10)||0,
    left:parseInt(c[3],10)||0
    }
},
fieldTpl:(function(){
    var a=new Ext.Template('<div class="x-form-item {itemCls}" tabIndex="-1">','<label for="{id}" style="{labelStyle}" class="x-form-item-label">{label}{labelSeparator}</label>','<div class="x-form-element" id="x-form-el-{id}" style="{elementStyle}">','</div><div class="{clearCls}"></div>',"</div>");
    a.disableFormats=true;
    return a.compile()
    })(),
destroy:function(){
    if(this.resizeTask&&this.resizeTask.cancel){
        this.resizeTask.cancel()
        }
        if(!Ext.isEmpty(this.targetCls)){
        var a=this.container.getLayoutTarget();
        if(a){
            a.removeClass(this.targetCls)
            }
        }
}
});
Ext.layout.AutoLayout=Ext.extend(Ext.layout.ContainerLayout,{
    type:"auto",
    monitorResize:true,
    onLayout:function(d,g){
        Ext.layout.AutoLayout.superclass.onLayout.call(this,d,g);
        var e=this.getRenderedItems(d),a=e.length,b,h;
        for(b=0;b<a;b++){
            h=e[b];
            if(h.doLayout){
                h.doLayout(true)
                }
            }
        }
});
Ext.Container.LAYOUTS.auto=Ext.layout.AutoLayout;
Ext.layout.FitLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    type:"fit",
    getLayoutTargetSize:function(){
        var a=this.container.getLayoutTarget();
        if(!a){
            return{}
        }
        return a.getStyleSize()
    },
onLayout:function(a,b){
    Ext.layout.FitLayout.superclass.onLayout.call(this,a,b);
    if(!a.collapsed){
        this.setItemSize(this.activeItem||a.items.itemAt(0),this.getLayoutTargetSize())
        }
    },
setItemSize:function(b,a){
    if(b&&a.height>0){
        b.setSize(a)
        }
    }
});
Ext.Container.LAYOUTS.fit=Ext.layout.FitLayout;
Ext.layout.CardLayout=Ext.extend(Ext.layout.FitLayout,{
    deferredRender:false,
    layoutOnCardChange:false,
    renderHidden:true,
    type:"card",
    setActiveItem:function(d){
        var a=this.activeItem,b=this.container;
        d=b.getComponent(d);
        if(d&&a!=d){
            if(a){
                a.hide();
                if(a.hidden!==true){
                    return false
                    }
                    a.fireEvent("deactivate",a)
                }
                var c=d.doLayout&&(this.layoutOnCardChange||!d.rendered);
            this.activeItem=d;
            delete d.deferLayout;
            d.show();
            this.layout();
            if(c){
                d.doLayout()
                }
                d.fireEvent("activate",d)
            }
        },
renderAll:function(a,b){
    if(this.deferredRender){
        this.renderItem(this.activeItem,undefined,b)
        }else{
        Ext.layout.CardLayout.superclass.renderAll.call(this,a,b)
        }
    }
});
Ext.Container.LAYOUTS.card=Ext.layout.CardLayout;
Ext.layout.AnchorLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    type:"anchor",
    defaultAnchor:"100%",
    parseAnchorRE:/^(r|right|b|bottom)$/i,
    getLayoutTargetSize:function(){
        var a=this.container.getLayoutTarget();
        if(!a){
            return{}
        }
        return a.getStyleSize()
    },
onLayout:function(m,p){
    Ext.layout.AnchorLayout.superclass.onLayout.call(this,m,p);
    var v=this.getLayoutTargetSize();
    var t=v.width,l=v.height;
    if(t<20&&l<20){
        return
    }
    var d,r;
    if(m.anchorSize){
        if(typeof m.anchorSize=="number"){
            d=m.anchorSize
            }else{
            d=m.anchorSize.width;
            r=m.anchorSize.height
            }
        }else{
    d=m.initialConfig.width;
    r=m.initialConfig.height
    }
    var o=this.getRenderedItems(m),n=o.length,j,q,s,g,b,e,u,k=[];
    for(j=0;j<n;j++){
    q=o[j];
    e=q.getPositionEl();
    if(!q.anchor&&q.items&&!Ext.isNumber(q.width)&&!(Ext.isIE6&&Ext.isStrict)){
        q.anchor=this.defaultAnchor
        }
        if(q.anchor){
        s=q.anchorSpec;
        if(!s){
            u=q.anchor.split(" ");
            q.anchorSpec=s={
                right:this.parseAnchor(u[0],q.initialConfig.width,d),
                bottom:this.parseAnchor(u[1],q.initialConfig.height,r)
                }
            }
        g=s.right?this.adjustWidthAnchor(s.right(t)-e.getMargins("lr"),q):undefined;
    b=s.bottom?this.adjustHeightAnchor(s.bottom(l)-e.getMargins("tb"),q):undefined;
    if(g||b){
        k.push({
            comp:q,
            width:g||undefined,
            height:b||undefined
            })
        }
    }
}
for(j=0,n=k.length;j<n;j++){
    q=k[j];
    q.comp.setSize(q.width,q.height)
    }
},
parseAnchor:function(c,h,b){
    if(c&&c!="none"){
        var e;
        if(this.parseAnchorRE.test(c)){
            var g=b-h;
            return function(a){
                if(a!==e){
                    e=a;
                    return a-g
                    }
                }
        }else{
    if(c.indexOf("%")!=-1){
        var d=parseFloat(c.replace("%",""))*0.01;
        return function(a){
            if(a!==e){
                e=a;
                return Math.floor(a*d)
                }
            }
    }else{
    c=parseInt(c,10);
    if(!isNaN(c)){
        return function(a){
            if(a!==e){
                e=a;
                return a+c
                }
            }
    }
}
}
}
return false
},
adjustWidthAnchor:function(b,a){
    return b
    },
adjustHeightAnchor:function(b,a){
    return b
    }
});
Ext.Container.LAYOUTS.anchor=Ext.layout.AnchorLayout;
Ext.layout.ColumnLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    type:"column",
    extraCls:"x-column",
    scrollOffset:0,
    targetCls:"x-column-layout-ct",
    isValidParent:function(b,a){
        return this.innerCt&&b.getPositionEl().dom.parentNode==this.innerCt.dom
        },
    getLayoutTargetSize:function(){
        var b=this.container.getLayoutTarget(),a;
        if(b){
            a=b.getViewSize();
            if(Ext.isIE&&Ext.isStrict&&a.width==0){
                a=b.getStyleSize()
                }
                a.width-=b.getPadding("lr");
            a.height-=b.getPadding("tb")
            }
            return a
        },
    renderAll:function(a,b){
        if(!this.innerCt){
            this.innerCt=b.createChild({
                cls:"x-column-inner"
            });
            this.innerCt.createChild({
                cls:"x-clear"
            })
            }
            Ext.layout.ColumnLayout.superclass.renderAll.call(this,a,this.innerCt)
        },
    onLayout:function(e,k){
        var g=e.items.items,j=g.length,n,b,a,o=[];
        this.renderAll(e,k);
        var r=this.getLayoutTargetSize();
        if(r.width<1&&r.height<1){
            return
        }
        var p=r.width-this.scrollOffset,d=r.height,q=p;
        this.innerCt.setWidth(p);
        for(b=0;b<j;b++){
            n=g[b];
            a=n.getPositionEl().getMargins("lr");
            o[b]=a;
            if(!n.columnWidth){
                q-=(n.getWidth()+a)
                }
            }
        q=q<0?0:q;
    for(b=0;b<j;b++){
        n=g[b];
        a=o[b];
        if(n.columnWidth){
            n.setSize(Math.floor(n.columnWidth*q)-a)
            }
        }
    if(Ext.isIE){
    if(b=k.getStyle("overflow")&&b!="hidden"&&!this.adjustmentPass){
        var l=this.getLayoutTargetSize();
        if(l.width!=r.width){
            this.adjustmentPass=true;
            this.onLayout(e,k)
            }
        }
}
delete this.adjustmentPass
}
});
Ext.Container.LAYOUTS.column=Ext.layout.ColumnLayout;
Ext.layout.BorderLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    rendered:false,
    type:"border",
    targetCls:"x-border-layout-ct",
    getLayoutTargetSize:function(){
        var a=this.container.getLayoutTarget();
        return a?a.getViewSize():{}
    },
onLayout:function(g,I){
    var j,B,F,o,x=g.items.items,C=x.length;
    if(!this.rendered){
        j=[];
        for(B=0;B<C;B++){
            F=x[B];
            o=F.region;
            if(F.collapsed){
                j.push(F)
                }
                F.collapsed=false;
            if(!F.rendered){
                F.render(I,B);
                F.getPositionEl().addClass("x-border-panel")
                }
                this[o]=o!="center"&&F.split?new Ext.layout.BorderLayout.SplitRegion(this,F.initialConfig,o):new Ext.layout.BorderLayout.Region(this,F.initialConfig,o);
            this[o].render(I,F)
            }
            this.rendered=true
        }
        var v=this.getLayoutTargetSize();
    if(v.width<20||v.height<20){
        if(j){
            this.restoreCollapsed=j
            }
            return
    }else{
        if(this.restoreCollapsed){
            j=this.restoreCollapsed;
            delete this.restoreCollapsed
            }
        }
    var t=v.width,D=v.height,r=t,A=D,p=0,q=0,y=this.north,u=this.south,l=this.west,E=this.east,F=this.center,H,z,d,G;
if(!F&&Ext.layout.BorderLayout.WARN!==false){
    throw"No center region defined in BorderLayout "+g.id
    }
    if(y&&y.isVisible()){
    H=y.getSize();
    z=y.getMargins();
    H.width=t-(z.left+z.right);
    H.x=z.left;
    H.y=z.top;
    p=H.height+H.y+z.bottom;
    A-=p;
    y.applyLayout(H)
    }
    if(u&&u.isVisible()){
    H=u.getSize();
    z=u.getMargins();
    H.width=t-(z.left+z.right);
    H.x=z.left;
    G=(H.height+z.top+z.bottom);
    H.y=D-G+z.top;
    A-=G;
    u.applyLayout(H)
    }
    if(l&&l.isVisible()){
    H=l.getSize();
    z=l.getMargins();
    H.height=A-(z.top+z.bottom);
    H.x=z.left;
    H.y=p+z.top;
    d=(H.width+z.left+z.right);
    q+=d;
    r-=d;
    l.applyLayout(H)
    }
    if(E&&E.isVisible()){
    H=E.getSize();
    z=E.getMargins();
    H.height=A-(z.top+z.bottom);
    d=(H.width+z.left+z.right);
    H.x=t-d+z.left;
    H.y=p+z.top;
    r-=d;
    E.applyLayout(H)
    }
    if(F){
    z=F.getMargins();
    var k={
        x:q+z.left,
        y:p+z.top,
        width:r-(z.left+z.right),
        height:A-(z.top+z.bottom)
        };

    F.applyLayout(k)
    }
    if(j){
    for(B=0,C=j.length;B<C;B++){
        j[B].collapse(false)
        }
    }
    if(Ext.isIE&&Ext.isStrict){
    I.repaint()
    }
    if(B=I.getStyle("overflow")&&B!="hidden"&&!this.adjustmentPass){
    var a=this.getLayoutTargetSize();
    if(a.width!=v.width||a.height!=v.height){
        this.adjustmentPass=true;
        this.onLayout(g,I)
        }
    }
delete this.adjustmentPass
},
destroy:function(){
    var b=["north","south","east","west"],a,c;
    for(a=0;a<b.length;a++){
        c=this[b[a]];
        if(c){
            if(c.destroy){
                c.destroy()
                }else{
                if(c.split){
                    c.split.destroy(true)
                    }
                }
        }
    }
Ext.layout.BorderLayout.superclass.destroy.call(this)
}
});
Ext.layout.BorderLayout.Region=function(b,a,c){
    Ext.apply(this,a);
    this.layout=b;
    this.position=c;
    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||{},c=="north"||c=="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
    },
    floatingZIndex:100,
    isCollapsed:false,
    render:function(b,c){
        this.panel=c;
        c.el.enableDisplayMode();
        this.targetEl=b;
        this.el=c.el;
        var a=c.getState,d=this.position;
        c.getState=function(){
            return Ext.apply(a.call(c)||{},this.state)
            }.createDelegate(this);
        if(d!="center"){
            c.allowQueuedExpand=false;
            c.on({
                beforecollapse:this.beforeCollapse,
                collapse:this.onCollapse,
                beforeexpand:this.beforeExpand,
                expand:this.onExpand,
                hide:this.onHide,
                show:this.onShow,
                scope:this
            });
            if(this.collapsible||this.floatable){
                c.collapseEl="el";
                c.slideAnchor=this.getSlideAnchor()
                }
                if(c.tools&&c.tools.toggle){
                c.tools.toggle.addClass("x-tool-collapse-"+d);
                c.tools.toggle.addClassOnOver("x-tool-collapse-"+d+"-over")
                }
            }
    },
getCollapsedEl:function(){
    if(!this.collapsedEl){
        if(!this.toolTemplate){
            var b=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');
            b.disableFormats=true;
            b.compile();
            Ext.layout.BorderLayout.Region.prototype.toolTemplate=b
            }
            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{
            if(this.collapsible!==false&&!this.hideCollapseTool){
                var a=this.toolTemplate.append(this.collapsedEl.dom,{
                    id:"expand-"+this.position
                    },true);
                a.addClassOnOver("x-tool-expand-"+this.position+"-over");
                a.on("click",this.onExpandClick,this,{
                    stopEvent:true
                })
                }
                if(this.floatable!==false||this.titleCollapse){
                this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
                this.collapsedEl.on("click",this[this.floatable?"collapseClick":"onExpandClick"],this)
                }
            }
    }
return this.collapsedEl
},
onExpandClick:function(a){
    if(this.isSlid){
        this.panel.expand(false)
        }else{
        this.panel.expand()
        }
    },
onCollapseClick:function(a){
    this.panel.collapse()
    },
beforeCollapse:function(c,a){
    this.lastAnim=a;
    if(this.splitEl){
        this.splitEl.hide()
        }
        this.getCollapsedEl().show();
    var b=this.panel.getEl();
    this.originalZIndex=b.getStyle("z-index");
    b.setStyle("z-index",100);
    this.isCollapsed=true;
    this.layout.layout()
    },
onCollapse:function(a){
    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:0.2
        })
        }
        this.state.collapsed=true;
    this.panel.saveState()
    },
beforeExpand:function(a){
    if(this.isSlid){
        this.afterSlideIn()
        }
        var b=this.getCollapsedEl();
    this.el.show();
    if(this.position=="east"||this.position=="west"){
        this.panel.setSize(undefined,b.getHeight())
        }else{
        this.panel.setSize(b.getWidth(),undefined)
        }
        b.hide();
    b.dom.style.visibility="hidden";
    this.panel.el.setStyle("z-index",this.floatingZIndex)
    },
onExpand:function(){
    this.isCollapsed=false;
    if(this.splitEl){
        this.splitEl.show()
        }
        this.layout.layout();
    this.panel.el.setStyle("z-index",this.originalZIndex);
    this.state.collapsed=false;
    this.panel.saveState()
    },
collapseClick:function(a){
    if(this.isSlid){
        a.stopPropagation();
        this.slideIn()
        }else{
        a.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(a){
    this.panel=a
    },
getMinWidth:function(){
    return this.minWidth
    },
getMinHeight:function(){
    return this.minHeight
    },
applyLayoutCollapsed:function(a){
    var b=this.getCollapsedEl();
    b.setLeftTop(a.x,a.y);
    b.setSize(a.width,a.height)
    },
applyLayout:function(a){
    if(this.isCollapsed){
        this.applyLayoutCollapsed(a)
        }else{
        this.panel.setPosition(a.x,a.y);
        this.panel.setSize(a.width,a.height)
        }
    },
beforeSlide:function(){
    this.panel.beforeEffect()
    },
afterSlide:function(){
    this.panel.afterEffect()
    },
initAutoHide:function(){
    if(this.autoHide!==false){
        if(!this.autoHideHd){
            this.autoHideSlideTask=new Ext.util.DelayedTask(this.slideIn,this);
            this.autoHideHd={
                mouseout:function(a){
                    if(!a.within(this.el,true)){
                        this.autoHideSlideTask.delay(500)
                        }
                    },
            mouseover:function(a){
                this.autoHideSlideTask.cancel()
                },
            scope:this
        }
    }
    this.el.on(this.autoHideHd);
this.collapsedEl.on(this.autoHideHd)
}
},
clearAutoHide:function(){
    if(this.autoHide!==false){
        this.el.un("mouseout",this.autoHideHd.mouseout);
        this.el.un("mouseover",this.autoHideHd.mouseover);
        this.collapsedEl.un("mouseout",this.autoHideHd.mouseout);
        this.collapsedEl.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 b=this.panel.tools,c,a;
    if(b&&b.toggle){
        b.toggle.hide()
        }
        this.el.show();
    a=this.panel.collapsed;
    this.panel.collapsed=false;
    if(this.position=="east"||this.position=="west"){
        c=this.panel.deferHeight;
        this.panel.deferHeight=false;
        this.panel.setSize(undefined,this.collapsedEl.getHeight());
        this.panel.deferHeight=c
        }else{
        this.panel.setSize(this.collapsedEl.getWidth(),undefined)
        }
        this.panel.collapsed=a;
    this.restoreLT=[this.el.dom.style.left,this.el.dom.style.top];
    this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());
    this.el.setStyle("z-index",this.floatingZIndex+2);
    this.panel.el.replaceClass("x-panel-collapsed","x-panel-floating");
    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.panel.el.replaceClass("x-panel-floating","x-panel-collapsed");
    this.el.dom.style.left=this.restoreLT[0];
    this.el.dom.style.top=this.restoreLT[1];
    var a=this.panel.tools;
    if(a&&a.toggle){
        a.toggle.show()
        }
    },
slideIn:function(a){
    if(!this.isSlid||this.el.hasActiveFx()){
        Ext.callback(a);
        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(a)
                },
            scope:this,
            block:true
        })
        }else{
        this.el.hide();
        this.afterSlideIn()
        }
    },
slideInIf:function(a){
    if(!a.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 a=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 b=this.collapsedEl,a=this.cmargins;
    switch(this.position){
        case"west":
            return[-(a.right+b.getWidth()+a.left),0];
            break;
        case"east":
            return[a.right+b.getWidth()+a.left,0];
            break;
        case"north":
            return[0,-(a.top+a.bottom+b.getHeight())];
            break;
        case"south":
            return[0,a.top+a.bottom+b.getHeight()];
            break
            }
        },
destroy:function(){
    if(this.autoHideSlideTask&&this.autoHideSlideTask.cancel){
        this.autoHideSlideTask.cancel()
        }
        Ext.destroy(this.miniCollapsedEl,this.collapsedEl)
    }
};

Ext.layout.BorderLayout.SplitRegion=function(b,a,c){
    Ext.layout.BorderLayout.SplitRegion.superclass.constructor.call(this,b,a,c);
    this.applyLayout=this.applyFns[c]
    };

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(c){
        if(this.isCollapsed){
            return this.applyLayoutCollapsed(c)
            }
            var d=this.splitEl.dom,b=d.style;
        this.panel.setPosition(c.x,c.y);
        var a=d.offsetWidth;
        b.left=(c.x+c.width-a)+"px";
        b.top=(c.y)+"px";
        b.height=Math.max(0,c.height)+"px";
        this.panel.setSize(c.width-a,c.height)
        },
    east:function(c){
        if(this.isCollapsed){
            return this.applyLayoutCollapsed(c)
            }
            var d=this.splitEl.dom,b=d.style;
        var a=d.offsetWidth;
        this.panel.setPosition(c.x+a,c.y);
        b.left=(c.x)+"px";
        b.top=(c.y)+"px";
        b.height=Math.max(0,c.height)+"px";
        this.panel.setSize(c.width-a,c.height)
        },
    north:function(c){
        if(this.isCollapsed){
            return this.applyLayoutCollapsed(c)
            }
            var d=this.splitEl.dom,b=d.style;
        var a=d.offsetHeight;
        this.panel.setPosition(c.x,c.y);
        b.left=(c.x)+"px";
        b.top=(c.y+c.height-a)+"px";
        b.width=Math.max(0,c.width)+"px";
        this.panel.setSize(c.width,c.height-a)
        },
    south:function(c){
        if(this.isCollapsed){
            return this.applyLayoutCollapsed(c)
            }
            var d=this.splitEl.dom,b=d.style;
        var a=d.offsetHeight;
        this.panel.setPosition(c.x,c.y+a);
        b.left=(c.x)+"px";
        b.top=(c.y)+"px";
        b.width=Math.max(0,c.width)+"px";
        this.panel.setSize(c.width,c.height-a)
        }
    },
render:function(a,c){
    Ext.layout.BorderLayout.SplitRegion.superclass.render.call(this,a,c);
    var d=this.position;
    this.splitEl=a.createChild({
        cls:"x-layout-split x-layout-split-"+d,
        html:"&#160;",
        id:this.panel.id+"-xsplit"
        });
    if(this.collapseMode=="mini"){
        this.miniSplitEl=this.splitEl.createChild({
            cls:"x-layout-mini x-layout-mini-"+d,
            html:"&#160;"
        });
        this.miniSplitEl.addClassOnOver("x-layout-mini-over");
        this.miniSplitEl.on("click",this.onCollapseClick,this,{
            stopEvent:true
        })
        }
        var b=this.splitSettings[d];
    this.split=new Ext.SplitBar(this.splitEl.dom,c.el,b.orientation);
    this.split.tickSize=this.tickSize;
    this.split.placement=b.placement;
    this.split.getMaximumSize=this[b.maxFn].createDelegate(this);
    this.split.minSize=this.minSize||this[b.minProp];
    this.split.on("beforeapply",this.onSplitMove,this);
    this.split.useShim=this.useShim===true;
    this.maxSize=this.maxSize||this[b.maxProp];
    if(c.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 a=this.panel.getSize();
    if(this.position=="north"||this.position=="south"){
        a.height+=this.splitEl.dom.offsetHeight
        }else{
        a.width+=this.splitEl.dom.offsetWidth
        }
        return a
    },
getHMaxSize:function(){
    var b=this.maxSize||10000;
    var a=this.layout.center;
    return Math.min(b,(this.el.getWidth()+a.el.getWidth())-a.getMinWidth())
    },
getVMaxSize:function(){
    var b=this.maxSize||10000;
    var a=this.layout.center;
    return Math.min(b,(this.el.getHeight()+a.el.getHeight())-a.getMinHeight())
    },
onSplitMove:function(b,a){
    var c=this.panel.getSize();
    this.lastSplitSize=a;
    if(this.position=="north"||this.position=="south"){
        this.panel.setSize(c.width,a);
        this.state.height=a
        }else{
        this.panel.setSize(a,c.height);
        this.state.width=a
        }
        this.layout.layout();
    this.panel.saveState();
    return false
    },
getSplitBar:function(){
    return this.split
    },
destroy:function(){
    Ext.destroy(this.miniSplitEl,this.split,this.splitEl);
    Ext.layout.BorderLayout.SplitRegion.superclass.destroy.call(this)
    }
});
Ext.Container.LAYOUTS.border=Ext.layout.BorderLayout;
Ext.layout.FormLayout=Ext.extend(Ext.layout.AnchorLayout,{
    labelSeparator:":",
    trackLabels:false,
    type:"form",
    onRemove:function(d){
        Ext.layout.FormLayout.superclass.onRemove.call(this,d);
        if(this.trackLabels){
            d.un("show",this.onFieldShow,this);
            d.un("hide",this.onFieldHide,this)
            }
            var b=d.getPositionEl(),a=d.getItemCt&&d.getItemCt();
        if(d.rendered&&a){
            if(b&&b.dom){
                b.insertAfter(a)
                }
                Ext.destroy(a);
            Ext.destroyMembers(d,"label","itemCt");
            if(d.customItemCt){
                Ext.destroyMembers(d,"getItemCt","customItemCt")
                }
            }
    },
setContainer:function(a){
    Ext.layout.FormLayout.superclass.setContainer.call(this,a);
    if(a.labelAlign){
        a.addClass("x-form-label-"+a.labelAlign)
        }
        if(a.hideLabels){
        Ext.apply(this,{
            labelStyle:"display:none",
            elementStyle:"padding-left:0;",
            labelAdjust:0
        })
        }else{
        this.labelSeparator=a.labelSeparator||this.labelSeparator;
        a.labelWidth=a.labelWidth||100;
        if(Ext.isNumber(a.labelWidth)){
            var b=Ext.isNumber(a.labelPad)?a.labelPad:5;
            Ext.apply(this,{
                labelAdjust:a.labelWidth+b,
                labelStyle:"width:"+a.labelWidth+"px;",
                elementStyle:"padding-left:"+(a.labelWidth+b)+"px"
                })
            }
            if(a.labelAlign=="top"){
            Ext.apply(this,{
                labelStyle:"width:auto;",
                labelAdjust:0,
                elementStyle:"padding-left:0;"
            })
            }
        }
},
isHide:function(a){
    return a.hideLabel||this.container.hideLabels
    },
onFieldShow:function(a){
    a.getItemCt().removeClass("x-hide-"+a.hideMode)
    },
onFieldHide:function(a){
    a.getItemCt().addClass("x-hide-"+a.hideMode)
    },
getLabelStyle:function(e){
    var b="",c=[this.labelStyle,e];
    for(var d=0,a=c.length;d<a;++d){
        if(c[d]){
            b+=c[d];
            if(b.substr(-1,1)!=";"){
                b+=";"
                }
            }
    }
    return b
},
renderItem:function(e,a,d){
    if(e&&(e.isFormField||e.fieldLabel)&&e.inputType!="hidden"){
        var b=this.getTemplateArgs(e);
        if(Ext.isNumber(a)){
            a=d.dom.childNodes[a]||null
            }
            if(a){
            e.itemCt=this.fieldTpl.insertBefore(a,b,true)
            }else{
            e.itemCt=this.fieldTpl.append(d,b,true)
            }
            if(!e.getItemCt){
            Ext.apply(e,{
                getItemCt:function(){
                    return e.itemCt
                    },
                customItemCt:true
            })
            }
            e.label=e.getItemCt().child("label.x-form-item-label");
        if(!e.rendered){
            e.render("x-form-el-"+e.id)
            }else{
            if(!this.isValidParent(e,d)){
                Ext.fly("x-form-el-"+e.id).appendChild(e.getPositionEl())
                }
            }
        if(this.trackLabels){
        if(e.hidden){
            this.onFieldHide(e)
            }
            e.on({
            scope:this,
            show:this.onFieldShow,
            hide:this.onFieldHide
            })
        }
        this.configureItem(e)
    }else{
    Ext.layout.FormLayout.superclass.renderItem.apply(this,arguments)
    }
},
getTemplateArgs:function(b){
    var a=!b.fieldLabel||b.hideLabel;
    return{
        id:b.id,
        label:b.fieldLabel,
        itemCls:(b.itemCls||this.container.itemCls||"")+(b.hideLabel?" x-hide-label":""),
        clearCls:b.clearCls||"x-form-clear-left",
        labelStyle:this.getLabelStyle(b.labelStyle),
        elementStyle:this.elementStyle||"",
        labelSeparator:a?"":(Ext.isDefined(b.labelSeparator)?b.labelSeparator:this.labelSeparator)
        }
    },
adjustWidthAnchor:function(a,d){
    if(d.label&&!this.isHide(d)&&(this.container.labelAlign!="top")){
        var b=Ext.isIE6||(Ext.isIE&&!Ext.isStrict);
        return a-this.labelAdjust+(b?-3:0)
        }
        return a
    },
adjustHeightAnchor:function(a,b){
    if(b.label&&!this.isHide(b)&&(this.container.labelAlign=="top")){
        return a-b.label.getHeight()
        }
        return a
    },
isValidParent:function(b,a){
    return a&&this.container.getEl().contains(b.getPositionEl())
    }
});
Ext.Container.LAYOUTS.form=Ext.layout.FormLayout;
Ext.layout.AccordionLayout=Ext.extend(Ext.layout.FitLayout,{
    fill:true,
    autoWidth:true,
    titleCollapse:true,
    hideCollapseTool:false,
    collapseFirst:false,
    animate:false,
    sequence:false,
    activeOnTop:false,
    type:"accordion",
    renderItem:function(a){
        if(this.animate===false){
            a.animCollapse=false
            }
            a.collapsible=true;
        if(this.autoWidth){
            a.autoWidth=true
            }
            if(this.titleCollapse){
            a.titleCollapse=true
            }
            if(this.hideCollapseTool){
            a.hideCollapseTool=true
            }
            if(this.collapseFirst!==undefined){
            a.collapseFirst=this.collapseFirst
            }
            if(!this.activeItem&&!a.collapsed){
            this.setActiveItem(a,true)
            }else{
            if(this.activeItem&&this.activeItem!=a){
                a.collapsed=true
                }
            }
        Ext.layout.AccordionLayout.superclass.renderItem.apply(this,arguments);
    a.header.addClass("x-accordion-hd");
    a.on("beforeexpand",this.beforeExpand,this)
    },
onRemove:function(a){
    Ext.layout.AccordionLayout.superclass.onRemove.call(this,a);
    if(a.rendered){
        a.header.removeClass("x-accordion-hd")
        }
        a.un("beforeexpand",this.beforeExpand,this)
    },
beforeExpand:function(c,b){
    var a=this.activeItem;
    if(a){
        if(this.sequence){
            delete this.activeItem;
            if(!a.collapsed){
                a.collapse({
                    callback:function(){
                        c.expand(b||true)
                        },
                    scope:this
                });
                return false
                }
            }else{
        a.collapse(this.animate)
        }
    }
this.setActive(c);
    if(this.activeOnTop){
    c.el.dom.parentNode.insertBefore(c.el.dom,c.el.dom.parentNode.firstChild)
    }
    this.layout()
    },
setItemSize:function(g,e){
    if(this.fill&&g){
        var d=0,c,b=this.getRenderedItems(this.container),a=b.length,h;
        for(c=0;c<a;c++){
            if((h=b[c])!=g){
                d+=h.header.getHeight()
                }
            }
        e.height-=d;
    g.setSize(e)
    }
},
setActiveItem:function(a){
    this.setActive(a,true)
    },
setActive:function(c,b){
    var a=this.activeItem;
    c=this.container.getComponent(c);
    if(a!=c){
        if(c.rendered&&c.collapsed&&b){
            c.expand()
            }else{
            if(a){
                a.fireEvent("deactivate",a)
                }
                this.activeItem=c;
            c.fireEvent("activate",c)
            }
        }
}
});
Ext.Container.LAYOUTS.accordion=Ext.layout.AccordionLayout;
Ext.layout.Accordion=Ext.layout.AccordionLayout;
Ext.layout.TableLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:false,
    type:"table",
    targetCls:"x-table-layout-ct",
    tableAttrs:null,
    setContainer:function(a){
        Ext.layout.TableLayout.superclass.setContainer.call(this,a);
        this.currentRow=0;
        this.currentColumn=0;
        this.cells=[]
        },
    onLayout:function(d,g){
        var e=d.items.items,a=e.length,h,b;
        if(!this.table){
            g.addClass("x-table-layout-ct");
            this.table=g.createChild(Ext.apply({
                tag:"table",
                cls:"x-table-layout",
                cellspacing:0,
                cn:{
                    tag:"tbody"
                }
            },this.tableAttrs),null,true)
        }
        this.renderAll(d,g)
    },
getRow:function(a){
    var b=this.table.tBodies[0].childNodes[a];
    if(!b){
        b=document.createElement("tr");
        this.table.tBodies[0].appendChild(b)
        }
        return b
    },
getNextCell:function(j){
    var a=this.getNextNonSpan(this.currentColumn,this.currentRow);
    var g=this.currentColumn=a[0],e=this.currentRow=a[1];
    for(var i=e;i<e+(j.rowspan||1);i++){
        if(!this.cells[i]){
            this.cells[i]=[]
            }
            for(var d=g;d<g+(j.colspan||1);d++){
            this.cells[i][d]=true
            }
        }
        var h=document.createElement("td");
    if(j.cellId){
    h.id=j.cellId
    }
    var b="x-table-layout-cell";
if(j.cellCls){
    b+=" "+j.cellCls
    }
    h.className=b;
if(j.colspan){
    h.colSpan=j.colspan
    }
    if(j.rowspan){
    h.rowSpan=j.rowspan
    }
    this.getRow(e).appendChild(h);
    return h
    },
getNextNonSpan:function(a,c){
    var b=this.columns;
    while((b&&a>=b)||(this.cells[c]&&this.cells[c][a])){
        if(b&&a>=b){
            c++;
            a=0
            }else{
            a++
        }
    }
    return[a,c]
},
renderItem:function(e,a,d){
    if(!this.table){
        this.table=d.createChild(Ext.apply({
            tag:"table",
            cls:"x-table-layout",
            cellspacing:0,
            cn:{
                tag:"tbody"
            }
        },this.tableAttrs),null,true)
    }
    if(e&&!e.rendered){
    e.render(this.getNextCell(e));
    this.configureItem(e,a)
    }else{
    if(e&&!this.isValidParent(e,d)){
        var b=this.getNextCell(e);
        b.insertBefore(e.getPositionEl().dom,null);
        e.container=Ext.get(b);
        this.configureItem(e,a)
        }
    }
},
isValidParent:function(b,a){
    return b.getPositionEl().up("table",5).dom.parentNode===(a.dom||a)
    }
});
Ext.Container.LAYOUTS.table=Ext.layout.TableLayout;
Ext.layout.AbsoluteLayout=Ext.extend(Ext.layout.AnchorLayout,{
    extraCls:"x-abs-layout-item",
    type:"absolute",
    onLayout:function(a,b){
        b.position();
        this.paddingLeft=b.getPadding("l");
        this.paddingTop=b.getPadding("t");
        Ext.layout.AbsoluteLayout.superclass.onLayout.call(this,a,b)
        },
    adjustWidthAnchor:function(b,a){
        return b?b-a.getPosition(true)[0]+this.paddingLeft:b
        },
    adjustHeightAnchor:function(b,a){
        return b?b-a.getPosition(true)[1]+this.paddingTop:b
        }
    });
Ext.Container.LAYOUTS.absolute=Ext.layout.AbsoluteLayout;
Ext.layout.BoxLayout=Ext.extend(Ext.layout.ContainerLayout,{
    defaultMargins:{
        left:0,
        top:0,
        right:0,
        bottom:0
    },
    padding:"0",
    pack:"start",
    monitorResize:true,
    type:"box",
    scrollOffset:0,
    extraCls:"x-box-item",
    targetCls:"x-box-layout-ct",
    innerCls:"x-box-inner",
    constructor:function(a){
        Ext.layout.BoxLayout.superclass.constructor.call(this,a);
        if(Ext.isString(this.defaultMargins)){
            this.defaultMargins=this.parseMargins(this.defaultMargins)
            }
        },
onLayout:function(a,d){
    Ext.layout.BoxLayout.superclass.onLayout.call(this,a,d);
    var b=this.getVisibleItems(a),c=this.getLayoutTargetSize();
    this.layoutTargetLastSize=c;
    this.childBoxCache=this.calculateChildBoxes(b,c);
    this.updateInnerCtSize(c,this.childBoxCache);
    this.updateChildBoxes(this.childBoxCache.boxes);
    this.handleTargetOverflow(c,a,d)
    },
updateChildBoxes:function(c){
    for(var b=0,e=c.length;b<e;b++){
        var d=c[b],a=d.component;
        if(d.dirtySize){
            a.setSize(d.width,d.height)
            }
            if(isNaN(d.left)||isNaN(d.top)){
            continue
        }
        a.setPosition(d.left,d.top)
        }
    },
updateInnerCtSize:Ext.emptyFn,
handleTargetOverflow:function(d,a,c){
    var e=c.getStyle("overflow");
    if(e&&e!="hidden"&&!this.adjustmentPass){
        var b=this.getLayoutTargetSize();
        if(b.width!=d.width||b.height!=d.height){
            this.adjustmentPass=true;
            this.onLayout(a,c)
            }
        }
    delete this.adjustmentPass
},
isValidParent:function(b,a){
    return this.innerCt&&b.getPositionEl().dom.parentNode==this.innerCt.dom
    },
getVisibleItems:function(g){
    var g=g||this.container,e=g.getLayoutTarget(),h=g.items.items,a=h.length,d,j,b=[];
    for(d=0;d<a;d++){
        if((j=h[d]).rendered&&this.isValidParent(j,e)&&j.hidden!==true&&j.collapsed!==true){
            b.push(j)
            }
        }
    return b
},
renderAll:function(a,b){
    if(!this.innerCt){
        this.innerCt=b.createChild({
            cls:this.innerCls
            });
        this.padding=this.parseMargins(this.padding)
        }
        Ext.layout.BoxLayout.superclass.renderAll.call(this,a,this.innerCt)
    },
getLayoutTargetSize:function(){
    var b=this.container.getLayoutTarget(),a;
    if(b){
        a=b.getViewSize();
        if(Ext.isIE&&Ext.isStrict&&a.width==0){
            a=b.getStyleSize()
            }
            a.width-=b.getPadding("lr");
        a.height-=b.getPadding("tb")
        }
        return a
    },
renderItem:function(a){
    if(Ext.isString(a.margins)){
        a.margins=this.parseMargins(a.margins)
        }else{
        if(!a.margins){
            a.margins=this.defaultMargins
            }
        }
    Ext.layout.BoxLayout.superclass.renderItem.apply(this,arguments)
}
});
Ext.layout.VBoxLayout=Ext.extend(Ext.layout.BoxLayout,{
    align:"left",
    type:"vbox",
    updateInnerCtSize:function(b,d){
        var c=b.height,a=d.meta.maxWidth+this.padding.left+this.padding.right;
        if(this.align=="stretch"){
            a=b.width
            }else{
            if(this.align=="center"){
                a=Math.max(b.width,a)
                }
            }
        this.innerCt.setSize(a||undefined,c||undefined)
    },
calculateChildBoxes:function(x,e){
    var k=x.length,u=this.padding,z=u.top,p=u.left,q=z+u.bottom,a=p+u.right,y=e.width-this.scrollOffset,v=e.height,B=Math.max(0,y-a),l=this.pack=="start",m=this.pack=="center",n=this.pack=="end",J=0,F=0,A=0,j=[],h,d,g,b,t,D,C,s,G,H,E;
    for(C=0;C<k;C++){
        h=x[C];
        g=h.height;
        d=h.width;
        D=!h.hasLayout&&Ext.isFunction(h.doLayout);
        if(!Ext.isNumber(g)){
            if(h.flex&&!g){
                A+=h.flex
                }else{
                if(!g&&D){
                    h.doLayout()
                    }
                    b=h.getSize();
                d=b.width;
                g=b.height
                }
            }
        t=h.margins;
    J+=(g||0)+t.top+t.bottom;
        if(!Ext.isNumber(d)){
        if(D){
            h.doLayout()
            }
            d=h.getWidth()
        }
        F=Math.max(F,d+t.left+t.right);
        j.push({
        component:h,
        height:g||undefined,
        width:d||undefined
        })
    }
    var c=Math.max(0,(v-J-q));
    if(m){
    z+=c/2
    }else{
    if(n){
        z+=c
        }
    }
var o=c,I=A;
for(C=0;C<k;C++){
    h=x[C];
    s=j[C];
    t=h.margins;
    H=t.left+t.right;
    z+=t.top;
    if(l&&h.flex&&!h.height){
        G=Math.ceil((h.flex/I)*o);
        o-=G;
        I-=h.flex;
        s.height=G;
        s.dirtySize=true
        }
        s.left=p+t.left;
    s.top=z;
    switch(this.align){
        case"stretch":
            E=B-H;
            s.width=E.constrain(h.minHeight||0,h.maxWidth||1000000);
            s.dirtySize=true;
            break;
        case"stretchmax":
            E=F-H;
            s.width=E.constrain(h.minHeight||0,h.maxWidth||1000000);
            s.dirtySize=true;
            break;
        case"center":
            var r=B-s.width-H;
            if(r>0){
            s.left=p+H+(r/2)
            }
        }
        z+=s.height+t.bottom
}
return{
    boxes:j,
    meta:{
        maxWidth:F
    }
}
}
});
Ext.Container.LAYOUTS.vbox=Ext.layout.VBoxLayout;
Ext.layout.HBoxLayout=Ext.extend(Ext.layout.BoxLayout,{
    align:"top",
    type:"hbox",
    updateInnerCtSize:function(b,d){
        var a=b.width,c=d.meta.maxHeight+this.padding.top+this.padding.bottom;
        if(this.align=="stretch"){
            c=b.height
            }else{
            if(this.align=="middle"){
                c=Math.max(b.height,c)
                }
            }
        this.innerCt.setSize(a||undefined,c||undefined)
    },
calculateChildBoxes:function(A,e){
    var n=A.length,y=this.padding,D=y.top,r=y.left,s=D+y.bottom,a=r+y.right,C=e.width-this.scrollOffset,z=e.height,h=Math.max(0,z-s),o=this.pack=="start",p=this.pack=="center",q=this.pack=="end",J=0,B=0,E=0,m=[],l,d,g,c,x,G,F,v,I,j,t;
    for(F=0;F<n;F++){
        l=A[F];
        g=l.height;
        d=l.width;
        G=!l.hasLayout&&Ext.isFunction(l.doLayout);
        if(!Ext.isNumber(d)){
            if(l.flex&&!d){
                E+=l.flex
                }else{
                if(!d&&G){
                    l.doLayout()
                    }
                    c=l.getSize();
                d=c.width;
                g=c.height
                }
            }
        x=l.margins;
    J+=(d||0)+x.left+x.right;
        if(!Ext.isNumber(g)){
        if(G){
            l.doLayout()
            }
            g=l.getHeight()
        }
        B=Math.max(B,g+x.top+x.bottom);
        m.push({
        component:l,
        height:g||undefined,
        width:d||undefined
        })
    }
    var b=Math.max(0,(C-J-a));
    if(p){
    r+=b/2
    }else{
    if(q){
        r+=b
        }
    }
var k=b,H=E;
for(F=0;F<n;F++){
    l=A[F];
    v=m[F];
    x=l.margins;
    j=x.top+x.bottom;
    r+=x.left;
    if(o&&l.flex&&!l.width){
        I=Math.ceil((l.flex/H)*k);
        k-=I;
        H-=l.flex;
        v.width=I;
        v.dirtySize=true
        }
        v.left=r;
    v.top=D+x.top;
    switch(this.align){
        case"stretch":
            t=h-j;
            v.height=t.constrain(l.minHeight||0,l.maxHeight||1000000);
            v.dirtySize=true;
            break;
        case"stretchmax":
            t=B-j;
            v.height=t.constrain(l.minHeight||0,l.maxHeight||1000000);
            v.dirtySize=true;
            break;
        case"middle":
            var u=h-v.height-j;
            if(u>0){
            v.top=D+j+(u/2)
            }
        }
        r+=v.width+x.right
}
return{
    boxes:m,
    meta:{
        maxHeight:B
    }
}
}
});
Ext.Container.LAYOUTS.hbox=Ext.layout.HBoxLayout;
Ext.layout.ToolbarLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    type:"toolbar",
    triggerWidth:18,
    noItemsMenuText:'<div class="x-toolbar-no-items">(None)</div>',
    lastOverflow:false,
    tableHTML:['<table cellspacing="0" class="x-toolbar-ct">',"<tbody>","<tr>",'<td class="x-toolbar-left" align="{0}">','<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-left-row"></tr>',"</tbody>","</table>","</td>",'<td class="x-toolbar-right" align="right">','<table cellspacing="0" class="x-toolbar-right-ct">',"<tbody>","<tr>","<td>",'<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-right-row"></tr>',"</tbody>","</table>","</td>","<td>",'<table cellspacing="0">',"<tbody>",'<tr class="x-toolbar-extras-row"></tr>',"</tbody>","</table>","</td>","</tr>","</tbody>","</table>","</td>","</tr>","</tbody>","</table>"].join(""),
    onLayout:function(e,j){
        if(!this.leftTr){
            var h=e.buttonAlign=="center"?"center":"left";
            j.addClass("x-toolbar-layout-ct");
            j.insertHtml("beforeEnd",String.format(this.tableHTML,h));
            this.leftTr=j.child("tr.x-toolbar-left-row",true);
            this.rightTr=j.child("tr.x-toolbar-right-row",true);
            this.extrasTr=j.child("tr.x-toolbar-extras-row",true);
            if(this.hiddenItem==undefined){
                this.hiddenItems=[]
                }
            }
        var k=e.buttonAlign=="right"?this.rightTr:this.leftTr,l=e.items.items,d=0;
    for(var b=0,g=l.length,m;b<g;b++,d++){
        m=l[b];
        if(m.isFill){
            k=this.rightTr;
            d=-1
            }else{
            if(!m.rendered){
                m.render(this.insertCell(m,k,d))
                }else{
                if(!m.xtbHidden&&!this.isValidParent(m,k.childNodes[d])){
                    var a=this.insertCell(m,k,d);
                    a.appendChild(m.getPositionEl().dom);
                    m.container=Ext.get(a)
                    }
                }
        }
    }
this.cleanup(this.leftTr);
this.cleanup(this.rightTr);
this.cleanup(this.extrasTr);
this.fitToSize(j)
},
cleanup:function(b){
    var e=b.childNodes,a,d;
    for(a=e.length-1;a>=0&&(d=e[a]);a--){
        if(!d.firstChild){
            b.removeChild(d)
            }
        }
    },
insertCell:function(e,b,a){
    var d=document.createElement("td");
    d.className="x-toolbar-cell";
    b.insertBefore(d,b.childNodes[a]||null);
    return d
    },
hideItem:function(a){
    this.hiddenItems.push(a);
    a.xtbHidden=true;
    a.xtbWidth=a.getPositionEl().dom.parentNode.offsetWidth;
    a.hide()
    },
unhideItem:function(a){
    a.show();
    a.xtbHidden=false;
    this.hiddenItems.remove(a)
    },
getItemWidth:function(a){
    return a.hidden?(a.xtbWidth||0):a.getPositionEl().dom.parentNode.offsetWidth
    },
fitToSize:function(k){
    if(this.container.enableOverflow===false){
        return
    }
    var b=k.dom.clientWidth,j=k.dom.firstChild.offsetWidth,m=b-this.triggerWidth,a=this.lastWidth||0,c=this.hiddenItems,e=c.length!=0,n=b>=a;
    this.lastWidth=b;
    if(j>b||(e&&n)){
        var l=this.container.items.items,h=l.length,d=0,o;
        for(var g=0;g<h;g++){
            o=l[g];
            if(!o.isFill){
                d+=this.getItemWidth(o);
                if(d>m){
                    if(!(o.hidden||o.xtbHidden)){
                        this.hideItem(o)
                        }
                    }else{
                if(o.xtbHidden){
                    this.unhideItem(o)
                    }
                }
        }
    }
}
e=c.length!=0;
if(e){
    this.initMore();
    if(!this.lastOverflow){
        this.container.fireEvent("overflowchange",this.container,true);
        this.lastOverflow=true
        }
    }else{
    if(this.more){
        this.clearMenu();
        this.more.destroy();
        delete this.more;
        if(this.lastOverflow){
            this.container.fireEvent("overflowchange",this.container,false);
            this.lastOverflow=false
            }
        }
}
},
createMenuConfig:function(c,a){
    var b=Ext.apply({},c.initialConfig),d=c.toggleGroup;
    Ext.copyTo(b,c,["iconCls","icon","itemId","disabled","handler","scope","menu"]);
    Ext.apply(b,{
        text:c.overflowText||c.text,
        hideOnClick:a
    });
    if(d||c.enableToggle){
        Ext.apply(b,{
            group:d,
            checked:c.pressed,
            listeners:{
                checkchange:function(g,e){
                    c.toggle(e)
                    }
                }
        })
}
delete b.ownerCt;
delete b.xtype;
delete b.id;
return b
},
addComponentToMenu:function(b,a){
    if(a instanceof Ext.Toolbar.Separator){
        b.add("-")
        }else{
        if(Ext.isFunction(a.isXType)){
            if(a.isXType("splitbutton")){
                b.add(this.createMenuConfig(a,true))
                }else{
                if(a.isXType("button")){
                    b.add(this.createMenuConfig(a,!a.menu))
                    }else{
                    if(a.isXType("buttongroup")){
                        a.items.each(function(c){
                            this.addComponentToMenu(b,c)
                            },this)
                        }
                    }
            }
    }
}
},
clearMenu:function(){
    var a=this.moreMenu;
    if(a&&a.items){
        a.items.each(function(b){
            delete b.menu
            })
        }
    },
beforeMoreShow:function(h){
    var b=this.container.items.items,a=b.length,g,e;
    var c=function(j,i){
        return j.isXType("buttongroup")&&!(i instanceof Ext.Toolbar.Separator)
        };

    this.clearMenu();
    h.removeAll();
    for(var d=0;d<a;d++){
        g=b[d];
        if(g.xtbHidden){
            if(e&&(c(g,e)||c(e,g))){
                h.add("-")
                }
                this.addComponentToMenu(h,g);
            e=g
            }
        }
    if(h.items.length<1){
    h.add(this.noItemsMenuText)
    }
},
initMore:function(){
    if(!this.more){
        this.moreMenu=new Ext.menu.Menu({
            ownerCt:this.container,
            listeners:{
                beforeshow:this.beforeMoreShow,
                scope:this
            }
        });
    this.more=new Ext.Button({
        iconCls:"x-toolbar-more-icon",
        cls:"x-toolbar-more",
        menu:this.moreMenu,
        ownerCt:this.container
        });
    var a=this.insertCell(this.more,this.extrasTr,100);
    this.more.render(a)
    }
},
destroy:function(){
    Ext.destroy(this.more,this.moreMenu);
    delete this.leftTr;
    delete this.rightTr;
    delete this.extrasTr;
    Ext.layout.ToolbarLayout.superclass.destroy.call(this)
    }
});
Ext.Container.LAYOUTS.toolbar=Ext.layout.ToolbarLayout;
Ext.layout.MenuLayout=Ext.extend(Ext.layout.ContainerLayout,{
    monitorResize:true,
    type:"menu",
    setContainer:function(a){
        this.monitorResize=!a.floating;
        a.on("autosize",this.doAutoSize,this);
        Ext.layout.MenuLayout.superclass.setContainer.call(this,a)
        },
    renderItem:function(g,b,e){
        if(!this.itemTpl){
            this.itemTpl=Ext.layout.MenuLayout.prototype.itemTpl=new Ext.XTemplate('<li id="{itemId}" class="{itemCls}">','<tpl if="needsIcon">','<img src="{icon}" class="{iconCls}"/>',"</tpl>","</li>")
            }
            if(g&&!g.rendered){
            if(Ext.isNumber(b)){
                b=e.dom.childNodes[b]
                }
                var d=this.getItemArgs(g);
            g.render(g.positionEl=b?this.itemTpl.insertBefore(b,d,true):this.itemTpl.append(e,d,true));
            g.positionEl.menuItemId=g.getItemId();
            if(!d.isMenuItem&&d.needsIcon){
                g.positionEl.addClass("x-menu-list-item-indent")
                }
                this.configureItem(g,b)
            }else{
            if(g&&!this.isValidParent(g,e)){
                if(Ext.isNumber(b)){
                    b=e.dom.childNodes[b]
                    }
                    e.dom.insertBefore(g.getActionEl().dom,b||null)
                }
            }
    },
getItemArgs:function(b){
    var a=b instanceof Ext.menu.Item;
    return{
        isMenuItem:a,
        needsIcon:!a&&(b.icon||b.iconCls),
        icon:b.icon||Ext.BLANK_IMAGE_URL,
        iconCls:"x-menu-item-icon "+(b.iconCls||""),
        itemId:"x-menu-el-"+b.id,
        itemCls:"x-menu-list-item "
    }
},
isValidParent:function(b,a){
    return b.el.up("li.x-menu-list-item",5).dom.parentNode===(a.dom||a)
    },
onLayout:function(a,b){
    Ext.layout.MenuLayout.superclass.onLayout.call(this,a,b);
    this.doAutoSize()
    },
doAutoSize:function(){
    var c=this.container,a=c.width;
    if(c.floating){
        if(a){
            c.setWidth(a)
            }else{
            if(Ext.isIE){
                c.setWidth(Ext.isStrict&&(Ext.isIE7||Ext.isIE8)?"auto":c.minWidth);
                var d=c.getEl(),b=d.dom.offsetWidth;
                c.setWidth(c.getLayoutTarget().getWidth()+d.getFrameWidth("lr"))
                }
            }
    }
}
});
Ext.Container.LAYOUTS.menu=Ext.layout.MenuLayout;
Ext.Viewport=Ext.extend(Ext.Container,{
    initComponent:function(){
        Ext.Viewport.superclass.initComponent.call(this);
        document.getElementsByTagName("html")[0].className+=" x-viewport";
        this.el=Ext.getBody();
        this.el.setHeight=Ext.emptyFn;
        this.el.setWidth=Ext.emptyFn;
        this.el.setSize=Ext.emptyFn;
        this.el.dom.scroll="no";
        this.allowDomMove=false;
        this.autoWidth=true;
        this.autoHeight=true;
        Ext.EventManager.onWindowResize(this.fireResize,this);
        this.renderTo=this.el
        },
    fireResize:function(a,b){
        this.fireEvent("resize",this,a,b,a,b)
        }
    });
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",
    preventBodyReset:false,
    padding:undefined,
    resizeEvent:"bodyresize",
    toolTarget:"header",
    collapseEl:"bwrap",
    slideAnchor:"t",
    disabledClass:"",
    deferHeight:true,
    expandDefaults:{
        duration:0.25
    },
    collapseDefaults:{
        duration:0.25
    },
    initComponent:function(){
        Ext.Panel.superclass.initComponent.call(this);
        this.addEvents("bodyresize","titlechange","iconchange","collapse","expand","beforecollapse","beforeexpand","beforeclose","close","activate","deactivate");
        if(this.unstyled){
            this.baseCls="x-plain"
            }
            this.toolbars=[];
        if(this.tbar){
            this.elements+=",tbar";
            this.topToolbar=this.createToolbar(this.tbar);
            this.tbar=null
            }
            if(this.bbar){
            this.elements+=",bbar";
            this.bottomToolbar=this.createToolbar(this.bbar);
            this.bbar=null
            }
            if(this.header===true){
            this.elements+=",header";
            this.header=null
            }else{
            if(this.headerCfg||(this.title&&this.header!==false)){
                this.elements+=",header"
                }
            }
        if(this.footerCfg||this.footer===true){
        this.elements+=",footer";
        this.footer=null
        }
        if(this.buttons){
        this.fbar=this.buttons;
        this.buttons=null
        }
        if(this.fbar){
        this.createFbar(this.fbar)
        }
        if(this.autoLoad){
        this.on("render",this.doAutoLoad,this,{
            delay:10
        })
        }
    },
createFbar:function(b){
    var a=this.minButtonWidth;
    this.elements+=",footer";
    this.fbar=this.createToolbar(b,{
        buttonAlign:this.buttonAlign,
        toolbarCls:"x-panel-fbar",
        enableOverflow:false,
        defaults:function(d){
            return{
                minWidth:d.minWidth||a
                }
            }
    });
this.fbar.items.each(function(d){
    d.minWidth=d.minWidth||this.minButtonWidth
    },this);
this.buttons=this.fbar.items.items
},
createToolbar:function(b,c){
    var a;
    if(Ext.isArray(b)){
        b={
            items:b
        }
    }
    a=b.events?Ext.apply(b,c):this.createComponent(Ext.apply({},b,c),"toolbar");
this.toolbars.push(a);
return a
},
createElement:function(a,c){
    if(this[a]){
        c.appendChild(this[a].dom);
        return
    }
    if(a==="bwrap"||this.elements.indexOf(a)!=-1){
        if(this[a+"Cfg"]){
            this[a]=Ext.fly(c).createChild(this[a+"Cfg"])
            }else{
            var b=document.createElement("div");
            b.className=this[a+"Cls"];
            this[a]=Ext.get(c.appendChild(b))
            }
            if(this[a+"CssClass"]){
            this[a].addClass(this[a+"CssClass"])
            }
            if(this[a+"Style"]){
            this[a].applyStyles(this[a+"Style"])
            }
        }
},
onRender:function(g,e){
    Ext.Panel.superclass.onRender.call(this,g,e);
    this.createClasses();
    var a=this.el,h=a.dom,k,i;
    if(this.collapsible&&!this.hideCollapseTool){
        this.tools=this.tools?this.tools.slice(0):[];
        this.tools[this.collapseFirst?"unshift":"push"]({
            id:"toggle",
            handler:this.toggleCollapse,
            scope:this
        })
        }
        if(this.tools){
        i=this.tools;
        this.elements+=(this.header!==false)?",header":""
        }
        this.tools={};

    a.addClass(this.baseCls);
    if(h.firstChild){
        this.header=a.down("."+this.headerCls);
        this.bwrap=a.down("."+this.bwrapCls);
        var j=this.bwrap?this.bwrap:a;
        this.tbar=j.down("."+this.tbarCls);
        this.body=j.down("."+this.bodyCls);
        this.bbar=j.down("."+this.bbarCls);
        this.footer=j.down("."+this.footerCls);
        this.fromMarkup=true
        }
        if(this.preventBodyReset===true){
        a.addClass("x-panel-reset")
        }
        if(this.cls){
        a.addClass(this.cls)
        }
        if(this.buttons){
        this.elements+=",footer"
        }
        if(this.frame){
        a.insertHtml("afterBegin",String.format(Ext.Element.boxMarkup,this.baseCls));
        this.createElement("header",h.firstChild.firstChild.firstChild);
        this.createElement("bwrap",h);
        k=this.bwrap.dom;
        var c=h.childNodes[1],b=h.childNodes[2];
        k.appendChild(c);
        k.appendChild(b);
        var l=k.firstChild.firstChild.firstChild;
        this.createElement("tbar",l);
        this.createElement("body",l);
        this.createElement("bbar",l);
        this.createElement("footer",k.lastChild.firstChild.firstChild);
        if(!this.footer){
            this.bwrap.dom.lastChild.className+=" x-panel-nofooter"
            }
            this.ft=Ext.get(this.bwrap.dom.lastChild);
        this.mc=Ext.get(l)
        }else{
        this.createElement("header",h);
        this.createElement("bwrap",h);
        k=this.bwrap.dom;
        this.createElement("tbar",k);
        this.createElement("body",k);
        this.createElement("bbar",k);
        this.createElement("footer",k);
        if(!this.header){
            this.body.addClass(this.bodyCls+"-noheader");
            if(this.tbar){
                this.tbar.addClass(this.tbarCls+"-noheader")
                }
            }
    }
if(Ext.isDefined(this.padding)){
    this.body.setStyle("padding",this.body.addUnits(this.padding))
    }
    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")
    }
    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.titleCollapse&&this.header){
    this.mon(this.header,"click",this.toggleCollapse,this);
    this.header.setStyle("cursor","pointer")
    }
    if(i){
    this.addTool.apply(this,i)
    }
    if(this.fbar){
    this.footer.addClass("x-panel-btns");
    this.fbar.ownerCt=this;
    this.fbar.render(this.footer);
    this.footer.createChild({
        cls:"x-clear"
    })
    }
    if(this.tbar&&this.topToolbar){
    this.topToolbar.ownerCt=this;
    this.topToolbar.render(this.tbar)
    }
    if(this.bbar&&this.bottomToolbar){
    this.bottomToolbar.ownerCt=this;
    this.bottomToolbar.render(this.bbar)
    }
},
setIconClass:function(b){
    var a=this.iconCls;
    this.iconCls=b;
    if(this.rendered&&this.header){
        if(this.frame){
            this.header.addClass("x-panel-icon");
            this.header.replaceClass(a,this.iconCls)
            }else{
            var e=this.header,c=e.child("img.x-panel-inline-icon");
            if(c){
                Ext.fly(c).replaceClass(a,this.iconCls)
                }else{
                var d=e.child("span."+this.headerTextCls);
                if(d){
                    Ext.DomHelper.insertBefore(d.dom,{
                        tag:"img",
                        src:Ext.BLANK_IMAGE_URL,
                        cls:"x-panel-inline-icon "+this.iconCls
                        })
                    }
                }
        }
}
this.fireEvent("iconchange",this,b,a)
},
makeFloating:function(a){
    this.floating=true;
    this.el=new Ext.Layer(Ext.apply({},a,{
        shadow:Ext.isDefined(this.shadow)?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
    },
getFooterToolbar:function(){
    return this.fbar
    },
addButton:function(a,c,b){
    if(!this.fbar){
        this.createFbar([])
        }
        if(c){
        if(Ext.isString(a)){
            a={
                text:a
            }
        }
        a=Ext.apply({
        handler:c,
        scope:b
    },a)
    }
    return this.fbar.add(a)
},
addTool:function(){
    if(!this.rendered){
        if(!this.tools){
            this.tools=[]
            }
            Ext.each(arguments,function(a){
            this.tools.push(a)
            },this);
        return
    }
    if(!this[this.toolTarget]){
        return
    }
    if(!this.toolTemplate){
        var h=new Ext.Template('<div class="x-tool x-tool-{id}">&#160;</div>');
        h.disableFormats=true;
        h.compile();
        Ext.Panel.prototype.toolTemplate=h
        }
        for(var g=0,d=arguments,c=d.length;g<c;g++){
        var b=d[g];
        if(!this.tools[b.id]){
            var j="x-tool-"+b.id+"-over";
            var e=this.toolTemplate.insertFirst(this[this.toolTarget],b,true);
            this.tools[b.id]=e;
            e.enableDisplayMode("block");
            this.mon(e,"click",this.createToolHandler(e,b,j,this));
            if(b.on){
                this.mon(e,b.on)
                }
                if(b.hidden){
                e.hide()
                }
                if(b.qtip){
                if(Ext.isObject(b.qtip)){
                    Ext.QuickTips.register(Ext.apply({
                        target:e.id
                        },b.qtip))
                    }else{
                    e.dom.qtip=b.qtip
                    }
                }
            e.addClassOnOver(j)
        }
    }
},
onLayout:function(b,a){
    Ext.Panel.superclass.onLayout.apply(this,arguments);
    if(this.hasLayout&&this.toolbars.length>0){
        Ext.each(this.toolbars,function(c){
            c.doLayout(undefined,a)
            });
        this.syncHeight()
        }
    },
syncHeight:function(){
    var b=this.toolbarHeight,c=this.body,a=this.lastSize.height,d;
    if(this.autoHeight||!Ext.isDefined(a)||a=="auto"){
        return
    }
    if(b!=this.getToolbarHeight()){
        b=Math.max(0,a-this.getFrameHeight());
        c.setHeight(b);
        d=c.getSize();
        this.toolbarHeight=this.getToolbarHeight();
        this.onBodyResize(d.width,d.height)
        }
    },
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(c,a,d,b){
    return function(g){
        c.removeClass(d);
        if(a.stopEvent!==false){
            g.stopEvent()
            }
            if(a.handler){
            a.handler.call(a.scope||c,g,c,b,a)
            }
        }
},
afterRender:function(){
    if(this.floating&&!this.hidden){
        this.el.show()
        }
        if(this.title){
        this.setTitle(this.title)
        }
        Ext.Panel.superclass.afterRender.call(this);
    if(this.collapsed){
        this.collapsed=false;
        this.collapse(false)
        }
        this.initEvents()
    },
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()
        }
        if(this.toolbars.length>0){
        Ext.each(this.toolbars,function(a){
            a.doLayout();
            a.on({
                scope:this,
                afterlayout:this.syncHeight,
                remove:this.syncHeight
                })
            },this);
        this.syncHeight()
        }
    },
initDraggable:function(){
    this.dd=new Ext.Panel.DD(this,Ext.isBoolean(this.draggable)?null:this.draggable)
    },
beforeEffect:function(a){
    if(this.floating){
        this.el.beforeAction()
        }
        if(a!==false){
        this.el.addClass("x-panel-animated")
        }
    },
afterEffect:function(a){
    this.syncShadow();
    this.el.removeClass("x-panel-animated")
    },
createEffect:function(c,b,d){
    var e={
        scope:d,
        block:true
    };

    if(c===true){
        e.callback=b;
        return e
        }else{
        if(!c.callback){
            e.callback=b
            }else{
            e.callback=function(){
                b.call(d);
                Ext.callback(c.callback,c.scope)
                }
            }
    }
return Ext.applyIf(e,c)
},
collapse:function(b){
    if(this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforecollapse",this,b)===false){
        return
    }
    var a=b===true||(b!==false&&this.animCollapse);
    this.beforeEffect(a);
    this.onCollapse(a,b);
    return this
    },
onCollapse:function(a,b){
    if(a){
        this[this.collapseEl].slideOut(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterCollapse,this),this.collapseDefaults))
        }else{
        this[this.collapseEl].hide(this.hideMode);
        this.afterCollapse(false)
        }
    },
afterCollapse:function(a){
    this.collapsed=true;
    this.el.addClass(this.collapsedCls);
    if(a!==false){
        this[this.collapseEl].hide(this.hideMode)
        }
        this.afterEffect(a);
    this.cascade(function(b){
        if(b.lastSize){
            b.lastSize={
                width:0,
                height:0
            }
        }
    });
this.fireEvent("collapse",this)
},
expand:function(b){
    if(!this.collapsed||this.el.hasFxBlock()||this.fireEvent("beforeexpand",this,b)===false){
        return
    }
    var a=b===true||(b!==false&&this.animCollapse);
    this.el.removeClass(this.collapsedCls);
    this.beforeEffect(a);
    this.onExpand(a,b);
    return this
    },
onExpand:function(a,b){
    if(a){
        this[this.collapseEl].slideIn(this.slideAnchor,Ext.apply(this.createEffect(b||true,this.afterExpand,this),this.expandDefaults))
        }else{
        this[this.collapseEl].show(this.hideMode);
        this.afterExpand(false)
        }
    },
afterExpand:function(a){
    this.collapsed=false;
    if(a!==false){
        this[this.collapseEl].show(this.hideMode)
        }
        this.afterEffect(a);
    if(this.deferLayout){
        delete this.deferLayout;
        this.doLayout(true)
        }
        this.fireEvent("expand",this)
    },
toggleCollapse:function(a){
    this[this.collapsed?"expand":"collapse"](a);
    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(g,d,c,e){
    var a=g,b=d;
    if(Ext.isDefined(a)||Ext.isDefined(b)){
        if(!this.collapsed){
            if(Ext.isNumber(a)){
                this.body.setWidth(a=this.adjustBodyWidth(a-this.getFrameWidth()))
                }else{
                if(a=="auto"){
                    a=this.body.setWidth("auto").dom.offsetWidth
                    }else{
                    a=this.body.dom.offsetWidth
                    }
                }
            if(this.tbar){
            this.tbar.setWidth(a);
            if(this.topToolbar){
                this.topToolbar.setSize(a)
                }
            }
        if(this.bbar){
        this.bbar.setWidth(a);
        if(this.bottomToolbar){
            this.bottomToolbar.setSize(a);
            if(Ext.isIE){
                this.bbar.setStyle("position","static");
                this.bbar.setStyle("position","")
                }
            }
    }
if(this.footer){
    this.footer.setWidth(a);
    if(this.fbar){
        this.fbar.setSize(Ext.isIE?(a-this.footer.getFrameWidth("lr")):"auto")
        }
    }
if(Ext.isNumber(b)){
    b=Math.max(0,b-this.getFrameHeight());
    this.body.setHeight(b)
    }else{
    if(b=="auto"){
        this.body.setHeight(b)
        }
    }
if(this.disabled&&this.el._mask){
    this.el._mask.setSize(this.el.dom.clientWidth,this.el.getHeight())
    }
}else{
    this.queuedBodySize={
        width:a,
        height:b
    };

    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,{
            single:true
        })
        }
    }
this.onBodyResize(a,b)
}
this.syncShadow();
Ext.Panel.superclass.onResize.call(this,g,d,c,e)
},
onBodyResize:function(a,b){
    this.fireEvent("bodyresize",this,a,b)
    },
getToolbarHeight:function(){
    var a=0;
    if(this.rendered){
        Ext.each(this.toolbars,function(b){
            a+=b.getHeight()
            },this)
        }
        return a
    },
adjustBodyHeight:function(a){
    return a
    },
adjustBodyWidth:function(a){
    return a
    },
onPosition:function(){
    this.syncShadow()
    },
getFrameWidth:function(){
    var b=this.el.getFrameWidth("lr")+this.bwrap.getFrameWidth("lr");
    if(this.frame){
        var a=this.bwrap.dom.firstChild;
        b+=(Ext.fly(a).getFrameWidth("l")+Ext.fly(a.firstChild).getFrameWidth("r"));
        b+=this.mc.getFrameWidth("lr")
        }
        return b
    },
getFrameHeight:function(){
    var a=Math.max(0,this.getHeight()-this.body.getHeight());
    if(isNaN(a)){
        a=0
        }
        return a
    },
getInnerWidth:function(){
    return this.getSize().width-this.getFrameWidth()
    },
getInnerHeight:function(){
    return this.body.getHeight()
    },
syncShadow:function(){
    if(this.floating){
        this.el.sync(true)
        }
    },
getLayoutTarget:function(){
    return this.body
    },
getContentTarget:function(){
    return this.body
    },
setTitle:function(b,a){
    this.title=b;
    if(this.header&&this.headerAsText){
        this.header.child("span").update(b)
        }
        if(a){
        this.setIconClass(a)
        }
        this.fireEvent("titlechange",this,b);
    return this
    },
getUpdater:function(){
    return this.body.getUpdater()
    },
load:function(){
    var a=this.body.getUpdater();
    a.update.apply(a,arguments);
    return this
    },
beforeDestroy:function(){
    Ext.Panel.superclass.beforeDestroy.call(this);
    if(this.header){
        this.header.removeAllListeners()
        }
        if(this.tools){
        for(var a in this.tools){
            Ext.destroy(this.tools[a])
            }
        }
        if(this.toolbars.length>0){
    Ext.each(this.toolbars,function(b){
        b.un("afterlayout",this.syncHeight,this);
        b.un("remove",this.syncHeight,this)
        },this)
    }
    if(Ext.isArray(this.buttons)){
    while(this.buttons.length){
        Ext.destroy(this.buttons[0])
        }
    }
if(this.rendered){
    Ext.destroy(this.ft,this.header,this.footer,this.toolbars,this.tbar,this.bbar,this.body,this.mc,this.bwrap);
    if(this.fbar){
        Ext.destroy(this.fbar,this.fbar.el)
        }
    }else{
    Ext.destroy(this.topToolbar,this.bottomToolbar)
    }
},
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(a,e,b){
    var d=document.createElement("div");
    d.className="x-panel-ghost "+(a?a:"");
    if(this.header){
        d.appendChild(this.el.dom.firstChild.cloneNode(true))
        }
        Ext.fly(d.appendChild(document.createElement("ul"))).setHeight(this.bwrap.getHeight());
    d.style.width=this.el.dom.offsetWidth+"px";
    if(!b){
        this.container.dom.appendChild(d)
        }else{
        Ext.getDom(b).appendChild(d)
        }
        if(e!==false&&this.el.useShim!==false){
        var c=new Ext.Layer({
            shadow:false,
            useDisplay:true,
            constrain:false
        },d);
        c.show();
        return c
        }else{
        return new Ext.Element(d)
        }
    },
doAutoLoad:function(){
    var a=this.body.getUpdater();
    if(this.renderer){
        a.setRenderer(this.renderer)
        }
        a.update(Ext.isObject(this.autoLoad)?this.autoLoad:{
        url:this.autoLoad
        })
    },
getTool:function(a){
    return this.tools[a]
    }
});
Ext.reg("panel",Ext.Panel);
Ext.Editor=function(b,a){
    if(b.field){
        this.field=Ext.create(b.field,"textfield");
        a=Ext.apply({},b);
        delete a.field
        }else{
        this.field=b
        }
        Ext.Editor.superclass.constructor.call(this,a)
    };

Ext.extend(Ext.Editor,Ext.Component,{
    allowBlur:true,
    value:"",
    alignment:"c-c?",
    offsets:[0,0],
    shadow:"frame",
    constrain:false,
    swallowKeys:true,
    completeOnEnter:true,
    cancelOnEsc:true,
    updateEl:false,
    initComponent:function(){
        Ext.Editor.superclass.initComponent.call(this);
        this.addEvents("beforestartedit","startedit","beforecomplete","complete","canceledit","specialkey")
        },
    onRender:function(b,a){
        this.el=new Ext.Layer({
            shadow:this.shadow,
            cls:"x-editor",
            parentEl:b,
            shim:this.shim,
            shadowOffset:this.shadowOffset||4,
            id:this.id,
            constrain:this.constrain
            });
        if(this.zIndex){
            this.el.setZIndex(this.zIndex)
            }
            this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");
        if(this.field.msgTarget!="title"){
            this.field.msgTarget="qtip"
            }
            this.field.inEditor=true;
        this.mon(this.field,{
            scope:this,
            blur:this.onBlur,
            specialkey:this.onSpecialKey
            });
        if(this.field.grow){
            this.mon(this.field,"autosize",this.el.sync,this.el,{
                delay:1
            })
            }
            this.field.render(this.el).show();
        this.field.getEl().dom.name="";
        if(this.swallowKeys){
            this.field.el.swallowEvent(["keypress","keydown"])
            }
        },
onSpecialKey:function(g,d){
    var b=d.getKey(),a=this.completeOnEnter&&b==d.ENTER,c=this.cancelOnEsc&&b==d.ESC;
    if(a||c){
        d.stopEvent();
        if(a){
            this.completeEdit()
            }else{
            this.cancelEdit()
            }
            if(g.triggerBlur){
            g.triggerBlur()
            }
        }
    this.fireEvent("specialkey",g,d)
    },
startEdit:function(b,c){
    if(this.editing){
        this.completeEdit()
        }
        this.boundEl=Ext.get(b);
    var a=c!==undefined?c:this.boundEl.dom.innerHTML;
    if(!this.rendered){
        this.render(this.parentEl||document.body)
        }
        if(this.fireEvent("beforestartedit",this,this.boundEl,a)!==false){
        this.startValue=a;
        this.field.reset();
        this.field.setValue(a);
        this.realign(true);
        this.editing=true;
        this.show()
        }
    },
doAutoSize:function(){
    if(this.autoSize){
        var b=this.boundEl.getSize(),a=this.field.getSize();
        switch(this.autoSize){
            case"width":
                this.setSize(b.width,a.height);
                break;
            case"height":
                this.setSize(a.width,b.height);
                break;
            case"none":
                this.setSize(a.width,a.height);
                break;
            default:
                this.setSize(b.width,b.height)
                }
            }
},
setSize:function(a,b){
    delete this.field.lastSize;
    this.field.setSize(a,b);
    if(this.el){
        if(Ext.isGecko2||Ext.isOpera){
            this.el.setSize(a,b)
            }
            this.el.sync()
        }
    },
realign:function(a){
    if(a===true){
        this.doAutoSize()
        }
        this.el.alignTo(this.boundEl,this.alignment,this.offsets)
    },
completeEdit:function(a){
    if(!this.editing){
        return
    }
    if(this.field.assertValue){
        this.field.assertValue()
        }
        var b=this.getValue();
    if(!this.field.isValid()){
        if(this.revertInvalid!==false){
            this.cancelEdit(a)
            }
            return
    }
    if(String(b)===String(this.startValue)&&this.ignoreNoChange){
        this.hideEdit(a);
        return
    }
    if(this.fireEvent("beforecomplete",this,b,this.startValue)!==false){
        b=this.getValue();
        if(this.updateEl&&this.boundEl){
            this.boundEl.update(b)
            }
            this.hideEdit(a);
        this.fireEvent("complete",this,b,this.startValue)
        }
    },
onShow:function(){
    this.el.show();
    if(this.hideEl!==false){
        this.boundEl.hide()
        }
        this.field.show().focus(false,true);
    this.fireEvent("startedit",this.boundEl,this.startValue)
    },
cancelEdit:function(a){
    if(this.editing){
        var b=this.getValue();
        this.setValue(this.startValue);
        this.hideEdit(a);
        this.fireEvent("canceledit",this,b,this.startValue)
        }
    },
hideEdit:function(a){
    if(a!==true){
        this.editing=false;
        this.hide()
        }
    },
onBlur:function(){
    if(this.allowBlur===true&&this.editing&&this.selectSameEditor!==true){
        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(a){
    this.field.setValue(a)
    },
getValue:function(){
    return this.field.getValue()
    },
beforeDestroy:function(){
    Ext.destroyMembers(this,"field");
    delete this.parentEl;
    delete this.boundEl
    }
});
Ext.reg("editor",Ext.Editor);
Ext.ColorPalette=Ext.extend(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"],
    initComponent:function(){
        Ext.ColorPalette.superclass.initComponent.call(this);
        this.addEvents("select");
        if(this.handler){
            this.on("select",this.handler,this.scope,true)
            }
        },
onRender:function(b,a){
    this.autoEl={
        tag:"div",
        cls:this.itemCls
        };

    Ext.ColorPalette.superclass.onRender.call(this,b,a);
    var c=this.tpl||new Ext.XTemplate('<tpl for="."><a href="#" class="color-{.}" hidefocus="on"><em><span style="background:#{.}" unselectable="on">&#160;</span></em></a></tpl>');
    c.overwrite(this.el,this.colors);
    this.mon(this.el,this.clickEvent,this.handleClick,this,{
        delegate:"a"
    });
    if(this.clickEvent!="click"){
        this.mon(this.el,"click",Ext.emptyFn,this,{
            delegate:"a",
            preventDefault:true
        })
        }
    },
afterRender:function(){
    Ext.ColorPalette.superclass.afterRender.call(this);
    if(this.value){
        var a=this.value;
        this.value=null;
        this.select(a)
        }
    },
handleClick:function(b,a){
    b.preventDefault();
    if(!this.disabled){
        var d=a.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
        this.select(d.toUpperCase())
        }
    },
select:function(a){
    a=a.replace("#","");
    if(a!=this.value||this.allowReselect){
        var b=this.el;
        if(this.value){
            b.child("a.color-"+this.value).removeClass("x-color-palette-sel")
            }
            b.child("a.color-"+a).addClass("x-color-palette-sel");
        this.value=a;
        this.fireEvent("select",this,a)
        }
    }
});
Ext.reg("colorpalette",Ext.ColorPalette);
Ext.DatePicker=Ext.extend(Ext.BoxComponent,{
    todayText:"Today",
    okText:"&#160;OK&#160;",
    cancelText:"Cancel",
    todayTip:"{0} (Spacebar)",
    minText:"This date is before the minimum date",
    maxText:"This date is after the maximum date",
    format:"m/d/y",
    disabledDaysText:"Disabled",
    disabledDatesText:"Disabled",
    monthNames:Date.monthNames,
    dayNames:Date.dayNames,
    nextText:"Next Month (Control+Right)",
    prevText:"Previous Month (Control+Left)",
    monthYearText:"Choose a month (Control+Up/Down to move years)",
    startDay:0,
    showToday:true,
    focusOnSelect:true,
    initHour:12,
    initComponent:function(){
        Ext.DatePicker.superclass.initComponent.call(this);
        this.value=this.value?this.value.clearTime(true):new Date().clearTime();
        this.addEvents("select");
        if(this.handler){
            this.on("select",this.handler,this.scope||this)
            }
            this.initDisabledDays()
        },
    initDisabledDays:function(){
        if(!this.disabledDatesRE&&this.disabledDates){
            var b=this.disabledDates,a=b.length-1,c="(?:";
            Ext.each(b,function(g,e){
                c+=Ext.isDate(g)?"^"+Ext.escapeRe(g.dateFormat(this.format))+"$":b[e];
                if(e!=a){
                    c+="|"
                    }
                },this);
        this.disabledDatesRE=new RegExp(c+")")
        }
    },
setDisabledDates:function(a){
    if(Ext.isArray(a)){
        this.disabledDates=a;
        this.disabledDatesRE=null
        }else{
        this.disabledDatesRE=a
        }
        this.initDisabledDays();
    this.update(this.value,true)
    },
setDisabledDays:function(a){
    this.disabledDays=a;
    this.update(this.value,true)
    },
setMinDate:function(a){
    this.minDate=a;
    this.update(this.value,true)
    },
setMaxDate:function(a){
    this.maxDate=a;
    this.update(this.value,true)
    },
setValue:function(a){
    this.value=a.clearTime(true);
    this.update(this.value)
    },
getValue:function(){
    return this.value
    },
focus:function(){
    this.update(this.activeDate)
    },
onEnable:function(a){
    Ext.DatePicker.superclass.onEnable.call(this);
    this.doDisabled(false);
    this.update(a?this.value:this.activeDate);
    if(Ext.isIE){
        this.el.repaint()
        }
    },
onDisable:function(){
    Ext.DatePicker.superclass.onDisable.call(this);
    this.doDisabled(true);
    if(Ext.isIE&&!Ext.isIE8){
        Ext.each([].concat(this.textNodes,this.el.query("th span")),function(a){
            Ext.fly(a).repaint()
            })
        }
    },
doDisabled:function(a){
    this.keyNav.setDisabled(a);
    this.prevRepeater.setDisabled(a);
    this.nextRepeater.setDisabled(a);
    if(this.showToday){
        this.todayKeyListener.setDisabled(a);
        this.todayBtn.setDisabled(a)
        }
    },
onRender:function(e,b){
    var a=['<table cellspacing="0">','<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>','<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'],c=this.dayNames,h;
    for(h=0;h<7;h++){
        var k=this.startDay+h;
        if(k>6){
            k=k-7
            }
            a.push("<th><span>",c[k].substr(0,1),"</span></th>")
        }
        a[a.length]="</tr></thead><tbody><tr>";
    for(h=0;h<42;h++){
        if(h%7===0&&h!==0){
            a[a.length]="</tr><tr>"
            }
            a[a.length]='<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>'
        }
        a.push("</tr></tbody></table></td></tr>",this.showToday?'<tr><td colspan="3" class="x-date-bottom" align="center"></td></tr>':"",'</table><div class="x-date-mp"></div>');
    var j=document.createElement("div");
    j.className="x-date-picker";
    j.innerHTML=a.join("");
    e.dom.insertBefore(j,b);
    this.el=Ext.get(j);
    this.eventEl=Ext.get(j.firstChild);
    this.prevRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{
        handler:this.showPrevMonth,
        scope:this,
        preventDefault:true,
        stopDefault:true
    });
    this.nextRepeater=new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{
        handler:this.showNextMonth,
        scope:this,
        preventDefault:true,
        stopDefault:true
    });
    this.monthPicker=this.el.down("div.x-date-mp");
    this.monthPicker.enableDisplayMode("block");
    this.keyNav=new Ext.KeyNav(this.eventEl,{
        left:function(d){
            if(d.ctrlKey){
                this.showPrevMonth()
                }else{
                this.update(this.activeDate.add("d",-1))
                }
            },
    right:function(d){
        if(d.ctrlKey){
            this.showNextMonth()
            }else{
            this.update(this.activeDate.add("d",1))
            }
        },
    up:function(d){
        if(d.ctrlKey){
            this.showNextYear()
            }else{
            this.update(this.activeDate.add("d",-7))
            }
        },
down:function(d){
    if(d.ctrlKey){
        this.showPrevYear()
        }else{
        this.update(this.activeDate.add("d",7))
        }
    },
pageUp:function(d){
    this.showNextMonth()
    },
pageDown:function(d){
    this.showPrevMonth()
    },
enter:function(d){
    d.stopPropagation();
    return true
    },
scope:this
});
this.el.unselectable();
this.cells=this.el.select("table.x-date-inner tbody td");
this.textNodes=this.el.query("table.x-date-inner tbody span");
this.mbtn=new Ext.Button({
    text:"&#160;",
    tooltip:this.monthYearText,
    renderTo:this.el.child("td.x-date-middle",true)
    });
this.mbtn.el.child("em").addClass("x-btn-arrow");
if(this.showToday){
    this.todayKeyListener=this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);
    var g=(new Date()).dateFormat(this.format);
    this.todayBtn=new Ext.Button({
        renderTo:this.el.child("td.x-date-bottom",true),
        text:String.format(this.todayText,g),
        tooltip:String.format(this.todayTip,g),
        handler:this.selectToday,
        scope:this
    })
    }
    this.mon(this.eventEl,"mousewheel",this.handleMouseWheel,this);
this.mon(this.eventEl,"click",this.handleDateClick,this,{
    delegate:"a.x-date-date"
});
this.mon(this.mbtn,"click",this.showMonthPicker,this);
this.onEnable(true)
},
createMonthPicker:function(){
    if(!this.monthPicker.dom.firstChild){
        var a=['<table border="0" cellspacing="0">'];
        for(var b=0;b<6;b++){
            a.push('<tr><td class="x-date-mp-month"><a href="#">',Date.getShortMonthName(b),"</a></td>",'<td class="x-date-mp-month x-date-mp-sep"><a href="#">',Date.getShortMonthName(b+6),"</a></td>",b===0?'<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>':'<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>')
            }
            a.push('<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',this.okText,'</button><button type="button" class="x-date-mp-cancel">',this.cancelText,"</button></td></tr>","</table>");
        this.monthPicker.update(a.join(""));
        this.mon(this.monthPicker,"click",this.onMonthClick,this);
        this.mon(this.monthPicker,"dblclick",this.onMonthDblClick,this);
        this.mpMonths=this.monthPicker.select("td.x-date-mp-month");
        this.mpYears=this.monthPicker.select("td.x-date-mp-year");
        this.mpMonths.each(function(c,d,e){
            e+=1;
            if((e%2)===0){
                c.dom.xmonth=5+Math.round(e*0.5)
                }else{
                c.dom.xmonth=Math.round((e-1)*0.5)
                }
            })
    }
},
showMonthPicker:function(){
    if(!this.disabled){
        this.createMonthPicker();
        var a=this.el.getSize();
        this.monthPicker.setSize(a);
        this.monthPicker.child("table").setSize(a);
        this.mpSelMonth=(this.activeDate||this.value).getMonth();
        this.updateMPMonth(this.mpSelMonth);
        this.mpSelYear=(this.activeDate||this.value).getFullYear();
        this.updateMPYear(this.mpSelYear);
        this.monthPicker.slideIn("t",{
            duration:0.2
        })
        }
    },
updateMPYear:function(e){
    this.mpyear=e;
    var c=this.mpYears.elements;
    for(var b=1;b<=10;b++){
        var d=c[b-1],a;
        if((b%2)===0){
            a=e+Math.round(b*0.5);
            d.firstChild.innerHTML=a;
            d.xyear=a
            }else{
            a=e-(5-Math.round(b*0.5));
            d.firstChild.innerHTML=a;
            d.xyear=a
            }
            this.mpYears.item(b-1)[a==this.mpSelYear?"addClass":"removeClass"]("x-date-mp-sel")
        }
    },
updateMPMonth:function(a){
    this.mpMonths.each(function(b,c,d){
        b[b.dom.xmonth==a?"addClass":"removeClass"]("x-date-mp-sel")
        })
    },
selectMPMonth:function(a){},
onMonthClick:function(g,b){
    g.stopEvent();
    var c=new Ext.Element(b),a;
    if(c.is("button.x-date-mp-cancel")){
        this.hideMonthPicker()
        }else{
        if(c.is("button.x-date-mp-ok")){
            var h=new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate());
            if(h.getMonth()!=this.mpSelMonth){
                h=new Date(this.mpSelYear,this.mpSelMonth,1).getLastDateOfMonth()
                }
                this.update(h);
            this.hideMonthPicker()
            }else{
            if((a=c.up("td.x-date-mp-month",2))){
                this.mpMonths.removeClass("x-date-mp-sel");
                a.addClass("x-date-mp-sel");
                this.mpSelMonth=a.dom.xmonth
                }else{
                if((a=c.up("td.x-date-mp-year",2))){
                    this.mpYears.removeClass("x-date-mp-sel");
                    a.addClass("x-date-mp-sel");
                    this.mpSelYear=a.dom.xyear
                    }else{
                    if(c.is("a.x-date-mp-prev")){
                        this.updateMPYear(this.mpyear-10)
                        }else{
                        if(c.is("a.x-date-mp-next")){
                            this.updateMPYear(this.mpyear+10)
                            }
                        }
                }
        }
}
}
},
onMonthDblClick:function(d,b){
    d.stopEvent();
    var c=new Ext.Element(b),a;
    if((a=c.up("td.x-date-mp-month",2))){
        this.update(new Date(this.mpSelYear,a.dom.xmonth,(this.activeDate||this.value).getDate()));
        this.hideMonthPicker()
        }else{
        if((a=c.up("td.x-date-mp-year",2))){
            this.update(new Date(a.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));
            this.hideMonthPicker()
            }
        }
},
hideMonthPicker:function(a){
    if(this.monthPicker){
        if(a===true){
            this.monthPicker.hide()
            }else{
            this.monthPicker.slideOut("t",{
                duration:0.2
            })
            }
        }
},
showPrevMonth:function(a){
    this.update(this.activeDate.add("mo",-1))
    },
showNextMonth:function(a){
    this.update(this.activeDate.add("mo",1))
    },
showPrevYear:function(){
    this.update(this.activeDate.add("y",-1))
    },
showNextYear:function(){
    this.update(this.activeDate.add("y",1))
    },
handleMouseWheel:function(a){
    a.stopEvent();
    if(!this.disabled){
        var b=a.getWheelDelta();
        if(b>0){
            this.showPrevMonth()
            }else{
            if(b<0){
                this.showNextMonth()
                }
            }
    }
},
handleDateClick:function(b,a){
    b.stopEvent();
    if(!this.disabled&&a.dateValue&&!Ext.fly(a.parentNode).hasClass("x-date-disabled")){
        this.cancelFocus=this.focusOnSelect===false;
        this.setValue(new Date(a.dateValue));
        delete this.cancelFocus;
        this.fireEvent("select",this,this.value)
        }
    },
selectToday:function(){
    if(this.todayBtn&&!this.todayBtn.disabled){
        this.setValue(new Date().clearTime());
        this.fireEvent("select",this,this.value)
        }
    },
update:function(G,A){
    if(this.rendered){
        var a=this.activeDate,p=this.isVisible();
        this.activeDate=G;
        if(!A&&a&&this.el){
            var o=G.getTime();
            if(a.getMonth()==G.getMonth()&&a.getFullYear()==G.getFullYear()){
                this.cells.removeClass("x-date-selected");
                this.cells.each(function(d){
                    if(d.dom.firstChild.dateValue==o){
                        d.addClass("x-date-selected");
                        if(p&&!this.cancelFocus){
                            Ext.fly(d.dom.firstChild).focus(50)
                            }
                            return false
                        }
                    },this);
            return
        }
    }
    var k=G.getDaysInMonth(),q=G.getFirstDateOfMonth(),g=q.getDay()-this.startDay;
if(g<0){
    g+=7
    }
    k+=g;
var B=G.add("mo",-1),h=B.getDaysInMonth()-g,e=this.cells.elements,r=this.textNodes,D=(new Date(B.getFullYear(),B.getMonth(),h,this.initHour)),C=new Date().clearTime().getTime(),v=G.clearTime(true).getTime(),u=this.minDate?this.minDate.clearTime(true):Number.NEGATIVE_INFINITY,y=this.maxDate?this.maxDate.clearTime(true):Number.POSITIVE_INFINITY,F=this.disabledDatesRE,s=this.disabledDatesText,I=this.disabledDays?this.disabledDays.join(""):false,E=this.disabledDaysText,z=this.format;
if(this.showToday){
    var m=new Date().clearTime(),c=(m<u||m>y||(F&&z&&F.test(m.dateFormat(z)))||(I&&I.indexOf(m.getDay())!=-1));
    if(!this.disabled){
        this.todayBtn.setDisabled(c);
        this.todayKeyListener[c?"disable":"enable"]()
        }
    }
var l=function(K,d){
    d.title="";
    var i=D.clearTime(true).getTime();
    d.firstChild.dateValue=i;
    if(i==C){
        d.className+=" x-date-today";
        d.title=K.todayText
        }
        if(i==v){
        d.className+=" x-date-selected";
        if(p){
            Ext.fly(d.firstChild).focus(50)
            }
        }
    if(i<u){
    d.className=" x-date-disabled";
    d.title=K.minText;
    return
}
if(i>y){
    d.className=" x-date-disabled";
    d.title=K.maxText;
    return
}
if(I){
    if(I.indexOf(D.getDay())!=-1){
        d.title=E;
        d.className=" x-date-disabled"
        }
    }
if(F&&z){
    var J=D.dateFormat(z);
    if(F.test(J)){
        d.title=s.replace("%0",J);
        d.className=" x-date-disabled"
        }
    }
};

var x=0;
for(;x<g;x++){
    r[x].innerHTML=(++h);
    D.setDate(D.getDate()+1);
    e[x].className="x-date-prevday";
    l(this,e[x])
    }
    for(;x<k;x++){
    var b=x-g+1;
    r[x].innerHTML=(b);
    D.setDate(D.getDate()+1);
    e[x].className="x-date-active";
    l(this,e[x])
    }
    var H=0;
for(;x<42;x++){
    r[x].innerHTML=(++H);
    D.setDate(D.getDate()+1);
    e[x].className="x-date-nextday";
    l(this,e[x])
    }
    this.mbtn.setText(this.monthNames[G.getMonth()]+" "+G.getFullYear());
if(!this.internalRender){
    var j=this.el.dom.firstChild,n=j.offsetWidth;
    this.el.setWidth(n+this.el.getBorderWidth("lr"));
    Ext.fly(j).setWidth(n);
    this.internalRender=true;
    if(Ext.isOpera&&!this.secondPass){
        j.rows[0].cells[1].style.width=(n-(j.rows[0].cells[0].offsetWidth+j.rows[0].cells[2].offsetWidth))+"px";
        this.secondPass=true;
        this.update.defer(10,this,[G])
        }
    }
}
},
beforeDestroy:function(){
    if(this.rendered){
        Ext.destroy(this.keyNav,this.monthPicker,this.eventEl,this.mbtn,this.nextRepeater,this.prevRepeater,this.cells.el,this.todayBtn);
        delete this.textNodes;
        delete this.cells.elements
        }
    }
});
Ext.reg("datepicker",Ext.DatePicker);
Ext.LoadMask=function(c,b){
    this.el=Ext.get(c);
    Ext.apply(this,b);
    if(this.store){
        this.store.on({
            scope:this,
            beforeload:this.onBeforeLoad,
            load:this.onLoad,
            exception:this.onLoad
            });
        this.removeMask=Ext.value(this.removeMask,false)
        }else{
        var a=this.el.getUpdater();
        a.showLoadIndicator=false;
        a.on({
            scope:this,
            beforeupdate:this.onBeforeLoad,
            update:this.onLoad,
            failure:this.onLoad
            });
        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("exception",this.onLoad,this)
        }else{
        var a=this.el.getUpdater();
        a.un("beforeupdate",this.onBeforeLoad,this);
        a.un("update",this.onLoad,this);
        a.un("failure",this.onLoad,this)
        }
    }
};

Ext.ns("Ext.slider");
Ext.slider.Thumb=Ext.extend(Object,{
    constructor:function(a){
        Ext.apply(this,a||{},{
            cls:"x-slider-thumb",
            constrain:false
        });
        Ext.slider.Thumb.superclass.constructor.call(this,a);
        if(this.slider.vertical){
            Ext.apply(this,Ext.slider.Thumb.Vertical)
            }
        },
render:function(){
    this.el=this.slider.innerEl.insertFirst({
        cls:this.cls
        });
    this.initEvents()
    },
enable:function(){
    this.disabled=false;
    this.el.removeClass(this.slider.disabledClass)
    },
disable:function(){
    this.disabled=true;
    this.el.addClass(this.slider.disabledClass)
    },
initEvents:function(){
    var a=this.el;
    a.addClassOnOver("x-slider-thumb-over");
    this.tracker=new Ext.dd.DragTracker({
        onBeforeStart:this.onBeforeDragStart.createDelegate(this),
        onStart:this.onDragStart.createDelegate(this),
        onDrag:this.onDrag.createDelegate(this),
        onEnd:this.onDragEnd.createDelegate(this),
        tolerance:3,
        autoStart:300
    });
    this.tracker.initEl(a)
    },
onBeforeDragStart:function(a){
    if(this.disabled){
        return false
        }else{
        this.slider.promoteThumb(this);
        return true
        }
    },
onDragStart:function(a){
    this.el.addClass("x-slider-thumb-drag");
    this.dragging=true;
    this.dragStartValue=this.value;
    this.slider.fireEvent("dragstart",this.slider,a,this)
    },
onDrag:function(g){
    var c=this.slider,b=this.index,d=this.getNewValue();
    if(this.constrain){
        var a=c.thumbs[b+1],h=c.thumbs[b-1];
        if(h!=undefined&&d<=h.value){
            d=h.value
            }
            if(a!=undefined&&d>=a.value){
            d=a.value
            }
        }
    c.setValue(b,d,false);
    c.fireEvent("drag",c,g,this)
    },
getNewValue:function(){
    var a=this.slider,b=a.innerEl.translatePoints(this.tracker.getXY());
    return Ext.util.Format.round(a.reverseValue(b.left),a.decimalPrecision)
    },
onDragEnd:function(c){
    var a=this.slider,b=this.value;
    this.el.removeClass("x-slider-thumb-drag");
    this.dragging=false;
    a.fireEvent("dragend",a,c);
    if(this.dragStartValue!=b){
        a.fireEvent("changecomplete",a,b,this)
        }
    }
});
Ext.slider.MultiSlider=Ext.extend(Ext.BoxComponent,{
    vertical:false,
    minValue:0,
    maxValue:100,
    decimalPrecision:0,
    keyIncrement:1,
    increment:0,
    clickRange:[5,15],
    clickToChange:true,
    animate:true,
    dragging:false,
    constrainThumbs:true,
    topThumbZIndex:10000,
    initComponent:function(){
        if(!Ext.isDefined(this.value)){
            this.value=this.minValue
            }
            this.thumbs=[];
        Ext.slider.MultiSlider.superclass.initComponent.call(this);
        this.keyIncrement=Math.max(this.increment,this.keyIncrement);
        this.addEvents("beforechange","change","changecomplete","dragstart","drag","dragend");
        if(this.values==undefined||Ext.isEmpty(this.values)){
            this.values=[0]
            }
            var a=this.values;
        for(var b=0;b<a.length;b++){
            this.addThumb(a[b])
            }
            if(this.vertical){
            Ext.apply(this,Ext.slider.Vertical)
            }
        },
addThumb:function(b){
    var a=new Ext.slider.Thumb({
        value:b,
        slider:this,
        index:this.thumbs.length,
        constrain:this.constrainThumbs
        });
    this.thumbs.push(a);
    if(this.rendered){
        a.render()
        }
    },
promoteThumb:function(d){
    var a=this.thumbs,g,b;
    for(var e=0,c=a.length;e<c;e++){
        b=a[e];
        if(b==d){
            g=this.topThumbZIndex
            }else{
            g=""
            }
            b.el.setStyle("zIndex",g)
        }
    },
onRender:function(){
    this.autoEl={
        cls:"x-slider "+(this.vertical?"x-slider-vert":"x-slider-horz"),
        cn:{
            cls:"x-slider-end",
            cn:{
                cls:"x-slider-inner",
                cn:[{
                    tag:"a",
                    cls:"x-slider-focus",
                    href:"#",
                    tabIndex:"-1",
                    hidefocus:"on"
                }]
                }
            }
    };

Ext.slider.MultiSlider.superclass.onRender.apply(this,arguments);
this.endEl=this.el.first();
this.innerEl=this.endEl.first();
this.focusEl=this.innerEl.child(".x-slider-focus");
for(var b=0;b<this.thumbs.length;b++){
    this.thumbs[b].render()
    }
    var a=this.innerEl.child(".x-slider-thumb");
this.halfThumb=(this.vertical?a.getHeight():a.getWidth())/2;
this.initEvents()
},
initEvents:function(){
    this.mon(this.el,{
        scope:this,
        mousedown:this.onMouseDown,
        keydown:this.onKeyDown
        });
    this.focusEl.swallowEvent("click",true)
    },
onMouseDown:function(d){
    if(this.disabled){
        return
    }
    var c=false;
    for(var b=0;b<this.thumbs.length;b++){
        c=c||d.target==this.thumbs[b].el.dom
        }
        if(this.clickToChange&&!c){
        var a=this.innerEl.translatePoints(d.getXY());
        this.onClickChange(a)
        }
        this.focus()
    },
onClickChange:function(c){
    if(c.top>this.clickRange[0]&&c.top<this.clickRange[1]){
        var a=this.getNearest(c,"left"),b=a.index;
        this.setValue(b,Ext.util.Format.round(this.reverseValue(c.left),this.decimalPrecision),undefined,true)
        }
    },
getNearest:function(k,b){
    var m=b=="top"?this.innerEl.getHeight()-k[b]:k[b],g=this.reverseValue(m),j=(this.maxValue-this.minValue)+5,e=0,c=null;
    for(var d=0;d<this.thumbs.length;d++){
        var a=this.thumbs[d],l=a.value,h=Math.abs(l-g);
        if(Math.abs(h<=j)){
            c=a;
            e=d;
            j=h
            }
        }
    return c
},
onKeyDown:function(b){
    if(this.disabled){
        b.preventDefault();
        return
    }
    var a=b.getKey();
    switch(a){
        case b.UP:case b.RIGHT:
            b.stopEvent();
            if(b.ctrlKey){
            this.setValue(this.maxValue,undefined,true)
            }else{
            this.setValue(this.value+this.keyIncrement,undefined,true)
            }
            break;
        case b.DOWN:case b.LEFT:
            b.stopEvent();
            if(b.ctrlKey){
            this.setValue(this.minValue,undefined,true)
            }else{
            this.setValue(this.value-this.keyIncrement,undefined,true)
            }
            break;
        default:
            b.preventDefault()
            }
        },
doSnap:function(b){
    if(!(this.increment&&b)){
        return b
        }
        var d=b,c=this.increment,a=b%c;
    if(a!=0){
        d-=a;
        if(a*2>=c){
            d+=c
            }else{
            if(a*2<-c){
                d-=c
                }
            }
    }
return d.constrain(this.minValue,this.maxValue)
},
afterRender:function(){
    Ext.slider.MultiSlider.superclass.afterRender.apply(this,arguments);
    for(var c=0;c<this.thumbs.length;c++){
        var b=this.thumbs[c];
        if(b.value!==undefined){
            var a=this.normalizeValue(b.value);
            if(a!==b.value){
                this.setValue(c,a,false)
                }else{
                this.moveThumb(c,this.translateValue(a),false)
                }
            }
    }
},
getRatio:function(){
    var a=this.innerEl.getWidth(),b=this.maxValue-this.minValue;
    return b==0?a:(a/b)
    },
normalizeValue:function(a){
    a=this.doSnap(a);
    a=Ext.util.Format.round(a,this.decimalPrecision);
    a=a.constrain(this.minValue,this.maxValue);
    return a
    },
setMinValue:function(c){
    this.minValue=c;
    this.syncThumb();
    for(var b=0,a=this.thumbs.length;b<a;b++){
        if(this.thumbs[b].value<c){
            this.thumbs[b].value=c
            }
        }
    },
setMaxValue:function(b){
    this.maxValue=b;
    this.syncThumb();
    for(var a=0;a<this.thumbs.length;a++){
        if(this.thumbs[a].value>b){
            this.thumbs[a].value=b
            }
        }
    },
setValue:function(d,c,b,g){
    var a=this.thumbs[d],e=a.el;
    c=this.normalizeValue(c);
    if(c!==a.value&&this.fireEvent("beforechange",this,c,a.value)!==false){
        a.value=c;
        this.moveThumb(d,this.translateValue(c),b!==false);
        this.fireEvent("change",this,c,a);
        if(g){
            this.fireEvent("changecomplete",this,c,a)
            }
        }
},
translateValue:function(a){
    var b=this.getRatio();
    return(a*b)-(this.minValue*b)-this.halfThumb
    },
reverseValue:function(b){
    var a=this.getRatio();
    return(b+(this.minValue*a))/a
    },
moveThumb:function(d,c,b){
    var a=this.thumbs[d].el;
    if(!b||this.animate===false){
        a.setLeft(c)
        }else{
        a.shift({
            left:c,
            stopFx:true,
            duration:0.35
        })
        }
    },
focus:function(){
    this.focusEl.focus(10)
    },
onResize:function(c,e){
    var b=this.thumbs,a=b.length,d=0;
    for(;d<a;++d){
        b[d].el.stopFx()
        }
        this.innerEl.setWidth(c-(this.el.getPadding("l")+this.endEl.getPadding("r")));
    this.syncThumb();
    Ext.slider.MultiSlider.superclass.onResize.apply(this,arguments)
    },
onDisable:function(){
    Ext.slider.MultiSlider.superclass.onDisable.call(this);
    for(var b=0;b<this.thumbs.length;b++){
        var a=this.thumbs[b],c=a.el;
        a.disable();
        if(Ext.isIE){
            var d=c.getXY();
            c.hide();
            this.innerEl.addClass(this.disabledClass).dom.disabled=true;
            if(!this.thumbHolder){
                this.thumbHolder=this.endEl.createChild({
                    cls:"x-slider-thumb "+this.disabledClass
                    })
                }
                this.thumbHolder.show().setXY(d)
            }
        }
    },
onEnable:function(){
    Ext.slider.MultiSlider.superclass.onEnable.call(this);
    for(var b=0;b<this.thumbs.length;b++){
        var a=this.thumbs[b],c=a.el;
        a.enable();
        if(Ext.isIE){
            this.innerEl.removeClass(this.disabledClass).dom.disabled=false;
            if(this.thumbHolder){
                this.thumbHolder.hide()
                }
                c.show();
            this.syncThumb()
            }
        }
    },
syncThumb:function(){
    if(this.rendered){
        for(var a=0;a<this.thumbs.length;a++){
            this.moveThumb(a,this.translateValue(this.thumbs[a].value))
            }
        }
    },
getValue:function(a){
    return this.thumbs[a].value
    },
getValues:function(){
    var a=[];
    for(var b=0;b<this.thumbs.length;b++){
        a.push(this.thumbs[b].value)
        }
        return a
    },
beforeDestroy:function(){
    Ext.destroyMembers(this,"endEl","innerEl","thumb","halfThumb","focusEl","tracker","thumbHolder");
    Ext.slider.MultiSlider.superclass.beforeDestroy.call(this)
    }
});
Ext.reg("multislider",Ext.slider.MultiSlider);
Ext.slider.SingleSlider=Ext.extend(Ext.slider.MultiSlider,{
    constructor:function(a){
        a=a||{};

        Ext.applyIf(a,{
            values:[a.value||0]
            });
        Ext.slider.SingleSlider.superclass.constructor.call(this,a)
        },
    getValue:function(){
        return Ext.slider.SingleSlider.superclass.getValue.call(this,0)
        },
    setValue:function(d,b){
        var c=Ext.toArray(arguments),a=c.length;
        if(a==1||(a<=3&&typeof arguments[1]!="number")){
            c.unshift(0)
            }
            return Ext.slider.SingleSlider.superclass.setValue.apply(this,c)
        },
    syncThumb:function(){
        return Ext.slider.SingleSlider.superclass.syncThumb.apply(this,[0].concat(arguments))
        },
    getNearest:function(){
        return this.thumbs[0]
        }
    });
Ext.Slider=Ext.slider.SingleSlider;
Ext.reg("slider",Ext.slider.SingleSlider);
Ext.slider.Vertical={
    onResize:function(a,b){
        this.innerEl.setHeight(b-(this.el.getPadding("t")+this.endEl.getPadding("b")));
        this.syncThumb()
        },
    getRatio:function(){
        var b=this.innerEl.getHeight(),a=this.maxValue-this.minValue;
        return b/a
        },
    moveThumb:function(d,c,b){
        var a=this.thumbs[d],e=a.el;
        if(!b||this.animate===false){
            e.setBottom(c)
            }else{
            e.shift({
                bottom:c,
                stopFx:true,
                duration:0.35
            })
            }
        },
onClickChange:function(c){
    if(c.left>this.clickRange[0]&&c.left<this.clickRange[1]){
        var a=this.getNearest(c,"top"),b=a.index,d=this.minValue+this.reverseValue(this.innerEl.getHeight()-c.top);
        this.setValue(b,Ext.util.Format.round(d,this.decimalPrecision),undefined,true)
        }
    }
};

Ext.slider.Thumb.Vertical={
    getNewValue:function(){
        var b=this.slider,c=b.innerEl,d=c.translatePoints(this.tracker.getXY()),a=c.getHeight()-d.top;
        return b.minValue+Ext.util.Format.round(a/b.getRatio(),b.decimalPrecision)
        }
    };

Ext.ProgressBar=Ext.extend(Ext.BoxComponent,{
    baseCls:"x-progress",
    animate:false,
    waitTimer:null,
    initComponent:function(){
        Ext.ProgressBar.superclass.initComponent.call(this);
        this.addEvents("update")
        },
    onRender:function(d,a){
        var c=new Ext.Template('<div class="{cls}-wrap">','<div class="{cls}-inner">','<div class="{cls}-bar">','<div class="{cls}-text">',"<div>&#160;</div>","</div>","</div>",'<div class="{cls}-text {cls}-text-back">',"<div>&#160;</div>","</div>","</div>","</div>");
        this.el=a?c.insertBefore(a,{
            cls:this.baseCls
            },true):c.append(d,{
            cls:this.baseCls
            },true);
        if(this.id){
            this.el.dom.id=this.id
            }
            var b=this.el.dom.firstChild;
        this.progressBar=Ext.get(b.firstChild);
        if(this.textEl){
            this.textEl=Ext.get(this.textEl);
            delete this.textTopEl
            }else{
            this.textTopEl=Ext.get(this.progressBar.dom.firstChild);
            var e=Ext.get(b.childNodes[1]);
            this.textTopEl.setStyle("z-index",99).addClass("x-hidden");
            this.textEl=new Ext.CompositeElement([this.textTopEl.dom.firstChild,e.dom.firstChild]);
            this.textEl.setWidth(b.offsetWidth)
            }
            this.progressBar.setHeight(b.offsetHeight)
        },
    afterRender:function(){
        Ext.ProgressBar.superclass.afterRender.call(this);
        if(this.value){
            this.updateProgress(this.value,this.text)
            }else{
            this.updateText(this.text)
            }
        },
updateProgress:function(c,d,b){
    this.value=c||0;
    if(d){
        this.updateText(d)
        }
        if(this.rendered&&!this.isDestroyed){
        var a=Math.floor(c*this.el.dom.firstChild.offsetWidth);
        this.progressBar.setWidth(a,b===true||(b!==false&&this.animate));
        if(this.textTopEl){
            this.textTopEl.removeClass("x-hidden").setWidth(a)
            }
        }
    this.fireEvent("update",this,c,d);
    return this
    },
wait:function(b){
    if(!this.waitTimer){
        var a=this;
        b=b||{};

        this.updateText(b.text);
        this.waitTimer=Ext.TaskMgr.start({
            run:function(c){
                var d=b.increment||10;
                c-=1;
                this.updateProgress(((((c+d)%d)+1)*(100/d))*0.01,null,b.animate)
                },
            interval:b.interval||1000,
            duration:b.duration,
            onStop:function(){
                if(b.fn){
                    b.fn.apply(b.scope||this)
                    }
                    this.reset()
                },
            scope:a
        })
        }
        return this
    },
isWaiting:function(){
    return this.waitTimer!==null
    },
updateText:function(a){
    this.text=a||"&#160;";
    if(this.rendered){
        this.textEl.update(this.text)
        }
        return this
    },
syncProgressBar:function(){
    if(this.value){
        this.updateProgress(this.value,this.text)
        }
        return this
    },
setSize:function(a,c){
    Ext.ProgressBar.superclass.setSize.call(this,a,c);
    if(this.textTopEl){
        var b=this.el.dom.firstChild;
        this.textEl.setSize(b.offsetWidth,b.offsetHeight)
        }
        this.syncProgressBar();
    return this
    },
reset:function(a){
    this.updateProgress(0);
    if(this.textTopEl){
        this.textTopEl.addClass("x-hidden")
        }
        this.clearTimer();
    if(a===true){
        this.hide()
        }
        return this
    },
clearTimer:function(){
    if(this.waitTimer){
        this.waitTimer.onStop=null;
        Ext.TaskMgr.stop(this.waitTimer);
        this.waitTimer=null
        }
    },
onDestroy:function(){
    this.clearTimer();
    if(this.rendered){
        if(this.textEl.isComposite){
            this.textEl.clear()
            }
            Ext.destroyMembers(this,"textEl","progressBar","textTopEl")
        }
        Ext.ProgressBar.superclass.onDestroy.call(this)
    }
});
Ext.reg("progress",Ext.ProgressBar);
(function(){
    var a=Ext.EventManager;
    var b=Ext.lib.Dom;
    Ext.dd.DragDrop=function(e,c,d){
        if(e){
            this.init(e,c,d)
            }
        };

Ext.dd.DragDrop.prototype={
    id:null,
    config:null,
    dragElId:null,
    handleElId:null,
    invalidHandleTypes:null,
    invalidHandleIds:null,
    invalidHandleClasses:null,
    startPageX:0,
    startPageY:0,
    groups:null,
    locked:false,
    lock:function(){
        this.locked=true
        },
    moveOnly:false,
    unlock:function(){
        this.locked=false
        },
    isTarget:true,
    padding:null,
    _domRef:null,
    __ygDragDrop:true,
    constrainX:false,
    constrainY:false,
    minX:0,
    maxX:0,
    minY:0,
    maxY:0,
    maintainOffset:false,
    xTicks:null,
    yTicks:null,
    primaryButtonOnly:true,
    available:false,
    hasOuterHandles:false,
    b4StartDrag:function(c,d){},
    startDrag:function(c,d){},
    b4Drag:function(c){},
    onDrag:function(c){},
    onDragEnter:function(c,d){},
    b4DragOver:function(c){},
    onDragOver:function(c,d){},
    b4DragOut:function(c){},
    onDragOut:function(c,d){},
    b4DragDrop:function(c){},
    onDragDrop:function(c,d){},
    onInvalidDrop:function(c){},
    b4EndDrag:function(c){},
    endDrag:function(c){},
    b4MouseDown:function(c){},
    onMouseDown:function(c){},
    onMouseUp:function(c){},
    onAvailable:function(){},
    defaultPadding:{
        left:0,
        right:0,
        top:0,
        bottom:0
    },
    constrainTo:function(j,h,o){
        if(Ext.isNumber(h)){
            h={
                left:h,
                right:h,
                top:h,
                bottom:h
            }
        }
        h=h||this.defaultPadding;
    var l=Ext.get(this.getEl()).getBox(),d=Ext.get(j),n=d.getScroll(),k,e=d.dom;
    if(e==document.body){
        k={
            x:n.left,
            y:n.top,
            width:Ext.lib.Dom.getViewWidth(),
            height:Ext.lib.Dom.getViewHeight()
            }
        }else{
    var m=d.getXY();
    k={
        x:m[0],
        y:m[1],
        width:e.clientWidth,
        height:e.clientHeight
        }
    }
var i=l.y-k.y,g=l.x-k.x;
this.resetConstraints();
    this.setXConstraint(g-(h.left||0),k.width-g-l.width-(h.right||0),this.xTickSize);
    this.setYConstraint(i-(h.top||0),k.height-i-l.height-(h.bottom||0),this.yTickSize)
    },
getEl:function(){
    if(!this._domRef){
        this._domRef=Ext.getDom(this.id)
        }
        return this._domRef
    },
getDragEl:function(){
    return Ext.getDom(this.dragElId)
    },
init:function(e,c,d){
    this.initTarget(e,c,d);
    a.on(this.id,"mousedown",this.handleMouseDown,this)
    },
initTarget:function(e,c,d){
    this.config=d||{};

    this.DDM=Ext.dd.DDM;
    this.groups={};

    if(typeof e!=="string"){
        e=Ext.id(e)
        }
        this.id=e;
    this.addToGroup((c)?c:"default");
    this.handleElId=e;
    this.setDragElId(e);
    this.invalidHandleTypes={
        A:"A"
    };

    this.invalidHandleIds={};

    this.invalidHandleClasses=[];
    this.applyConfig();
    this.handleOnAvailable()
    },
applyConfig:function(){
    this.padding=this.config.padding||[0,0,0,0];
    this.isTarget=(this.config.isTarget!==false);
    this.maintainOffset=(this.config.maintainOffset);
    this.primaryButtonOnly=(this.config.primaryButtonOnly!==false)
    },
handleOnAvailable:function(){
    this.available=true;
    this.resetConstraints();
    this.onAvailable()
    },
setPadding:function(e,c,g,d){
    if(!c&&0!==c){
        this.padding=[e,e,e,e]
        }else{
        if(!g&&0!==g){
            this.padding=[e,c,e,c]
            }else{
            this.padding=[e,c,g,d]
            }
        }
},
setInitPosition:function(g,e){
    var h=this.getEl();
    if(!this.DDM.verifyEl(h)){
        return
    }
    var d=g||0;
    var c=e||0;
    var i=b.getXY(h);
    this.initPageX=i[0]-d;
    this.initPageY=i[1]-c;
    this.lastPageX=i[0];
    this.lastPageY=i[1];
    this.setStartPosition(i)
    },
setStartPosition:function(d){
    var c=d||b.getXY(this.getEl());
    this.deltaSetXY=null;
    this.startPageX=c[0];
    this.startPageY=c[1]
    },
addToGroup:function(c){
    this.groups[c]=true;
    this.DDM.regDragDrop(this,c)
    },
removeFromGroup:function(c){
    if(this.groups[c]){
        delete this.groups[c]
    }
    this.DDM.removeDDFromGroup(this,c)
    },
setDragElId:function(c){
    this.dragElId=c
    },
setHandleElId:function(c){
    if(typeof c!=="string"){
        c=Ext.id(c)
        }
        this.handleElId=c;
    this.DDM.regHandle(this.id,c)
    },
setOuterHandleElId:function(c){
    if(typeof c!=="string"){
        c=Ext.id(c)
        }
        a.on(c,"mousedown",this.handleMouseDown,this);
    this.setHandleElId(c);
    this.hasOuterHandles=true
    },
unreg:function(){
    a.un(this.id,"mousedown",this.handleMouseDown);
    this._domRef=null;
    this.DDM._remove(this)
    },
destroy:function(){
    this.unreg()
    },
isLocked:function(){
    return(this.DDM.isLocked()||this.locked)
    },
handleMouseDown:function(g,d){
    if(this.primaryButtonOnly&&g.button!=0){
        return
    }
    if(this.isLocked()){
        return
    }
    this.DDM.refreshCache(this.groups);
    var c=new Ext.lib.Point(Ext.lib.Event.getPageX(g),Ext.lib.Event.getPageY(g));
    if(!this.hasOuterHandles&&!this.DDM.isOverTarget(c,this)){}else{
        if(this.clickValidator(g)){
            this.setStartPosition();
            this.b4MouseDown(g);
            this.onMouseDown(g);
            this.DDM.handleMouseDown(g,this);
            this.DDM.stopEvent(g)
            }else{}
}
},
clickValidator:function(d){
    var c=d.getTarget();
    return(this.isValidHandleChild(c)&&(this.id==this.handleElId||this.DDM.handleWasClicked(c,this.id)))
    },
addInvalidHandleType:function(c){
    var d=c.toUpperCase();
    this.invalidHandleTypes[d]=d
    },
addInvalidHandleId:function(c){
    if(typeof c!=="string"){
        c=Ext.id(c)
        }
        this.invalidHandleIds[c]=c
    },
addInvalidHandleClass:function(c){
    this.invalidHandleClasses.push(c)
    },
removeInvalidHandleType:function(c){
    var d=c.toUpperCase();
    delete this.invalidHandleTypes[d]
},
removeInvalidHandleId:function(c){
    if(typeof c!=="string"){
        c=Ext.id(c)
        }
        delete this.invalidHandleIds[c]
},
removeInvalidHandleClass:function(d){
    for(var e=0,c=this.invalidHandleClasses.length;e<c;++e){
        if(this.invalidHandleClasses[e]==d){
            delete this.invalidHandleClasses[e]
        }
    }
    },
isValidHandleChild:function(h){
    var g=true;
    var k;
    try{
        k=h.nodeName.toUpperCase()
        }catch(j){
        k=h.nodeName
        }
        g=g&&!this.invalidHandleTypes[k];
    g=g&&!this.invalidHandleIds[h.id];
    for(var d=0,c=this.invalidHandleClasses.length;g&&d<c;++d){
        g=!Ext.fly(h).hasClass(this.invalidHandleClasses[d])
        }
        return g
    },
setXTicks:function(g,c){
    this.xTicks=[];
    this.xTickSize=c;
    var e={};

    for(var d=this.initPageX;d>=this.minX;d=d-c){
        if(!e[d]){
            this.xTicks[this.xTicks.length]=d;
            e[d]=true
            }
        }
    for(d=this.initPageX;d<=this.maxX;d=d+c){
    if(!e[d]){
        this.xTicks[this.xTicks.length]=d;
        e[d]=true
        }
    }
this.xTicks.sort(this.DDM.numericSort)
},
setYTicks:function(g,c){
    this.yTicks=[];
    this.yTickSize=c;
    var e={};

    for(var d=this.initPageY;d>=this.minY;d=d-c){
        if(!e[d]){
            this.yTicks[this.yTicks.length]=d;
            e[d]=true
            }
        }
    for(d=this.initPageY;d<=this.maxY;d=d+c){
    if(!e[d]){
        this.yTicks[this.yTicks.length]=d;
        e[d]=true
        }
    }
this.yTicks.sort(this.DDM.numericSort)
},
setXConstraint:function(e,d,c){
    this.leftConstraint=e;
    this.rightConstraint=d;
    this.minX=this.initPageX-e;
    this.maxX=this.initPageX+d;
    if(c){
        this.setXTicks(this.initPageX,c)
        }
        this.constrainX=true
    },
clearConstraints:function(){
    this.constrainX=false;
    this.constrainY=false;
    this.clearTicks()
    },
clearTicks:function(){
    this.xTicks=null;
    this.yTicks=null;
    this.xTickSize=0;
    this.yTickSize=0
    },
setYConstraint:function(c,e,d){
    this.topConstraint=c;
    this.bottomConstraint=e;
    this.minY=this.initPageY-c;
    this.maxY=this.initPageY+e;
    if(d){
        this.setYTicks(this.initPageY,d)
        }
        this.constrainY=true
    },
resetConstraints:function(){
    if(this.initPageX||this.initPageX===0){
        var d=(this.maintainOffset)?this.lastPageX-this.initPageX:0;
        var c=(this.maintainOffset)?this.lastPageY-this.initPageY:0;
        this.setInitPosition(d,c)
        }else{
        this.setInitPosition()
        }
        if(this.constrainX){
        this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize)
        }
        if(this.constrainY){
        this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize)
        }
    },
getTick:function(k,g){
    if(!g){
        return k
        }else{
        if(g[0]>=k){
            return g[0]
            }else{
            for(var d=0,c=g.length;d<c;++d){
                var e=d+1;
                if(g[e]&&g[e]>=k){
                    var j=k-g[d];
                    var h=g[e]-k;
                    return(h>j)?g[d]:g[e]
                    }
                }
            return g[g.length-1]
        }
    }
},
toString:function(){
    return("DragDrop "+this.id)
    }
}
})();
/*
 * The drag and drop utility provides a framework for building drag and drop
 * applications.  In addition to enabling drag and drop for specific elements,
 * the drag and drop elements are tracked by the manager class, and the
 * interactions between the various elements are tracked during the drag and
 * the implementing code is notified about these important moments.
 */
if(!Ext.dd.DragDropMgr){
    Ext.dd.DragDropMgr=function(){
        var a=Ext.EventManager;
        return{
            ids:{},
            handleIds:{},
            dragCurrent:null,
            dragOvers:{},
            deltaX:0,
            deltaY:0,
            preventDefault:true,
            stopPropagation:true,
            initialized:false,
            locked:false,
            init:function(){
                this.initialized=true
                },
            POINT:0,
            INTERSECT:1,
            mode:0,
            _execOnAll:function(d,c){
                for(var e in this.ids){
                    for(var b in this.ids[e]){
                        var g=this.ids[e][b];
                        if(!this.isTypeOfDD(g)){
                            continue
                        }
                        g[d].apply(g,c)
                        }
                    }
                    },
    _onLoad:function(){
        this.init();
        a.on(document,"mouseup",this.handleMouseUp,this,true);
        a.on(document,"mousemove",this.handleMouseMove,this,true);
        a.on(window,"unload",this._onUnload,this,true);
        a.on(window,"resize",this._onResize,this,true)
        },
    _onResize:function(b){
        this._execOnAll("resetConstraints",[])
        },
    lock:function(){
        this.locked=true
        },
    unlock:function(){
        this.locked=false
        },
    isLocked:function(){
        return this.locked
        },
    locationCache:{},
    useCache:true,
    clickPixelThresh:3,
    clickTimeThresh:350,
    dragThreshMet:false,
    clickTimeout:null,
    startX:0,
    startY:0,
    regDragDrop:function(c,b){
        if(!this.initialized){
            this.init()
            }
            if(!this.ids[b]){
            this.ids[b]={}
        }
        this.ids[b][c.id]=c
    },
    removeDDFromGroup:function(d,b){
        if(!this.ids[b]){
            this.ids[b]={}
        }
        var c=this.ids[b];
    if(c&&c[d.id]){
        delete c[d.id]
    }
},
_remove:function(c){
    for(var b in c.groups){
        if(b&&this.ids[b]&&this.ids[b][c.id]){
            delete this.ids[b][c.id]
        }
    }
    delete this.handleIds[c.id]
},
regHandle:function(c,b){
    if(!this.handleIds[c]){
        this.handleIds[c]={}
    }
    this.handleIds[c][b]=b
},
isDragDrop:function(b){
    return(this.getDDById(b))?true:false
    },
getRelated:function(h,c){
    var g=[];
    for(var e in h.groups){
        for(var d in this.ids[e]){
            var b=this.ids[e][d];
            if(!this.isTypeOfDD(b)){
                continue
            }
            if(!c||b.isTarget){
                g[g.length]=b
                }
            }
        }
        return g
},
isLegalTarget:function(g,e){
    var c=this.getRelated(g,true);
    for(var d=0,b=c.length;d<b;++d){
        if(c[d].id==e.id){
            return true
            }
        }
    return false
},
isTypeOfDD:function(b){
    return(b&&b.__ygDragDrop)
    },
isHandle:function(c,b){
    return(this.handleIds[c]&&this.handleIds[c][b])
    },
getDDById:function(c){
    for(var b in this.ids){
        if(this.ids[b][c]){
            return this.ids[b][c]
            }
        }
    return null
},
handleMouseDown:function(d,c){
    if(Ext.QuickTips){
        Ext.QuickTips.disable()
        }
        if(this.dragCurrent){
        this.handleMouseUp(d)
        }
        this.currentTarget=d.getTarget();
    this.dragCurrent=c;
    var b=c.getEl();
    this.startX=d.getPageX();
    this.startY=d.getPageY();
    this.deltaX=this.startX-b.offsetLeft;
    this.deltaY=this.startY-b.offsetTop;
    this.dragThreshMet=false;
    this.clickTimeout=setTimeout(function(){
        var e=Ext.dd.DDM;
        e.startDrag(e.startX,e.startY)
        },this.clickTimeThresh)
    },
startDrag:function(b,c){
    clearTimeout(this.clickTimeout);
    if(this.dragCurrent){
        this.dragCurrent.b4StartDrag(b,c);
        this.dragCurrent.startDrag(b,c)
        }
        this.dragThreshMet=true
    },
handleMouseUp:function(b){
    if(Ext.QuickTips){
        Ext.QuickTips.enable()
        }
        if(!this.dragCurrent){
        return
    }
    clearTimeout(this.clickTimeout);
    if(this.dragThreshMet){
        this.fireEvents(b,true)
        }else{}
    this.stopDrag(b);
    this.stopEvent(b)
    },
stopEvent:function(b){
    if(this.stopPropagation){
        b.stopPropagation()
        }
        if(this.preventDefault){
        b.preventDefault()
        }
    },
stopDrag:function(b){
    if(this.dragCurrent){
        if(this.dragThreshMet){
            this.dragCurrent.b4EndDrag(b);
            this.dragCurrent.endDrag(b)
            }
            this.dragCurrent.onMouseUp(b)
        }
        this.dragCurrent=null;
    this.dragOvers={}
},
handleMouseMove:function(d){
    if(!this.dragCurrent){
        return true
        }
        if(Ext.isIE&&(d.button!==0&&d.button!==1&&d.button!==2)){
        this.stopEvent(d);
        return this.handleMouseUp(d)
        }
        if(!this.dragThreshMet){
        var c=Math.abs(this.startX-d.getPageX());
        var b=Math.abs(this.startY-d.getPageY());
        if(c>this.clickPixelThresh||b>this.clickPixelThresh){
            this.startDrag(this.startX,this.startY)
            }
        }
    if(this.dragThreshMet){
    this.dragCurrent.b4Drag(d);
    this.dragCurrent.onDrag(d);
    if(!this.dragCurrent.moveOnly){
        this.fireEvents(d,false)
        }
    }
this.stopEvent(d);
return true
},
fireEvents:function(n,o){
    var q=this.dragCurrent;
    if(!q||q.isLocked()){
        return
    }
    var r=n.getPoint();
    var b=[];
    var g=[];
    var l=[];
    var j=[];
    var d=[];
    for(var h in this.dragOvers){
        var c=this.dragOvers[h];
        if(!this.isTypeOfDD(c)){
            continue
        }
        if(!this.isOverTarget(r,c,this.mode)){
            g.push(c)
            }
            b[h]=true;
        delete this.dragOvers[h]
    }
    for(var p in q.groups){
        if("string"!=typeof p){
            continue
        }
        for(h in this.ids[p]){
            var k=this.ids[p][h];
            if(!this.isTypeOfDD(k)){
                continue
            }
            if(k.isTarget&&!k.isLocked()&&((k!=q)||(q.ignoreSelf===false))){
                if(this.isOverTarget(r,k,this.mode)){
                    if(o){
                        j.push(k)
                        }else{
                        if(!b[k.id]){
                            d.push(k)
                            }else{
                            l.push(k)
                            }
                            this.dragOvers[k.id]=k
                        }
                    }
            }
        }
    }
    if(this.mode){
    if(g.length){
        q.b4DragOut(n,g);
        q.onDragOut(n,g)
        }
        if(d.length){
        q.onDragEnter(n,d)
        }
        if(l.length){
        q.b4DragOver(n,l);
        q.onDragOver(n,l)
        }
        if(j.length){
        q.b4DragDrop(n,j);
        q.onDragDrop(n,j)
        }
    }else{
    var m=0;
    for(h=0,m=g.length;h<m;++h){
        q.b4DragOut(n,g[h].id);
        q.onDragOut(n,g[h].id)
        }
        for(h=0,m=d.length;h<m;++h){
        q.onDragEnter(n,d[h].id)
        }
        for(h=0,m=l.length;h<m;++h){
        q.b4DragOver(n,l[h].id);
        q.onDragOver(n,l[h].id)
        }
        for(h=0,m=j.length;h<m;++h){
        q.b4DragDrop(n,j[h].id);
        q.onDragDrop(n,j[h].id)
        }
    }
    if(o&&!j.length){
    q.onInvalidDrop(n)
    }
},
getBestMatch:function(d){
    var g=null;
    var c=d.length;
    if(c==1){
        g=d[0]
        }else{
        for(var e=0;e<c;++e){
            var b=d[e];
            if(b.cursorIsOver){
                g=b;
                break
            }else{
                if(!g||g.overlap.getArea()<b.overlap.getArea()){
                    g=b
                    }
                }
        }
    }
return g
},
refreshCache:function(c){
    for(var b in c){
        if("string"!=typeof b){
            continue
        }
        for(var d in this.ids[b]){
            var e=this.ids[b][d];
            if(this.isTypeOfDD(e)){
                var g=this.getLocation(e);
                if(g){
                    this.locationCache[e.id]=g
                    }else{
                    delete this.locationCache[e.id]
                }
            }
        }
        }
    },
verifyEl:function(c){
    if(c){
        var b;
        if(Ext.isIE){
            try{
                b=c.offsetParent
                }catch(d){}
        }else{
        b=c.offsetParent
        }
        if(b){
        return true
        }
    }
return false
},
getLocation:function(j){
    if(!this.isTypeOfDD(j)){
        return null
        }
        var h=j.getEl(),n,g,d,p,o,q,c,m,i;
    try{
        n=Ext.lib.Dom.getXY(h)
        }catch(k){}
    if(!n){
        return null
        }
        g=n[0];
    d=g+h.offsetWidth;
    p=n[1];
    o=p+h.offsetHeight;
    q=p-j.padding[0];
    c=d+j.padding[1];
    m=o+j.padding[2];
    i=g-j.padding[3];
    return new Ext.lib.Region(q,c,m,i)
    },
isOverTarget:function(k,b,d){
    var g=this.locationCache[b.id];
    if(!g||!this.useCache){
        g=this.getLocation(b);
        this.locationCache[b.id]=g
        }
        if(!g){
        return false
        }
        b.cursorIsOver=g.contains(k);
    var j=this.dragCurrent;
    if(!j||!j.getTargetCoord||(!d&&!j.constrainX&&!j.constrainY)){
        return b.cursorIsOver
        }
        b.overlap=null;
    var h=j.getTargetCoord(k.x,k.y);
    var c=j.getDragEl();
    var e=new Ext.lib.Region(h.y,h.x+c.offsetWidth,h.y+c.offsetHeight,h.x);
    var i=e.intersect(g);
    if(i){
        b.overlap=i;
        return(d)?true:b.cursorIsOver
        }else{
        return false
        }
    },
_onUnload:function(c,b){
    Ext.dd.DragDropMgr.unregAll()
    },
unregAll:function(){
    if(this.dragCurrent){
        this.stopDrag();
        this.dragCurrent=null
        }
        this._execOnAll("unreg",[]);
    for(var b in this.elementCache){
        delete this.elementCache[b]
    }
    this.elementCache={};

    this.ids={}
},
elementCache:{},
getElWrapper:function(c){
    var b=this.elementCache[c];
    if(!b||!b.el){
        b=this.elementCache[c]=new this.ElementWrapper(Ext.getDom(c))
        }
        return b
    },
getElement:function(b){
    return Ext.getDom(b)
    },
getCss:function(c){
    var b=Ext.getDom(c);
    return(b)?b.style:null
    },
ElementWrapper:function(b){
    this.el=b||null;
    this.id=this.el&&b.id;
    this.css=this.el&&b.style
    },
getPosX:function(b){
    return Ext.lib.Dom.getX(b)
    },
getPosY:function(b){
    return Ext.lib.Dom.getY(b)
    },
swapNode:function(d,b){
    if(d.swapNode){
        d.swapNode(b)
        }else{
        var e=b.parentNode;
        var c=b.nextSibling;
        if(c==d){
            e.insertBefore(d,b)
            }else{
            if(b==d.nextSibling){
                e.insertBefore(b,d)
                }else{
                d.parentNode.replaceChild(b,d);
                e.insertBefore(d,c)
                }
            }
    }
},
getScroll:function(){
    var d,b,e=document.documentElement,c=document.body;
    if(e&&(e.scrollTop||e.scrollLeft)){
        d=e.scrollTop;
        b=e.scrollLeft
        }else{
        if(c){
            d=c.scrollTop;
            b=c.scrollLeft
            }else{}
}
return{
    top:d,
    left:b
}
},
getStyle:function(c,b){
    return Ext.fly(c).getStyle(b)
    },
getScrollTop:function(){
    return this.getScroll().top
    },
getScrollLeft:function(){
    return this.getScroll().left
    },
moveToEl:function(b,d){
    var c=Ext.lib.Dom.getXY(d);
    Ext.lib.Dom.setXY(b,c)
    },
numericSort:function(d,c){
    return(d-c)
    },
_timeoutCount:0,
_addListeners:function(){
    var b=Ext.dd.DDM;
    if(Ext.lib.Event&&document){
        b._onLoad()
        }else{
        if(b._timeoutCount>2000){}else{
            setTimeout(b._addListeners,10);
            if(document&&document.body){
                b._timeoutCount+=1
                }
            }
    }
},
handleWasClicked:function(b,d){
    if(this.isHandle(d,b.id)){
        return true
        }else{
        var c=b.parentNode;
        while(c){
            if(this.isHandle(d,c.id)){
                return true
                }else{
                c=c.parentNode
                }
            }
    }
return false
}
}
}();
Ext.dd.DDM=Ext.dd.DragDropMgr;
Ext.dd.DDM._addListeners()
    }
    Ext.dd.DD=function(c,a,b){
    if(c){
        this.init(c,a,b)
        }
    };

Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{
    scroll:true,
    autoOffset:function(c,b){
        var a=c-this.startPageX;
        var d=b-this.startPageY;
        this.setDelta(a,d)
        },
    setDelta:function(b,a){
        this.deltaX=b;
        this.deltaY=a
        },
    setDragElPos:function(c,b){
        var a=this.getDragEl();
        this.alignElWithMouse(a,c,b)
        },
    alignElWithMouse:function(c,h,g){
        var e=this.getTargetCoord(h,g);
        var b=c.dom?c:Ext.fly(c,"_dd");
        if(!this.deltaSetXY){
            var i=[e.x,e.y];
            b.setXY(i);
            var d=b.getLeft(true);
            var a=b.getTop(true);
            this.deltaSetXY=[d-e.x,a-e.y]
            }else{
            b.setLeftTop(e.x+this.deltaSetXY[0],e.y+this.deltaSetXY[1])
            }
            this.cachePosition(e.x,e.y);
        this.autoScroll(e.x,e.y,c.offsetHeight,c.offsetWidth);
        return e
        },
    cachePosition:function(b,a){
        if(b){
            this.lastPageX=b;
            this.lastPageY=a
            }else{
            var c=Ext.lib.Dom.getXY(this.getEl());
            this.lastPageX=c[0];
            this.lastPageY=c[1]
            }
        },
autoScroll:function(l,k,e,m){
    if(this.scroll){
        var n=Ext.lib.Dom.getViewHeight();
        var b=Ext.lib.Dom.getViewWidth();
        var p=this.DDM.getScrollTop();
        var d=this.DDM.getScrollLeft();
        var j=e+k;
        var o=m+l;
        var i=(n+p-k-this.deltaY);
        var g=(b+d-l-this.deltaX);
        var c=40;
        var a=(document.all)?80:30;
        if(j>n&&i<c){
            window.scrollTo(d,p+a)
            }
            if(k<p&&p>0&&k-p<c){
            window.scrollTo(d,p-a)
            }
            if(o>b&&g<c){
            window.scrollTo(d+a,p)
            }
            if(l<d&&d>0&&l-d<c){
            window.scrollTo(d-a,p)
            }
        }
},
getTargetCoord:function(c,b){
    var a=c-this.deltaX;
    var d=b-this.deltaY;
    if(this.constrainX){
        if(a<this.minX){
            a=this.minX
            }
            if(a>this.maxX){
            a=this.maxX
            }
        }
    if(this.constrainY){
    if(d<this.minY){
        d=this.minY
        }
        if(d>this.maxY){
        d=this.maxY
        }
    }
a=this.getTick(a,this.xTicks);
d=this.getTick(d,this.yTicks);
return{
    x:a,
    y:d
}
},
applyConfig:function(){
    Ext.dd.DD.superclass.applyConfig.call(this);
    this.scroll=(this.config.scroll!==false)
    },
b4MouseDown:function(a){
    this.autoOffset(a.getPageX(),a.getPageY())
    },
b4Drag:function(a){
    this.setDragElPos(a.getPageX(),a.getPageY())
    },
toString:function(){
    return("DD "+this.id)
    }
});
Ext.dd.DDProxy=function(c,a,b){
    if(c){
        this.init(c,a,b);
        this.initFrame()
        }
    };

Ext.dd.DDProxy.dragElId="ygddfdiv";
Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{
    resizeFrame:true,
    centerFrame:false,
    createFrame:function(){
        var b=this;
        var a=document.body;
        if(!a||!a.firstChild){
            setTimeout(function(){
                b.createFrame()
                },50);
            return
        }
        var d=this.getDragEl();
        if(!d){
            d=document.createElement("div");
            d.id=this.dragElId;
            var c=d.style;
            c.position="absolute";
            c.visibility="hidden";
            c.cursor="move";
            c.border="2px solid #aaa";
            c.zIndex=999;
            a.insertBefore(d,a.firstChild)
            }
        },
initFrame:function(){
    this.createFrame()
    },
applyConfig:function(){
    Ext.dd.DDProxy.superclass.applyConfig.call(this);
    this.resizeFrame=(this.config.resizeFrame!==false);
    this.centerFrame=(this.config.centerFrame);
    this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId)
    },
showFrame:function(e,d){
    var c=this.getEl();
    var a=this.getDragEl();
    var b=a.style;
    this._resizeProxy();
    if(this.centerFrame){
        this.setDelta(Math.round(parseInt(b.width,10)/2),Math.round(parseInt(b.height,10)/2))
        }
        this.setDragElPos(e,d);
    Ext.fly(a).show()
    },
_resizeProxy:function(){
    if(this.resizeFrame){
        var a=this.getEl();
        Ext.fly(this.getDragEl()).setSize(a.offsetWidth,a.offsetHeight)
        }
    },
b4MouseDown:function(b){
    var a=b.getPageX();
    var c=b.getPageY();
    this.autoOffset(a,c);
    this.setDragElPos(a,c)
    },
b4StartDrag:function(a,b){
    this.showFrame(a,b)
    },
b4EndDrag:function(a){
    Ext.fly(this.getDragEl()).hide()
    },
endDrag:function(c){
    var b=this.getEl();
    var a=this.getDragEl();
    a.style.visibility="";
    this.beforeMove();
    b.style.visibility="hidden";
    Ext.dd.DDM.moveToEl(b,a);
    a.style.visibility="hidden";
    b.style.visibility="";
    this.afterDrag()
    },
beforeMove:function(){},
    afterDrag:function(){},
    toString:function(){
    return("DDProxy "+this.id)
    }
});
Ext.dd.DDTarget=function(c,a,b){
    if(c){
        this.initTarget(c,a,b)
        }
    };

Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{
    getDragEl:Ext.emptyFn,
    isValidHandleChild:Ext.emptyFn,
    startDrag:Ext.emptyFn,
    endDrag:Ext.emptyFn,
    onDrag:Ext.emptyFn,
    onDragDrop:Ext.emptyFn,
    onDragEnter:Ext.emptyFn,
    onDragOut:Ext.emptyFn,
    onDragOver:Ext.emptyFn,
    onInvalidDrop:Ext.emptyFn,
    onMouseDown:Ext.emptyFn,
    onMouseUp:Ext.emptyFn,
    setXConstraint:Ext.emptyFn,
    setYConstraint:Ext.emptyFn,
    resetConstraints:Ext.emptyFn,
    clearConstraints:Ext.emptyFn,
    clearTicks:Ext.emptyFn,
    setInitPosition:Ext.emptyFn,
    setDragElId:Ext.emptyFn,
    setHandleElId:Ext.emptyFn,
    setOuterHandleElId:Ext.emptyFn,
    addInvalidHandleClass:Ext.emptyFn,
    addInvalidHandleId:Ext.emptyFn,
    addInvalidHandleType:Ext.emptyFn,
    removeInvalidHandleClass:Ext.emptyFn,
    removeInvalidHandleId:Ext.emptyFn,
    removeInvalidHandleType:Ext.emptyFn,
    toString:function(){
        return("DDTarget "+this.id)
        }
    });
Ext.dd.DragTracker=Ext.extend(Ext.util.Observable,{
    active:false,
    tolerance:5,
    autoStart:false,
    constructor:function(a){
        Ext.apply(this,a);
        this.addEvents("mousedown","mouseup","mousemove","dragstart","dragend","drag");
        this.dragRegion=new Ext.lib.Region(0,0,0,0);
        if(this.el){
            this.initEl(this.el)
            }
            Ext.dd.DragTracker.superclass.constructor.call(this,a)
        },
    initEl:function(a){
        this.el=Ext.get(a);
        a.on("mousedown",this.onMouseDown,this,this.delegate?{
            delegate:this.delegate
            }:undefined)
        },
    destroy:function(){
        this.el.un("mousedown",this.onMouseDown,this)
        },
    onMouseDown:function(c,b){
        if(this.fireEvent("mousedown",this,c)!==false&&this.onBeforeStart(c)!==false){
            this.startXY=this.lastXY=c.getXY();
            this.dragTarget=this.delegate?b:this.el.dom;
            if(this.preventDefault!==false){
                c.preventDefault()
                }
                var a=Ext.getDoc();
            a.on("mouseup",this.onMouseUp,this);
            a.on("mousemove",this.onMouseMove,this);
            a.on("selectstart",this.stopSelect,this);
            if(this.autoStart){
                this.timer=this.triggerStart.defer(this.autoStart===true?1000:this.autoStart,this)
                }
            }
    },
onMouseMove:function(d,c){
    if(this.active&&Ext.isIE&&!d.browserEvent.button){
        d.preventDefault();
        this.onMouseUp(d);
        return
    }
    d.preventDefault();
    var b=d.getXY(),a=this.startXY;
    this.lastXY=b;
    if(!this.active){
        if(Math.abs(a[0]-b[0])>this.tolerance||Math.abs(a[1]-b[1])>this.tolerance){
            this.triggerStart()
            }else{
            return
        }
    }
    this.fireEvent("mousemove",this,d);
    this.onDrag(d);
    this.fireEvent("drag",this,d)
    },
onMouseUp:function(c){
    var b=Ext.getDoc();
    b.un("mousemove",this.onMouseMove,this);
    b.un("mouseup",this.onMouseUp,this);
    b.un("selectstart",this.stopSelect,this);
    c.preventDefault();
    this.clearStart();
    var a=this.active;
    this.active=false;
    delete this.elRegion;
    this.fireEvent("mouseup",this,c);
    if(a){
        this.onEnd(c);
        this.fireEvent("dragend",this,c)
        }
    },
triggerStart:function(a){
    this.clearStart();
    this.active=true;
    this.onStart(this.startXY);
    this.fireEvent("dragstart",this,this.startXY)
    },
clearStart:function(){
    if(this.timer){
        clearTimeout(this.timer);
        delete this.timer
        }
    },
stopSelect:function(a){
    a.stopEvent();
    return false
    },
onBeforeStart:function(a){},
onStart:function(a){},
onDrag:function(a){},
onEnd:function(a){},
getDragTarget:function(){
    return this.dragTarget
    },
getDragCt:function(){
    return this.el
    },
getXY:function(a){
    return a?this.constrainModes[a].call(this,this.lastXY):this.lastXY
    },
getOffset:function(c){
    var b=this.getXY(c);
    var a=this.startXY;
    return[a[0]-b[0],a[1]-b[1]]
    },
constrainModes:{
    point:function(b){
        if(!this.elRegion){
            this.elRegion=this.getDragCt().getRegion()
            }
            var a=this.dragRegion;
        a.left=b[0];
        a.top=b[1];
        a.right=b[0];
        a.bottom=b[1];
        a.constrainTo(this.elRegion);
        return[a.left,a.top]
        }
    }
});
Ext.dd.ScrollManager=function(){
    var c=Ext.dd.DragDropMgr;
    var e={};

    var b=null;
    var i={};

    var h=function(l){
        b=null;
        a()
        };

    var j=function(){
        if(c.dragCurrent){
            c.refreshCache(c.dragCurrent.groups)
            }
        };

var d=function(){
    if(c.dragCurrent){
        var l=Ext.dd.ScrollManager;
        var m=i.el.ddScrollConfig?i.el.ddScrollConfig.increment:l.increment;
        if(!l.animate){
            if(i.el.scroll(i.dir,m)){
                j()
                }
            }else{
        i.el.scroll(i.dir,m,true,l.animDuration,j)
        }
    }
};

var a=function(){
    if(i.id){
        clearInterval(i.id)
        }
        i.id=0;
    i.el=null;
    i.dir=""
    };

var g=function(m,l){
    a();
    i.el=m;
    i.dir=l;
    var n=(m.ddScrollConfig&&m.ddScrollConfig.frequency)?m.ddScrollConfig.frequency:Ext.dd.ScrollManager.frequency;
    i.id=setInterval(d,n)
    };

var k=function(o,q){
    if(q||!c.dragCurrent){
        return
    }
    var s=Ext.dd.ScrollManager;
    if(!b||b!=c.dragCurrent){
        b=c.dragCurrent;
        s.refreshCache()
        }
        var t=Ext.lib.Event.getXY(o);
    var u=new Ext.lib.Point(t[0],t[1]);
    for(var m in e){
        var n=e[m],l=n._region;
        var p=n.ddScrollConfig?n.ddScrollConfig:s;
        if(l&&l.contains(u)&&n.isScrollable()){
            if(l.bottom-u.y<=p.vthresh){
                if(i.el!=n){
                    g(n,"down")
                    }
                    return
            }else{
                if(l.right-u.x<=p.hthresh){
                    if(i.el!=n){
                        g(n,"left")
                        }
                        return
                }else{
                    if(u.y-l.top<=p.vthresh){
                        if(i.el!=n){
                            g(n,"up")
                            }
                            return
                    }else{
                        if(u.x-l.left<=p.hthresh){
                            if(i.el!=n){
                                g(n,"right")
                                }
                                return
                        }
                    }
                }
        }
    }
}
a()
};

c.fireEvents=c.fireEvents.createSequence(k,c);
c.stopDrag=c.stopDrag.createSequence(h,c);
return{
    register:function(n){
        if(Ext.isArray(n)){
            for(var m=0,l=n.length;m<l;m++){
                this.register(n[m])
                }
            }else{
        n=Ext.get(n);
        e[n.id]=n
        }
    },
unregister:function(n){
    if(Ext.isArray(n)){
        for(var m=0,l=n.length;m<l;m++){
            this.unregister(n[m])
            }
        }else{
    n=Ext.get(n);
    delete e[n.id]
}
},
vthresh:25,
hthresh:25,
increment:100,
frequency:500,
animate:true,
animDuration:0.4,
refreshCache:function(){
    for(var l in e){
        if(typeof e[l]=="object"){
            e[l]._region=e[l].getRegion()
            }
        }
    }
}
}();
Ext.dd.Registry=function(){
    var d={};

    var b={};

    var a=0;
    var c=function(g,e){
        if(typeof g=="string"){
            return g
            }
            var h=g.id;
        if(!h&&e!==false){
            h="extdd-"+(++a);
            g.id=h
            }
            return h
        };

    return{
        register:function(j,k){
            k=k||{};

            if(typeof j=="string"){
                j=document.getElementById(j)
                }
                k.ddel=j;
            d[c(j)]=k;
            if(k.isHandle!==false){
                b[k.ddel.id]=k
                }
                if(k.handles){
                var h=k.handles;
                for(var g=0,e=h.length;g<e;g++){
                    b[c(h[g])]=k
                    }
                }
            },
unregister:function(j){
    var l=c(j,false);
    var k=d[l];
    if(k){
        delete d[l];
        if(k.handles){
            var h=k.handles;
            for(var g=0,e=h.length;g<e;g++){
                delete b[c(h[g],false)]
            }
            }
        }
},
getHandle:function(e){
    if(typeof e!="string"){
        e=e.id
        }
        return b[e]
    },
getHandleFromEvent:function(h){
    var g=Ext.lib.Event.getTarget(h);
    return g?b[g.id]:null
    },
getTarget:function(e){
    if(typeof e!="string"){
        e=e.id
        }
        return d[e]
    },
getTargetFromEvent:function(h){
    var g=Ext.lib.Event.getTarget(h);
    return g?d[g.id]||b[g.id]:null
    }
}
}();
Ext.dd.StatusProxy=function(a){
    Ext.apply(this,a);
    this.id=this.id||Ext.id();
    this.el=new Ext.Layer({
        dh:{
            id:this.id,
            tag:"div",
            cls:"x-dd-drag-proxy "+this.dropNotAllowed,
            children:[{
                tag:"div",
                cls:"x-dd-drop-icon"
            },{
                tag:"div",
                cls:"x-dd-drag-ghost"
            }]
            },
        shadow:!a||a.shadow!==false
        });
    this.ghost=Ext.get(this.el.dom.childNodes[1]);
    this.dropStatus=this.dropNotAllowed
    };

Ext.dd.StatusProxy.prototype={
    dropAllowed:"x-dd-drop-ok",
    dropNotAllowed:"x-dd-drop-nodrop",
    setStatus:function(a){
        a=a||this.dropNotAllowed;
        if(this.dropStatus!=a){
            this.el.replaceClass(this.dropStatus,a);
            this.dropStatus=a
            }
        },
reset:function(a){
    this.el.dom.className="x-dd-drag-proxy "+this.dropNotAllowed;
    this.dropStatus=this.dropNotAllowed;
    if(a){
        this.ghost.update("")
        }
    },
update:function(a){
    if(typeof a=="string"){
        this.ghost.update(a)
        }else{
        this.ghost.update("");
        a.style.margin="0";
        this.ghost.dom.appendChild(a)
        }
        var b=this.ghost.dom.firstChild;
    if(b){
        Ext.fly(b).setStyle("float","none")
        }
    },
getEl:function(){
    return this.el
    },
getGhost:function(){
    return this.ghost
    },
hide:function(a){
    this.el.hide();
    if(a){
        this.reset(true)
        }
    },
stop:function(){
    if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){
        this.anim.stop()
        }
    },
show:function(){
    this.el.show()
    },
sync:function(){
    this.el.sync()
    },
repair:function(b,c,a){
    this.callback=c;
    this.scope=a;
    if(b&&this.animRepair!==false){
        this.el.addClass("x-dd-drag-repair");
        this.el.hideUnders(true);
        this.anim=this.el.shift({
            duration:this.repairDuration||0.5,
            easing:"easeOut",
            xy:b,
            stopFx:true,
            callback:this.afterRepair,
            scope:this
        })
        }else{
        this.afterRepair()
        }
    },
afterRepair:function(){
    this.hide(true);
    if(typeof this.callback=="function"){
        this.callback.call(this.scope||this)
        }
        this.callback=null;
    this.scope=null
    },
destroy:function(){
    Ext.destroy(this.ghost,this.el)
    }
};

Ext.dd.DragSource=function(b,a){
    this.el=Ext.get(b);
    if(!this.dragData){
        this.dragData={}
    }
    Ext.apply(this,a);
    if(!this.proxy){
    this.proxy=new Ext.dd.StatusProxy()
    }
    Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{
    dragElId:this.proxy.id,
    resizeFrame:false,
    isTarget:false,
    scroll:this.scroll===true
    });
this.dragging=false
};

Ext.extend(Ext.dd.DragSource,Ext.dd.DDProxy,{
    dropAllowed:"x-dd-drop-ok",
    dropNotAllowed:"x-dd-drop-nodrop",
    getDragData:function(a){
        return this.dragData
        },
    onDragEnter:function(c,d){
        var b=Ext.dd.DragDropMgr.getDDById(d);
        this.cachedTarget=b;
        if(this.beforeDragEnter(b,c,d)!==false){
            if(b.isNotifyTarget){
                var a=b.notifyEnter(this,c,this.dragData);
                this.proxy.setStatus(a)
                }else{
                this.proxy.setStatus(this.dropAllowed)
                }
                if(this.afterDragEnter){
                this.afterDragEnter(b,c,d)
                }
            }
    },
beforeDragEnter:function(b,a,c){
    return true
    },
alignElWithMouse:function(){
    Ext.dd.DragSource.superclass.alignElWithMouse.apply(this,arguments);
    this.proxy.sync()
    },
onDragOver:function(c,d){
    var b=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(d);
    if(this.beforeDragOver(b,c,d)!==false){
        if(b.isNotifyTarget){
            var a=b.notifyOver(this,c,this.dragData);
            this.proxy.setStatus(a)
            }
            if(this.afterDragOver){
            this.afterDragOver(b,c,d)
            }
        }
},
beforeDragOver:function(b,a,c){
    return true
    },
onDragOut:function(b,c){
    var a=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(c);
    if(this.beforeDragOut(a,b,c)!==false){
        if(a.isNotifyTarget){
            a.notifyOut(this,b,this.dragData)
            }
            this.proxy.reset();
        if(this.afterDragOut){
            this.afterDragOut(a,b,c)
            }
        }
    this.cachedTarget=null
},
beforeDragOut:function(b,a,c){
    return true
    },
onDragDrop:function(b,c){
    var a=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(c);
    if(this.beforeDragDrop(a,b,c)!==false){
        if(a.isNotifyTarget){
            if(a.notifyDrop(this,b,this.dragData)){
                this.onValidDrop(a,b,c)
                }else{
                this.onInvalidDrop(a,b,c)
                }
            }else{
        this.onValidDrop(a,b,c)
        }
        if(this.afterDragDrop){
        this.afterDragDrop(a,b,c)
        }
    }
delete this.cachedTarget
},
beforeDragDrop:function(b,a,c){
    return true
    },
onValidDrop:function(b,a,c){
    this.hideProxy();
    if(this.afterValidDrop){
        this.afterValidDrop(b,a,c)
        }
    },
getRepairXY:function(b,a){
    return this.el.getXY()
    },
onInvalidDrop:function(b,a,c){
    this.beforeInvalidDrop(b,a,c);
    if(this.cachedTarget){
        if(this.cachedTarget.isNotifyTarget){
            this.cachedTarget.notifyOut(this,a,this.dragData)
            }
            this.cacheTarget=null
        }
        this.proxy.repair(this.getRepairXY(a,this.dragData),this.afterRepair,this);
    if(this.afterInvalidDrop){
        this.afterInvalidDrop(a,c)
        }
    },
afterRepair:function(){
    if(Ext.enableFx){
        this.el.highlight(this.hlColor||"c3daf9")
        }
        this.dragging=false
    },
beforeInvalidDrop:function(b,a,c){
    return true
    },
handleMouseDown:function(b){
    if(this.dragging){
        return
    }
    var a=this.getDragData(b);
    if(a&&this.onBeforeDrag(a,b)!==false){
        this.dragData=a;
        this.proxy.stop();
        Ext.dd.DragSource.superclass.handleMouseDown.apply(this,arguments)
        }
    },
onBeforeDrag:function(a,b){
    return true
    },
onStartDrag:Ext.emptyFn,
startDrag:function(a,b){
    this.proxy.reset();
    this.dragging=true;
    this.proxy.update("");
    this.onInitDrag(a,b);
    this.proxy.show()
    },
onInitDrag:function(a,c){
    var b=this.el.dom.cloneNode(true);
    b.id=Ext.id();
    this.proxy.update(b);
    this.onStartDrag(a,c);
    return true
    },
getProxy:function(){
    return this.proxy
    },
hideProxy:function(){
    this.proxy.hide();
    this.proxy.reset(true);
    this.dragging=false
    },
triggerCacheRefresh:function(){
    Ext.dd.DDM.refreshCache(this.groups)
    },
b4EndDrag:function(a){},
endDrag:function(a){
    this.onEndDrag(this.dragData,a)
    },
onEndDrag:function(a,b){},
autoOffset:function(a,b){
    this.setDelta(-12,-20)
    },
destroy:function(){
    Ext.dd.DragSource.superclass.destroy.call(this);
    Ext.destroy(this.proxy)
    }
});
Ext.dd.DropTarget=function(b,a){
    this.el=Ext.get(b);
    Ext.apply(this,a);
    if(this.containerScroll){
        Ext.dd.ScrollManager.register(this.el)
        }
        Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{
        isTarget:true
    })
    };

Ext.extend(Ext.dd.DropTarget,Ext.dd.DDTarget,{
    dropAllowed:"x-dd-drop-ok",
    dropNotAllowed:"x-dd-drop-nodrop",
    isTarget:true,
    isNotifyTarget:true,
    notifyEnter:function(a,c,b){
        if(this.overClass){
            this.el.addClass(this.overClass)
            }
            return this.dropAllowed
        },
    notifyOver:function(a,c,b){
        return this.dropAllowed
        },
    notifyOut:function(a,c,b){
        if(this.overClass){
            this.el.removeClass(this.overClass)
            }
        },
notifyDrop:function(a,c,b){
    return false
    }
});
Ext.dd.DragZone=function(b,a){
    Ext.dd.DragZone.superclass.constructor.call(this,b,a);
    if(this.containerScroll){
        Ext.dd.ScrollManager.register(this.el)
        }
    };

Ext.extend(Ext.dd.DragZone,Ext.dd.DragSource,{
    getDragData:function(a){
        return Ext.dd.Registry.getHandleFromEvent(a)
        },
    onInitDrag:function(a,b){
        this.proxy.update(this.dragData.ddel.cloneNode(true));
        this.onStartDrag(a,b);
        return true
        },
    afterRepair:function(){
        if(Ext.enableFx){
            Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9")
            }
            this.dragging=false
        },
    getRepairXY:function(a){
        return Ext.Element.fly(this.dragData.ddel).getXY()
        }
    });
Ext.dd.DropZone=function(b,a){
    Ext.dd.DropZone.superclass.constructor.call(this,b,a)
    };

Ext.extend(Ext.dd.DropZone,Ext.dd.DropTarget,{
    getTargetFromEvent:function(a){
        return Ext.dd.Registry.getTargetFromEvent(a)
        },
    onNodeEnter:function(d,a,c,b){},
    onNodeOver:function(d,a,c,b){
        return this.dropAllowed
        },
    onNodeOut:function(d,a,c,b){},
    onNodeDrop:function(d,a,c,b){
        return false
        },
    onContainerOver:function(a,c,b){
        return this.dropNotAllowed
        },
    onContainerDrop:function(a,c,b){
        return false
        },
    notifyEnter:function(a,c,b){
        return this.dropNotAllowed
        },
    notifyOver:function(a,c,b){
        var d=this.getTargetFromEvent(c);
        if(!d){
            if(this.lastOverNode){
                this.onNodeOut(this.lastOverNode,a,c,b);
                this.lastOverNode=null
                }
                return this.onContainerOver(a,c,b)
            }
            if(this.lastOverNode!=d){
            if(this.lastOverNode){
                this.onNodeOut(this.lastOverNode,a,c,b)
                }
                this.onNodeEnter(d,a,c,b);
            this.lastOverNode=d
            }
            return this.onNodeOver(d,a,c,b)
        },
    notifyOut:function(a,c,b){
        if(this.lastOverNode){
            this.onNodeOut(this.lastOverNode,a,c,b);
            this.lastOverNode=null
            }
        },
notifyDrop:function(a,c,b){
    if(this.lastOverNode){
        this.onNodeOut(this.lastOverNode,a,c,b);
        this.lastOverNode=null
        }
        var d=this.getTargetFromEvent(c);
    return d?this.onNodeDrop(d,a,c,b):this.onContainerDrop(a,c,b)
    },
triggerCacheRefresh:function(){
    Ext.dd.DDM.refreshCache(this.groups)
    }
});
Ext.Element.addMethods({
    initDD:function(c,b,d){
        var a=new Ext.dd.DD(Ext.id(this.dom),c,b);
        return Ext.apply(a,d)
        },
    initDDProxy:function(c,b,d){
        var a=new Ext.dd.DDProxy(Ext.id(this.dom),c,b);
        return Ext.apply(a,d)
        },
    initDDTarget:function(c,b,d){
        var a=new Ext.dd.DDTarget(Ext.id(this.dom),c,b);
        return Ext.apply(a,d)
        }
    });
Ext.data.Api=(function(){
    var a={};

    return{
        actions:{
            create:"create",
            read:"read",
            update:"update",
            destroy:"destroy"
        },
        restActions:{
            create:"POST",
            read:"GET",
            update:"PUT",
            destroy:"DELETE"
        },
        isAction:function(b){
            return(Ext.data.Api.actions[b])?true:false
            },
        getVerb:function(b){
            if(a[b]){
                return a[b]
                }
                for(var c in this.actions){
                if(this.actions[c]===b){
                    a[b]=c;
                    break
                }
            }
            return(a[b]!==undefined)?a[b]:null
        },
    isValid:function(b){
        var e=[];
        var d=this.actions;
        for(var c in b){
            if(!(c in d)){
                e.push(c)
                }
            }
        return(!e.length)?true:e
    },
hasUniqueUrl:function(c,g){
    var b=(c.api[g])?c.api[g].url:null;
    var e=true;
    for(var d in c.api){
        if((e=(d===g)?true:(c.api[d].url!=b)?true:false)===false){
            break
        }
    }
    return e
},
prepare:function(b){
    if(!b.api){
        b.api={}
    }
    for(var d in this.actions){
    var c=this.actions[d];
    b.api[c]=b.api[c]||b.url||b.directFn;
    if(typeof(b.api[c])=="string"){
        b.api[c]={
            url:b.api[c],
            method:(b.restful===true)?Ext.data.Api.restActions[c]:undefined
            }
        }
}
},
restify:function(b){
    b.restful=true;
    for(var c in this.restActions){
        b.api[this.actions[c]].method||(b.api[this.actions[c]].method=this.restActions[c])
        }
        b.onWrite=b.onWrite.createInterceptor(function(i,j,g,e){
        var d=j.reader;
        var h=new Ext.data.Response({
            action:i,
            raw:g
        });
        switch(g.status){
            case 200:
                return true;
                break;
            case 201:
                if(Ext.isEmpty(h.raw.responseText)){
                h.success=true
                }else{
                return true
                }
                break;
            case 204:
                h.success=true;
                h.data=null;
                break;
            default:
                return true;
                break
                }
                if(h.success===true){
            this.fireEvent("write",this,i,h.data,h,e,j.request.arg)
            }else{
            this.fireEvent("exception",this,"remote",i,j,h,e)
            }
            j.request.callback.call(j.request.scope,h.data,h,h.success);
        return false
        },b)
    }
}
})();
Ext.data.Response=function(b,a){
    Ext.apply(this,b,{
        raw:a
    })
    };

Ext.data.Response.prototype={
    message:null,
    success:false,
    status:null,
    root:null,
    raw:null,
    getMessage:function(){
        return this.message
        },
    getSuccess:function(){
        return this.success
        },
    getStatus:function(){
        return this.status
        },
    getRoot:function(){
        return this.root
        },
    getRawResponse:function(){
        return this.raw
        }
    };

Ext.data.Api.Error=Ext.extend(Ext.Error,{
    constructor:function(b,a){
        this.arg=a;
        Ext.Error.call(this,b)
        },
    name:"Ext.data.Api"
});
Ext.apply(Ext.data.Api.Error.prototype,{
    lang:{
        "action-url-undefined":"No fallback url defined for this action.  When defining a DataProxy api, please be sure to define an url for each CRUD action in Ext.data.Api.actions or define a default url in addition to your api-configuration.",
        invalid:"received an invalid API-configuration.  Please ensure your proxy API-configuration contains only the actions defined in Ext.data.Api.actions",
        "invalid-url":"Invalid url.  Please review your proxy configuration.",
        execute:'Attempted to execute an unknown action.  Valid API actions are defined in Ext.data.Api.actions"'
    }
});
Ext.data.SortTypes={
    none:function(a){
        return a
        },
    stripTagsRE:/<\/?[^>]+>/gi,
    asText:function(a){
        return String(a).replace(this.stripTagsRE,"")
        },
    asUCText:function(a){
        return String(a).toUpperCase().replace(this.stripTagsRE,"")
        },
    asUCString:function(a){
        return String(a).toUpperCase()
        },
    asDate:function(a){
        if(!a){
            return 0
            }
            if(Ext.isDate(a)){
            return a.getTime()
            }
            return Date.parse(String(a))
        },
    asFloat:function(a){
        var b=parseFloat(String(a).replace(/,/g,""));
        return isNaN(b)?0:b
        },
    asInt:function(a){
        var b=parseInt(String(a).replace(/,/g,""),10);
        return isNaN(b)?0:b
        }
    };

Ext.data.Record=function(a,b){
    this.id=(b||b===0)?b:Ext.data.Record.id(this);
    this.data=a||{}
};

Ext.data.Record.create=function(e){
    var c=Ext.extend(Ext.data.Record,{});
    var d=c.prototype;
    d.fields=new Ext.util.MixedCollection(false,function(g){
        return g.name
        });
    for(var b=0,a=e.length;b<a;b++){
        d.fields.add(new Ext.data.Field(e[b]))
        }
        c.getField=function(g){
        return d.fields.get(g)
        };

    return c
    };

Ext.data.Record.PREFIX="ext-record";
Ext.data.Record.AUTO_ID=1;
Ext.data.Record.EDIT="edit";
Ext.data.Record.REJECT="reject";
Ext.data.Record.COMMIT="commit";
Ext.data.Record.id=function(a){
    a.phantom=true;
    return[Ext.data.Record.PREFIX,"-",Ext.data.Record.AUTO_ID++].join("")
    };

Ext.data.Record.prototype={
    dirty:false,
    editing:false,
    error:null,
    modified:null,
    phantom:false,
    join:function(a){
        this.store=a
        },
    set:function(a,c){
        var b=Ext.isPrimitive(c)?String:Ext.encode;
        if(b(this.data[a])==b(c)){
            return
        }
        this.dirty=true;
        if(!this.modified){
            this.modified={}
        }
        if(this.modified[a]===undefined){
        this.modified[a]=this.data[a]
        }
        this.data[a]=c;
    if(!this.editing){
        this.afterEdit()
        }
    },
afterEdit:function(){
    if(this.store!=undefined&&typeof this.store.afterEdit=="function"){
        this.store.afterEdit(this)
        }
    },
afterReject:function(){
    if(this.store){
        this.store.afterReject(this)
        }
    },
afterCommit:function(){
    if(this.store){
        this.store.afterCommit(this)
        }
    },
get:function(a){
    return this.data[a]
    },
beginEdit:function(){
    this.editing=true;
    this.modified=this.modified||{}
},
cancelEdit:function(){
    this.editing=false;
    delete this.modified
    },
endEdit:function(){
    this.editing=false;
    if(this.dirty){
        this.afterEdit()
        }
    },
reject:function(b){
    var a=this.modified;
    for(var c in a){
        if(typeof a[c]!="function"){
            this.data[c]=a[c]
            }
        }
    this.dirty=false;
delete this.modified;
this.editing=false;
if(b!==true){
    this.afterReject()
    }
},
commit:function(a){
    this.dirty=false;
    delete this.modified;
    this.editing=false;
    if(a!==true){
        this.afterCommit()
        }
    },
getChanges:function(){
    var a=this.modified,b={};

    for(var c in a){
        if(a.hasOwnProperty(c)){
            b[c]=this.data[c]
            }
        }
    return b
},
hasError:function(){
    return this.error!==null
    },
clearError:function(){
    this.error=null
    },
copy:function(a){
    return new this.constructor(Ext.apply({},this.data),a||this.id)
    },
isModified:function(a){
    return !!(this.modified&&this.modified.hasOwnProperty(a))
    },
isValid:function(){
    return this.fields.find(function(a){
        return(a.allowBlank===false&&Ext.isEmpty(this.data[a.name]))?true:false
        },this)?false:true
    },
markDirty:function(){
    this.dirty=true;
    if(!this.modified){
        this.modified={}
    }
    this.fields.each(function(a){
    this.modified[a.name]=this.data[a.name]
    },this)
}
};

Ext.StoreMgr=Ext.apply(new Ext.util.MixedCollection(),{
    register:function(){
        for(var a=0,b;(b=arguments[a]);a++){
            this.add(b)
            }
        },
unregister:function(){
    for(var a=0,b;(b=arguments[a]);a++){
        this.remove(this.lookup(b))
        }
    },
lookup:function(e){
    if(Ext.isArray(e)){
        var b=["field1"],d=!Ext.isArray(e[0]);
        if(!d){
            for(var c=2,a=e[0].length;c<=a;++c){
                b.push("field"+c)
                }
            }
            return new Ext.data.ArrayStore({
        fields:b,
        data:e,
        expandData:d,
        autoDestroy:true,
        autoCreated:true
    })
    }
    return Ext.isObject(e)?(e.events?e:Ext.create(e,"store")):this.get(e)
    },
getKey:function(a){
    return a.storeId
    }
});
Ext.data.Store=Ext.extend(Ext.util.Observable,{
    writer:undefined,
    remoteSort:false,
    autoDestroy:false,
    pruneModifiedRecords:false,
    lastOptions:null,
    autoSave:true,
    batch:true,
    restful:false,
    paramNames:undefined,
    defaultParamNames:{
        start:"start",
        limit:"limit",
        sort:"sort",
        dir:"dir"
    },
    isDestroyed:false,
    hasMultiSort:false,
    batchKey:"_ext_batch_",
    constructor:function(a){
        this.data=new Ext.util.MixedCollection(false);
        this.data.getKey=function(b){
            return b.id
            };

        this.removed=[];
        if(a&&a.data){
            this.inlineData=a.data;
            delete a.data
            }
            Ext.apply(this,a);
        this.baseParams=Ext.isObject(this.baseParams)?this.baseParams:{};

        this.paramNames=Ext.applyIf(this.paramNames||{},this.defaultParamNames);
        if((this.url||this.api)&&!this.proxy){
            this.proxy=new Ext.data.HttpProxy({
                url:this.url,
                api:this.api
                })
            }
            if(this.restful===true&&this.proxy){
            this.batch=false;
            Ext.data.Api.restify(this.proxy)
            }
            if(this.reader){
            if(!this.recordType){
                this.recordType=this.reader.recordType
                }
                if(this.reader.onMetaChange){
                this.reader.onMetaChange=this.reader.onMetaChange.createSequence(this.onMetaChange,this)
                }
                if(this.writer){
                if(this.writer instanceof (Ext.data.DataWriter)===false){
                    this.writer=this.buildWriter(this.writer)
                    }
                    this.writer.meta=this.reader.meta;
                this.pruneModifiedRecords=true
                }
            }
        if(this.recordType){
        this.fields=this.recordType.prototype.fields
        }
        this.modified=[];
    this.addEvents("datachanged","metachange","add","remove","update","clear","exception","beforeload","load","loadexception","beforewrite","write","beforesave","save");
    if(this.proxy){
        this.relayEvents(this.proxy,["loadexception","exception"])
        }
        if(this.writer){
        this.on({
            scope:this,
            add:this.createRecords,
            remove:this.destroyRecord,
            update:this.updateRecord,
            clear:this.onClear
            })
        }
        this.sortToggle={};

    if(this.sortField){
        this.setDefaultSort(this.sortField,this.sortDir)
        }else{
        if(this.sortInfo){
            this.setDefaultSort(this.sortInfo.field,this.sortInfo.direction)
            }
        }
    Ext.data.Store.superclass.constructor.call(this);
    if(this.id){
    this.storeId=this.id;
    delete this.id
    }
    if(this.storeId){
    Ext.StoreMgr.register(this)
    }
    if(this.inlineData){
    this.loadData(this.inlineData);
    delete this.inlineData
    }else{
    if(this.autoLoad){
        this.load.defer(10,this,[typeof this.autoLoad=="object"?this.autoLoad:undefined])
        }
    }
this.batchCounter=0;
this.batches={}
},
buildWriter:function(b){
    var a=undefined,c=(b.format||"json").toLowerCase();
    switch(c){
        case"json":
            a=Ext.data.JsonWriter;
            break;
        case"xml":
            a=Ext.data.XmlWriter;
            break;
        default:
            a=Ext.data.JsonWriter
            }
            return new a(b)
    },
destroy:function(){
    if(!this.isDestroyed){
        if(this.storeId){
            Ext.StoreMgr.unregister(this)
            }
            this.clearData();
        this.data=null;
        Ext.destroy(this.proxy);
        this.reader=this.writer=null;
        this.purgeListeners();
        this.isDestroyed=true
        }
    },
add:function(b){
    b=[].concat(b);
    if(b.length<1){
        return
    }
    for(var d=0,a=b.length;d<a;d++){
        b[d].join(this)
        }
        var c=this.data.length;
    this.data.addAll(b);
    if(this.snapshot){
        this.snapshot.addAll(b)
        }
        this.fireEvent("add",this,b,c)
    },
addSorted:function(a){
    var b=this.findInsertIndex(a);
    this.insert(b,a)
    },
remove:function(a){
    if(Ext.isArray(a)){
        Ext.each(a,function(c){
            this.remove(c)
            },this)
        }
        var b=this.data.indexOf(a);
    if(b>-1){
        a.join(null);
        this.data.removeAt(b)
        }
        if(this.pruneModifiedRecords){
        this.modified.remove(a)
        }
        if(this.snapshot){
        this.snapshot.remove(a)
        }
        if(b>-1){
        this.fireEvent("remove",this,a,b)
        }
    },
removeAt:function(a){
    this.remove(this.getAt(a))
    },
removeAll:function(b){
    var a=[];
    this.each(function(c){
        a.push(c)
        });
    this.clearData();
    if(this.snapshot){
        this.snapshot.clear()
        }
        if(this.pruneModifiedRecords){
        this.modified=[]
        }
        if(b!==true){
        this.fireEvent("clear",this,a)
        }
    },
onClear:function(b,a){
    Ext.each(a,function(d,c){
        this.destroyRecord(this,d,c)
        },this)
    },
insert:function(c,b){
    b=[].concat(b);
    for(var d=0,a=b.length;d<a;d++){
        this.data.insert(c,b[d]);
        b[d].join(this)
        }
        if(this.snapshot){
        this.snapshot.addAll(b)
        }
        this.fireEvent("add",this,b,c)
    },
indexOf:function(a){
    return this.data.indexOf(a)
    },
indexOfId:function(a){
    return this.data.indexOfKey(a)
    },
getById:function(a){
    return(this.snapshot||this.data).key(a)
    },
getAt:function(a){
    return this.data.itemAt(a)
    },
getRange:function(b,a){
    return this.data.getRange(b,a)
    },
storeOptions:function(a){
    a=Ext.apply({},a);
    delete a.callback;
    delete a.scope;
    this.lastOptions=a
    },
clearData:function(){
    this.data.each(function(a){
        a.join(null)
        });
    this.data.clear()
    },
load:function(b){
    b=Ext.apply({},b);
    this.storeOptions(b);
    if(this.sortInfo&&this.remoteSort){
        var a=this.paramNames;
        b.params=Ext.apply({},b.params);
        b.params[a.sort]=this.sortInfo.field;
        b.params[a.dir]=this.sortInfo.direction
        }
        try{
        return this.execute("read",null,b)
        }catch(c){
        this.handleException(c);
        return false
        }
    },
updateRecord:function(b,a,c){
    if(c==Ext.data.Record.EDIT&&this.autoSave===true&&(!a.phantom||(a.phantom&&a.isValid()))){
        this.save()
        }
    },
createRecords:function(c,b,d){
    for(var e=0,a=b.length;e<a;e++){
        if(b[e].phantom&&b[e].isValid()){
            b[e].markDirty();
            this.modified.push(b[e])
            }
        }
    if(this.autoSave===true){
    this.save()
    }
},
destroyRecord:function(b,a,c){
    if(this.modified.indexOf(a)!=-1){
        this.modified.remove(a)
        }
        if(!a.phantom){
        this.removed.push(a);
        a.lastIndex=c;
        if(this.autoSave===true){
            this.save()
            }
        }
},
execute:function(e,a,c,b){
    if(!Ext.data.Api.isAction(e)){
        throw new Ext.data.Api.Error("execute",e)
        }
        c=Ext.applyIf(c||{},{
        params:{}
    });
if(b!==undefined){
    this.addToBatch(b)
    }
    var d=true;
if(e==="read"){
    d=this.fireEvent("beforeload",this,c);
    Ext.applyIf(c.params,this.baseParams)
    }else{
    if(this.writer.listful===true&&this.restful!==true){
        a=(Ext.isArray(a))?a:[a]
        }else{
        if(Ext.isArray(a)&&a.length==1){
            a=a.shift()
            }
        }
    if((d=this.fireEvent("beforewrite",this,e,a,c))!==false){
    this.writer.apply(c.params,this.baseParams,e,a)
    }
}
if(d!==false){
    if(this.writer&&this.proxy.url&&!this.proxy.restful&&!Ext.data.Api.hasUniqueUrl(this.proxy,e)){
        c.params.xaction=e
        }
        this.proxy.request(Ext.data.Api.actions[e],a,c.params,this.reader,this.createCallback(e,a,b),this,c)
    }
    return d
},
save:function(){
    if(!this.writer){
        throw new Ext.data.Store.Error("writer-undefined")
        }
        var h=[],j,k,e,c={};

    if(this.removed.length){
        h.push(["destroy",this.removed])
        }
        var b=[].concat(this.getModifiedRecords());
    if(b.length){
        var g=[];
        for(var d=b.length-1;d>=0;d--){
            if(b[d].phantom===true){
                var a=b.splice(d,1).shift();
                if(a.isValid()){
                    g.push(a)
                    }
                }else{
            if(!b[d].isValid()){
                b.splice(d,1)
                }
            }
        }
    if(g.length){
    h.push(["create",g])
    }
    if(b.length){
    h.push(["update",b])
    }
}
j=h.length;
if(j){
    e=++this.batchCounter;
    for(var d=0;d<j;++d){
        k=h[d];
        c[k[0]]=k[1]
        }
        if(this.fireEvent("beforesave",this,c)!==false){
        for(var d=0;d<j;++d){
            k=h[d];
            this.doTransaction(k[0],k[1],e)
            }
            return e
        }
    }
return -1
},
doTransaction:function(e,b,c){
    function g(h){
        try{
            this.execute(e,h,undefined,c)
            }catch(i){
            this.handleException(i)
            }
        }
    if(this.batch===false){
    for(var d=0,a=b.length;d<a;d++){
        g.call(this,b[d])
        }
    }else{
    g.call(this,b)
    }
},
addToBatch:function(c){
    var a=this.batches,d=this.batchKey+c,e=a[d];
    if(!e){
        a[d]=e={
            id:c,
            count:0,
            data:{}
    }
}
++e.count
},
removeFromBatch:function(d,h,g){
    var c=this.batches,e=this.batchKey+d,i=c[e],g,a;
    if(i){
        a=i.data[h]||[];
        i.data[h]=a.concat(g);
        if(i.count===1){
            g=i.data;
            delete c[e];
            this.fireEvent("save",this,d,g)
            }else{
            --i.count
            }
        }
},
createCallback:function(c,a,b){
    var d=Ext.data.Api.actions;
    return(c=="read")?this.loadRecords:function(g,e,h){
        this["on"+Ext.util.Format.capitalize(c)+"Records"](h,a,[].concat(g));
        if(h===true){
            this.fireEvent("write",this,c,g,e,a)
            }
            this.removeFromBatch(b,c,g)
        }
    },
clearModified:function(a){
    if(Ext.isArray(a)){
        for(var b=a.length-1;b>=0;b--){
            this.modified.splice(this.modified.indexOf(a[b]),1)
            }
        }else{
    this.modified.splice(this.modified.indexOf(a),1)
    }
},
reMap:function(b){
    if(Ext.isArray(b)){
        for(var d=0,a=b.length;d<a;d++){
            this.reMap(b[d])
            }
        }else{
    delete this.data.map[b._phid];
    this.data.map[b.id]=b;
    var c=this.data.keys.indexOf(b._phid);
    this.data.keys.splice(c,1,b.id);
    delete b._phid
    }
},
onCreateRecords:function(d,a,b){
    if(d===true){
        try{
            this.reader.realize(a,b);
            this.reMap(a)
            }catch(c){
            this.handleException(c);
            if(Ext.isArray(a)){
                this.onCreateRecords(d,a,b)
                }
            }
    }
},
onUpdateRecords:function(d,a,b){
    if(d===true){
        try{
            this.reader.update(a,b)
            }catch(c){
            this.handleException(c);
            if(Ext.isArray(a)){
                this.onUpdateRecords(d,a,b)
                }
            }
    }
},
onDestroyRecords:function(e,b,d){
    b=(b instanceof Ext.data.Record)?[b]:[].concat(b);
    for(var c=0,a=b.length;c<a;c++){
        this.removed.splice(this.removed.indexOf(b[c]),1)
        }
        if(e===false){
        for(c=b.length-1;c>=0;c--){
            this.insert(b[c].lastIndex,b[c])
            }
        }
    },
handleException:function(a){
    Ext.handleError(a)
    },
reload:function(a){
    this.load(Ext.applyIf(a||{},this.lastOptions))
    },
loadRecords:function(h,b,g){
    if(this.isDestroyed===true){
        return
    }
    if(!h||g===false){
        if(g!==false){
            this.fireEvent("load",this,[],b)
            }
            if(b.callback){
            b.callback.call(b.scope||this,[],b,false,h)
            }
            return
    }
    var e=h.records,d=h.totalRecords||e.length;
    if(!b||b.add!==true){
        if(this.pruneModifiedRecords){
            this.modified=[]
            }
            for(var c=0,a=e.length;c<a;c++){
            e[c].join(this)
            }
            if(this.snapshot){
            this.data=this.snapshot;
            delete this.snapshot
            }
            this.clearData();
        this.data.addAll(e);
        this.totalLength=d;
        this.applySort();
        this.fireEvent("datachanged",this)
        }else{
        this.totalLength=Math.max(d,this.data.length+e.length);
        this.add(e)
        }
        this.fireEvent("load",this,e,b);
    if(b.callback){
        b.callback.call(b.scope||this,e,b,true)
        }
    },
loadData:function(c,a){
    var b=this.reader.readRecords(c);
    this.loadRecords(b,{
        add:a
    },true)
    },
getCount:function(){
    return this.data.length||0
    },
getTotalCount:function(){
    return this.totalLength||0
    },
getSortState:function(){
    return this.sortInfo
    },
applySort:function(){
    if((this.sortInfo||this.multiSortInfo)&&!this.remoteSort){
        this.sortData()
        }
    },
sortData:function(){
    var a=this.hasMultiSort?this.multiSortInfo:this.sortInfo,k=a.direction||"ASC",h=a.sorters,c=[];
    if(!this.hasMultiSort){
        h=[{
            direction:k,
            field:a.field
            }]
        }
        for(var d=0,b=h.length;d<b;d++){
        c.push(this.createSortFunction(h[d].field,h[d].direction))
        }
        if(c.length==0){
        return
    }
    var g=k.toUpperCase()=="DESC"?-1:1;
    var e=function(n,m){
        var l=c[0].call(this,n,m);
        if(c.length>1){
            for(var p=1,o=c.length;p<o;p++){
                l=l||c[p].call(this,n,m)
                }
            }
            return g*l
    };

this.data.sort(k,e);
if(this.snapshot&&this.snapshot!=this.data){
    this.snapshot.sort(k,e)
    }
},
createSortFunction:function(c,b){
    b=b||"ASC";
    var a=b.toUpperCase()=="DESC"?-1:1;
    var d=this.fields.get(c).sortType;
    return function(g,e){
        var i=d(g.data[c]),h=d(e.data[c]);
        return a*(i>h?1:(i<h?-1:0))
        }
    },
setDefaultSort:function(b,a){
    a=a?a.toUpperCase():"ASC";
    this.sortInfo={
        field:b,
        direction:a
    };

    this.sortToggle[b]=a
    },
sort:function(b,a){
    if(Ext.isArray(arguments[0])){
        return this.multiSort.call(this,b,a)
        }else{
        return this.singleSort(b,a)
        }
    },
singleSort:function(g,c){
    var e=this.fields.get(g);
    if(!e){
        return false
        }
        var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;
    if(!c){
        if(a&&a.field==b){
            c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")
            }else{
            c=e.sortDir
            }
        }
    this.sortToggle[b]=c;
this.sortInfo={
    field:b,
    direction:c
};

this.hasMultiSort=false;
if(this.remoteSort){
    if(!this.load(this.lastOptions)){
        if(d){
            this.sortToggle[b]=d
            }
            if(a){
            this.sortInfo=a
            }
        }
}else{
    this.applySort();
    this.fireEvent("datachanged",this)
    }
},
multiSort:function(b,a){
    this.hasMultiSort=true;
    a=a||"ASC";
    if(this.multiSortInfo&&a==this.multiSortInfo.direction){
        a=a.toggle("ASC","DESC")
        }
        this.multiSortInfo={
        sorters:b,
        direction:a
    };

    if(this.remoteSort){
        this.singleSort(b[0].field,b[0].direction)
        }else{
        this.applySort();
        this.fireEvent("datachanged",this)
        }
    },
each:function(b,a){
    this.data.each(b,a)
    },
getModifiedRecords:function(){
    return this.modified
    },
sum:function(e,g,a){
    var c=this.data.items,b=0;
    g=g||0;
    a=(a||a===0)?a:c.length-1;
    for(var d=g;d<=a;d++){
        b+=(c[d].data[e]||0)
        }
        return b
    },
createFilterFn:function(d,c,e,a,b){
    if(Ext.isEmpty(c,false)){
        return false
        }
        c=this.data.createValueMatcher(c,e,a,b);
    return function(g){
        return c.test(g.data[d])
        }
    },
createMultipleFilterFn:function(a){
    return function(b){
        var k=true;
        for(var d=0,c=a.length;d<c;d++){
            var h=a[d],g=h.fn,e=h.scope;
            k=k&&g.call(e,b)
            }
            return k
        }
    },
filter:function(n,m,h,k,e){
    if(Ext.isObject(n)){
        n=[n]
        }
        if(Ext.isArray(n)){
        var b=[];
        for(var g=0,d=n.length;g<d;g++){
            var a=n[g],c=a.fn,o=a.scope||this;
            if(!Ext.isFunction(c)){
                c=this.createFilterFn(a.property,a.value,a.anyMatch,a.caseSensitive,a.exactMatch)
                }
                b.push({
                fn:c,
                scope:o
            })
            }
            var l=this.createMultipleFilterFn(b)
        }else{
        var l=this.createFilterFn(n,m,h,k,e)
        }
        return l?this.filterBy(l):this.clearFilter()
    },
filterBy:function(b,a){
    this.snapshot=this.snapshot||this.data;
    this.data=this.queryBy(b,a||this);
    this.fireEvent("datachanged",this)
    },
clearFilter:function(a){
    if(this.isFiltered()){
        this.data=this.snapshot;
        delete this.snapshot;
        if(a!==true){
            this.fireEvent("datachanged",this)
            }
        }
},
isFiltered:function(){
    return !!this.snapshot&&this.snapshot!=this.data
    },
query:function(d,c,e,a){
    var b=this.createFilterFn(d,c,e,a);
    return b?this.queryBy(b):this.data.clone()
    },
queryBy:function(b,a){
    var c=this.snapshot||this.data;
    return c.filterBy(b,a||this)
    },
find:function(d,c,g,e,a){
    var b=this.createFilterFn(d,c,e,a);
    return b?this.data.findIndexBy(b,null,g):-1
    },
findExact:function(b,a,c){
    return this.data.findIndexBy(function(d){
        return d.get(b)===a
        },this,c)
    },
findBy:function(b,a,c){
    return this.data.findIndexBy(b,a,c)
    },
collect:function(j,k,b){
    var h=(b===true&&this.snapshot)?this.snapshot.items:this.data.items;
    var m,n,a=[],c={};

    for(var e=0,g=h.length;e<g;e++){
        m=h[e].data[j];
        n=String(m);
        if((k||!Ext.isEmpty(m))&&!c[n]){
            c[n]=true;
            a[a.length]=m
            }
        }
    return a
},
afterEdit:function(a){
    if(this.modified.indexOf(a)==-1){
        this.modified.push(a)
        }
        this.fireEvent("update",this,a,Ext.data.Record.EDIT)
    },
afterReject:function(a){
    this.modified.remove(a);
    this.fireEvent("update",this,a,Ext.data.Record.REJECT)
    },
afterCommit:function(a){
    this.modified.remove(a);
    this.fireEvent("update",this,a,Ext.data.Record.COMMIT)
    },
commitChanges:function(){
    var b=this.modified.slice(0);
    this.modified=[];
    for(var c=0,a=b.length;c<a;c++){
        b[c].commit()
        }
    },
rejectChanges:function(){
    var b=this.modified.slice(0);
    this.modified=[];
    for(var c=0,a=b.length;c<a;c++){
        b[c].reject()
        }
        var b=this.removed.slice(0).reverse();
    this.removed=[];
    for(var c=0,a=b.length;c<a;c++){
        this.insert(b[c].lastIndex||0,b[c]);
        b[c].reject()
        }
    },
onMetaChange:function(a){
    this.recordType=this.reader.recordType;
    this.fields=this.recordType.prototype.fields;
    delete this.snapshot;
    if(this.reader.meta.sortInfo){
        this.sortInfo=this.reader.meta.sortInfo
        }else{
        if(this.sortInfo&&!this.fields.get(this.sortInfo.field)){
            delete this.sortInfo
            }
        }
    if(this.writer){
    this.writer.meta=this.reader.meta
    }
    this.modified=[];
this.fireEvent("metachange",this,this.reader.meta)
},
findInsertIndex:function(a){
    this.suspendEvents();
    var c=this.data.clone();
    this.data.add(a);
    this.applySort();
    var b=this.data.indexOf(a);
    this.data=c;
    this.resumeEvents();
    return b
    },
setBaseParam:function(a,b){
    this.baseParams=this.baseParams||{};

    this.baseParams[a]=b
    }
});
Ext.reg("store",Ext.data.Store);
Ext.data.Store.Error=Ext.extend(Ext.Error,{
    name:"Ext.data.Store"
});
Ext.apply(Ext.data.Store.Error.prototype,{
    lang:{
        "writer-undefined":"Attempted to execute a write-action without a DataWriter installed."
    }
});
Ext.data.Field=Ext.extend(Object,{
    constructor:function(b){
        if(Ext.isString(b)){
            b={
                name:b
            }
        }
        Ext.apply(this,b);
    var d=Ext.data.Types,a=this.sortType,c;
    if(this.type){
        if(Ext.isString(this.type)){
            this.type=Ext.data.Types[this.type.toUpperCase()]||d.AUTO
            }
        }else{
    this.type=d.AUTO
    }
    if(Ext.isString(a)){
    this.sortType=Ext.data.SortTypes[a]
    }else{
    if(Ext.isEmpty(a)){
        this.sortType=this.type.sortType
        }
    }
if(!this.convert){
    this.convert=this.type.convert
    }
},
dateFormat:null,
defaultValue:"",
mapping:null,
sortType:null,
sortDir:"ASC",
allowBlank:true
});
Ext.data.DataReader=function(a,b){
    this.meta=a;
    this.recordType=Ext.isArray(b)?Ext.data.Record.create(b):b;
    if(this.recordType){
        this.buildExtractors()
        }
    };

Ext.data.DataReader.prototype={
    getTotal:Ext.emptyFn,
    getRoot:Ext.emptyFn,
    getMessage:Ext.emptyFn,
    getSuccess:Ext.emptyFn,
    getId:Ext.emptyFn,
    buildExtractors:Ext.emptyFn,
    extractValues:Ext.emptyFn,
    realize:function(a,c){
        if(Ext.isArray(a)){
            for(var b=a.length-1;b>=0;b--){
                if(Ext.isArray(c)){
                    this.realize(a.splice(b,1).shift(),c.splice(b,1).shift())
                    }else{
                    this.realize(a.splice(b,1).shift(),c)
                    }
                }
            }else{
    if(Ext.isArray(c)&&c.length==1){
        c=c.shift()
        }
        if(!this.isData(c)){
        throw new Ext.data.DataReader.Error("realize",a)
        }
        a.phantom=false;
    a._phid=a.id;
    a.id=this.getId(c);
    a.data=c;
    a.commit()
    }
},
update:function(a,c){
    if(Ext.isArray(a)){
        for(var b=a.length-1;b>=0;b--){
            if(Ext.isArray(c)){
                this.update(a.splice(b,1).shift(),c.splice(b,1).shift())
                }else{
                this.update(a.splice(b,1).shift(),c)
                }
            }
        }else{
    if(Ext.isArray(c)&&c.length==1){
        c=c.shift()
        }
        if(this.isData(c)){
        a.data=Ext.apply(a.data,c)
        }
        a.commit()
    }
},
extractData:function(k,a){
    var j=(this instanceof Ext.data.JsonReader)?"json":"node";
    var c=[];
    if(this.isData(k)&&!(this instanceof Ext.data.XmlReader)){
        k=[k]
        }
        var h=this.recordType.prototype.fields,o=h.items,m=h.length,c=[];
    if(a===true){
        var l=this.recordType;
        for(var e=0;e<k.length;e++){
            var b=k[e];
            var g=new l(this.extractValues(b,o,m),this.getId(b));
            g[j]=b;
            c.push(g)
            }
        }else{
    for(var e=0;e<k.length;e++){
        var d=this.extractValues(k[e],o,m);
        d[this.meta.idProperty]=this.getId(k[e]);
        c.push(d)
        }
    }
    return c
},
isData:function(a){
    return(a&&Ext.isObject(a)&&!Ext.isEmpty(this.getId(a)))?true:false
    },
onMetaChange:function(a){
    delete this.ef;
    this.meta=a;
    this.recordType=Ext.data.Record.create(a.fields);
    this.buildExtractors()
    }
};

Ext.data.DataReader.Error=Ext.extend(Ext.Error,{
    constructor:function(b,a){
        this.arg=a;
        Ext.Error.call(this,b)
        },
    name:"Ext.data.DataReader"
});
Ext.apply(Ext.data.DataReader.Error.prototype,{
    lang:{
        update:"#update received invalid data from server.  Please see docs for DataReader#update and review your DataReader configuration.",
        realize:"#realize was called with invalid remote-data.  Please see the docs for DataReader#realize and review your DataReader configuration.",
        "invalid-response":"#readResponse received an invalid response from the server."
    }
});
Ext.data.DataWriter=function(a){
    Ext.apply(this,a)
    };

Ext.data.DataWriter.prototype={
    writeAllFields:false,
    listful:false,
    apply:function(e,g,d,a){
        var c=[],b=d+"Record";
        if(Ext.isArray(a)){
            Ext.each(a,function(h){
                c.push(this[b](h))
                },this)
            }else{
            if(a instanceof Ext.data.Record){
                c=this[b](a)
                }
            }
        this.render(e,g,c)
    },
render:Ext.emptyFn,
updateRecord:Ext.emptyFn,
createRecord:Ext.emptyFn,
destroyRecord:Ext.emptyFn,
toHash:function(g,c){
    var e=g.fields.map,d={},b=(this.writeAllFields===false&&g.phantom===false)?g.getChanges():g.data,a;
    Ext.iterate(b,function(i,h){
        if((a=e[i])){
            d[a.mapping?a.mapping:a.name]=h
            }
        });
if(g.phantom){
    if(g.fields.containsKey(this.meta.idProperty)&&Ext.isEmpty(g.data[this.meta.idProperty])){
        delete d[this.meta.idProperty]
    }
}else{
    d[this.meta.idProperty]=g.id
    }
    return d
},
toArray:function(b){
    var a=[];
    Ext.iterate(b,function(d,c){
        a.push({
            name:d,
            value:c
        })
        },this);
    return a
    }
};

Ext.data.DataProxy=function(a){
    a=a||{};

    this.api=a.api;
    this.url=a.url;
    this.restful=a.restful;
    this.listeners=a.listeners;
    this.prettyUrls=a.prettyUrls;
    this.addEvents("exception","beforeload","load","loadexception","beforewrite","write");
    Ext.data.DataProxy.superclass.constructor.call(this);
    try{
        Ext.data.Api.prepare(this)
        }catch(b){
        if(b instanceof Ext.data.Api.Error){
            b.toConsole()
            }
        }
    Ext.data.DataProxy.relayEvents(this,["beforewrite","write","exception"])
    };

Ext.extend(Ext.data.DataProxy,Ext.util.Observable,{
    restful:false,
    setApi:function(){
        if(arguments.length==1){
            var a=Ext.data.Api.isValid(arguments[0]);
            if(a===true){
                this.api=arguments[0]
                }else{
                throw new Ext.data.Api.Error("invalid",a)
                }
            }else{
        if(arguments.length==2){
            if(!Ext.data.Api.isAction(arguments[0])){
                throw new Ext.data.Api.Error("invalid",arguments[0])
                }
                this.api[arguments[0]]=arguments[1]
            }
        }
    Ext.data.Api.prepare(this)
    },
isApiAction:function(a){
    return(this.api[a])?true:false
    },
request:function(e,b,g,a,h,d,c){
    if(!this.api[e]&&!this.load){
        throw new Ext.data.DataProxy.Error("action-undefined",e)
        }
        g=g||{};

    if((e===Ext.data.Api.actions.read)?this.fireEvent("beforeload",this,g):this.fireEvent("beforewrite",this,e,b,g)!==false){
        this.doRequest.apply(this,arguments)
        }else{
        h.call(d||this,null,c,false)
        }
    },
load:null,
doRequest:function(e,b,g,a,h,d,c){
    this.load(g,a,h,d,c)
    },
onRead:Ext.emptyFn,
onWrite:Ext.emptyFn,
buildUrl:function(d,b){
    b=b||null;
    var c=(this.conn&&this.conn.url)?this.conn.url:(this.api[d])?this.api[d].url:this.url;
    if(!c){
        throw new Ext.data.Api.Error("invalid-url",d)
        }
        var e=null;
    var a=c.match(/(.*)(\.json|\.xml|\.html)$/);
    if(a){
        e=a[2];
        c=a[1]
        }
        if((this.restful===true||this.prettyUrls===true)&&b instanceof Ext.data.Record&&!b.phantom){
        c+="/"+b.id
        }
        return(e===null)?c:c+e
    },
destroy:function(){
    this.purgeListeners()
    }
});
Ext.apply(Ext.data.DataProxy,Ext.util.Observable.prototype);
Ext.util.Observable.call(Ext.data.DataProxy);
Ext.data.DataProxy.Error=Ext.extend(Ext.Error,{
    constructor:function(b,a){
        this.arg=a;
        Ext.Error.call(this,b)
        },
    name:"Ext.data.DataProxy"
});
Ext.apply(Ext.data.DataProxy.Error.prototype,{
    lang:{
        "action-undefined":"DataProxy attempted to execute an API-action but found an undefined url / function.  Please review your Proxy url/api-configuration.",
        "api-invalid":"Recieved an invalid API-configuration.  Please ensure your proxy API-configuration contains only the actions from Ext.data.Api.actions."
    }
});
Ext.data.Request=function(a){
    Ext.apply(this,a)
    };

Ext.data.Request.prototype={
    action:undefined,
    rs:undefined,
    params:undefined,
    callback:Ext.emptyFn,
    scope:undefined,
    reader:undefined
};

Ext.data.Response=function(a){
    Ext.apply(this,a)
    };

Ext.data.Response.prototype={
    action:undefined,
    success:undefined,
    message:undefined,
    data:undefined,
    raw:undefined,
    records:undefined
};

Ext.data.ScriptTagProxy=function(a){
    Ext.apply(this,a);
    Ext.data.ScriptTagProxy.superclass.constructor.call(this,a);
    this.head=document.getElementsByTagName("head")[0]
    };

Ext.data.ScriptTagProxy.TRANS_ID=1000;
Ext.extend(Ext.data.ScriptTagProxy,Ext.data.DataProxy,{
    timeout:30000,
    callbackParam:"callback",
    nocache:true,
    doRequest:function(e,g,d,h,j,k,l){
        var c=Ext.urlEncode(Ext.apply(d,this.extraParams));
        var b=this.buildUrl(e,g);
        if(!b){
            throw new Ext.data.Api.Error("invalid-url",b)
            }
            b=Ext.urlAppend(b,c);
        if(this.nocache){
            b=Ext.urlAppend(b,"_dc="+(new Date().getTime()))
            }
            var a=++Ext.data.ScriptTagProxy.TRANS_ID;
        var m={
            id:a,
            action:e,
            cb:"stcCallback"+a,
            scriptId:"stcScript"+a,
            params:d,
            arg:l,
            url:b,
            callback:j,
            scope:k,
            reader:h
        };

        window[m.cb]=this.createCallback(e,g,m);
        b+=String.format("&{0}={1}",this.callbackParam,m.cb);
        if(this.autoAbort!==false){
            this.abort()
            }
            m.timeoutId=this.handleFailure.defer(this.timeout,this,[m]);
        var i=document.createElement("script");
        i.setAttribute("src",b);
        i.setAttribute("type","text/javascript");
        i.setAttribute("id",m.scriptId);
        this.head.appendChild(i);
        this.trans=m
        },
    createCallback:function(d,b,c){
        var a=this;
        return function(e){
            a.trans=false;
            a.destroyTrans(c,true);
            if(d===Ext.data.Api.actions.read){
                a.onRead.call(a,d,c,e)
                }else{
                a.onWrite.call(a,d,c,e,b)
                }
            }
    },
onRead:function(d,c,b){
    var a;
    try{
        a=c.reader.readRecords(b)
        }catch(g){
        this.fireEvent("loadexception",this,c,b,g);
        this.fireEvent("exception",this,"response",d,c,b,g);
        c.callback.call(c.scope||window,null,c.arg,false);
        return
    }
    if(a.success===false){
        this.fireEvent("loadexception",this,c,b);
        this.fireEvent("exception",this,"remote",d,c,b,null)
        }else{
        this.fireEvent("load",this,b,c.arg)
        }
        c.callback.call(c.scope||window,a,c.arg,a.success)
    },
onWrite:function(h,g,c,b){
    var a=g.reader;
    try{
        var d=a.readResponse(h,c)
        }catch(i){
        this.fireEvent("exception",this,"response",h,g,d,i);
        g.callback.call(g.scope||window,null,d,false);
        return
    }
    if(!d.success===true){
        this.fireEvent("exception",this,"remote",h,g,d,b);
        g.callback.call(g.scope||window,null,d,false);
        return
    }
    this.fireEvent("write",this,h,d.data,d,b,g.arg);
    g.callback.call(g.scope||window,d.data,d,true)
    },
isLoading:function(){
    return this.trans?true:false
    },
abort:function(){
    if(this.isLoading()){
        this.destroyTrans(this.trans)
        }
    },
destroyTrans:function(b,a){
    this.head.removeChild(document.getElementById(b.scriptId));
    clearTimeout(b.timeoutId);
    if(a){
        window[b.cb]=undefined;
        try{
            delete window[b.cb]
        }catch(c){}
    }else{
    window[b.cb]=function(){
        window[b.cb]=undefined;
        try{
            delete window[b.cb]
        }catch(d){}
    }
}
},
handleFailure:function(a){
    this.trans=false;
    this.destroyTrans(a,false);
    if(a.action===Ext.data.Api.actions.read){
        this.fireEvent("loadexception",this,null,a.arg)
        }
        this.fireEvent("exception",this,"response",a.action,{
        response:null,
        options:a.arg
        });
    a.callback.call(a.scope||window,null,a.arg,false)
    },
destroy:function(){
    this.abort();
    Ext.data.ScriptTagProxy.superclass.destroy.call(this)
    }
});
Ext.data.HttpProxy=function(a){
    Ext.data.HttpProxy.superclass.constructor.call(this,a);
    this.conn=a;
    this.conn.url=null;
    this.useAjax=!a||!a.events;
    var c=Ext.data.Api.actions;
    this.activeRequest={};

    for(var b in c){
        this.activeRequest[c[b]]=undefined
        }
    };

Ext.extend(Ext.data.HttpProxy,Ext.data.DataProxy,{
    getConnection:function(){
        return this.useAjax?Ext.Ajax:this.conn
        },
    setUrl:function(a,b){
        this.conn.url=a;
        if(b===true){
            this.url=a;
            this.api=null;
            Ext.data.Api.prepare(this)
            }
        },
doRequest:function(g,d,i,c,b,e,a){
    var h={
        method:(this.api[g])?this.api[g]["method"]:undefined,
        request:{
            callback:b,
            scope:e,
            arg:a
        },
        reader:c,
        callback:this.createCallback(g,d),
        scope:this
    };

    if(i.jsonData){
        h.jsonData=i.jsonData
        }else{
        if(i.xmlData){
            h.xmlData=i.xmlData
            }else{
            h.params=i||{}
        }
    }
this.conn.url=this.buildUrl(g,d);
    if(this.useAjax){
    Ext.applyIf(h,this.conn);
    if(this.activeRequest[g]){}
    this.activeRequest[g]=Ext.Ajax.request(h)
    }else{
    this.conn.request(h)
    }
    this.conn.url=null
},
createCallback:function(b,a){
    return function(e,d,c){
        this.activeRequest[b]=undefined;
        if(!d){
            if(b===Ext.data.Api.actions.read){
                this.fireEvent("loadexception",this,e,c)
                }
                this.fireEvent("exception",this,"response",b,e,c);
            e.request.callback.call(e.request.scope,null,e.request.arg,false);
            return
        }
        if(b===Ext.data.Api.actions.read){
            this.onRead(b,e,c)
            }
            else{
            this.onWrite(b,e,c,a)
            }
        }
},
onRead:function(d,h,b){
    var a;
    try{
        a=h.reader.read(b)
        }catch(g){
        this.fireEvent("loadexception",this,h,b,g);
        this.fireEvent("exception",this,"response",d,h,b,g);
        h.request.callback.call(h.request.scope,null,h.request.arg,false);
        return
    }
    if(a.success===false){
        this.fireEvent("loadexception",this,h,b);
        var c=h.reader.readResponse(d,b);
        this.fireEvent("exception",this,"remote",d,h,c,null)
        }else{
        this.fireEvent("load",this,h,h.request.arg)
        }
        h.request.callback.call(h.request.scope,a,h.request.arg,a.success)
    },
onWrite:function(g,i,c,b){
    var a=i.reader;
    var d;
    try{
        d=a.readResponse(g,c)
        }catch(h){
        this.fireEvent("exception",this,"response",g,i,c,h);
        i.request.callback.call(i.request.scope,null,i.request.arg,false);
        return
    }
    if(d.success===true){
        this.fireEvent("write",this,g,d.data,d,b,i.request.arg)
        }else{
        this.fireEvent("exception",this,"remote",g,i,d,b)
        }
        i.request.callback.call(i.request.scope,d.data,d,d.success)
    },
destroy:function(){
    if(!this.useAjax){
        this.conn.abort()
        }else{
        if(this.activeRequest){
            var b=Ext.data.Api.actions;
            for(var a in b){
                if(this.activeRequest[b[a]]){
                    Ext.Ajax.abort(this.activeRequest[b[a]])
                    }
                }
            }
        }
Ext.data.HttpProxy.superclass.destroy.call(this)
}
});
Ext.data.MemoryProxy=function(b){
    var a={};

    a[Ext.data.Api.actions.read]=true;
    Ext.data.MemoryProxy.superclass.constructor.call(this,{
        api:a
    });
    this.data=b
    };

Ext.extend(Ext.data.MemoryProxy,Ext.data.DataProxy,{
    doRequest:function(b,c,a,d,h,i,j){
        a=a||{};

        var k;
        try{
            k=d.readRecords(this.data)
            }catch(g){
            this.fireEvent("loadexception",this,null,j,g);
            this.fireEvent("exception",this,"response",b,j,null,g);
            h.call(i,null,j,false);
            return
        }
        h.call(i,k,j,true)
        }
    });
Ext.data.Types=new function(){
    var a=Ext.data.SortTypes;
    Ext.apply(this,{
        stripRe:/[\$,%]/g,
        AUTO:{
            convert:function(b){
                return b
                },
            sortType:a.none,
            type:"auto"
        },
        STRING:{
            convert:function(b){
                return(b===undefined||b===null)?"":String(b)
                },
            sortType:a.asUCString,
            type:"string"
        },
        INT:{
            convert:function(b){
                return b!==undefined&&b!==null&&b!==""?parseInt(String(b).replace(Ext.data.Types.stripRe,""),10):0
                },
            sortType:a.none,
            type:"int"
        },
        FLOAT:{
            convert:function(b){
                return b!==undefined&&b!==null&&b!==""?parseFloat(String(b).replace(Ext.data.Types.stripRe,""),10):0
                },
            sortType:a.none,
            type:"float"
        },
        BOOL:{
            convert:function(b){
                return b===true||b==="true"||b==1
                },
            sortType:a.none,
            type:"bool"
        },
        DATE:{
            convert:function(c){
                var d=this.dateFormat;
                if(!c){
                    return null
                    }
                    if(Ext.isDate(c)){
                    return c
                    }
                    if(d){
                    if(d=="timestamp"){
                        return new Date(c*1000)
                        }
                        if(d=="time"){
                        return new Date(parseInt(c,10))
                        }
                        return Date.parseDate(c,d)
                    }
                    var b=Date.parse(c);
                return b?new Date(b):null
                },
            sortType:a.asDate,
            type:"date"
        }
    });
Ext.apply(this,{
    BOOLEAN:this.BOOL,
    INTEGER:this.INT,
    NUMBER:this.FLOAT
    })
};

Ext.data.JsonWriter=Ext.extend(Ext.data.DataWriter,{
    encode:true,
    encodeDelete:false,
    constructor:function(a){
        Ext.data.JsonWriter.superclass.constructor.call(this,a)
        },
    render:function(c,d,b){
        if(this.encode===true){
            Ext.apply(c,d);
            c[this.meta.root]=Ext.encode(b)
            }else{
            var a=Ext.apply({},d);
            a[this.meta.root]=b;
            c.jsonData=a
            }
        },
createRecord:function(a){
    return this.toHash(a)
    },
updateRecord:function(a){
    return this.toHash(a)
    },
destroyRecord:function(b){
    if(this.encodeDelete){
        var a={};

        a[this.meta.idProperty]=b.id;
        return a
        }else{
        return b.id
        }
    }
});
Ext.data.JsonReader=function(a,b){
    a=a||{};

    Ext.applyIf(a,{
        idProperty:"id",
        successProperty:"success",
        totalProperty:"total"
    });
    Ext.data.JsonReader.superclass.constructor.call(this,a,b||a.fields)
    };

Ext.extend(Ext.data.JsonReader,Ext.data.DataReader,{
    read:function(a){
        var b=a.responseText;
        var c=Ext.decode(b);
        if(!c){
            throw {
                message:"JsonReader.read: Json object not found"
            }
        }
        return this.readRecords(c)
    },
readResponse:function(e,b){
    var g=(b.responseText!==undefined)?Ext.decode(b.responseText):b;
    if(!g){
        throw new Ext.data.JsonReader.Error("response")
        }
        var a=this.getRoot(g);
    if(e===Ext.data.Api.actions.create){
        var d=Ext.isDefined(a);
        if(d&&Ext.isEmpty(a)){
            throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)
            }else{
            if(!d){
                throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)
                }
            }
    }
var c=new Ext.data.Response({
    action:e,
    success:this.getSuccess(g),
    data:(a)?this.extractData(a,false):[],
    message:this.getMessage(g),
    raw:g
});
if(Ext.isEmpty(c.success)){
    throw new Ext.data.JsonReader.Error("successProperty-response",this.meta.successProperty)
    }
    return c
},
readRecords:function(a){
    this.jsonData=a;
    if(a.metaData){
        this.onMetaChange(a.metaData)
        }
        var m=this.meta,h=this.recordType,b=h.prototype.fields,l=b.items,i=b.length,j;
    var g=this.getRoot(a),e=g.length,d=e,k=true;
    if(m.totalProperty){
        j=parseInt(this.getTotal(a),10);
        if(!isNaN(j)){
            d=j
            }
        }
    if(m.successProperty){
    j=this.getSuccess(a);
    if(j===false||j==="false"){
        k=false
        }
    }
return{
    success:k,
    records:this.extractData(g,true),
    totalRecords:d
}
},
buildExtractors:function(){
    if(this.ef){
        return
    }
    var l=this.meta,h=this.recordType,e=h.prototype.fields,k=e.items,j=e.length;
    if(l.totalProperty){
        this.getTotal=this.createAccessor(l.totalProperty)
        }
        if(l.successProperty){
        this.getSuccess=this.createAccessor(l.successProperty)
        }
        if(l.messageProperty){
        this.getMessage=this.createAccessor(l.messageProperty)
        }
        this.getRoot=l.root?this.createAccessor(l.root):function(g){
        return g
        };

    if(l.id||l.idProperty){
        var d=this.createAccessor(l.id||l.idProperty);
        this.getId=function(i){
            var g=d(i);
            return(g===undefined||g==="")?null:g
            }
        }else{
    this.getId=function(){
        return null
        }
    }
var c=[];
for(var b=0;b<j;b++){
    e=k[b];
    var a=(e.mapping!==undefined&&e.mapping!==null)?e.mapping:e.name;
    c.push(this.createAccessor(a))
    }
    this.ef=c
},
simpleAccess:function(b,a){
    return b[a]
    },
createAccessor:function(){
    var a=/[\[\.]/;
    return function(c){
        if(Ext.isEmpty(c)){
            return Ext.emptyFn
            }
            if(Ext.isFunction(c)){
            return c
            }
            var b=String(c).search(a);
        if(b>=0){
            return new Function("obj","return obj"+(b>0?".":"")+c)
            }
            return function(d){
            return d[c]
            }
        }
}(),
extractValues:function(h,d,a){
    var g,c={};

    for(var e=0;e<a;e++){
        g=d[e];
        var b=this.ef[e](h);
        c[g.name]=g.convert((b!==undefined)?b:g.defaultValue,h)
        }
        return c
    }
});
Ext.data.JsonReader.Error=Ext.extend(Ext.Error,{
    constructor:function(b,a){
        this.arg=a;
        Ext.Error.call(this,b)
        },
    name:"Ext.data.JsonReader"
});
Ext.apply(Ext.data.JsonReader.Error.prototype,{
    lang:{
        response:"An error occurred while json-decoding your server response",
        "successProperty-response":'Could not locate your "successProperty" in your server response.  Please review your JsonReader config to ensure the config-property "successProperty" matches the property in your server-response.  See the JsonReader docs.',
        "root-undefined-config":'Your JsonReader was configured without a "root" property.  Please review your JsonReader config and make sure to define the root property.  See the JsonReader docs.',
        "idProperty-undefined":'Your JsonReader was configured without an "idProperty"  Please review your JsonReader configuration and ensure the "idProperty" is set (e.g.: "id").  See the JsonReader docs.',
        "root-empty":'Data was expected to be returned by the server in the "root" property of the response.  Please review your JsonReader configuration to ensure the "root" property matches that returned in the server-response.  See JsonReader docs.'
    }
});
Ext.data.ArrayReader=Ext.extend(Ext.data.JsonReader,{
    readRecords:function(r){
        this.arrayData=r;
        var l=this.meta,d=l?Ext.num(l.idIndex,l.id):null,b=this.recordType,q=b.prototype.fields,A=[],e=true,g;
        var u=this.getRoot(r);
        for(var z=0,B=u.length;z<B;z++){
            var t=u[z],a={},p=((d||d===0)&&t[d]!==undefined&&t[d]!==""?t[d]:null);
            for(var y=0,m=q.length;y<m;y++){
                var C=q.items[y],x=C.mapping!==undefined&&C.mapping!==null?C.mapping:y;
                g=t[x]!==undefined?t[x]:C.defaultValue;
                g=C.convert(g,t);
                a[C.name]=g
                }
                var c=new b(a,p);
            c.json=t;
            A[A.length]=c
            }
            var h=A.length;
        if(l.totalProperty){
            g=parseInt(this.getTotal(r),10);
            if(!isNaN(g)){
                h=g
                }
            }
        if(l.successProperty){
        g=this.getSuccess(r);
        if(g===false||g==="false"){
            e=false
            }
        }
    return{
    success:e,
    records:A,
    totalRecords:h
}
}
});
Ext.data.ArrayStore=Ext.extend(Ext.data.Store,{
    constructor:function(a){
        Ext.data.ArrayStore.superclass.constructor.call(this,Ext.apply(a,{
            reader:new Ext.data.ArrayReader(a)
            }))
        },
    loadData:function(e,b){
        if(this.expandData===true){
            var d=[];
            for(var c=0,a=e.length;c<a;c++){
                d[d.length]=[e[c]]
                }
                e=d
            }
            Ext.data.ArrayStore.superclass.loadData.call(this,e,b)
        }
    });
Ext.reg("arraystore",Ext.data.ArrayStore);
Ext.data.SimpleStore=Ext.data.ArrayStore;
Ext.reg("simplestore",Ext.data.SimpleStore);
Ext.data.JsonStore=Ext.extend(Ext.data.Store,{
    constructor:function(a){
        Ext.data.JsonStore.superclass.constructor.call(this,Ext.apply(a,{
            reader:new Ext.data.JsonReader(a)
            }))
        }
    });
Ext.reg("jsonstore",Ext.data.JsonStore);
Ext.data.XmlWriter=function(a){
    Ext.data.XmlWriter.superclass.constructor.apply(this,arguments);
    this.tpl=(typeof(this.tpl)==="string")?new Ext.XTemplate(this.tpl).compile():this.tpl.compile()
    };

Ext.extend(Ext.data.XmlWriter,Ext.data.DataWriter,{
    documentRoot:"xrequest",
    forceDocumentRoot:false,
    root:"records",
    xmlVersion:"1.0",
    xmlEncoding:"ISO-8859-15",
    tpl:'<tpl for="."><\u003fxml version="{version}" encoding="{encoding}"\u003f><tpl if="documentRoot"><{documentRoot}><tpl for="baseParams"><tpl for="."><{name}>{value}</{name}</tpl></tpl></tpl><tpl if="records.length&gt;1"><{root}></tpl><tpl for="records"><{parent.record}><tpl for="."><{name}>{value}</{name}></tpl></{parent.record}></tpl><tpl if="records.length&gt;1"></{root}></tpl><tpl if="documentRoot"></{documentRoot}></tpl></tpl>',
    render:function(b,c,a){
        c=this.toArray(c);
        b.xmlData=this.tpl.applyTemplate({
            version:this.xmlVersion,
            encoding:this.xmlEncoding,
            documentRoot:(c.length>0||this.forceDocumentRoot===true)?this.documentRoot:false,
            record:this.meta.record,
            root:this.root,
            baseParams:c,
            records:(Ext.isArray(a[0]))?a:[a]
            })
        },
    createRecord:function(a){
        return this.toArray(this.toHash(a))
        },
    updateRecord:function(a){
        return this.toArray(this.toHash(a))
        },
    destroyRecord:function(b){
        var a={};

        a[this.meta.idProperty]=b.id;
        return this.toArray(a)
        }
    });
Ext.data.XmlReader=function(a,b){
    a=a||{};

    Ext.applyIf(a,{
        idProperty:a.idProperty||a.idPath||a.id,
        successProperty:a.successProperty||a.success
        });
    Ext.data.XmlReader.superclass.constructor.call(this,a,b||a.fields)
    };

Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{
    read:function(a){
        var b=a.responseXML;
        if(!b){
            throw {
                message:"XmlReader.read: XML Document not available"
            }
        }
        return this.readRecords(b)
    },
readRecords:function(d){
    this.xmlData=d;
    var a=d.documentElement||d,c=Ext.DomQuery,g=0,e=true;
    if(this.meta.totalProperty){
        g=this.getTotal(a,0)
        }
        if(this.meta.successProperty){
        e=this.getSuccess(a)
        }
        var b=this.extractData(c.select(this.meta.record,a),true);
    return{
        success:e,
        records:b,
        totalRecords:g||b.length
        }
    },
readResponse:function(e,a){
    var d=Ext.DomQuery,g=a.responseXML;
    var b=new Ext.data.Response({
        action:e,
        success:this.getSuccess(g),
        message:this.getMessage(g),
        data:this.extractData(d.select(this.meta.record,g)||d.select(this.meta.root,g),false),
        raw:g
    });
    if(Ext.isEmpty(b.success)){
        throw new Ext.data.DataReader.Error("successProperty-response",this.meta.successProperty)
        }
        if(e===Ext.data.Api.actions.create){
        var c=Ext.isDefined(b.data);
        if(c&&Ext.isEmpty(b.data)){
            throw new Ext.data.JsonReader.Error("root-empty",this.meta.root)
            }else{
            if(!c){
                throw new Ext.data.JsonReader.Error("root-undefined-response",this.meta.root)
                }
            }
    }
return b
},
getSuccess:function(){
    return true
    },
buildExtractors:function(){
    if(this.ef){
        return
    }
    var l=this.meta,h=this.recordType,e=h.prototype.fields,k=e.items,j=e.length;
    if(l.totalProperty){
        this.getTotal=this.createAccessor(l.totalProperty)
        }
        if(l.successProperty){
        this.getSuccess=this.createAccessor(l.successProperty)
        }
        if(l.messageProperty){
        this.getMessage=this.createAccessor(l.messageProperty)
        }
        this.getRoot=function(g){
        return(!Ext.isEmpty(g[this.meta.record]))?g[this.meta.record]:g[this.meta.root]
        };

    if(l.idPath||l.idProperty){
        var d=this.createAccessor(l.idPath||l.idProperty);
        this.getId=function(g){
            var i=d(g)||g.id;
            return(i===undefined||i==="")?null:i
            }
        }else{
    this.getId=function(){
        return null
        }
    }
var c=[];
for(var b=0;b<j;b++){
    e=k[b];
    var a=(e.mapping!==undefined&&e.mapping!==null)?e.mapping:e.name;
    c.push(this.createAccessor(a))
    }
    this.ef=c
},
createAccessor:function(){
    var a=Ext.DomQuery;
    return function(b){
        switch(b){
            case this.meta.totalProperty:
                return function(c,d){
                return a.selectNumber(b,c,d)
                };

            break;
            case this.meta.successProperty:
                return function(d,e){
                var c=a.selectValue(b,d,true);
                var g=c!==false&&c!=="false";
                return g
                };

            break;
            default:
                return function(c,d){
                return a.selectValue(b,c,d)
                };

            break
            }
            }
}(),
extractValues:function(h,d,a){
    var g,c={};

    for(var e=0;e<a;e++){
        g=d[e];
        var b=this.ef[e](h);
        c[g.name]=g.convert((b!==undefined)?b:g.defaultValue,h)
        }
        return c
    }
});
Ext.data.XmlStore=Ext.extend(Ext.data.Store,{
    constructor:function(a){
        Ext.data.XmlStore.superclass.constructor.call(this,Ext.apply(a,{
            reader:new Ext.data.XmlReader(a)
            }))
        }
    });
Ext.reg("xmlstore",Ext.data.XmlStore);
Ext.data.GroupingStore=Ext.extend(Ext.data.Store,{
    constructor:function(d){
        d=d||{};

        this.hasMultiSort=true;
        this.multiSortInfo=this.multiSortInfo||{
            sorters:[]
        };

        var e=this.multiSortInfo.sorters,c=d.groupField||this.groupField,b=d.sortInfo||this.sortInfo,a=d.groupDir||this.groupDir;
        if(c){
            e.push({
                field:c,
                direction:a
            })
            }
            if(b){
            e.push(b)
            }
            Ext.data.GroupingStore.superclass.constructor.call(this,d);
        this.addEvents("groupchange");
        this.applyGroupField()
        },
    remoteGroup:false,
    groupOnSort:false,
    groupDir:"ASC",
    clearGrouping:function(){
        this.groupField=false;
        if(this.remoteGroup){
            if(this.baseParams){
                delete this.baseParams.groupBy;
                delete this.baseParams.groupDir
                }
                var a=this.lastOptions;
            if(a&&a.params){
                delete a.params.groupBy;
                delete a.params.groupDir
                }
                this.reload()
            }else{
            this.sort();
            this.fireEvent("datachanged",this)
            }
        },
groupBy:function(d,a,c){
    c=c?(String(c).toUpperCase()=="DESC"?"DESC":"ASC"):this.groupDir;
    if(this.groupField==d&&this.groupDir==c&&!a){
        return
    }
    sorters=this.multiSortInfo.sorters;
    if(sorters.length>0&&sorters[0].field==this.groupField){
        sorters.shift()
        }
        this.groupField=d;
    this.groupDir=c;
    this.applyGroupField();
    var b=function(){
        this.fireEvent("groupchange",this,this.getGroupState())
        };

    if(this.groupOnSort){
        this.sort(d,c);
        b.call(this);
        return
    }
    if(this.remoteGroup){
        this.on("load",b,this,{
            single:true
        });
        this.reload()
        }else{
        this.sort(sorters);
        b.call(this)
        }
    },
sort:function(h,c){
    if(this.remoteSort){
        return Ext.data.GroupingStore.superclass.sort.call(this,h,c)
        }
        var g=[];
    if(Ext.isArray(arguments[0])){
        g=arguments[0]
        }else{
        if(h==undefined){
            g=[this.sortInfo]
            }else{
            var e=this.fields.get(h);
            if(!e){
                return false
                }
                var b=e.name,a=this.sortInfo||null,d=this.sortToggle?this.sortToggle[b]:null;
            if(!c){
                if(a&&a.field==b){
                    c=(this.sortToggle[b]||"ASC").toggle("ASC","DESC")
                    }else{
                    c=e.sortDir
                    }
                }
            this.sortToggle[b]=c;
        this.sortInfo={
            field:b,
            direction:c
        };

        g=[this.sortInfo]
        }
    }
if(this.groupField){
    g.unshift({
        direction:this.groupDir,
        field:this.groupField
        })
    }
    return this.multiSort.call(this,g,c)
},
applyGroupField:function(){
    if(this.remoteGroup){
        if(!this.baseParams){
            this.baseParams={}
        }
        Ext.apply(this.baseParams,{
        groupBy:this.groupField,
        groupDir:this.groupDir
        });
    var a=this.lastOptions;
    if(a&&a.params){
        a.params.groupDir=this.groupDir;
        delete a.params.groupBy
        }
    }
},
applyGrouping:function(a){
    if(this.groupField!==false){
        this.groupBy(this.groupField,true,this.groupDir);
        return true
        }else{
        if(a===true){
            this.fireEvent("datachanged",this)
            }
            return false
        }
    },
getGroupState:function(){
    return this.groupOnSort&&this.groupField!==false?(this.sortInfo?this.sortInfo.field:undefined):this.groupField
    }
});
Ext.reg("groupingstore",Ext.data.GroupingStore);
Ext.data.DirectProxy=function(a){
    Ext.apply(this,a);
    if(typeof this.paramOrder=="string"){
        this.paramOrder=this.paramOrder.split(/[\s,|]/)
        }
        Ext.data.DirectProxy.superclass.constructor.call(this,a)
    };

Ext.extend(Ext.data.DirectProxy,Ext.data.DataProxy,{
    paramOrder:undefined,
    paramsAsHash:true,
    directFn:undefined,
    doRequest:function(b,c,a,e,k,l,n){
        var j=[],h=this.api[b]||this.directFn;
        switch(b){
            case Ext.data.Api.actions.create:
                j.push(a.jsonData);
                break;
            case Ext.data.Api.actions.read:
                if(h.directCfg.method.len>0){
                if(this.paramOrder){
                    for(var d=0,g=this.paramOrder.length;d<g;d++){
                        j.push(a[this.paramOrder[d]])
                        }
                    }else{
                if(this.paramsAsHash){
                    j.push(a)
                    }
                }
            }
        break;
case Ext.data.Api.actions.update:
    j.push(a.jsonData);
    break;
    case Ext.data.Api.actions.destroy:
    j.push(a.jsonData);
    break
    }
    var m={
    params:a||{},
    request:{
        callback:k,
        scope:l,
        arg:n
    },
    reader:e
};

j.push(this.createCallback(b,c,m),this);
    h.apply(window,j)
    },
createCallback:function(d,a,b){
    var c=this;
    return function(e,g){
        if(!g.status){
            if(d===Ext.data.Api.actions.read){
                c.fireEvent("loadexception",c,b,g,null)
                }
                c.fireEvent("exception",c,"remote",d,b,g,null);
            b.request.callback.call(b.request.scope,null,b.request.arg,false);
            return
        }
        if(d===Ext.data.Api.actions.read){
            c.onRead(d,b,e,g)
            }else{
            c.onWrite(d,b,e,g,a)
            }
        }
},
onRead:function(g,e,a,d){
    var b;
    try{
        b=e.reader.readRecords(a)
        }catch(c){
        this.fireEvent("loadexception",this,e,d,c);
        this.fireEvent("exception",this,"response",g,e,d,c);
        e.request.callback.call(e.request.scope,null,e.request.arg,false);
        return
    }
    this.fireEvent("load",this,d,e.request.arg);
    e.request.callback.call(e.request.scope,b,e.request.arg,true)
    },
onWrite:function(g,d,a,c,b){
    var e=d.reader.extractData(d.reader.getRoot(a),false);
    var h=d.reader.getSuccess(a);
    h=(h!==false);
    if(h){
        this.fireEvent("write",this,g,e,c,b,d.request.arg)
        }else{
        this.fireEvent("exception",this,"remote",g,d,a,b)
        }
        d.request.callback.call(d.request.scope,e,c,h)
    }
});
Ext.data.DirectStore=Ext.extend(Ext.data.Store,{
    constructor:function(a){
        var b=Ext.apply({},{
            batchTransactions:false
        },a);
        Ext.data.DirectStore.superclass.constructor.call(this,Ext.apply(b,{
            proxy:Ext.isDefined(b.proxy)?b.proxy:new Ext.data.DirectProxy(Ext.copyTo({},b,"paramOrder,paramsAsHash,directFn,api")),
            reader:(!Ext.isDefined(b.reader)&&b.fields)?new Ext.data.JsonReader(Ext.copyTo({},b,"totalProperty,root,idProperty"),b.fields):b.reader
            }))
        }
    });
Ext.reg("directstore",Ext.data.DirectStore);
Ext.Direct=Ext.extend(Ext.util.Observable,{
    exceptions:{
        TRANSPORT:"xhr",
        PARSE:"parse",
        LOGIN:"login",
        SERVER:"exception"
    },
    constructor:function(){
        this.addEvents("event","exception");
        this.transactions={};

        this.providers={}
    },
addProvider:function(e){
    var c=arguments;
    if(c.length>1){
        for(var d=0,b=c.length;d<b;d++){
            this.addProvider(c[d])
            }
            return
    }
    if(!e.events){
        e=new Ext.Direct.PROVIDERS[e.type](e)
        }
        e.id=e.id||Ext.id();
    this.providers[e.id]=e;
    e.on("data",this.onProviderData,this);
    e.on("exception",this.onProviderException,this);
    if(!e.isConnected()){
        e.connect()
        }
        return e
    },
getProvider:function(a){
    return this.providers[a]
    },
removeProvider:function(b){
    var a=b.id?b:this.providers[b];
    a.un("data",this.onProviderData,this);
    a.un("exception",this.onProviderException,this);
    delete this.providers[a.id];
    return a
    },
addTransaction:function(a){
    this.transactions[a.tid]=a;
    return a
    },
removeTransaction:function(a){
    delete this.transactions[a.tid||a];
    return a
    },
getTransaction:function(a){
    return this.transactions[a.tid||a]
    },
onProviderData:function(d,c){
    if(Ext.isArray(c)){
        for(var b=0,a=c.length;b<a;b++){
            this.onProviderData(d,c[b])
            }
            return
    }
    if(c.name&&c.name!="event"&&c.name!="exception"){
        this.fireEvent(c.name,c)
        }else{
        if(c.type=="exception"){
            this.fireEvent("exception",c)
            }
        }
    this.fireEvent("event",c,d)
    },
createEvent:function(a,b){
    return new Ext.Direct.eventTypes[a.type](Ext.apply(a,b))
    }
});
Ext.Direct=new Ext.Direct();
Ext.Direct.TID=1;
Ext.Direct.PROVIDERS={};

Ext.Direct.Transaction=function(a){
    Ext.apply(this,a);
    this.tid=++Ext.Direct.TID;
    this.retryCount=0
    };

Ext.Direct.Transaction.prototype={
    send:function(){
        this.provider.queueTransaction(this)
        },
    retry:function(){
        this.retryCount++;
        this.send()
        },
    getProvider:function(){
        return this.provider
        }
    };

Ext.Direct.Event=function(a){
    Ext.apply(this,a)
    };

Ext.Direct.Event.prototype={
    status:true,
    getData:function(){
        return this.data
        }
    };

Ext.Direct.RemotingEvent=Ext.extend(Ext.Direct.Event,{
    type:"rpc",
    getTransaction:function(){
        return this.transaction||Ext.Direct.getTransaction(this.tid)
        }
    });
Ext.Direct.ExceptionEvent=Ext.extend(Ext.Direct.RemotingEvent,{
    status:false,
    type:"exception"
});
Ext.Direct.eventTypes={
    rpc:Ext.Direct.RemotingEvent,
    event:Ext.Direct.Event,
    exception:Ext.Direct.ExceptionEvent
    };

Ext.direct.Provider=Ext.extend(Ext.util.Observable,{
    priority:1,
    constructor:function(a){
        Ext.apply(this,a);
        this.addEvents("connect","disconnect","data","exception");
        Ext.direct.Provider.superclass.constructor.call(this,a)
        },
    isConnected:function(){
        return false
        },
    connect:Ext.emptyFn,
    disconnect:Ext.emptyFn
    });
Ext.direct.JsonProvider=Ext.extend(Ext.direct.Provider,{
    parseResponse:function(a){
        if(!Ext.isEmpty(a.responseText)){
            if(typeof a.responseText=="object"){
                return a.responseText
                }
                return Ext.decode(a.responseText)
            }
            return null
        },
    getEvents:function(j){
        var g=null;
        try{
            g=this.parseResponse(j)
            }catch(h){
            var d=new Ext.Direct.ExceptionEvent({
                data:h,
                xhr:j,
                code:Ext.Direct.exceptions.PARSE,
                message:"Error parsing json response: \n\n "+g
                });
            return[d]
            }
            var c=[];
        if(Ext.isArray(g)){
            for(var b=0,a=g.length;b<a;b++){
                c.push(Ext.Direct.createEvent(g[b]))
                }
            }else{
        c.push(Ext.Direct.createEvent(g))
        }
        return c
    }
});
Ext.direct.PollingProvider=Ext.extend(Ext.direct.JsonProvider,{
    priority:3,
    interval:3000,
    constructor:function(a){
        Ext.direct.PollingProvider.superclass.constructor.call(this,a);
        this.addEvents("beforepoll","poll")
        },
    isConnected:function(){
        return !!this.pollTask
        },
    connect:function(){
        if(this.url&&!this.pollTask){
            this.pollTask=Ext.TaskMgr.start({
                run:function(){
                    if(this.fireEvent("beforepoll",this)!==false){
                        if(typeof this.url=="function"){
                            this.url(this.baseParams)
                            }else{
                            Ext.Ajax.request({
                                url:this.url,
                                callback:this.onData,
                                scope:this,
                                params:this.baseParams
                                })
                            }
                        }
                },
            interval:this.interval,
            scope:this
        });
    this.fireEvent("connect",this)
    }else{
    if(!this.url){
        throw"Error initializing PollingProvider, no url configured."
        }
    }
},
disconnect:function(){
    if(this.pollTask){
        Ext.TaskMgr.stop(this.pollTask);
        delete this.pollTask;
        this.fireEvent("disconnect",this)
        }
    },
onData:function(d,j,h){
    if(j){
        var c=this.getEvents(h);
        for(var b=0,a=c.length;b<a;b++){
            var g=c[b];
            this.fireEvent("data",this,g)
            }
        }else{
    var g=new Ext.Direct.ExceptionEvent({
        data:g,
        code:Ext.Direct.exceptions.TRANSPORT,
        message:"Unable to connect to the server.",
        xhr:h
    });
    this.fireEvent("data",this,g)
    }
}
});
Ext.Direct.PROVIDERS.polling=Ext.direct.PollingProvider;
Ext.direct.RemotingProvider=Ext.extend(Ext.direct.JsonProvider,{
    enableBuffer:10,
    maxRetries:1,
    timeout:undefined,
    constructor:function(a){
        Ext.direct.RemotingProvider.superclass.constructor.call(this,a);
        this.addEvents("beforecall","call");
        this.namespace=(Ext.isString(this.namespace))?Ext.ns(this.namespace):this.namespace||window;
        this.transactions={};

        this.callBuffer=[]
        },
    initAPI:function(){
        var h=this.actions;
        for(var j in h){
            var d=this.namespace[j]||(this.namespace[j]={}),e=h[j];
            for(var g=0,b=e.length;g<b;g++){
                var a=e[g];
                d[a.name]=this.createMethod(j,a)
                }
            }
        },
isConnected:function(){
    return !!this.connected
    },
connect:function(){
    if(this.url){
        this.initAPI();
        this.connected=true;
        this.fireEvent("connect",this)
        }else{
        if(!this.url){
            throw"Error initializing RemotingProvider, no url configured."
            }
        }
},
disconnect:function(){
    if(this.connected){
        this.connected=false;
        this.fireEvent("disconnect",this)
        }
    },
onData:function(a,h,j){
    if(h){
        var k=this.getEvents(j);
        for(var b=0,c=k.length;b<c;b++){
            var d=k[b],l=this.getTransaction(d);
            this.fireEvent("data",this,d);
            if(l){
                this.doCallback(l,d,true);
                Ext.Direct.removeTransaction(l)
                }
            }
        }else{
    var g=[].concat(a.ts);
    for(var b=0,c=g.length;b<c;b++){
        var l=this.getTransaction(g[b]);
        if(l&&l.retryCount<this.maxRetries){
            l.retry()
            }else{
            var d=new Ext.Direct.ExceptionEvent({
                data:d,
                transaction:l,
                code:Ext.Direct.exceptions.TRANSPORT,
                message:"Unable to connect to the server.",
                xhr:j
            });
            this.fireEvent("data",this,d);
            if(l){
                this.doCallback(l,d,false);
                Ext.Direct.removeTransaction(l)
                }
            }
    }
}
},
getCallData:function(a){
    return{
        action:a.action,
        method:a.method,
        data:a.data,
        type:"rpc",
        tid:a.tid
        }
    },
doSend:function(d){
    var g={
        url:this.url,
        callback:this.onData,
        scope:this,
        ts:d,
        timeout:this.timeout
        },b;
    if(Ext.isArray(d)){
        b=[];
        for(var c=0,a=d.length;c<a;c++){
            b.push(this.getCallData(d[c]))
            }
        }else{
    b=this.getCallData(d)
    }
    if(this.enableUrlEncode){
    var e={};

    e[Ext.isString(this.enableUrlEncode)?this.enableUrlEncode:"data"]=Ext.encode(b);
    g.params=e
    }else{
    g.jsonData=b
    }
    Ext.Ajax.request(g)
},
combineAndSend:function(){
    var a=this.callBuffer.length;
    if(a>0){
        this.doSend(a==1?this.callBuffer[0]:this.callBuffer);
        this.callBuffer=[]
        }
    },
queueTransaction:function(a){
    if(a.form){
        this.processForm(a);
        return
    }
    this.callBuffer.push(a);
    if(this.enableBuffer){
        if(!this.callTask){
            this.callTask=new Ext.util.DelayedTask(this.combineAndSend,this)
            }
            this.callTask.delay(Ext.isNumber(this.enableBuffer)?this.enableBuffer:10)
        }else{
        this.combineAndSend()
        }
    },
doCall:function(i,a,b){
    var h=null,e=b[a.len],g=b[a.len+1];
    if(a.len!==0){
        h=b.slice(0,a.len)
        }
        var d=new Ext.Direct.Transaction({
        provider:this,
        args:b,
        action:i,
        method:a.name,
        data:h,
        cb:g&&Ext.isFunction(e)?e.createDelegate(g):e
        });
    if(this.fireEvent("beforecall",this,d)!==false){
        Ext.Direct.addTransaction(d);
        this.queueTransaction(d);
        this.fireEvent("call",this,d)
        }
    },
doForm:function(j,b,g,i,e){
    var d=new Ext.Direct.Transaction({
        provider:this,
        action:j,
        method:b.name,
        args:[g,i,e],
        cb:e&&Ext.isFunction(i)?i.createDelegate(e):i,
        isForm:true
    });
    if(this.fireEvent("beforecall",this,d)!==false){
        Ext.Direct.addTransaction(d);
        var a=String(g.getAttribute("enctype")).toLowerCase()=="multipart/form-data",h={
            extTID:d.tid,
            extAction:j,
            extMethod:b.name,
            extType:"rpc",
            extUpload:String(a)
            };

        Ext.apply(d,{
            form:Ext.getDom(g),
            isUpload:a,
            params:i&&Ext.isObject(i.params)?Ext.apply(h,i.params):h
            });
        this.fireEvent("call",this,d);
        this.processForm(d)
        }
    },
processForm:function(a){
    Ext.Ajax.request({
        url:this.url,
        params:a.params,
        callback:this.onData,
        scope:this,
        form:a.form,
        isUpload:a.isUpload,
        ts:a
    })
    },
createMethod:function(d,a){
    var b;
    if(!a.formHandler){
        b=function(){
            this.doCall(d,a,Array.prototype.slice.call(arguments,0))
            }.createDelegate(this)
        }else{
        b=function(e,g,c){
            this.doForm(d,a,e,g,c)
            }.createDelegate(this)
        }
        b.directCfg={
        action:d,
        method:a
    };

    return b
    },
getTransaction:function(a){
    return a&&a.tid?Ext.Direct.getTransaction(a.tid):null
    },
doCallback:function(c,g){
    var d=g.status?"success":"failure";
    if(c&&c.cb){
        var b=c.cb,a=Ext.isDefined(g.result)?g.result:g.data;
        if(Ext.isFunction(b)){
            b(a,g)
            }else{
            Ext.callback(b[d],b.scope,[a,g]);
            Ext.callback(b.callback,b.scope,[a,g])
            }
        }
}
});
Ext.Direct.PROVIDERS.remoting=Ext.direct.RemotingProvider;
Ext.Resizable=Ext.extend(Ext.util.Observable,{
    constructor:function(d,e){
        this.el=Ext.get(d);
        if(e&&e.wrap){
            e.resizeChild=this.el;
            this.el=this.el.wrap(typeof e.wrap=="object"?e.wrap:{
                cls:"xresizable-wrap"
            });
            this.el.id=this.el.dom.id=e.resizeChild.id+"-rzwrap";
            this.el.setStyle("overflow","hidden");
            this.el.setPositioning(e.resizeChild.getPositioning());
            e.resizeChild.clearPositioning();
            if(!e.width||!e.height){
                var g=e.resizeChild.getSize();
                this.el.setSize(g.width,g.height)
                }
                if(e.pinned&&!e.adjustments){
                e.adjustments="auto"
                }
            }
        this.proxy=this.el.createProxy({
        tag:"div",
        cls:"x-resizable-proxy",
        id:this.el.id+"-rzproxy"
        },Ext.getBody());
    this.proxy.unselectable();
    this.proxy.enableDisplayMode("block");
    Ext.apply(this,e);
    if(this.pinned){
        this.disableTrackOver=true;
        this.el.addClass("x-resizable-pinned")
        }
        var k=this.el.getStyle("position");
    if(k!="absolute"&&k!="fixed"){
        this.el.setStyle("position","relative")
        }
        if(!this.handles){
        this.handles="s,e,se";
        if(this.multiDirectional){
            this.handles+=",n,w"
            }
        }
    if(this.handles=="all"){
    this.handles="n s e w ne nw se sw"
    }
    var o=this.handles.split(/\s*?[,;]\s*?| /);
    var c=Ext.Resizable.positions;
    for(var j=0,l=o.length;j<l;j++){
    if(o[j]&&c[o[j]]){
        var n=c[o[j]];
        this[n]=new Ext.Resizable.Handle(this,n,this.disableTrackOver,this.transparent,this.handleCls)
        }
    }
this.corner=this.southeast;
if(this.handles.indexOf("n")!=-1||this.handles.indexOf("w")!=-1){
    this.updateBox=true
    }
    this.activeHandle=null;
if(this.resizeChild){
    if(typeof this.resizeChild=="boolean"){
        this.resizeChild=Ext.get(this.el.dom.firstChild,true)
        }else{
        this.resizeChild=Ext.get(this.resizeChild,true)
        }
    }
if(this.adjustments=="auto"){
    var b=this.resizeChild;
    var m=this.west,h=this.east,a=this.north,o=this.south;
    if(b&&(m||a)){
        b.position("relative");
        b.setLeft(m?m.el.getWidth():0);
        b.setTop(a?a.el.getHeight():0)
        }
        this.adjustments=[(h?-h.el.getWidth():0)+(m?-m.el.getWidth():0),(a?-a.el.getHeight():0)+(o?-o.el.getHeight():0)-1]
    }
    if(this.draggable){
    this.dd=this.dynamic?this.el.initDD(null):this.el.initDDProxy(null,{
        dragElId:this.proxy.id
        });
    this.dd.setHandleElId(this.resizeChild?this.resizeChild.id:this.el.id);
    if(this.constrainTo){
        this.dd.constrainTo(this.constrainTo)
        }
    }
this.addEvents("beforeresize","resize");
if(this.width!==null&&this.height!==null){
    this.resizeTo(this.width,this.height)
    }else{
    this.updateChildSize()
    }
    if(Ext.isIE){
    this.el.dom.style.zoom=1
    }
    Ext.Resizable.superclass.constructor.call(this)
},
adjustments:[0,0],
animate:false,
disableTrackOver:false,
draggable:false,
duration:0.35,
dynamic:false,
easing:"easeOutStrong",
enabled:true,
handles:false,
multiDirectional:false,
height:null,
width:null,
heightIncrement:0,
widthIncrement:0,
minHeight:5,
minWidth:5,
maxHeight:10000,
maxWidth:10000,
minX:0,
minY:0,
pinned:false,
preserveRatio:false,
resizeChild:false,
transparent:false,
resizeTo:function(b,a){
    this.el.setSize(b,a);
    this.updateChildSize();
    this.fireEvent("resize",this,b,a,null)
    },
startSizing:function(c,b){
    this.fireEvent("beforeresize",this,c);
    if(this.enabled){
        if(!this.overlay){
            this.overlay=this.el.createProxy({
                tag:"div",
                cls:"x-resizable-overlay",
                html:"&#160;"
            },Ext.getBody());
            this.overlay.unselectable();
            this.overlay.enableDisplayMode("block");
            this.overlay.on({
                scope:this,
                mousemove:this.onMouseMove,
                mouseup:this.onMouseUp
                })
            }
            this.overlay.setStyle("cursor",b.el.getStyle("cursor"));
        this.resizing=true;
        this.startBox=this.el.getBox();
        this.startPoint=c.getXY();
        this.offsets=[(this.startBox.x+this.startBox.width)-this.startPoint[0],(this.startBox.y+this.startBox.height)-this.startPoint[1]];
        this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));
        this.overlay.show();
        if(this.constrainTo){
            var a=Ext.get(this.constrainTo);
            this.resizeRegion=a.getRegion().adjust(a.getFrameWidth("t"),a.getFrameWidth("l"),-a.getFrameWidth("b"),-a.getFrameWidth("r"))
            }
            this.proxy.setStyle("visibility","hidden");
        this.proxy.show();
        this.proxy.setBox(this.startBox);
        if(!this.dynamic){
            this.proxy.setStyle("visibility","visible")
            }
        }
},
onMouseDown:function(a,b){
    if(this.enabled){
        b.stopEvent();
        this.activeHandle=a;
        this.startSizing(b,a)
        }
    },
onMouseUp:function(b){
    this.activeHandle=null;
    var a=this.resizeElement();
    this.resizing=false;
    this.handleOut();
    this.overlay.hide();
    this.proxy.hide();
    this.fireEvent("resize",this,a.width,a.height,b)
    },
updateChildSize:function(){
    if(this.resizeChild){
        var d=this.el;
        var e=this.resizeChild;
        var c=this.adjustments;
        if(d.dom.offsetWidth){
            var a=d.getSize(true);
            e.setSize(a.width+c[0],a.height+c[1])
            }
            if(Ext.isIE){
            setTimeout(function(){
                if(d.dom.offsetWidth){
                    var g=d.getSize(true);
                    e.setSize(g.width+c[0],g.height+c[1])
                    }
                },10)
        }
    }
},
snap:function(c,e,b){
    if(!e||!c){
        return c
        }
        var d=c;
    var a=c%e;
    if(a>0){
        if(a>(e/2)){
            d=c+(e-a)
            }else{
            d=c-a
            }
        }
    return Math.max(b,d)
},
resizeElement:function(){
    var a=this.proxy.getBox();
    if(this.updateBox){
        this.el.setBox(a,false,this.animate,this.duration,null,this.easing)
        }else{
        this.el.setSize(a.width,a.height,this.animate,this.duration,null,this.easing)
        }
        this.updateChildSize();
    if(!this.dynamic){
        this.proxy.hide()
        }
        if(this.draggable&&this.constrainTo){
        this.dd.resetConstraints();
        this.dd.constrainTo(this.constrainTo)
        }
        return a
    },
constrain:function(b,c,a,d){
    if(b-c<a){
        c=b-a
        }else{
        if(b-c>d){
            c=b-d
            }
        }
    return c
},
onMouseMove:function(z){
    if(this.enabled&&this.activeHandle){
        try{
            if(this.resizeRegion&&!this.resizeRegion.contains(z.getPoint())){
                return
            }
            var t=this.curSize||this.startBox,l=this.startBox.x,k=this.startBox.y,c=l,b=k,m=t.width,u=t.height,d=m,o=u,n=this.minWidth,A=this.minHeight,s=this.maxWidth,D=this.maxHeight,i=this.widthIncrement,a=this.heightIncrement,B=z.getXY(),r=-(this.startPoint[0]-Math.max(this.minX,B[0])),p=-(this.startPoint[1]-Math.max(this.minY,B[1])),j=this.activeHandle.position,E,g;
            switch(j){
                case"east":
                    m+=r;
                    m=Math.min(Math.max(n,m),s);
                    break;
                case"south":
                    u+=p;
                    u=Math.min(Math.max(A,u),D);
                    break;
                case"southeast":
                    m+=r;
                    u+=p;
                    m=Math.min(Math.max(n,m),s);
                    u=Math.min(Math.max(A,u),D);
                    break;
                case"north":
                    p=this.constrain(u,p,A,D);
                    k+=p;
                    u-=p;
                    break;
                case"west":
                    r=this.constrain(m,r,n,s);
                    l+=r;
                    m-=r;
                    break;
                case"northeast":
                    m+=r;
                    m=Math.min(Math.max(n,m),s);
                    p=this.constrain(u,p,A,D);
                    k+=p;
                    u-=p;
                    break;
                case"northwest":
                    r=this.constrain(m,r,n,s);
                    p=this.constrain(u,p,A,D);
                    k+=p;
                    u-=p;
                    l+=r;
                    m-=r;
                    break;
                case"southwest":
                    r=this.constrain(m,r,n,s);
                    u+=p;
                    u=Math.min(Math.max(A,u),D);
                    l+=r;
                    m-=r;
                    break
                    }
                    var q=this.snap(m,i,n);
            var C=this.snap(u,a,A);
            if(q!=m||C!=u){
                switch(j){
                    case"northeast":
                        k-=C-u;
                        break;
                    case"north":
                        k-=C-u;
                        break;
                    case"southwest":
                        l-=q-m;
                        break;
                    case"west":
                        l-=q-m;
                        break;
                    case"northwest":
                        l-=q-m;
                        k-=C-u;
                        break
                        }
                        m=q;
                u=C
                }
                if(this.preserveRatio){
                switch(j){
                    case"southeast":case"east":
                        u=o*(m/d);
                        u=Math.min(Math.max(A,u),D);
                        m=d*(u/o);
                        break;
                    case"south":
                        m=d*(u/o);
                        m=Math.min(Math.max(n,m),s);
                        u=o*(m/d);
                        break;
                    case"northeast":
                        m=d*(u/o);
                        m=Math.min(Math.max(n,m),s);
                        u=o*(m/d);
                        break;
                    case"north":
                        E=m;
                        m=d*(u/o);
                        m=Math.min(Math.max(n,m),s);
                        u=o*(m/d);
                        l+=(E-m)/2;
                        break;
                    case"southwest":
                        u=o*(m/d);
                        u=Math.min(Math.max(A,u),D);
                        E=m;
                        m=d*(u/o);
                        l+=E-m;
                        break;
                    case"west":
                        g=u;
                        u=o*(m/d);
                        u=Math.min(Math.max(A,u),D);
                        k+=(g-u)/2;
                        E=m;
                        m=d*(u/o);
                        l+=E-m;
                        break;
                    case"northwest":
                        E=m;
                        g=u;
                        u=o*(m/d);
                        u=Math.min(Math.max(A,u),D);
                        m=d*(u/o);
                        k+=g-u;
                        l+=E-m;
                        break
                        }
                    }
            this.proxy.setBounds(l,k,m,u);
        if(this.dynamic){
            this.resizeElement()
            }
        }catch(v){}
}
},
handleOver:function(){
    if(this.enabled){
        this.el.addClass("x-resizable-over")
        }
    },
handleOut:function(){
    if(!this.resizing){
        this.el.removeClass("x-resizable-over")
        }
    },
getEl:function(){
    return this.el
    },
getResizeChild:function(){
    return this.resizeChild
    },
destroy:function(b){
    Ext.destroy(this.dd,this.overlay,this.proxy);
    this.overlay=null;
    this.proxy=null;
    var c=Ext.Resizable.positions;
    for(var a in c){
        if(typeof c[a]!="function"&&this[c[a]]){
            this[c[a]].destroy()
            }
        }
    if(b){
    this.el.update("");
    Ext.destroy(this.el);
    this.el=null
    }
    this.purgeListeners()
},
syncHandleHeight:function(){
    var a=this.el.getHeight(true);
    if(this.west){
        this.west.el.setHeight(a)
        }
        if(this.east){
        this.east.el.setHeight(a)
        }
    }
});
Ext.Resizable.positions={
    n:"north",
    s:"south",
    e:"east",
    w:"west",
    se:"southeast",
    sw:"southwest",
    nw:"northwest",
    ne:"northeast"
};

Ext.Resizable.Handle=Ext.extend(Object,{
    constructor:function(d,g,c,e,a){
        if(!this.tpl){
            var b=Ext.DomHelper.createTemplate({
                tag:"div",
                cls:"x-resizable-handle x-resizable-handle-{0}"
            });
            b.compile();
            Ext.Resizable.Handle.prototype.tpl=b
            }
            this.position=g;
        this.rz=d;
        this.el=this.tpl.append(d.el.dom,[this.position],true);
        this.el.unselectable();
        if(e){
            this.el.setOpacity(0)
            }
            if(!Ext.isEmpty(a)){
            this.el.addClass(a)
            }
            this.el.on("mousedown",this.onMouseDown,this);
        if(!c){
            this.el.on({
                scope:this,
                mouseover:this.onMouseOver,
                mouseout:this.onMouseOut
                })
            }
        },
afterResize:function(a){},
    onMouseDown:function(a){
    this.rz.onMouseDown(this,a)
    },
onMouseOver:function(a){
    this.rz.handleOver(this,a)
    },
onMouseOut:function(a){
    this.rz.handleOut(this,a)
    },
destroy:function(){
    Ext.destroy(this.el);
    this.el=null
    }
});
Ext.Window=Ext.extend(Ext.Panel,{
    baseCls:"x-window",
    resizable:true,
    draggable:true,
    closable:true,
    closeAction:"close",
    constrain:false,
    constrainHeader:false,
    plain:false,
    minimizable:false,
    maximizable:false,
    minHeight:100,
    minWidth:200,
    expandOnShow:true,
    collapsible:false,
    initHidden:undefined,
    hidden:true,
    elements:"header,body",
    frame:true,
    floating:true,
    initComponent:function(){
        this.initTools();
        Ext.Window.superclass.initComponent.call(this);
        this.addEvents("resize","maximize","minimize","restore");
        if(Ext.isDefined(this.initHidden)){
            this.hidden=this.initHidden
            }
            if(this.hidden===false){
            this.hidden=true;
            this.show()
            }
        },
getState:function(){
    return Ext.apply(Ext.Window.superclass.getState.call(this)||{},this.getBox(true))
    },
onRender:function(b,a){
    Ext.Window.superclass.onRender.call(this,b,a);
    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();
        this.mon(this.mask,"click",this.focus,this)
        }
        if(this.maximizable){
        this.mon(this.header,"dblclick",this.toggleMaximize,this)
        }
    },
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,
            handleCls:"x-window-handle"
        });
        this.resizer.window=this;
        this.mon(this.resizer,"beforeresize",this.beforeResize,this)
        }
        if(this.draggable){
        this.header.addClass("x-window-draggable")
        }
        this.mon(this.el,"mousedown",this.toFront,this);
    this.manager=this.manager||Ext.WindowMgr;
    this.manager.register(this);
    if(this.maximized){
        this.maximized=false;
        this.maximize()
        }
        if(this.closable){
        var a=this.getKeyMap();
        a.on(27,this.onEsc,this);
        a.disable()
        }
    },
initDraggable:function(){
    this.dd=new Ext.Window.DD(this)
    },
onEsc:function(a,b){
    b.stopEvent();
    this[this.closeAction]()
    },
beforeDestroy:function(){
    if(this.rendered){
        this.hide();
        this.clearAnchor();
        Ext.destroy(this.focusEl,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
        })
        }
        if(this.closable){
        this.addTool({
            id:"close",
            handler:this[this.closeAction].createDelegate(this,[])
            })
        }
    },
resizerAction:function(){
    var a=this.proxy.getBox();
    this.proxy.hide();
    this.window.handleResize(a);
    return a
    },
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(b){
    var a=this.resizeBox;
    if(a.x!=b.x||a.y!=b.y){
        this.updateBox(b)
        }else{
        this.setSize(b);
        if(Ext.isIE6&&Ext.isStrict){
            this.doLayout()
            }
        }
    this.focus();
this.updateHandles();
this.saveState()
},
focus:function(){
    var e=this.focusEl,a=this.defaultButton,c=typeof a,d,b;
    if(Ext.isDefined(a)){
        if(Ext.isNumber(a)&&this.fbar){
            e=this.fbar.items.get(a)
            }else{
            if(Ext.isString(a)){
                e=Ext.getCmp(a)
                }else{
                e=a
                }
            }
        d=e.getEl();
    b=Ext.getDom(this.container);
    if(d&&b){
        if(!Ext.lib.Region.getRegion(b).contains(Ext.lib.Region.getRegion(d.dom))){
            return
        }
    }
}
e=e||this.focusEl;
e.focus.defer(10,e)
},
setAnimateTarget:function(a){
    a=Ext.get(a);
    this.animateTarget=a
    },
beforeShow:function(){
    delete this.el.lastXY;
    delete this.el.lastLT;
    if(this.x===undefined||this.y===undefined){
        var a=this.el.getAlignToXY(this.container,"c-c");
        var b=this.el.translatePoints(a[0],a[1]);
        this.x=this.x===undefined?b.left:this.x;
        this.y=this.y===undefined?b.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(c,a,b){
    if(!this.rendered){
        this.render(Ext.getBody())
        }
        if(this.hidden===false){
        this.toFront();
        return this
        }
        if(this.fireEvent("beforeshow",this)===false){
        return this
        }
        if(a){
        this.on("show",a,b,{
            single:true
        })
        }
        this.hidden=false;
    if(Ext.isDefined(c)){
        this.setAnimateTarget(c)
        }
        this.beforeShow();
    if(this.animateTarget){
        this.animShow()
        }else{
        this.afterShow()
        }
        return this
    },
afterShow:function(b){
    if(this.isDestroyed){
        return false
        }
        this.proxy.hide();
    this.el.setStyle("display","block");
    this.el.show();
    if(this.maximized){
        this.fitContainer()
        }
        if(Ext.isMac&&Ext.isGecko2){
        this.cascade(this.setAutoScroll)
        }
        if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){
        Ext.EventManager.onWindowResize(this.onWindowResize,this)
        }
        this.doConstrain();
    this.doLayout();
    if(this.keyMap){
        this.keyMap.enable()
        }
        this.toFront();
    this.updateHandles();
    if(b&&(Ext.isIE||Ext.isWebKit)){
        var a=this.getSize();
        this.onResize(a.width,a.height)
        }
        this.onShow();
    this.fireEvent("show",this)
    },
animShow:function(){
    this.proxy.show();
    this.proxy.setBox(this.animateTarget.getBox());
    this.proxy.setOpacity(0);
    var a=this.getBox();
    this.el.setStyle("display","none");
    this.proxy.shift(Ext.apply(a,{
        callback:this.afterShow.createDelegate(this,[true],false),
        scope:this,
        easing:"easeNone",
        duration:0.25,
        opacity:0.5
    }))
    },
hide:function(c,a,b){
    if(this.hidden||this.fireEvent("beforehide",this)===false){
        return this
        }
        if(a){
        this.on("hide",a,b,{
            single:true
        })
        }
        this.hidden=true;
    if(c!==undefined){
        this.setAnimateTarget(c)
        }
        if(this.modal){
        this.mask.hide();
        Ext.getBody().removeClass("x-body-masked")
        }
        if(this.animateTarget){
        this.animHide()
        }else{
        this.el.hide();
        this.afterHide()
        }
        return this
    },
afterHide:function(){
    this.proxy.hide();
    if(this.monitorResize||this.modal||this.constrain||this.constrainHeader){
        Ext.EventManager.removeResizeListener(this.onWindowResize,this)
        }
        if(this.keyMap){
        this.keyMap.disable()
        }
        this.onHide();
    this.fireEvent("hide",this)
    },
animHide:function(){
    this.proxy.setOpacity(0.5);
    this.proxy.show();
    var a=this.getBox(false);
    this.proxy.setBox(a);
    this.el.hide();
    this.proxy.shift(Ext.apply(this.animateTarget.getBox(),{
        callback:this.afterHide,
        scope:this,
        duration:0.25,
        easing:"easeNone",
        opacity:0
    }))
    },
onShow:Ext.emptyFn,
onHide:Ext.emptyFn,
onWindowResize:function(){
    if(this.maximized){
        this.fitContainer()
        }
        if(this.modal){
        this.mask.setSize("100%","100%");
        var a=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 b;
        if(this.constrain){
            b={
                right:this.el.shadowOffset,
                left:this.el.shadowOffset,
                bottom:this.el.shadowOffset
                }
            }else{
        var a=this.getSize();
        b={
            right:-(a.width-100),
            bottom:-(a.height-25)
            }
        }
    var c=this.el.getConstrainToXY(this.container,true,b);
if(c){
    this.setPosition(c[0],c[1])
    }
}
},
ghost:function(a){
    var c=this.createGhost(a);
    var b=this.getBox(true);
    c.setLeftTop(b.x,b.y);
    c.setWidth(b.width);
    this.el.hide();
    this.activeGhost=c;
    return c
    },
unghost:function(b,a){
    if(!this.activeGhost){
        return
    }
    if(b!==false){
        this.el.show();
        this.focus.defer(10,this);
        if(Ext.isMac&&Ext.isGecko2){
            this.cascade(this.setAutoScroll)
            }
        }
    if(a!==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);
    return this
    },
close:function(){
    if(this.fireEvent("beforeclose",this)!==false){
        if(this.hidden){
            this.doClose()
            }else{
            this.hide(null,this.doClose,this)
            }
        }
},
doClose:function(){
    this.fireEvent("close",this);
    this.destroy()
    },
maximize:function(){
    if(!this.maximized){
        this.expand(false);
        this.restoreSize=this.getSize();
        this.restorePos=this.getPosition(true);
        if(this.maximizable){
            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)
        }
        return this
    },
restore:function(){
    if(this.maximized){
        var a=this.tools;
        this.el.removeClass("x-window-maximized");
        if(a.restore){
            a.restore.hide()
            }
            if(a.maximize){
            a.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&&a.toggle){
            a.toggle.show()
            }
            this.container.removeClass("x-window-maximized-ct");
        this.doConstrain();
        this.fireEvent("restore",this)
        }
        return this
    },
toggleMaximize:function(){
    return this[this.maximized?"restore":"maximize"]()
    },
fitContainer:function(){
    var a=this.container.getViewSize(false);
    this.setSize(a.width,a.height)
    },
setZIndex:function(a){
    if(this.modal){
        this.mask.setStyle("z-index",a)
        }
        this.el.setZIndex(++a);
    a+=5;
    if(this.resizer){
        this.resizer.proxy.setStyle("z-index",++a)
        }
        this.lastZIndex=a
    },
alignTo:function(b,a,c){
    var d=this.el.getAlignToXY(b,a,c);
    this.setPagePosition(d[0],d[1]);
    return this
    },
anchorTo:function(c,e,d,b){
    this.clearAnchor();
    this.anchorTarget={
        el:c,
        alignment:e,
        offsets:d
    };

    Ext.EventManager.onWindowResize(this.doAnchor,this);
    var a=typeof b;
    if(a!="undefined"){
        Ext.EventManager.on(window,"scroll",this.doAnchor,this,{
            buffer:a=="number"?b:50
            })
        }
        return this.doAnchor()
    },
doAnchor:function(){
    var a=this.anchorTarget;
    this.alignTo(a.el,a.alignment,a.offsets);
    return this
    },
clearAnchor:function(){
    if(this.anchorTarget){
        Ext.EventManager.removeResizeListener(this.doAnchor,this);
        Ext.EventManager.un(window,"scroll",this.doAnchor,this);
        delete this.anchorTarget
        }
        return this
    },
toFront:function(a){
    if(this.manager.bringToFront(this)){
        if(!a||!a.getTarget().focus){
            this.focus()
            }
        }
    return this
},
setActive:function(a){
    if(a){
        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 a=this.el.getAlignToXY(this.container,"c-c");
    this.setPagePosition(a[0],a[1]);
    return this
    }
});
Ext.reg("window",Ext.Window);
Ext.Window.DD=function(a){
    this.win=a;
    Ext.Window.DD.superclass.constructor.call(this,a.el.id,"WindowDD-"+a.id);
    this.setHandleElId(a.header.id);
    this.scroll=false
    };

Ext.extend(Ext.Window.DD,Ext.dd.DD,{
    moveOnly:true,
    headerOffsets:[100,25],
    startDrag:function(){
        var a=this.win;
        this.proxy=a.ghost();
        if(a.constrain!==false){
            var c=a.el.shadowOffset;
            this.constrainTo(a.container,{
                right:c,
                left:c,
                bottom:c
            })
            }else{
            if(a.constrainHeader!==false){
                var b=this.proxy.getSize();
                this.constrainTo(a.container,{
                    right:-(b.width-this.headerOffsets[0]),
                    bottom:-(b.height-this.headerOffsets[1])
                    })
                }
            }
    },
b4Drag:Ext.emptyFn,
onDrag:function(a){
    this.alignElWithMouse(this.proxy,a.getPageX(),a.getPageY())
    },
endDrag:function(a){
    this.win.unghost();
    this.win.saveState()
    }
});
Ext.WindowGroup=function(){
    var g={};

    var d=[];
    var e=null;
    var c=function(j,i){
        return(!j._lastAccess||j._lastAccess<i._lastAccess)?-1:1
        };

    var h=function(){
        var l=d,j=l.length;
        if(j>0){
            l.sort(c);
            var k=l[0].manager.zseed;
            for(var m=0;m<j;m++){
                var n=l[m];
                if(n&&!n.hidden){
                    n.setZIndex(k+(m*10))
                    }
                }
            }
        a()
    };

var b=function(i){
    if(i!=e){
        if(e){
            e.setActive(false)
            }
            e=i;
        if(i){
            i.setActive(true)
            }
        }
};

var a=function(){
    for(var j=d.length-1;j>=0;--j){
        if(!d[j].hidden){
            b(d[j]);
            return
        }
    }
    b(null)
};

return{
    zseed:9000,
    register:function(i){
        if(i.manager){
            i.manager.unregister(i)
            }
            i.manager=this;
        g[i.id]=i;
        d.push(i);
        i.on("hide",a)
        },
    unregister:function(i){
        delete i.manager;
        delete g[i.id];
        i.un("hide",a);
        d.remove(i)
        },
    get:function(i){
        return typeof i=="object"?i:g[i]
        },
    bringToFront:function(i){
        i=this.get(i);
        if(i!=e){
            i._lastAccess=new Date().getTime();
            h();
            return true
            }
            return false
        },
    sendToBack:function(i){
        i=this.get(i);
        i._lastAccess=-(new Date().getTime());
        h();
        return i
        },
    hideAll:function(){
        for(var i in g){
            if(g[i]&&typeof g[i]!="function"&&g[i].isVisible()){
                g[i].hide()
                }
            }
        },
getActive:function(){
    return e
    },
getBy:function(l,k){
    var m=[];
    for(var j=d.length-1;j>=0;--j){
        var n=d[j];
        if(l.call(k||n,n)!==false){
            m.push(n)
            }
        }
    return m
},
each:function(j,i){
    for(var k in g){
        if(g[k]&&typeof g[k]!="function"){
            if(j.call(i||g[k],g[k])===false){
                return
            }
        }
    }
    }
}
};

Ext.WindowMgr=new Ext.WindowGroup();
Ext.MessageBox=function(){
    var u,b,q,t,h,l,s,a,n,p,j,g,r,v,o,i="",d="",m=["ok","yes","no","cancel"];
    var c=function(y){
        r[y].blur();
        if(u.isVisible()){
            u.hide();
            x();
            Ext.callback(b.fn,b.scope||window,[y,v.dom.value,b],1)
            }
        };

var x=function(){
    if(b&&b.cls){
        u.el.removeClass(b.cls)
        }
        n.reset()
    };

var e=function(A,y,z){
    if(b&&b.closable!==false){
        u.hide();
        x()
        }
        if(z){
        z.stopEvent()
        }
    };

var k=function(y){
    var A=0,z;
    if(!y){
        Ext.each(m,function(B){
            r[B].hide()
            });
        return A
        }
        u.footer.dom.style.display="";
    Ext.iterate(r,function(B,C){
        z=y[B];
        if(z){
            C.show();
            C.setText(Ext.isString(z)?z:Ext.MessageBox.buttonText[B]);
            A+=C.getEl().getWidth()+15
            }else{
            C.hide()
            }
        });
return A
};

return{
    getDialog:function(y){
        if(!u){
            var A=[];
            r={};

            Ext.each(m,function(B){
                A.push(r[B]=new Ext.Button({
                    text:this.buttonText[B],
                    handler:c.createCallback(B),
                    hideMode:"offsets"
                }))
                },this);
            u=new Ext.Window({
                autoCreate:true,
                title:y,
                resizable:false,
                constrain:true,
                constrainHeader:true,
                minimizable:false,
                maximizable:false,
                stateful:false,
                modal:true,
                shim:true,
                buttonAlign:"center",
                width:400,
                height:100,
                minHeight:80,
                plain:true,
                footer:true,
                closable:true,
                close:function(){
                    if(b&&b.buttons&&b.buttons.no&&!b.buttons.cancel){
                        c("no")
                        }else{
                        c("cancel")
                        }
                    },
            fbar:new Ext.Toolbar({
                items:A,
                enableOverflow:false
            })
            });
        u.render(document.body);
        u.getEl().addClass("x-window-dlg");
        q=u.mask;
        h=u.body.createChild({
            html:'<div class="ext-mb-icon"></div><div class="ext-mb-content"><span class="ext-mb-text"></span><br /><div class="ext-mb-fix-cursor"><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea></div></div>'
        });
        j=Ext.get(h.dom.firstChild);
        var z=h.dom.childNodes[1];
        l=Ext.get(z.firstChild);
        s=Ext.get(z.childNodes[2].firstChild);
        s.enableDisplayMode();
        s.addKeyListener([10,13],function(){
            if(u.isVisible()&&b&&b.buttons){
                if(b.buttons.ok){
                    c("ok")
                    }else{
                    if(b.buttons.yes){
                        c("yes")
                        }
                    }
            }
        });
a=Ext.get(z.childNodes[2].childNodes[1]);
a.enableDisplayMode();
n=new Ext.ProgressBar({
    renderTo:h
});
h.createChild({
    cls:"x-clear"
})
}
return u
},
updateText:function(B){
    if(!u.isVisible()&&!b.width){
        u.setSize(this.maxWidth,100)
        }
        l.update(B||"&#160;");
    var z=d!=""?(j.getWidth()+j.getMargins("lr")):0,D=l.getWidth()+l.getMargins("lr"),A=u.getFrameWidth("lr"),C=u.body.getFrameWidth("lr"),y;
    if(Ext.isIE&&z>0){
        z+=3
        }
        y=Math.max(Math.min(b.width||z+D+A+C,b.maxWidth||this.maxWidth),Math.max(b.minWidth||this.minWidth,o||0));
    if(b.prompt===true){
        v.setWidth(y-z-A-C)
        }
        if(b.progress===true||b.wait===true){
        n.setSize(y-z-A-C)
        }
        if(Ext.isIE&&y==o){
        y+=4
        }
        u.setSize(y,"auto").center();
    return this
    },
updateProgress:function(z,y,A){
    n.updateProgress(z,y);
    if(A){
        this.updateText(A)
        }
        return this
    },
isVisible:function(){
    return u&&u.isVisible()
    },
hide:function(){
    var y=u?u.activeGhost:null;
    if(this.isVisible()||y){
        u.hide();
        x();
        if(y){
            u.unghost(false,false)
            }
        }
    return this
},
show:function(B){
    if(this.isVisible()){
        this.hide()
        }
        b=B;
    var C=this.getDialog(b.title||"&#160;");
    C.setTitle(b.title||"&#160;");
    var y=(b.closable!==false&&b.progress!==true&&b.wait!==true);
    C.tools.close.setDisplayed(y);
    v=s;
    b.prompt=b.prompt||(b.multiline?true:false);
    if(b.prompt){
        if(b.multiline){
            s.hide();
            a.show();
            a.setHeight(Ext.isNumber(b.multiline)?b.multiline:this.defaultTextHeight);
            v=a
            }else{
            s.show();
            a.hide()
            }
        }else{
    s.hide();
    
