var Ajaxify = {
	oldhash: Math.random(),
	callback: function() {},
	clicked: false,
	loader: function() {
		var $ = jQuery;
			if (window.location.hash && window.location.hash!=Ajaxify.oldhash) {
				$.get(window.location.hash.replace('#',''),null,function(responseText, textStatus) {
					var loaded = $('<div/>').append(responseText.replace(/<script(.|\s)*?\/script>/g, ""));
					if (loaded.find("#content form").size()>0) {
						document.location = window.location.hash.replace('#','');
					} 
					var title = loaded.find('title');
					document.title = title.text();
					$(Ajaxify.target).empty().append($(Ajaxify.source + ">*",loaded));
					Ajaxify.linkchecker($(Ajaxify.target));
					window.scroll(0,0);
					Ajaxify.callback();
				});
					
				Ajaxify.oldhash=window.location.hash;
			}
		},
		
	linkchecker: function(obj) {
		var $ = jQuery;
		obj.find('a:not([href^=#][href^=javascript][href^=mailto][href=/][href*=fileadmin][href*=rss][href*=home.html][rel=external])').click(function() {
			var $$ = $(this);
			var hostpart = window.location.hostname;
			if ($$.attr('href').indexOf('http')>-1) {
				if($$.attr('href').indexOf(hostpart)>-1) {
					var myurl = $$.attr('href').replace('http://' + hostpart , '');
					var url = window.location.pathname + (window.location.search?window.location.search:'') + "#" + myurl;
				} else {
					return true;
				}
			} else {
				var url = window.location.pathname + (window.location.search?window.location.search:'') + "#" + $$.attr('href');
			}
			Ajaxify.clicked = true;
			window.location.href = url;
			return false;
		});
	}
}

jQuery.fn.ajaxify = function(source,callback) {
	var $ = jQuery;
	var $$ = this;
	
	if (($.browser.msie && $.browser.version<7)) return $$;
		
	Ajaxify.source = source ? source : $$.selector;
	Ajaxify.target = $$.selector;
	
	Ajaxify.linkchecker($(Ajaxify.target));
	
	Ajaxify.callback = callback;
	
	setInterval('Ajaxify.loader()',100);

	return $$;
}
