/**
 * core namespace
 * @namespace
 */


var S = {
    strict: function(types, args)
    {
        if (types.length != args.length) {
            throw "Invalid number of arguments. Expected " + types.length + ", received " + args.length + " instead.";
        }

        for (var i=0; i<args.length; i++) {
            if (args[i].constructor != types[i]) {
                throw "Invalid argument" + (i+1) + " type. Expected " + types[i].name + ", received " + args[i].name + " instead.";
            }
        }
    },

    getParameter: function(paramName) {
        var searchString = window.location.search.substring(1),
        i, val, params = searchString.split("&");

        for (i=0;i<params.length;i++) {
            val = params[i].split("=");
            if (val[0] == paramName) {
                return unescape(val[1]);
            }
        }
        return null;
    }
};



/**
 * @object (static class)
 * Contains objects
 */
S.Data = {
    set: function(key, value)
    {
        this[key] = value;
    },
    get: function(key)
    {
        return this[key];
    }
}



/**
 * @Boolean
 * Disable body-bubbling-event by false
 */
S.BublingEvent = true;


