/**
 * Fichier JS principal
 *
 * /resources/js/script.js
 */


/********** FONCTIONS **********/

/**
 * Vérifie si le tableau array contient la valeur p_val
 *
 * @param Array array
 * @param mixed p_val
 * @return boolean
 */
function inArray(array, p_val) {
	var l = array.length;
	
	for (var i = 0; i < l; i++) {
		if (array[i] == p_val) {
			return true;
		}
	}
	
	return false;
}

/**
 * Vide tous les champs d'un formulaire donné
 *
 * @param String selectorForm
 */
function resetForm(selectorForm) {
	$(':input', selectorForm)
		.not(':button, :submit, :reset, :hidden')
		.val('')
		.removeAttr('checked')
		.removeAttr('selected');
}

/**
 * Initialise l'effet hover des liens pour lesquels il faut changer l'image
 */
function initImagesHover() {
	$('.image_hover').each(function () {
		var imgElement = $(this).find('img');
		var imgSrc = imgElement.attr('src');
		var imgSrcHover = imgSrc.replace(/(\..+)$/, '_hover$1');
		
		var image = new Image();
		image.src = imgSrcHover;
		
		$(this).hover(
			function () {
				imgElement.attr('src', imgSrcHover);
			},
			function () {
				imgElement.attr('src', imgSrc);
			}
		);
	});
}

/**
 * Initialise l'effet d'apparition du sous-menu
 */
function initSubMenu() {
	var smenu = $('#menu .level2');
	
	if ( smenu.html() ) {
		smenu.css('bottom', '19px');
		smenu.animate({
			'bottom': '-=15px'
		}, 400);
	}
}


/********** SCRIPTS PROPRES À CHAQUE PAGE **********/

/**
 * Scripts de la page d'accueil
 */
var HomePage = {
	
	/**
	 * Initialise la réorganisation aléatoire des panneaux
	 * lors du clic sur le bouton "reload"
	 */
	initRandomPanels: function () {
		var tabIndexes = [], randomIndex, isAnimated = false;
		
		$('#reload_button').click(function () {
			if (!isAnimated) {
				isAnimated = true;
				
				$('.thumb').each(function (index) {
					do {
						if (index == 6 && !inArray(tabIndexes, index + 1)) {
							randomIndex = index + 1;
						} else {
							randomIndex = Math.round(Math.random() * 7);
						}
					}
					while (inArray(tabIndexes, randomIndex) || index == randomIndex);
					
					$(this).animate({
						top: $('#thumb_'+randomIndex).css('top'),
						left: $('#thumb_'+randomIndex).css('left')
					}
					, 1000, function () {
						if (index == 7) {
							isAnimated = false;
						}
					});
					
					tabIndexes.push(randomIndex);
				});
				
				tabIndexes = [];
			}
		});
	},
	
	/**
	 * Initialise le formulaire pour l'inscription à la newsletter
	 */
	initNewsletterForm: function () {
		var mailInput = $('#mail_input');
		var mailInputDefaultVal = mailInput.val();
		var isWaiting = false;
		
		mailInput.focus(function () {
			if ( $(this).val() == mailInputDefaultVal && !isWaiting ) {
				$(this).val('');
			}
		});
		
		mailInput.blur(function () {
			if ( $(this).val() == '' && !isWaiting ) {
				$(this).val(mailInputDefaultVal);
			}
		});
		
		$('#newsletter input[type=image]').click(function () {
			var email = mailInput.val();
			
			if ( !isWaiting && email != mailInputDefaultVal ) {
				isWaiting = true;
				mailInput.attr('readonly', 'readonly');
				mailInput.val("Envoi en cours...");
				
				$.ajax({
					type: 'POST',
					url: 'utils/addEmailNewsletter',
					data: 'email='+email,
					success: function (response) {
						isWaiting = false;
						mailInput.removeAttr('readonly');
						mailInput.val(mailInputDefaultVal);
						alert(response);
					}
				});
			}
			
			return false;
		});
	}
	
}

/**
 * Scripts de la page des collections
 */
