/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.2.0
*/

if (typeof YAHOO == "undefined") { var YAHOO = {}; }
YAHOO.namespace = function()
{
    var a = arguments, o = null, i, j, d; for (i = 0; i < a.length; i = i + 1) { d = a[i].split("."); o = YAHOO; for (j = (d[0] == "YAHOO") ? 1 : 0; j < d.length; j = j + 1) { o[d[j]] = o[d[j]] || {}; o = o[d[j]]; } }
    return o;
}; YAHOO.log = function(msg, cat, src) { var l = YAHOO.widget.Logger; if (l && l.log) { return l.log(msg, cat, src); } else { return false; } }; YAHOO.init = function()
{
    this.namespace("util", "widget", "example"); if (typeof YAHOO_config != "undefined")
    {
        var l = YAHOO_config.listener, ls = YAHOO.env.listeners, unique = true, i; if (l)
        {
            for (i = 0; i < ls.length; i = i + 1) { if (ls[i] == l) { unique = false; break; } }
            if (unique) { ls.push(l); } 
        } 
    } 
}; YAHOO.register = function(name, mainClass, data)
{
    var mods = YAHOO.env.modules; if (!mods[name]) { mods[name] = { versions: [], builds: [] }; }
    var m = mods[name], v = data.version, b = data.build, ls = YAHOO.env.listeners; m.name = name; m.version = v; m.build = b; m.versions.push(v); m.builds.push(b); m.mainClass = mainClass; for (var i = 0; i < ls.length; i = i + 1) { ls[i](m); }
    if (mainClass) { mainClass.VERSION = v; mainClass.BUILD = b; } else { YAHOO.log("mainClass is undefined for module " + name, "warn"); } 
}; YAHOO.env = YAHOO.env || { modules: [], listeners: [], getVersion: function(name) { return YAHOO.env.modules[name] || null; } }; YAHOO.lang = { isArray: function(obj) { if (obj.constructor && obj.constructor.toString().indexOf('Array') > -1) { return true; } else { return YAHOO.lang.isObject(obj) && obj.constructor == Array; } }, isBoolean: function(obj) { return typeof obj == 'boolean'; }, isFunction: function(obj) { return typeof obj == 'function'; }, isNull: function(obj) { return obj === null; }, isNumber: function(obj) { return typeof obj == 'number' && isFinite(obj); }, isObject: function(obj) { return typeof obj == 'object' || YAHOO.lang.isFunction(obj); }, isString: function(obj) { return typeof obj == 'string'; }, isUndefined: function(obj) { return typeof obj == 'undefined'; }, hasOwnProperty: function(obj, prop)
{
    if (Object.prototype.hasOwnProperty) { return obj.hasOwnProperty(prop); }
    return !YAHOO.lang.isUndefined(obj[prop]) && obj.constructor.prototype[prop] !== obj[prop];
}, extend: function(subc, superc, overrides)
{
    var F = function() { }; F.prototype = superc.prototype; subc.prototype = new F(); subc.prototype.constructor = subc; subc.superclass = superc.prototype; if (superc.prototype.constructor == Object.prototype.constructor) { superc.prototype.constructor = superc; }
    if (overrides) { for (var i in overrides) { subc.prototype[i] = overrides[i]; } } 
}, 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 = i + 1) { rp[a[i]] = sp[a[i]]; } } else { for (p in sp) { if (!rp[p]) { rp[p] = sp[p]; } } } } 
}; YAHOO.init(); YAHOO.util.Lang = YAHOO.lang; YAHOO.augment = YAHOO.lang.augment; YAHOO.extend = YAHOO.lang.extend; YAHOO.register("yahoo", YAHOO, { version: "2.2.0", build: "127" });
(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.register("dom", YAHOO.util.Dom, { version: "2.2.0", build: "127" });
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; var lastError = null; return { POLL_RETRYS: 200, POLL_INTERVAL: 20, EL: 0, TYPE: 1, FN: 2, WFN: 3, OBJ: 3, ADJ_SCOPE: 4, isSafari: (/KHTML/gi).test(navigator.userAgent), webkit: function()
        {
            var v = navigator.userAgent.match(/AppleWebKit\/([^ ]*)/); if (v && v[1]) { return v[1]; }
            return null;
        } (), isIE: (!this.webkit && !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 (ex) { this.lastError = ex; this.removeListener(el, sType, fn); return false; } }
            return true;
        }, fireLegacyEvent: function(e, legacyIndex)
        {
            var ok = true, le, lh, li, scope, ret; lh = legacyHandlers[legacyIndex]; for (var i = 0, len = lh.length; i < len; ++i) { li = lh[i]; if (li && li[this.WFN]) { scope = li[this.ADJ_SCOPE]; ret = li[this.WFN].call(scope, e); ok = (ok && ret); } }
            le = legacyEvents[legacyIndex]; if (le && le[2]) { le[2](e); }
            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 (this.webkit && ("click" == sType || "dblclick" == sType)) { var v = parseInt(this.webkit, 10); if (!isNaN(v) && v < 418) { 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 (ex) { this.lastError = ex; 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 (ex) { this.lastError = ex; 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 results = [], searchLists; if (!sType) { searchLists = [listeners, unloadListeners]; } else if (sType == "unload") { searchLists = [unloadListeners]; } else { searchLists = [listeners]; }
            for (var j = 0; j < searchLists.length; ++j) { var searchList = searchLists[j]; if (searchList && searchList.length > 0) { for (var i = 0, len = searchList.length; i < len; ++i) { var l = searchList[i]; if (l && l[this.EL] === el && (!sType || sType === l[this.TYPE])) { results.push({ type: l[this.TYPE], fn: l[this.FN], obj: l[this.OBJ], adjust: l[this.ADJ_SCOPE], index: i }); } } } }
            return (results.length) ? results : 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]; } }, regCE: function() { }, _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.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)
{
    if (!fn) { return this.unsubscribeAll(); }
    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); }
    return 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") + " }"; }; 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; } }, unsubscribeAll: function(p_type) { return this.unsubscribe(p_type); }, 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.KeyListener = function(attachTo, keyData, handler, event)
{
    if (!attachTo) { } else if (!keyData) { } else if (!handler) { }
    if (!event) { event = YAHOO.util.KeyListener.KEYDOWN; }
    var keyEvent = new YAHOO.util.CustomEvent("keyPressed"); this.enabledEvent = new YAHOO.util.CustomEvent("enabled"); this.disabledEvent = new YAHOO.util.CustomEvent("disabled"); if (typeof attachTo == 'string') { attachTo = document.getElementById(attachTo); }
    if (typeof handler == 'function') { keyEvent.subscribe(handler); } else { keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope); }
    function handleKeyPress(e, obj)
    {
        if (!keyData.shift) { keyData.shift = false; }
        if (!keyData.alt) { keyData.alt = false; }
        if (!keyData.ctrl) { keyData.ctrl = false; }
        if (e.shiftKey == keyData.shift && e.altKey == keyData.alt && e.ctrlKey == keyData.ctrl) { var dataItem; var keyPressed; if (keyData.keys instanceof Array) { for (var i = 0; i < keyData.keys.length; i++) { dataItem = keyData.keys[i]; if (dataItem == e.charCode) { keyEvent.fire(e.charCode, e); break; } else if (dataItem == e.keyCode) { keyEvent.fire(e.keyCode, e); break; } } } else { dataItem = keyData.keys; if (dataItem == e.charCode) { keyEvent.fire(e.charCode, e); } else if (dataItem == e.keyCode) { keyEvent.fire(e.keyCode, e); } } } 
    }
    this.enable = function()
    {
        if (!this.enabled) { YAHOO.util.Event.addListener(attachTo, event, handleKeyPress); this.enabledEvent.fire(keyData); }
        this.enabled = true;
    }; this.disable = function()
    {
        if (this.enabled) { YAHOO.util.Event.removeListener(attachTo, event, handleKeyPress); this.disabledEvent.fire(keyData); }
        this.enabled = false;
    }; this.toString = function()
    {
        return "KeyListener [" + keyData.keys + "] " + attachTo.tagName +
(attachTo.id ? "[" + attachTo.id + "]" : "");
    };
}; YAHOO.util.KeyListener.KEYDOWN = "keydown"; YAHOO.util.KeyListener.KEYUP = "keyup"; YAHOO.register("event", YAHOO.util.Event, { version: "2.2.0", build: "127" });

