var testTimer = 0;
var subError = false;
var dataAjax1 = null;
var dataAjax2 = null;
var emptyFieldChecking = false;


function getAbsoluteTop(elt,top) {
	// si ce n'est pas la balise html et que elt existe
	if ( elt.nodeName!='HTML' && elt != 'undefined' ){
		// on evite les td qui ont la même hauteur que leur tr
		if ( elt.nodeName!='TD') top += elt.offsetTop;
		getAbsoluteTop (elt.parentNode , top);
	}
	else hauteur = top;
}

function chAction(formId,obj) {
	resetFollowProfil();
	var jObj = $(obj);
	if(jObj.is('input')) {
		if(!obj.checked) return;
	}
	else if(!jObj.val().length) return;
	$('#' + formId).attr('action' ,'http://' + fl[obj.value] + '/login.php' )
}
function showBase() {
	if(arguments.length == 1) $('#search-type').css('display','none');
	else {
		$('#ctDef0').css('display','none');
		$('#ctDef1').css('display','none');
		$('#ctDef2').css('display','none');
		for( var i = 0; i < arguments.length; i++ ) {
			$('#ctDef' + arguments[i]).css('display','');
		}
		$('#search-type').css('display','');
	}
}
function shuffle(a,b) {
	return ( Math.round(Math.random())-0.5 );
}
function isNumeric(num) {
	var exp = new RegExp("^[0-9]+$","g");
	return exp.test(num);
}
function dayMonthAsPass() {
	var day		= $('[name="user[jj]"]').val();
	var month	= $('[name="user[mm]"]').val();

	if ((day != '' && day != 'jj') && (month != '' && month != 'mm') && $('#pass input').val() == '')
	{
		if (day.length == 1) day = '0' + day;
		if (month.length == 1) month = '0' + month;
		$('#pass input').attr('value',day + month);
		hideError($('#pass'));
	}
	if (day != '' && month != '' && $('[name="user[aa]"]').val() != '')
	{
		hideError($('#borndate'));
	}
}

function displayError(dd,text) {
	subError = true; /* signale qu'il y a une erreur sur le form et empeche le submit */
	dd.addClass('error');
	dd.children('.error').html(text);
	dd.children('.error').show();
}
function hideError(dd) {
	dd.children('.error').html(null);
	dd.children('.error').hide();
	dd.removeClass('error');
}

//******* Login validation ********//
var correctLogin = false;

function checkLogin() {
	correctLogin = false;
	text = '';
	var login = new String();
	login = ($('#login input').val());
	if ( login.length != 0 ) {
		if ( login.length >= 3 ) {
			if ( login.length <= 15 ) {
				if ( checkLoginSyntax(login) ) {
					if ( overLimitNumbers(login) == false ) {
						ajaxLoginCheck(ct,login);
						if (correctLogin !== true) text = notAvail;
					}
					else text = toomuchnumbers;
				}
				else text = badSyntax;
			}
			else text = tooLong;
		}
		else text = tooShort;

	}
	else {
		if ( emptyFieldChecking == true ) text = chooseLogin;
	}

	if ( correctLogin == false && text != '') displayError($('#login'),text);
	else hideError($('#login'));
}
function checkLoginSyntax(login) {
	var exp = new RegExp("^[0-9a-zA-Z_-]{3,15}$","g");
	ret = exp.test(login);
	return ret;
}
function overLimitNumbers(login) {
	var exp = new RegExp("[0-9]{5,}","g");
	return (exp.test(login));
}
function ajaxLoginCheck(ct,login) {
	$.ajax({
		async: false,
		type: "POST",
		url: "/js/testLogin.php",
		data: 'login=' + login + '&ct=' + ct ,
		success: function(msg) {
			if ( msg == 'true'  || msg == true  ) correctLogin = true;
		}
	});
}
function loginSuggestion()
{
	if (correctMail)
	{
		var email = $('input[name="user[email]"]').val();
		// gestion de la proposition de login
		var reg = new RegExp("[ ,@]+", "g");
		var login = email.split(reg);
		var inival = $('#login input').val();
		var login = login[0].replace(/[^_a-zA-Z0-9]+/g,'');
		login = login.substring(0, 15);
		if (inival == "") $('#login input').val(login);
	}
}

//******** Gender validation ********//
function checkGender() {
	dayMonthAsPass();
	if ( $("#sexe select").val() == '' ) {
		if ( ct != 2 ) displayError($('#sexe'),chooseSex);
	}
	else hideError($('#sexe'));
}

//******** Type validation ********//
function checkTypeRenc() {
//console.log($("#typerenc input[type=radio]:checked").length);
//if ( $("#typerenc input[type=radio]:checked").length == 0 ) {
//
//}
}

