// contentBlock v1.0 // &copy; Stuart Elmore (c/o Bluestone Creative) // 09/02/2010

(function($){
	$.fn.contentBlock = function(){
		if(arguments.length === 1){ origSettings = arguments[0]; }
		else{origSettings = {url:arguments[0], callback:arguments[1]};}
		$(this).each(function(){
			var elem = $(this), settings, getContent;
			if(typeof(origSettings) == 'string'){
				origSettings = {url: origSettings};
			}
			settings = jQuery.extend({
				'url' 		: 	'404.htm',
				'callback'	: 	null,
				'type'		: 	null, // intelligent guess
				'data'		: 	{},
				'method'	: 	'GET'
			},origSettings);
			getContent = function(){
				// sort out url
				settings['urlPart'] = settings['url'].replace(/^\s+|\s+$/g,"");
				if(settings['urlPart'].indexOf(' ') > -1){
					settings['urlScope'] = settings['urlPart'].split(' ')[1];
					settings['urlPart'] = settings['urlPart'].split(' ')[0];
				}
				$.ajax({
					url:settings['urlPart'],
					dataType: settings['type'],
					data: settings['data'],
					type: settings['method'],
					success: function(data){
						if(typeof(settings.callback) == 'function'){
							if(typeof(settings['urlScope']) == 'string'){
								data = jQuery("<div/>").append(data.replace(/<script(.|\s)*?\/script>/g, "")).find(settings['urlScope']).html();
							}
							
							$(elem).html(data);
							settings.callback.call(this,data);
						}else{
							if(typeof(settings['urlScope']) == 'string'){
								data = jQuery("<div/>").append(data.replace(/<script(.|\s)*?\/script>/g, "")).find(settings['urlScope']).html();
							}
							$(elem).html(data);
						}
					},
					error: function(XMLHttpRequest, textStatus, errorThrown){
						$(elem).html('<h3>Error</h3><p>When trying to request "'+settings['urlPart']+'", the server responded with: "'+XMLHttpRequest.status+': '+XMLHttpRequest.statusText+'".');
					}
				})
			}
			getContent();
			return this;
		});
	}
})(jQuery);
