
if (typeof shouts == "undefined" || !shouts) {	
	var shouts = {};
}

if (typeof console == "undefined" || !console) {	
	var console = {
		log: function(message) {		
		}
	}
}

shouts._autoload = new Array();

shouts.namespace = function() {
	
	var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; i=i+1) {
        d=(""+a[i]).split(".");
        o=shouts;

        for (j=(d[0] == "shouts") ? 1 : 0; j<d.length; j=j+1) {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }

    return o;
}

shouts.as = function(namespace, assignment) {
	
	var segments = namespace.split('.');
	var last = segments.pop();
	var object = shouts.namespace(segments.join('.'));
	
	object[last] = assignment;
	
	return object[last];
}

shouts.loadnow = function(callback) {
	
	callback.call(window, jQuery);
}

shouts.load = function(selector, callback) {
	
	var loadee = { selector: '*', callback: null };
	
	if (typeof selector == 'function') {
		loadee.callback = selector;
	} else {
		loadee.selector = selector;
		loadee.callback = callback;		
	}
			
	shouts._autoload.push(loadee);
}

shouts.util = {
	
	alert: function(message, type) {
		//todo
		console.log('Alert type '+ type + ': ' + message);
	},
	error: function(message) {
		shouts.util.alert(message, 'error');
	}
}

jQuery(document).ready(function($) {
	
	for (var index in shouts._autoload) {
		
		if ($('body').is(shouts._autoload[index].selector)) {
			shouts._autoload[index].callback.call(window, jQuery);	
		}					
	}
	
	delete shouts.load;
	delete shouts._autoload;
});