//******* Birth validation ********//
function checkBorn() {
	if (check18()) {
		if ( checkDay() && checkMonth() && checkYear() ) {
			hideError($('#borndate'));
			dayMonthAsPass();
		}
		else displayError($('#borndate'),chooseBirth);
	}
}

function checkDay()
{
	var val = $("#borndate #jj").val();
	if ( val != '' && val != jj && !isNaN(val) && val >= 1 && val <= 31 ) return true;
	else {
		$("#borndate #jj").css('color','#979391');
		$("#borndate #jj").attr('value',jj);
	}
	return false;
}
function checkMonth()
{
	var val = $("#borndate #mm").val();
	if ( val != '' && val != mm && !isNaN(val) && val >= 1 && val <= 12 ) return true;
	else {
		$("#borndate #mm").css('color','#979391');
		$("#borndate #mm").attr('value',mm);
	}
	return false;
}
function checkYear()
{
	var val = $("#borndate #aa").val();
	var objdate = new Date();
	var date = objdate.getFullYear();
	if ( val == '' || val == aaaa || !(!isNaN(val) && val <= (date-18) && val > (date-100)) ) {
		$("#borndate #aa").css('color','#979391');
		$("#borndate #aa").attr('value',aaaa);
		return false;
	}
	return true;
}
function check18() {
	var jj = $('[name="user[jj]"]').val();
	var mm = $('[name="user[mm]"]').val();
	var aa = $('[name="user[aa]"]').val();
	
	var d = new Date(aa,mm-1,jj);
	var birthMin = new Date();
	birthMin.setFullYear(birthMin.getFullYear()-18);
	birthMin.setHours(0, 0, 0, 0);
	if( d > birthMin ) {
		displayError($('#borndate'),noTeen);
		return false;
	}
	else 
	{
		hideError($('#borndate'));
		dayMonthAsPass();
		return true;
	}
}

function autoFocusElmnt(elmnt)
{
	var v = $(elmnt).attr('value');
	var type = $(elmnt).attr('id');
	if (type == 'jj' && v.length == 2) {
		if (checkDay(v)) $("#borndate #mm").focus();
		else {
			$(elmnt).attr('value','');
			$(elmnt).css('color','black');
		}
	}
	if (type == 'mm' && v.length == 2) {
		if (checkMonth(v)) $("#borndate #aa").focus();
		else {
			$(elmnt).attr('value','');
			$(elmnt).css('color','black');
		}
	}
}
/**
* Empeche de tapper autre chose que des chiffres
*/
function setOnlyNumeric(elmnt) 
{
	var pattern = new RegExp('[^0-9]+', 'g');
	var txt = $(elmnt).attr('value').replace(pattern,'');
	$(elmnt).attr('value',txt);
}
/*
* Gère le changement de champ manuel (tab ou click)
*/
function fillBornDate(elmnt) //blur
{
	var v = $(elmnt).attr('value');
	var type = $(elmnt).attr('id');
	if (v == '' || isNaN(v)) {
		switch (type) {
			case 'jj': checkDay();   break;
			case 'mm': checkMonth(); break;
			case 'aa': checkYear();  break;
		}
	}
	else {
		if (type == 'jj' && v.length == 1) $(elmnt).attr('value','0' + v);
		if (type == 'mm' && v.length == 1) $(elmnt).attr('value','0' + v);
	}
}
/**
* Switch les valeurs par défaut
*/
function focusBornDate(elmnt)
{
	var x = $(elmnt).attr('value');
	if (x == jj || x == mm || x == aaaa)
	{
		$(elmnt).attr('value','');
		$(elmnt).css('color','black');
	}
}

//********* Mail validation *********//
var correctMail = false;

