var ltie7 = ($.browser.msie && $.browser.version < 7);
var ltie8 = ($.browser.msie && $.browser.version < 8);
var ltie9 = ($.browser.msie && $.browser.version < 9);

$(function() {
	if (ltie7) {
		$('img[usemap]').css('border', 'none');
		$('input[type="radio"], input[type="checkbox"], input[type="file"], input[type="image"]').css('border', 'none');
	} else if (ltie8) {
		/* IE 7 Fix */
		if (!Array.indexOf) {
			Array.prototype.indexOf = function(obj) {
				for (var i = 0; i < this.length; i++) {
					if (this[i] == obj) {
						return i;
					}
				}
				return -1;
			};
		}

		$('#profilForm .submitEnregistrer').click(function() {
			$(this).parents('form').submit();
		});
		$('#profilForm .submit .profileLabel').click(function() {
			$(this).parents('form').submit();
		});
		$('#formRetirer .retirerConfirmerLabel').click(function() {
			$(this).parents('form').submit();
		});
		$('.validerTemoignageLabel').click(function() {
			$(this).parents('form').submit();
		});
		$('#grille_choix .finalSubmitLabel').click(function() {
			$(this).parents('form').submit();
		});
	}

	profile.init();
	login.init();
	inscription.init();

	timer.init(gameDuration);

	folding.init();

	popin.init();
	wait.init();
	grille.init();
	actionManager.init();
	checkWithdraw.init();

});

var message = function() {

	function _show(sMess) {
		if (ltie9) {
			alert(sMess);
		} else {
			apprise(sMess);
		}
	}

	// TODO ? une méthode error(sMess) ?

	return {show:_show};
}();

var profile = function() {

	function _init() {
		$('#mot_de_passe_inputs').hide();
		$('.mot_de_passe_link').bind('click', function(e) {
			e.preventDefault();
			$('#mot_de_passe_inputs').slideDown();
			$(this).hide();
		});

		$('#changer_photo').bind('change', function() {
			if ($(this).val() != '') {
				$(this).parents('form').submit();
			}
		});
		if ($('body').hasClass('modifier_profil')) {
			bjnDatePicker('date_naissance_jour', 'date_naissance_mois', 'date_naissance_annee', 'USER_birthdate');
		}
	}

	return {init:_init};
}();

var login = function() {

	function _init() {
		// Configuration de la dialog box
		$("#dialog_login").bind('dialogcreate', function (e, ui) {
			$('#dialog_login a.close').click(function(e) {
				$("#dialog_login").dialog('close');
				return false;
			});
			$('#formConnexion').submit(function(e) {
				$('#formConnexion ul.errorlist').html('');

				$.ajax('/user/login', {
					type: 'POST',
					data: {
						xhr: 'json',
						email: $('input#login_email').val(),
						password: $('input#login_password').val()
					},
					success: function(data) {
						if (data.aErrors != undefined) {
							for (field in data.aErrors) {
								var error = document.createElement('li');
								$(error).text(data.aErrors[field]);
								$('#formConnexion ul.errorlist').append(error);
								error = null;
							}
						}
						else {
							document.location = data.content;
						}
					}
				});
				return false;
			});
		});
		$("#dialog_login").dialog({
			autoOpen: false,
			modal: true,
			width: 380,
			resizable: false,
			draggable: false,
			dialogClass: 'no-titlebar',
			show: {
				effect: 'slide',
				direction: 'up'
			}
		});
		$("#login_link").click(function() {
			$("#dialog_login").dialog('open');
			return false;
		});
	}

	return {init:_init};
}();

