/*===================================	
	common.js
	webdev.juliendecaudin.com    
    by Julien Decaudin http://www.juliendecaudin.com
    18/07/2010
===================================*/

$('html').addClass('js');

/************* GLOBAL VARIABLES *************/
var debug = false;

var timerPreloaderDelay = 500;
var timerPreloader;
var overviewLoaded = false;
var latestIlloPath;

/* PROJECTS TIMELINE */
var flagThumbOpen = false;
var thumbTimer;
var thumbTimerDuration = 1000;
var ptlHoverInSpeed = 100;
var ptlHoverOutSpeed = 400;

/* PROJECTS NAVIGATION */
var currentProjectPosition = 0;
var loadingProjectPosition = 0;
var projectOffset = 500;
var projectSlideSpeed = 250;
var projectLocked = false;
var totalProjects = 0;
var lastProject = false;
var hashProject = "";
var projectListMarginLeft;
var latestProjectId;
var keyLocked = false;

$(document).ready(function() {			
    /*////////////////////////////////////// INIT */
    if($('#projects').length > 0){
    	/* PROJECTS */
    	if($.browser.msie){
    		$('#projects .off .project_image img.default').css('opacity', '0.2');
    		$('#projects .off #projects_thumbnails img').css('opacity', '0.2');
    		$('#projects .project_image img.over').css('opacity', '0');
    	}
	    totalProjects = $('div.project').length;
	    projectListMarginLeft = $('#projects').css('marginLeft').split('px')[0];
	    $('.project').each(function(n) {
	        var offset = -(n * projectOffset) + parseInt(projectListMarginLeft);
	        if (n == 0) {
	            offset = projectListMarginLeft;
	        }
	        $(this).data("offset", offset);        
	        $(this).data("position", n + 1);        
	    });
	    
	    latestProjectId = $('#projects div.project:eq(0)').attr('id');
	    
	    /* LOGO */
	    $('h1 a').click(function() {
	        return false;
	    });
	    
	    $('h1 a').mousedown(function() {
	    	$.address.value($(this).attr('href'));
	        if(LoadProject(0)) currentProjectPosition = 0;        
	    });
	    
	    /* PROJECTS TIMELINE */
	    $('#projects_timeline').hover(function() {        
	        $('#projects_timeline_title').show();                
	    }, function() {    	
	        $('#projects_timeline_title').hide();
	    });
	    
	    $('#projects_timeline li a').hover(function() {
	        RolloverTimeline($(this));   
	    }, function() {    	
	    	RolloutTimeline($(this));   
	    });
	    
	    $('#projects_timeline li a').click(function(){ return false; });
	
	    $('#projects_timeline li a').mousedown(function(){
	    	$.address.value($(this).attr('href'));
	    	LoadFromTimeline($(this));
	    });
	    
	    /* PROJECT NAVIGATION */
	    $('#link_next').mousedown(function() {
	        if (!projectLocked && !lastProject) {
	        	$.address.value($(this).attr('href'));
	            if(LoadProject(currentProjectPosition + 1)) currentProjectPosition++;
	        }
	    });
	    
	    //right arrow
	    $('body').keydown(function(event){
	    	if(event.keyCode == '39' && !keyLocked && !projectLocked && !lastProject){
	    		keyLocked = true;
	    		$.address.value($(this).attr('href'));
	            if(LoadProject(currentProjectPosition + 1)) currentProjectPosition++;
	    	}
	    });
	
	    $('#link_previous').mousedown(function() {
	    	//console.log(projectLocked);
	        if (!projectLocked && currentProjectPosition > 0) {        	
	        	$.address.value($(this).attr('href'));
	            if(LoadProject(currentProjectPosition - 1)) currentProjectPosition--;
	        }
	    });
	    
	    //left arrow
	    $('body').keydown(function(event){
	    	if(event.keyCode == '37' && !keyLocked && !projectLocked && currentProjectPosition > 0){
	    		keyLocked = true;
	    		$.address.value($(this).attr('href'));
	            if(LoadProject(currentProjectPosition - 1)) currentProjectPosition--;
	    	}
	    });
	    
	    $('body').keyup(function(event){
	    	keyLocked = false;
	    });
	
	    $('#link_next, #link_previous').click(function() {
	        return false;
	    }); 
	    
		/* PROJECTS THUMBNAILS */
		$('#projects_thumbnails').hover(function() {        
	        $('#projects_timeline_title').show();                
	    }, function() {    	
	        $('#projects_timeline_title').hide();
	    });
	    
	    $('#projects_thumbnails a').hover(function(){
	    	var projectId = $(this).attr('href');
	    	RolloverTimeline($('#projects_timeline a[href=' + projectId + ']'));   
	    }, function() {    	
	    	var projectId = $(this).attr('href');
	    	RolloutTimeline($('#projects_timeline a[href=' + projectId + ']'));   
	    });
	    
	    $('#projects_thumbnails a').click(function(){ return false; });
	
	    $('#projects_thumbnails a').mousedown(function(){
	    	$.address.value($(this).attr('href'));
	    	LoadFromTimeline($(this));
	    });
	    
	    /* CURRENT PROJECT IMAGE ROLLOVER */
	    $('div.project .project_image').hover(function(){
	    	$(this).find('img.over').stop().animate({
		            opacity: 1
		        }, ptlHoverInSpeed);    		
	    }, function(){
	    	$(this).find('img.over').stop().animate({
		            opacity: 0
		        }, ptlHoverOutSpeed);    		
	    });
    }
    
    /* DEEP LINKING */
	$.address.init(function(event) {	
	}).change(function(event) {   
		//update the page title		
        var pageTitleSize = $.address.title().split(' / ').length;
        var pageTitleBase = $.address.title().split(' / ')[pageTitleSize - 1];
        var pageTitleDynamic = $('a[href=' + event.value.split('/')[1] + ']').attr('title');
        
        if(event.value == '/#')
        	pageTitleDynamic = $('a[href=#' + latestProjectId + ']').attr('title');
        
        if(pageTitleDynamic)
        	$.address.title(pageTitleDynamic + ' / ' + pageTitleBase);        
    }).externalChange(function(event) {	    
        //load the right project                                                       
        if(event.value == '/#prj_all'){
        	if(LoadProject(totalProjects - 1)) currentProjectPosition = totalProjects - 1;
        }        	
        else if(event.value == '/#' || event.value == '/'){
        	if(LoadProject(0)) currentProjectPosition = 0;       
        }        	
        else{
        	var projectToLoadId = event.value.split('/')[1];        	
        	var projectToLoadPosition = parseInt($(projectToLoadId , '#projects').data('position')) - 1;        	
        	if(LoadProject(projectToLoadPosition)) currentProjectPosition = projectToLoadPosition;
        }        	
    });    
});