var Collection = {
	
	/**
	 * Initialise les liens vers la colorbox
	 */
	initCboxLinks: function () {
		var cboxLinks = $('#collection .cboxLink');
		var activeElement = 'picture_01';
		var opacityInactive = '0.3';
		var opacityActive = '1';
		
		cboxLinks.css({'opacity': opacityInactive});
		$('#'+activeElement+'_link').css({'opacity': opacityActive});
		
		cboxLinks.livequery('click', function() {
			cboxLinks.css({'opacity': opacityInactive});
			$(this).css({'opacity': opacityActive});
			
			$('#collection .picture').hide();
			
			var matches = $(this).attr("href").match(/#(.+)$/);
			activeElement = matches[1];
			$('#'+activeElement).fadeIn();
			
			return false;
		});
		
		cboxLinks.hoverIntent(
			function() {
				if ( $(this).attr('id') != activeElement+'_link' ) {
					$(this).animate({'opacity': opacityActive}, 300);
				}
			},
			function() {
				if ( $(this).attr('id') != activeElement+'_link' ) {
					$(this).animate({'opacity': opacityInactive}, 300);
				}
			}
		);
	},
	
	/**
	 * Initialise la colorbox
	 *
	 * @param int cwidth Largeur de la colorbox
	 */
	initColorbox: function (cwidth) {
		$('.cboxElement').colorbox({
			rel: 'cboxElement',
			width: cwidth+'px'
		});
	}
	
}

/**
 * Scripts de la page presse
 */
var Presse = {
	
	/**
	 * Initialise le bouton "MORE"
	 *
	 * @return boolean (false)
	 */
	initDisplayMore: function () {
		var page = 1;
		var isWaiting = false;
		
		$('#presse_more a').click(function () {
			if ( !isWaiting ) {
				isWaiting = true;
				$('#presse_more').css('visibility', 'hidden');
				$('#ajax_loader').show();
				page ++;
				
				$.ajax({
					type: 'GET',
					url: 'presse/?page='+page,
					success: function (response, status, xhr) {
						isWaiting = false;
						
						if ( xhr.getResponseHeader('No-More-Elements') == '1' ) {
							$('#presse_more').hide();
						} else {
							$('#presse_more').css('visibility', 'visible');
						}
						
						$('#ajax_loader').hide();
						$('#presse').append(response);
					}
				});
			}
			
			return false;
		});
	}
	
}

/**
 * Scripts de la page blog
 */
var Blog = {
	
	/**
	 * Rend toute la publication cliquable
	 *
	 * @param String selector
	 */
	setLinkOnWholeElement: function (selector) {
		var element = $('#blog '+selector);
		var aElement = element.find('.texte').find('a');
		var splElement = element.find('.single_page_link');
			
		splElement.hover(
			function () {
				$(this).css('cursor', 'pointer');
				aElement.addClass('is_hover');
			},
			function () {
				$(this).css('cursor', 'auto');
				aElement.removeClass('is_hover');
			}
		);
		splElement.click(function () {
			location.href = aElement.attr('href');
		});
	},
	
	/**
	 * Initialise le bouton "MORE"
	 *
	 * @return boolean (false)
	 */
	initDisplayMore: function () {
		var page = 1;
		var isWaiting = false;
		
		$('#blog_more a').click(function () {
			if ( !isWaiting ) {
				isWaiting = true;
				$('#blog_more').css('visibility', 'hidden');
				$('#ajax_loader').show();
				page ++;
				
				$.ajax({
					type: 'GET',
					url: 'blog/?page='+page,
					success: function (response, status, xhr) {
						isWaiting = false;
						
						if ( xhr.getResponseHeader('No-More-Publications') == '1' ) {
							$('#blog_more').hide();
						} else {
							$('#blog_more').css('visibility', 'visible');
						}
						
						$('#ajax_loader').hide();
						$('#blog').append(response);
					}
				});
			}
			
			return false;
		});
	}
	
}

/**
 * Scripts de la page contact
 */
var Contact = {
	
	/**
	 * Initialise le formulaire pour l'envoi des données en AJAX
	 *
	 * @return boolean (false)
	 */
	initForm: function () {
		var isWaiting = false;
		
		$('#contact_form').submit(function () {
			if ( !isWaiting ) {
				isWaiting = true;
				$('#submit_button').css('visibility', 'hidden');
				$('#ajax_loader').show();
				
				var data = $(this).serialize();
				
				$.ajax({
					type: 'POST',
					url: 'contact',
					data: data,
					success: function (response, status, xhr) {
						isWaiting = false;
						$('#submit_button').css('visibility', 'visible');
						$('#ajax_loader').hide();
						
						if ( xhr.getResponseHeader('Has-Been-Sent') == '1' ) {
							// reset des champs si le mail a bien été envoyé
							resetForm('#contact_form');
						}
						
						alert(response);
					}
				});
			}
			
			return false;
		});
	}
	
}


/********** EXÉCUTION AUTOMATIQUE UNE FOIS LE DOCUMENT CHARGÉ **********/

$(document).ready(function () {
	initImagesHover();
});
