$.address.change.listeners = [];
$.address.change.enabled   = true;

var addressChangeCallback = function(event) {
	if (!$.address.change.enabled) {
		return;
	}
	
	registry.lastUrl = document.location.href;
	
	var selection	 = $('div[rel=address:' + event.value + ']');
	var url			 = $.address.path();
	
	if (selection.attr('href') != null) {
		url = selection.attr('href');
		rel = true;
	}
	
	if (url == '/' || url == '/#' || url == '#') {
		return;
	}
	
	
	var doRequest = true;
	
	if (document.location.pathname.search(/^(\/album)/) != -1) {
		url = '/album' + url;
	}
	
	if (doRequest) {
		toggleLoader(true, true);
		getAllFlash().each(function(){
			if(typeof this.stopPlayback == 'function') {
				this.stopPlayback();
			}
		});
		
		//TODO -> $.ajax
		$.getJSON(
			url,
			{
				view: "json"
			},
			function(result) {
				facebookInit();
				$("head link[rel=image_src]").remove();
				$("head meta[property*=og]").remove
				window.scrollTo(0, 0);
				if (typeof result.html != 'undefined' && result.html != null) {
					var tmp = '';
					for (i in result.html) {
						tmp = $(i).html();
						if (i == 'title') {
							document.title = result.html[i];
						} else {
							$(i).html('' + result.html[i]);
						}
					}
					
					// -> Listeners
					//TODO: Maybe - Links, die das Hauptmenü beeinflussen, ein bestimmtes Attribut zuweisen und diese in einer Liste speichern
					for (i in $.address.change.listeners['afterRequest']) {
						if (typeof $.address.change.listeners['afterRequest'][i].afterChange == 'function') {
							$.address.change.listeners['afterRequest'][i].afterChange(selection);
						}
					}
				}
				
				toggleLoader(false, true);
			}
		);
	}
};

$.address.change(addressChangeCallback);

function disableAddressPlugin() {
	$.address.change.enabled = false;
}

function enableAddressPlugin() {
	$.address.change.enabled = true;
}

enableAddressPlugin();

$(document).ready(function() {
	$.address.value($.address.path());
	$.address.change.listeners = {
			afterRequest: {},
			beforeRequest: {}
	}
	$.address.change.listeners['afterRequest'][$.address.change.listeners.length] = addressChangeMainmenuListener;
	$.address.change.listeners['afterRequest'][$.address.change.listeners.length] = addressChangeMainmenuRefreshListener;
});