/*////////////////////////////////////// TIMELINE */
function LoadFromTimeline(link){
	if(!projectLocked){
    	var projectToLoadId = link.attr('href');    
    	var projectToLoadPosition = parseInt($(projectToLoadId , '#projects').data('position')) - 1;
    	
    	if(LoadProject(projectToLoadPosition)) currentProjectPosition = projectToLoadPosition;    	
	}    		
}

function RolloverTimeline(link){
	var projectTitle = link.attr('title');
    $('#projects_timeline_title').text(projectTitle);
    
    if(!link.parent('li').hasClass('current')){
        link.stop().animate({
	            backgroundPosition: "(0 0)"
	        }, ptlHoverInSpeed);
    }         
}

function RolloutTimeline(link){
	var projectLoading = $('#projects div.project:eq(' + loadingProjectPosition + ')');
    if(!link.parent('li').hasClass('current') && link.attr('href') != '#' + projectLoading.attr('id')){
        link.stop().animate({
	            backgroundPosition: "(0 14px)"
	        }, ptlHoverOutSpeed, function(){
	        	link.attr('style','');
	        });    		
    }    
}

/*////////////////////////////////////// PROJECTS */
function UpdateLinkPrevious(projectPosition){
	if(projectPosition == 0){
		$('#link_previous').hide();		
	}else {				
		var previousProjectPosition = parseInt(projectPosition) - 1;
		var previousProject = $('#projects div.project:eq(' + previousProjectPosition + ')');
		
		if($('#link_previous:hidden').length > 0){
			$('#link_previous').show();		
		}
		$('#link_previous')
			.attr('href', '#' + previousProject.attr('id'))
			.attr('title', 'Previous: ' + previousProject.find('h2').text());		
	}
}

