/* --- MooTools: the javascript framework web build: - http://mootools.net/core/b28139f033891d55fabb70ffafd6813b packager build: - packager build Core/Core Core/Array Core/Class Core/Class.Extras copyrights: - [MooTools](http://mootools.net) licenses: - [MIT License](http://mootools.net/license.txt) ... */ (function () { this.MooTools = { version: '1.4.5', build: 'ab8ea8824dc3b24b6666867a2c4ed58ebb762cf0' }; var o = (this.typeOf = function (i) { if (i == null) { return 'null'; } if (i.$family != null) { return i.$family(); } if (i.nodeName) { if (i.nodeType == 1) { return 'element'; } if (i.nodeType == 3) { return /\S/.test(i.nodeValue) ? 'textnode' : 'whitespace'; } } else { if (typeof i.length == 'number') { if (i.callee) { return 'arguments'; } if ('item' in i) { return 'collection'; } } } return typeof i; }); var j = (this.instanceOf = function (t, i) { if (t == null) { return false; } var s = t.$constructor || t.constructor; while (s) { if (s === i) { return true; } s = s.parent; } if (!t.hasOwnProperty) { return false; } return t instanceof i; }); var f = this.Function; var p = true; for (var k in { toString: 1 }) { p = null; } if (p) { p = [ 'hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor', ]; } f.prototype.overloadSetter = function (s) { var i = this; return function (u, t) { if (u == null) { return this; } if (s || typeof u != 'string') { for (var v in u) { i.call(this, v, u[v]); } if (p) { for (var w = p.length; w--; ) { v = p[w]; if (u.hasOwnProperty(v)) { i.call(this, v, u[v]); } } } } else { i.call(this, u, t); } return this; }; }; f.prototype.overloadGetter = function (s) { var i = this; return function (u) { var v, t; if (typeof u != 'string') { v = u; } else { if (arguments.length > 1) { v = arguments; } else { if (s) { v = [u]; } } } if (v) { t = {}; for (var w = 0; w < v.length; w++) { t[v[w]] = i.call(this, v[w]); } } else { t = i.call(this, u); } return t; }; }; f.prototype.extend = function (i, s) { this[i] = s; }.overloadSetter(); f.prototype.implement = function (i, s) { this.prototype[i] = s; }.overloadSetter(); var n = Array.prototype.slice; f.from = function (i) { return o(i) == 'function' ? i : function () { return i; }; }; Array.from = function (i) { if (i == null) { return []; } return a.isEnumerable(i) && typeof i != 'string' ? (o(i) == 'array' ? i : n.call(i)) : [i]; }; Number.from = function (s) { var i = parseFloat(s); return isFinite(i) ? i : null; }; String.from = function (i) { return i + ''; }; f.implement({ hide: function () { this.$hidden = true; return this; }, protect: function () { this.$protected = true; return this; }, }); var a = (this.Type = function (u, t) { if (u) { var s = u.toLowerCase(); var i = function (v) { return o(v) == s; }; a['is' + u] = i; if (t != null) { t.prototype.$family = function () { return s; }.hide(); } } if (t == null) { return null; } t.extend(this); t.$constructor = a; t.prototype.$constructor = t; return t; }); var e = Object.prototype.toString; a.isEnumerable = function (i) { return i != null && typeof i.length == 'number' && e.call(i) != '[object Function]'; }; var q = {}; var r = function (i) { var s = o(i.prototype); return q[s] || (q[s] = []); }; var b = function (t, x) { if (x && x.$hidden) { return; } var s = r(this); for (var u = 0; u < s.length; u++) { var w = s[u]; if (o(w) == 'type') { b.call(w, t, x); } else { w.call(this, t, x); } } var v = this.prototype[t]; if (v == null || !v.$protected) { this.prototype[t] = x; } if (this[t] == null && o(x) == 'function') { m.call(this, t, function (i) { return x.apply(i, n.call(arguments, 1)); }); } }; var m = function (i, t) { if (t && t.$hidden) { return; } var s = this[i]; if (s == null || !s.$protected) { this[i] = t; } }; a.implement({ implement: b.overloadSetter(), extend: m.overloadSetter(), alias: function (i, s) { b.call(this, i, this.prototype[s]); }.overloadSetter(), mirror: function (i) { r(this).push(i); return this; }, }); new a('Type', a); var d = function (s, x, v) { var u = x != Object, B = x.prototype; if (u) { x = new a(s, x); } for (var y = 0, w = v.length; y < w; y++) { var C = v[y], A = x[C], z = B[C]; if (A) { A.protect(); } if (u && z) { x.implement(C, z.protect()); } } if (u) { var t = B.propertyIsEnumerable(v[0]); x.forEachMethod = function (G) { if (!t) { for (var F = 0, D = v.length; F < D; F++) { G.call(B, B[v[F]], v[F]); } } for (var E in B) { G.call(B, B[E], E); } }; } return d; }; d('String', String, [ 'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search', 'slice', 'split', 'substr', 'substring', 'trim', 'toLowerCase', 'toUpperCase', ])('Array', Array, [ 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice', 'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight', ])('Number', Number, ['toExponential', 'toFixed', 'toLocaleString', 'toPrecision'])( 'Function', f, ['apply', 'call', 'bind'] )('RegExp', RegExp, ['exec', 'test'])('Object', Object, [ 'create', 'defineProperty', 'defineProperties', 'keys', 'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen', ])('Date', Date, ['now']); Object.extend = m.overloadSetter(); Date.extend('now', function () { return +new Date(); }); new a('Boolean', Boolean); Number.prototype.$family = function () { return isFinite(this) ? 'number' : 'null'; }.hide(); Number.extend('random', function (s, i) { return Math.floor(Math.random() * (i - s + 1) + s); }); var g = Object.prototype.hasOwnProperty; Object.extend('forEach', function (i, t, u) { for (var s in i) { if (g.call(i, s)) { t.call(u, i[s], s, i); } } }); Object.each = Object.forEach; Array.implement({ forEach: function (u, v) { for (var t = 0, s = this.length; t < s; t++) { if (t in this) { u.call(v, this[t], t, this); } } }, each: function (i, s) { Array.forEach(this, i, s); return this; }, }); var l = function (i) { switch (o(i)) { case 'array': return i.clone(); case 'object': return Object.clone(i); default: return i; } }; Array.implement('clone', function () { var s = this.length, t = new Array(s); while (s--) { t[s] = l(this[s]); } return t; }); var h = function (s, i, t) { switch (o(t)) { case 'object': if (o(s[i]) == 'object') { Object.merge(s[i], t); } else { s[i] = Object.clone(t); } break; case 'array': s[i] = t.clone(); break; default: s[i] = t; } return s; }; Object.extend({ merge: function (z, u, t) { if (o(u) == 'string') { return h(z, u, t); } for (var y = 1, s = arguments.length; y < s; y++) { var w = arguments[y]; for (var x in w) { h(z, x, w[x]); } } return z; }, clone: function (i) { var t = {}; for (var s in i) { t[s] = l(i[s]); } return t; }, append: function (w) { for (var v = 1, t = arguments.length; v < t; v++) { var s = arguments[v] || {}; for (var u in s) { w[u] = s[u]; } } return w; }, }); ['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function (i) { new a(i); }); var c = Date.now(); String.extend('uniqueID', function () { return (c++).toString(36); }); })(); Array.implement({ every: function (c, d) { for (var b = 0, a = this.length >>> 0; b < a; b++) { if (b in this && !c.call(d, this[b], b, this)) { return false; } } return true; }, filter: function (d, f) { var c = []; for (var e, b = 0, a = this.length >>> 0; b < a; b++) { if (b in this) { e = this[b]; if (d.call(f, e, b, this)) { c.push(e); } } } return c; }, indexOf: function (c, d) { var b = this.length >>> 0; for (var a = d < 0 ? Math.max(0, b + d) : d || 0; a < b; a++) { if (this[a] === c) { return a; } } return -1; }, map: function (c, e) { var d = this.length >>> 0, b = Array(d); for (var a = 0; a < d; a++) { if (a in this) { b[a] = c.call(e, this[a], a, this); } } return b; }, some: function (c, d) { for (var b = 0, a = this.length >>> 0; b < a; b++) { if (b in this && c.call(d, this[b], b, this)) { return true; } } return false; }, clean: function () { return this.filter(function (a) { return a != null; }); }, invoke: function (a) { var b = Array.slice(arguments, 1); return this.map(function (c) { return c[a].apply(c, b); }); }, associate: function (c) { var d = {}, b = Math.min(this.length, c.length); for (var a = 0; a < b; a++) { d[c[a]] = this[a]; } return d; }, link: function (c) { var a = {}; for (var e = 0, b = this.length; e < b; e++) { for (var d in c) { if (c[d](this[e])) { a[d] = this[e]; delete c[d]; break; } } } return a; }, contains: function (a, b) { return this.indexOf(a, b) != -1; }, append: function (a) { this.push.apply(this, a); return this; }, getLast: function () { return this.length ? this[this.length - 1] : null; }, getRandom: function () { return this.length ? this[Number.random(0, this.length - 1)] : null; }, include: function (a) { if (!this.contains(a)) { this.push(a); } return this; }, combine: function (c) { for (var b = 0, a = c.length; b < a; b++) { this.include(c[b]); } return this; }, erase: function (b) { for (var a = this.length; a--; ) { if (this[a] === b) { this.splice(a, 1); } } return this; }, empty: function () { this.length = 0; return this; }, flatten: function () { var d = []; for (var b = 0, a = this.length; b < a; b++) { var c = typeOf(this[b]); if (c == 'null') { continue; } d = d.concat( c == 'array' || c == 'collection' || c == 'arguments' || instanceOf(this[b], Array) ? Array.flatten(this[b]) : this[b] ); } return d; }, pick: function () { for (var b = 0, a = this.length; b < a; b++) { if (this[b] != null) { return this[b]; } } return null; }, rgbToHex: function (d) { if (this.length < 3) { return null; } if (this.length == 4 && this[3] == 0 && !d) { return 'transparent'; } var b = []; for (var a = 0; a < 3; a++) { var c = (this[a] - 0).toString(16); b.push(c.length == 1 ? '0' + c : c); } return d ? b : '#' + b.join(''); }, }); String.implement({ test: function (a, b) { return (typeOf(a) == 'regexp' ? a : new RegExp('' + a, b)).test(this); }, contains: function (a, b) { return b ? (b + this + b).indexOf(b + a + b) > -1 : String(this).indexOf(a) > -1; }, trim: function () { return String(this).replace(/^\s+|\s+$/g, ''); }, clean: function () { return String(this).replace(/\s+/g, ' ').trim(); }, camelCase: function () { return String(this).replace(/-\D/g, function (a) { return a.charAt(1).toUpperCase(); }); }, hyphenate: function () { return String(this).replace(/[A-Z]/g, function (a) { return '-' + a.charAt(0).toLowerCase(); }); }, capitalize: function () { return String(this).replace(/\b[a-z]/g, function (a) { return a.toUpperCase(); }); }, escapeRegExp: function () { return String(this).replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1'); }, rgbToHex: function (b) { var a = String(this).match(/\d{1,3}/g); return a ? a.rgbToHex(b) : null; }, substitute: function (a, b) { return String(this).replace(b || /\\?\{([^{}]+)\}/g, function (d, c) { if (d.charAt(0) == '\\') { return d.slice(1); } return a[c] != null ? a[c] : ''; }); }, }); Function.implement({ bind: function (e) { var a = this, b = arguments.length > 1 ? Array.slice(arguments, 1) : null, d = function () {}; var c = function () { var g = e, h = arguments.length; if (this instanceof c) { d.prototype = a.prototype; g = new d(); } var f = !b && !h ? a.call(g) : a.apply(g, b && h ? b.concat(Array.slice(arguments)) : b || arguments); return g == e ? f : g; }; return c; }, pass: function (b, c) { var a = this; if (b != null) { b = Array.from(b); } return function () { return a.apply(c, b || arguments); }; }, delay: function (b, c, a) { return setTimeout(this.pass(a == null ? [] : a, c), b); }, }); Number.alias('each', 'times'); (function (b) { var a = {}; b.each(function (c) { if (!Number[c]) { a[c] = function () { return Math[c].apply(null, [this].concat(Array.from(arguments))); }; } }); Number.implement(a); })([ 'abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan', ]); (function () { var a = (this.Class = new Type('Class', function (h) { if (instanceOf(h, Function)) { h = { initialize: h }; } var g = function () { e(this); if (g.$prototyping) { return this; } this.$caller = null; var i = this.initialize ? this.initialize.apply(this, arguments) : this; this.$caller = this.caller = null; return i; } .extend(this) .implement(h); g.$constructor = a; g.prototype.$constructor = g; g.prototype.parent = c; return g; })); var c = function () { if (!this.$caller) { throw new Error('The method "parent" cannot be called.'); } var g = this.$caller.$name, h = this.$caller.$owner.parent, i = h ? h.prototype[g] : null; if (!i) { throw new Error('The method "' + g + '" has no parent.'); } return i.apply(this, arguments); }; var e = function (g) { for (var h in g) { var j = g[h]; switch (typeOf(j)) { case 'object': var i = function () {}; i.prototype = j; g[h] = e(new i()); break; case 'array': g[h] = j.clone(); break; } } return g; }; var b = function (g, h, j) { if (j.$origin) { j = j.$origin; } var i = function () { if (j.$protected && this.$caller == null) { throw new Error('The method "' + h + '" cannot be called.'); } var l = this.caller, m = this.$caller; this.caller = m; this.$caller = i; var k = j.apply(this, arguments); this.$caller = m; this.caller = l; return k; }.extend({ $owner: g, $origin: j, $name: h }); return i; }; var f = function (h, i, g) { if (a.Mutators.hasOwnProperty(h)) { i = a.Mutators[h].call(this, i); if (i == null) { return this; } } if (typeOf(i) == 'function') { if (i.$hidden) { return this; } this.prototype[h] = g ? i : b(this, h, i); } else { Object.merge(this.prototype, h, i); } return this; }; var d = function (g) { g.$prototyping = true; var h = new g(); delete g.$prototyping; return h; }; a.implement('implement', f.overloadSetter()); a.Mutators = { Extends: function (g) { this.parent = g; this.prototype = d(g); }, Implements: function (g) { Array.from(g).each(function (j) { var h = new j(); for (var i in h) { f.call(this, i, h[i], true); } }, this); }, }; })();