/* Copyright (c) 2006, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: http://developer.yahoo.net/yui/license.txt version: 0.12.2 */ if (typeof YAHOO == "undefined") { var YAHOO = {}; } YAHOO.namespace = function () { var a = arguments, o = null, i, j, d; for (i = 0; i < a.length; ++i) { d = a[i].split("."); o = YAHOO; for (j = (d[0] == "YAHOO") ? 1 : 0; j < d.length; ++j) { o[d[j]] = o[d[j]] || {}; o = o[d[j]]; } } return o; }; YAHOO.augment = function (r, s) { var rp = r.prototype, sp = s.prototype, a = arguments, i, p; if (a[2]) { for (i = 2; i < a.length; ++i) { rp[a[i]] = sp[a[i]]; } } else { for (p in sp) { if (!rp[p]) { rp[p] = sp[p]; } } } }; YAHOO.namespace("util", "widget", "example"); (function () { var Y = YAHOO.util, getStyle, setStyle, id_counter = 0, propertyCache = {}; var ua = navigator.userAgent.toLowerCase(), isOpera = (ua.indexOf('opera') > -1), isSafari = (ua.indexOf('safari') > -1), isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1), isIE = (!isOpera && ua.indexOf('msie') > -1); var patterns = { HYPHEN: /(-[a-z])/i }; var toCamel = function (property) { if (!patterns.HYPHEN.test(property)) { return property; } if (propertyCache[property]) { return propertyCache[property]; } while (patterns.HYPHEN.exec(property)) { property = property.replace(RegExp.$1, RegExp.$1.substr(1).toUpperCase()); } propertyCache[property] = property; return property; }; if (document.defaultView && document.defaultView.getComputedStyle) { getStyle = function (el, property) { var value = null; var computed = document.defaultView.getComputedStyle(el, ''); if (computed) { value = computed[toCamel(property)]; } return el.style[property] || value; }; } else if (document.documentElement.currentStyle && isIE) { getStyle = function (el, property) { switch (toCamel(property)) { case 'opacity': var val = 100; try { val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity; } catch (e) { try { val = el.filters('alpha').opacity; } catch (e) {} } return val / 100; break; default: var value = el.currentStyle ? el.currentStyle[property] : null; return (el.style[property] || value); } }; } else { getStyle = function (el, property) { return el.style[property]; }; } if (isIE) { setStyle = function (el, property, val) { switch (property) { case 'opacity': if (typeof el.style.filter == 'string') { el.style.filter = 'alpha(opacity=' + val * 100 + ')'; if (!el.currentStyle || !el.currentStyle.hasLayout) { el.style.zoom = 1; } } break; default: el.style[property] = val; } }; } else { setStyle = function (el, property, val) { el.style[property] = val; }; } YAHOO.util.Dom = { get: function (el) { if (!el) { return null; } if (typeof el != 'string' && !(el instanceof Array)) { return el; } if (typeof el == 'string') { return document.getElementById(el); } else { var collection = []; for (var i = 0, len = el.length; i < len; ++i) { collection[collection.length] = Y.Dom.get(el[i]); } return collection; } return null; }, getStyle: function (el, property) { property = toCamel(property); var f = function (element) { return getStyle(element, property); }; return Y.Dom.batch(el, f, Y.Dom, true); }, setStyle: function (el, property, val) { property = toCamel(property); var f = function (element) { setStyle(element, property, val); }; Y.Dom.batch(el, f, Y.Dom, true); }, getXY: function (el) { var f = function (el) { if (el.parentNode === null || el.offsetParent === null || this.getStyle(el, 'display') == 'none') { return false; } var parentNode = null; var pos = []; var box; if (el.getBoundingClientRect) { box = el.getBoundingClientRect(); var doc = document; if (!this.inDocument(el) && parent.document != document) { doc = parent.document; if (!this.isAncestor(doc.documentElement, el)) { return false; } } var scrollTop = Math.max(doc.documentElement.scrollTop, doc.body.scrollTop); var scrollLeft = Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft); return [box.left + scrollLeft, box.top + scrollTop]; } else { pos = [el.offsetLeft, el.offsetTop]; parentNode = el.offsetParent; if (parentNode != el) { while (parentNode) { pos[0] += parentNode.offsetLeft; pos[1] += parentNode.offsetTop; parentNode = parentNode.offsetParent; } } if (isSafari && this.getStyle(el, 'position') == 'absolute') { pos[0] -= document.body.offsetLeft; pos[1] -= document.body.offsetTop; } } if (el.parentNode) { parentNode = el.parentNode; } else { parentNode = null; } while (parentNode && parentNode.tagName.toUpperCase() != 'BODY' && parentNode.tagName.toUpperCase() != 'HTML') { if (Y.Dom.getStyle(parentNode, 'display') != 'inline') { pos[0] -= parentNode.scrollLeft; pos[1] -= parentNode.scrollTop; } if (parentNode.parentNode) { parentNode = parentNode.parentNode; } else { parentNode = null; } } return pos; }; return Y.Dom.batch(el, f, Y.Dom, true); }, getX: function (el) { var f = function (el) { return Y.Dom.getXY(el)[0]; }; return Y.Dom.batch(el, f, Y.Dom, true); }, getY: function (el) { var f = function (el) { return Y.Dom.getXY(el)[1]; }; return Y.Dom.batch(el, f, Y.Dom, true); }, setXY: function (el, pos, noRetry) { var f = function (el) { var style_pos = this.getStyle(el, 'position'); if (style_pos == 'static') { this.setStyle(el, 'position', 'relative'); style_pos = 'relative'; } var pageXY = this.getXY(el); if (pageXY === false) { return false; } var delta = [parseInt(this.getStyle(el, 'left'), 10), parseInt(this.getStyle(el, 'top'), 10)]; if (isNaN(delta[0])) { delta[0] = (style_pos == 'relative') ? 0 : el.offsetLeft; } if (isNaN(delta[1])) { delta[1] = (style_pos == 'relative') ? 0 : el.offsetTop; } if (pos[0] !== null) { el.style.left = pos[0] - pageXY[0] + delta[0] + 'px'; } if (pos[1] !== null) { el.style.top = pos[1] - pageXY[1] + delta[1] + 'px'; } if (!noRetry) { var newXY = this.getXY(el); if ((pos[0] !== null && newXY[0] != pos[0]) || (pos[1] !== null && newXY[1] != pos[1])) { this.setXY(el, pos, true); } } }; Y.Dom.batch(el, f, Y.Dom, true); }, setX: function (el, x) { Y.Dom.setXY(el, [x, null]); }, setY: function (el, y) { Y.Dom.setXY(el, [null, y]); }, getRegion: function (el) { var f = function (el) { var region = new Y.Region.getRegion(el); return region; }; return Y.Dom.batch(el, f, Y.Dom, true); }, getClientWidth: function () { return Y.Dom.getViewportWidth(); }, getClientHeight: function () { return Y.Dom.getViewportHeight(); }, getElementsByClassName: function (className, tag, root) { var method = function (el) { return Y.Dom.hasClass(el, className); }; return Y.Dom.getElementsBy(method, tag, root); }, hasClass: function (el, className) { var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)'); var f = function (el) { return re.test(el['className']); }; return Y.Dom.batch(el, f, Y.Dom, true); }, addClass: function (el, className) { var f = function (el) { if (this.hasClass(el, className)) { return; } el['className'] = [el['className'], className].join(' '); }; Y.Dom.batch(el, f, Y.Dom, true); }, removeClass: function (el, className) { var re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', 'g'); var f = function (el) { if (!this.hasClass(el, className)) { return; } var c = el['className']; el['className'] = c.replace(re, ' '); if (this.hasClass(el, className)) { this.removeClass(el, className); } }; Y.Dom.batch(el, f, Y.Dom, true); }, replaceClass: function (el, oldClassName, newClassName) { if (oldClassName === newClassName) { return false; } var re = new RegExp('(?:^|\\s+)' + oldClassName + '(?:\\s+|$)', 'g'); var f = function (el) { if (!this.hasClass(el, oldClassName)) { this.addClass(el, newClassName); return; } el['className'] = el['className'].replace(re, ' ' + newClassName + ' '); if (this.hasClass(el, oldClassName)) { this.replaceClass(el, oldClassName, newClassName); } }; Y.Dom.batch(el, f, Y.Dom, true); }, generateId: function (el, prefix) { prefix = prefix || 'yui-gen'; el = el || {}; var f = function (el) { if (el) { el = Y.Dom.get(el); } else { el = {}; } if (!el.id) { el.id = prefix + id_counter++; } return el.id; }; return Y.Dom.batch(el, f, Y.Dom, true); }, isAncestor: function (haystack, needle) { haystack = Y.Dom.get(haystack); if (!haystack || !needle) { return false; } var f = function (needle) { if (haystack.contains && !isSafari) { return haystack.contains(needle); } else if (haystack.compareDocumentPosition) { return !!(haystack.compareDocumentPosition(needle) & 16); } else { var parent = needle.parentNode; while (parent) { if (parent == haystack) { return true; } else if (!parent.tagName || parent.tagName.toUpperCase() == 'HTML') { return false; } parent = parent.parentNode; } return false; } }; return Y.Dom.batch(needle, f, Y.Dom, true); }, inDocument: function (el) { var f = function (el) { return this.isAncestor(document.documentElement, el); }; return Y.Dom.batch(el, f, Y.Dom, true); }, getElementsBy: function (method, tag, root) { tag = tag || '*'; var nodes = []; if (root) { root = Y.Dom.get(root); if (!root) { return nodes; } } else { root = document; } var elements = root.getElementsByTagName(tag); if (!elements.length && (tag == '*' && root.all)) { elements = root.all; } for (var i = 0, len = elements.length; i < len; ++i) { if (method(elements[i])) { nodes[nodes.length] = elements[i]; } } return nodes; }, batch: function (el, method, o, override) { var id = el; el = Y.Dom.get(el); var scope = (override) ? o : window; if (!el || el.tagName || !el.length) { if (!el) { return false; } return method.call(scope, el, o); } var collection = []; for (var i = 0, len = el.length; i < len; ++i) { if (!el[i]) { id = el[i]; } collection[collection.length] = method.call(scope, el[i], o); } return collection; }, getDocumentHeight: function () { var scrollHeight = (document.compatMode != 'CSS1Compat') ? document.body.scrollHeight : document.documentElement.scrollHeight; var h = Math.max(scrollHeight, Y.Dom.getViewportHeight()); return h; }, getDocumentWidth: function () { var scrollWidth = (document.compatMode != 'CSS1Compat') ? document.body.scrollWidth : document.documentElement.scrollWidth; var w = Math.max(scrollWidth, Y.Dom.getViewportWidth()); return w; }, getViewportHeight: function () { var height = self.innerHeight; var mode = document.compatMode; if ((mode || isIE) && !isOpera) { height = (mode == 'CSS1Compat') ? document.documentElement.clientHeight : document.body.clientHeight; } return height; }, getViewportWidth: function () { var width = self.innerWidth; var mode = document.compatMode; if (mode || isIE) { width = (mode == 'CSS1Compat') ? document.documentElement.clientWidth : document.body.clientWidth; } return width; } }; })(); YAHOO.util.Region = function (t, r, b, l) { this.top = t; this[1] = t; this.right = r; this.bottom = b; this.left = l; this[0] = l; }; YAHOO.util.Region.prototype.contains = function (region) { return (region.left >= this.left && region.right <= this.right && region.top >= this.top && region.bottom <= this.bottom); }; YAHOO.util.Region.prototype.getArea = function () { return ((this.bottom - this.top) * (this.right - this.left)); }; YAHOO.util.Region.prototype.intersect = function (region) { var t = Math.max(this.top, region.top); var r = Math.min(this.right, region.right); var b = Math.min(this.bottom, region.bottom); var l = Math.max(this.left, region.left); if (b >= t && r >= l) { return new YAHOO.util.Region(t, r, b, l); } else { return null; } }; YAHOO.util.Region.prototype.union = function (region) { var t = Math.min(this.top, region.top); var r = Math.max(this.right, region.right); var b = Math.max(this.bottom, region.bottom); var l = Math.min(this.left, region.left); return new YAHOO.util.Region(t, r, b, l); }; YAHOO.util.Region.prototype.toString = function () { return ("Region {" + "top: " + this.top + ", right: " + this.right + ", bottom: " + this.bottom + ", left: " + this.left + "}"); }; YAHOO.util.Region.getRegion = function (el) { var p = YAHOO.util.Dom.getXY(el); var t = p[1]; var r = p[0] + el.offsetWidth; var b = p[1] + el.offsetHeight; var l = p[0]; return new YAHOO.util.Region(t, r, b, l); }; YAHOO.util.Point = function (x, y) { if (x instanceof Array) { y = x[1]; x = x[0]; } this.x = this.right = this.left = this[0] = x; this.y = this.top = this.bottom = this[1] = y; }; YAHOO.util.Point.prototype = new YAHOO.util.Region(); YAHOO.util.CustomEvent = function (type, oScope, silent, signature) { this.type = type; this.scope = oScope || window; this.silent = silent; this.signature = signature || YAHOO.util.CustomEvent.LIST; this.subscribers = []; if (!this.silent) {} var onsubscribeType = "_YUICEOnSubscribe"; if (type !== onsubscribeType) { this.subscribeEvent = new YAHOO.util.CustomEvent(onsubscribeType, this, true); } }; YAHOO.util.CustomEvent.LIST = 0; YAHOO.util.CustomEvent.FLAT = 1; YAHOO.util.CustomEvent.prototype = { subscribe: function (fn, obj, override) { if (this.subscribeEvent) { this.subscribeEvent.fire(fn, obj, override); } this.subscribers.push(new YAHOO.util.Subscriber(fn, obj, override)); }, unsubscribe: function (fn, obj) { var found = false; for (var i = 0, len = this.subscribers.length; i < len; ++i) { var s = this.subscribers[i]; if (s && s.contains(fn, obj)) { this._delete(i); found = true; } } return found; }, fire: function () { var len = this.subscribers.length; if (!len && this.silent) { return true; } var args = [], ret = true, i; for (i = 0; i < arguments.length; ++i) { args.push(arguments[i]); } var argslength = args.length; if (!this.silent) {} for (i = 0; i < len; ++i) { var s = this.subscribers[i]; if (s) { if (!this.silent) {} var scope = s.getScope(this.scope); if (this.signature == YAHOO.util.CustomEvent.FLAT) { var param = null; if (args.length > 0) { param = args[0]; } ret = s.fn.call(scope, param, s.obj); } else { ret = s.fn.call(scope, this.type, args, s.obj); } if (false === ret) { if (!this.silent) {} return false; } } } return true; }, unsubscribeAll: function () { for (var i = 0, len = this.subscribers.length; i < len; ++i) { this._delete(len - 1 - i); } }, _delete: function (index) { var s = this.subscribers[index]; if (s) { delete s.fn; delete s.obj; } this.subscribers.splice(index, 1); }, toString: function () { return "CustomEvent: " + "'" + this.type + "', " + "scope: " + this.scope; } }; YAHOO.util.Subscriber = function (fn, obj, override) { this.fn = fn; this.obj = obj || null; this.override = override; }; YAHOO.util.Subscriber.prototype.getScope = function (defaultScope) { if (this.override) { if (this.override === true) { return this.obj; } else { return this.override; } } return defaultScope; }; YAHOO.util.Subscriber.prototype.contains = function (fn, obj) { if (obj) { return (this.fn == fn && this.obj == obj); } else { return (this.fn == fn); } }; YAHOO.util.Subscriber.prototype.toString = function () { return "Subscriber { obj: " + (this.obj || "") + ", override: " + (this.override || "no") + " }"; }; if (!YAHOO.util.Event) { YAHOO.util.Event = function () { var loadComplete = false; var listeners = []; var unloadListeners = []; var legacyEvents = []; var legacyHandlers = []; var retryCount = 0; var onAvailStack = []; var legacyMap = []; var counter = 0; return { POLL_RETRYS: 200, POLL_INTERVAL: 20, EL: 0, TYPE: 1, FN: 2, WFN: 3, OBJ: 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)), _interval: null, startInterval: function () { if (!this._interval) { var self = this; var callback = function () { self._tryPreloadAttach(); }; this._interval = setInterval(callback, this.POLL_INTERVAL); } }, onAvailable: function (p_id, p_fn, p_obj, p_override) { onAvailStack.push({ id: p_id, fn: p_fn, obj: p_obj, override: p_override, checkReady: false }); retryCount = this.POLL_RETRYS; this.startInterval(); }, onContentReady: function (p_id, p_fn, p_obj, p_override) { onAvailStack.push({ id: p_id, fn: p_fn, obj: p_obj, override: p_override, checkReady: true }); retryCount = this.POLL_RETRYS; this.startInterval(); }, addListener: function (el, sType, fn, obj, override) { 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], sType, fn, obj, override) && ok; } return ok; } else if (typeof el == "string") { var oEl = this.getEl(el); if (oEl) { el = oEl; } else { this.onAvailable(el, function () { YAHOO.util.Event.on(el, sType, fn, obj, override); }); return true; } } if (!el) { return false; } if ("unload" == sType && obj !== this) { unloadListeners[unloadListeners.length] = [el, sType, fn, obj, override]; return true; } var scope = el; if (override) { if (override === true) { scope = obj; } else { scope = override; } } var wrappedFn = function (e) { return fn.call(scope, YAHOO.util.Event.getEvent(e), obj); }; var li = [el, sType, fn, wrappedFn, scope]; var index = listeners.length; listeners[index] = li; if (this.useLegacyEvent(el, sType)) { var legacyIndex = this.getLegacyIndex(el, sType); if (legacyIndex == -1 || el != legacyEvents[legacyIndex][0]) { legacyIndex = legacyEvents.length; legacyMap[el.id + sType] = legacyIndex; legacyEvents[legacyIndex] = [el, sType, el["on" + sType]]; legacyHandlers[legacyIndex] = []; el["on" + sType] = function (e) { YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e), legacyIndex); }; } legacyHandlers[legacyIndex].push(li); } else { try { this._simpleAdd(el, sType, wrappedFn, false); } catch (e) { this.removeListener(el, sType, fn); return false; } } return true; }, fireLegacyEvent: function (e, legacyIndex) { var ok = true; var le = legacyHandlers[legacyIndex]; for (var i = 0, len = le.length; i < len; ++i) { var li = le[i]; if (li && li[this.WFN]) { var scope = li[this.ADJ_SCOPE]; var ret = li[this.WFN].call(scope, e); ok = (ok && ret); } } return ok; }, getLegacyIndex: function (el, sType) { var key = this.generateId(el) + sType; if (typeof legacyMap[key] == "undefined") { return -1; } else { return legacyMap[key]; } }, useLegacyEvent: function (el, sType) { if (!el.addEventListener && !el.attachEvent) { return true; } else if (this.isSafari) { if ("click" == sType || "dblclick" == sType) { return true; } } return false; }, removeListener: function (el, sType, fn) { 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], sType, fn) && ok); } return ok; } if (!fn || !fn.call) { return this.purgeElement(el, false, sType); } if ("unload" == sType) { for (i = 0, len = unloadListeners.length; i < len; i++) { var li = unloadListeners[i]; if (li && li[0] == el && li[1] == sType && li[2] == fn) { unloadListeners.splice(i, 1); return true; } } return false; } var cacheItem = null; var index = arguments[3]; if ("undefined" == typeof index) { index = this._getCacheIndex(el, sType, fn); } if (index >= 0) { cacheItem = listeners[index]; } if (!el || !cacheItem) { return false; } if (this.useLegacyEvent(el, sType)) { var legacyIndex = this.getLegacyIndex(el, sType); var llist = legacyHandlers[legacyIndex]; if (llist) { for (i = 0, len = llist.length; i < len; ++i) { li = llist[i]; if (li && li[this.EL] == el && li[this.TYPE] == sType && li[this.FN] == fn) { llist.splice(i, 1); break; } } } } else { try { this._simpleRemove(el, sType, cacheItem[this.WFN], false); } catch (e) { return false; } } delete listeners[index][this.WFN]; delete listeners[index][this.FN]; listeners.splice(index, 1); return true; }, getTarget: function (ev, resolveTextNode) { var t = ev.target || ev.srcElement; return this.resolveTextNode(t); }, resolveTextNode: function (node) { if (node && 3 == node.nodeType) { return node.parentNode; } else { return node; } }, 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.keyCode || 0; }, _getCacheIndex: function (el, sType, fn) { for (var i = 0, len = listeners.length; i < len; ++i) { var li = listeners[i]; if (li && li[this.FN] == fn && li[this.EL] == el && li[this.TYPE] == sType) { return i; } } return -1; }, generateId: function (el) { var id = el.id; if (!id) { id = "yuievtautoid-" + counter; ++counter; 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) { loadComplete = true; var EU = YAHOO.util.Event; if (this.isIE) { EU._simpleRemove(window, "load", EU._load); } }, _tryPreloadAttach: function () { if (this.locked) { return false; } this.locked = true; var tryAgain = !loadComplete; if (!tryAgain) { tryAgain = (retryCount > 0); } var notAvail = []; for (var i = 0, len = onAvailStack.length; i < len; ++i) { var item = onAvailStack[i]; if (item) { var el = this.getEl(item.id); if (el) { if (!item.checkReady || loadComplete || el.nextSibling || (document && document.body)) { var scope = el; if (item.override) { if (item.override === true) { scope = item.obj; } else { scope = item.override; } } item.fn.call(scope, item.obj); onAvailStack[i] = null; } } else { notAvail.push(item); } } } retryCount = (notAvail.length === 0) ? 0 : retryCount - 1; if (tryAgain) { this.startInterval(); } else { clearInterval(this._interval); this._interval = null; } this.locked = false; return true; }, purgeElement: function (el, recurse, sType) { var elListeners = this.getListeners(el, sType); if (elListeners) { for (var i = 0, len = elListeners.length; i < len; ++i) { var l = elListeners[i]; this.removeListener(el, l.type, l.fn); } } if (recurse && el && el.childNodes) { for (i = 0, len = el.childNodes.length; i < len; ++i) { this.purgeElement(el.childNodes[i], recurse, sType); } } }, getListeners: function (el, sType) { var elListeners = []; if (listeners && listeners.length > 0) { for (var i = 0, len = listeners.length; i < len; ++i) { var l = listeners[i]; if (l && l[this.EL] === el && (!sType || sType === l[this.TYPE])) { elListeners.push({ type: l[this.TYPE], fn: l[this.FN], obj: l[this.OBJ], adjust: l[this.ADJ_SCOPE], index: i }); } } } return (elListeners.length) ? elListeners : null; }, _unload: function (e) { var EU = YAHOO.util.Event, i, j, l, len, index; for (i = 0, len = unloadListeners.length; i < len; ++i) { l = unloadListeners[i]; if (l) { var scope = window; if (l[EU.ADJ_SCOPE]) { if (l[EU.ADJ_SCOPE] === true) { scope = l[EU.OBJ]; } else { scope = l[EU.ADJ_SCOPE]; } } l[EU.FN].call(scope, EU.getEvent(e), l[EU.OBJ]); unloadListeners[i] = null; l = null; scope = null; } } unloadListeners = null; if (listeners && listeners.length > 0) { j = listeners.length; while (j) { index = j - 1; l = listeners[index]; if (l) { EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], index); } j = j - 1; } l = null; EU.clearCache(); } for (i = 0, len = legacyEvents.length; i < len; ++i) { legacyEvents[i][0] = null; legacyEvents[i] = null; } legacyEvents = null; 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 () { if (window.addEventListener) { return function (el, sType, fn, capture) { el.addEventListener(sType, fn, (capture)); }; } else if (window.attachEvent) { return function (el, sType, fn, capture) { el.attachEvent("on" + sType, fn); }; } else { return function () {}; } }(), _simpleRemove: function () { if (window.removeEventListener) { return function (el, sType, fn, capture) { el.removeEventListener(sType, fn, (capture)); }; } else if (window.detachEvent) { return function (el, sType, fn) { el.detachEvent("on" + sType, fn); }; } else { return function () {}; } }() }; }(); (function () { var EU = YAHOO.util.Event; EU.on = EU.addListener; if (document && document.body) { EU._load(); } else { 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 (p_type, p_fn, p_obj, p_override) { this.__yui_events = this.__yui_events || {}; var ce = this.__yui_events[p_type]; if (ce) { ce.subscribe(p_fn, p_obj, p_override); } else { this.__yui_subscribers = this.__yui_subscribers || {}; var subs = this.__yui_subscribers; if (!subs[p_type]) { subs[p_type] = []; } subs[p_type].push({ fn: p_fn, obj: p_obj, override: p_override }); } }, unsubscribe: function (p_type, p_fn, p_obj) { this.__yui_events = this.__yui_events || {}; var ce = this.__yui_events[p_type]; if (ce) { return ce.unsubscribe(p_fn, p_obj); } else { return false; } }, createEvent: function (p_type, p_config) { this.__yui_events = this.__yui_events || {}; var opts = p_config || {}; var events = this.__yui_events; if (events[p_type]) {} else { var scope = opts.scope || this; var silent = opts.silent || null; var ce = new YAHOO.util.CustomEvent(p_type, scope, silent, YAHOO.util.CustomEvent.FLAT); events[p_type] = ce; if (opts.onSubscribeCallback) { ce.subscribeEvent.subscribe(opts.onSubscribeCallback); } this.__yui_subscribers = this.__yui_subscribers || {}; var qs = this.__yui_subscribers[p_type]; if (qs) { for (var i = 0; i < qs.length; ++i) { ce.subscribe(qs[i].fn, qs[i].obj, qs[i].override); } } } return events[p_type]; }, fireEvent: function (p_type, arg1, arg2, etc) { this.__yui_events = this.__yui_events || {}; var ce = this.__yui_events[p_type]; if (ce) { var args = []; for (var i = 1; i < arguments.length; ++i) { args.push(arguments[i]); } return ce.fire.apply(ce, args); } else { return null; } }, hasEvent: function (type) { if (this.__yui_events) { if (this.__yui_events[type]) { return true; } } return false; } }; YAHOO.util.Connect = { _msxml_progid: ['MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'], _http_header: {}, _has_http_headers: false, _use_default_post_header: true, _default_post_header: 'application/x-www-form-urlencoded', _isFormSubmit: false, _isFileUpload: false, _formNode: null, _sFormData: null, _poll: {}, _timeOut: {}, _polling_interval: 50, _transaction_id: 0, setProgId: function (id) { this._msxml_progid.unshift(id); }, setDefaultPostHeader: function (b) { this._use_default_post_header = b; }, setPollingInterval: function (i) { if (typeof i == 'number' && isFinite(i)) { this._polling_interval = i; } }, createXhrObject: function (transactionId) { var obj, http; try { http = new XMLHttpRequest(); obj = { conn: http, tId: transactionId }; } catch (e) { for (var i = 0; i < this._msxml_progid.length; ++i) { try { http = new ActiveXObject(this._msxml_progid[i]); obj = { conn: http, tId: transactionId }; break; } catch (e) {} } } finally { return obj; } }, getConnectionObject: function () { var o; var tId = this._transaction_id; try { o = this.createXhrObject(tId); if (o) { this._transaction_id++; } } catch (e) {} finally { return o; } }, asyncRequest: function (method, uri, callback, postData) { var o = this.getConnectionObject(); if (!o) { return null; } else { if (this._isFormSubmit) { if (this._isFileUpload) { this.uploadFile(o.tId, callback, uri, postData); this.releaseObject(o); return; } if (method == 'GET') { if (this._sFormData.length != 0) { uri += ((uri.indexOf('?') == -1) ? '?' : '&') + this._sFormData; } else { uri += "?" + this._sFormData; } } else if (method == 'POST') { postData = postData ? this._sFormData + "&" + postData : this._sFormData; } } o.conn.open(method, uri, true); if (this._isFormSubmit || (postData && this._use_default_post_header)) { this.initHeader('Content-Type', this._default_post_header); if (this._isFormSubmit) { this.resetFormState(); } } if (this._has_http_headers) { this.setHeader(o); } this.handleReadyState(o, callback); o.conn.send(postData || null); return o; } }, handleReadyState: function (o, callback) { var oConn = this; if (callback && callback.timeout) { this._timeOut[o.tId] = window.setTimeout(function () { oConn.abort(o, callback, true); }, callback.timeout); } this._poll[o.tId] = window.setInterval(function () { if (o.conn && o.conn.readyState == 4) { window.clearInterval(oConn._poll[o.tId]); delete oConn._poll[o.tId]; if (callback && callback.timeout) { delete oConn._timeOut[o.tId]; } oConn.handleTransactionResponse(o, callback); } }, this._polling_interval); }, handleTransactionResponse: function (o, callback, isAbort) { if (!callback) { this.releaseObject(o); return; } var httpStatus, responseObject; try { if (o.conn.status !== undefined && o.conn.status != 0) { httpStatus = o.conn.status; } else { httpStatus = 13030; } } catch (e) { httpStatus = 13030; } if (httpStatus >= 200 && httpStatus < 300) { try { responseObject = this.createResponseObject(o, callback.argument); if (callback.success) { if (!callback.scope) { callback.success(responseObject); } else { callback.success.apply(callback.scope, [responseObject]); } } } catch (e) {} } else { try { switch (httpStatus) { case 12002: case 12029: case 12030: case 12031: case 12152: case 13030: responseObject = this.createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false)); if (callback.failure) { if (!callback.scope) { callback.failure(responseObject); } else { callback.failure.apply(callback.scope, [responseObject]); } } break; default: responseObject = this.createResponseObject(o, callback.argument); if (callback.failure) { if (!callback.scope) { callback.failure(responseObject); } else { callback.failure.apply(callback.scope, [responseObject]); } } } } catch (e) {} } this.releaseObject(o); responseObject = null; }, createResponseObject: function (o, callbackArg) { var obj = {}; var headerObj = {}; try { var headerStr = o.conn.getAllResponseHeaders(); var header = headerStr.split('\n'); for (var i = 0; i < header.length; i++) { var delimitPos = header[i].indexOf(':'); if (delimitPos != -1) { headerObj[header[i].substring(0, delimitPos)] = header[i].substring(delimitPos + 2); } } } catch (e) {} obj.tId = o.tId; obj.status = o.conn.status; obj.statusText = o.conn.statusText; obj.getResponseHeader = headerObj; obj.getAllResponseHeaders = headerStr; obj.responseText = o.conn.responseText; obj.responseXML = o.conn.responseXML; if (typeof callbackArg !== undefined) { obj.argument = callbackArg; } return obj; }, createExceptionObject: function (tId, callbackArg, isAbort) { var COMM_CODE = 0; var COMM_ERROR = 'communication failure'; var ABORT_CODE = -1; var ABORT_ERROR = 'transaction aborted'; var obj = {}; obj.tId = tId; if (isAbort) { obj.status = ABORT_CODE; obj.statusText = ABORT_ERROR; } else { obj.status = COMM_CODE; obj.statusText = COMM_ERROR; } if (callbackArg) { obj.argument = callbackArg; } return obj; }, initHeader: function (label, value) { if (this._http_header[label] === undefined) { this._http_header[label] = value; } else { this._http_header[label] = value + "," + this._http_header[label]; } this._has_http_headers = true; }, setHeader: function (o) { for (var prop in this._http_header) { if (this._http_header.hasOwnProperty(prop)) { o.conn.setRequestHeader(prop, this._http_header[prop]); } } delete this._http_header; this._http_header = {}; this._has_http_headers = false; }, setForm: function (formId, isUpload, secureUri) { this.resetFormState(); var oForm; if (typeof formId == 'string') { oForm = (document.getElementById(formId) || document.forms[formId]); } else if (typeof formId == 'object') { oForm = formId; } else { return; } if (isUpload) { this.createFrame(secureUri ? secureUri : null); this._isFormSubmit = true; this._isFileUpload = true; this._formNode = oForm; return; } var oElement, oName, oValue, oDisabled; var hasSubmit = false; for (var i = 0; i < oForm.elements.length; i++) { oElement = oForm.elements[i]; oDisabled = oForm.elements[i].disabled; oName = oForm.elements[i].name; oValue = oForm.elements[i].value; if (!oDisabled && oName) { switch (oElement.type) { case 'select-one': case 'select-multiple': for (var j = 0; j < oElement.options.length; j++) { if (oElement.options[j].selected) { if (window.ActiveXObject) { this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].attributes['value'].specified ? oElement.options[j].value : oElement.options[j].text) + '&'; } else { this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oElement.options[j].hasAttribute('value') ? oElement.options[j].value : oElement.options[j].text) + '&'; } } } break; case 'radio': case 'checkbox': if (oElement.checked) { this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&'; } break; case 'file': case undefined: case 'reset': case 'button': break; case 'submit': if (hasSubmit == false) { this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&'; hasSubmit = true; } break; default: this._sFormData += encodeURIComponent(oName) + '=' + encodeURIComponent(oValue) + '&'; break; } } } this._isFormSubmit = true; this._sFormData = this._sFormData.substr(0, this._sFormData.length - 1); return this._sFormData; }, resetFormState: function () { this._isFormSubmit = false; this._isFileUpload = false; this._formNode = null; this._sFormData = ""; }, createFrame: function (secureUri) { var frameId = 'yuiIO' + this._transaction_id; if (window.ActiveXObject) { var io = document.createElement('