/* MSG ERRORS
--------------------------------------------------------------------------------------------------------------------------------------*/

var msgOK			= "OK";
var msgPresence		= "Champs obligatoire";
var msgLength3_15	= "Doit contenir entre 3 et 12 caractères";
var msgLength6_15	= "Doit contenir entre 6 et 15 caractères";
var msgAlpha		= "Caractères alphanumériques uniquement";
var msgNumeric		= "Doit être un nombre";
var msgIngredient	= "Doit contenir au moins 1 ingrédient";
var errPassConf		= "Doit être identique au mot de passe";
var errEmailConf	= "Doit être identique à votre email";
var errEmail		= "Email invalide";

/* COMMON
--------------------------------------------------------------------------------------------------------------------------------------*/

$(function(){
	initMenu();
	initLightboxes();
	
	if($('.stdOnglets')[0]) initTabs();
	
	$(window).bind('resize', function(){
		$('#facybox .content > div').css('position', 'static');
	});
});

/* FUNCTIONS
--------------------------------------------------------------------------------------------------------------------------------------*/

function initTabs(){
	$('.tabContent').not('.open').hide();
	
	$('.stdOnglets .menu a').click(function(){
		$(this).parent().find('a').removeClass('active');
		$(this).addClass('active');
		
		$(this).parent().parent().find('.tabContent').hide();
		$($(this).attr('href')).show();
		
		return false;
	});
}

// Get URL parameters
$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});

function launchVideo(video){
	$.facybox('<div id="lbVideo"><div id="playerVideo"></div></div>');
	var flashvars = {
		'SITE_URL'	: SITE_URL,
		'VIDEO' : TEMPLATE_URL+'/swf/'+video
	};
	
	swfobject.embedSWF(TEMPLATE_URL+"/swf/player.swf", "playerVideo", "600", "338", "9.0.262", TEMPLATE_URL+"/swf/expressInstall.swf", flashvars, {}, {});
			
	return false;
}

function initLightboxes(){
	// Lightbox on page load
	$.facybox.settings.opacity = 0.7;
	
	if($.getUrlVar('fb')){
		switch($.getUrlVar('fb')){
			case 'oubli' : 
				if($.getUrlVar('id') && $.getUrlVar('c')) triggerFB(SITE_URL+'/oubli-code/?etape=2&id='+$.getUrlVar('id')+'&c='+$.getUrlVar('c'), false, 'facyStdMsg');
				break;
			case 'ins' : 
				$.facybox("Votre inscription s'est déroulée avec succès", 'facyStdMsg');
				break;
			case 'log' : 
				$.facybox("Vous êtes désormais connecté", 'facyStdMsg');
				break;
			case 'joue' : 
				$.facybox("Vous avez déjà joué pour cette période.", 'facyStdMsg');
				break;
		}
	}
	
	// Global
	$('.facy').facybox();
	
	// Facy Video
	$('.facyVideo').click(function(){
		$.facybox('<div id="lbVideo"><div id="playerVideo"></div></div>');
		var flashvars = {
			'SITE_URL'	: SITE_URL,
			'VIDEO' : $(this).attr('href')
		};
		
		swfobject.embedSWF(TEMPLATE_URL+"/swf/player.swf", "playerVideo", "600", "338", "9.0.262", TEMPLATE_URL+"/swf/expressInstall.swf", flashvars, {}, {});
		
		pageTracker._trackPageview($(this).attr('href'));
		
		return false;
	});
	
	// Connexion
	$('.fbLogin').live('click', function(){
		triggerFB($(this).attr('href'), function(){
			initLoginForm();
		});
		return false;
	});
	
	// Inscription
	$('.fbIns').live('click', function(){
		triggerFB($(this).attr('href'), function(){
			initInsForm();
			initLoginForm();
		});
		return false;
	});
	
	// Oubli code
	$('.fbCode').live('click', function(){
		triggerFB($(this).attr('href'), function(){
			initOubliForm();
		});
		return false;
	});
	
	// Désinscription
	$('#fbDesin').click(function(){
		triggerFB($(this).attr('href'), function(){
			initDesinForm();
		});
		return false;
	});
	
	// Contact
	$('.fbContact').click(function(){
		triggerFB($(this).attr('href'), function(){
			initContactForm();
		});
		return false;
	});
}

