$(function() {
	// Reet scrollable panes on browser refresh.
	$('.scrollPane').scrollTo(0);
	$.scrollTo(0);
	
	// Enable smooth JS scrolling within the page.
	$(window)._scrollable();
});

var current_page = 1;
function change_gallery_page(url, nav, page, reverse, callback) {
	if (loadingSlide) return;
	if (page == 'project') {
		loadSlide('#section-portfolio', url);
		return false;
	};
	if (page == 'scrollproject') {
		$.scrollTo('#section-portfolio', 600, {onAfter: function(){
			loadSlide('#section-portfolio', url);
		}});
		return false;
	}
	if (page == 'back') {
		unloadSlide('#section-portfolio');
//		loadLeft('#section-portfolio', url);
		return false;
	}
	if (page == 'previous') page = current_page - 1;
	else if (page == 'next') page = current_page + 1;
	if (page == current_page || page < 1) return;
	var nbPages = $('.switcher li').length - 2;
	if (page > nbPages) return;
	url = url + "?page=" + page;
	var gallery = $(nav).parents('.portfolio-gallery');
	var direction = (page < current_page || reverse) ? 'left' : 'right';
	if (direction == 'left') {
		loadLeft('#section-portfolio .items', url, null, initPortfolioPage);
	}
	else {
		loadSlide('#section-portfolio .items', url, null, initPortfolioPage);
	}
	current_page = page;
	adjustGalleryPagination(page);
	return false;
}

function adjustGalleryPagination(page) {
	// Update navigation buttons.
	var nbPages = $('.switcher li').length - 2;
	$('.switcher li:first').fadeTo(1200, (page == 1) ? 0 : 1);
	$('.switcher li:first a').css('cursor',  (page == 1) ? 'default' : 'pointer');
	$('.switcher li:last').fadeTo(1200, (page == nbPages) ? 0 : 1);
	$('.switcher li:last a').css('cursor',  (page == nbPages) ? 'default' : 'pointer');
	$('.switcher li').removeClass('current');
	$('.switcher li:nth-child(' + (page + 1) + ')').addClass('current');
}

function get_nb_gallery_pages() {
	var nb_pages = $('#section-portfolio .switcher .page').length;
	if(nb_pages === 0) {
		nb_pages=1;
	}
	return nb_pages;
}

function go(parentBlocSelector, url, autoHeight, callback) {
	if (typeof autoHeight == "undefined") autoHeight = true;
	var container = $(parentBlocSelector);
	var content = $(parentBlocSelector + " > .content");
	var height = container.height();
	content.fadeOut(500, function() {
		$.AjaxCache.get(url, {page:1,ajax:true,load:true}, function(response) {
			$(content).html(response);
			content.css('height', autoHeight ? 'auto': height);
			if(typeof callback == 'function') {
				callback(response);
			}
		});
		content.fadeIn(200);
	});
}

function init_ajax_cache() {
	var nb_pages = get_nb_gallery_pages();
	$('#section-portfolio .porteFolioItem a').each(function() {
		$.AjaxCache.get($(this).attr('href') + '?nb_pages=' + nb_pages, {page:1,ajax:true});
	});
}

function init_gallery() {
	adjustGalleryPagination(1);
	init_ajax_cache();
	setTimeout("load_url()", 800);
}

function initPortfolioPage() {
	$('.porteFolioItem').mouseenter(function(event){
		showProjectItemDetail(0, $(this).find('.portefolioItemOver'));
	});
	$('.porteFolioItem').mouseleave(function(event){
		showProjectItemDetail(1, $(this).find('.portefolioItemOver'));
	});
}

function init_project() {
	$('.project-portfolio-gallery .portfolio-images a').lightbox().children('img').mouseenter(function() {
		var gallery = $(this).parents('.project-portfolio-gallery');
		var small = $(this).attr('src');
		var main_image = $(gallery).find('.main-image');
		var large = small.replace(/width=(\d+)&min_height=(\d+)$/, "width=" + $(main_image).width() + "&min_height=" + $(main_image).height());
		$(main_image).children('a').attr('href', $(this).parents('a').attr('href')).children('img').attr('src', large);
	});
	$('.project-portfolio-gallery .main-image a').lightbox();
}

function init_scrollable() {
	$('.scrollable').each(function() {
		if($(this).data('scrollable')) {
			return;
		}
		
		$(this).scrollable({speed:1000});
	}).data('page', 1);
	
	$('.scrollable .switcher .scroll-to:not(.active)').click(function() {
		var index = parseInt($(this).attr('rel'));
		var api = $(this).parents('.scrollable').data('scrollable');
		api.seekTo(index);
		
		return false;
	}).addClass('active');
}

function load_url() {
	if(window.location.href.indexOf('#') < 0) {
		return;
	}
	
	var request = window.location.href.substr(window.location.href.indexOf('#')+1);
	var regex = /(\d{4})-(portfolio-\w{2})-(.+)/;
	if(!request.match(regex)) {
		return;
	}
	
	var query = request.replace(regex, '$1/$2/$3');
	var nb_pages = get_nb_gallery_pages();
	slide('#section-portfolio', '/' + query, 'right', {nb_pages:nb_pages,page:1}, function() {
		$.scrollTo('#section-portfolio');
	});
}

