﻿//MooTools, <http://mootools.net>, My Object Oriented (JavaScript) Tools. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

var MooTools = { version: "1.2.4", build: "0d9113241a90b9cd5643b926795852a2026710d4" }; var Native = function(k)
{
    k = k || {}; var a = k.name; var i = k.legacy; var b = k.protect;
    var c = k.implement; var h = k.generics; var f = k.initialize; var g = k.afterImplement || function() { }; var d = f || i; h = h !== false; d.constructor = Native; d.$family = { name: "native" };
    if (i && f) { d.prototype = i.prototype; } d.prototype.constructor = d; if (a) { var e = a.toLowerCase(); d.prototype.$family = { name: e }; Native.typize(d, e); } var j = function(n, l, o, m)
    {
        if (!b || m || !n.prototype[l])
        {
            n.prototype[l] = o;
        } if (h) { Native.genericize(n, l, b); } g.call(n, l, o); return n;
    }; d.alias = function(n, l, p)
    {
        if (typeof n == "string")
        {
            var o = this.prototype[n]; if ((n = o))
            {
                return j(this, l, n, p);
            }
        } for (var m in n) { this.alias(m, n[m], l); } return this;
    }; d.implement = function(m, l, o)
    {
        if (typeof m == "string") { return j(this, m, l, o); } for (var n in m)
        {
            j(this, n, m[n], l);
        } return this;
    }; if (c) { d.implement(c); } return d;
}; Native.genericize = function(b, c, a)
{
    if ((!a || !b[c]) && typeof b.prototype[c] == "function")
    {
        b[c] = function()
        {
            var d = Array.prototype.slice.call(arguments);
            return b.prototype[c].apply(d.shift(), d);
        };
    }
}; Native.implement = function(d, c) { for (var b = 0, a = d.length; b < a; b++) { d[b].implement(c); } }; Native.typize = function(a, b)
{
    if (!a.type)
    {
        a.type = function(c)
        {
            return ($type(c) === b);
        };
    }
}; (function()
{
    var a = { Array: Array, Date: Date, Function: Function, Number: Number, RegExp: RegExp, String: String }; for (var h in a)
    {
        new Native({ name: h, initialize: a[h], protect: true });
    } var d = { "boolean": Boolean, "native": Native, object: Object }; for (var c in d) { Native.typize(d[c], c); } var f = { Array: ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"], String: ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"] };
    for (var e in f) { for (var b = f[e].length; b--; ) { Native.genericize(a[e], f[e][b], true); } }
})(); var Hash = new Native({ name: "Hash", initialize: function(a)
{
    if ($type(a) == "hash")
    {
        a = $unlink(a.getClean());
    } for (var b in a) { this[b] = a[b]; } return this;
}
}); Hash.implement({ forEach: function(b, c)
{
    for (var a in this)
    {
        if (this.hasOwnProperty(a))
        {
            b.call(c, this[a], a, this);
        }
    }
}, getClean: function() { var b = {}; for (var a in this) { if (this.hasOwnProperty(a)) { b[a] = this[a]; } } return b; }, getLength: function()
{
    var b = 0; for (var a in this)
    {
        if (this.hasOwnProperty(a))
        {
            b++;
        }
    } return b;
}
}); Hash.alias("forEach", "each"); Array.implement({ forEach: function(c, d) { for (var b = 0, a = this.length; b < a; b++) { c.call(d, this[b], b, this); } } }); Array.alias("forEach", "each");
function $A(b) { if (b.item) { var a = b.length, c = new Array(a); while (a--) { c[a] = b[a]; } return c; } return Array.prototype.slice.call(b); } function $arguments(a)
{
    return function()
    {
        return arguments[a];
    };
} function $chk(a) { return !!(a || a === 0); } function $clear(a) { clearTimeout(a); clearInterval(a); return null; } function $defined(a) { return (a != undefined); } function $each(c, b, d)
{
    var a = $type(c);
    ((a == "arguments" || a == "collection" || a == "array") ? Array : Hash).each(c, b, d);
} function $empty() { } function $extend(c, a)
{
    for (var b in (a || {})) { c[b] = a[b]; } return c;
} function $H(a) { return new Hash(a); } function $lambda(a) { return ($type(a) == "function") ? a : function() { return a; }; } function $merge()
{
    var a = Array.slice(arguments);
    a.unshift({}); return $mixin.apply(null, a);
} function $mixin(e)
{
    for (var d = 1, a = arguments.length; d < a; d++)
    {
        var b = arguments[d]; if ($type(b) != "object")
        {
            continue;
        } for (var c in b) { var g = b[c], f = e[c]; e[c] = (f && $type(g) == "object" && $type(f) == "object") ? $mixin(f, g) : $unlink(g); }
    } return e;
} function $pick()
{
    for (var b = 0, a = arguments.length;
b < a; b++) { if (arguments[b] != undefined) { return arguments[b]; } } return null;
} function $random(b, a) { return Math.floor(Math.random() * (a - b + 1) + b); } function $splat(b)
{
    var a = $type(b);
    return (a) ? ((a != "array" && a != "arguments") ? [b] : b) : [];
} var $time = Date.now || function() { return +new Date; }; function $try()
{
    for (var b = 0, a = arguments.length; b < a;
b++) { try { return arguments[b](); } catch (c) { } } return null;
} function $type(a)
{
    if (a == undefined) { return false; } if (a.$family)
    {
        return (a.$family.name == "number" && !isFinite(a)) ? false : a.$family.name;
    } if (a.nodeName) { switch (a.nodeType) { case 1: return "element"; case 3: return (/\S/).test(a.nodeValue) ? "textnode" : "whitespace"; } } else
    {
        if (typeof a.length == "number")
        {
            if (a.callee)
            {
                return "arguments";
            } else { if (a.item) { return "collection"; } }
        }
    } return typeof a;
} function $unlink(c)
{
    var b; switch ($type(c))
    {
        case "object": b = {}; for (var e in c)
            {
                b[e] = $unlink(c[e]);
            } break; case "hash": b = new Hash(c); break; case "array": b = []; for (var d = 0, a = c.length; d < a; d++) { b[d] = $unlink(c[d]); } break; default: return c;
    } return b;
} Hash.implement({ has: Object.prototype.hasOwnProperty, keyOf: function(b)
{
    for (var a in this)
    {
        if (this.hasOwnProperty(a) && this[a] === b)
        {
            return a;
        }
    } return null;
}, hasValue: function(a) { return (Hash.keyOf(this, a) !== null); }, extend: function(a)
{
    Hash.each(a || {}, function(c, b) { Hash.set(this, b, c); }, this); return this;
}, combine: function(a) { Hash.each(a || {}, function(c, b) { Hash.include(this, b, c); }, this); return this; }, erase: function(a)
{
    if (this.hasOwnProperty(a))
    {
        delete this[a];
    } return this;
}, get: function(a) { return (this.hasOwnProperty(a)) ? this[a] : null; }, set: function(a, b)
{
    if (!this[a] || this.hasOwnProperty(a)) { this[a] = b; } return this;
}, empty: function() { Hash.each(this, function(b, a) { delete this[a]; }, this); return this; }, include: function(a, b)
{
    if (this[a] == undefined) { this[a] = b; } return this;
}, map: function(b, c) { var a = new Hash; Hash.each(this, function(e, d) { a.set(d, b.call(c, e, d, this)); }, this); return a; }, filter: function(b, c)
{
    var a = new Hash; Hash.each(this, function(e, d)
    {
        if (b.call(c, e, d, this))
        {
            a.set(d, e);
        }
    }, this); return a;
}, every: function(b, c) { for (var a in this) { if (this.hasOwnProperty(a) && !b.call(c, this[a], a)) { return false; } } return true; }, some: function(b, c)
{
    for (var a in this)
    {
        if (this.hasOwnProperty(a) && b.call(c, this[a], a))
        {
            return true;
        }
    } return false;
}, getKeys: function() { var a = []; Hash.each(this, function(c, b) { a.push(b); }); return a; }, getValues: function()
{
    var a = []; Hash.each(this, function(b)
    {
        a.push(b);
    }); return a;
}, toQueryString: function(a)
{
    var b = []; Hash.each(this, function(f, e)
    {
        if (a) { e = a + "[" + e + "]"; } var d; switch ($type(f))
        {
            case "object": d = Hash.toQueryString(f, e);
                break; case "array": var c = {}; f.each(function(h, g) { c[g] = h; }); d = Hash.toQueryString(c, e); break; default: d = e + "=" + encodeURIComponent(f);
        } if (f != undefined)
        {
            b.push(d);
        }
    }); return b.join("&");
}
}); Hash.alias({ keyOf: "indexOf", hasValue: "contains" });
