$(document).ready(function(){
	$('.navigation li').hover(function(){
		$('ul',$(this)).slideDown();
	},function(){
		$('ul',$(this)).slideUp();	
	});
	
	$('a[data-target]').toAjaxLink().bind('click',false);
	
	if(location.hash){
		$(window).hashchange();
	}
});

$.fn.toAjaxLink = function(options){
	options = options || {};
	//Defaultwerte setzen
	options = $.extend({
		urlAttr: 'href'
	}, options);
	
	$(this).bind('click',function(){
		location.hash = $(this).attr(options.urlAttr);
	});
	
	var that = $(this);
	
	$(window).hashchange(function(){
		for(var i=0;i<that.length;i++){
			if($(that[i]).attr(options.urlAttr) == location.hash.substring(1,location.hash.length)){
				$(that[i]).loadContent(options);
				break;
			}
		}
	});
	
	return this;
};
/*
	Aufbau der options:
	loadingClass: Der Ziel-Container bekommt diese Klasse, währen der Request läuft.
	ajaxSettings: das settings-Objekt das an $.ajax() übergeben werden soll. URL wird, falls angegeben mit der zu ladenden überschrieben.
	targetAttr: Name des Attributs das die ID des Element enthält, in welches die response geschrieben werden soll. Defaultwert ist 'data-target'
	urlAttr: Name des Attributs das die zu ladende Url enthält. Defaultwert ist 'href'
*/
$.fn.loadContent = function(options){
	options = options || {}
	//Defaultwerte setzen
	options = $.extend({
		loadingClass: 'loading',
		targetAttr: 'data-target',
		ajaxSettings: $.extend({},options.ajaxSettings)
	},options);
	
	options.ajaxSettings.additionalSuccess = options.ajaxSettings.success;
	options.ajaxSettings.success = function(data, textStatus, XMLHttpRequest){
			//Bei Erfolg erhaltenes ins Ziel schreiben und die loading-Klasse entfernen
			document.title = data.substring(data.indexOf("<title>")+7,data.indexOf("</title>"));
			$(this)
				.html(data.substring(data.indexOf("</title>")+8))
				.removeClass(options.loadingClass)
			;
			$('a[data-target]',$(this)).toAjaxLink().bind('click',false);
			if(options.ajaxSettings.additionalSuccess)
				options.ajaxSettings.additionalSuccess(data, textStatus, XMLHttpRequest);
		};

	var target = $('#'+$(this).attr(options.targetAttr));
	var url = $(this).attr(options.urlAttr);
	//Im Ziel die loading-klasse setzen
	$(target)
		.addClass(options.loadingClass)
	;
	//ajax parameter anpassen
	options.ajaxSettings.url = url;
	options.ajaxSettings.context = target;
	//Ajax-Request absetzen
	$.ajax(options.ajaxSettings);

	return this;
};
