var YAO = function(){
    var A = "[object Array]", B = [], C = 0, D = document, E = [], F = [], FC = "[object Function]", G = [], I = [], O = Object.prototype, nt = "nodeType", tn = "tagName";
    var isArray = function(s){
        return O.toString.apply(s) === A;
    }, isString = function(s){
        return typeof s === 'string';
    }, isBoolean = function(G){
        return typeof G === "boolean";
    }, isFunction = function(G){
        return O.toString.apply(G) === FC;
    }, isNull = function(G){
        return G === null;
    }, isNumber = function(G){
        return typeof G === "number" && isFinite(G);
    }, isObject = function(G){
        return (G && (typeof G === "object" || isFunction(G))) || false;
    }, isUndefined = function(G){
        return typeof G === "undefined";
    }, hasOwnProperty = function(a, b){
        if (Object.prototype.hasOwnProperty) {
            return a.hasOwnProperty(b);
        }
        return !isUndefined(obj[b]) && a.constructor.prototype[b] !== a[b];
    }, ua = function(){
        var BS = {
            ie: 0,
            opera: 0,
            gecko: 0,
            webkit: 0,
            mobile: null,
            air: 0,
            caja: 0
        }, B = navigator.userAgent, BA;
        if ((/KHTML/).test(B)) {
            BS.webkit = 1;
        }
        BA = B.match(/BAppleWebKit\/([^\s]*)/);
        if (BA && BA[1]) {
            BS.webkit = parseFloat(BA[1]);
            if (/ Mobile\//.test(B)) {
                BS.mobile = "Apple";
            }
            else {
                BA = B.match(/NokiaN[^\/]*/);
                if (BA) {
                    BS.mobile = BA[0];
                }
            }
            BA = B.match(/BAdobeBAIR\/([^\s]*)/);
            if (BA) {
                BS.air = BA[0];
            }
        }
        if (!BS.webkit) {
            BA = B.match(/Opera[\s\/]([^\s]*)/);
            if (BA && BA[1]) {
                BS.opera = parseFloat(BA[1]);
                BA = B.match(/Opera Mini[^;]*/);
                if (BA) {
                    BS.mobile = BA[0];
                }
            }
            else {
                BA = B.match(/MSIE\s([^;]*)/);
                if (BA && BA[1]) {
                    BS.ie = parseFloat(BA[1]);
                }
                else {
                    BA = B.match(/Gecko\/([^\s]*)/);
                    if (BA) {
                        BS.gecko = 1;
                        BA = B.match(/rv:([^\s\)]*)/);
                        if (BA && BA[1]) {
                            BS.gecko = parseFloat(BA[1]);
                        }
                    }
                }
            }
        }
        BA = B.match(/BSaja\/([^\s]*)/);
        if (BA && BA[1]) {
            BS.caja = parseFloat(BA[1]);
        }
        return BS;
    }(), isValidCollection = function(N){
        try {
            return (N && typeof N !== "string" && N.length && !N.tagName && !N.alert && typeof N[0] !== "undefined");
        } 
        catch (M) {
            return false;
        }
    };
    return {
        namespace: function(){
            var A = arguments, E = null, C, B, D;
            for (C = 0; C < A.length; C = C + 1) {
                D = ("" + A[C]).split(".");
                E = YAO;
                for (B = (D[0] == "YAO") ? 1 : 0; B < D.length; B = B + 1) {
                    E[D[B]] = E[D[B]] ||
                    {};
                    E = E[D[B]];
                }
            }
            return E;
        },
        register: function(A, E, D){
            var I = YAO.env.modules, B, H, G, F, C;
            if (!I[A]) {
                I[A] = {
                    versions: [],
                    builds: []
                };
            }
            B = I[A];
            H = D.version;
            G = D.build;
            F = YAO.env.listeners;
            B.name = A;
            B.version = H;
            B.build = G;
            B.versions.push(H);
            B.builds.push(G);
            B.mainClass = E;
            for (C = 0; C < F.length; C = C + 1) {
                F[C](B);
            }
            if (E) {
                E.VERSION = H;
                E.BUILD = G;
            }
            else {
                alert("mainClass is undefined for module " + A, "warn");
            }
        },
        env: {
            modules: [],
            listeners: [],
            getVersion: function(A){
                return YAO.env.modules[A];
            }
        },
        keys: function(a){
            var b = [];
            for (var c in a) {
                b.push(c)
            }
            return b
        },
        values: function(b){
            var a = [];
            for (var c in b) {
                a.push(b[c])
            }
            return a
        },
        isXMLDoc: function(a){
            return a.documentElement && !a.body || a.tagName && a.ownerDocument && !a.ownerDocument.body
        },
        formatNumber: function(b, e){
            e = e || "";
            b += "";
            var d = b.split(".");
            var a = d[0];
            var c = d.length > 1 ? "." + d[1] : "";
            var f = /(\d+)(\d{3})/;
            while (f.test(a)) {
                a = a.replace(f, "$1,$2")
            }
            return e + a + c
        },
        unformatNumber: function(a){
            return a.replace(/([^0-9\.\-])/g, "") * 1
        },
        stringBuffer: function(){
            var a = [];
            for (var b = 0; b < arguments.length; b++) {
                a.push(arguments[b])
            }
            return a.join("")
        },
        trim: function(b){
            try {
                return b.replace(/^\s+|\s+$/g, "")
            } 
            catch (a) {
                return b
            }
        },
        stripTags: function(a){
            return a.replace(/<\/?[^>]+>/gi, "")
        },
        stripScripts: function(a){
            return a.replace(/<script[^>]*>([\\S\\s]*?)<\/script>/g, "")
        },
        isJSON: function(a){
            a = a.replace(/\\./g, "@").replace(/"[^"\\\n\r]*"/g, "");
            return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(a)
        },
        encodeHTML: function(a){
            return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
        },
        decodeHTML: function(a){
            return a.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">")
        },
        makeArray: function(c){
            var a = [];
            if (c != null) {
                var b = c.length;
                if (b == null || c.split || c.setInterval || c.call) {
                    a[0] = c
                }
                else {
                    while (b) {
                        a[--b] = c[b]
                    }
                }
            }
            return a
        },
        inArray: function(c, d){
            for (var a = 0, b = d.length; a < b; a++) {
                if (d[a] === c) {
                    return a
                }
            }
            return -1
        },
        grep: function(b, f, a){
            var c = [];
            for (var d = 0, e = b.length; d < e; d++) {
                if (!a != !f(b[d], d)) {
                    c.push(b[d])
                }
            }
            return c
        },
        map: function(a, f){
            var b = [];
            for (var c = 0, d = a.length; c < d; c++) {
                var e = f(a[c], c);
                if (e != null) {
                    b[b.length] = e
                }
            }
            return b.concat.apply([], b)
        },
        each: function(c, g, b){
            var a, d = 0, e = c.length;
            if (b) {
                if (e == undefined) {
                    for (a in c) {
                        if (g.apply(c[a], b) === false) {
                            break
                        }
                    }
                }
                else {
                    for (; d < e;) {
                        if (g.apply(c[d++], b) === false) {
                            break
                        }
                    }
                }
            }
            else {
                if (e == undefined) {
                    for (a in c) {
                        if (g.call(c[a], a, c[a]) === false) {
                            break
                        }
                    }
                }
                else {
                    for (var f = c[0]; d < e && g.call(f, d, f) !== false; f = c[++d]) {
                    }
                }
            }
            return c
        },
        Cookie: {
            set: function(g, c, f, b){
                var e = new Date();
                var a = new Date();
                if (f == null || f == 0) {
                    f = 1
                }
                a.setTime(e.getTime() + 3600000 * 24 * f);
                document.cookie = g + "=" + encodeURI(c) + ";expires=" + a.toGMTString() + ";domain=" + b + "; path=/"
            },
            get: function(e){
                var b = document.cookie;
                var d = e + "=";
                var c = b.indexOf("; " + d);
                if (c == -1) {
                    c = b.indexOf(d);
                    if (c != 0) {
                        return null
                    }
                }
                else {
                    c += 2
                }
                var a = document.cookie.indexOf(";", c);
                if (a == -1) {
                    a = b.length
                }
                return decodeURI(b.substring(c + d.length, a))
            },
            clear: function(b, a){
                if (this.get(b)) {
                    document.cookie = b + "=" + ((domain) ? "; domain=" + a : "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT"
                }
            }
        },
        Interface: function(c, b){
            var d, a;
            if (arguments.length != 2) {
                throw new Error("Interface constructor call with " + arguments.length + " arguments, but expected exactly 2.")
            }
            this.name = c;
            this.methods = [];
            for (d = 0, a = b.length; d < a; d += 1) {
                if (typeof b[d] !== "string") {
                    throw new Error("Interface constructor expects method name to be passed in as a string")
                }
                this.methods.push[b[d]]
            }
        },
        ensureImpements: function(e){
            var f, d, b, a, c, g;
            if (arguments.length < 2) {
                throw new Error("Function Interface.ensureImpements called with " + arguments.length + " arguments, but expects at least 2.")
            }
            for (f = 1, b = arguments.length; f < b; f += 1) {
                c = arguments[f];
                if (c.constructor !== Interface) {
                    throw new Error("Function Interface.ensureImpements expects arguments two and above to be instances of Interface.")
                }
                for (d = 0, methodLen = c.mentods.lentgh; d < methodLen; d += 1) {
                    g = c.method[d];
                    if (!e[g] || typeof e[g] !== "function") {
                        throw new Error("Function Interface.ensureImpements: object does not implement the " + c.name + " interFace.method " + g + " was not found")
                    }
                }
            }
        },
        extend: function(d, e, c){
            if (!e || !d) {
                throw new Error("extend failed, please check that all dependencies are included.")
            }
            var b = function(){
            };
            b.prototype = e.prototype;
            d.prototype = new b();
            d.prototype.constructor = d;
            d.superclass = e.prototype;
            if (e.prototype.constructor == Object.prototype.constructor) {
                e.prototype.constructor = e
            }
            if (c) {
                for (var a in c) {
                    d.prototype[a] = c[a]
                }
            }
        },
        augmentProto: function(f, e){
            if (!e || !f) {
                throw new Error("augment failed, please check that all dependencies are included.")
            }
            var d = f.prototype, g = e.prototype, b = arguments, c, h;
            if (b[2]) {
                for (c = 2; c < b.length; c += 1) {
                    d[b[c]] = g[b[c]]
                }
            }
            else {
                for (h in g) {
                    if (!d[h]) {
                        d[h] = g[h]
                    }
                }
            }
        },
        augmentObject: function(e, d){
            if (!d || !e) {
                throw new Error("extend method failed, please check that all dependencies are included.")
            }
            var b = arguments, c, f;
            if (b[2]) {
                if (this.isString(b[2])) {
                    e[b[2]] = d[b[2]]
                }
                else {
                    for (c = 0; c < b[2].length; c += 1) {
                        e[b[2][c]] = d[b[2][c]]
                    }
                }
            }
            else {
                for (f in d) {
                    e[f] = d[f]
                }
            }
            return e
        },
        clone: function(d, f){
            var e = function(){
            }, b, c = arguments;
            e.prototype = d;
            b = new e;
            if (f) {
                for (p in f) {
                    b[p] = f[p]
                }
            }
            return b
        },
        get: function(elem){
            var elemID, E, m, i, k, length, len;
            if (elem) {
                if (elem[nt] || elem.item) {
                    return elem;
                }
                if (isString(elem)) {
                    elemID = elem;
                    elem = D.getElementById(elem);
                    if (elem && elem.id === elemID) {
                        return elem;
                    }
                    else {
                        if (elem && elem.all) {
                            elem = null;
                            E = D.all[elemID];
                            for (i = 0, len = E.length; i < len; i += 1) {
                                if (E[i].id === elemID) {
                                    return E[i];
                                }
                            }
                        }
                    }
                    return elem;
                }
                else {
                    if (elem.DOM_EVENTS) {
                        elem = elem.get("element");
                    }
                    else {
                        if (isArray(elem)) {
                            m = [];
                            for (k = 0, length = elem.length; k < length; k += 1) {
                                m[m.length] = YAO.get(elem[k]);
                            }
                            return m;
                        }
                    }
                }
            }
            return null;
        },
        getByClassName: function(className, tag, rootTag){
            var elems = [], i, tempCnt = D.getElementById(rootTag).getElementsByTagName(tag), len = tempCnt.length;
            for (i = 0; i < len; i++) {
                if (YAO.hasClass(tempCnt[i], className)) {
                    elems.push(tempCnt[i]);
                }
            }
            if (elems.length < 1) {
                return false;
            }
            else {
                return elems;
            }
        },
        hasClass: function(l, k){
            var j = new RegExp("(?:^|\\s+)" + k + "(?:\\s+|$)");
            var m = function(n){
                return j.test(n.className);
            };
            return YAO.batch(l, m, YAO, true);
        },
        addClass: function(k, j){
            var l = function(m){
                if (this.hasClass(m, j)) {
                    return;
                }
                m.className = [m.className, j].join(" ");
            };
            YAO.batch(k, l, YAO, true);
        },
        removeClass: function(l, k){
            var j = new RegExp("(?:^|\\s+)" + k + "(?:\\s+|$)", "g");
            var m = function(n){
                if (!this.hasClass(n, k)) {
                    return;
                }
                var o = n.className;
                n.className = o.replace(j, " ");
                if (this.hasClass(n, k)) {
                    this.removeClass(n, k);
                }
            };
            YAO.batch(l, m, YAO, true);
        },
        replaceClass: function(m, k, j){
            if (k === j) {
                return false;
            }
            var l = new RegExp("(?:^|\\s+)" + k + "(?:\\s+|$)", "g");
            var n = function(o){
                if (!this.hasClass(o, k)) {
                    this.addClass(o, j);
                    return;
                }
                o.className = o.className.replace(l, " " + j + " ");
                if (this.hasClass(o, k)) {
                    this.replaceClass(o, k, j);
                }
            };
            YAO.batch(m, n, YAO, true)
        },
        addClassByTagName: function(j, m, l){
            var n = l.getElementsByTagName(j);
            for (var k = 0; k < n.length; k++) {
                this.addClass(n[k], m)
            }
        },
        getElementsBy: function(q, k, l){
            k = k || "*";
            var m = [];
            if (l) {
                l = YAO.get(l);
                if (!l) {
                    return m
                }
            }
            else {
                l = document
            }
            var o = l.getElementsByTagName(k);
            if (!o.length && (k == "*" && l.all)) {
                o = l.all
            }
            for (var n = 0, j = o.length; n < j; ++n) {
                if (q(o[n])) {
                    m[m.length] = o[n]
                }
            }
            return m
        },
        getDocumentWidth: function(){
            var k = YAO.getScrollWidth();
            var j = Math.max(k, YAO.getViewportWidth());
            return j
        },
        getDocumentHeight: function(){
            var k = YAO.getScrollHeight();
            var j = Math.max(k, YAO.getViewportHeight());
            return j
        },
        getScrollWidth: function(){
            var j = (D.compatMode == "CSS1Compat") ? D.body.scrollWidth : D.Element.scrollWidth;
            return j
        },
        getScrollHeight: function(){
            var j = (D.compatMode == "CSS1Compat") ? D.body.scrollHeight : D.documentElement.scrollHeight;
            return j
        },
        getXScroll: function(){
            var j = self.pageXOffset || D.documentElement.scrollLeft || D.body.scrollLeft;
            return j
        },
        getYScroll: function(){
            var j = self.pageYOffset || D.documentElement.scrollTop || D.body.scrollTop;
            return j
        },
        getViewportWidth: function(){
            var j = self.innerWidth;
            var k = D.compatMode;
            if (k || c) {
                j = (k == "CSS1Compat") ? D.documentElement.clientWidth : D.body.clientWidth
            }
            return j
        },
        getViewportHeight: function(){
            var j = self.innerHeight;
            var k = D.compatMode;
            if ((k || c) && !a) {
                j = (k == "CSS1Compat") ? D.documentElement.clientHeight : D.body.clientHeight
            }
            return j
        },
        removeChildren: function(j){
            if (!(prent = YAO.get(j))) {
                return false
            }
            while (j.firstChild) {
                j.firstChild.parentNode.removeChild(j.firstChild)
            }
            return j
        },
        prependChild: function(k, j){
            if (!(k = YAO.get(k)) || !(j = YAO.get(j))) {
                return false
            }
            if (k.firstChild) {
                k.insertBefore(j, k.firstChild)
            }
            else {
                k.appendChild(j)
            }
            return k
        },
        insertAfter: function(l, j){
            var k = j.parentNode;
            if (k.lastChild == j) {
                k.appendChild(l)
            }
            else {
                k.insertBefore(l, j.nextSibling)
            }
        },
        batch: function(n, j, m, l){
            var k = n;
            n = YAO.get(n);
            var t = (l) ? m : window;
            if (!n || n.tagName || !n.length) {
                if (!n) {
                    return false
                }
                return j.call(t, n, m)
            }
            var r = [];
            for (var q = 0, s = n.length; q < s; ++q) {
                if (!n[q]) {
                    k = n[q]
                }
                r[r.length] = j.call(t, n[q], m)
            }
            return r
        },
        EL: 0,
        TYPE: 1,
        OBJ: 5,
        OVERRIDE: 6,
        FN: 2,
        WFN: 3,
        ADJ_SCOPE: 4,
        _interval: null,
        POLL_RETRYS: 2000,
        DOMReady: false,
        lastError: null,
        stopEvent: function(M){
            this.stopPropagation(M);
            this.preventDefault(M);
        },
        stopPropagation: function(M){
            if (M.stopPropagation) {
                M.stopPropagation();
            }
            else {
                M.cancelBubble = true;
            }
        },
        preventDefault: function(M){
            if (M.preventDefault) {
                M.preventDefault();
            }
            else {
                M.returnValue = false;
            }
        },
        getEvent: function(O, M){
            var N = O || window.event;
            if (!N) {
                var P = this.getEvent.caller;
                while (P) {
                    N = P.arguments[0];
                    if (N && Event == N.constructor) {
                        break;
                    }
                    P = P.caller;
                }
            }
            return N;
        },
        getCharCode: function(N){
            var M = N.keyCode || N.charCode || 0;
            if (ua.webkit && (M in D)) {
                M = D[M];
            }
            return M;
        },
        _getCacheIndex: function(Q, R, P){
            for (var O = 0, N = I.length; O < N; O = O + 1) {
                var M = I[O];
                if (M && M[this.FN] == P && M[this.EL] == Q && M[this.TYPE] == R) {
                    return O;
                }
            }
            return -1;
        },
        generateId: function(M){
            var N = M.id;
            if (!N) {
                N = "evtId-" + A;
                ++A;
                M.id = N;
            }
            return N;
        },
        startInterval: function(){
            if (!this._interval) {
                var M = this;
                var N = function(){
                    M._tryPreloadAttach();
                };
                this._interval = setInterval(N, this.POLL_INTERVAL);
            }
        },
        fireLegacyEvent: function(R, P){
            var T = true, M, V, U, N, S;
            V = E[P].slice();
            for (var O = 0, Q = V.length; O < Q; ++O) {
                U = V[O];
                if (U && U[this.WFN]) {
                    N = U[this.ADJ_SCOPE];
                    S = U[this.WFN].call(N, R);
                    T = (T && S);
                }
            }
            M = G[P];
            if (M && M[2]) {
                M[2](R);
            }
            return T;
        },
        getLegacyIndex: function(N, O){
            var M = this.generateId(N) + O;
            if (typeof B[M] == "undefined") {
                return -1;
            }
            else {
                return B[M];
            }
        },
        useLegacyEvent: function(M, N){
            return (ua.webkit && ua.webkit < 419 && ("click" == N || "dblclick" == N));
        },
        purgeElement: function(Q, R, T){
            var O = (isString(Q)) ? this.get(Q) : Q;
            var S = this.getListeners(O, T), P, M;
            if (S) {
                for (P = S.length - 1; P > -1; P--) {
                    var N = S[P];
                    this.removeListener(O, N.type, N.fn);
                }
            }
            if (R && O && O.childNodes) {
                for (P = 0, M = O.childNodes.length; P < M; ++P) {
                    this.purgeElement(O.childNodes[P], R, T);
                }
            }
        },
        getListeners: function(O, M){
            var R = [], N;
            if (!M) {
                N = [I, J];
            }
            else {
                if (M === "unload") {
                    N = [J];
                }
                else {
                    N = [I];
                }
            }
            var T = (isString(O)) ? this.get(O) : O;
            for (var Q = 0; Q < N.length; Q = Q + 1) {
                var V = N[Q];
                if (V) {
                    for (var S = 0, U = V.length; S < U; ++S) {
                        var P = V[S];
                        if (P && P[this.EL] === T && (!M || M === P[this.TYPE])) {
                            R.push({
                                type: P[this.TYPE],
                                fn: P[this.FN],
                                obj: P[this.OBJ],
                                adjust: P[this.OVERRIDE],
                                scope: P[this.ADJ_SCOPE],
                                index: S
                            });
                        }
                    }
                }
            }
            return (R.length) ? R : null;
        },
        removeListener: function(N, M, V){
            var Q, T, X;
            if (typeof N == "string") {
                N = this.get(N);
            }
            else {
                if (isValidCollection(N)) {
                    var W = true;
                    for (Q = N.length - 1; Q > -1; Q--) {
                        W = (this.removeListener(N[Q], M, V) && W);
                    }
                    return W;
                }
            }
            if (!V || !V.call) {
                return this.purgeElement(N, false, M);
            }
            if ("unload" == M) {
                for (Q = J.length - 1; Q > -1; Q--) {
                    X = J[Q];
                    if (X && X[0] == N && X[1] == M && X[2] == V) {
                        J.splice(Q, 1);
                        return true;
                    }
                }
                return false;
            }
            var R = null;
            var S = arguments[3];
            if ("undefined" === typeof S) {
                S = this._getCacheIndex(N, M, V);
            }
            if (S >= 0) {
                R = I[S];
            }
            if (!N || !R) {
                return false;
            }
            if (this.useLegacyEvent(N, M)) {
                var P = this.getLegacyIndex(N, M);
                var O = E[P];
                if (O) {
                    for (Q = 0, T = O.length; Q < T; ++Q) {
                        X = O[Q];
                        if (X && X[this.EL] == N && X[this.TYPE] == M && X[this.FN] == V) {
                            O.splice(Q, 1);
                            break;
                        }
                    }
                }
            }
            else {
                try {
                    this._simpleRemove(N, M, R[this.WFN], false);
                } 
                catch (U) {
                    this.lastError = U;
                    return false;
                }
            }
            delete I[S][this.WFN];
            delete I[S][this.FN];
            I.splice(S, 1);
            return true;
        },
        _simpleRemove: function(){
            if (window.removeEventListener) {
                return function(O, P, N, M){
                    O.removeEventListener(P, N, (M));
                };
            }
            else {
                if (window.detachEvent) {
                    return function(N, O, M){
                        N.detachEvent("on" + O, M);
                    };
                }
                else {
                    return function(){
                    };
                }
            }
        }(),
        onAvailable: function(S, O, Q, R, P){
            var M = (isString(S)) ? [S] : S;
            for (var N = 0; N < M.length; N = N + 1) {
                F.push({
                    id: M[N],
                    fn: O,
                    obj: Q,
                    overrideContext: R,
                    checkReady: P
                });
            }
            C = this.POLL_RETRYS;
            this.startInterval();
        },
        addEvent: function(N, Q, M, O, P){
            return this._addListener(N, Q, M, O, P, false);
        },
        on: function(N, Q, M, O, P){
            return this._addListener(N, Q, M, O, P, false);
        },
        _addListener: function(O, M, Y, S, W, b){
            if (!Y || !Y.call) {
                return false;
            }
            if (isValidCollection(O)) {
                var Z = true;
                for (var T = 0, V = O.length; T < V; ++T) {
                    Z = this.on(O[T], M, Y, S, W) && Z;
                }
                return Z;
            }
            else {
                if (isString(O)) {
                    var R = this.get(O);
                    if (R) {
                        O = R;
                    }
                    else {
                        this.onAvailable(O, function(){
                            YAO.on(O, M, Y, S, W);
                        });
                        return true;
                    }
                }
            }
            if (!O) {
                return false;
            }
            if ("unload" == M && S !== this) {
                J[J.length] = [O, M, Y, S, W];
                return true;
            }
            var N = O;
            if (W) {
                if (W === true) {
                    N = S;
                }
                else {
                    N = W;
                }
            }
            var P = function(c){
                return Y.call(N, YAO.getEvent(c, O), S);
            };
            var a = [O, M, Y, P, N, S, W];
            var U = I.length;
            I[U] = a;
            if (this.useLegacyEvent(O, M)) {
                var Q = this.getLegacyIndex(O, M);
                if (Q == -1 || O != G[Q][0]) {
                    Q = G.length;
                    B[O.id + M] = Q;
                    G[Q] = [O, M, O["on" + M]];
                    E[Q] = [];
                    O["on" + M] = function(c){
                        YAO.fireLegacyEvent(YAO.getEvent(c), Q);
                    };
                }
                E[Q].push(a);
            }
            else {
                try {
                    this._simpleAdd(O, M, P, b);
                } 
                catch (X) {
                    this.lastError = X;
                    this.removeListener(O, M, Y);
                    return false;
                }
            }
            return true;
        },
        _simpleAdd: function(){
            if (window.addEventListener) {
                return function(O, P, N, M){
                    O.addEventListener(P, N, (M));
                };
            }
            else {
                if (window.attachEvent) {
                    return function(O, P, N, M){
                        O.attachEvent("on" + P, N);
                    };
                }
                else {
                    return function(){
                    };
                }
            }
        }(),
        _tryPreloadAttach: function(){
            if (F.length === 0) {
                C = 0;
                if (this._interval) {
                    clearInterval(this._interval);
                    this._interval = null;
                }
                return;
            }
            if (this.locked) {
                return;
            }
            if (this.isIE) {
                if (!this.DOMReady) {
                    this.startInterval();
                    return;
                }
            }
            this.locked = true;
            var S = !H;
            if (!S) {
                S = (C > 0 && F.length > 0);
            }
            var R = [];
            var T = function(V, W){
                var U = V;
                if (W.overrideContext) {
                    if (W.overrideContext === true) {
                        U = W.obj;
                    }
                    else {
                        U = W.overrideContext;
                    }
                }
                W.fn.call(U, W.obj);
            };
            var N, M, Q, P, O = [];
            for (N = 0, M = F.length; N < M; N = N + 1) {
                Q = F[N];
                if (Q) {
                    P = this.get(Q.id);
                    if (P) {
                        if (Q.checkReady) {
                            if (H || P.nextSibling || !S) {
                                O.push(Q);
                                F[N] = null;
                            }
                        }
                        else {
                            T(P, Q);
                            F[N] = null;
                        }
                    }
                    else {
                        R.push(Q);
                    }
                }
            }
            for (N = 0, M = O.length; N < M; N = N + 1) {
                Q = O[N];
                T(this.get(Q.id), Q);
            }
            C--;
            if (S) {
                for (N = F.length - 1; N > -1; N--) {
                    Q = F[N];
                    if (!Q || !Q.id) {
                        F.splice(N, 1);
                    }
                }
                this.startInterval();
            }
            else {
                if (this._interval) {
                    clearInterval(this._interval);
                    this._interval = null;
                }
            }
            this.locked = false;
        },
        getEvent: function(O, M){
            var N = O || window.event;
            if (!N) {
                var P = this.getEvent.caller;
                while (P) {
                    N = P.arguments[0];
                    if (N && Event == N.constructor) {
                        break;
                    }
                    P = P.caller;
                }
            }
            return N;
        },
        scrollVertical: function(disp, msg, tg, stg){
             if (typeof(disp) == 'string') {
                this.scrollArea = D.getElementById(disp);
            }
            else {
                this.scrollArea = disp;
            }
            if (typeof(msg) == 'string') {
                this.scrollMsg = D.getElementById(msg);
            }
            else {
                this.scrollMsg = msg;
            }
            this.unitHeight = 0;
            this.msgHeight = 0;
            this.copyMsg = null;
            this.scrollValue = 0;
            this.scrollHeight = 0;
            this.isStop = true;
            this.isPause = false;
            this.isMoz = function(){
                if (navigator.userAgent.toLowerCase().match(/mozilla/)) {
                    return 1;
                }
            };
            this.scrollTimer = null;
            this.speed = 2000;
            this.lastIndex = 0;
            this.play = function(o){
                var s_msg = o.scrollMsg;
                var c_msg = o.copyMsg;
                var s_area = o.scrollArea;
                var msg_h = o.msgHeight;
                var anim = function(){
                    if (o.scrollTimer) {
                        clearTimeout(o.scrollTimer);
                    }
                    if (o.isPause) {
                        o.scrollTimer = setTimeout(anim, 50);
                        return;
                    }
                    if (msg_h - o.scrollValue <= 0) {
                        o.scrollValue = 0;
                    }
                    else {
                        o.scrollValue += 1;
                        o.scrollHeight += 1;
                    }
                    if (o.isMoz) {
                        s_area.scrollTop = o.scrollValue;
                    }
                    else {
                        s_msg.style.top = -1 * o.scrollValue + "px";
                        c_msg.style.top = (msg_h - o.scrollValue) + "px";
                    }
                    if (o.scrollHeight % s_area.offsetHeight == 0) {
                        if(o.scrollValue===0){
                            o.scrollTimer = setTimeout(anim, o.speed/2);
                        }
                        else{
                            o.scrollTimer = setTimeout(anim, o.speed);
                        }
                    }
                    else {
                        o.scrollTimer = setTimeout(anim, 50);
                    }
                };
                anim();
            };
           
            var s_msg = this.scrollMsg;
            var s_area = this.scrollArea;
            if (!tg) {
                var tg = 'li';
            }
            this.unitHeight = s_msg.getElementsByTagName(tg)[0].offsetHeight;
            this.msgHeight = this.unitHeight * s_msg.getElementsByTagName(tg).length;
            s_msg.style.position = "absolute";
            s_msg.style.top = "0";
            s_msg.style.left = "0";
            var copydiv = D.createElement(stg || 'div');
            copydiv.id = s_area.id + "_copymsgid";
            copydiv.innerHTML = s_msg.innerHTML;
            copydiv.style.height = this.msgHeight + "px";
            s_area.appendChild(copydiv);
            copydiv.style.position = "absolute";
            copydiv.style.left = "0";
            copydiv.style.top = this.msgHeight + "px";
            this.copyMsg = copydiv;
            this.play(this);
        },
        scrollNews: function(S, SI, RT, CT){
            var SN = new YAO.scrollVertical(S, SI, RT, CT);
            SN.speed = 4000;
            SN.isPause = true;
            var TM = setTimeout(function(){
                if (TM) {
                    clearTimeout(TM);
                }
                SN.isPause = false;
            }, 2000);
            YAO.on(SN.scrollArea, 'mouseover', function(){
                SN.isPause = true;
            });
            YAO.on(SN.scrollArea, 'mouseout', function(){
                SN.isPause = false;
            });
        },
        tabsNav: function(){
            var j, len = arguments.length;
            for (j = 0; j < len; j += 1) {
                (function(config){
                    var tabCnt = (config.tabId) ? D.getElementById(config.tabId) : (config.tabRoot || null), tabs = (config.tTag) ? tabCnt.getElementsByTagName(config.tTag) : (config.tabs || null), contents = (config.cTag) ? tabCnt.getElementsByTagName(config.cTag) : (config.contents || null), defaultClass = config.defaultClass || 'current', defaultIndex = config.defaultIndex || 0, lastIndex = defaultIndex, previousClass = config.previousClass || '', previousClassTab = null, hideAll = config.hideAll || false, evtName = config.evt || 'mouseover', i, length = tabs.length, lastTab = tabs[defaultIndex], lastTabClass = config.lastTabClass || '', lastContent = contents[defaultIndex], aui = 0, autoChange = config.auto || false, speed = config.speed || 6000;
                    if (tabs && contents) {
                        if (!hideAll) {
                            YAO.addClass(lastTab, defaultClass);
                            lastContent.style.display = 'block';
                        }
                        else {
                            YAO.removeClass(lastTab, defaultClass);
                            lastContent.style.display = 'none';
                        }
                        for (i = 0; i < length; i += 1) {
                            if (i !== defaultIndex) {
                                YAO.removeClass(tabs[i], 'current');
                                contents[i].style.display = 'none';
                            }
                            YAO.on(tabs[i], evtName, function(index){
                                return function(event){
                                    var currentContent = contents[index];
                                    aui = index;
                                    YAO.removeClass(lastTab, (YAO.hasClass(lastTab, defaultClass) ? defaultClass : 'current'));
                                    if (this === tabs[defaultIndex]) {
                                        YAO.addClass(this, defaultClass);
                                    }
                                    else {
                                        YAO.addClass(this, 'current');
                                    }
                                    if (index !== 0 && previousClass) {
                                        if (previousClassTab) {
                                            YAO.removeClass(previousClassTab, previousClass);
                                        }
                                        YAO.addClass(tabs[index - 1], previousClass);
                                        if ((index - 1) === defaultIndex) {
                                            YAO.removeClass(tabs[index - 1], defaultClass);
                                        }
                                        previousClassTab = (tabs[index - 1]);
                                    }
                                    lastContent.style.display = "none";
                                    currentContent.style.display = "block";
                                    lastContent = currentContent;
                                    lastTab = this;
                                    lastIndex = index;
                                    if (evtName === 'click') {
                                        var evt = event || window.event;
                                        YAO.stopEvent(evt);
                                    }
                                }
                            }(i));
                            if (hideAll && evtName === 'mouseover') {
                                YAO.on(tabs[i], 'mouseout', function(index){
                                    return function(){
                                        if (lastTab === this) {
                                            YAO.removeClass(this, (YAO.hasClass(this, defaultClass) ? defaultClass : 'current'));
                                        }
                                        if (previousClassTab) {
                                            YAO.removeClass(previousClassTab, previousClass);
                                        }
                                        contents[index].style.display = 'none';
                                    }
                                }(i));
                            }
                        }
                        if (autoChange) {
                            var timer = function(){
                                aui += 1;
                                if (aui === tabs.length) {
                                    aui = 0;
                                }
                                if (timer) {
                                    clearTimeout(timer);
                                }
                                YAO.tabsNav({
                                    tabs: tabs,
                                    contents: contents,
                                    defaultIndex: aui
                                });
                                setTimeout(timer, speed);
                            };
                            timer();
                        }
                    }
                })(arguments[j]);
            }
        },
        Ajax: function(){
            var d = true, c = {}, h = false, b = true, e = "XMLHttpRequest", a = true, f = {}, g = "application/x-www-form-urlencoded; charset=UTF-8", d = true;
            return {
                initHeader: function(i, l, k){
                    var j = (k) ? f : c;
                    if (j[i] === undefined) {
                        j[i] = l
                    }
                    else {
                        j[i] = l + "," + j[i]
                    }
                    if (k) {
                        a = true
                    }
                    else {
                        h = true
                    }
                },
                setHeader: function(i){
                    if (a) {
                        for (var j in f) {
                            if (hasOwnProperty(f, j)) {
                                i.setRequestHeader(j, f[j])
                            }
                        }
                    }
                    if (h) {
                        for (var j in c) {
                            if (hasOwnProperty(c, j)) {
                                i.setRequestHeader(j, c[j])
                            }
                        }
                        delete c;
                        c = {};
                        h = false
                    }
                },
                createXhrObject: function(){
                    var i = null;
                    if (window.XMLHttpRequest) {
                        i = new XMLHttpRequest()
                    }
                    else {
                        if (window.ActiveXObject) {
                            i = new ActiveXObject("Microsoft.XMLHTTP")
                        }
                        else {
                            throw new Error("Could not create XMLHTTPRequest Object.")
                        }
                    }
                    return i
                },
                Request: function(m, j, i, l){
                    var k = YAO.Ajax.createXhrObject();
                    if (m.toUpperCase === "GET") {
                        j = i ? YAO.stringBuffer(j, i) : j
                    }
                    k.open(m, j, true);
                    k.onreadystatechange = function(){
                        if (k.readyState !== 4) {
                            return false
                        }
                        if (isFunction(l)) {
                            l(k)
                        }
                        else {
                            (k.status === 200) ? l.success(k.responseText, k.responseXML) : l.failure(k.status);
                        }
                    };
                    if (d) {
                        if (!f["X-Requested-With"]) {
                            YAO.Ajax.initHeader("X-Requested-With", e, true)
                        }
                    }
                    if (a || h) {
                        YAO.Ajax.setHeader(k)
                    }
                    if (m.toUpperCase !== "POST") {
                        i = null
                    }
                    k.send(i)
                }
            }
        }()
    };
}();
YAO.register("YAO", YAO, {
    version: "1.0.1",
    build: "0621"
});
