﻿/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License:http://developer.yahoo.net/yui/license.txt Version: 0.11.4*/

YAHOO.util.CustomEvent = function (_1, _2, _3) {
    this.type = _1;
    this.scope = _2 || window; this.silent = _3;
    this.subscribers = [];

    if (!this.silent) { }
};

YAHOO.util.CustomEvent.prototype = {
    subscribe: function (fn, _5, _6) {
        this.subscribers.push(new YAHOO.util.Subscriber(fn, _5, _6));
    },
    unsubscribe:
function (fn, _7) {
    var _8 = false;
    for (var i = 0, len = this.subscribers.length; i < len; ++i) {
        var s = this.subscribers[i];
        if (s && s.contains(fn, _7)) {
            this._delete(i); _8 = true;
        }
    }
    return _8;
},
    fire: function () {
        var len = this.subscribers.length;
        if (!len && this.silent) {
            return;
        }
        var _12 = [];
        for (var i = 0; i < arguments.length; ++i) {
            _12.push(arguments[i]);
        }
        if (!this.silent) { }
        for (i = 0; i < len; ++i) {
            var s = this.subscribers[i];
            if (s) {
                if (!this.silent) { }
                var _13 = (s.override) ? s.obj : this.scope; s.fn.call(_13, this.type, _12, s.obj);
            }
        }
    },

    unsubscribeAll: function () {
        for (var i = 0, len = this.subscribers.length; i < len; ++i) {
            this._delete(len - 1 - i);
        }
    },
    _delete: function (_14) {
        var s = this.subscribers[_14];
        if (s) {
            delete s.fn;
            delete s.obj;
        }
        this.subscribers.splice(_14, 1);
    },
    toString: function () {
        return "CustomEvent: " + "'" + this.type + "', " + "scope: " + this.scope;
    }
};

YAHOO.util.Subscriber = function (fn, obj, _16) {
    this.fn = fn;
    this.obj = obj || null;
    this.override = (_16);
};

