/*
Copyright (c) 2010, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.com/yui/license.html
version: 2.8.1
*/
YAHOO.util.Attribute=function(B,A){
    if(A){
        this.owner=A;
        this.configure(B,true);
    }
};

YAHOO.util.Attribute.prototype={
    name:undefined,
    value:null,
    owner:null,
    readOnly:false,
    writeOnce:false,
    _initialConfig:null,
    _written:false,
    method:null,
    setter:null,
    getter:null,
    validator:null,
    getValue:function(){
        var A=this.value;
        if(this.getter){
            A=this.getter.call(this.owner,this.name,A);
        }
        return A;
    },
    setValue:function(F,B){
        var E,A=this.owner,C=this.name;
        var D={
            type:C,
            prevValue:this.getValue(),
            newValue:F
        };

        if(this.readOnly||(this.writeOnce&&this._written)){
            return false;
        }
        if(this.validator&&!this.validator.call(A,F)){
            return false;
        }
        if(!B){
            E=A.fireBeforeChangeEvent(D);
            if(E===false){
                return false;
            }
        }
        if(this.setter){
        F=this.setter.call(A,F,this.name);
        if(F===undefined){}
}
if(this.method){
    this.method.call(A,F,this.name);
}
this.value=F;
this._written=true;
D.type=C;
if(!B){
    this.owner.fireChangeEvent(D);
}
return true;
},
configure:function(B,C){
    B=B||{};

    if(C){
        this._written=false;
    }
    this._initialConfig=this._initialConfig||{};

    for(var A in B){
        if(B.hasOwnProperty(A)){
            this[A]=B[A];
            if(C){
                this._initialConfig[A]=B[A];
            }
        }
    }
    },
resetValue:function(){
    return this.setValue(this._initialConfig.value);
},
resetConfig:function(){
    this.configure(this._initialConfig,true);
},
refresh:function(A){
    this.setValue(this.value,A);
}
};
(function(){
    var A=YAHOO.util.Lang;
    YAHOO.util.AttributeProvider=function(){};

    YAHOO.util.AttributeProvider.prototype={
        _configs:null,
        get:function(C){
            this._configs=this._configs||{};

            var B=this._configs[C];
            if(!B||!this._configs.hasOwnProperty(C)){
                return null;
            }
            return B.getValue();
        },
        set:function(D,E,B){
            this._configs=this._configs||{};

            var C=this._configs[D];
            if(!C){
                return false;
            }
            return C.setValue(E,B);
        },
        getAttributeKeys:function(){
            this._configs=this._configs;
            var C=[],B;
            for(B in this._configs){
                if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){
                    C[C.length]=B;
                }
            }
            return C;
    },
    setAttributes:function(D,B){
        for(var C in D){
            if(A.hasOwnProperty(D,C)){
                this.set(C,D[C],B);
            }
        }
        },
resetValue:function(C,B){
    this._configs=this._configs||{};

    if(this._configs[C]){
        this.set(C,this._configs[C]._initialConfig.value,B);
        return true;
    }
    return false;
},
refresh:function(E,C){
    this._configs=this._configs||{};

    var F=this._configs;
    E=((A.isString(E))?[E]:E)||this.getAttributeKeys();
    for(var D=0,B=E.length;D<B;++D){
        if(F.hasOwnProperty(E[D])){
            this._configs[E[D]].refresh(C);
        }
    }
    },
register:function(B,C){
    this.setAttributeConfig(B,C);
},
getAttributeConfig:function(C){
    this._configs=this._configs||{};

    var B=this._configs[C]||{};

    var D={};

    for(C in B){
        if(A.hasOwnProperty(B,C)){
            D[C]=B[C];
        }
    }
    return D;
},
setAttributeConfig:function(B,C,D){
    this._configs=this._configs||{};

    C=C||{};

    if(!this._configs[B]){
        C.name=B;
        this._configs[B]=this.createAttribute(C);
    }else{
        this._configs[B].configure(C,D);
    }
},
configureAttribute:function(B,C,D){
    this.setAttributeConfig(B,C,D);
},
resetAttributeConfig:function(B){
    this._configs=this._configs||{};

    this._configs[B].resetConfig();
},
subscribe:function(B,C){
    this._events=this._events||{};

    if(!(B in this._events)){
        this._events[B]=this.createEvent(B);
    }
    YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);
},
on:function(){
    this.subscribe.apply(this,arguments);
},
addListener:function(){
    this.subscribe.apply(this,arguments);
},
fireBeforeChangeEvent:function(C){
    var B="before";
    B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";
    C.type=B;
    return this.fireEvent(C.type,C);
},
fireChangeEvent:function(B){
    B.type+="Change";
    return this.fireEvent(B.type,B);
},
createAttribute:function(B){
    return new YAHOO.util.Attribute(B,this);
}
};

YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);
})();
(function(){
    var B=YAHOO.util.Dom,D=YAHOO.util.AttributeProvider,C={
        mouseenter:true,
        mouseleave:true
    };

    var A=function(E,F){
        this.init.apply(this,arguments);
    };

    A.DOM_EVENTS={
        "click":true,
        "dblclick":true,
        "keydown":true,
        "keypress":true,
        "keyup":true,
        "mousedown":true,
        "mousemove":true,
        "mouseout":true,
        "mouseover":true,
        "mouseup":true,
        "mouseenter":true,
        "mouseleave":true,
        "focus":true,
        "blur":true,
        "submit":true,
        "change":true
    };

    A.prototype={
        DOM_EVENTS:null,
        DEFAULT_HTML_SETTER:function(G,E){
            var F=this.get("element");
            if(F){
                F[E]=G;
            }
            return G;
        },
        DEFAULT_HTML_GETTER:function(E){
            var F=this.get("element"),G;
            if(F){
                G=F[E];
            }
            return G;
        },
        appendChild:function(E){
            E=E.get?E.get("element"):E;
            return this.get("element").appendChild(E);
        },
        getElementsByTagName:function(E){
            return this.get("element").getElementsByTagName(E);
        },
        hasChildNodes:function(){
            return this.get("element").hasChildNodes();
        },
        insertBefore:function(E,F){
            E=E.get?E.get("element"):E;
            F=(F&&F.get)?F.get("element"):F;
            return this.get("element").insertBefore(E,F);
        },
        removeChild:function(E){
            E=E.get?E.get("element"):E;
            return this.get("element").removeChild(E);
        },
        replaceChild:function(E,F){
            E=E.get?E.get("element"):E;
            F=F.get?F.get("element"):F;
            return this.get("element").replaceChild(E,F);
        },
        initAttributes:function(E){},
        addListener:function(J,I,K,H){
            H=H||this;
            var E=YAHOO.util.Event,G=this.get("element")||this.get("id"),F=this;
            if(C[J]&&!E._createMouseDelegate){
                return false;
            }
            if(!this._events[J]){
                if(G&&this.DOM_EVENTS[J]){
                    E.on(G,J,function(M,L){
                        if(M.srcElement&&!M.target){
                            M.target=M.srcElement;
                        }
                        if((M.toElement&&!M.relatedTarget)||(M.fromElement&&!M.relatedTarget)){
                            M.relatedTarget=E.getRelatedTarget(M);
                        }
                        if(!M.currentTarget){
                            M.currentTarget=G;
                        }
                        F.fireEvent(J,M,L);
                    },K,H);
                }
                this.createEvent(J,{
                    scope:this
                });
            }
            return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);
        },
        on:function(){
            return this.addListener.apply(this,arguments);
        },
        subscribe:function(){
            return this.addListener.apply(this,arguments);
        },
        removeListener:function(F,E){
            return this.unsubscribe.apply(this,arguments);
        },
        addClass:function(E){
            B.addClass(this.get("element"),E);
        },
        getElementsByClassName:function(F,E){
            return B.getElementsByClassName(F,E,this.get("element"));
        },
        hasClass:function(E){
            return B.hasClass(this.get("element"),E);
        },
        removeClass:function(E){
            return B.removeClass(this.get("element"),E);
        },
        replaceClass:function(F,E){
            return B.replaceClass(this.get("element"),F,E);
        },
        setStyle:function(F,E){
            return B.setStyle(this.get("element"),F,E);
        },
        getStyle:function(E){
            return B.getStyle(this.get("element"),E);
        },
        fireQueue:function(){
            var F=this._queue;
            for(var G=0,E=F.length;G<E;++G){
                this[F[G][0]].apply(this,F[G][1]);
            }
            },
    appendTo:function(F,G){
        F=(F.get)?F.get("element"):B.get(F);
        this.fireEvent("beforeAppendTo",{
            type:"beforeAppendTo",
            target:F
        });
        G=(G&&G.get)?G.get("element"):B.get(G);
        var E=this.get("element");
        if(!E){
            return false;
        }
        if(!F){
            return false;
        }
        if(E.parent!=F){
            if(G){
                F.insertBefore(E,G);
            }else{
                F.appendChild(E);
            }
        }
        this.fireEvent("appendTo",{
        type:"appendTo",
        target:F
    });
    return E;
},
get:function(E){
    var G=this._configs||{},F=G.element;
    if(F&&!G[E]&&!YAHOO.lang.isUndefined(F.value[E])){
        this._setHTMLAttrConfig(E);
    }
    return D.prototype.get.call(this,E);
},
setAttributes:function(K,H){
    var F={},I=this._configOrder;
    for(var J=0,E=I.length;J<E;++J){
        if(K[I[J]]!==undefined){
            F[I[J]]=true;
            this.set(I[J],K[I[J]],H);
        }
    }
    for(var G in K){
    if(K.hasOwnProperty(G)&&!F[G]){
        this.set(G,K[G],H);
    }
}
},
set:function(F,H,E){
    var G=this.get("element");
    if(!G){
        this._queue[this._queue.length]=["set",arguments];
        if(this._configs[F]){
            this._configs[F].value=H;
        }
        return;
    }
    if(!this._configs[F]&&!YAHOO.lang.isUndefined(G[F])){
        this._setHTMLAttrConfig(F);
    }
    return D.prototype.set.apply(this,arguments);
},
setAttributeConfig:function(E,F,G){
    this._configOrder.push(E);
    D.prototype.setAttributeConfig.apply(this,arguments);
},
createEvent:function(F,E){
    this._events[F]=true;
    return D.prototype.createEvent.apply(this,arguments);
},
init:function(F,E){
    this._initElement(F,E);
},
destroy:function(){
    var E=this.get("element");
    YAHOO.util.Event.purgeElement(E,true);
    this.unsubscribeAll();
    if(E&&E.parentNode){
        E.parentNode.removeChild(E);
    }
    this._queue=[];
    this._events={};

    this._configs={};

    this._configOrder=[];
},
_initElement:function(G,F){
    this._queue=this._queue||[];
    this._events=this._events||{};

    this._configs=this._configs||{};

    this._configOrder=[];
    F=F||{};

    F.element=F.element||G||null;
    var I=false;
    var E=A.DOM_EVENTS;
    this.DOM_EVENTS=this.DOM_EVENTS||{};

    for(var H in E){
        if(E.hasOwnProperty(H)){
            this.DOM_EVENTS[H]=E[H];
        }
    }
    if(typeof F.element==="string"){
    this._setHTMLAttrConfig("id",{
        value:F.element
        });
}
if(B.get(F.element)){
    I=true;
    this._initHTMLElement(F);
    this._initContent(F);
}
YAHOO.util.Event.onAvailable(F.element,function(){
    if(!I){
        this._initHTMLElement(F);
    }
    this.fireEvent("available",{
        type:"available",
        target:B.get(F.element)
        });
},this,true);
YAHOO.util.Event.onContentReady(F.element,function(){
    if(!I){
        this._initContent(F);
    }
    this.fireEvent("contentReady",{
        type:"contentReady",
        target:B.get(F.element)
        });
},this,true);
},
_initHTMLElement:function(E){
    this.setAttributeConfig("element",{
        value:B.get(E.element),
        readOnly:true
    });
},
_initContent:function(E){
    this.initAttributes(E);
    this.setAttributes(E,true);
    this.fireQueue();
},
_setHTMLAttrConfig:function(E,G){
    var F=this.get("element");
    G=G||{};

    G.name=E;
    G.setter=G.setter||this.DEFAULT_HTML_SETTER;
    G.getter=G.getter||this.DEFAULT_HTML_GETTER;
    G.value=G.value||F[E];
    this._configs[E]=new YAHOO.util.Attribute(G,this);
}
};

YAHOO.augment(A,D);
YAHOO.util.Element=A;
})();
YAHOO.register("element",YAHOO.util.Element,{
    version:"2.8.1",
    build:"19"
});