function checkMail() {
	correctMail = false;
	var email = new String();
	email = $('#email input').val();
	if (email.length != 0) {
		var ajx = new String();
		msg = "";
		if ( email.length >= 3 ) {
			if ( checkMailSyntax(email) ) {
				var dmc = new String(); //double mail check (dmc)
				dmc = doubleEmailCheck(email);
				if ( dmc == true ) {
					ajx = ajaxEmailCheck(email);
					if ( ajx == true ) correctMail = true;
				}
				else {
					if (dmc != 'empty') msg = emailIncorrect;
					else msg = '';
					displayError($('#email'), msg);
					return;
				}
			}
		}
		if ( correctMail == false) {
			switch(ajx) {
				case 'blacklist':
					msg = blacklist;
					break;
				case "doublon":
					msg = doublon;
					break;
				case "syntax":
					msg = emailIncorrect;
					break;
				default:
					msg = emailIncorrect;
			}
			displayError($('#email'), msg);
		}
		else {
			hideError($('#email'));
			loginSuggestion();
			checkLogin();
		}
	}
	else {
		//hideError($('#email'));
		if ( emptyFieldChecking == true ) displayError($('#email'), chooseMail);
	}
}
function checkMailSyntax(email) {
	var verif = /^[\w.-]+@[\w-.]{2,}\.[a-z]{2,6}$/i;
	if ( verif.exec(email) == null ) return false;
	return true;
}
function doubleEmailCheck(email) {
	var reg1 = new RegExp("@(hotmail|live|yahoo)\\.","g");
	if (email.match(reg1)) {
		$('.mailagain').show();
		var $repeat = $('.mailagain #mailField2');
		if ($repeat.is(':visible')) {
			if ($repeat.val() == email) return true;
			if ($repeat.val() == "") return 'empty';
			return false;
		}
	} 
	else {
		$('.mailagain #mailField2').val('');
		$('.mailagain').hide();
		return true;
	}
}
function ajaxEmailCheck(email) {
	var res = false;
	$.ajax({
		async: false,
		type: "POST",
		url: "/js/testMail.php",
		data: 'email=' + email + '&ct=' + ct,
		success: function(msg){
			if ( msg == 'true' || msg == true ) res = true;
			else res = msg;
		}
	});
	return res;
}

//******* Password validation *****//
function checkPass() {
	var pass = new String();
	pass = $('#pass input').val();
	if (pass.length != 0) {
		msg = '';
		if ( (pass.length == 0) && emptyFieldChecking == true )
			msg = choosePassw;
		if ( (pass.length > 2) && (pass == '1234' || pass == '0000' || pass == $('[name="user[aa]"]').val()) )
			msg = soEasyPassw;
		if ( !isNumeric(pass) || pass.length != 4 )
			msg = invalidPass;
		if ( msg.length > 0 )
			displayError($('#pass'),msg);
		else
			hideError($('#pass'));
	}
	else {
		//hideError($('#pass'));
		if (emptyFieldChecking == true) displayError($('#pass'),choosePassw);
	}
}

//******* CGU validation **********//
function checkCGU() {
	if ( $("#cgu input[type=checkbox]:checked").length == 0 )
		displayError($('#cgu'),acceptCGU);
	else
		hideError($('#cgu'));
}

//******* Offres validation *******//
function checkPartners() {
	if ( $("#newsletter input[type=radio]:checked").length == 0 ) {
		displayError($('#newsletter'),answerOffre);
	}
	else hideError($('#newsletter'));
}



//******** Validations au submit *******************//
//******** Lance tous les tests ********************//
function checkAll(e) {
	subError = false;
	emptyFieldChecking = true;
	checkGender();
	checkBorn();
	if(correctMail == false) checkMail();
	checkLogin();
	checkPass();
	checkCGU();
	//checkPartners();
	if(subError == true) e.preventDefault();
	emptyFieldChecking = false;
	subError = false;
}


function initRegisterFormTooltip(tip, position)
{
	$("#sexe,#typerenc,#borndate,#email,#login,#pass").tooltip( {tip: tip, position: position} );
}

$(function(){

	$('#sexe input').bind(
		"click",
		function(){checkGender();}
	);
	$("#email input").bind(
		"blur",
		function(){checkMail();}
	);
	$("#email input").bind(
		"change",
		function(){correctMail = false;}
	);
	$("#login input").bind(
		"blur",
		function(){checkLogin();}
	);
	$("#login input").bind(
		"keypress",
		function(){
			clearTimeout(testTimer);
			testTimer = setTimeout('checkLogin()', 300);
		}
	);
	$("#borndate input").bind(
		"focus",
		function(){focusBornDate(this)}
	);
	$("#borndate input").bind(
		"blur",
		function(){fillBornDate(this)}
	);
	$("#borndate input").bind(
		"keyup",
		function(){
			setOnlyNumeric(this);
			autoFocusElmnt(this);
		}
	);
	$("#borndate input").bind(
		"change",
		function(){checkBorn();}
	);
	$("#pass input").bind(
		"blur",
		function(){checkPass();}
	);
	$("#cgu input").bind(
		"click",
		function(){checkCGU();}
	);
	$("#newsletter input").bind(
		"click",
		function(){checkPartners();}
	);

	// Form submit - general validation
	$("#register-form").bind(
		"submit",
		function(e){checkAll(e);}
	);

    $('#btn_sub').hover(
		function() {$(this).addClass('hover');},
		function() {$(this).removeClass('hover');}
    );

});