var inscription = function() {


	function fieldError(jqNode, jqLabelNode, errorClass, action) {
		switch (action) {
			case 'show':
				if (null != jqNode) {
					jqNode.addClass('required');
				}
				if (null != jqLabelNode) {
					jqLabelNode.addClass('required');
				}
				$('#errors').show();
				$('li.' + errorClass).show();
				break;
			case 'hide':
				if (null != jqNode) {
					jqNode.removeClass('required');
				}
				if (null != jqLabelNode) {
					jqLabelNode.removeClass('required');
				}
				$('li.' + errorClass).hide();
				break;
		}
	}

	function checkCivility() {
		var fieldClass = 'civilite';
		if (1 != $('input[name="USER_civility"]:checked').length) {
			fieldError(
					$('fieldset.' + fieldClass),
					null,
					fieldClass,
					'show'
			);
			return false;
		}

		fieldError(
				$('fieldset.' + fieldClass),
				null,
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkEmail() {
		var pattern = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}$/i;
		var fieldClass = 'email';
		if (!pattern.test($('input[name="USER_email"]').val())) {
			fieldError(
					$('input[name="USER_email"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}
		fieldError(
				$('input[name="USER_email"]'),
				$('label[for="' + fieldClass + '"]'),
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkPassword() {
		var fieldClass = 'password';
		var value = $('input[name="USER_password"]').val();
		if (value.length < 4 || value.length > 20) {
			fieldError(
					$('input[name="USER_' + fieldClass + '"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}
		fieldError(
				$('input[name="USER_' + fieldClass + '"]'),
				$('label[for="' + fieldClass + '"]'),
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkBirthDate() {
		var pattern = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$/;
		var fieldClass = 'date_naissance';
		var value = $('input[name="USER_birthdate"]').val();
		if (!pattern.test($('input[name="USER_birthdate"]').val())) {
			fieldError(
					$('input[name="USER_birthdate"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}

		if (!checkAge()) {
			fieldError(
					$('input[name="USER_birthdate"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}

		fieldError(
				$('input[name="USER_birthdate"]'),
				$('label[for="' + fieldClass + '"]'),
				fieldClass,
				'hide'
		);
		return true;

		function checkAge() {
			var aDate = value.split('/');
			var birthJour = parseInt(aDate[0], 10);
			var birthMois = parseInt(aDate[1], 10);
			var birthAnnee = parseInt(aDate[2], 10);
			var today = new Date();
			var todayJour = today.getDate();
			var todayMois = today.getMonth()+1;
			var todayAnnee = today.getFullYear();

			if (birthMois > 12) {// contrôle d'un mois valide
				return false;
			}
			if ((birthMois == 1 || birthMois == 3 || birthMois == 5 || birthMois == 7 || birthMois == 8 || birthMois == 10 || birthMois == 12) && birthJour > 31) {// jour valide
				return false;
			}
			if ((birthMois == 4 || birthMois == 6 || birthMois == 9 || birthMois == 11) && birthJour > 30) {// jour valide
				return false;
			}

			if (birthMois == 2) {// février. 
				if ( (Math.floor(birthAnnee/4) == (birthAnnee/4)) && ( (Math.floor(birthAnnee/100) != (birthAnnee/100)) || (Math.floor(birthAnnee/400) == (birthAnnee/400)) ) ) {// Année bissextile ?
					if(birthJour > 29) {
						return false;
					}
				} else {
					if(birthJour > 28) {
						return false;
					}
				}
			}

			if (birthAnnee + 18 == todayAnnee) { // dix-huit ans dans l'année
				if (birthMois == todayMois) { // dix-huit ans dans le mois
					if (birthJour <= todayJour) { // tout juste 18 ans
						return true;
					} else { // pas encore dix-huit ans
						return false;
					}
				} else if(birthMois < todayMois) {// 18 ans passés.
					return true;
				} else {// 18 ans plus tard dans l'année
					return false;
				}
			} else if (birthAnnee + 18 < todayAnnee) { // dix-huit ans déjà dépassés.
				return true;
			} else { // moins de dix-huit ans.
				return false;
			}
		}
	}

	function checkLastname() {
		var fieldClass = 'nom';
		if (!($('input[name="USER_lastname"]').val().replace(/(^[\s]+|[\s]+$)/g, '').length > 0)) {
			fieldError(
					$('input[name="USER_lastname"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}
		fieldError(
				$('input[name="USER_lastname"]'),
				$('label[for="' + fieldClass + '"]'),
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkFirstname() {
		var fieldClass = 'prenom';
		if (!($('input[name="USER_firstname"]').val().replace(/(^[\s]+|[\s]+$)/g, '').length > 0)) {
			fieldError(
					$('input[name="USER_firstname"]'),
					$('label[for="' + fieldClass + '"]'),
					fieldClass,
					'show'
			);
			return false
		}
		fieldError(
				$('input[name="USER_firstname"]'),
				$('label[for="' + fieldClass + '"]'),
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkAddress() {
		var fieldClass = 'adresse';
		if (!($('input[name="USER_address"]').val().replace(/(^[\s]+|[\s]+$)/g, '').length > 0)) {
			fieldError(
					$('label[for="' + fieldClass + '"]'),
					$('input[name="USER_address"]'),
					fieldClass,
					'show'
			);
			return false;
		}
		fieldError(
				$('label[for="' + fieldClass + '"]'),
				$('input[name="USER_address"]'),
				fieldClass,
				'hide'
		);
		return true;
	}

	function checkZipcode() {
		var fieldClass = 'code_postal';
		if (($('input[name="USER_zipcode"]').val().replace(/(^[\s]+|[\s]+$)/g, '').length != 5) || isNaN($('input[name="USER_zipcode"]').val())) {
			fieldError(
					$('label[for="' + fieldClass + '"]'),
					$('input[name="USER_zipcode"]'),
					fieldClass,
					'show'
			);
			return false;
		}
		fieldError(
				$('label[for="' + fieldClass + '"]'),
				$('input[name="USER_zipcode"]'),
				fieldClass,
				'hide'
		);
		return true;
	}


	function checkCity() {
		var fieldClass = 'ville';
		if (!($('input[name="USER_city"]').val().replace(/(^[\s]+|[\s]+$)/g, '').length > 0) ) {
			fieldError(
					$('label[for="' + fieldClass + '"]'),
					$('input[name="USER_city"]'),
					fieldClass,
					'show'
			);
			return false;
		}
		fieldError(
				$('label[for="' + fieldClass + '"]'),
				$('input[name="USER_city"]'),
				fieldClass,
				'hide'
		);
		return true;
	}


	function checkBargain() {
		var fieldClass = 'offres';
		if (1 != $('input[name="USER_bargain"]:checked').length) {
			fieldError(
					$('fieldset.' + fieldClass),
					null,
					fieldClass,
					'show'
			);
			return false;
		}

		fieldError(
				$('fieldset.' + fieldClass),
				null,
				fieldClass,
				'hide'
		);
		return true;
	}


	function _init() {
		if (!$('body').hasClass('inscription')) {
			return;
		}

		$('.errorItem').hide();
		var bckErrors = $('.backendErrors li.errorItem');
		if (0 < bckErrors.length) {
			$('div.errors').show();
			$('.backendErrors li.errorItem').show();
			$.each(bckErrors, function(index, value){
				$('input[name="' + $(value).attr('rel')+ '"]').addClass('required');
				$('label[for="' + $('input[name="' + $(value).attr('rel')+ '"]').attr('id') + '"]').addClass('required');
			});
		}
		$('#inscriptionForm').submit(function(e) {
			var iErrors = 0;

			(!checkCivility()) ? iErrors++ : false;
			(!checkLastname()) ? iErrors++ : false;
			(!checkFirstname()) ? iErrors++ : false;
			(!checkEmail()) ? iErrors++ : false;
			(!checkPassword()) ? iErrors++ : false;
			(!checkBirthDate()) ? iErrors++ : false;
			(!checkAddress()) ? iErrors++ : false;
			(!checkZipcode()) ? iErrors++ : false;
			(!checkCity()) ? iErrors++ : false;
			(!checkBargain()) ? iErrors++ : false;

			if (iErrors) {
				$('.errors').show();
				return false;
			} else {
				$('.errors').hide();
				return true;
			}
		});

		if ($.browser.msie) {
			$('label[for="valider"]').click(function(){$('#inscriptionForm').submit()});
		}
	}

	return {init:_init};
}();

var popin = function() {
	var popinWrapper;

	function _init() {
		$('#contenu').prepend(
				'<div id="popinWrapper">' +
						'<div class="contenuHaut"></div>' +
						'<div class="contenuInner"><div class="contenuInnerContent">' +
						'<a href="" class="close" style="margin-top: 0;">X Fermer</a>' +
						'<iframe style="width: 100%; height: 100%" src="" frameborder="0" class="temporaryExplanations" />' +
						'</div></div>' +
						'<div class="contenuBas"></div>' +
						'</div>');

		popinWrapper = $('#popinWrapper');

		setTimeout(function(){
			$('#popinWrapper .contenuInnerContent').css( { 'height' : $('#container').height() } );
		}, 100);

		$('#popinWrapper .close').click(function(e) {
			e.preventDefault();
			_hide();
		});

		_hide();
	}

	function _aleat() {
		_show();
		$('iframe.temporaryExplanations').attr('src', '/_html/selection.html');
	}

	function _suppr() {
		_show();
		$('iframe.temporaryExplanations').attr('src', '/_html/effacer.html');
	}

	function _gestion() {
		_show();
		$('iframe.temporaryExplanations').attr('src', '/_html/gerer.html');
	}

	function _sauvegarde() {
		_show();
		$('iframe.temporaryExplanations').attr('src', '/_html/sauvegarder.html');
	}

	function _show() {
		popinWrapper.show();
	}

	function _hide() {
		popinWrapper.hide();
	}

	return {
		init		:_init,
		aleat		:_aleat,
		suppr		:_suppr,
		sauvegarde	:_sauvegarde,
		gestion		:_gestion
	};
}();

/* Timer on each page */
var timer = function() {
	var time;
	var gameDuration;

	function _init(duration) {
		time = $('#tirageHeure').text();
		if (duration > 0) {
			gameDuration = parseInt(duration);
		}

		if (time) {
			time = time.match(/([\d]+)\s*h\s*([\d]+)\s*mn\s*([\d]+)\s*s/i);
			time = {
				hours:	 parseInt(time[1], 10),
				minuts:	 parseInt(time[2], 10),
				seconds: parseInt(time[3], 10)
			};

			setInterval(decrement, 1000);
		}
	}

	function decrement() {
		time.seconds--;
		if (time.seconds < 0) {
			time.minuts--;
			time.seconds = 59;
			if (time.minuts < 0) {
				time.hours--;
				time.minuts = 59;
				if (time.hours < 0) {
					if (gameDuration > 0) {
						time.hours = gameDuration-1;
					} else {
						time.hours = 23;
					}
				}
			}
		}
		$('#tirageHeure').html(
				(time.hours.toString(10).length == 1 ? '0' + time.hours : time.hours) + 'h ' +
						(time.minuts.toString(10).length == 1 ? '0' + time.minuts : time.minuts) + 'mn ' +
						(time.seconds.toString(10).length == 1 ? '0' + time.seconds : time.seconds) + 's'
		);
	}

	return {init:_init};
}();

/* Event Folding */
var folding = function() {
	function _init() {
		$('.actualite').fold('.actualiteOpened', '.actu_content');
		$('.faqListItem').fold('.faqItemOpened', '.faq_content');

		window.onload = function() {
			fold_menu();
		};
	}

	function fold_menu() {
		var profil_argent = $('#profilArgentList');
		var profil_grilles = $('#profilGrillesList');

		if (!$("#profilArgent").hasClass('profilSelected')) {
			profil_argent.hide();
		}

		if ($("#profilGrilles").hasClass('profilSelected')) {
			profil_grilles.css({height:'26px'});
		}
		if (!$("#profilGrilles").hasClass('profilSelected')) {
			profil_grilles.hide();
		}

		$('#profilArgent a').bind('click', function(e) {
			//e.preventDefault();
			if (profil_argent.is(':hidden')) {
				$('#profilArgent').addClass('profilListOpened');
			} else {
				$('#profilArgent').removeClass('profilListOpened');
			}
			profil_argent.slideToggleFix();
		});

		$('#profilGrilles a').bind('click', function(e) {
//			e.preventDefault();
			if (profil_grilles.is(':hidden')) {
				$('#profilGrilles').addClass('profilListOpened');
			} else {
				$('#profilGrilles').removeClass('profilListOpened');
			}
			profil_grilles.slideToggleFix();
		});

		return (false);
	}

	return {init:_init};
}();


/* Fold plugin */
(function($) {
	$.fn.fold = function(class_if_opened, folding_content) {
		var target = window.location.hash.replace('#', '');
		var first = this.filter(':first');
		var title = $(':header', this);
		var all_content = title.siblings(folding_content);

		class_if_opened = class_if_opened.replace('.', '');

		/* Hide all */
		all_content.hide();

		/* Show target if in query string */
		if (target) {
			var folding_target = $(folding_content, $('#' + target));
			folding_target.show();
			folding_target.parents('li').addClass(class_if_opened);
		} else {
			var first_content = $(folding_content, first);
			first_content.show();
			first_content.parents('li').addClass(class_if_opened);
		}

		title.wrapInner('<a href="#"></a>');
		title.css('cursor', 'pointer');

		title.bind('click', function(e) {
			var content = $(this).siblings(folding_content);

			e.preventDefault();
			if (content.is(':hidden')) {
				all_content.slideUp("fast");
				all_content.parents('li').removeClass(class_if_opened);

				content.slideDown("fast");
				content.parents('li').addClass(class_if_opened);
				window.location.hash = '#' + content.parents('li').attr('id');

			} else {
				content.slideUp("fast");
				content.parents('li').removeClass(class_if_opened);
				window.location.hash = '';
			}
		});
		return (this);
	};
})(jQuery);

/* slideToggle plugin fix */
(function($) {
	$.fn.slideToggleFix = function(callback) {
		var $el = $(this);
		var height = $el.data("originalHeight");
		var visible = $el.is(":visible");

		// get the original height
		if (!height) {
			// get original height
			height = $el.height();

			// update the height
			$el.data("originalHeight", height);
			// if the element was hidden, hide it again
			if (!visible) $el.hide().css({height: 0});
		}

		// expand the knowledge (instead of slideDown/Up, use custom animation which applies fix)
		if (!visible) {
			$el.show().animate({height: height}, {duration: 250, complete:function () {
			}});
		} else {
			$el.animate({height: 0}, {duration: 250, complete:function () {
				$el.hide();
			}});
		}
		return (this);
	};
})(jQuery);