/*
Copyright (c) 2007, Celebros Ltd. All rights reserved.
*/

var bLoaded = false;
var initialized = false;

// Called from autocomplete-full.js
function JSLoaded()
{
    bLoaded = true;
}

function LoadACJS(scriptServer)
{
    if (!bLoaded)
    {
        script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = sProtocol + "//" + scriptServer + "/AutoComplete/Scripts/autocompleteV2.js";
        document.getElementsByTagName('head')[0].appendChild(script);
    }
}

function isArray(o)
{

    if (o)
    {
        var l = YAHOO.lang;
        return l.isNumber(o.length) && l.isFunction(o.splice) &&
                  !l.hasOwnProperty(o.length);
    }
    return false;
}

/*function isArray(obj) {
//returns true is it is an array
if (obj.constructor.toString().indexOf("Array") == -1)
return false;
else
return true;
} */

function InsertElementAfterEnd(node, parsedNode)
{
    if (node.nextSibling)
        node.parentNode.insertBefore(parsedNode, node.nextSibling);
    else
        node.parentNode.appendChild(parsedNode);
}


var sSeperator;

function IsSpecialSuggestion(str)
{
    if (str.length > 1)
    {
        if (str.charAt(0) == sSeperator && str.charAt(str.length - 1) == sSeperator)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

// Determine page's protocol
if (window.location.protocol == "http:")
{
    sProtocol = "http:";
}
else if (window.location.protocol == "https:")
{
    sProtocol = "https:";
}

var sDisableParemeter = "autocomplete=no";
var sProtocol;
var sServiceLocation;
var sSiteKey;
var sSearchBox;
var oSearchBox;
var oResultFunction;


function CelebrosAutoComplete(siteKey, searchBox, resultFunction, frontEndServer, scriptServer, containerExpandDelegate, containerCollapseDelegate)
{
    if (window.location.href.indexOf(sDisableParemeter) != -1)
    {
        return;
    }

    // AutoCompleteWebService suggestions page
    sServiceLocation = sProtocol + "//" + frontEndServer + "/AutoCompleteWebServiceV2/GetSuggestions.aspx";

    sSiteKey = siteKey;
    sSearchBox = searchBox;
    oResultFunction = resultFunction;

    oSearchBox = document.getElementById(sSearchBox)
    YAHOO.util.Event.addListener(oSearchBox, "focus", function() { LoadACJS(scriptServer); });


    initAC(containerExpandDelegate, containerCollapseDelegate);
}

function ItemSelected(type, args, me)
{
    oAc = args[0];
    oItem = args[1];
    oItemData = args[2];

    var iTimeout = 200;
    var sSelectedQuery = "";
    var sEnteredQuery = "";
    var sSelectedURL = "";
    var aSuggestions = "";
    var bIsSelected = false;

    if (oAc._typedQuery != undefined)
    {
        sEnteredQuery = oAc._typedQuery;
    }
    aSuggestions = new Array();

    if (oItemData == null)
    {
        iTimeout = 0;
        // use what is in the text box
        sSelectedQuery = document.getElementById(sSearchBox).value;
        // Make sure to remove the suspicous tags
        sSelectedQuery = sSelectedQuery.replace(/</g, "")
        sSelectedQuery = sSelectedQuery.replace(/>/g, "")
        sSelectedQuery = sSelectedQuery.replace(/'/g, "")
        //sSelectedQuery = sEnteredQuery;
    }
    else
    {
        bIsSelected = true;
        sSelectedQuery = oItemData[0];
        sSelectedURL = oItemData[1];
        for (var i = 0; i < oAc._aListItems.length; i++)
        {
            //
            if (oAc._aListItems[i]._oResultData)
            {
                //Title to display for each suggestion 
                if (!IsSpecialSuggestion(oAc._aListItems[i]._oResultData[0], "#"))
                {
                    if (oAc._aListItems[i]._oResultData[5] != "")
                    {
                        //Push SKU
                        aSuggestions.push(oAc._aListItems[i]._oResultData[5]);
                    }
                    else
                    {
                        //Push Query
                        aSuggestions.push(oAc._aListItems[i]._oResultData[0]);
                    }
                }
            }
        }
    }
    if (oResultFunction)
    {
        var ReturnArray = new Array();
        ReturnArray["SelectedQuery"] = sSelectedQuery;
        ReturnArray["EnteredQuery"] = sEnteredQuery;
        ReturnArray["SelectedURL"] = sSelectedURL;
        ReturnArray["Suggestions"] = aSuggestions;
        ReturnArray["IsAutoComplete"] = (oItemData != null);
        document.getElementById(sSearchBox).value = sSelectedQuery;
        oResultFunction(ReturnArray);
    }

}

function initAC(containerExpandDelegate, containerCollapseDelegate)
{
    if (!bLoaded)
    {
        window.setTimeout("initAC(" + containerExpandDelegate + ", " + containerCollapseDelegate + ")", 200);
        return;
    }

    if (initialized)
    {
        return;
    }
    initialized = true;


    var oConfigs = new Array();
    sSeperator = "#";
    oConfigs["SeperatorFunction"] = IsSpecialSuggestion;

    var divSuggestions = document.createElement("div");
    divSuggestions.setAttribute("id", "divSuggestions");
    InsertElementAfterEnd(document.getElementById(sSearchBox), divSuggestions);

    //Suggestions,DisplayColumn,Url,ImageUrl,Position,Length,SKU
    var mySchema = ["sug", "dc", "u", "iu", "p", "l", "s"];
    var myDataSource = new YAHOO.widget.DS_XHR(sServiceLocation, mySchema);
    myDataSource.responseType = YAHOO.widget.DS_XHR.TYPE_XML;
    myDataSource.maxCacheEntries = 0;
    myDataSource.scriptQueryParam = "strPrefix";
    myDataSource.scriptQueryAppend = "strSiteKey=" + sSiteKey;

    var myAutoComp = new YAHOO.widget.AutoComplete(sSearchBox, divSuggestions, myDataSource, oConfigs);
    myAutoComp.minQueryLength = 1;
    myAutoComp.queryDelay = 0.1;
    myAutoComp.autoHighlight = false;
    myAutoComp.maxResultsDisplayed = 100;
    myAutoComp.typeAhead = true;
    myAutoComp.useShadow = false;
    myAutoComp.forceSelection = false;
    myAutoComp.itemSelectEvent.subscribe(this.ItemSelected, this);

    // Subscribe to the expand and collapse events. [Yaniv 19.08.08]
    if (typeof (containerExpandDelegate) != "undefined")
    {
        myAutoComp.containerExpandEvent.subscribe(containerExpandDelegate);
    }
    if (typeof (containerCollapseDelegate) != "undefined")
    {
        myAutoComp.containerCollapseEvent.subscribe(containerCollapseDelegate);
    }

    // This function returns markup that bolds the original query,
    // and also displays to additional pieces of supplemental data.
    myAutoComp.formatResult = function(oItem, aResultItem, sQuery)
    {
        var original = aResultItem[0];
        var pos = aResultItem[3];
        var len = aResultItem[4];
        // TODO: Change to IsSpecialSuggestion
        if (original.charAt(0) == "#" && original.charAt(original.length - 1) == "#")
        {
            oItem.className = "ACHeaderItem";
            return "<b>" + original.substr(1, original.length - 2) + "</b>";
        }
        if (pos == "" || len == "")
        {
            fin = original;
        }
        else
        {
            var f = new Array();
            var nPosition = 0;
            var nLength = 0;
            if (isArray(pos) == false)
            {
                nPosition = parseInt(pos);
                nLength = parseInt(len);
                f.push(original.substr(0, nPosition));
                f.push("<b><u>");
                f.push(original.substr(nPosition, nLength));
                f.push("</u></b>");
                f.push(original.substr(nPosition + nLength, original.length));
            }
            else if (pos.length == len.length)
            {
                var lastPosition = 0;
                for (var i = 0; i < pos.length; i++)
                {
                    nPosition = parseInt(pos[i]);
                    nLength = parseInt(len[i]);
                    f.push(original.substr(lastPosition, nPosition - lastPosition));
                    f.push("<b><u>");
                    f.push(original.substr(nPosition, nLength));
                    f.push("</u></b>");
                    lastPosition = nPosition + nLength;
                }
                f.push(original.substr(lastPosition, original.length));
            }
            else
            {
                f.push(original);
            }
            var fin = f.join("");
        }

        if (aResultItem[1] == "")
        {
            oItem.className = "ACQueryItem";
            return fin;
        }
        else
        {
            var url = aResultItem[1];
            var imageUrl = aResultItem[2];
            oItem.className = "ACProductItem";

            var aMarkup =
            ["<table cellpadding=0 cellspacing=0 width=\"100%\" class=\"ACproduct\" style=\"background-color:Transparent;\"><tr><td><table cellpadding=0 cellspacing=0><tr><td class=\"ACProductImageCell\">",
             "<img class=\"ACProductImage\" align=\"center\" src=\"", imageUrl, "\" />",
             "</td><td  align=\"left\" class=\"ACproductText\"><u>", fin, "</u></td></tr></table></td></tr>",
             "<tr><td><div class=\"Seperator\">&nbsp<div/></td></tr>", "</table>"];
            return (aMarkup.join(""));


        }
    };

    myAutoComp.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults)
    {
        var pos = YAHOO.util.Dom.getXY(oTextbox);
        pos[1] += YAHOO.util.Dom.get(oTextbox).offsetHeight;
        YAHOO.util.Dom.setXY(oContainer, pos);
        return true;
    };
}
