var globalImgServer = 'http://style.alibaba.com';

if (typeof YAHOO == "undefined" || !YAHOO) {
    var YAHOO = {};
}
YAHOO.namespace = function() {
    var A = arguments,
    E = null,
    C,
    B,
    D;
    for (C = 0; C < A.length; C = C + 1) {
        D = A[C].split(".");
        E = YAHOO;
        for (B = (D[0] == "YAHOO") ? 1: 0; B < D.length; B = B + 1) {
            E[D[B]] = E[D[B]] || {};
            E = E[D[B]];
        }
    }
    return E;
};
YAHOO.register = function(A, E, D) {
    var I = YAHOO.env.modules;
    if (!I[A]) {
        I[A] = {
            versions: [],
            builds: []
            };
    }
    var B = I[A],
    H = D.version,
    G = D.build,
    F = YAHOO.env.listeners;
    B.name = A;
    B.version = H;
    B.build = G;
    B.versions.push(H);
    B.builds.push(G);
    B.mainClass = E;
    for (var C = 0; C < F.length; C = C + 1) {
        F[C](B);
    }
    if (E) {
        E.VERSION = H;
        E.BUILD = G;
    } else {
        YAHOO.log("mainClass is undefined for module " + A, "warn");
    }
};
YAHOO.env = YAHOO.env || {
    modules: [],
    listeners: []
    };