function UpdateLinkNext(projectPosition){
	if(lastProject){
		$('#link_next').hide();		
	}else {
		var nextProjectPosition = parseInt(projectPosition) + 1;
		var nextProject = $('#projects div.project:eq(' + nextProjectPosition + ')');
		
		if($('#link_next:hidden').length > 0){
			$('#link_next').show();		
		}
		$('#link_next')
			.attr('href', '#' + nextProject.attr('id'))
			.attr('title', 'Next: ' + nextProject.find('h2').text());		
	}
}

function LoadProject(projectPosition) {
    projectLocked = true;
    loadingProjectPosition = projectPosition;
    if (debug) {
    	console.log('[loadProject ' + projectPosition + ' start] projectLocked:' + projectLocked);
    	//console.log('current:' + currentProjectPosition + ', toload:' + projectPosition);    	
	}
        
    if(projectPosition != currentProjectPosition){
    	var currentProject = $('#projects div.current');
		var projectToLoad = $('#projects div.project:eq(' + projectPosition + ')');
		var currentProjectTimeline = $('#projects_timeline li a[href=#' + projectToLoad.attr('id') + ']').parent('li');
	
		//Disable current project
		currentProject.find('h2').css('top', '5px').hide();
	    currentProject.find('div.project_copy').css('left', '140px').hide();
	    currentProject.find('div.project_details').css('bottom', '5px').hide();
	    currentProject.find('div.project_image img.default, #projects_thumbnails img').stop().animate({
        	opacity:0.2
        }, projectSlideSpeed);	
	    currentProject.removeClass('current').addClass('off');	
	
		//Update timeline current state
		$('#projects_timeline li.current').find('a').animate({
										            backgroundPosition: "(0 14px)"
										        }, projectSlideSpeed, function(){
										        	$(this).parent('li').removeClass('current').find('a').removeAttr('style');
										        	currentProjectTimeline.addClass('current').find('a').removeAttr('style');		
										        });		
	
	    //Slide projects
	    $('#projects').animate({
	        marginLeft: projectToLoad.data("offset")
	    }, projectSlideSpeed, "swing", function() {	        
	             	        
	        	
	        
	        //Reveal the project content	        	        
		        projectToLoad.find('h2').show().animate({
		        	top:0
		        }, 100);
		        
		        projectToLoad.find('div.project_copy').show().animate({
		        	left:145
		        }, 100);
		        
		        projectToLoad.find('div.project_details').show().animate({
		        	bottom:0
		        }, 100);	
	    		        	        
	        //Overview
	        /*
	        if(projectToLoad.find('#projects_thumbnails')){
	        	projectToLoad.removeClass('off');	   
	        	projectToLoad.addClass('current');
	        	projectLocked = false;            	        
	        }*/
	        
	        projectToLoad.removeClass('off');	   
	        projectToLoad.addClass('current');
	        projectLocked = false;            	  	        
	        
	        //Update previous & next links
	        UpdateLinkPrevious(projectPosition);
			UpdateLinkNext(projectPosition);
			
			
			
			if (debug) {
		    	console.log('[loadProject end] projectLocked:' + projectLocked);
		    	//console.log('current:' + currentProjectPosition + ', toload:' + projectPosition);    	
			}						 
	    });	
	    
	    //Flag if this is the last project
		    if(projectToLoad.data("position") == totalProjects){
		    	lastProject = true;	    		    		    	
			}else{
				lastProject = false;			
			}
	    
	    //Image opacity
	    projectToLoad.find('div.project_image img.default, #projects_thumbnails img').animate({
        	opacity:1
        }, projectSlideSpeed);
        
	    return true; 	    	    	    	     	
    }else{
    	projectLocked = false;   
    }
    return false;        
}

