jQuery(window).load(function(){
	
	/* Liens externes */
	$('a').click(function(){
		if($(this).attr("rel")=="external") this.target = "_blank";
	});
	
    
    
    function getCssAttrVal(elt, prop, full){
    	if(full == true){
    		return $(elt).css(prop);
    	}
    	else{
    		return $(elt).css(prop).substr(0, ($(elt).css(prop).length-2));
    	}
	}
	
	var marginLeftO = getCssAttrVal($("#orange_dot"), "margin-left", false);
	var marginLeftW = getCssAttrVal($("#white_dot"), "margin-left", false);
	$("#main_logo").hover(function(){
		$("#orange_dot").stop(true, true).animate({ 'marginLeft': marginLeftW }, { duration: 400, queue: false, easing: 'easeOutQuad'});
		$("#white_dot").stop(true, true).animate({ 'marginLeft': marginLeftO }, { duration: 400, queue: false, easing: 'easeOutQuad' });
	},function(){
		$("#orange_dot").stop(true, true).animate({ 'marginLeft': marginLeftO }, { duration: 400, queue: false, easing: 'easeOutQuad' });
		$("#white_dot").stop(true, true).animate({ 'marginLeft': marginLeftW }, { duration: 400, queue: false, easing: 'easeOutQuad' });
	});
	
	

	/* -- proj filtres -- */
	var is_filtring = false;
	$("#sorting-links a").click(function(e){
		if(is_filtring == false){
			if(!$(this).hasClass("currentFilter")){
				$("a.currentFilter").removeClass("currentFilter");
				$(this).addClass("currentFilter");
				is_filtring = true;
				var categ = $(this).attr('rel');
				$.when($("#proj_list li").stop(true, true).fadeOut(400)).done(function(){
					$("#proj_list li").each(function(){
						if($(this).hasClass(categ)){
							$.when($(this).stop(true, true).fadeIn(400)).done(function(){ is_filtring = false; });
						}
					});
				});
			}
		}
		e.preventDefault();
	});
	
	/* -- proj details -- */
    $("#proj_list .proj_details").live("click", function(e){
    	if(getCssAttrVal($("#overlay"), 'display', true) != "block"){
			//jsp_main.destroy();
	    	var proj2display = $($(this).attr("href"));
	    	if(proj2display.length){
		    	//$(".currentPart .jspPane").animate({ top: 0 });
		    	$(".proj_details.jspPane").animate({ top: 0 });
		    	$.when($("#overlay").stop(true, true).fadeIn(200)).done(function(){
		    		$.when(proj2display.stop(true, true).fadeIn(500)).done(function(){
						$(proj2display).children(".projects_details").jScrollPane();
		    			$("#project_actions").stop(true, true).fadeIn(200);
						$(proj2display).addClass("current_project");
		    		});
		    	});
		    }
	    }
    	e.preventDefault();
    });
	
	$("a.close_link").live("click", function(){
    	closeProject();
	});
	
	$(document).keyup(function (e) {
		if(e.which == 17) isCtrl=false;
		}).keydown(function (e) {
			if(e.which == 27) { // ECHAP
				if(getCssAttrVal($("#overlay"), 'display', true) == "block"){
					closeProject();
				}
		 	}
	});
	
	$("a.prev_link").live("click", function(){
		var item = $(".current_project");
	    prevProject(item);
	});
	
	$("a.next_link").live("click", function(){
		var item = $(".current_project");
	    nextProject(item);
	});
	
		
	prevProject = function(item){
		if(item.index() > 1){
	    	$.when($("#project_actions").stop(true, true).fadeOut(200)).done(function(){
		    	$.when($(".current_project").fadeOut(200)).done(function(){
	    			item.removeClass("current_project");
	    			var prev_item = item.prev('.project_wrapper');
	    			$.when(prev_item.stop(true, true).fadeIn(500)).done(function(){
						$(prev_item).children(".projects_details").jScrollPane();
		    			$("#project_actions").stop(true, true).fadeIn(200);
		    			prev_item.addClass("current_project");
		    		});
		    	});
		    });
		}
	},
	nextProject = function(item){
		if(item.index() < item.parent().children('.project_wrapper').length){
	    	$.when($("#project_actions").stop(true, true).fadeOut(200)).done(function(){
		    	$.when($(".current_project").fadeOut(200)).done(function(){
	    			item.removeClass("current_project");
	    			var next_item = item.next('.project_wrapper');
	    			$.when(next_item.stop(true, true).fadeIn(500)).done(function(){
						$(next_item).children(".projects_details").jScrollPane();
		    			$("#project_actions").stop(true, true).fadeIn(200);
		    			next_item.addClass("current_project");
		    		});
		    	});
		    });
		}
	},
	closeProject = function(item){
		if(getCssAttrVal($("#overlay"), 'display', true) == "block"){			
			//jsp_main = $('.currentPart').jScrollPane().data().jsp;
			$.when($("#project_actions").stop(true, true).fadeOut(200)).done(function(){
				$.when($(".projects_details_wrapper").fadeOut(300)).done(function(){
					$("#overlay").fadeOut(200);
					$.when($(".current_project").removeClass("current_project").fadeOut()).done(function(){
						$(".project_wrapper").hide();
					});
				});
			});
		}
	}
		    
    
    

	
    var windowH = 0;
    var windowW = 0;
    //var jsp_main = null;
    
    var setWindowSizes = function(){
	    if (navigator.appName.indexOf("Microsoft")!=-1) {
	  		windowH = document.documentElement.offsetHeight;
	  		windowW = document.documentElement.offsetWidth;
	 	}
	 	else{
			windowH = window.innerHeight;
			windowW = window.innerWidth;
		}
		$(".currentPart").css({"height": windowH, "width": windowW, "margin-top": -windowH/2});

		/*if($('.currentPart').length){
			jsp_main = $('.currentPart').jScrollPane().data().jsp;
		}*/
		//$('.currentPart').jScrollPane();
		
		$("#overlay").width(windowW).height(windowH);
		$(".projects_details_wrapper").height(windowH-50);
		$(".projects_details").height(windowH-90);
		$("#ml-credits-body").height(windowH).jScrollPane();
		$(".current_project").children(".projects_details").jScrollPane();
		
	}
	setWindowSizes();
		
	// resize de la fenetre 
    $(window).resize(function(){
		setWindowSizes();
    });
    
    $("#ml-credits-link").click(function(){
    	$.when($("#ml-credits").stop(true, true).animate({'marginRight' : $("#ml-credits").outerWidth()}, { duration: 200, queue: false })).done(function(){
    		$('#ml-credits-close').fadeIn();
    	});
    });
	$("#ml-credits-close").click(function(){
		$.when($(this).fadeOut()).done(function(){
			$("#ml-credits").stop(true, true).animate({'marginRight' : -$("#ml-credits").outerWidth()}, { duration: 200, queue: false });
		});
	});
	

	var $ac_background	= $('#ac_background'),
	$ac_bgimage		= $ac_background.find('.ac_bgimage'),
	$ac_loading		= $ac_background.find('.ac_loading'),
	
	$ac_content		= $('#ac_content'),
	$title			= $ac_content.find('h1'),
	$menu			= $ac_content.find('.ac_menu'),
	$mainNav		= $menu.find('ul:first'),
	$menuItems		= $mainNav.children('li'),
	totalItems		= $menuItems.length,
	$ItemImages		= new Array();
	is_animated 	= false;
	
	/* 
	for this menu, we will preload all the images. 
	let's add all the image sources to an array,
	including the bg image
	*/
	/*$menuItems.each(function(i) {
		$ItemImages.push($(this).children('a:first').attr('href'));
	});*/
	$ItemImages.push($ac_bgimage.attr('src'));
		  
	
	var Menu 			= (function(){
		var init				= function() {
			loadPage();
			initWindowEvent();
		},
		loadPage			= function() {
			/*
				1- loads the bg image and all the item images;
				2- shows the bg image;
				3- shows / slides out the menu;
				4- shows the menu items;
				5- initializes the menu items events
			 */
			$ac_loading.show();//show loading status image
			$.when(loadImages()).done(function(){
				$.when(showBGImage()).done(function(){
					//hide the loading status image
					$ac_loading.hide();
					$.when(slideOutMenu()).done(function(){
						$.when($("#main_logo").fadeIn(300)).done(function(){
							$.when(toggleMenuItems('up')).done(function(){
								initEventsSubMenu();
							});
						});
					});
				});
			});
		},
		showBGImage			= function() {
			return $.Deferred(
			function(dfd) {
				//adjusts the dimensions of the image to fit the screen
				adjustImageSize($ac_bgimage);
				$ac_bgimage.fadeIn(1000, dfd.resolve);
			}
		).promise();
		},
		slideOutMenu		= function() {
			/* calculate new width for the menu */
			//var new_w	= $(window).width() - $title.outerWidth(true);
			var new_w = windowW;
			return $.Deferred(
			function(dfd) {
				//slides out the menu
				$menu.stop()
				.animate({
					width	: new_w + 'px'
				}, 700, dfd.resolve);
			}
		).promise();
		},
			/* shows / hides the menu items */
			toggleMenuItems		= function(dir) {
			is_animated = true;
			return $.Deferred(
			function(dfd) {
				/*
				slides in / out the items. 
				different animation time for each one.
				*/
				$menuItems.each(function(i) {
							var $el_title	= $(this).children('a:first'),
								marginTop, opacity, easing;
							if(dir === 'up'){
								marginTop	= '0px';
								opacity		= 1;
								easing		= 'easeOutBack';
							}
							else if(dir === 'down'){
								marginTop	= '60px';
								opacity		= 0;
								easing		= 'easeInBack';
			}
					$el_title.stop()
					.animate({
										marginTop	: marginTop,
										opacity		: opacity
									 }, 200 + i * 200 , easing, function(){
						if(i === totalItems - 1)
							dfd.resolve();
					});
				});
			}
		).promise();
		},
		initEventsSubMenu	= function() {
			
			$menuItems.each(function(i) {
				var $item		= $(this), // the <li>
				$el_title	= $item.children('a:first'),
				el_image	= $el_title.attr('href'),
				$sub_menu	= $item.find('.ac_subitem'),
				$ac_close	= $sub_menu.find('.ac_close');
				
				$el_title.bind(
					'click.Menu', function(e) {
							$.when(toggleMenuItems('down')).done(function(){
								openSubMenu($item, $sub_menu, el_image);
							});
						return false;
					}
				);
				/* closes the submenu */
				$ac_close.bind(
					'click.Menu', function(e) {
						closeSubMenu($sub_menu);
						return false;
					}
				);
				
			});
			
			
				
			$(document).keyup(function (e) {
				if(e.which == 17) isCtrl=false;
				}).keydown(function (e) {
					if($(".currentPart").length == 1){
						if(e.which == 37) { // Left
							$.when(closeProject()).done(function(){
								prevPart($(".currentPart").parent(), $(".currentPart"), $(".currentPart"));
							});
					 	}
					 	else if(e.which == 39) { // Right
							$.when(closeProject()).done(function(){
								nextPart($(".currentPart").parent(), $(".currentPart"), $(".currentPart"));
							});
					 	}
					 }
			});
		    $("#prev_part").click(function(e){
				$.when(closeProject()).done(function(){
			    	hideNavBtn();
					prevPart($(".currentPart").parent(), $(".currentPart"));
				});
				e.preventDefault();
		    });
		    $("#next_part").click(function(e){
				$.when(closeProject()).done(function(){
				    hideNavBtn();
					nextPart($(".currentPart").parent(), $(".currentPart"));
				});
				e.preventDefault();
		    });
					
			
		},
		prevPart			= function($item, $sub_menu){
			if($item.index()+1 > 1){
				$.when(hideNavBtn()).done(function(){
					$sub_menu.removeClass("currentPart");
					$sub_menu.stop()
					.animate({
						height		: '0px',
						marginTop	: '0px'
					}, 400, function() {
						//show items
						
						$item.prev('li').children('a.linkMenu').trigger('click');
					});
					toggleMenuItems('up');
				});
			}
		},
		nextPart			= function($item, $sub_menu){
			if($item.index()+1 < $item.parent().children('li').length){
				$.when(hideNavBtn()).done(function(){
					$sub_menu.removeClass("currentPart");
					$sub_menu.stop()
					.animate({
						height		: '0px',
						marginTop	: '0px'
					}, 400, function() {
						//show items
						
						$item.next('li').children('a.linkMenu').trigger('click');
					});
					toggleMenuItems('up');
				});
			}
		},
		openSubMenu			= function($item, $sub_menu, el_image) {
			$sub_menu.addClass("currentPart");
	    	//$(".jspPane").animate({ top: 0 });
			
			$sub_menu.stop()
			.animate({
				height		: windowH,
				marginTop	: -windowH/2
			}, 400, function() {
				showNavBtn($item);
				if(getCssAttrVal($(".proj"), "display", true) =="block" ){
					var delay = 300;
					$("#proj_list li").each(function(){
						$(this).delay(delay).animate({ opacity: 1 });
						delay+=75;
					});
				}
			});
			setWindowSizes();
		},
			/* changes the background image */
		showItemImage		= function(source) {
				//if its the current one return
			if($ac_bgimage.attr('src') === source)
				return false;
					
			var $itemImage = $('<img src="'+source+'" alt="Background" class="ac_bgimage"/>');
			$itemImage.insertBefore($ac_bgimage);
			adjustImageSize($itemImage);
			$ac_bgimage.fadeOut(1500, function() {
				$(this).remove();
				$ac_bgimage = $itemImage;
			});
			$itemImage.fadeIn(1500);
		},
		closeSubMenu		= function($sub_menu) {
			hideNavBtn();		
			$sub_menu.removeClass("currentPart");
			$sub_menu.stop()
			.animate({
				height		: '0px',
				marginTop	: '0px'
			}, 400, function() {
				//show items
							toggleMenuItems('up');
			});
		},
			/*
			on window resize, adjust the bg image dimensions,
			and recalculate the menus width
			*/
		initWindowEvent		= function() {
			/* on window resize set the width for the menu */
			$(window).bind('resize.Menu' , function(e) {
				adjustImageSize($ac_bgimage);
				/* calculate new width for the menu */
				//var new_w	= $(window).width() - $title.outerWidth(true);
				var new_w = windowW;
				$menu.css('width', new_w + 'px');
			});
		},
			/* makes an image "fullscreen" and centered */
		adjustImageSize		= function($img) {
			var w_w	= $(window).width(),
			w_h	= $(window).height(),
			r_w	= w_h / w_w,
			i_w	= $img.width(),
			i_h	= $img.height(),
			r_i	= i_h / i_w,
			new_w,new_h,
			new_left,new_top;
				
			if(r_w > r_i){
				new_h	= w_h;
				new_w	= w_h / r_i;
			}
			else{
				new_h	= w_w * r_i;
				new_w	= w_w;
			}
				
			$img.css({
				width	: new_w + 'px',
				height	: new_h + 'px',
				left	: (w_w - new_w) / 2 + 'px',
				top		: (w_h - new_h) / 2 + 'px'
			});
		},
			/* preloads a set of images */
		loadImages			= function() {
			return $.Deferred(
			function(dfd) {
				var total_images 	= $ItemImages.length,
				loaded			= 0;
				for(var i = 0; i < total_images; ++i){
					$('<img/>').load(function() {
						++loaded;
						if(loaded === total_images)
							dfd.resolve();
					}).attr('src' , $ItemImages[i]);
				}
			}
		).promise();
		},
		
		showNavBtn = function ($item){
			// show prev
			if($item.index()+1 > 1){
				$("#prev_part").fadeIn();
			}
			// show next
			if($item.index()+1 < $item.parent().children('li').length){
				$("#next_part").fadeIn();
			}
		},
		hideNavBtn = function (){
			$(".navBtn").fadeOut(100);
			$("#overlay").hide();
		}
		
		;
			
		return {
			init : init
		};
	})();

	Menu.init();
    
    
    

	
});
