$(document).ready(function() {
	// Site configuration
	site      = {};
	site.url  = (baseUrl = $('base').attr('href'))
	    ? baseUrl.replace(new RegExp('[/]+$'), '')
	    : window.location.protocol + '//' + window.location.host
	;
	site.lang = 'undefined' == typeof lang ? 'en' : lang;

	// L10n menu
	var navigation = $('#main-nav');
	var images     = [
        'images/languages/' + site.lang + '/menu/home.png',
        'images/languages/' + site.lang + '/menu/about-us.png',
        'images/languages/' + site.lang + '/menu/news.png',
        'images/languages/' + site.lang + '/menu/products.png',
        'images/languages/' + site.lang + '/menu/support.png',
        'images/languages/' + site.lang + '/menu/contact-us.png'
	];

	for (var index = 0; index < images.length; index++) {
		var item = $('a:eq(' + index + ')', navigation);
		item.html(
			'<img src="' + site.url + '/' + images[index] + '" alt="' + item.text() + '" />'
		);
	}
	
	// Ajout de la class "has-js" sur la racine du document
	$(document.documentElement).addClass('has-js'),

	// Css compliance
	$('.active', navigation).addClass('current');
	
	// Liens d'impression
	$('a[rel=print]').live('click', function() {
		if ('undefined' !== typeof window.print) {
			print();
		}
	});
	
	// Liens externes
	$('a[rel=external]').live('mousedown', function() {
		$(this).attr("target", "_blank");
	}); 
	
	// Champ "recherche"
	$("[name=searchTerm]").focus(function() {
		$(this).val('');
	});
	
	// Annuler le comportement par défaut (uniquement pour certains événements)
	var globalEvents = ['click', 'submit'];
	
	$('.preventDefault')
		.bind(globalEvents.join(' '), function(e) {
			if (this === e.target) {
				e.preventDefault();
			}
		})
		.live(globalEvents.join(' '), function(e) {
			// TODO Ne fonctionne pas avec IE...
			if (this === e.target) {
				e.preventDefault();
			}
		}
	);
	
	
	var sl = $('#slides');
	
	if ( sl.length ) {
		sl.slides({
			preload : true,
			preloadImage : site.url + '/images/ajaxLoader.gif',
			play : 5000,
			pause : 2500,
			generatePagination : false,
			next : 'next',
			previous : 'prev',
			container : 'slides-container',
			hoverPause : true
		});
	};
	
	var sl2 = $('#slides2');
	
	if ( sl2.length ) {
		sl2.slides({
			preload : true,
			preloadImage : site.url + '/images/ajaxLoader.gif',
			play : 5000,
			pause : 2500,
			generatePagination : false,
			next : 'next',
			previous : 'prev',
			container : 'slides-container',
			hoverPause : true
		});		
	}
	
	/*Diaporama*/
	var slshow = $('#slideshow');
	
	if ( slshow.length ) {
		slshow.slides({
			preload : true,
			preloadImage : site.url + '/images/ajaxLoader.gif',
			effect : 'fade',
			crossfade : true,
			play : 5000,
			pause : 2500,
			container : 'slideshow-container',
			hoverPause : true
		});
	};
	
	/*Menu déroulant*/
	var sn = $('#secondary-nav');
	
	sn.find('li > a.current + ul, ul li.open > ul, ul li.open a.current + ul ').show();
	
	snNext = sn.find('> li > a.current + ul');
	
	if( sn.length && snNext.length ) {
		/*Menu premier niveau*/
		sn
			.find('> li > a')
			.click( function (e) {
				
				if ($(this).next().is('ul')) {
					e.preventDefault();
				} else {
					return;
				}
				
				if ( !$(this).hasClass('current') ) {
					sn
						.find('> li > a.current')
						.removeClass()
							.next('ul')
							.slideUp('fast');
					
					$(this)
						.addClass('current')
							.next('ul')
							.slideDown('fast');
				};
				
			})
		.end()
		/*Menu second niveau*/
			.find('ul li a')
			.click( function (e) {

				if ($(this).next().is('ul')) {
					e.preventDefault();
				} else {
					return;
				}
				
				if( !$(this).parent('li').hasClass('open') ) {
					$(this)
						.closest('ul')
							.find('a.current')
							.removeClass()
						.end()
							.find('> li.open')
							.removeClass()
								.find('ul')
								.slideUp('fast')
							.end()
						.end()
					.end()
						.parent()
						.addClass('open')
							.find('> ul')
							.slideDown('fast')
						.end()
					.end()
					.addClass('current')
				};
			});
	};
	
	/*Fancybox*/
	var ct = $('#tabs-container');
			
	var fOpt = {
		titlePosition : 'inside'
	};
	
	if ( ct.length ) {
		ct.find('dt a').fancybox(fOpt);
	};
	
	$('.fb').fancybox(fOpt);
	
	$('.link-mail').fancybox();
	
	$('.link-form').fancybox();
	
	var seeJobOpt = {
		autoDimensions : false,
		width : 700,
		height : 400
	}
	
	$('.link-see-job').fancybox(seeJobOpt);
	
	/*function equalHeight(group) {
		var tallest = 0;
		group.each(function() {
			var thisHeight = $(this).height();
			if(thisHeight > tallest) {
				tallest = thisHeight;
			}
		});
		
		group.height(tallest);
	}
	
	equalHeight($(".block-list .grid3"));*/
	
	// Modal forms submission
	$('.box-form form').live('submit', function (e) {
		$.ajax({
			dataType: 'json',
			type: 'POST',
			url: $(this).attr('action'),
			data: $(this).serialize(),
			success: function (json) {
				$('label', e.currentTarget).removeClass('error');
				$('span.error', e.currentTarget).remove();
				
				if (json.validationMessages) {
					for (var name in json.validationMessages) {
						var element = $('[name=' + name + ']:visible', e.currentTarget);
						
						element.siblings('label').addClass('error');
						
						for (var message in json.validationMessages[name]) {
							element.parent().append(
								$('<span class="error"/>').text(json.validationMessages[name][message])
							);
						}
					}
				}
				
				if (json.message) {
					alert(json.message);
				}
				
				if (json.success) {
					$.fancybox.close();
				}
			}
		});
		
		// TODO Hack ie, normalement, la classe .preventDefault devrait suffire
		if ($.browser.msie) {
			e.preventDefault();
		}
	});
	
	// Fields text length counter
	$('.maxlength-counter').live('focus', function(e) {
		var target       = $(e.currentTarget);
		var label        = target.nextAll('label:eq(0)');
		
		label = label.length
			? label
			: target.after(
				'<label for="' + target.attr('name') + '">' +
					'<strong class="counter"></strong>' +
					' characters remaining' +
				'</label>'
			).next()
		;
		
		if (!target.data('noble-count-initialized')) {
			var max_chars = target.attr('maxlength');
			
			if (max_chars) {
				target.removeAttr('maxlength');
			} else {
				max_chars = 512;
			}
			
			var options = {
		        max_chars: max_chars,
		        on_negative: 'error'
			};
			
			target.NobleCount(
				'label[for=' + label.attr('for') + '] .counter',
				options
			).data('noble-count-initialized', true);
		}
	});
});