YAHOO.env.getVersion = function(A) {
    return YAHOO.env.modules[A] || null;
};
YAHOO.env.ua = function() {
    var C = {
        ie: 0,
        opera: 0,
        gecko: 0,
        webkit: 0,
        mobile: null,
        air: 0
    };
    var B = navigator.userAgent,
    A;
    if ((/KHTML/).test(B)) {
        C.webkit = 1;
    }
    A = B.match(/AppleWebKit\/([^\s]*)/);
    if (A && A[1]) {
        C.webkit = parseFloat(A[1]);
        if (/ Mobile\//.test(B)) {
            C.mobile = "Apple";
        } else {
            A = B.match(/NokiaN[^\/]*/);
            if (A) {
                C.mobile = A[0];
            }
        }
        A = B.match(/AdobeAIR\/([^\s]*)/);
        if (A) {
            C.air = A[0];
        }
    }
    if (!C.webkit) {
        A = B.match(/Opera[\s\/]([^\s]*)/);
        if (A && A[1]) {
            C.opera = parseFloat(A[1]);
            A = B.match(/Opera Mini[^;]*/);
            if (A) {
                C.mobile = A[0];
            }
        } else {
            A = B.match(/MSIE\s([^;]*)/);
            if (A && A[1]) {
                C.ie = parseFloat(A[1]);
            } else {
                A = B.match(/Gecko\/([^\s]*)/);
                if (A) {
                    C.gecko = 1;
                    A = B.match(/rv:([^\s\)]*)/);
                    if (A && A[1]) {
                        C.gecko = parseFloat(A[1]);
                    }
                }
            }
        }
    }
    return C;
} (); (function() {
    YAHOO.namespace("util", "widget", "example");
    if ("undefined" !== typeof YAHOO_config) {
        var B = YAHOO_config.listener,
        A = YAHOO.env.listeners,
        D = true,
        C;
        if (B) {
            for (C = 0; C < A.length; C = C + 1) {
                if (A[C] == B) {
                    D = false;
                    break;
                }
            }
            if (D) {
                A.push(B);
            }
        }
    }
})();
YAHOO.lang = YAHOO.lang || {}; (function() {
    var A = YAHOO.lang,
    C = ["toString", "valueOf"],
    B = {
        isArray: function(D) {
            if (D) {
                return A.isNumber(D.length) && A.isFunction(D.splice);
            }
            return false;
        },
        isBoolean: function(D) {
            return typeof D === "boolean";
        },
        isFunction: function(D) {
            return typeof D === "function";
        },
        isNull: function(D) {
            return D === null;
        },
        isNumber: function(D) {
            return typeof D === "number" && isFinite(D);
        },
        isObject: function(D) {
            return (D && (typeof D === "object" || A.isFunction(D))) || false;
        },
        isString: function(D) {
            return typeof D === "string";
        },
        isUndefined: function(D) {
            return typeof D === "undefined";
        },
        _IEEnumFix: (YAHOO.env.ua.ie) ? function(F, E) {
            for (var D = 0; D < C.length; D = D + 1) {
                var H = C[D],
                G = E[H];
                if (A.isFunction(G) && G != Object.prototype[H]) {
                    F[H] = G;
                }
            }
        }: function() {},
        extend: function(H, I, G) {
            if (!I || !H) {
                throw new Error("extend failed, please check that " + "all dependencies are included.");
            }
            var E = function() {};
            E.prototype = I.prototype;
            H.prototype = new E();
            H.prototype.constructor = H;
            H.superclass = I.prototype;
            if (I.prototype.constructor == Object.prototype.constructor) {
                I.prototype.constructor = I;
            }
            if (G) {
                for (var D in G) {
                    if (A.hasOwnProperty(G, D)) {
                        H.prototype[D] = G[D];
                    }
                }
                A._IEEnumFix(H.prototype, G);
            }
        },
        augmentObject: function(H, G) {
            if (!G || !H) {
                throw new Error("Absorb failed, verify dependencies.");
            }
            var D = arguments,
            F,
            I,
            E = D[2];
            if (E && E !== true) {
                for (F = 2; F < D.length; F = F + 1) {
                    H[D[F]] = G[D[F]];
                }
            } else {
                for (I in G) {
                    if (E || !(I in H)) {
                        H[I] = G[I];
                    }
                }
                A._IEEnumFix(H, G);
            }
        },
        augmentProto: function(G, F) {
            if (!F || !G) {
                throw new Error("Augment failed, verify dependencies.");
            }
            var D = [G.prototype, F.prototype];
            for (var E = 2; E < arguments.length; E = E + 1) {
                D.push(arguments[E]);
            }
            A.augmentObject.apply(this, D);
        },
        dump: function(D, I) {
            var F,
            H,
            K = [],
            L = "{...}",
            E = "f(){...}",
            J = ", ",
            G = " => ";
            if (!A.isObject(D)) {
                return D + "";
            } else {
                if (D instanceof Date || ("nodeType" in D && "tagName" in D)) {
                    return D;
                } else {
                    if (A.isFunction(D)) {
                        return E;
                    }
                }
            }
            I = (A.isNumber(I)) ? I: 3;
            if (A.isArray(D)) {
                K.push("[");
                for (F = 0, H = D.length; F < H; F = F + 1) {
                    if (A.isObject(D[F])) {
                        K.push((I > 0) ? A.dump(D[F], I - 1) : L);
                    } else {
                        K.push(D[F]);
                    }
                    K.push(J);
                }
                if (K.length > 1) {
                    K.pop();
                }
                K.push("]");
            } else {
                K.push("{");
                for (F in D) {
                    if (A.hasOwnProperty(D, F)) {
                        K.push(F + G);
                        if (A.isObject(D[F])) {
                            K.push((I > 0) ? A.dump(D[F], I - 1) : L);
                        } else {
                            K.push(D[F]);
                        }
                        K.push(J);
                    }
                }
                if (K.length > 1) {
                    K.pop();
                }
                K.push("}");
            }
            return K.join("");
        },
        substitute: function(S, E, L) {
            var I,
            H,
            G,
            O,
            P,
            R,
            N = [],
            F,
            J = "dump",
            M = " ",
            D = "{",
            Q = "}";
            for (;;) {
                I = S.lastIndexOf(D);
                if (I < 0) {
                    break;
                }
                H = S.indexOf(Q, I);
                if (I + 1 >= H) {
                    break;
                }
                F = S.substring(I + 1, H);
                O = F;
                R = null;
                G = O.indexOf(M);
                if (G > -1) {
                    R = O.substring(G + 1);
                    O = O.substring(0, G);
                }
                P = E[O];
                if (L) {
                    P = L(O, P, R);
                }
                if (A.isObject(P)) {
                    if (A.isArray(P)) {
                        P = A.dump(P, parseInt(R, 10));
                    } else {
                        R = R || "";
                        var K = R.indexOf(J);
                        if (K > -1) {
                            R = R.substring(4);
                        }
                        if (P.toString === Object.prototype.toString || K > -1) {
                            P = A.dump(P, parseInt(R, 10));
                        } else {
                            P = P.toString();
                        }
                    }
                } else {
                    if (!A.isString(P) && !A.isNumber(P)) {
                        P = "~-" + N.length + "-~";
                        N[N.length] = F;
                    }
                }
                S = S.substring(0, I) + P + S.substring(H + 1);
            }
            for (I = N.length - 1; I >= 0; I = I - 1) {
                S = S.replace(new RegExp("~-" + I + "-~"), "{" + N[I] + "}", "g");
            }
            return S;
        },
        trim: function(D) {
            try {
                return D.replace(/^\s+|\s+$/g, "");
            } catch(E) {
                return D;
            }
        },
        merge: function() {
            var G = {},
            E = arguments;
            for (var F = 0, D = E.length; F < D; F = F + 1) {
                A.augmentObject(G, E[F], true);
            }
            return G;
        },
        later: function(K, E, L, G, H) {
            K = K || 0;
            E = E || {};
            var F = L,
            J = G,
            I,
            D;
            if (A.isString(L)) {
                F = E[L];
            }
            if (!F) {
                throw new TypeError("method undefined");
            }
            if (!A.isArray(J)) {
                J = [G];
            }
            I = function() {
                F.apply(E, J);
            };
            D = (H) ? setInterval(I, K) : setTimeout(I, K);
            return {
                interval: H,
                cancel: function() {
                    if (this.interval) {
                        clearInterval(D);
                    } else {
                        clearTimeout(D);
                    }
                }
            };
        },
        isValue: function(D) {
            return (A.isObject(D) || A.isString(D) || A.isNumber(D) || A.isBoolean(D));
        }
    };
    A.hasOwnProperty = (Object.prototype.hasOwnProperty) ? function(D, E) {
        return D && D.hasOwnProperty(E);
    }: function(D, E) {
        return ! A.isUndefined(D[E]) && D.constructor.prototype[E] !== D[E];
    };
    B.augmentObject(A, B, true);
    YAHOO.util.Lang = A;
    A.augment = A.augmentProto;
    YAHOO.augment = A.augmentProto;
    YAHOO.extend = A.extend;
})();
YAHOO.register("yahoo", YAHOO, {
    version: "2.6.0",
    build: "1321"
});
YAHOO.util.Get = function() {
    var M = {},
    L = 0,
    R = 0,
    E = false,
    N = YAHOO.env.ua,
    S = YAHOO.lang;
    var J = function(W, T, X) {
        var U = X || window,
        Y = U.document,
        Z = Y.createElement(W);
        for (var V in T) {
            if (T[V] && YAHOO.lang.hasOwnProperty(T, V)) {
                Z.setAttribute(V, T[V]);
            }
        }
        return Z;
    };
    var I = function(T, U, W) {
        var V = W || "utf-8";
        return J("link", {
            "id": "yui__dyn_" + (R++),
            "type": "text/css",
            "charset": V,
            "rel": "stylesheet",
            "href": T
        }, U);
    };
    var P = function(T, U, W) {
        var V = W || "utf-8";
        return J("script", {
            "id": "yui__dyn_" + (R++),
            "type": "text/javascript",
            "charset": V,
            "src": T
        }, U);
    };
    var A = function(T, U) {
        return {
            tId: T.tId,
            win: T.win,
            data: T.data,
            nodes: T.nodes,
            msg: U,
            purge: function() {
                D(this.tId);
            }
        };
    };
    var B = function(T, W) {
        var U = M[W],
        V = (S.isString(T)) ? U.win.document.getElementById(T) : T;
        if (!V) {
            Q(W, "target node not found: " + T);
        }
        return V;
    };
    var Q = function(W, V) {
        var T = M[W];
        if (T.onFailure) {
            var U = T.scope || T.win;
            T.onFailure.call(U, A(T, V));
        }
    };
    var C = function(W) {
        var T = M[W];
        T.finished = true;
        if (T.aborted) {
            var V = "transaction " + W + " was aborted";
            Q(W, V);
            return;
        }
        if (T.onSuccess) {
            var U = T.scope || T.win;
            T.onSuccess.call(U, A(T));
        }
    };
    var O = function(V) {
        var T = M[V];
        if (T.onTimeout) {
            var U = T.context || T;
            T.onTimeout.call(U, A(T));
        }
    };
    var G = function(V, Z) {
        var U = M[V];
        if (U.timer) {
            U.timer.cancel();
        }
        if (U.aborted) {
            var X = "transaction " + V + " was aborted";
            Q(V, X);
            return;
        }
        if (Z) {
            U.url.shift();
            if (U.varName) {
                U.varName.shift();
            }
        } else {
            U.url = (S.isString(U.url)) ? [U.url] : U.url;
            if (U.varName) {
                U.varName = (S.isString(U.varName)) ? [U.varName] : U.varName;
            }
        }
        var c = U.win,
        b = c.document,
        a = b.getElementsByTagName("head")[0],
        W;
        if (U.url.length === 0) {
            if (U.type === "script" && N.webkit && N.webkit < 420 && !U.finalpass && !U.varName) {
                var Y = P(null, U.win, U.charset);
                Y.innerHTML = 'YAHOO.util.Get._finalize("' + V + '");';
                U.nodes.push(Y);
                a.appendChild(Y);
            } else {
                C(V);
            }
            return;
        }
        var T = U.url[0];
        if (!T) {
            U.url.shift();
            return G(V);
        }
        if (U.timeout) {
            U.timer = S.later(U.timeout, U, O, V);
        }
        if (U.type === "script") {
            W = P(T, c, U.charset);
        } else {
            W = I(T, c, U.charset);
        }
        F(U.type, W, V, T, c, U.url.length);
        U.nodes.push(W);
        if (U.insertBefore) {
            var e = B(U.insertBefore, V);
            if (e) {
                e.parentNode.insertBefore(W, e);
            }
        } else {
            a.appendChild(W);
        }
        if ((N.webkit || N.gecko) && U.type === "css") {
            G(V, T);
        }
    };
    var K = function() {
        if (E) {
            return;
        }
        E = true;
        for (var T in M) {
            var U = M[T];
            if (U.autopurge && U.finished) {
                D(U.tId);
                delete M[T];
            }
        }
        E = false;
    };
    var D = function(a) {
        var X = M[a];
        if (X) {
            var Z = X.nodes,
            T = Z.length,
            Y = X.win.document,
            W = Y.getElementsByTagName("head")[0];
            if (X.insertBefore) {
                var V = B(X.insertBefore, a);
                if (V) {
                    W = V.parentNode;
                }
            }
            for (var U = 0; U < T; U = U + 1) {
                W.removeChild(Z[U]);
            }
            X.nodes = [];
        }
    };
    var H = function(U, T, V) {
        var X = "q" + (L++);
        V = V || {};
        if (N.ie !== 6 && L % YAHOO.util.Get.PURGE_THRESH === 0) {
            K();
        }
        M[X] = S.merge(V, {
            tId: X,
            type: U,
            url: T,
            finished: false,
            aborted: false,
            nodes: []
            });
        var W = M[X];
        W.win = W.win || window;
        W.scope = W.scope || W.win;
        W.autopurge = ("autopurge" in W) ? W.autopurge: (U === "script") ? true: false;
        S.later(0, W, G, X);
        return {
            tId: X
        };
    };
    var F = function(c, X, W, U, Y, Z, b) {
        var a = b || G;
        if (N.ie) {
            X.onreadystatechange = function() {
                var d = this.readyState;
                if ("loaded" === d || "complete" === d) {
                    X.onreadystatechange = null;
                    a(W, U);
                }
            };
        } else {
            if (N.webkit) {
                if (c === "script") {
                    if (N.webkit >= 420) {
                        X.addEventListener("load", function() {
                            a(W, U);
                        });
                    } else {
                        var T = M[W];
                        if (T.varName) {
                            var V = YAHOO.util.Get.POLL_FREQ;
                            T.maxattempts = YAHOO.util.Get.TIMEOUT / V;
                            T.attempts = 0;
                            T._cache = T.varName[0].split(".");
                            T.timer = S.later(V, T, function(j) {
                                var f = this._cache,
                                e = f.length,
                                d = this.win,
                                g;
                                for (g = 0; g < e; g = g + 1) {
                                    d = d[f[g]];
                                    if (!d) {
                                        this.attempts++;
                                        if (this.attempts++>this.maxattempts) {
                                            var h = "Over retry limit, giving up";
                                            T.timer.cancel();
                                            Q(W, h);
                                        } else {}
                                        return;
                                    }
                                }
                                T.timer.cancel();
                                a(W, U);
                            }, null, true);
                        } else {
                            S.later(YAHOO.util.Get.POLL_FREQ, null, a, [W, U]);
                        }
                    }
                }
            } else {
                X.onload = function() {
                    a(W, U);
                };
            }
        }
    };
    return {
        POLL_FREQ: 10,
        PURGE_THRESH: 20,
        TIMEOUT: 2000,
        _finalize: function(T) {
            S.later(0, null, C, T);
        },
        abort: function(U) {
            var V = (S.isString(U)) ? U: U.tId;
            var T = M[V];
            if (T) {
                T.aborted = true;
            }
        },
        script: function(T, U) {
            return H("script", T, U);
        },
        css: function(T, U) {
            return H("css", T, U);
        }
    };
} ();
YAHOO.register("get", YAHOO.util.Get, {
    version: "2.6.0",
    build: "1321"
}); (function() {
    var B = YAHOO.util,
    F = YAHOO.lang,
    L,
    J,
    K = {},
    G = {},
    N = window.document;
    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;
    var C = YAHOO.env.ua.opera,
    M = YAHOO.env.ua.webkit,
    A = YAHOO.env.ua.gecko,
    H = YAHOO.env.ua.ie;
    var E = {
        HYPHEN: /(-[a-z])/i,
        ROOT_TAG: /^body|html$/i,
        OP_SCROLL: /^(?:inline|table-row)$/i
    };
    var O = function(Q) {
        if (!E.HYPHEN.test(Q)) {
            return Q;
        }
        if (K[Q]) {
            return K[Q];
        }
        var R = Q;
        while (E.HYPHEN.exec(R)) {
            R = R.replace(RegExp.$1, RegExp.$1.substr(1).toUpperCase());
        }
        K[Q] = R;
        return R;
    };
    var P = function(R) {
        var Q = G[R];
        if (!Q) {
            Q = new RegExp("(?:^|\\s+)" + R + "(?:\\s+|$)");
            G[R] = Q;
        }
        return Q;
    };
    if (N.defaultView && N.defaultView.getComputedStyle) {
        L = function(Q, T) {
            var S = null;
            if (T == "float") {
                T = "cssFloat";
            }
            var R = Q.ownerDocument.defaultView.getComputedStyle(Q, "");
            if (R) {
                S = R[O(T)];
            }
            return Q.style[T] || S;
        };
    } else {
        if (N.documentElement.currentStyle && H) {
            L = function(Q, S) {
                switch (O(S)) {
                case "opacity":
                    var U = 100;
                    try {
                        U = Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;
                    } catch(T) {
                        try {
                            U = Q.filters("alpha").opacity;
                        } catch(T) {}
                    }
                    return U / 100;
                case "float":
                    S = "styleFloat";
                default:
                    var R = Q.currentStyle ? Q.currentStyle[S] : null;
                    return (Q.style[S] || R);
                }
            };
        } else {
            L = function(Q, R) {
                return Q.style[R];
            };
        }
    }
    if (H) {
        J = function(Q, R, S) {
            switch (R) {
            case "opacity":
                if (F.isString(Q.style.filter)) {
                    Q.style.filter = "alpha(opacity=" + S * 100 + ")";
                    if (!Q.currentStyle || !Q.currentStyle.hasLayout) {
                        Q.style.zoom = 1;
                    }
                }
                break;
            case "float":
                R = "styleFloat";
            default:
                Q.style[R] = S;
            }
        };
    } else {
        J = function(Q, R, S) {
            if (R == "float") {
                R = "cssFloat";
            }
            Q.style[R] = S;
        };
    }
    var D = function(Q, R) {
        return Q && Q.nodeType == 1 && (!R || R(Q));
    };
    YAHOO.util.Dom = {
        get: function(S) {
            if (S) {
                if (S.nodeType || S.item) {
                    return S;
                }
                if (typeof S === "string") {
                    return N.getElementById(S);
                }
                if ("length" in S) {
                    var T = [];
                    for (var R = 0, Q = S.length; R < Q;++R) {
                        T[T.length] = B.Dom.get(S[R]);
                    }
                    return T;
                }
                return S;
            }
            return null;
        },
        getStyle: function(Q, S) {
            S = O(S);
            var R = function(T) {
                return L(T, S);
            };
            return B.Dom.batch(Q, R, B.Dom, true);
        },
        setStyle: function(Q, S, T) {
            S = O(S);
            var R = function(U) {
                J(U, S, T);
            };
            B.Dom.batch(Q, R, B.Dom, true);
        },
        getXY: function(Q) {
            var R = function(S) {
                if ((S.parentNode === null || S.offsetParent === null || this.getStyle(S, "display") == "none") && S != S.ownerDocument.body) {
                    return false;
                }
                return I(S);
            };
            return B.Dom.batch(Q, R, B.Dom, true);
        },
        getX: function(Q) {
            var R = function(S) {
                return B.Dom.getXY(S)[0];
            };
            return B.Dom.batch(Q, R, B.Dom, true);
        },
        getY: function(Q) {
            var R = function(S) {
                return B.Dom.getXY(S)[1];
            };
            return B.Dom.batch(Q, R, B.Dom, true);
        },
        setXY: function(Q, T, S) {
            var R = function(W) {
                var V = this.getStyle(W, "position");
                if (V == "static") {
                    this.setStyle(W, "position", "relative");
                    V = "relative";
                }
                var Y = this.getXY(W);
                if (Y === false) {
                    return false;
                }
                var X = [parseInt(this.getStyle(W, "left"), 10), parseInt(this.getStyle(W, "top"), 10)];
                if (isNaN(X[0])) {
                    X[0] = (V == "relative") ? 0: W.offsetLeft;
                }
                if (isNaN(X[1])) {
                    X[1] = (V == "relative") ? 0: W.offsetTop;
                }
                if (T[0] !== null) {
                    W.style.left = T[0] - Y[0] + X[0] + "px";
                }
                if (T[1] !== null) {
                    W.style.top = T[1] - Y[1] + X[1] + "px";
                }
                if (!S) {
                    var U = this.getXY(W);
                    if ((T[0] !== null && U[0] != T[0]) || (T[1] !== null && U[1] != T[1])) {
                        this.setXY(W, T, true);
                    }
                }
            };
            B.Dom.batch(Q, R, B.Dom, true);
        },
        setX: function(R, Q) {
            B.Dom.setXY(R, [Q, null]);
        },
        setY: function(Q, R) {
            B.Dom.setXY(Q, [null, R]);
        },
        getRegion: function(Q) {
            var R = function(S) {
                if ((S.parentNode === null || S.offsetParent === null || this.getStyle(S, "display") == "none") && S != S.ownerDocument.body) {
                    return false;
                }
                var T = B.Region.getRegion(S);
                return T;
            };
            return B.Dom.batch(Q, R, B.Dom, true);
        },
        getClientWidth: function() {
            return B.Dom.getViewportWidth();
        },
        getClientHeight: function() {
            return B.Dom.getViewportHeight();
        },
        getElementsByClassName: function(U, Y, V, W) {
            U = F.trim(U);
            Y = Y || "*";
            V = (V) ? B.Dom.get(V) : null || N;
            if (!V) {
                return [];
            }
            var R = [],
            Q = V.getElementsByTagName(Y),
            X = P(U);
            for (var S = 0, T = Q.length; S < T;++S) {
                if (X.test(Q[S].className)) {
                    R[R.length] = Q[S];
                    if (W) {
                        W.call(Q[S], Q[S]);
                    }
                }
            }
            return R;
        },
        hasClass: function(S, R) {
            var Q = P(R);
            var T = function(U) {
                return Q.test(U.className);
            };
            return B.Dom.batch(S, T, B.Dom, true);
        },
        addClass: function(R, Q) {
            var S = function(T) {
                if (this.hasClass(T, Q)) {
                    return false;
                }
                T.className = F.trim([T.className, Q].join(" "));
                return true;
            };
            return B.Dom.batch(R, S, B.Dom, true);
        },
        removeClass: function(S, R) {
            var Q = P(R);
            var T = function(W) {
                var V = false,
                X = W.className;
                if (R && X && this.hasClass(W, R)) {
                    W.className = X.replace(Q, " ");
                    if (this.hasClass(W, R)) {
                        this.removeClass(W, R);
                    }
                    W.className = F.trim(W.className);
                    if (W.className === "") {
                        var U = (W.hasAttribute) ? "class": "className";
                        W.removeAttribute(U);
                    }
                    V = true;
                }
                return V;
            };
            return B.Dom.batch(S, T, B.Dom, true);
        },
        replaceClass: function(T, R, Q) {
            if (!Q || R === Q) {
                return false;
            }
            var S = P(R);
            var U = function(V) {
                if (!this.hasClass(V, R)) {
                    this.addClass(V, Q);
                    return true;
                }
                V.className = V.className.replace(S, " " + Q + " ");
                if (this.hasClass(V, R)) {
                    this.removeClass(V, R);
                }
                V.className = F.trim(V.className);
                return true;
            };
            return B.Dom.batch(T, U, B.Dom, true);
        },
        generateId: function(Q, S) {
            S = S || "yui-gen";
            var R = function(T) {
                if (T && T.id) {
                    return T.id;
                }
                var U = S + YAHOO.env._id_counter++;
                if (T) {
                    T.id = U;
                }
                return U;
            };
            return B.Dom.batch(Q, R, B.Dom, true) || R.apply(B.Dom, arguments);
        },
        isAncestor: function(R, S) {
            R = B.Dom.get(R);
            S = B.Dom.get(S);
            var Q = false;
            if ((R && S) && (R.nodeType && S.nodeType)) {
                if (R.contains && R !== S) {
                    Q = R.contains(S);
                } else {
                    if (R.compareDocumentPosition) {
                        Q = !!(R.compareDocumentPosition(S) & 16);
                    }
                }
            } else {}
            return Q;
        },
        inDocument: function(Q) {
            return this.isAncestor(N.documentElement, Q);
        },
        getElementsBy: function(X, R, S, U) {
            R = R || "*";
            S = (S) ? B.Dom.get(S) : null || N;
            if (!S) {
                return [];
            }
            var T = [],
            W = S.getElementsByTagName(R);
            for (var V = 0, Q = W.length; V < Q;++V) {
                if (X(W[V])) {
                    T[T.length] = W[V];
                    if (U) {
                        U(W[V]);
                    }
                }
            }
            return T;
        },
        batch: function(U, X, W, S) {
            U = (U && (U.tagName || U.item)) ? U: B.Dom.get(U);
            if (!U || !X) {
                return false;
            }
            var T = (S) ? W: window;
            if (U.tagName || U.length === undefined) {
                return X.call(T, U, W);
            }
            var V = [];
            for (var R = 0, Q = U.length; R < Q;++R) {
                V[V.length] = X.call(T, U[R], W);
            }
            return V;
        },
        getDocumentHeight: function() {
            var R = (N.compatMode != "CSS1Compat") ? N.body.scrollHeight: N.documentElement.scrollHeight;
            var Q = Math.max(R, B.Dom.getViewportHeight());
            return Q;
        },
        getDocumentWidth: function() {
            var R = (N.compatMode != "CSS1Compat") ? N.body.scrollWidth: N.documentElement.scrollWidth;
            var Q = Math.max(R, B.Dom.getViewportWidth());
            return Q;
        },
        getViewportHeight: function() {
            var Q = self.innerHeight;
            var R = N.compatMode;
            if ((R || H) && !C) {
                Q = (R == "CSS1Compat") ? N.documentElement.clientHeight: N.body.clientHeight;
            }
            return Q;
        },
        getViewportWidth: function() {
            var Q = self.innerWidth;
            var R = N.compatMode;
            if (R || H) {
                Q = (R == "CSS1Compat") ? N.documentElement.clientWidth: N.body.clientWidth;
            }
            return Q;
        },
        getAncestorBy: function(Q, R) {
            while ((Q = Q.parentNode)) {
                if (D(Q, R)) {
                    return Q;
                }
            }
            return null;
        },
        getAncestorByClassName: function(R, Q) {
            R = B.Dom.get(R);
            if (!R) {
                return null;
            }
            var S = function(T) {
                return B.Dom.hasClass(T, Q);
            };
            return B.Dom.getAncestorBy(R, S);
        },
        getAncestorByTagName: function(R, Q) {
            R = B.Dom.get(R);
            if (!R) {
                return null;
            }
            var S = function(T) {
                return T.tagName && T.tagName.toUpperCase() == Q.toUpperCase();
            };
            return B.Dom.getAncestorBy(R, S);
        },
        getPreviousSiblingBy: function(Q, R) {
            while (Q) {
                Q = Q.previousSibling;
                if (D(Q, R)) {
                    return Q;
                }
            }
            return null;
        },
        getPreviousSibling: function(Q) {
            Q = B.Dom.get(Q);
            if (!Q) {
                return null;
            }
            return B.Dom.getPreviousSiblingBy(Q);
        },
        getNextSiblingBy: function(Q, R) {
            while (Q) {
                Q = Q.nextSibling;
                if (D(Q, R)) {
                    return Q;
                }
            }
            return null;
        },
        getNextSibling: function(Q) {
            Q = B.Dom.get(Q);
            if (!Q) {
                return null;
            }
            return B.Dom.getNextSiblingBy(Q);
        },
        getFirstChildBy: function(Q, S) {
            var R = (D(Q.firstChild, S)) ? Q.firstChild: null;
            return R || B.Dom.getNextSiblingBy(Q.firstChild, S);
        },
        getFirstChild: function(Q, R) {
            Q = B.Dom.get(Q);
            if (!Q) {
                return null;
            }
            return B.Dom.getFirstChildBy(Q);
        },
        getLastChildBy: function(Q, S) {
            if (!Q) {
                return null;
            }
            var R = (D(Q.lastChild, S)) ? Q.lastChild: null;
            return R || B.Dom.getPreviousSiblingBy(Q.lastChild, S);
        },
        getLastChild: function(Q) {
            Q = B.Dom.get(Q);
            return B.Dom.getLastChildBy(Q);
        },
        getChildrenBy: function(R, T) {
            var S = B.Dom.getFirstChildBy(R, T);
            var Q = S ? [S] : [];
            B.Dom.getNextSiblingBy(S, function(U) {
                if (!T || T(U)) {
                    Q[Q.length] = U;
                }
                return false;
            });
            return Q;
        },
        getChildren: function(Q) {
            Q = B.Dom.get(Q);
            if (!Q) {}
            return B.Dom.getChildrenBy(Q);
        },
        getDocumentScrollLeft: function(Q) {
            Q = Q || N;
            return Math.max(Q.documentElement.scrollLeft, Q.body.scrollLeft);
        },
        getDocumentScrollTop: function(Q) {
            Q = Q || N;
            return Math.max(Q.documentElement.scrollTop, Q.body.scrollTop);
        },
        insertBefore: function(R, Q) {
            R = B.Dom.get(R);
            Q = B.Dom.get(Q);
            if (!R || !Q || !Q.parentNode) {
                return null;
            }
            return Q.parentNode.insertBefore(R, Q);
        },
        insertAfter: function(R, Q) {
            R = B.Dom.get(R);
            Q = B.Dom.get(Q);
            if (!R || !Q || !Q.parentNode) {
                return null;
            }
            if (Q.nextSibling) {
                return Q.parentNode.insertBefore(R, Q.nextSibling);
            } else {
                return Q.parentNode.appendChild(R);
            }
        },
        getClientRegion: function() {
            var S = B.Dom.getDocumentScrollTop(),
            R = B.Dom.getDocumentScrollLeft(),
            T = B.Dom.getViewportWidth() + R,
            Q = B.Dom.getViewportHeight() + S;
            return new B.Region(S, T, Q, R);
        }
    };
    var I = function() {
        if (N.documentElement.getBoundingClientRect) {
            return function(S) {
                var T = S.getBoundingClientRect(),
                R = Math.round;
                var Q = S.ownerDocument;
                return [R(T.left + B.Dom.getDocumentScrollLeft(Q)), R(T.top + B.Dom.getDocumentScrollTop(Q))];
            };
        } else {
            return function(S) {
                var T = [S.offsetLeft, S.offsetTop];
                var R = S.offsetParent;
                var Q = (M && B.Dom.getStyle(S, "position") == "absolute" && S.offsetParent == S.ownerDocument.body);
                if (R != S) {
                    while (R) {
                        T[0] += R.offsetLeft;
                        T[1] += R.offsetTop;
                        if (!Q && M && B.Dom.getStyle(R, "position") == "absolute") {
                            Q = true;
                        }
                        R = R.offsetParent;
                    }
                }
                if (Q) {
                    T[0] -= S.ownerDocument.body.offsetLeft;
                    T[1] -= S.ownerDocument.body.offsetTop;
                }
                R = S.parentNode;
                while (R.tagName && !E.ROOT_TAG.test(R.tagName)) {
                    if (R.scrollTop || R.scrollLeft) {
                        T[0] -= R.scrollLeft;
                        T[1] -= R.scrollTop;
                    }
                    R = R.parentNode;
                }
                return T;
            };
        }
    } ();
})();
YAHOO.register("dom", YAHOO.util.Dom, {
    version: "2.6.0",
    build: "1321"
});
YAHOO.util.CustomEvent = function(D, B, C, A) {
    this.type = D;
    this.scope = B || window;
    this.silent = C;
    this.signature = A || YAHOO.util.CustomEvent.LIST;
    this.subscribers = [];
    if (!this.silent) {}
    var E = "_YUICEOnSubscribe";
    if (D !== E) {
        this.subscribeEvent = new YAHOO.util.CustomEvent(E, this, true);
    }
    this.lastError = null;
};
YAHOO.util.CustomEvent.LIST = 0;
YAHOO.util.CustomEvent.FLAT = 1;
YAHOO.util.CustomEvent.prototype = {
    subscribe: function(B, C, A) {
        if (!B) {
            throw new Error("Invalid callback for subscriber to '" + this.type + "'");
        }
        if (this.subscribeEvent) {
            this.subscribeEvent.fire(B, C, A);
        }
        this.subscribers.push(new YAHOO.util.Subscriber(B, C, A));
    },
    unsubscribe: function(D, F) {
        if (!D) {
            return this.unsubscribeAll();
        }
        var E = false;
        for (var B = 0, A = this.subscribers.length; B < A;++B) {
            var C = this.subscribers[B];
            if (C && C.contains(D, F)) {
                this._delete(B);
                E = true;
            }
        }
        return E;
    },
    fire: function() {
        this.lastError = null;
        var K = [],
        E = this.subscribers.length;
        if (!E && this.silent) {
            return true;
        }
        var I = [].slice.call(arguments, 0),
        G = true,
        D,
        J = false;
        if (!this.silent) {}
        var C = this.subscribers.slice(),
        A = YAHOO.util.Event.throwErrors;
        for (D = 0; D < E;++D) {
            var M = C[D];
            if (!M) {
                J = true;
            } else {
                if (!this.silent) {}
                var L = M.getScope(this.scope);
                if (this.signature == YAHOO.util.CustomEvent.FLAT) {
                    var B = null;
                    if (I.length > 0) {
                        B = I[0];
                    }
                    try {
                        G = M.fn.call(L, B, M.obj);
                    } catch(F) {
                        this.lastError = F;
                        if (A) {
                            throw F;
                        }
                    }
                } else {
                    try {
                        G = M.fn.call(L, this.type, I, M.obj);
                    } catch(H) {
                        this.lastError = H;
                        if (A) {
                            throw H;
                        }
                    }
                }
                if (false === G) {
                    if (!this.silent) {}
                    break;
                }
            }
        }
        return (G !== false);
    },
    unsubscribeAll: function() {
        for (var A = this.subscribers.length - 1; A > -1; A--) {
            this._delete(A);
        }
        this.subscribers = [];
        return A;
    },
    _delete: function(A) {
        var B = this.subscribers[A];
        if (B) {
            delete B.fn;
            delete B.obj;
        }
        this.subscribers.splice(A, 1);
    },
    toString: function() {
        return "CustomEvent: " + "'" + this.type + "', " + "scope: " + this.scope;
    }
};
YAHOO.util.Subscriber = function(B, C, A) {
    this.fn = B;
    this.obj = YAHOO.lang.isUndefined(C) ? null: C;
    this.override = A;
};
YAHOO.util.Subscriber.prototype.getScope = function(A) {
    if (this.override) {
        if (this.override === true) {
            return this.obj;
        } else {
            return this.override;
        }
    }
    return A;
};
YAHOO.util.Subscriber.prototype.contains = function(A, B) {
    if (B) {
        return (this.fn == A && this.obj == B);
    } else {
        return (this.fn == A);
    }
};
YAHOO.util.Subscriber.prototype.toString = function() {
    return "Subscriber { obj: " + this.obj + ", override: " + (this.override || "no") + " }";
};
if (!YAHOO.util.Event) {
    YAHOO.util.Event = function() {
        var H = false;
        var I = [];
        var J = [];
        var G = [];
        var E = [];
        var C = 0;
        var F = [];
        var B = [];
        var A = 0;
        var D = {
            63232: 38,
            63233: 40,
            63234: 37,
            63235: 39,
            63276: 33,
            63277: 34,
            25: 9
        };
        var K = YAHOO.env.ua.ie ? "focusin": "focus";
        var L = YAHOO.env.ua.ie ? "focusout": "blur";
        return {
            POLL_RETRYS: 2000,
            POLL_INTERVAL: 20,
            EL: 0,
            TYPE: 1,
            FN: 2,
            WFN: 3,
            UNLOAD_OBJ: 3,
            ADJ_SCOPE: 4,
            OBJ: 5,
            OVERRIDE: 6,
            CAPTURE: 7,
            lastError: null,
            isSafari: YAHOO.env.ua.webkit,
            webkit: YAHOO.env.ua.webkit,
            isIE: YAHOO.env.ua.ie,
            _interval: null,
            _dri: null,
            DOMReady: false,
            throwErrors: false,
            startInterval: function() {
                if (!this._interval) {
                    var M = this;
                    var N = function() {
                        M._tryPreloadAttach();
                    };
                    this._interval = setInterval(N, this.POLL_INTERVAL);
                }
            },
            onAvailable: function(R, O, S, Q, P) {
                var M = (YAHOO.lang.isString(R)) ? [R] : R;
                for (var N = 0; N < M.length; N = N + 1) {
                    F.push({
                        id: M[N],
                        fn: O,
                        obj: S,
                        override: Q,
                        checkReady: P
                    });
                }
                C = this.POLL_RETRYS;
                this.startInterval();
            },
            onContentReady: function(O, M, P, N) {
                this.onAvailable(O, M, P, N, true);
            },
            onDOMReady: function(M, O, N) {
                if (this.DOMReady) {
                    setTimeout(function() {
                        var P = window;
                        if (N) {
                            if (N === true) {
                                P = O;
                            } else {
                                P = N;
                            }
                        }
                        M.call(P, "DOMReady", [], O);
                    }, 0);
                } else {
                    this.DOMReadyEvent.subscribe(M, O, N);
                }
            },
            _addListener: function(O, M, X, S, N, a) {
                if (!X || !X.call) {
                    return false;
                }
                if (this._isValidCollection(O)) {
                    var Y = true;
                    for (var T = 0, V = O.length; T < V;++T) {
                        Y = this._addListener(O[T], M, X, S, N, a) && Y;
                    }
                    return Y;
                } else {
                    if (YAHOO.lang.isString(O)) {
                        var R = this.getEl(O);
                        if (R) {
                            O = R;
                        } else {
                            this.onAvailable(O, function() {
                                YAHOO.util.Event._addListener(O, M, X, S, N, a);
                            });
                            return true;
                        }
                    }
                }
                if (!O) {
                    return false;
                }
                if ("unload" == M && S !== this) {
                    J[J.length] = [O, M, X, S, N, a];
                    return true;
                }
                var b = O;
                if (N) {
                    if (N === true) {
                        b = S;
                    } else {
                        b = N;
                    }
                }
                var P = function(c) {
                    return X.call(b, YAHOO.util.Event.getEvent(c, O), S);
                };
                var Z = [O, M, X, P, b, S, N, a];
                var U = I.length;
                I[U] = Z;
                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) {
                            YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c), Q);
                        };
                    }
                    E[Q].push(Z);
                } else {
                    try {
                        this._simpleAdd(O, M, P, a);
                    } catch(W) {
                        this.lastError = W;
                        this._removeListener(O, M, X, a);
                        return false;
                    }
                }
                return true;
            },
            addListener: function(O, Q, N, P, M) {
                return this._addListener(O, Q, N, P, M, false);
            },
            addFocusListener: function(O, N, P, M) {
                return this._addListener(O, K, N, P, M, true);
            },
            removeFocusListener: function(N, M) {
                return this._removeListener(N, K, M, true);
            },
            addBlurListener: function(O, N, P, M) {
                return this._addListener(O, L, N, P, M, true);
            },
            removeBlurListener: function(N, M) {
                return this._removeListener(N, L, M, true);
            },
            fireLegacyEvent: function(Q, O) {
                var S = true,
                M,
                U,
                T,
                V,
                R;
                U = E[O].slice();
                for (var N = 0, P = U.length; N < P;++N) {
                    T = U[N];
                    if (T && T[this.WFN]) {
                        V = T[this.ADJ_SCOPE];
                        R = T[this.WFN].call(V, Q);
                        S = (S && R);
                    }
                }
                M = G[O];
                if (M && M[2]) {
                    M[2](Q);
                }
                return S;
            },
            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 (this.webkit && this.webkit < 419 && ("click" == N || "dblclick" == N));
            },
            _removeListener: function(N, M, V, Y) {
                var Q,
                T,
                X;
                if (typeof N == "string") {
                    N = this.getEl(N);
                } else {
                    if (this._isValidCollection(N)) {
                        var W = true;
                        for (Q = N.length - 1; Q > -1; Q--) {
                            W = (this._removeListener(N[Q], M, V, Y) && 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[4];
                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], Y);
                    } catch(U) {
                        this.lastError = U;
                        return false;
                    }
                }
                delete I[S][this.WFN];
                delete I[S][this.FN];
                I.splice(S, 1);
                return true;
            },
            removeListener: function(N, O, M) {
                return this._removeListener(N, O, M, false);
            },
            getTarget: function(O, N) {
                var M = O.target || O.srcElement;
                return this.resolveTextNode(M);
            },
            resolveTextNode: function(N) {
                try {
                    if (N && 3 == N.nodeType) {
                        return N.parentNode;
                    }
                } catch(M) {}
                return N;
            },
            getPageX: function(N) {
                var M = N.pageX;
                if (!M && 0 !== M) {
                    M = N.clientX || 0;
                    if (this.isIE) {
                        M += this._getScrollLeft();
                    }
                }
                return M;
            },
            getPageY: function(M) {
                var N = M.pageY;
                if (!N && 0 !== N) {
                    N = M.clientY || 0;
                    if (this.isIE) {
                        N += this._getScrollTop();
                    }
                }
                return N;
            },
            getXY: function(M) {
                return [this.getPageX(M), this.getPageY(M)];
            },
            getRelatedTarget: function(N) {
                var M = N.relatedTarget;
                if (!M) {
                    if (N.type == "mouseout") {
                        M = N.toElement;
                    } else {
                        if (N.type == "mouseover") {
                            M = N.fromElement;
                        }
                    }
                }
                return this.resolveTextNode(M);
            },
            getTime: function(O) {
                if (!O.time) {
                    var N = new Date().getTime();
                    try {
                        O.time = N;
                    } catch(M) {
                        this.lastError = M;
                        return N;
                    }
                }
                return O.time;
            },
            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 (YAHOO.env.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 = "yuievtautoid-" + A;++A;
                    M.id = N;
                }
                return N;
            },
            _isValidCollection: function(N) {
                try {
                    return (N && typeof N !== "string" && N.length && !N.tagName && !N.alert && typeof N[0] !== "undefined");
                } catch(M) {
                    return false;
                }
            },
            elCache: {},
            getEl: function(M) {
                return (typeof M === "string") ? document.getElementById(M) : M;
            },
            clearCache: function() {},
            DOMReadyEvent: new YAHOO.util.CustomEvent("DOMReady", this),
            _load: function(N) {
                if (!H) {
                    H = true;
                    var M = YAHOO.util.Event;
                    M._ready();
                    M._tryPreloadAttach();
                }
            },
            _ready: function(N) {
                var M = YAHOO.util.Event;
                if (!M.DOMReady) {
                    M.DOMReady = true;
                    M.DOMReadyEvent.fire();
                    M._simpleRemove(document, "DOMContentLoaded", M._ready);
                }
            },
            _tryPreloadAttach: function() {
                if (F.length === 0) {
                    C = 0;
                    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.override) {
                        if (W.override === true) {
                            U = W.obj;
                        } else {
                            U = W.override;
                        }
                    }
                    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.getEl(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.getEl(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 {
                    clearInterval(this._interval);
                    this._interval = null;
                }
                this.locked = false;
            },
            purgeElement: function(Q, R, T) {
                var O = (YAHOO.lang.isString(Q)) ? this.getEl(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, N.capture);
                    }
                }
                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 = (YAHOO.lang.isString(O)) ? this.getEl(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],
                                    capture: P[this.CAPTURE],
                                    index: S
                                });
                            }
                        }
                    }
                }
                return (R.length) ? R: null;
            },
            _unload: function(S) {
                var M = YAHOO.util.Event,
                P,
                O,
                N,
                R,
                Q,
                T = J.slice();
                for (P = 0, R = J.length; P < R;++P) {
                    N = T[P];
                    if (N) {
                        var U = window;
                        if (N[M.ADJ_SCOPE]) {
                            if (N[M.ADJ_SCOPE] === true) {
                                U = N[M.UNLOAD_OBJ];
                            } else {
                                U = N[M.ADJ_SCOPE];
                            }
                        }
                        N[M.FN].call(U, M.getEvent(S, N[M.EL]), N[M.UNLOAD_OBJ]);
                        T[P] = null;
                        N = null;
                        U = null;
                    }
                }
                J = null;
                if (I) {
                    for (O = I.length - 1; O > -1; O--) {
                        N = I[O];
                        if (N) {
                            M._removeListener(N[M.EL], N[M.TYPE], N[M.FN], N[M.CAPTURE], O);
                        }
                    }
                    N = null;
                }
                G = null;
                M._simpleRemove(window, "unload", M._unload);
            },
            _getScrollLeft: function() {
                return this._getScroll()[1];
            },
            _getScrollTop: function() {
                return this._getScroll()[0];
            },
            _getScroll: function() {
                var M = document.documentElement,
                N = document.body;
                if (M && (M.scrollTop || M.scrollLeft)) {
                    return [M.scrollTop, M.scrollLeft];
                } else {
                    if (N) {
                        return [N.scrollTop, N.scrollLeft];
                    } else {
                        return [0, 0];
                    }
                }
            },
            regCE: function() {},
            _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() {};
                    }
                }
            } (),
            _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() {};
                    }
                }
            } ()
            };
    } (); (function() {
        var EU = YAHOO.util.Event;
        EU.on = EU.addListener;
        EU.onFocus = EU.addFocusListener;
        EU.onBlur = EU.addBlurListener;
        if (EU.isIE) {
            YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach, YAHOO.util.Event, true);
            var n = document.createElement("p");
            EU._dri = setInterval(function() {
                try {
                    n.doScroll("left");
                    clearInterval(EU._dri);
                    EU._dri = null;
                    EU._ready();
                    n = null;
                } catch(ex) {}
            }, EU.POLL_INTERVAL);
        } else {
            if (EU.webkit && EU.webkit < 525) {
                EU._dri = setInterval(function() {
                    var rs = document.readyState;
                    if ("loaded" == rs || "complete" == rs) {
                        clearInterval(EU._dri);
                        EU._dri = null;
                        EU._ready();
                    }
                }, EU.POLL_INTERVAL);
            } else {
                EU._simpleAdd(document, "DOMContentLoaded", EU._ready);
            }
        }
        EU._simpleAdd(window, "load", EU._load);
        EU._simpleAdd(window, "unload", EU._unload);
        EU._tryPreloadAttach();
    })();
}
YAHOO.util.EventProvider = function() {};
YAHOO.util.EventProvider.prototype = {
    __yui_events: null,
    __yui_subscribers: null,
    subscribe: function(A, C, F, E) {
        this.__yui_events = this.__yui_events || {};
        var D = this.__yui_events[A];
        if (D) {
            D.subscribe(C, F, E);
        } else {
            this.__yui_subscribers = this.__yui_subscribers || {};
            var B = this.__yui_subscribers;
            if (!B[A]) {
                B[A] = [];
            }
            B[A].push({
                fn: C,
                obj: F,
                override: E
            });
        }
    },
    unsubscribe: function(C, E, G) {
        this.__yui_events = this.__yui_events || {};
        var A = this.__yui_events;
        if (C) {
            var F = A[C];
            if (F) {
                return F.unsubscribe(E, G);
            }
        } else {
            var B = true;
            for (var D in A) {
                if (YAHOO.lang.hasOwnProperty(A, D)) {
                    B = B && A[D].unsubscribe(E, G);
                }
            }
            return B;
        }
        return false;
    },
    unsubscribeAll: function(A) {
        return this.unsubscribe(A);
    },
    createEvent: function(G, D) {
        this.__yui_events = this.__yui_events || {};
        var A = D || {};
        var I = this.__yui_events;
        if (I[G]) {} else {
            var H = A.scope || this;
            var E = (A.silent);
            var B = new YAHOO.util.CustomEvent(G, H, E, YAHOO.util.CustomEvent.FLAT);
            I[G] = B;
            if (A.onSubscribeCallback) {
                B.subscribeEvent.subscribe(A.onSubscribeCallback);
            }
            this.__yui_subscribers = this.__yui_subscribers || {};
            var F = this.__yui_subscribers[G];
            if (F) {
                for (var C = 0; C < F.length;++C) {
                    B.subscribe(F[C].fn, F[C].obj, F[C].override);
                }
            }
        }
        return I[G];
    },
    fireEvent: function(E, D, A, C) {
        this.__yui_events = this.__yui_events || {};
        var G = this.__yui_events[E];
        if (!G) {
            return null;
        }
        var B = [];
        for (var F = 1; F < arguments.length;++F) {
            B.push(arguments[F]);
        }
        return G.fire.apply(G, B);
    },
    hasEvent: function(A) {
        if (this.__yui_events) {
            if (this.__yui_events[A]) {
                return true;
            }
        }
        return false;
    }
};
YAHOO.util.KeyListener = function(A, F, B, C) {
    if (!A) {} else {
        if (!F) {} else {
            if (!B) {}
        }
    }
    if (!C) {
        C = YAHOO.util.KeyListener.KEYDOWN;
    }
    var D = new YAHOO.util.CustomEvent("keyPressed");
    this.enabledEvent = new YAHOO.util.CustomEvent("enabled");
    this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
    if (typeof A == "string") {
        A = document.getElementById(A);
    }
    if (typeof B == "function") {
        D.subscribe(B);
    } else {
        D.subscribe(B.fn, B.scope, B.correctScope);
    }
    function E(J, I) {
        if (!F.shift) {
            F.shift = false;
        }
        if (!F.alt) {
            F.alt = false;
        }
        if (!F.ctrl) {
            F.ctrl = false;
        }
        if (J.shiftKey == F.shift && J.altKey == F.alt && J.ctrlKey == F.ctrl) {
            var G;
            if (F.keys instanceof Array) {
                for (var H = 0; H < F.keys.length; H++) {
                    G = F.keys[H];
                    if (G == J.charCode) {
                        D.fire(J.charCode, J);
                        break;
                    } else {
                        if (G == J.keyCode) {
                            D.fire(J.keyCode, J);
                            break;
                        }
                    }
                }
            } else {
                G = F.keys;
                if (G == J.charCode) {
                    D.fire(J.charCode, J);
                } else {
                    if (G == J.keyCode) {
                        D.fire(J.keyCode, J);
                    }
                }
            }
        }
    }
    this.enable = function() {
        if (!this.enabled) {
            YAHOO.util.Event.addListener(A, C, E);
            this.enabledEvent.fire(F);
        }
        this.enabled = true;
    };
    this.disable = function() {
        if (this.enabled) {
            YAHOO.util.Event.removeListener(A, C, E);
            this.disabledEvent.fire(F);
        }
        this.enabled = false;
    };
    this.toString = function() {
        return "KeyListener [" + F.keys + "] " + A.tagName + (A.id ? "[" + A.id + "]": "");
    };
};
YAHOO.util.KeyListener.KEYDOWN = "keydown";
YAHOO.util.KeyListener.KEYUP = "keyup";
YAHOO.util.KeyListener.KEY = {
    ALT: 18,
    BACK_SPACE: 8,
    CAPS_LOCK: 20,
    CONTROL: 17,
    DELETE: 46,
    DOWN: 40,
    END: 35,
    ENTER: 13,
    ESCAPE: 27,
    HOME: 36,
    LEFT: 37,
    META: 224,
    NUM_LOCK: 144,
    PAGE_DOWN: 34,
    PAGE_UP: 33,
    PAUSE: 19,
    PRINTSCREEN: 44,
    RIGHT: 39,
    SCROLL_LOCK: 145,
    SHIFT: 16,
    SPACE: 32,
    TAB: 9,
    UP: 38
};
YAHOO.register("event", YAHOO.util.Event, {
    version: "2.6.0",
    build: "1321"
});
YAHOO.register("yuiloader-dom-event", YAHOO, {
    version: "2.6.0",
    build: "1321"
});