// Lance la lightbox ainsi que la fonction passé en paramètre une fois chargée
function triggerFB(href, fn, classe){
	jQuery.facybox(function(){
		$.get(href, function(data){
			$.facybox(data, classe);
			if(typeof fn === "function") fn();
		});
	});
}

function initMenu(){
	// Cat
	/******************** A CHANGER ****************/
	$('#menu .AOC').hover(function(){
		$(this).stop(true).animate({marginTop:'0px'}, 300);
	}, function(){
		if(!$(this).hasClass('active')) $(this).stop(true).animate({marginTop:'-118px'}, 300);
	});
	
	// Sidebar Menu
	var active = $('#sidebar .active')[0];
	$('#sHover').css({'display':'block', 'opacity':0});
	$('#sHover a').css('backgroundPosition', '50px -241px');
	
	if(active){
		$('#sHover').animate({top:($(active).offset().top-1)+'px', 'opacity':1}, 1000);
		$('#sHover a').animate({backgroundPosition:"50px -"+getMenuPos(parseInt($(active).attr('id').substr(5), 10))+"px"}, 1000).attr('href', $(active).find('a').attr('href'));
	}
	
	$('#sidebar li').hover(function(){
		// Scroll the hover annd move the background
		var num = parseInt($(this).attr('id').substr(5), 10);
		var elem = $(this);
		
		$('#sHover').stop().animate({top:($(this).offset().top-1)+"px", 'opacity':1}, 300);
		$('#sHover a').attr('href', elem.find('a').attr('href')).stop().animate({backgroundPosition:"50px -"+getMenuPos(num)+"px"}, 300);
	}, function(e){
		var event = e;
		var elem = $(this);
		
		// Si un élément est actif et que la souris est en dehors du hover, scroll sur l'elem active
		var active = $('#sidebar .active')[0];
		if(active){
			var offset = elem.offset();
			
			if(e.pageY < offset.top || e.pageY > offset.top + elem.height()){
				$('#sHover').stop().animate({top:($(active).offset().top-1)+'px', 'opacity':1}, 300);
				$('#sHover a').stop().animate({backgroundPosition:"50px -"+getMenuPos(parseInt($(active).attr('id').substr(5), 10))+"px"}, 300).attr('href', $(active).find('a').attr('href'));
			}
		}
	});
	
	$('#sidebar').mouseleave(function(){
		var active = $('#sidebar .active')[0];
		if(active){
			$('#sHover').animate({top:($(active).offset().top-1)+'px'}, 300);
			$('#sHover a').stop().animate({backgroundPosition:"50px -"+getMenuPos(parseInt($(active).attr('id').substr(5), 10))+"px", 'opacity':1}, 300).attr('href', $(active).find('a').attr('href'));
		}else{
			$('#sHover').stop().animate({'opacity': 0, 'top': '500px'}, 300, function(){$(this).css('top','100px')});
		}
	});
}

function getMenuPos(num){
	switch(num){
		case 1 : return 241;
		case 2 : return 280;
		case 3 : return 319;
		case 4 : return 358;
		case 5 : return 397;
		case 6 : return 440;
	}
}

/* FORMS
--------------------------------------------------------------------------------------------------------------------------------------*/

function initInsForm(){
	// Nom
	var insNom = new LiveValidation('ins_nom', {onlyOnSubmit:true, validMessage:msgOK});
	insNom.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Prénom
	var insPrenom = new LiveValidation('ins_prenom', {onlyOnSubmit:true, validMessage:msgOK});
	insPrenom.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Adresse
	var insAdresse = new LiveValidation('ins_adresse', {onlyOnSubmit:true, validMessage:msgOK});
	insAdresse.add(Validate.Presence, {failureMessage:msgPresence});
	
	// CP
	var insCP = new LiveValidation('ins_cp', {onlyOnSubmit:true, validMessage:msgOK});
	insCP.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Ville
	var insVille = new LiveValidation('ins_ville', {onlyOnSubmit:true, validMessage:msgOK});
	insVille.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Mdp
	var insPass = new LiveValidation('ins_mdp', {onlyOnSubmit:true, validMessage:msgOK});
	insPass.add(Validate.Presence, {failureMessage:msgPresence});
	insPass.add(Validate.Length, {minimum:4, maximum:15, tooShortMessage:msgLength6_15});
	
	// Email
	var insEmail = new LiveValidation('ins_email', {onlyOnSubmit:true, validMessage:msgOK});
	insEmail.add(Validate.Presence, {failureMessage:msgPresence});
	insEmail.add(Validate.Email, {failureMessage:errEmail});
	
	
	
	$('.form-inscription > .form-checkbox > input[type="checkbox"]').each(function() {
		if ($(this).attr('checked') == true) {
			$(this).parent().addClass('checked');
		}
	});
	
	$('.form-inscription > .form-checkbox').live('click', function() {
		$(this).children('input[type="checkbox"]').attr('checked', !$(this).children('input[type="checkbox"]').attr('checked'));
		
		if($(this).children('input[type="checkbox"]').attr('checked') == true) {
			$(this).addClass('checked');
		}
		else {
			$(this).removeClass('checked');
		}
	});
	
	setAjaxRequest('form-inscription', [insNom, insPrenom, insAdresse, insCP, insVille, insPass, insEmail], true, SITE_URL+'/comment-jouer/');
}

