(function (definition){ if (typeof define == "function") { define(definition); } else if (typeof YUI == "function") { YUI.add("es5-sham", definition); } else { definition(); } } )(function (){ var call = Function.prototype.call; var prototypeOfObject = Object.prototype; var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if (supportsAccessors = owns(prototypeOfObject, "__defineGetter__")) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object){ return object.__proto__ || (object.constructor? object.constructor.prototype: prototypeOfObject); } ; } function doesGetOwnPropertyDescriptorWork(object){ try { object.sentinel = 0; return Object.getOwnPropertyDescriptor(object, "sentinel").value === 0; } catch (exception) { } } if (Object.defineProperty) { var getOwnPropertyDescriptorWorksOnObject = doesGetOwnPropertyDescriptorWork({ } ); var getOwnPropertyDescriptorWorksOnDom = typeof document == "undefined" || doesGetOwnPropertyDescriptorWork(_AN_Call_createelement("createElement", document, "div")); if (!getOwnPropertyDescriptorWorksOnDom || !getOwnPropertyDescriptorWorksOnObject) { var getOwnPropertyDescriptorFallback = Object.getOwnPropertyDescriptor; } } if (!Object.getOwnPropertyDescriptor || getOwnPropertyDescriptorFallback) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property){ if (typeof object != "object" && typeof object != "function" || object === null ) { throw new TypeError(ERR_NON_OBJECT + object) } if (getOwnPropertyDescriptorFallback) { try { return getOwnPropertyDescriptorFallback.call(Object, object, property); } catch (exception) { } } if (!owns(object, property)) { return ; } var descriptor = { enumerable: true , configurable: true } ; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) { descriptor.get = getter; } if (setter) { descriptor.set = setter; } return descriptor; } } descriptor.value = object[property]; descriptor.writable = true ; return descriptor; } ; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object){ return Object.keys(object); } ; } if (!Object.create) { var createEmpty; var supportsProto = Object.prototype.__proto__ === null ; if (supportsProto || typeof document == "undefined") { createEmpty = function (){ return { __proto__: null } ; } ; } else { createEmpty = function (){ var iframe = _AN_Call_createelement("createElement", document, "iframe"); var parent = document.body || document.documentElement; iframe.style.display = "none"; _AN_Call_appendchild("appendChild", parent, iframe); _AN_Write_src("src", iframe, false , "javascript:"); var empty = iframe.contentWindow.Object.prototype; parent.removeChild(iframe); iframe = null ; delete empty.constructor; delete empty.hasOwnProperty; delete empty.propertyIsEnumerable; delete empty.isPrototypeOf; delete empty.toLocaleString; delete empty.toString; delete empty.valueOf; empty.__proto__ = null ; function Empty(){ } Empty.prototype = empty; createEmpty = function (){ return new Empty(); } ; return new Empty(); } ; } Object.create = function create(prototype, properties){ var object; function Type(){ } if (prototype === null ) { object = createEmpty(); } else { if (typeof prototype !== "object" && typeof prototype !== "function") { throw new TypeError("Object prototype may only be an Object or null") } Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) { Object.defineProperties(object, properties); } return object; } ; } function doesDefinePropertyWork(object){ try { Object.defineProperty(object, "sentinel", { } ); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({ } ); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(_AN_Call_createelement("createElement", document, "div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty, definePropertiesFallback = Object.defineProperties; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: "; var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor){ if (typeof object != "object" && typeof object != "function" || object === null ) { throw new TypeError(ERR_NON_OBJECT_TARGET + object) } if (typeof descriptor != "object" && typeof descriptor != "function" || descriptor === null ) { throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor) } if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) { throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED) } if (owns(descriptor, "get")) { defineGetter(object, property, descriptor.get); } if (owns(descriptor, "set")) { defineSetter(object, property, descriptor.set); } } return object; } ; } if (!Object.defineProperties || definePropertiesFallback) { Object.defineProperties = function defineProperties(object, properties){ if (definePropertiesFallback) { try { return definePropertiesFallback.call(Object, object, properties); } catch (exception) { } } for (var property in properties){ if (owns(properties, property) && property != "__proto__") { Object.defineProperty(object, property, properties[property]); } } return object; } ; } if (!Object.seal) { Object.seal = function seal(object){ return object; } ; } if (!Object.freeze) { Object.freeze = function freeze(object){ return object; } ; } try { Object.freeze(function (){ } ); } catch (exception) { Object.freeze = function freeze(freezeObject){ return function freeze(object){ if (typeof object == "function") { return object; } else { return freezeObject(object); } } ; } (Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object){ return object; } ; } if (!Object.isSealed) { Object.isSealed = function isSealed(object){ return false ; } ; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object){ return false ; } ; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object){ if (Object(object) !== object) { throw new TypeError() } var name = ""; while (owns(object, name)){ name += "?"; } object[name] = true ; var returnValue = owns(object, name); delete object[name]; return returnValue; } ; } } );