var YL = YAHOO.lang;
var YUD = YAHOO.util.Dom;
var YUE = YAHOO.util.Event;
var get = YUD.get;
var AE = {};
AE.namespace = function() {
    var a = arguments,
    o = null,
    i,
    j,
    d;
    for (i = 0; i < a.length; i = i + 1) {
        d = a[i].split(".");
        o = AE;
        for (j = (d[0] == "AE") ? 1: 0; j < d.length; j = j + 1) {
            o[d[j]] = o[d[j]] || {};
            o = o[d[j]];
        }
    }
    return o;
};
AE.namespace('AE.widget');
AE.namespace('AE.bom');
AE.bom = {
    isGecko: YAHOO.env.ua.gecko > 0,
    isIE: YAHOO.env.ua.ie > 0,
    isIE6: YAHOO.env.ua.ie == 6,
    isIE7: YAHOO.env.ua.ie == 7,
    isIE8: YAHOO.env.ua.ie == 8,
    isOpera: YAHOO.env.ua.opera > 0,
    isSafari: navigator.userAgent.toLowerCase().indexOf("safari") != -1,
    getCookie: function(H) {
        var I = document.cookie.match("(?:^|;)\\s*" + H + "=([^;]*)");
        return I ? unescape(I[1]) : "";
    },
    setCookie: function(J, L, H, K, M) {
        L = escape(L);
        L += K ? "; domain=" + K: "";
        L += M ? "; path=" + M: "";
        if (H) {
            var I = new Date;
            I.setTime(I.getTime() + H * 86400000);
            L += "; expires=" + I.toGMTString();
        }
        document.cookie = J + "=" + L;
    },
    removeCookie: function(H) {
        this.setCookie(H, "", -1);
    }
};
AE.cpAttribute = function(t, o) {
    return YL.merge(o, t);
};
YL.isEnglish = function(sValue) {
    var myReg = /[^\x00-\x80]/g;
    if (myReg.test(sValue)) {
        return false;
    } else {
        return true;
    }
};
YL.isAscii = function(sValue) {
    var myReg = /[^\x00-\xFF]/g;
    if (myReg.test(sValue)) {
        return false
    } else {
        return true;
    }
};
var trim = YL.trim;
String.prototype.trim = function() {
    return YL.trim(this)
    };
