(function($) {

	doneOnce = false;
	$.ajaxNavigation = true;
	$(document).ready(function() {
		
		if(doneOnce)
			return;
		
		$.url.parse();
			
		$(document).trigger('url.set-rubrique');
		$(document).trigger('url.set-video');
		
		function findFb() {
			try {
				$(document).find(".FBLike:visible").each(function() {
					FB.XFBML.parse(this);
				});
			} catch(e) { 
				window.setTimeout(findFb, 1000);
			}
		}
		
		findFb();
		doneOnce = true;
		
		var url = $.url._lang + "/" + $.url._path.join('/');
		if(url == $.url._lang + "/")
			return;
			
		$("a[href^=\"" + url + "\"]:first").trigger('click');
	});
	
	$(document).bind('pageLoaded', function() {
		
		$(document).trigger('url.set-rubrique');
		$(document).trigger('url.set-video');
		//$(document).trigger('url.set-audio');
		
		
		//$.url.parse();
		$('a').bind('click', function() {
		
			var set = $(this).data('set-url');
			if(!set)
				return;
			set = set.split('-');
			var k = set.shift();
			
			$.url.parse(true);
			$.url._urlInfos[k] = set;
		
			if(k == 'video')
				$.url._urlInfos['audio'] = undefined;
				
			if(k == 'audio')
				$.url._urlInfos['video'] = undefined;
				
			$(document).trigger('url.set-' + k);
			$.url.rebuild();
		});
	});
	
	$.url = {};
	$.url._urlInfos = {};
	$.url._path = [];
	$.url._base = '';
	$.url._anchor = '';
	$.url._root = '';
	$.url._lang = '';
	
	$.url.rebuild = function() {
	
		var url = '';
		
		if($.ajaxNavigation) {
			// Ensures that the base url stays the same => no reload of the page 
			url += $.url._base;
			url += "#";
			url += $.url.getAsFragment();
		}
		
		url += '.html';
		document.location.href = url;
	}
	
	$.url.getAsFragment = function() {
			
		var args = [];			
		// Adds up the lang
		args.push($.url._lang);
		// Adds up the path
		args = args.concat($.url._path)
		// Adds up the infos
		for(var i in $.url._urlInfos) {
			if($.url._urlInfos[i] == undefined)
				continue;
			args.push(i + "-" + $.url._urlInfos[i].join('-'));
		}
			
		return args.join('/');
	}
		
	$.url.parse = function(doNotSendEvent) {
		$.url.parseBase(true);
		$.url.parseAnchor();
		
		if(!doNotSendEvent)
			$(document).trigger('url.parsed');
	}
	
	$.url.parseAnchor = function() {
		
		var url = document.location.href;
		url = url.split('#');
		
		var args = url[1];
		$.url._anchor = args;
		
		$.url._parse(args == undefined ? '' : args, true, true);
	}
	
	$.url.parseBase = function(doNotPassToAnchor) {
		
		var url = document.location.href;
		url = url.split('#');
		
		var args = url[1];
		$.url._anchor = args;
		var base = url[0];
		$.url._base = base;
		
		$.url._parse(base, false, doNotPassToAnchor);
	}
	
	$.url._parse = function(frag, isanchor, doNotPassToAnchor) {
		
		$.url._path = [];
	//	$.url._urlInfos = {};
		
		if(!isanchor) 
			$.url._root = [];
	
		var foundLang = false;
		var indexPath = 0;
		
		var infos = frag.split('/');
		for(var i = 0; i < infos.length; i++) {
			
			var info = infos[i].replace('.html', '').split('-');
			
			if(info.length == 1) {
				
				switch(info[0]) {
					
					case 'fr': case 'de': case'it': case 'en': case 'es':
						$.url._lang = info[0];
						foundLang = true;
					break;
				
					default:
						if(foundLang) {
							$.url._path[indexPath] = info[0].replace('.html', '');
							indexPath++;
						}
					break;
				}
			} else {
				if(foundLang) {
					k = info.shift();
					$.url._urlInfos[k] = info;
				}
			}
			
			if(!foundLang && !isanchor) {
				$.url._root.push(info[0]);;
			}
		}
		
		if(!isanchor)
			$.url._root = $.url._root.join('/');
			
		if(!doNotPassToAnchor) {
			var url = [];
			url = url.concat($.url._path)
			for(var i in $.url._urlInfos)
				url.push([i, $.url._urlInfos[i]].join('-'));
				
			document.location.href = $.url._base + '#' + url.join('/');		
		}
	}
}) (jQuery);

(function($) {
	
	$(document).bind('pageLoaded', function() {
			
			
		$(".ImageModule a").bind('click', function() {
			
			document.location.href = $(this).attr('href');
			
			$.url.parseAnchor();
			var href = $.url._path.join('/');
			$("#PageContent").loadPage({
				url: href, 
				mode: 'page'
			});
			
			if($.url !== undefined) {
				$.url._parse(href, false, true);
				$.url.rebuild();
			}
			
		});
			
		$(document).find('a.Ajax').not('.NoAjax').unbind('click').bind('click', function(e) {
			$.url._urlInfos['video'] = undefined;
			$.url._urlInfos['audio'] = undefined;
			/**
			 * Handles the selection menu
			 */
			$(this).addClass('Selected').parent().siblings().children('a').removeClass('Selected');
			
			// No propagation of the click since we change the page
			e.preventDefault();
			
			var href = $(this).attr('href');
			$("#PageContent").loadPage({
				url: href, 
				mode: 'page'
			});
			
			if($.url !== undefined) {
				$.url._parse(href, false, true);
				$.url.rebuild();
				
			} else if(window.console !== undefined)
				window.console.warn("The URL mode doest not exist. Cannot append URL");
		});
	});

	
	$.fn.loadPage = function(query) {
		
		var box = this;
		var faded = false,
			loaded = false,
			content = {
				content: '', 
				title: ''
			};
			
		$(this)
			.children()
			.animate({opacity: 0.1}, function() { faded = true; check_loaded(); });
			
		var mode = query.mode;
		
		if(mode == undefined || mode !== 'page' || mode !== 'module')
			mode = 'page';
		
		$.getJSON('./content/_ajax/loadPage.ajax.php', {query: query.url, mode: query.mode}, function(data) {
			loaded = true;
			content = data;
			check_loaded();
		});
		
		var loading = $('<div>').addClass('Loading').html('<img src="./design/images/ajax-loader.gif" />').css({
			height: $(box).height(), 
			width: $(box).width(),
			position: 'absolute',
			opacity: 0.8,
			textAlign: 'center',
			paddingTop: 150
		});
		
		$(box).prepend(loading);
		
		function check_loaded() {
		
			if(!loaded || !faded)
				return;
		
			/*$('html').children('head').children('title').text(content.title);
			*/$(box).html(content.content);
			$(box).children().css({opacity: 0}).animate({opacity: 1});	
			$(document).trigger('pageLoaded', box);
		}
	}
}) (jQuery);
