$(document).ready(function() {
	PAGE_IS_BUSY = false;
	UserInterface(BASE_URL);
});

function UserInterface(websiteUrl) {
	var body = $('body');
	var secondary = $('#secondary');
	var main = $('#main');
	var mainContent = main.find('#main-content');
	var nextLink = $('#next-link');
	var visuel = $('#visuel');
	var imageVisuel = visuel.find('img');
	var mainContentWrapper;
	var scrollBar;
	var scrollButton;
	var scrollContent;
	
	var hauteurMainContent;
	var paddingMainContent = mainContent.outerHeight()-mainContent.height();
	var hauteurTitreContent;
	var paddingMain = (mainContent.outerHeight(true) - mainContent.outerHeight())/2;
	main.width(mainContent.outerWidth());
	var tailleMS = secondary.outerWidth(true) + main.outerWidth(true);
	var largeurVisuel;
	var hauteurBody;
	var hauteurScroll;
	var hauteurWrapper;
	var pasScroll = 50;
	
	
	main.prepend('<div id="loading-info" />');
	var loadingGif = main.children('#loading-info');
	
	visuel.css('overflow','hidden');
	imageVisuel.css('position','absolute');
	
	main.css('position','relative');
	mainContent.css('position','absolute');
	mainContent.css('top','50%');
	
	$('a[rel="next"]').tipsy(
		{gravity: 'se', fade: true, opacity: 1, live: true}
	);
	
	setInterface();
	adjustInterface();
	bindLink();
	
	$(window).resize(function(){
		adjustInterface();
	});
	
	function bindLink(zone) {
		/*if (!zone) {
			$('a[href^="'+websiteUrl+'"]').click(function() {
				loadPage($(this).attr('href'));
				return false;
			});
		} else {
			zone.find('a[href^="'+websiteUrl+'"]').click(function() {
				loadPage($(this).attr('href'));
				return false;
			});
		}*/
		secondary.find('a[href^="'+websiteUrl+'"]').click(function() {
			loadPage($(this).attr('href'));
			return false;
		});
		nextLink.click(function() {
			var cur_next_href = $(this).attr('href');
			console.log(cur_next_href);
			var websiteUrl_pattern = new RegExp('^'+websiteUrl, 'i');
			console.log(websiteUrl_pattern);
			if (cur_next_href.match(websiteUrl_pattern))
			{
				loadPage(cur_next_href);
				return false;
			}
			else
			{
				 window.open(cur_next_href);
				 return false;
			}
		});
	}
	function setInterface() {
		var listeLiens = mainContent.find('ul.liste-deroulante');
		if (listeLiens) {
			initAccordeoListe(listeLiens);
		}
		hauteurMainContent = mainContent.outerHeight();
		hauteurTitreContent = mainContent.children('h1').height();
		mainContent.height('auto');
		mainContent.children(':not(h1)').wrapAll('<div class="wrapper" />');
		mainContentWrapper = mainContent.find('.wrapper');
		mainContentWrapper.wrapInner('<div class="scroll-content" />');
		scrollContent = mainContentWrapper.children('.scroll-content');
		mainContent.append('<div class="scroll-bar"><div class="scroll-button" /></div>');
		scrollBar = mainContent.children('.scroll-bar');
		scrollButton = scrollBar.children('.scroll-button');
		scrollButton.draggable(
			{
				axis: 'y',
				containment: 'parent',
				drag: function(e, ui) {adjustContentScroll(ui.position.top)}
			}
		);
		scrollBar.css('top',hauteurTitreContent);
		
		function initAccordeoListe(container) {
			var titres = container.find('h2');
			titres.each(function() {
				$(this).wrapInner('<a title="Déplier la catégorie" />');
				var liste = $(this).next('ul');
				liste.hide();
			});
			titres.children('a').click(function() {
				titres.next('ul').hide();
				$(this).parent().next('ul').slideToggle(
					function() {
						adjustInterface();
					}
				);
				return false;
			});
		} 
	}
	
	function adjustContentScroll(top, marge) {
		if (undefined == top) {
			top = scrollButton.position().top;
		} else {
			if (top > hauteurScroll) {
				top = hauteurScroll;
			} else if (top < 0) {
				top = 0;
			}
			scrollButton.css('top',top);
		}
		if (!marge) {
			var marge = hauteurScrollContent - hauteurWrapper;
		}
		mainContentWrapper.children(':first-child').css('margin-top', Math.round(-marge*(top / hauteurScroll)) + "px");
	}
	
	function adjustInterface() {
		largeurVisuel = body.width() - tailleMS;
		hauteurBody = body.height();
		
		hauteurScrollContent = scrollContent.outerHeight();
		hauteurMainContent = hauteurScrollContent+hauteurTitreContent+paddingMainContent;
		
		visuel.width(largeurVisuel);
		hauteurMax = hauteurBody - paddingMain*2;
		
		if (hauteurMainContent > hauteurMax) {
			mainContent.css('margin',-(hauteurMax/2)+'px 0 0 0');
			mainContent.height(hauteurMax);
			hauteurWrapper = hauteurMax-hauteurTitreContent-paddingMainContent;
		} else {
			mainContent.css('margin',-(hauteurMainContent/2)+'px 0 0 0');
			mainContent.height(hauteurMainContent);
			hauteurWrapper = hauteurMainContent-hauteurTitreContent-paddingMainContent
		}
		
		mainContentWrapper.height(hauteurWrapper);
		
		if (hauteurScrollContent > hauteurWrapper) {
		
			body.unbind('mousewheel');
			body.mousewheel(
				function(event, delta) {
					var pas = pasScroll;
					if (pas > hauteurWrapper) {
						pas = hauteurWrapper;
					}
					var marge = scrollContent.outerHeight() - mainContentWrapper.height();
					var newPos = scrollButton.position().top + -1*delta* (pasScroll*hauteurScroll)/marge;
					adjustContentScroll(newPos, marge);
				}
			);
			
			var positionButton = scrollButton.position().top;
			if (positionButton != 0) {
				var rapportPositionButton = positionButton/hauteurScroll;
			}
			scrollBar.height(hauteurWrapper);
			hauteurScroll = scrollBar.outerHeight()-scrollButton.outerHeight();
			if (rapportPositionButton) {
				adjustContentScroll(rapportPositionButton*hauteurScroll);
			}
			scrollBar.show();
		} else {
			body.unbind('mousewheel');
			scrollBar.hide();
			adjustContentScroll(0);
		}
	}
	
	function loadPage(href) {
		if (PAGE_IS_BUSY) {return false};
		if(href == BASE_URL+CURRENT_PAGE) { return false; }
		
		PAGE_IS_BUSY = true;
		CURRENT_PAGE = href.replace(BASE_URL,'');
		location.hash = '!'+CURRENT_PAGE;
		
		var newData = undefined;
		var animation1_complete = false;
		var animation2_complete = false;
		var load_complete = false;
		
		imageVisuel.animate({left: largeurVisuel}, 300,function() {
			animation1_complete = true;
			if (load_complete && animation2_complete) {
				displayNewPage();
			}
		});
		
		mainContent.animate({opacity: 0}, 600,function() {
			loadingGif.fadeIn();
			animation2_complete = true;
			if (load_complete && animation1_complete) {
				displayNewPage();
			}
		});
		
		$.getJSON(href+'/json',function(data){
			load_complete = true;
			newData = data;
			if (animation1_complete && animation2_complete) {
				displayNewPage();
			}
		});
		
		function displayNewPage() {
			document.title = newData.title;
			mainContent.html(newData.content);
			//bindLink(mainContent);
			mainContent.css('visibility', 'hidden');
			setInterface();
			adjustInterface();
			nextLink.attr('href', newData.nextLink);
			nextLink.attr('title', newData.next);
			imageVisuel.load(function() {
				imageVisuel.unbind('load');
				loadingGif.hide();
				imageVisuel.animate({left: 0}, 300);
				mainContent.css('visibility', 'visible');
				mainContent.animate({opacity: 1}, 500);
			});
			imageVisuel.attr('src', newData.visuel);
			if (newData.activeMenu) {
				$('#navigation .active').removeClass('active');
				$('#navigation .'+newData.activeMenu).addClass('active');
			}
			PAGE_IS_BUSY = false;
		}
	}
}