String.prototype.isEmpty = function() {
    return this == '';
};
function encode(str) {
    if (str == null)
        return '';
    var retStr = escape(str);
    if (str.indexOf('+') != -1) {
        retStr = retStr.replace(/\+/g, '%2B');
    }
    return retStr;
}
function encodeKeyword(str) {
    if (str == null)
        return '';
    str = str.replace(/^\s*|\s*$/g, '');
    str = str.replace(/\s+/g, '_');
    str = encode(str);
    return encode(str);
}
function XMLEncode(str) {
    str = trim(str);
    str = str.replace(/&/g, "&amp;");
    str = str.replace(/</g, "&lt;");
    str = str.replace(/>/g, "&gt;");
    str = str.replace(/\'/g, "&#39;");
    str = str.replace(/\"/g, "&quot;");
    return str;
}
function XMLDecode(str) {
    str = trim(str);
    str = str.replace(/&amp;/g, "&");
    str = str.replace(/&lt;/g, "<");
    str = str.replace(/&gt;/g, ">");
    str = str.replace(/&apos;|&#39;/g, "'");
    str = str.replace(/&quot;/g, "\"");
    return str;
}
function toggleClass(el, css) {
    var els = (el.length || YL.isArray(el)) ? el: [el];
    for (var i = 0, j = els.length; i < j; i++) {
        if (YUD.hasClass(els[i], css)) {
            YUD.removeClass(els[i], css);
        } else {
            YUD.addClass(els[i], css);
        }
    }
}
function animBy(el, style, by, t, fn) {
    var step = Math.round(by / t);
    var orgVal = parseInt(YUD.getStyle(el, style), 10);
    var finalVal = orgVal + by,
    runVal = orgVal;
    step = step == 0 ? (by < 0 ? -1: 1) : step;
    var timer = setInterval(function() {
        by -= step;
        if (step < 0 && by >= 0 || step > 0 && by <= 0) {
            clearInterval(timer);
            YUD.setStyle(el, style, finalVal + 'px');
            if (typeof fn == 'function')
                fn();
            return;
        }
        runVal += step;
        YUD.setStyle(el, style, runVal + 'px');
    }, 1);
}

AE.namespace('AE.fix.imageLoader');
AE.fix.imageLoader = function() {
    var im = new Image();
    for (var i = 0, j = arguments.length; i < j; i++) {
        im.src = arguments[i];
    }
};

divCycle = function() {
    var oComponent = this;
    var oDefConfig = {
        sTabClass: 'productCycleTab',
        sItemClass: 'productCycleItem',
        oParentNode: document.body,
        sSwitchEvent: 'click',
        iDelayTime: 3000,
        iCycleTimes: 1,
        sCurrentClass: 'current',
        sOrder: 'asc',
        currentIndex: null
    }
    var aTabs,
    aItems,
    oParent;
    var iDelayTime;
    var oTimer;
    var currentIndex = 0;
    var dataLength;
    var iCycleTimes = 0;
    var isLock = false;
    oComponent.onSwitch = new YAHOO.util.CustomEvent("switch");
    oComponent.init = function(oConfig) {
        oDefConfig = YL.merge(oDefConfig, oConfig || {});
        aTabs = YUD.getElementsByClassName(oDefConfig.sTabClass, '*', oDefConfig.oParentNode);
        aItems = YUD.getElementsByClassName(oDefConfig.sItemClass, '*', oDefConfig.oParentNode);
        oParent = oDefConfig.oParentNode;
        dataLength = Math.min(aTabs.length, aItems.length);
        if (oDefConfig.sOrder == "desc" && !oDefConfig.currentIndex) {
            currentIndex = dataLength - 1;
        } else if (oDefConfig.currentIndex) {
            currentIndex = oDefConfig.currentIndex;
        }
        YUE.on(aTabs, "mouseover", oComponent.stop);
        YUE.on(aTabs, "mouseout", oComponent.start);
        YUE.on(aItems, "mouseover", oComponent.stop);
        YUE.on(aItems, "mouseout", oComponent.start);
        for (i = 0; i < dataLength; i++) {
            YUE.on(aTabs[i], oDefConfig.sSwitchEvent, oComponent.show, i);
        }
        if (oDefConfig.iCycleTimes > 0) {
            oComponent.start();
        } else {
            switchItem();
        }
    }
    oComponent.start = function() {
        clearInterval(oTimer);
        oTimer = setInterval(switchItem, oDefConfig.iDelayTime);
    }
    oComponent.stop = function() {
        clearInterval(oTimer);
    }
    oComponent.show = function(e, iIndex) {
        if (isLock || !YL.isNumber(iIndex) || iIndex < 0 || iIndex >= dataLength) {
            return false;
        }
        currentIndex = iIndex;
        var f1 = function(element) {
            return YUD.removeClass(element, oDefConfig.sCurrentClass);
        }
        YUD.batch(aTabs, f1);
        YUD.addClass(aTabs[iIndex], oDefConfig.sCurrentClass);
        YUD.setStyle(aItems, "display", "none");
        YUD.setStyle(aItems[iIndex], "display", "");
        oComponent.onSwitch.fire();
    }
    var switchItem = function() {
        if (isLock) {
            return;
        };
        oComponent.show(null, currentIndex);
        if (iCycleTimes >= oDefConfig.iCycleTimes) {
            oComponent.stop();
            YUE.removeListener(aTabs, "mouseover", oComponent.stop);
            YUE.removeListener(aTabs, "mouseout", oComponent.start);
            YUE.removeListener(aItems, "mouseover", oComponent.stop);
            YUE.removeListener(aItems, "mouseout", oComponent.start);
            switch (oDefConfig.sOrder) {
            case("asc"):
                {}
            case("desc"):
                {
                    break;
                }
            }
        }
        switch (oDefConfig.sOrder) {
        case("asc"):
            {
                currentIndex++;
                if (currentIndex >= dataLength) {
                    currentIndex = 0;
                    iCycleTimes++;
                }
                break;
            }
        case ("desc"):
            {
                currentIndex--;
                if (currentIndex < 0) {
                    currentIndex = dataLength - 1;
                    iCycleTimes++;
                }
                break;
            }
        }
    }
    oComponent.getCurrentIndex = function() {
        return currentIndex;
    }
    oComponent.lock = function() {
        isLock = true;
    }
    oComponent.unLock = function() {
        isLock = false;
    }
}

var DEFAULT_VERSION = "unknown";
function sendClientMsg(fromSite, fromUid, toSite, toUid, imstatus, moreProperties) {
    var command;
    if (fromSite == "") {
        fromSite = toSite;
    }
    var result = checkInstallEnaliint();
    if (result == -1) {
        downloadEnaliint();
    } else if (result == 0) {
        location.href = "TradeManager:SendIM_Encrypted?" + toUid
    } else if (result == 1) {
        if (imstatus == 4) {
            command = "aliim:smssendmsg?uid=" + fromSite + fromUid + "&touid=" + toUid + "&suid=" + fromUid + "&encrypt=true";
        } else {
            command = "aliim:sendmsg?uid=" + fromSite + fromUid + "&touid=" + toUid + "&siteid=" + toSite + "&status=" + imstatus + getMoreProperties(moreProperties);
        }
        execCommand(command);
    } else if (result == 2) {
        command = "aliim:sendmsg?uid=" + fromSite + fromUid + "&touid=" + toUid + "&siteid=" + toSite + "&status=" + imstatus + getMoreProperties(moreProperties);
        document.getElementById("chk_ww").SendCommand(command, 2);
    }
}
function addContact(fromSite, fromUid, toSite, toUid, moreProperties) {
    var result = checkInstallEnaliint();
    if (result == -1) {
        downloadEnaliint();
    } else if (result == 0) {
        window.location = "Trademanager:AddContact?uid=" + toUid + "&checkcrm=true";
        setTimeout(function() {
            window.close()
            }, "500");
    } else if (result == 1) {
        command = "aliim:addcontact?uid=" + fromSite + fromUid + "&touid=" + toSite + toUid + getMoreProperties(moreProperties);
        execCommand(command);
    }
}
function startWW(siteid, uid, moreProperties) {
    var fromSite = siteid;
    var result = checkInstallEnaliint();
    if (result == -1) {
        return;
    } else if (result == 0) {
        location.href = "TradeManager:";
    } else if (result == 1) {
        var command = "aliim:login?uid=" + uid + "&autologin=0&weblogin=1" + moreProperties;
        execCommand(command);
    }
}
function OnlyCheckOldAlitalkInstalled() {
    var obj;
    try {
        hasBeeninstancedFireFox();
        obj = new ActiveXObject("TradeManagerSetup.Install.1");
    } catch(e) {
        return - 1;
    }
    if (null != obj) {
        return 0;
    } else {
        return - 1;
    }
}
function checkInstallEnaliint() {
    var tempInstall = -1;
    if (checkIE()) {
        try {
            var wwx = new ActiveXObject("aliimx.atmx");
            var tempVer = wwx.GetWangWangVersion();
            if (wwx != null) {
                tempInstall = 1;
                wwx = null;
                return tempInstall;
            }
            wwx = null;
        } catch(e) {}
        tempInstall = OnlyCheckOldAlitalkInstalled();
    } else {
        hasBeeninstancedFireFox();
        if (hasBeeninstanced == 1) {
            return 2;
        }
    }
    return tempInstall;
}
function downloadEnaliint() {
    window.open("http://trademanager.alibaba.com/");
}
function getMoreProperties(moreProperties) {
    var p = "";
    if (moreProperties != "") {
        if (moreProperties.substring(0, 1) != "&") {
            p = "&" + moreProperties;
        } else {
            p = moreProperties;
        }
    }
    return p;
}
function checkNavigat() {
    var win;
    if (checkIE()) {} else if (checkFirefoxIsBigThan15()) {
        hasBeeninstancedFireFox();
        if (!hasBeenInstancePlugIn && confirm("You need the Firefox plug-in. Click the Confirm button to download it.")) {
            if (window.InstallTrigger) {
                window.InstallTrigger.install({
                    'alibaba': 'http://download.alitalk.alibaba.com/TradeManager/download/aliww.xpi'
                });
            }
        } else if (hasBeenInstancePlugIn) {
            win = window.open('http://trademanager.alibaba.com/', 'installNow', 'width=600,height=500,location=no,toolbar=no,status=no,resizable=yes,scrollbars=yes');
        }
    }
}
var hasBeenInstancePlugIn = false;
var hasBeeninstanced = 0;
function hasBeeninstancedFireFox() {
    if (checkFirefoxIsBigThan15()) {
        var mimetype = navigator.mimeTypes["application/ww-plugin"];
        if (mimetype) {
            hasBeenInstancePlugIn = true;
            var plugin = mimetype.enabledPlugin
            if (plugin) {
                if (!document.getElementById("chk_ww")) {
                    var dDiv = document.createElement('DIV');
                    dDiv.style.height = '1px';
                    dDiv.style.width = '1px';
                    dDiv.style.overflow = 'hidden';
                    dDiv.innerHTML = "<embed id=\"chk_ww\" name=\"chk_ww\" type=\"application/ww-plugin\" width=1 height=1 hidden=\"true\" >";
                    document.body.appendChild(dDiv);
                }
                if (hasBeeninstanced == 0) {}
                hasBeeninstanced = document.getElementById("chk_ww").isInstalled(2);
            }
        }
    } else {
        hasBeeninstanced = false;
    }
}
function checkIE() {
    var name = navigator.appName;
    if (name == "Microsoft Internet Explorer") {
        return true;
    } else {
        return false;
    }
}
function checkIEorFirefox() {
    var name = navigator.appName;
    if (name == "Microsoft Internet Explorer" || checkFirefoxIsBigThan15()) {
        return true;
    } else {
        return false;
    }
}
function checkFirefoxIsBigThan15() {
    if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
        userAgent = window.navigator.userAgent;
        var Findex = userAgent.indexOf("Firefox/");
        var versionName = userAgent.substr(Findex + "Firefox/".length, 3);
        if (versionName >= "1.5") {
            return true;
        }
    }
    return false;
}
function execCommand(command) {
    try {
        var wwx = new ActiveXObject("aliimx.atmx");
        wwx.ExecCmd(command);
    } catch(e) {}
}

AE.namespace('AE.run.inboxIcon');
AE.run.inboxIcon = function() {
    var _self = this;
    var oConfig = {
        getDataUrl: 'http://topmsg.alibaba.com/getStatus.js',
        inboxUrl: 'http://us.my.alibaba.com/mcadmin/inbox/inboxList.htm',
        bulkUrl: 'http://us.my.alibaba.com/mcadmin/bulkfolder/bulkfolder_list.htm',
        atmUrl: 'http://trademanager.alibaba.com/',
        inboxNum: {
            elementId: 'inboxNum',
            styleDisplay: 'none',
            linkEnable: false
        },
        welcomeBox: {
            elementId: 'log-info'
        }
    };
    var objInboxNum = oConfig.inboxNum;
    var objWelcomeBox = oConfig.welcomeBox;
    var messageData = {
        inbox: -1,
        bulk: -1,
        dataReady: true
    };
    var statusReady = {
        isUserStatusReady: false,
        isUserLogin: false,
        isNeedCheckMessage: false,
        memberSeq: ''
    };
    var separator = ' ';
    var sysLanguage = navigator.browserLanguage ? navigator.browserLanguage: navigator.language;
    var defConfig,
    msgConfig;
    _self.userStatusMgr = function() {
        var _user = this;
        var userStatus = {
            isNew: false,
            isLoggedIn: false,
            formChina: false,
            firstIn: false,
            firstName: '',
            serviceType: '',
            memberSeq: ''
        };
        var clearSignInInfo = function() {
            userStatus.isNew = true;
            userStatus.isLoggedIn = false;
            userStatus.formChina = false;
            userStatus.firstIn = false;
            userStatus.firstName = '';
            userStatus.serviceType = '';
            userStatus.memberSeq = '';
            statusReady.isUserLogin = false;
        };
        var doInitUserStatus = function() {
            try {
                var isLoginCookie = AE.bom.getCookie('ali_non_s_temp');
                var userCookie = AE.bom.getCookie('ali_non_s_ever');
                if (isLoginCookie) {
                    if (isLoginCookie == 'is_sign=y') {
                        userStatus.isLoggedIn = true;
                        statusReady.isUserLogin = true;
                    }
                }
                if (!userCookie) {
                    clearSignInInfo();
                } else {
                    userCookie = userCookie.split('-_-');
                    if (userCookie.length < 5) {
                        clearSignInInfo();
                    } else {
                        userStatus.firstName = userCookie[1];
                        userStatus.serviceType = userCookie[3];
                        userStatus.memberSeq = userCookie[4];
                    }
                }
                if (_user.hasLoggedIn()) {
                    if (_user.getServiceType() == 'cgs' || _user.getServiceType() == 'hkgs' || _user.getServiceType() == 'gs' || _user.getServiceType() == 'cfm' || _user.getServiceType() == 'twgs') {
                        userStatus.fromChina = true;
                    } else {
                        userStatus.fromChina = false;
                    }
                } else {
                    if (_user.getServiceType() == 'cgs' || _user.getServiceType() == 'hkgs' || _user.getServiceType() == 'gs' || _user.getServiceType() == 'cfm' || _user.getServiceType() == 'twgs') {
                        userStatus.fromChina = true;
                    } else if (_user.getServiceType()) {
                        userStatus.fromChina = false;
                    } else {
                        if (sysLanguage.toLowerCase() == 'zh-cn') {
                            userStatus.fromChina = true;
                        } else {
                            userStatus.fromChina = false;
                        }
                    }
                }
                if (AE.bom.getCookie('ali_intl_firstIn').isEmpty()) {
                    userStatus.firstIn = true;
                    AE.bom.setCookie('ali_intl_firstIn', 'n', true);
                }
                statusReady.isUserStatusReady = true;
                return true;
            } catch(e) {
                statusReady.isUserStatusReady = false;
                return false;
            }
        };
        _user.hasLoggedIn = function() {
            return userStatus.isLoggedIn;
        };
        _user.getFirstName = function() {
            return userStatus.firstName;
        };
        _user.getServiceType = function() {
            return userStatus.serviceType;
        };
        _user.isChinaUser = function() {
            return userStatus.fromChina;
        };
        _user.isFirstIn = function() {
            return userStatus.firstIn;
        };
        _user.getMemberSeq = function() {
            return userStatus.memberSeq;
        };
        _user.isNewUser = function() {
            return userStatus.isNew;
        }
        var switchByUserStatus = function() {
            if (!_user.isChinaUser() && !_user.isFirstIn()) {
                if (!_user.getFirstName().trim().isEmpty()) {
                    statusReady.isNeedCheckMessage = true;
                    statusReady.memberSeq = _user.getMemberSeq();
                } else {
                    if (_user.isNewUser()) {
                        setTimeout(function() {
                            if (get(objWelcomeBox.elementId) && !YUD.hasClass(objWelcomeBox.elementId, 'AE:noLoginMsg')) {
                                var hasInstalled = checkInstallEnaliint();
                                if (hasInstalled == '-1') {
                                    get(objWelcomeBox.elementId).innerHTML += ' Chat online free with <a href="' + defConfig.atmUrl + '" style="font-weight:bold;text-decoration:underline;" rel="nofollow">TradeManager</a>';
                                }
                            }
                        }, 0);
                    }
                }
            } else {
                if (!_user.isNewUser() && !_user.getFirstName().trim().isEmpty()) {
                    setTimeout(function() {
                        if (get(objWelcomeBox.elementId) && !YUD.hasClass(objWelcomeBox.elementId, 'AE:noLoginMsg')) {
                            if (statusReady.isUserLogin) {
                                if ( !! defConfig.businessRole && defConfig.businessRole == 'BusinessRole[buyer]') {
                                    get(objWelcomeBox.elementId).innerHTML = '<a href="http://sh.vip.alibaba.com/product/buyoffer/post_buying_lead.htm" rel="nofollow" style="font-weight:bold;text-decoration:underline;">Post your Buying Leads free</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                                } else {
                                    get(objWelcomeBox.elementId).innerHTML = '<a href="http://sh.vip.alibaba.com/product/post_product.htm" rel="nofollow" style="font-weight:bold;text-decoration:underline;">Display your Products free</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                                }
                            } else {
                                get(objWelcomeBox.elementId).innerHTML += separator + 'Chat online free with <a href="' + defConfig.atmUrl + '" rel="nofollow" style="font-weight:bold;text-decoration:underline;">TradeManager</a>';
                            }
                        }
                    }, 0);
                }
            }
        };
        _user.init = function() {
            if (doInitUserStatus()) {
                switchByUserStatus();
            }
        }
    };
    _self.unreadMessageMgr = function() {
        var _msg = this;
        _msg.getCurrentData = function() {
            try {
                if (typeof(top_msgdata) === 'object') {
                    msgConfig.inbox = top_msgdata.inbox;
                    msgConfig.bulk = top_msgdata.bulk;
                } else {
                    msgConfig.dataReady = false;
                }
            } catch(e) {
                msgConfig.dataReady = false;
                return;
            }
        };
        _msg.doGetMessage = function() {
            var random = new Date();
            var thisUrl = defConfig.getDataUrl + '?id=' + statusReady.memberSeq + '&t=' + random;
            YAHOO.util.Get.script(thisUrl, {
                onSuccess: goNext
            });
        }
    };
    _self.containerMgr = function() {
        var _ctn = this;
        _ctn.checkMessage = function() {
            if (msgConfig.inbox > 0) {
                objInboxNum.styleDisplay = '';
                if (statusReady.isUserLogin) {
                    var inboxNumShow = (msgConfig.inbox > 999) ? '999+': msgConfig.inbox;
                    if (objInboxNum.linkEnable) {
                        get(objInboxNum.elementId).innerHTML = '(<a href="' + defConfig.inboxUrl + '" rel="nofollow" class="num">' + inboxNumShow + '</a>)';
                    } else {
                        get(objInboxNum.elementId).innerHTML = '(<span class="num">' + inboxNumShow + '</span>)';
                    }
                } else {
                    if (objInboxNum.linkEnable) {
                        get(objInboxNum.elementId).innerHTML = '( <a href="' + defConfig.inboxUrl + '" class="num" rel="nofollow"><img src="' + globalImgServer + '/images/eng/style/icon/no_read.gif" border="0" /></a> )';
                    } else {
                        get(objInboxNum.elementId).innerHTML = '( <img src="' + globalImgServer + '/images/eng/style/icon/no_read.gif" border="0" /> )';
                    }
                }
            }
            setTimeout(function() {
                if (get(objWelcomeBox.elementId) && !YUD.hasClass(objWelcomeBox.elementId, 'AE:noLoginMsg')) {
                    var hasInstalled = checkInstallEnaliint();
                    if (hasInstalled == '-1') {
                        if (statusReady.isUserLogin) {
                            if (msgConfig.inbox > 0) {
                                var inboxNumShow = (msgConfig.inbox > 999) ? '999+': msgConfig.inbox;
                                get(objWelcomeBox.elementId).innerHTML = '<a href="' + defConfig.inboxUrl + '" rel="nofollow" style="font-weight:bold;text-decoration:underline;">You have ' + inboxNumShow + ' new messages</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                            } else {
                                get(objWelcomeBox.elementId).innerHTML = 'Chat online free with <a href="' + defConfig.atmUrl + '" style="font-weight:bold;text-decoration:underline;" rel="nofollow">TradeManager</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                            }
                        } else {
                            get(objWelcomeBox.elementId).innerHTML += separator + 'Chat online free with <a href="' + defConfig.atmUrl + '" style="font-weight:bold;text-decoration:underline;" rel="nofollow">TradeManager</a>';
                        }
                    } else {
                        if (statusReady.isUserLogin) {
                            if (msgConfig.inbox > 0) {
                                var inboxNumShow = (msgConfig.inbox > 999) ? '999+': msgConfig.inbox;
                                get(objWelcomeBox.elementId).innerHTML = '<a href="' + defConfig.inboxUrl + '" style="font-weight:bold;text-decoration:underline;" rel="nofollow">You have ' + inboxNumShow + ' new messages</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                            } else {
                                if ( !! defConfig.businessRole && defConfig.businessRole == 'BusinessRole[buyer]') {
                                    get(objWelcomeBox.elementId).innerHTML = '<a href="http://us.my.alibaba.com/product/buyoffer/post_buying_lead.htm" style="font-weight:bold;text-decoration:underline;" rel="nofollow">Post your Buying Leads free</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                                } else {
                                    get(objWelcomeBox.elementId).innerHTML = '<a href="http://us.my.alibaba.com/product/post_product.htm" style="font-weight:bold;text-decoration:underline;" rel="nofollow">Display your Products free</a>' + separator + get(objWelcomeBox.elementId).innerHTML;
                                }
                            }
                        } else {
                            if (msgConfig.inbox > 0) {
                                get(objWelcomeBox.elementId).innerHTML += separator + '<a href="' + defConfig.inboxUrl + '" style="font-weight:bold;text-decoration:underline;" rel="nofollow">You have new messages</a>';
                            } else {
                                get(objWelcomeBox.elementId).innerHTML += separator + '<a href="http://us.my.alibaba.com/user/join.biz?cd=0" rel="nofollow">Join Free</a>';
                            }
                        }
                    }
                }
            }, 0);
        };
        _ctn.setDataToCtn = function() {
            if (get(defConfig.targetCtn) && get(defConfig.targetCtn).getElementsByTagName('strong')[0]) {
                dataCtn = get(defConfig.targetCtn).getElementsByTagName('strong')[0];
                dataCtn.innerHTML = msgConfig.inbox;
            }
            YUD.setStyle(objInboxNum.elementId, 'display', objInboxNum.styleDisplay);
        };
        _ctn.init = function() {
            _ctn.checkMessage();
            if (msgConfig.dataReady) {
                _ctn.setDataToCtn();
            }
        }
    };
    var userStatus = new _self.userStatusMgr();
    var unreadMsg = new _self.unreadMessageMgr();
    var linkCtn = new _self.containerMgr();
    var goNext = function() {
        unreadMsg.getCurrentData();
        linkCtn.init();
    };
    _self.init = function(config, mConfig) {
        defConfig = YL.merge(oConfig, config || {});
        msgConfig = YL.merge(messageData, mConfig || {});
        userStatus.init();
        if (statusReady.isNeedCheckMessage) {
            unreadMsg.doGetMessage(mConfig);
        }
    };
}

if (!AE.widget.overShow) {
    AE.widget.overShow = function() {
        var _self = this;
        var defConfig = {
            targetId: "overShowTargetId",
            positionId: false,
            contentId: "overShowContentId",
            showDelayTime: 200,
            hiddenDelayTime: 200,
            excursion: [0, 0],
            needMask: false,
            needXY: true,
            closeBtnClass: "close-button"
        };
        var config;
        var isInited = false;
        var dTarget,
        dPosition,
        dContent,
        iframeMask;
        var delayTimer = false;
        var canClose = true,
        contentShowed = false,
        holded = false;
        _self.hold = function() {
            holded = true;
        }
        _self.setFree = function() {
            holded = false;
        }
        _self.afterShow = new YAHOO.util.CustomEvent("afterShow", _self);
        _self.afterShowDelay = new YAHOO.util.CustomEvent("afterShowDelay", _self);
        _self.afterHidden = new YAHOO.util.CustomEvent("afterHidden", _self);
        _self.afterHiddenDelay = new YAHOO.util.CustomEvent("afterHiddenDelay", _self);
        _self.init = function(oConfig) {
            if (isInited)
                return false;
            config = YL.merge(defConfig, oConfig);
            dTarget = get(config.targetId);
            dPosition = config.positionId ? get(config.positionId) : false;
            dContent = get(config.contentId);
            YUE.on(dTarget, "mouseover", _self.showDelay);
            YUE.on(dTarget, "mouseout", _self.hiddenDelay);
            YUE.on(dContent, "mouseout", _self.hiddenDelay);
            YUE.on(dTarget, "mouseover", function() {
                canClose = false;
            });
            YUE.on(dContent, "mouseover", function() {
                canClose = false;
            });
            YUE.on(dTarget, "mouseout", function() {
                canClose = true;
            });
            YUE.on(dContent, "mouseout", function() {
                canClose = true;
            });
            if (config.needMask) {
                iframeMask = document.createElement("iframe");
                iframeMask.className = "maskIframe";
                iframeMask.style.display = "none";
                if (AE.bom.isIE6 && location.protocol == "https:") {
                    iframeMask.src = globalImgServer + "/js/blank.html";
                }
                iframeMask.style.zIndex = YUD.getStyle(dContent, 'zIndex') - 1;
                iframeMask.style.top = "0px";
                iframeMask.style.left = "0px";
                iframeMask.frameBorder = 0;
                dContent.parentNode.appendChild(iframeMask);
            }
            var closeBtns = YUD.getElementsByClassName(config.closeBtnClass);
            if (closeBtns) {
                YUE.on(closeBtns, "click", function() {
                    canClose = true;
                    _self.hiddenDirectly();
                });
            }
        }
        _self.showDelay = function(e) {
            if (dTarget != this) {
                canClose = true;
                _self.hiddenDirectly();
            }
            dTarget = this;
            _self.afterShowDelay.fire(dTarget);
            if (delayTimer) {
                clearTimeout(delayTimer);
            }
            delayTimer = setTimeout(function() {
                _self.showDirectly(dTarget);
            }, config.showDelayTime);
        }
        _self.showDirectly = function(dTarget) {
            if (contentShowed || holded) {
                return;
            }
            dContent.style.visibility = 'hidden';
            dContent.style.display = "";
            if (config.needXY) {
                var xy = YUD.getXY(dPosition || dTarget);
                parsePos(dTarget, config.excursion);
                xy[0] += config.excursion[0];
                xy[1] += config.excursion[1];
            }
            dContent.style.visibility = 'visible';
            dContent.style.display = '';
            if (config.needXY) {
                YUD.setXY(dContent, xy);
            }
            _self.afterShow.fire(dTarget);
            contentShowed = true;
            if (config.needMask) {
                iframeMask.style.display = "";
                iframeMask.style.width = dContent.offsetWidth + "px";
                iframeMask.style.height = dContent.offsetHeight + "px";
                if (config.needXY) {
                    YUD.setXY(iframeMask, xy);
                }
                iframeMask.style.visibility = "visible";
            }
        }
        _self.hiddenDelay = function(e) {
            _self.afterHiddenDelay.fire();
            if (holded == true) {
                return;
            }
            if (delayTimer) {
                clearTimeout(delayTimer);
            }
            delayTimer = setTimeout(_self.hiddenDirectly, config.hiddenDelayTime);
        };
        _self.hiddenDirectly = function() {
            if (!canClose) {
                return false;
            }
            _self.afterHidden.fire();
            dContent.style.display = "none";
            if (config.needMask) {
                iframeMask.style.display = "none";
            }
            contentShowed = false;
        }
        var parsePos = function(dTarget, aPos) {
            if (typeof(aPos[0]) == 'string') {
                if (aPos[0] == 'auto') { (isContentOverflow()) ? aPos[0] = 'right': aPos[0] = 'left';
                }
                switch (aPos[0]) {
                case 'center':
                    aPos[0] = parseInt(dPosition ? (dPosition.offsetWidth - dContent.offsetWidth) / 2: (dTarget.offsetWidth - dContent.offsetWidth) / 2);
                    break;
                case 'right':
                    aPos[0] = ((dPosition ? dPosition.offsetWidth: dTarget.offsetWidth) - dContent.offsetWidth);
                    break;
                default:
                    aPos[0] = 0;
                }
            }
            if (typeof(aPos[1]) == 'string') {
                switch (aPos[1]) {
                case 'center':
                    aPos[1] = parseInt(dPosition ? (dPosition.offsetHeight - dContent.offsetHeight) / 2: (dTarget.offsetHeight - dContent.offsetHeight) / 2);
                    break;
                case 'bottom':
                    aPos[1] = dPosition ? dPosition.offsetHeight: dTarget.offsetHeight;
                    break;
                default:
                    aPos[1] = 0;
                }
            }
            return aPos;
        }
        var isContentOverflow = function() {
            return document.body.offsetWidth < (YUD.getX(dPosition || dTarget) + dContent.offsetWidth);
        }
    }
}

AE.namespace('AE.widget.intelligentSearch');
AE.widget.intelligentSearch = function() {
    this.inputEl = null;
    this.jsonData = [];
    this.selectedOption = [ - 1, '', ''];
    this.config = {};
    this._defConfig = {
        url: '',
        inputElId: '',
        listCssClass: 'intelligentList',
        listCssStyle: 'left:0px;top:0px;width:200px;height:auto;z-index:100',
        keyWordClass: '',
        listItemNum: 10,
        requestDelay: 0.15,
        enableResultCount: 1,
        returnVarName: 'intelSearchData',
        isNeedSubmit: true
    };
    this.init = function(userConfig) {
        this.config = YL.merge(this._defConfig, userConfig);
        this.inputEl = get(this.config.inputElId);
        this.UIController = YL.merge(this.UIController, {});
        this.requestHander = YL.merge(this.requestHander, {});
        this.dataParser = YL.merge(this.dataParser, {});
        this.UIController.init(this);
        this.onInit.fire();
    };
    this.initOnActive = function() {
        if (this.requestHander.requestCount == 0 && !this.dataParser.isInit) {
            this.requestHander.init(this);
            this.dataParser.init(this);
            this.UIController.initEvts();
            this.onActive.fire();
            return true;
        }
        return false;
    };
    this.onInit = new YAHOO.util.CustomEvent('onInit', this);
    this.onActive = new YAHOO.util.CustomEvent('onActive', this);
    this.onRequestSent = new YAHOO.util.CustomEvent('onRequestSent', this);
    this.onRequestFailure = new YAHOO.util.CustomEvent('onRequestFailure', this);
    this.onRequestSuccess = new YAHOO.util.CustomEvent('onRequestSuccess', this);
    this.onListDisplay = new YAHOO.util.CustomEvent('onListDisplay', this);
    this.onListDisplayed = new YAHOO.util.CustomEvent('onListDisplayed', this);
    this.onListHide = new YAHOO.util.CustomEvent('onListHide', this);
    this.onListHidden = new YAHOO.util.CustomEvent('onListHidden', this);
    this.onOptionClick = new YAHOO.util.CustomEvent('onOptionClick', this);
    this.onOptionMouseDown = new YAHOO.util.CustomEvent('onOptionMouseDown', this);
    this.onInputKeyDown = new YAHOO.util.CustomEvent('onInputKeyDown', this);
};
AE.widget.intelligentSearch.prototype = {
    requestHander: {
        _parent: null,
        _timer: null,
        _processor: null,
        _isLoading: false,
        disabled: false,
        requestCount: 0,
        previousQuery: '',
        returnDataLength: 0,
        init: function(scope) {
            this._parent = scope;
        },
        send: function() {
            var _self = this,
            P = this._parent,
            config = P.config;
            var inputEl = P.dataParser.HTMLElements.inputEl;
            if (this.disabled || this._isLoading) {
                return;
            };
            this._isLoading = true;
            this._timer = setTimeout(function() {
                var inputVal = inputEl.value.toLowerCase().replace(/^\s+/, '').replace(/\s{2,}/g, ' ');
                if (trim(inputVal) == '') {
                    P.UIController.hideList();
                    _self._isLoading = false;
                    return;
                }
                if (inputVal == _self.previousQuery) {
                    if (_self.returnDataLength > 0)
                        P.UIController.displayList();
                    _self._isLoading = false;
                    return;
                }
                P.onRequestSent.fire();
                _self.requestCount++;
                _self._processor = YAHOO.util.Get.script(_self._buildURL(inputVal), {
                    onSuccess: _self._onSuccess,
                    scope: _self,
                    charset: 'iso-8859-1',
                    data: inputVal,
                    insertBefore: P.inputEl
                });
                _self._isLoading = false;
            }, config.requestDelay * 1000);
        },
        _onSuccess: function(o) {
            var P = this._parent;
            P.jsonData = eval('window.' + P.config.returnVarName);
            if (!YL.isArray(P.jsonData) || P.jsonData.length == 0 || trim(P.inputEl.value) == '') {
                this.returnDataLength = 0;
                P.UIController.hideList();
            } else {
                this.returnDataLength = P.jsonData.length;
                P.dataParser.update(P);
                P.UIController.displayList();
                P.onRequestSuccess.fire();
            }
            P.selectedOption[2] = this.previousQuery = o.data;
            P.jsonData = null;
            o.purge();
        },
        _buildURL: function(searchStr) {
            var config = this._parent.config,
            param = '',
            baseUrl = config.url;
            if (baseUrl.indexOf('?') != -1) {
                var urlArray = baseUrl.split('?');
                baseUrl = urlArray[0];
                param = '&' + urlArray[1];
            }
            return (baseUrl + '?keyword=' + encodeURIComponent(searchStr) + '&' + 'varname=' + config.returnVarName + '&' + '__number=' + config.enableResultCount + '&' + 'time=' + (new Date()).getTime() + param);
        }
    },
    dataParser: {
        _parent: null,
        isInit: false,
        HTMLElements: {
            docEl: document,
            inputEl: null,
            listBox: null,
            iframeMask: null,
            showBtn: null,
            hideBtn: null,
            optionList: []
            },
        init: function(scope) {
            var P = scope,
            config = P.config,
            inputEl = P.inputEl,
            els = this.HTMLElements;
            this._parent = P;
            els.inputEl = inputEl;
            els.iframeMask = this._insertHTMLAfter(els.inputEl, this._buildHTML(config.listCssClass, config.listItemNum));
            els.listBox = YUD.getNextSibling(els.iframeMask);
            this._initHTMLElements(els.listBox);
            this._formatHTML();
            this.isInit = true;
        },
        update: function(parentScope) {
            var P = this._parent,
            config = P.config,
            els = this.HTMLElements,
            optionList = els.optionList;
            var jsonData = P.jsonData;
            if (!this.isInit) {
                this.init(parentScope)
                };
            for (i = 0, j = optionList.length; i < j; i++) {
                var option = optionList[i],
                numHtml = '',
                txtHtml = '';
                var inputVal = els.inputEl.value.toLowerCase().replace(/^\s+/, '').replace(/\s{2,}/g, ' ');
                if (i < jsonData.length) {
                    if (config.keyWordClass != '') {
                        txtHtml = this._boldKeyWords(jsonData[i].keywords, inputVal, config.keyWordClass);
                    } else {
                        txtHtml = jsonData[i].keywords;
                    }
                    if (config.enableResultCount == 1 && jsonData[i].count) {
                        numHtml = '<span class="s">' + jsonData[i].count + '</span>';
                    }
                    option.innerHTML = numHtml + txtHtml;
                    YUD.setStyle(option, 'display', '');
                } else {
                    YUD.setStyle(option, 'display', 'none');
                }
            }
        },
        _buildHTML: function(skinClass, itemNum) {
            var html = '<iframe frameborder="0" src="about:blank" scrolling="no" class="intelligentIframeMask" style="visibility:hidden;"></iframe>' + '<div class="' + skinClass + '" style="visibility:hidden;">' + '<div class="showSearchSuggestion" style="display:none;">Search Suggestions</div>' + '<div><div class="intelligentListTitle"><span>Hide</span>Search Suggestions</div>';
            for (var i = 0; i < itemNum; i++) {
                html += '<p id="listItem' + i + '">&nbsp;</p>';
            };
            html += '</div></div>';
            return html;
        },
        _insertHTMLAfter: function(el, html) {
            if (el.insertAdjacentHTML) {
                el.insertAdjacentHTML('AfterEnd', html);
            } else {
                var range = el.ownerDocument.createRange(),
                frag;
                range.setStartAfter(el);
                frag = range.createContextualFragment(html);
                el.parentNode.insertBefore(frag, el.nextSibling)
                }
            return el.nextSibling;
        },
        _initHTMLElements: function(container) {
            var els = this.HTMLElements,
            optionList = [];
            els.showBtn = container.firstChild;
            els.hideBtn = YUD.getFirstChild(YUD.getNextSibling(els.showBtn));
            optionList = container.getElementsByTagName('p');
            for (var i = 0, j = optionList.length; i < j; i++) {
                var option = optionList[i];
            }
            els.optionList = optionList;
        },
        _formatHTML: function() {
            var P = this._parent,
            config = P.config,
            els = this.HTMLElements;
            var listBox = els.listBox,
            ifmMask = els.iframeMask,
            hideBtn = els.hideBtn;
            if (!config.listCssStyle || config.listCssStyle == '') {
                return;
            }
            config.listCssStyle = config.listCssStyle.replace(/\s/ig, '');
            var styles = config.listCssStyle.split('\;');
            for (var i = 0; i < styles.length; i++) {
                var styleItem = styles[i].split('\:'),
                styleName = styleItem[0],
                styleValue = styleItem[1];
                if (!styleName)
                    continue;
                switch (styleName.toLowerCase()) {
                case 'z-index':
                    YUD.setStyle(listBox, styleName, styleValue);
                    YUD.setStyle(ifmMask, 'z-index', YUD.getStyle(listBox, 'z-index') - 1);
                    break;
                case 'top':
                case 'left':
                case 'width':
                case 'height':
                    YUD.setStyle([listBox, ifmMask], styleName, styleValue);
                    break;
                default:
                    YUD.setStyle(listBox, styleName, styleValue);
                }
            }
            listBox.orgWidth = listBox.clientWidth + 'px';
        },
        _boldKeyWords: function(str, keyWord, css) {
            if (!keyWord)
                return str;
            return str.replace(keyWord, '<span class="' + css + '">' + keyWord + '</span>');
        }
    },
    UIController: {
        _els: {},
        _parent: null,
        _currentListItemIndex: -1,
        isOptionBoxOpen: false,
        isOptionListOpen: true,
        init: function(scope) {
            this._parent = scope;
            var inputEl = get(scope.config.inputElId);
            YUE.on(inputEl, 'click', this._inputElOnClick, this);
            YUE.on(inputEl, 'keydown', this._inputElOnKeydown, this);
        },
        initEvts: function() {
            if (!this._parent || !this._parent.dataParser.isInit) {
                return;
            }
            this._els = this._parent.dataParser.HTMLElements;
            this.bindListeners(this._evtsMap);
        },
        _evtsMap: [['docEl', 'click', '_documentOnClick'], ['inputEl', 'keyup', '_inputElOnKeyup'], ['inputEl', 'paste', '_inputElOnKeyup'], ['showBtn', 'click', '_showBtnOnClick'], ['hideBtn', 'click', '_hideBtnOnClick'], ['optionList', 'click', '_optionOnClick'], ['optionList', 'mouseover', '_optionOnMouseover'], ['optionList', 'mousedown', '_optionOnMousedown']],
        bindListeners: function(evtsMap) {
            for (var i = 0; i < evtsMap.length; i++) {
                var evtDef = evtsMap[i];
                var el = evtDef[0],
                evt = evtDef[1],
                fname = evtDef[2];
                YUE.on(this._els[el], evt, this[fname], this);
            }
        },
        _inputElOnKeyup: function(e, scope) {
            scope._parent.requestHander.send();
        },
        _inputElOnKeydown: function(e, scope) {
            var P = scope._parent;
            P.initOnActive();
            scope._parent.onInputKeyDown.fire(e.keyCode);
            if (scope.isOptionListOpen) {
                scope.moveListItem(e.keyCode);
            }
        },
        _inputElOnClick: function(e, scope) {
            YUE.stopEvent(e);
            var P = scope._parent,
            initStatus = P.initOnActive();
            P.requestHander.send();
        },
        _documentOnClick: function(e, scope) {
            if (scope.isOptionBoxOpen) {
                scope.hideList();
            }
        },
        _showBtnOnClick: function(e, scope) {
            YUE.stopEvent(e);
            YUD.setStyle(scope._els.hideBtn, 'display', '');
            YUD.setStyle(YUD.getNextSibling(this), 'display', '');
            YUD.setStyle(this, 'display', 'none');
            scope.displayList(scope._els.listBox.orgWidth);
            scope.isOptionListOpen = true;
        },
        _hideBtnOnClick: function(e, scope) {
            YUE.stopEvent(e);
            YUD.setStyle(scope._els.showBtn, 'display', '');
            YUD.setStyle(this.parentNode, 'display', 'none');
            YUD.setStyle(this, 'display', 'none');
            scope.isOptionListOpen = false;
            scope.hideList('auto');
        },
        _optionOnClick: function(e, scope) {
            var config = scope._parent.config;
            scope._parent.onOptionClick.fire(this);
            YUE.stopEvent(e);
            if (config.isNeedSubmit && config.isNeedSubmit == true) {
                scope.submitSelect(scope._els.inputEl.form);
            }
            scope.hideList();
        },
        _optionOnMouseover: function(e, scope) {
            var inx = this.id.replace('listItem', '');
            YUE.stopEvent(e);
            scope.transListItem(inx);
            scope.setListItemIndex(inx);
        },
        _optionOnMousedown: function(e, scope) {
            var inx = this.id.replace('listItem', '');
            scope._parent.selectedOption[0] = inx;
            scope.setInputElValue(scope._els.optionList[inx]);
            scope._parent.onOptionMouseDown.fire(this);
        },
        displayList: function(w) {
            var els = this._els;
            if ( !! w) {
                YUD.setStyle(els.listBox, 'width', w);
            }
            this.syncMaskWH();
            if (this.isOptionBoxOpen) {
                return;
            }
            this._parent.onListDisplay.fire();
            YUD.setStyle([els.listBox, els.iframeMask], 'visibility', 'visible');
            this.isOptionBoxOpen = true;
            this._parent.onListDisplayed.fire();
        },
        hideList: function(w) {
            var els = this._els;
            if ( !! w) {
                YUD.setStyle(els.listBox, 'width', w);
            }
            if (!this.isOptionBoxOpen) {
                return;
            }
            this._parent.onListHide.fire();
            YUD.setStyle([els.listBox, els.iframeMask], 'visibility', 'hidden');
            YUD.removeClass(els.optionList, 'current');
            this.isOptionBoxOpen = false;
            this._currentListItemIndex = -1;
            this._parent.onListHidden.fire();
        },
        moveListItem: function(kCode) {
            var optionList = this._els.optionList;
            var inx = this._currentListItemIndex;
            var dLen = this._parent.requestHander.returnDataLength;
            if (dLen <= 0 || (kCode != 38 && kCode != 40)) {
                return;
            }
            if (kCode == 38) {
                inx--;
                if (inx < 0)
                    inx = dLen - 1;
            } else if (kCode == 40) {
                inx++;
                if (inx >= dLen)
                    inx = 0;
            }
            this.transListItem(inx);
            this.setListItemIndex(inx);
            this._parent.selectedOption[0] = inx;
            this.setInputElValue(optionList[inx]);
        },
        transListItem: function(nextInx) {
            var prevInx = this._currentListItemIndex;
            if (prevInx >= 0) {
                YUD.removeClass(this._els.optionList[prevInx], 'current');
            }
            YUD.addClass(this._els.optionList[nextInx], 'current');
        },
        submitSelect: function(f) {
            if (this._els.inputEl.value.replace(/\s/g, '') != '') {
                f.submit();
            }
        },
        setListItemIndex: function(inx) {
            this._currentListItemIndex = parseInt(inx);
        },
        setInputElValue: function(option) {
            var _self = this,
            val = option.innerText || option.textContent;
            var numEl = YUD.getElementsByClassName('s', 'span', option);
            if (numEl.length == 1) {
                numEl = numEl[0];
                val = val.replace(numEl.innerText || numEl.textContent, '');
            }
            this._parent.requestHander.disabled = true;
            this._parent.selectedOption[1] = val;
            this._els.inputEl.value = val;
        },
        syncMaskWH: function() {
            var listBox = this._els.listBox;
            var ifmMask = this._els.iframeMask;
            YUD.setStyle(ifmMask, 'width', listBox.offsetWidth + 'px');
            YUD.setStyle(ifmMask, 'height', listBox.offsetHeight + 'px');
        }
    }
};

AE.namespace('AE.widget.xSelector');
AE.widget.xSelector = function() {
    var _self = this,
    isActive = false;
    _self.orgSelect = null;
    _self.options = null;
    _self.selectedIndex = -1;
    _self.browseIndex = 0;
    _self.addNodeStatus = 0;
    _self.DATA = {
        selectBox: null,
        inputEl: null,
        arrowEl: null,
        optionBox: null,
        optionOl: null,
        optionLis: [],
        mask: null
    };
    _self.onChange = new YAHOO.util.CustomEvent('onChange', _self);
    var defConfig = {
        selectId: '',
        fakeSelectId: '',
        selectBoxWH: [200, 18],
        selectBoxZIndex: 0,
        visibleOptions: 20,
        optionBoxTop: '',
        arrowBoxLeft: '',
        isStick: 0
    };
    _self.init = function(userConfig) {
        defConfig = YL.merge(defConfig, userConfig);
        var cfg = defConfig,
        D = _self.DATA;
        _self.orgSelect = get(cfg.selectId);
        D.selectBox = get(cfg.fakeSelectId);
        D.inputEl = YUD.getElementsByClassName('inputEl', 'input', D.selectBox)[0];
        D.arrowEl = YUD.getElementsByClassName('arrowNormal', 'div', D.selectBox)[0];
        if (!_self.orgSelect) {
            return;
        }
        _self.options = _self.orgSelect.options;
        _self.selectedIndex = _self.orgSelect.selectedIndex;
        D.inputEl.value = (_self.orgSelect[_self.selectedIndex]).text;
        bindListeners();
        formatSelector();
        _self.orgSelect.fakeSelect = _self;
    };
    _self.dropdown = function() {
        var D = _self.DATA;
        if (YUD.getStyle(D.optionBox, 'visibility') == 'hidden') {
            YUD.setStyle([D.optionBox, D.mask], 'visibility', 'visible');
        }
    };
    _self.rollup = function() {
        var D = _self.DATA;
        if (YUD.getStyle(D.optionBox, 'visibility') == 'visible') {
            YUD.setStyle([D.optionBox, D.mask], 'visibility', 'hidden');
        }
        if (defConfig.isStick && YUD.get('allCate')) {
            YUD.setStyle(YUD.get('allCate'), 'visibility', 'hidden');
        }
    };
    _self.select = function(inx) {
        var D = _self.DATA,
        option = D.optionLis[inx];
        if (option.innerHTML != '' && inx != _self.selectedIndex) {
            D.inputEl.value = option.childNodes[0].nodeValue;
            _self.orgSelect.options[inx].selected = true;
            _self.selectedIndex = inx;
            _self.onChange.fire(_self.orgSelect);
        }
    };
    var buildOptionList = function() {
        var cfg = defConfig,
        D = _self.DATA;
        D.optionBox = createEl('div', {
            'class': 'optionBox'
        });
        var listItems = '<ol class="optionOl">';
        for (var i = 0; i < _self.options.length; i++) {
            var option = _self.options[i];
            if (option.text.match(/^-{3,}$/ig) != null) {
                listItems += '<li id="simulateOption' + i + '" class="optionLi subLine"></li>';
            } else {
                listItems += '<li id="simulateOption' + i + '" class="optionLi ' + option.className + '">' + option.text + '</li>';
            }
        }
        listItems += '</ol>';
        D.optionBox.innerHTML = listItems;
        D.selectBox.appendChild(D.optionBox);
        D.optionOl = D.optionBox.firstChild;
        D.optionLis = D.optionOl.getElementsByTagName('li');
    };
    var formatSelector = function() {
        var cfg = defConfig,
        D = _self.DATA;
        var selectBoxW = cfg.selectBoxWH[0] + 'px';
        var selectBoxH = cfg.selectBoxWH[1] + 'px';
        YUD.setStyle(D.selectBox, 'z-index', cfg.selectBoxZIndex);
        if (parseInt(YAHOO.env.ua.ie) == 8) {
            YUD.setStyle(D.selectBox, 'display', 'inline-block');
        }
        YUD.setStyle(D.inputEl, 'width', selectBoxW);
        YUD.setStyle(D.inputEl, 'height', selectBoxH);
        YUD.setStyle(D.inputEl, 'line-height', selectBoxH);
        YUD.setStyle(D.arrowEl, 'left', cfg.arrowBoxLeft);
        YUD.setStyle(D.arrowEl, 'z-index', cfg.selectBoxZIndex + 2);
    };
    var formatOptionList = function() {
        var cfg = defConfig,
        D = _self.DATA;
        if (cfg.optionBoxTop && cfg.optionBoxTop != '') {
            YUD.setStyle(D.optionBox, 'top', cfg.optionBoxTop);
        }
        YUD.setStyle(D.optionBox, 'z-index', cfg.selectBoxZIndex + 1);
        YUD.setStyle(D.optionBox, 'visibility', 'hidden');
        if (AE.bom.isIE6) {
            YUD.setStyle(D.optionBox, 'width', '10px');
        }
        if (D.optionOl.offsetWidth < D.inputEl.offsetWidth) {
            YUD.setStyle(D.optionBox, 'width', D.inputEl.offsetWidth + 'px');
        } else {
            YUD.setStyle(D.optionBox, 'width', D.optionOl.offsetWidth + 'px');
        }
        if (D.optionLis.length > cfg.visibleOptions) {
            YUD.setStyle(D.optionBox, 'height', (D.optionLis[0].offsetHeight * cfg.visibleOptions) + 'px');
        }
        YUD.setStyle(D.optionOl, 'overflow', 'hidden');
    };
    var bindListeners = function() {
        var D = _self.DATA,
        cfg = defConfig;
        YUE.on(D.selectBox, 'click', function(e) {
            YUE.stopEvent(e);
            D.inputEl.focus();
            if (!isActive) {
                buildOptionList();
                formatOptionList();
                bindListenersOnActive();
                iframeMask();
                isActive = true;
            }
            if (YUD.getStyle(D.optionBox, 'visibility') == 'hidden') {
                D.optionBox.scrollTop = _self.selectedIndex * D.optionLis[0].offsetHeight;
                transOptionStyle(_self.selectedIndex);
                _self.dropdown();
                if (defConfig.isStick) {
                    stickAllCate();
                }
            } else {
                _self.rollup();
            }
        });
        YUE.on(D.selectBox, 'mouseover', function(e) {
            YUD.addClass(D.arrowEl, 'arrowMouseover');
        });
        YUE.on(D.selectBox, 'mouseout', function(e) {
            YUD.removeClass(D.arrowEl, 'arrowMouseover');
        });
    };
    var bindListenersOnActive = function() {
        var D = _self.DATA,
        cfg = defConfig;
        YUE.on(document, 'click', _self.rollup);
        YUE.on(D.inputEl, 'keydown', function(e) {
            YUE.stopEvent(e);
            if (e.altKey && (e.keyCode == 38 || e.keyCode == 40)) {
                if (YUD.getStyle(D.optionBox, 'visibility') == 'hidden') {
                    transOptionStyle(_self.selectedIndex);
                    _self.dropdown();
                } else {
                    _self.rollup();
                }
            }
            if (!e.altKey) {
                var inx = 0,
                optionHeight = D.optionLis[0].offsetHeight,
                scrollNum = Math.floor(D.optionBox.scrollTop / optionHeight);
                if (e.keyCode == 38) {
                    inx = (_self.browseIndex < 1) ? 0: _self.browseIndex - 1;
                    if (_self.browseIndex == scrollNum) {
                        D.optionBox.scrollTop = (scrollNum - 1) * optionHeight;
                    }
                    transOptionStyle(inx);
                    _self.select(inx);
                } else if (e.keyCode == 40) {
                    inx = (_self.browseIndex + 1 >= D.optionLis.length) ? (D.optionLis.length - 1) : (_self.browseIndex + 1);
                    if (_self.browseIndex == scrollNum + cfg.visibleOptions - 1) {
                        D.optionBox.scrollTop = (scrollNum + 1) * optionHeight;
                    }
                    transOptionStyle(inx);
                    _self.select(inx);
                } else if (e.keyCode == 13) {
                    _self.rollup();
                    _self.select(_self.browseIndex);
                }
            }
        });
        for (var i = 0; i < D.optionLis.length; i++) {
            var optionLi = D.optionLis[i];
            YUE.on(optionLi, 'click', function(e) {
                YUE.stopEvent(e);
                _self.select(getIndex(this));
                _self.rollup();
            });
            YUE.on(optionLi, 'mouseover', function(e) {
                YUE.stopEvent(e);
                transOptionStyle(getIndex(this));
            });
        }
    };
    var iframeMask = function() {
        var cfg = defConfig,
        D = _self.DATA;
        D.mask = createEl('iframe', {
            'frameBorder': '0',
            'width': D.optionBox.offsetWidth,
            'height': D.optionBox.offsetHeight
        });
        YUD.setStyle(D.mask, 'position', 'absolute');
        YUD.setStyle(D.mask, 'left', YUD.getStyle(D.optionBox, 'left'));
        YUD.setStyle(D.mask, 'top', YUD.getStyle(D.optionBox, 'top'));
        YUD.setStyle(D.mask, 'visibility', 'hidden');
        YUD.setStyle(D.mask, 'z-index', cfg.selectBoxZIndex);
        D.selectBox.appendChild(D.mask);
    };
    var getIndex = function(option) {
        return parseInt(option.id.replace('simulateOption', ''));
    };
    var transOptionStyle = function(inx) {
        var D = _self.DATA;
        if (D.optionLis[inx].innerHTML != '') {
            YUD.removeClass(YUD.getElementsByClassName('currentLi', 'li', D.optionOl), 'currentLi');
            YUD.addClass(D.optionLis[inx], 'currentLi');
            if (defConfig.isStick && YUD.get('allCate')) {
                YUD.removeClass(YUD.get('allCate'), 'currentLi');
            }
        }
        _self.browseIndex = inx;
    };
    var createEl = function(tag, properties) {
        var el = document.createElement(tag);
        for (var p in properties) {
            if (p == 'class') {
                YUD.addClass(el, properties[p]);
            } else {
                el.setAttribute(p, properties[p]);
            }
        }
        return el;
    };
    var stickAllCate = function() {
        var D = _self.DATA,
        oLiLast = D.optionBox.getElementsByTagName('li')[D.optionBox.getElementsByTagName('li').length - 1];
        if (!_self.addNodeStatus) {
            var eAllCate = document.createElement('div'),
            eAllCateBg = document.createElement('div');
            tAllCate = document.createTextNode('\u00A0 In All Categories'),
            liHeight = 34,
            startTop = D.optionBox.offsetTop + D.optionBox.offsetHeight - liHeight,
            cateWidth = D.optionBox.clientWidth;
            eAllCateBg.className = 'stickSubLine';
            eAllCate.setAttribute('id', 'allCate');
            eAllCate.className = 'stickAllCate';
            eAllCate.style.cssText = 'top:' + startTop + 'px;width:' + cateWidth + 'px;';
            eAllCate.appendChild(eAllCateBg);
            eAllCate.appendChild(tAllCate);
            D.selectBox.appendChild(eAllCate);
            _self.addNodeStatus = 1;
        } else {
            eAllCate = YUD.get('allCate');
            YUD.setStyle(eAllCate, 'visibility', 'visible');
        }
        YUE.on(eAllCate, 'click', function(e) {
            YUE.stopEvent(e);
            _self.select(getIndex(oLiLast));
            _self.rollup();
        });
        YUE.on(eAllCate, 'mouseover', function(e) {
            YUE.stopEvent(e);
            var inx = getIndex(oLiLast);
            var D = _self.DATA;
            YUD.removeClass(YUD.getElementsByClassName('currentLi', 'li', D.optionOl), 'currentLi');
            YUD.addClass(eAllCate, 'currentLi');
            _self.browseIndex = inx;
        });
    };
};

var Cookies = {
    set: function(name, value) {
        var argv = arguments;
        var argc = arguments.length;
        var expires = (argc > 2) ? argv[2] : null;
        var domain = (argc > 3) ? argv[3] : null;
        var path = (argc > 4) ? argv[4] : '/';
        var secure = (argc > 5) ? argv[5] : false;
        document.cookie = name + "=" + escape(value) + ((expires == null) ? "": ("; expires=" + expires.toGMTString())) + ((path == null) ? "": ("; path=" + path)) + ((domain == null) ? "": ("; domain=" + domain)) + ((secure == true) ? "; secure": "");
    },
    get: function(name) {
        var arg = name + "=";
        var alen = arg.length;
        var clen = document.cookie.length;
        var i = 0;
        var j = 0;
        while (i < clen) {
            j = i + alen;
            if (document.cookie.substring(i, j) == arg)
                return this.__get(j);
            i = document.cookie.indexOf(" ", i) + 1;
            if (i == 0)
                break;
        }
        return null;
    },
    __get: function(offset) {
        var endstr = document.cookie.indexOf(";", offset);
        if (endstr == -1) {
            endstr = document.cookie.length;
        }
        return unescape(document.cookie.substring(offset, endstr));
    },
    clear: function(name) {
        var argv = arguments;
        var argc = arguments.length;
        var domain = (argc > 1) ? argv[1] : null;
        var path = (argc > 2) ? argv[2] : '/';
        var secure = (argc > 3) ? argv[3] : false;
        if (this.get(name)) {
            document.cookie = name + "=" + ((path) ? "; path=" + path: "") + ((domain) ? "; domain=" + domain: "") + "; expires=Thu, 01-Jan-70 00:00:01 GMT";
        }
    },
    cookieCache: {},
    getCookieTable: function(name, domain) {
        var table = Cookies.cookieCache[name];
        if (null == table || table.changed) {
            table = new CookieTable(name);
            var str = Cookies.get(name);
            if (null != str && str != "") {
                table.parseFromString(str);
            }
            if (domain) {
                table.domain = domain;
            }
            Cookies.cookieCache[name] = table;
        }
        return table;
    }
};
var noExpires = new Date();
noExpires.setTime(noExpires.getTime() + 60 * 60 * 1000 * 24 * 60);
var SEP_GROUP = "\n\n";
var SEP_GROUP_NAME = "^\n";
var SEP_GROUP_ITEM = "$\n";
var SEP_ATTR = "\t";
var NO_SET_STR = "NOSET";
function isArray(object) {
    return object != null && typeof object == "object" && 'join' in object;
}
function CookieTable(name, arrOrString, expires, domain, path, secure) {
    this.expires = expires ? expires: noExpires;
    this.domain = domain ? domain: null;
    this.path = path ? path: '/';
    this.secure = secure ? secure: false;
    this.name = name ? name: null;
    this.groups = arrOrString && isArray(arrOrString) ? arrOrString: [];
    this.__tree = {};
    this.changed = false;
    this.buildString = function(arr) {
        if (null != arr && arr.length > 0) {
            return arr.join(SEP_GROUP);
        }
        return null;
    }
    this.parseFromString = function(str) {
        if (null == str || "" == str)
            return this;
        var arr = str.split(SEP_GROUP);
        this.removeAll();
        for (var i = 0; i < arr.length; i++) {
            if (null != arr[i] && "" != arr[i]) {
                var group = new CookieGroup();
                group.parseFromString(arr[i]);
                this.add(group);
            }
        }
        return this;
    }
    this.toString = function() {
        return this.buildString(this.groups);
    }
    this.size = function() {
        return this.groups.length;
    }
    this.arrange = function() {
        var arr = [],
        obj = {};
        for (var i = 0; i < this.size(); i++) {
            if (null != this.groups[i]) {
                arr[arr.length] = this.groups[i];
                obj[this.groups[i].name] = this.groups[i];
            }
        }
        this.removeAll();
        this.groups = arr;
        this.__tree = obj;
    }
    this.__clearTree = function() {
        this.__tree = {};
    }
    this.__addToTree = function(obj) {
        if (null != obj) {
            this.__tree[obj.name] = obj;
        }
    }
    this.__removeFromTree = function(obj) {
        if (null != obj) {
            delete this.__tree[obj.name];
        }
    }
    this.removeAll = function() {
        this.groups = [];
        this.__clearTree();
    }
    this.get = function(name) {
        if (this.__tree[name]) {
            return this.__tree[name];
        }
        return null;
    }
    this.add = function(obj) {
        if (null == obj)
            return;
        for (var i = 0; i < this.size(); i++) {
            if (obj.name.toLowerCase() == this.groups[i].name.toLowerCase()) {
                this.remove(obj.name);
            }
        }
        obj.parent = this;
        this.groups[this.size()] = obj;
        this.__addToTree(obj);
        return this;
    }
    this.remove = function(str) {
        if (null == str || "" == str)
            return;
        for (var i = 0; i < this.size(); i++) {
            if (str.toLowerCase() == this.groups[i].name.toLowerCase()) {
                this.__removeFromTree(this.groups[i]);
                this.groups[i] = null;
            }
        }
        this.arrange();
        return this;
    }
    this.save = function() {
        this.changed = true;
        Cookies.set(this.name, this.toString(), this.expires, this.domain, this.path, this.secure);
    }
    this.clear = function() {
        Cookies.clear(this.name);
    }
    if (this.name != null && typeof(arrOrString) == "string") {
        this.parseFromString(arrOrString);
    } else if (this.name != null && isArray(arrOrString)) {
        for (var i = 0; i < this.size(); i++) {
            if (null != this.groups[i]) {
                this.__addToTree(this.groups[i]);
                this.groups[i].parent = this;
            }
        }
    }
}
function CookieGroup(name, arrOrString) {
    this.name = name ? name: null;
    this.items = arrOrString && isArray(arrOrString) ? arrOrString: [];
    this.__tree = {};
    this.max = 20;
    this.parent = null;
    this.buildString = function(arr) {
        var str = this.name ? this.name: NO_SET_STR;
        if (null != arr && arr.length > 0) {
            return str + SEP_GROUP_NAME + arr.join(SEP_GROUP_ITEM);
        }
        return str;
    }
    this.parseFromString = function(str) {
        if (null == str || "" == str)
            return this;
        var name_end = str.indexOf(SEP_GROUP_NAME);
        if (name_end > -1) {
            this.name = str.substring(0, name_end);
            var itemsStr = str.substring(name_end + SEP_GROUP_NAME.length);
            if (null != itemsStr && itemsStr != "") {
                this.removeAll();
                var arr = itemsStr.split(SEP_GROUP_ITEM);
                for (var i = 0; i < arr.length; i++) {
                    if (null != arr[i] && "" != arr[i]) {
                        var item = new CookieItem();
                        item.parseFromString(arr[i]);
                        this.add(item);
                    }
                }
            }
        } else {
            this.name = str;
        }
        return this;
    }
    this.toString = function() {
        return this.buildString(this.items);
    }
    this.getReverse = function() {
        var arr = [];
        if (this.size() > 0) {
            return this.items.slice(0, this.items.length).reverse();
        }
        return arr;
    }
    this.setMax = function(max) {
        this.max = max;
        this.arrange();
    }
    this.size = function() {
        return this.items.length;
    }
    this.arrange = function() {
        var arr = [],
        obj = {};
        for (var i = 0; i < this.size(); i++) {
            if (null != this.items[i]) {
                arr[arr.length] = this.items[i];
            }
        }
        if (arr.length > this.max) {
            arr = arr.slice(arr.length - this.max, arr.length);
        }
        for (var i = 0; i < arr.length; i++) {
            obj[arr.key] = arr[i];
        }
        this.removeAll();
        this.items = arr;
        this.__tree = obj;
    }
    this.__clearTree = function() {
        this.__tree = {};
    }
    this.__addToTree = function(obj) {
        if (null != obj) {
            this.__tree[obj.key] = obj;
        }
    }
    this.__removeFromTree = function(obj) {
        if (null != obj) {
            delete this.__tree[obj.key];
        }
    }
    this.removeAll = function() {
        this.items = [];
        this.__clearTree();
    }
    this.get = function(key) {
        if (this.__tree[key]) {
            return this.__tree[key];
        }
        return null;
    }
    this.add = function(obj) {
        if (null == obj)
            return;
        for (var i = 0; i < this.size(); i++) {
            if (obj.key.toLowerCase() == this.items[i].key.toLowerCase()) {
                this.remove(obj.key);
            }
        }
        obj.parent = this;
        this.items[this.size()] = obj;
        this.__addToTree(obj);
        return this;
    }
    this.remove = function(str) {
        if (null == str || "" == str)
            return;
        for (var i = 0; i < this.size(); i++) {
            if (str.toLowerCase() == this.items[i].key.toLowerCase()) {
                this.__removeFromTree(this.items[i]);
                this.items[i] = null;
            }
        }
        this.arrange();
        return this;
    }
    this.save = function() {
        if (null != this.parent) {
            this.arrange();
            this.parent.save();
        }
    }
    if (this.name != null && typeof(arrOrString) == "string") {
        this.parseFromString(this.name + SEP_GROUP_NAME + arrOrString);
    } else if (this.name != null && isArray(arrOrString)) {
        for (var i = 0; i < this.size(); i++) {
            if (null != this.items[i]) {
                this.__addToTree(this.items[i]);
                this.items[i].parent = this;
            }
        }
    }
}
function CookieItem(key, arrOrString) {
    this.key = key ? key: null;
    this.attributes = arrOrString && isArray(arrOrString) ? arrOrString: [];
    this.max = 20;
    this.parent = null;
    this.buildString = function(arr) {
        var str = this.key ? this.key: NO_SET_STR;
        if (null != arr && arr.length > 0) {
            return str + SEP_ATTR + arr.join(SEP_ATTR);
        }
        return str;
    }
    this.parseFromString = function(str) {
        if (null == str || "" == str)
            return this;
        var arr = str.split(SEP_ATTR);
        if (arr.length > 0) {
            this.key = arr[0];
            this.attributes = arr.slice(1, arr.length);
        }
        return this;
    }
    this.setMax = function(max) {
        this.max = max;
        this.arrange();
    }
    this.size = function() {
        return this.attributes.length;
    }
    this.toString = function() {
        return this.buildString(this.attributes);
    }
    this.getReverse = function() {
        var arr = [];
        if (this.size() > 0) {
            return this.attributes.slice(0, this.attributes.length).reverse();
        }
        return arr;
    }
    this.reverseString = function() {
        return this.buildString(this.getReverse());
    }
    this.arrange = function() {
        var arr = [];
        for (var i = 0; i < this.size(); i++) {
            if (null != this.attributes[i]) {
                arr[arr.length] = this.attributes[i];
            }
        }
        if (arr.length > this.max) {
            this.attributes = arr.slice(arr.length - this.max, arr.length);
        } else {
            this.attributes = arr;
        }
    }
    this.removeAll = function() {
        this.attributes = [];
    }
    this.get = function(index) {
        return index < this.size() ? this.attributes[index] : null;
    }
    this.add = function(str) {
        if (null == str || "" == str)
            return;
        this.remove(str);
        this.attributes[this.size()] = str;
        this.arrange();
        return this;
    }
    this.remove = function(str) {
        if (null == str || "" == str)
            return;
        for (var i = 0; i < this.size(); i++) {
            if (str.toLowerCase() == this.attributes[i].toLowerCase()) {
                this.attributes[i] = null;
            }
        }
        this.arrange();
        return this;
    }
    this.contains = function(str) {
        for (var i = 0; i < this.size(); i++) {
            if (str.toLowerCase() == this.attributes[i].toLowerCase()) {
                return true;
            }
        }
    }
    this.save = function() {
        if (null != this.parent) {
            this.arrange();
            this.parent.save();
        }
    }
    if (this.key != null && typeof(arrOrString) == "string") {
        this.parseFromString(this.key + SEP_ATTR + arrOrString);
    }
}
var TOP_DOMAIN = "mindvisionpk.com";
var HISTORY_COOKIE_NAME = "history";
var GROUP_KEYWORDS = "keywords";
var GROUP_PRODUCT = "product";
var GROUP_SELLOFFER = "selloffer";
var GROUP_BUYOFFER = "buyoffer";
var GROUP_COMPANY = "company";
var GROUP_CATEGORY = "category";
var GROUP_PRODUCT_SELLOFFER = GROUP_PRODUCT + "_" + GROUP_SELLOFFER;
var MAX_KEYWORDS = 8;
var MAX_PRODUCT = 8;
var MAX_SELLOFFER = 8;
var MAX_BUYOFFER = 6;
var MAX_COMPANY = 4;
var MAX_CATEGORY = 6;
var MAX_PRODUCT_SELLOFFER = 8;
function getHistoryCookieTable() {
    return Cookies.getCookieTable(HISTORY_COOKIE_NAME, TOP_DOMAIN);
}
function getHistoryCookieGroup(groupName) {
    var table = getHistoryCookieTable();
    var group = table.get(groupName);
    if (null == group) {
        group = new CookieGroup(groupName);
        table.add(group);
        group.parent = table;
    }
    return group;
}
function addOrUpdateHistoryCookieItem(groupName, itemKey, value, max) {
    if (null == value || "" == value)
        return;
    var group = getHistoryCookieGroup(groupName);
    var item = group.get(itemKey);
    var changed = false;
    if (isArray(value)) {
        item = new CookieItem(itemKey, value);
        changed = true;
    } else {
        item = (null == item) ? new CookieItem(itemKey) : item;
        item.add(value);
        changed = true;
    }
    group.add(item);
    if (groupName == GROUP_KEYWORDS) {
        item.setMax(max);
    } else {
        group.setMax(max);
    }
    if (changed) {
        group.save();
    }
}
function logKeywordsHistory(value) {
    addOrUpdateHistoryCookieItem(GROUP_KEYWORDS, GROUP_KEYWORDS, value, MAX_KEYWORDS);
}
function logProductHistory(itemKey, value) {
    addOrUpdateHistoryCookieItem(GROUP_PRODUCT_SELLOFFER, itemKey, value, MAX_PRODUCT_SELLOFFER);
}
function logSellOfferHistory(itemKey, value) {
    addOrUpdateHistoryCookieItem(GROUP_PRODUCT_SELLOFFER, itemKey, value, MAX_PRODUCT_SELLOFFER);
}
function logCompanyHistory(itemKey, value) {
    addOrUpdateHistoryCookieItem(GROUP_COMPANY, itemKey, value, MAX_COMPANY);
}
function logBuyOfferHistory(itemKey, value) {
    addOrUpdateHistoryCookieItem(GROUP_BUYOFFER, itemKey, value, MAX_BUYOFFER);
}
function logCategoryHistory(itemKey, value) {
    addOrUpdateHistoryCookieItem(GROUP_CATEGORY, itemKey, value, MAX_CATEGORY);
}

var adsDsiplayVerify = function() {
    var config = {};
    var defConfig = {
        isLogin: false,
        servType: '',
        productNum: '',
        tradeType: '',
        ipRegion: ''
    };
    this.isInit = false;
    this.init = function(usrConfig) {
        config = YL.merge(defConfig, usrConfig);
        this.isInit = true;
    };
    this.verify = function(condObj) {
        var result = true;
        if (!this.isInit) {
            return true;
        }
        if (!YL.isObject(condObj)) {
            return true;
        }
        for (var p in condObj) {
            var cVal = config[p],
            uVal = condObj[p];
            switch (p) {
            case 'isLogin':
                if (uVal !== cVal) {
                    return false;
                }
                break;
            case 'productNum':
                if (!eval(cVal + uVal)) {
                    return false;
                }
                break;
            case 'tradeType':
                if (uVal !== cVal) {
                    return false;
                }
                break;
            case 'servType':
                if (uVal != cVal && !this.contain(cVal, uVal)) {
                    return false;
                }
                break;
            case 'ipRegion':
                if (uVal != cVal && !this.contain(cVal, uVal)) {
                    return false;
                }
            }
        }
        return result;
    };
    this.contain = function(tstr, ostr) {
        var str = (',' + ostr + ',').replace('!', '').replace(/,\s*,/g, ',');
        var regEx = new RegExp(',' + tstr + ',', 'ig');
        var isContain = regEx.test(str),
        isNot = (ostr.substr(0, 1) == '!');
        return ! (isContain === isNot);
    };
    this.checkTimeIn = function(hour) {
        var firstInTime;
        var userCookie = AE.bom.getCookie('aisn_home_firstIn');
        if (userCookie == "") {
            firstInTime = new Date();
            AE.bom.setCookie("aisn_home_firstIn", firstInTime, 24 * 30);
            return true;
        } else {
            if (userCookie == "expired") {
                return false;
            } else {
                var now = new Date();
                firstInTime = userCookie;
                var seconds = (Date.parse(now) - Date.parse(firstInTime)) / 1000;
                if (seconds < hour * 3600) {
                    return true;
                } else {
                    AE.bom.setCookie("aisn_home_firstIn", "expired", 24 * 30);
                    return false;
                }
            }
        }
    };
};

AE.namespace('AE.widget.SimpleScroll');
AE.widget.SimpleScroll = new function() {
    var Y = YAHOO.util;
    var defConfig = {
        delay: 2,
        speed: 20,
        startDelay: 2,
        direction: "vertical",
        disableAutoPlay: false,
        distance: "auto",
        scrollItemCount: 1
    };
    this.decorate = function(container, config) {
        container = get(container);
        config = YL.merge(defConfig, config || {});
        if (null === container)
            return;
        var step = 2;
        if (config.speed < 20) {
            step = 5
        }
        if (config.lineHeight) {
            config.distance = config.lineHeight
        }
        var scrollTimeId = null,
        startTimeId = null,
        startDelayTimeId = null;
        var isHorizontal = (config.direction.toLowerCase() == "horizontal") || (config.direction.toLowerCase() == "h");
        var handle = {};
        handle._distance = 0;
        handle.scrollable = true;
        handle.distance = config.distance;
        handle._distance = 0;
        handle.suspend = false;
        handle.paused = false;
        var _onScrollEvent = new Y.CustomEvent("_onScroll", handle, false, Y.CustomEvent.FLAT);
        _onScrollEvent.subscribe(function() {
            var curLi = container.getElementsByTagName("li")[0];
            if (!curLi) {
                this.scrollable = false;
                return
            }
            this.distance = (config.distance == "auto") ? curLi[isHorizontal ? "offsetWidth": "offsetHeight"] : config.distance;
            with(container) {
                if (isHorizontal) {
                    this.scrollable = (scrollWidth - scrollLeft - offsetWidth) >= this.distance
                } else {
                    this.scrollable = (scrollHeight - scrollTop - offsetHeight) >= this.distance
                }
            }
        });
        var onScrollEvent = new Y.CustomEvent("onScroll", handle, false, Y.CustomEvent.FLAT);
        if (config.onScroll) {
            onScrollEvent.subscribe(config.onScroll)
            } else {
            onScrollEvent.subscribe(function() {
                for (var i = 0; i < config.scrollItemCount; i++) {
                    container.appendChild(container.getElementsByTagName("li")[0])
                    }
                container[isHorizontal ? "scrollLeft": "scrollTop"] = 0
            })
            }
        var scroll = function() {
            if (handle.suspend) {
                return
            }
            handle._distance += step;
            var _d;
            if ((_d = handle._distance % handle.distance) < step) {
                container[isHorizontal ? "scrollLeft": "scrollTop"] += (step - _d);
                clearInterval(scrollTimeId);
                onScrollEvent.fire();
                _onScrollEvent.fire();
                startTimeId = null;
                if (handle.scrollable && !handle.paused) {
                    handle.play()
                    }
            } else {
                container[isHorizontal ? "scrollLeft": "scrollTop"] += step
            }
        };
        var start = function() {
            if (handle.paused) {
                return
            }
            handle._distance = 0;
            scrollTimeId = setInterval(scroll, config.speed)
            };
        YUE.on(container, "mouseover", function() {
            handle.suspend = true
        });
        YUE.on(container, "mouseout", function() {
            handle.suspend = false
        });
        handle = YL.merge(handle, {
            subscribeOnScroll: function(func, override) {
                if (override === true && onScrollEvent.subscribers.length > 0) {
                    onScrollEvent.unsubscribeAll()
                    }
                onScrollEvent.subscribe(func)
                },
            pause: function() {
                this.paused = true;
                clearTimeout(startTimeId);
                startTimeId = null
            },
            play: function() {
                this.paused = false;
                if (startDelayTimeId) {
                    clearTimeout(startDelayTimeId)
                    }
                if (!startTimeId) {
                    startTimeId = setTimeout(start, config.delay * 1000)
                    }
            }
        });
        handle.onScroll = handle.subscribeOnScroll;
        _onScrollEvent.fire();
        if (!config.disableAutoPlay) {
            startDelayTimeId = setTimeout(function() {
                handle.play()
                }, config.startDelay * 1000)
            }
        return handle
    }
};

AE.namespace('AE.app');
AE.app.categories = function(config) {
    this.config = {
        rootTarget: get("categories"),
        subTarget: get("categories-subs"),
        afterLoadClass: "after-load-subs",
        itemCurrentClass: "current",
        afterShowSubClass: "after-show-sub",
        afterShowNextItemClass: "active-border-color",
        showDelayTime: 50,
        hiddenDelayTime: 50,
        excursion: [184, 0]
        };
    this.temp = {
        rootItems: [],
        subItems: {}
    };
    this.onAfterShow = new YAHOO.util.CustomEvent('onAfterShow', this);
    this.onAfterHide = new YAHOO.util.CustomEvent('onAfterHide', this);
    return this;
}
AE.app.categories.prototype = {
    afterShow: function(ev, s, args) {
        var _self = this,
        config = this.config,
        curY;
        this.onAfterShow.fire(this);
        if ((args.subItem.offsetHeight + YUD.getY(args.subItem)) > (YUD.getViewportHeight() + YUD.getDocumentScrollTop()) && ((args.subItem.offsetHeight + 110) < (YUD.getY(args.subItem) + args.rootItem.offsetHeight))) {
            curY = YUD.getY(args.subItem) + YUD.getViewportHeight() + YUD.getDocumentScrollTop() - (args.subItem.offsetHeight + YUD.getY(args.subItem))
                if ((curY + args.subItem.offsetHeight) < (YUD.getY(args.subItem) + args.rootItem.offsetHeight + 3)) {
                curY += (YUD.getY(args.subItem) + args.rootItem.offsetHeight + 3) - (curY + args.subItem.offsetHeight);
            }
            YUD.setY(args.subItem, curY)
            }
        if (config.afterShowSubClass) {
            YUD.addClass(config.rootTarget, config.afterShowSubClass);
        }
        YUD.addClass(args.nextItem, config.afterShowNextItemClass);
        YUD.addClass(args.rootItem.parentNode, config.itemCurrentClass);
    },
    afterHidden: function(ev, s, args) {
        var _self = this;
        var config = this.config;
        this.onAfterHide.fire(this);
        if (config.afterShowSubClass) {
            YUD.removeClass(config.rootTarget, config.afterShowSubClass);
        }
        YUD.removeClass(args.nextItem, config.afterShowNextItemClass);
        YUD.removeClass(args.rootItem.parentNode, config.itemCurrentClass);
    },
    init: function(customConfig) {
        this.config = YL.merge(this.config, customConfig || {});
        var _self = this,
        config = this.config;
        var subItems = config.subTarget.getElementsByTagName("ul");
        for (var i = 0; i < subItems.length; i++) {
            var subItem = subItems[i];
            _self.temp.subItems[trim(subItem.getAttribute("rel")).toUpperCase()] = subItem;
        }
        var rootItems = config.rootTarget.getElementsByTagName("a");
        for (var i = 0; i < rootItems.length; i++) {
            var rootItem = rootItems[i];
            var key = trim((rootItem.innerText ? rootItem.innerText: rootItem.textContent)).toUpperCase();
			//alert(key);
            if (_self.temp.subItems[key]) {
                var overShow = rootItem.overShow = new AE.widget.overShow();
                var subItem = this.temp.subItems[key];
                var nextItem = rootItems[i + 1] ? rootItems[i + 1] : null;
                overShow.afterShow.subscribe(_self.afterShow, {
                    rootItem: rootItem,
                    subItem: subItem,
                    nextItem: nextItem
                }, _self);
                overShow.afterHidden.subscribe(_self.afterHidden, {
                    rootItem: rootItem,
                    subItem: subItem,
                    nextItem: nextItem
                }, _self);
                var excursion = config.excursion;
                overShow.init({
                    targetId: rootItem,
                    contentId: subItem,
                    showDelayTime: config.showDelayTime,
                    hiddenDelayTime: config.hiddenDelayTime,
                    excursion: excursion
                });
            }
            _self.temp.rootItems.push(rootItem);
        }
        YUD.addClass(config.rootTarget, config.afterLoadClass);
        if (AE.bom.isIE) {
            CollectGarbage();
        }
        return _self;
    }
}

AE.namespace('AE.app.infiniteScroll');
AE.app.infiniteScroll = function() {
    this.isInit = false;
    this.scrolling = false;
    this.dItems = null;
    this.inx = 0;
    this.offsetPrev = 0;
    this.offsetNext = 0;
    this.animBy = window.animBy;
    this.config = {
        scrollBody: '',
        dataSource: '',
        direction: 'horizontal',
        showNum: 5,
        step: 1,
        itemWidth: 102,
        speed: 34
    };
    this.init = function(uConfig) {
        var CFG = this.config = YL.merge(this.config, uConfig);
        var SB = get(CFG.scrollBody),
        DS = get(CFG.dataSource);
        if (this.isInit || null == SB || null == DS)
            return;
        this.dItems = null;
        var dItems = this.dItems = YUD.getChildren(DS);
        SB.innerHTML = '';
        for (var i = 0, l = dItems.length; i < l; i++) {
            dItems[i].setAttribute('inx', i);
        }
        var inx = dItems.length - CFG.showNum < 0 ? 2 * dItems.length - CFG.showNum: dItems.length - CFG.showNum;
        this.updateCnt(this.updateInx(inx));
        YUD.setStyle(SB, (CFG.direction == 'horizontal') ? 'left': 'top', -CFG.itemWidth * CFG.showNum + 'px');
        YUD.setStyle(SB, 'width', 3 * CFG.itemWidth * (CFG.showNum + 1) + 'px');
        this.isInit = true;
        this.onInit.fire();
    };
    this.onInit = new YAHOO.util.CustomEvent('onInit', this);
    this.onUpdate = new YAHOO.util.CustomEvent('onUpdate', this);
    this.onScroll = new YAHOO.util.CustomEvent('onScroll', this);
};
AE.app.infiniteScroll.prototype = YL.merge(AE.app.infiniteScroll.prototype, {
    getInx: function(go) {
        var CFG = this.config,
        inx = this.inx,
        dn = this.dItems.length;
        if (go == 'next') {
            inx += CFG.step;
            if (inx >= dn)
                inx -= dn;
        } else if (go == 'prev') {
            inx -= CFG.step;
            if (inx < 0)
                inx += dn;
        }
        return inx;
    },
    updateInx: function(inx) {
        this.inx = inx;
        return inx;
    },
    getInxGroup: function(inx) {
        var inxes = [],
        dn = YUD.getChildren(this.config.dataSource).length;
        if (dn == 0)
            return inxes;
        for (var i = 0; i < 3 * this.config.showNum; i++) {
            if (inx > dn - 1)
                inx = 0;
            inxes.push(inx);
            inx++;
        }
        return inxes;
    },
    updateCnt: function(inx) {
        var CFG = this.config,
        SB = get(CFG.scrollBody);
        var sItems = YUD.getChildren(SB);
        var inxes = this.getInxGroup(inx);
        if (this.isInit) {
            for (var i = 0; i < inxes.length; i++) {
                SB.replaceChild(this.dItems[inxes[i]].cloneNode(true), sItems[i]);
            }
            this.onUpdate.fire();
        } else {
            for (var i = 0; i < inxes.length; i++) {
                SB.appendChild(this.dItems[inxes[i]].cloneNode(true));
            }
        }
    },
    scroll: function(go) {
        var _self = this,
        CFG = this.config;
        var _style = (CFG.direction == 'horizontal') ? 'left': 'top';
        var by = CFG.itemWidth * CFG.step;
        if (go == 'next') {
            by = -by;
            this.offsetPrev -= CFG.step;
            this.offsetNext += CFG.step;
        } else {
            this.offsetPrev += CFG.step;
            this.offsetNext -= CFG.step;
        }
        this.scrolling = true;
        this.animBy(CFG.scrollBody, _style, by, CFG.speed, function() {
            if (_self.offsetPrev == CFG.showNum || _self.offsetNext == CFG.showNum) {
                _self.updateCnt(_self.updateInx(_self.getInx(go)));
                YUD.setStyle(CFG.scrollBody, _style, -CFG.itemWidth * CFG.showNum + 'px');
                _self.offsetPrev = _self.offsetNext = 0;
            } else {
                _self.updateInx(_self.getInx(go));
            }
            _self.scrolling = false;
            _self.onScroll.fire(go);
        });
    },
    prev: function() {
        this.scroll('prev');
    },
    next: function() {
        this.scroll('next');
    }
});