var loadSlideRightMargin = 20;
var loadingSlide = false;
function loadSlide(parentSelector, url, param, callback) {
	loadingSlide = true;
	var parent = $(parentSelector);
	var container = $(parentSelector + " > .content");
	container.children().last().css('margin-right', '20px');
	var childWidth = parent.width();
	var scrollWidth = childWidth + loadSlideRightMargin;
//	container.width(container.width() + scrollWidth + 1);
	container.width(5000);
	$.AjaxCache.get(url, {ajax: true}, function(content) {
		var child = $('<div></div>');
		child.html(content);
		child.width(childWidth);
		child.css('margin-right', '20px');
		if (param) child.find('.param').html(param);
		container.append(child);
		parent.scrollTo('+=' + scrollWidth + 'px', 1200, {axis: 'x', easing: 'easeInOutQuint', onAfter: function(){
			loadingSlide = false;
			if (callback) callback(child);
		}});
	});
	return false;
}

function unloadSlide(parentSelector) {
	loadingSlide = true;
	var parent = $(parentSelector);
	var container = $(parentSelector + " > .content");
	var childWidth = parent.width();
	var scrollWidth = childWidth + loadSlideRightMargin;
	parent.scrollTo('-=' + scrollWidth + 'px', 1200, {axis: 'x', easing: 'easeInOutQuint', onAfter: function(){
		container.children().last().remove();
		container.width(container.width() - scrollWidth - 1);
		loadingSlide = false;
	}});
	return false;
}

/*
 *
 */
function loadLeft(parentSelector, url, param, callback) {
	loadingSlide = true;
	var parent = $(parentSelector);
	var container = $(parentSelector + " > .content");
	var childWidth = parent.width();
	var scrollWidth = childWidth + loadSlideRightMargin;

	var nbChilds = container.children().length;
	for (var i = 0; i < nbChilds - 1; i++) {
		container.children().first().remove();
	}
//	container.children().remove('div:not(:last)');
	container.width(5000);

	var child = $('<div></div>');
	child.width(childWidth);
	container.prepend(child);

	parent.scrollTo(0, 0, {axis: 'x', onAfter: function() {
		parent.scrollTo(scrollWidth + 'px', 0, {axis: 'x', onAfter: function() {
			$.AjaxCache.get(url, {ajax: true}, function(content) {
				child.html(content);
				if (param) child.find('.param').html(param);
				parent.scrollTo('-=' + scrollWidth + 'px', 1200, {axis: 'x', easing: 'easeInOutQuint', onAfter: function() {
					var lastChild = container.children().last();
					lastChild.remove();
					loadingSlide = false;
					if (callback) callback(child);
				}});
			});
		}});
	}});
}

var lastAboutPosition = 0;
function slideAbout(position) {
	// Determine direction and scroll amount.
	var diff = Math.abs(position - lastAboutPosition);
	if (diff == 0) return false;
	var isDirectionLeft = position < lastAboutPosition;
	var speed = 1200;
	
	// Perform slide effect.
	var parent = $('#section-about');
	var container = $('#section-about .content');
	var childWidth = $(container).children().first().outerWidth(true);
	$(parent).scrollTo((isDirectionLeft ? '-=' : '+=') + (childWidth * diff) + 'px', speed, {axis: 'x', easing: 'easeInOutQuint'});

	// Highlight selected title.
	$('.scroll-nav li').removeClass('on');
	$('.scroll-nav li:nth-child(' + (position + 1) + ')').addClass('on');

	lastAboutPosition = position;
	return false;
}

function slideLeft(parentSelector, speed) {
	var parent = $(parentSelector);
	var container = $(parentSelector + " .content");
	var childWidth = $(container).children().first().outerWidth(true);
	$(parent).scrollTo('-=' + childWidth + 'px', speed, {axis: 'x', easing: 'easeInOutQuint'});
	return false;
}

function slideRight(parentSelector, speed) {
	var parent = $(parentSelector);
	var container = $(parentSelector + " .content");
	var childWidth = $(container).children().first().outerWidth(true);
	$(parent).scrollTo('+=' + childWidth + 'px', speed, {axis: 'x', easing: 'easeInOutQuint'});
	return false;
}

function slide(container, url, direction, params, callback) {
	if($(container).hasClass('sliding')) {
		return false;
	}
	
	var direction_show = direction;
	var direction_hide = direction === 'right' ? 'left' : 'right';
	
	if(params === undefined) {
		params={};
	}
	
	params.ajax=true;
	$(container).addClass('sliding');
	$.AjaxCache.get(url, params, function(response) {
		var gallery_width = $(container).width();
		var new_content = $('<div class="content"><div class="content-wrap">' + response + '</div></div>');
		
		$(container).children('.content').hide('slide',
			{direction:direction_hide,easing:'easeInOutQuint'},
			1200,
			function(){ $(this).remove(); });
		
		$(new_content).hide();	
		$(container).prepend(new_content);
		
		$(new_content)
			.show('slide', {direction:direction_show,easing:'easeInOutQuint'}, 1200, function() {
				$(container).removeClass('sliding').css('z-index', 1);
				if(typeof callback === "function") {
					callback();
				}
			});
	});
	
	return false;
}

function showProjectItemDetail(direction, target) {
	if(direction == '0') {
		$(target).animate({easing: 'easeInOutQuint', top: '0'}, 150);
	} else {
		$(target).animate({easing: 'easeInOutQuint', top: '180'}, 150);
	}
}

function toggleShowcase() {
	if ($('#section-showcase').is(':visible')) {	
		$('#open-showcase a').text('open2');
		$('#section-showcase').slideUp({duration:'medium', easing:'easeInOutQuint'});
		$('#section-showcase div').animate({duration:'fast',opacity:0, easing:'easeOut'})
		$('#arrow').rotateLeft([angle='90']);
	} else {
		$('#open-showcase a').text('close2');
		$('#section-showcase').slideDown({duration:'medium', easing:'easeInOutQuint'});
		$('#section-showcase div').animate({duration:'fast',opacity:1, easing:'easeOut'})
		$('#arrow').rotateRight([angle=90]);
	}
}