function initOubliForm(){
	// Email
	var oubEmail = new LiveValidation('oub_email', {onlyOnSubmit:true, validMessage:msgOK});
	oubEmail.add(Validate.Presence, {failureMessage:msgPresence});
	oubEmail.add(Validate.Email, {failureMessage:errEmail});
	
	setAjaxRequest('formOubli', [oubEmail], false);
}

function initContactForm(){
	// Nom
	var insNom = new LiveValidation('conNom', {onlyOnSubmit:true, validMessage:msgOK});
	insNom.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Prénom
	var insPrenom = new LiveValidation('conPrenom', {onlyOnSubmit:true, validMessage:msgOK});
	insPrenom.add(Validate.Presence, {failureMessage:msgPresence});
	
	// Email
	var insEmail = new LiveValidation('conEmail', {onlyOnSubmit:true, validMessage:msgOK});
	insEmail.add(Validate.Presence, {failureMessage:msgPresence});
	insEmail.add(Validate.Email, {failureMessage:errEmail});
	
	// Nom
	var insMsg = new LiveValidation('conMsg', {onlyOnSubmit:true, validMessage:msgOK});
	insMsg.add(Validate.Presence, {failureMessage:msgPresence});
	
	setAjaxRequest('form-contact', [insNom, insPrenom, insEmail, insMsg], false);
}

function initDesinForm(){
	// Mdp
	var desPass = new LiveValidation('des_mdp', {onlyOnSubmit:true, validMessage:msgOK});
	desPass.add(Validate.Presence, {failureMessage:msgPresence});
	desPass.add(Validate.Length, {minimum:4, maximum:15, tooShortMessage:msgLength6_15});
	
	setAjaxRequest('formDesin', [desPass], true, SITE_URL+'/?des=1');
}

function initLoginForm(){
	// Mdp
	var logPass = new LiveValidation('log_mdp', {onlyOnSubmit:true, validMessage:msgOK});
	logPass.add(Validate.Presence, {failureMessage:msgPresence});
	logPass.add(Validate.Length, {minimum:4, maximum:15, tooShortMessage:msgLength6_15});
	
	// Email
	var logEmail = new LiveValidation('log_email', {onlyOnSubmit:true, validMessage:msgOK});
	logEmail.add(Validate.Presence, {failureMessage:msgPresence});
	logEmail.add(Validate.Email, {failureMessage:errEmail});
	
	setAjaxRequest('form-connexion', [logPass, logEmail], true, SITE_URL+'/comment-jouer/');
}

function setAjaxRequest(formID, tabFields, redir, page){
	var form = $('#'+formID);
	
	form.bind('submit', function(){
		// Suppression des messages d'erreur
		$('#'+formID+' .formError').remove();
		
		// If form is OK
		if(LiveValidation.massValidate(tabFields)){
			//showAjaxLoader();
			
			var fields = form.find('input, textarea, select').serializeArray();
			$.getJSON(form.attr('action'), fields, function(data){
				//showBtnSend();
				
				if(data.error){
					// Affichage Erreur
					form.append($('<div/>', {
						'class' : 'formError',
						text : data.error
					}));
				}else{
					if(redir) window.location.href = page;
					else $.facybox(data.ok, 'facyStdMsg');
				}
			});
		}
		return false;
	});
}
