/*
Copyright (c) 2007, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.2.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 = 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 && 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 obj && (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) {
        if (!superc || !subc) {
            throw new Error("YAHOO.lang.extend failed, please check that " + "all dependencies are included.");
        }
        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) {
        if (!s || !r) {
            throw new Error("YAHOO.lang.augment failed, please check that " + "all dependencies are included.");
        }
        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.2",
    build: "204"
});