YAHOO.util.Subscriber.prototype.contains = function (fn, obj) {
    return (this.fn == fn && this.obj == obj);
};
YAHOO.util.Subscriber.prototype.toString = function () {
    return "Subscriber { obj: " + (this.obj || "") + ", override: " + (this.override || "no") + " }";
};
if (!YAHOO.util.Event) {
    YAHOO.util.Event = function () {
        var _17 = false;
        var _18 = [];
        var _19 = [];
        var _20 = [];
        var _21 = [];
        var _22 = [];
        var _23 = 0;
        var _24 = [];
        var _25 = [];
        var _26 = 0;
        return {
            POLL_RETRYS: 200, POLL_INTERVAL: 50, EL: 0, TYPE: 1, FN: 2, WFN: 3, SCOPE: 3, ADJ_SCOPE: 4, isSafari: (/Safari|Konqueror|KHTML/gi).test(navigator.userAgent), isIE: (!this.isSafari && !navigator.userAgent.match(/opera/gi) && navigator.userAgent.match(/msie/gi)),
            addDelayedListener: function (el, _28, fn, _29, _30) { _19[_19.length] = [el, _28, fn, _29, _30]; if (_17) { _23 = this.POLL_RETRYS; this.startTimeout(0); } },
            startTimeout: function (_31) { var i = (_31 || _31 === 0) ? _31 : this.POLL_INTERVAL; var _32 = this; var _33 = function () { _32._tryPreloadAttach(); }; this.timeout = setTimeout(_33, i); },
            onAvailable: function (_34, _35, _36, _37) { _24.push({ id: _34, fn: _35, obj: _36, override: _37 }); _23 = this.POLL_RETRYS; this.startTimeout(0); }, addListener: function (el, _38, fn, _39, _40) { if (!fn || !fn.call) { return false; } if (this._isValidCollection(el)) { var ok = true; for (var i = 0, len = el.length; i < len; ++i) { ok = (this.on(el[i], _38, fn, _39, _40) && ok); } return ok; } else { if (typeof el == "string") { var oEl = this.getEl(el); if (_17 && oEl) { el = oEl; } else { this.addDelayedListener(el, _38, fn, _39, _40); return true; } } } if (!el) { return false; } if ("unload" == _38 && _39 !== this) { _20[_20.length] = [el, _38, fn, _39, _40]; return true; } var _43 = (_40) ? _39 : el; var _44 = function (e) { return fn.call(_43, YAHOO.util.Event.getEvent(e), _39); }; var li = [el, _38, fn, _44, _43]; var _47 = _18.length; _18[_47] = li; if (this.useLegacyEvent(el, _38)) { var _48 = this.getLegacyIndex(el, _38); if (_48 == -1 || el != _21[_48][0]) { _48 = _21.length; _25[el.id + _38] = _48; _21[_48] = [el, _38, el["on" + _38]]; _22[_48] = []; el["on" + _38] = function (e) { YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e), _48); }; } _22[_48].push(li); } else { if (el.addEventListener) { el.addEventListener(_38, _44, false); } else { if (el.attachEvent) { el.attachEvent("on" + _38, _44); } } } return true; }, fireLegacyEvent: function (e, _49) { var ok = true; var le = _22[_49]; for (var i = 0, len = le.length; i < len; ++i) { var li = le[i]; if (li && li[this.WFN]) { var _51 = li[this.ADJ_SCOPE]; var ret = li[this.WFN].call(_51, e); ok = (ok && ret); } } return ok; }, getLegacyIndex: function (el, _53) { var key = this.generateId(el) + _53; if (typeof _25[key] == "undefined") { return -1; } else { return _25[key]; } }, useLegacyEvent: function (el, _55) { if (!el.addEventListener && !el.attachEvent) { return true; } else { if (this.isSafari) { if ("click" == _55 || "dblclick" == _55) { return true; } } } return false; }, removeListener: function (el, _56, fn, _57) { if (!fn || !fn.call) { return false; } var i, len; if (typeof el == "string") { el = this.getEl(el); } else { if (this._isValidCollection(el)) { var ok = true; for (i = 0, len = el.length; i < len; ++i) { ok = (this.removeListener(el[i], _56, fn) && ok); } return ok; } } if ("unload" == _56) { for (i = 0, len = _20.length; i < len; i++) { var li = _20[i]; if (li && li[0] == el && li[1] == _56 && li[2] == fn) { _20.splice(i, 1); return true; } } return false; } var _58 = null; if ("undefined" == typeof _57) { _57 = this._getCacheIndex(el, _56, fn); } if (_57 >= 0) { _58 = _18[_57]; } if (!el || !_58) { return false; } if (this.useLegacyEvent(el, _56)) { var _59 = this.getLegacyIndex(el, _56); var _60 = _22[_59]; if (_60) { for (i = 0, len = _60.length; i < len; ++i) { li = _60[i]; if (li && li[this.EL] == el && li[this.TYPE] == _56 && li[this.FN] == fn) { _60.splice(i, 1); } } } } else { if (el.removeEventListener) { el.removeEventListener(_56, _58[this.WFN], false); } else { if (el.detachEvent) { el.detachEvent("on" + _56, _58[this.WFN]); } } } delete _18[_57][this.WFN]; delete _18[_57][this.FN]; _18.splice(_57, 1); return true; }, getTarget: function (ev, _62) { var t = ev.target || ev.srcElement; return this.resolveTextNode(t); }, resolveTextNode: function (_64) { if (_64 && _64.nodeName && "#TEXT" == _64.nodeName.toUpperCase()) { return _64.parentNode; } else { return _64; } }, getPageX: function (ev) { var x = ev.pageX; if (!x && 0 !== x) { x = ev.clientX || 0; if (this.isIE) { x += this._getScrollLeft(); } } return x; }, getPageY: function (ev) { var y = ev.pageY; if (!y && 0 !== y) { y = ev.clientY || 0; if (this.isIE) { y += this._getScrollTop(); } } return y; }, getXY: function (ev) { return [this.getPageX(ev), this.getPageY(ev)]; }, getRelatedTarget: function (ev) { var t = ev.relatedTarget; if (!t) { if (ev.type == "mouseout") { t = ev.toElement; } else { if (ev.type == "mouseover") { t = ev.fromElement; } } } return this.resolveTextNode(t); }, getTime: function (ev) { if (!ev.time) { var t = new Date().getTime(); try { ev.time = t; } catch (e) { return t; } } return ev.time; }, stopEvent: function (ev) { this.stopPropagation(ev); this.preventDefault(ev); }, stopPropagation: function (ev) { if (ev.stopPropagation) { ev.stopPropagation(); } else { ev.cancelBubble = true; } }, preventDefault: function (ev) { if (ev.preventDefault) { ev.preventDefault(); } else { ev.returnValue = false; } }, getEvent: function (e) { var ev = e || window.event; if (!ev) { var c = this.getEvent.caller; while (c) { ev = c.arguments[0]; if (ev && Event == ev.constructor) { break; } c = c.caller; } } return ev; }, getCharCode: function (ev) { return ev.charCode || ((ev.type == "keypress") ? ev.keyCode : 0); }, _getCacheIndex: function (el, _68, fn) { for (var i = 0, len = _18.length; i < len; ++i) { var li = _18[i]; if (li && li[this.FN] == fn && li[this.EL] == el && li[this.TYPE] == _68) { return i; } } return -1; }, generateId: function (el) { var id = el.id; if (!id) { id = "yuievtautoid-" + _26; ++_26; el.id = id; } return id; }, _isValidCollection: function (o) { return (o && o.length && typeof o != "string" && !o.tagName && !o.alert && typeof o[0] != "undefined"); }, elCache: {}, getEl: function (id) { return document.getElementById(id); }, 
            clearCache: function () { }, _load: function (e) { _17 = true; var EU = YAHOO.util.Event; EU._simpleRemove(window, "load", EU._load); }, _tryPreloadAttach: function () { if (this.locked) { return false; } this.locked = true; var _72 = !_17; if (!_72) { _72 = (_23 > 0); } var _73 = []; for (var i = 0, len = _19.length; i < len; ++i) { var d = _19[i]; if (d) { var el = this.getEl(d[this.EL]); if (el) { this.on(el, d[this.TYPE], d[this.FN], d[this.SCOPE], d[this.ADJ_SCOPE]); delete _19[i]; } else { _73.push(d); } } } _19 = _73; var _75 = []; for (i = 0, len = _24.length; i < len; ++i) { var _76 = _24[i]; if (_76) { el = this.getEl(_76.id); if (el) { var _77 = (_76.override) ? _76.obj : el; _76.fn.call(_77, _76.obj); delete _24[i]; } else { _75.push(_76); } } } _23 = (_73.length === 0 && _75.length === 0) ? 0 : _23 - 1; if (_72) { this.startTimeout(); } this.locked = false; return true; }, 
            purgeElement: function (el, _78, _79) { var _80 = this.getListeners(el, _79); if (_80) { for (var i = 0, len = _80.length; i < len; ++i) { var l = _80[i]; this.removeListener(el, l.type, l.fn); } } if (_78 && el && el.childNodes) { for (i = 0, len = el.childNodes.length; i < len; ++i) { this.purgeElement(el.childNodes[i], _78, _79); } } }, 
            getListeners: function (el, _82) { var _83 = []; if (_18 && _18.length > 0) { for (var i = 0, len = _18.length; i < len; ++i) { var l = _18[i]; if (l && l[this.EL] === el && (!_82 || _82 === l[this.TYPE])) { _83.push({ type: l[this.TYPE], fn: l[this.FN], obj: l[this.SCOPE], adjust: l[this.ADJ_SCOPE], index: i }); } } } return (_83.length) ? _83 : null; },
            _unload: function (e) {
                var EU = YAHOO.util.Event;
                for (var i = 0, len = _20.length; i < len; ++i) {
                    var l = _20[i];
                    if (l) {
                        var _84 = (l[EU.ADJ_SCOPE]) ? l[EU.SCOPE] : window; l[EU.FN].call(_84, EU.getEvent(e), l[EU.SCOPE]);
                        delete _20[i];
                        l = null;
                    }
                }
                if (_18 && _18.length > 0) {
                    var j = _18.length;
                    while (j) {
                        var _86 = j - 1;
                        l = _18[_86];
                        if (l) {
                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], _86);
                        }
                        l = null;
                        j = j - 1;
                    }
                    EU.clearCache();
                }
                for (i = 0, len = _21.length; i < len; ++i) {
                    delete _21[i][0];
                    delete _21[i];
                }
                EU._simpleRemove(window, "unload", EU._unload);
            },
            _getScrollLeft: function () {
                return this._getScroll()[1];
            },
            _getScrollTop: function () {
                return this._getScroll()[0];
            },
            _getScroll: function () {
                var dd = document.documentElement, db = document.body;
                if (dd && (dd.scrollTop || dd.scrollLeft)) {
                    return [dd.scrollTop, dd.scrollLeft];
                }
                else {
                    if (db) {
                        return [db.scrollTop, db.scrollLeft];
                    }
                    else {
                        return [0, 0];
                    }
                }
            },
            _simpleAdd: function (el, _88, fn, _89) {
                if (el.addEventListener) {
                    el.addEventListener(_88, fn, (_89));
                }
                else {
                    if (el.attachEvent) {
                        el.attachEvent("on" + _88, fn);
                    }
                }
            },
            _simpleRemove: function (el, _90, fn, _91) {
                if (el.removeEventListener) {
                    el.removeEventListener(_90, fn, (_91));
                }
                else {
                    if (el.detachEvent) {
                        el.detachEvent("on" + _90, fn);
                    }
                }
            }
        };
    } (); YAHOO.util.Event.on = YAHOO.util.Event.addListener; if (document && document.body) { YAHOO.util.Event._load(); }
    else {
        YAHOO.util.Event._simpleAdd(window, "load", YAHOO.util.Event._load);
    }
    YAHOO.util.Event._simpleAdd(window, "unload", YAHOO.util.Event._unload);
    YAHOO.util.Event._tryPreloadAttach();

}
