/*
** Fait par Julien PINTO le 15/07/2009
**
** Fonctions de verification de fornulaire.
*/

var check_input = true;
var	check_numbers = false;

var	timer = false;

/* Quelques pointeurs de fonction */
var init_event_form_inscription = function	init_event_form_inscription(elements, elements_select)
{
	for (var i = 0; i < elements.length; i++)
	{
		if (elements[i].tagName.toLowerCase() != 'checkbox')
			add_event_form(elements[i]);
	}
	for (var i = 0; i < elements_select.length; i++)
		add_event_form(elements_select[i]);
}

var init_event_form_survol = function	init_event_form_survol(elements, elements_select)
{
	check_input = false;
	check_numbers = true;
	for (var i = 0; i < elements.length; i++)
	{
		if (elements[i].tagName.toLowerCase() != 'checkbox')
			add_event_form(elements[i]);
	}
	for (var i = 0; i < elements_select.length; i++)
		add_event_form(elements_select[i]);
}

var verif_all_form = function	verif_all_form(elements, elements_select)
{
	var		errors = new Array();
	var		have_conjoint = false;
	
	for (var i = 0; i < elements.length; i++)
	{
		if (elements[i].type.toLowerCase() == 'checkbox' ||
			elements[i].type.toLowerCase() == 'image' ||
			elements[i].type.toLowerCase() == 'radio')
		{
			if (elements[i].type.toLowerCase() == 'checkbox' && elements[i].name == 'have_conjoint')
			{
				if (!elements[i].checked)
					i += 8;
				else
					have_conjoint = true;
			}
			continue ;
		}
		if (!check_input_by_type(elements[i], true))
			errors.push('- '+elements[i].name+' incorrect ou non renseign&eacute;.');	
	}
	if (elements_select[0].value == '')
		errors.push('- '+elements_select[0].name+' incorrect ou non renseign&eacute;.');
	if (have_conjoint && elements_select[1].value == '')
		errors.push('- '+elements_select[1].name+' incorrect ou non renseign&eacute;.');
	if (errors.length > 0)
	{
		show_errors_list(errors);
		return false;
	}
	return true;
}
/* Fin des pointeurs de fonction */

/*
** Verification des champs
*/
function	show_check_waiter(source, wait)
{
	var		container;
	
	container = source.parentNode;
	if (!container || !(container = container.parentNode) ||
		!(container = container.getElementsByTagName('td')) || !(container = container[2]))
	{
		return false;
	}
	if (wait)
		container.innerHTML = '<img src="'+absolute_path_http+'images/ajax-loader.gif" alt="En attente title="En attente" />';
	else
		container.innerHTML = '';
}

function	show_verification_result(source, right)
{
	var		container;
	
	container = source.parentNode;
	if (!container || !(container = container.parentNode) ||
		!(container = container.getElementsByTagName('td')) || !(container = container[2]))
	{
		return false;
	}
	if (right)
		container.innerHTML = '<img src="'+absolute_path_http+'images/icones/valid_small.png" alt="Champ valide" title="Champ valide" /> <span style="color: green;">Ok</span>';
	else
		container.innerHTML = '<img src="'+absolute_path_http+'images/icones/error.png" alt="Champ invalide" title="Champ invalide" /> <span style="color: red;">Err</span>';
	return true;
}

function	check_value(source, reg)
{
	var		result_container;
	
	if (source.value.match(reg))
		show_verification_result(source, true);
	else
	{
		show_verification_result(source, false);
		return false;
	}
	return true;
}

function	check_input_by_type(source, strict)
{
	var		reg;
	var		string_input = new Array('nom', 'prenom', 'nom conjoint', 'ville');
	
	timer = false;
	if (source.tagName.toLowerCase() == 'select' || source.name == 'telephone fixe' || 
		source.name == 'telephone portable' || (!strict && source.value == ''))
	{
		show_check_waiter(source, false);
		return true;
	}
	if (source.name == 'email')
		reg = new RegExp('^[a-zA-Z0-9_.-]{2,}@[a-zA-Z0-9_.-]{2,}[\.][a-z]{2,4}$', 'g');
	else if (source.name == 'adresse')
		reg = new RegExp('^[a-zA-Z0-9éèàçôïîö\'_.\ -]{2,}$', 'g');
	else if (in_array(string_input, source.name))
		reg = new RegExp('^[a-zA-Zéèàçôïîö\'\ _.-]+$', 'g');
	else
		reg = new RegExp('^[0-9\ _.-]+$', 'g');
	return check_value(source, reg);
}

/* Fin des verifications */

/* Parcours du formulaire */
function	browse_form(callback)
{
	var		form;
	var		elements = new Array();
	var		elements_select;
	
	if (!(form = document.getElementById('form_inscription')) ||
		!(elements = form.getElementsByTagName('input')) ||
		!(elements_select = form.getElementsByTagName('select')))
	{
		return false;
	}
	return callback(elements, elements_select);
}

/*
** Evenements
*/

/*
** Bloquer les chiffres
*/
function	form_block_not_number(event)
{
	var		reg = new RegExp('([0-9]*)[^0-9]', 'g');
	var		source;
	
	source = (event.srcElement || event.target);
	if (!source)
		return false;
	source.value = source.value.replace(reg, '$1');
}

function	form_onfocus(event)
{
	var		source;

	source = (event.srcElement || event.target);
	if (!source || source.style == undefined || source.style.backgroundColor == undefined)
		return false;
	source.style.backgroundColor = '#ffffcc';
	if (check_input)
		check_input_by_type(source, false);
	return true;
}

function	form_onblur(event)
{
	var		source;
	
	source = (event.srcElement || event.target);
	if (!source || source.style == undefined || source.style.backgroundColor == undefined)
		return false;
	source.style.backgroundColor = '#ffffff';
	if (check_input)
		check_input_by_type(source, false);
	return true;
}

function	form_onkeydown(event)
{
	var		source;
	var		strict;
	
	source = (event.srcElement || event.target);
	strict = (source.value != '') ? true : false;
	if (!source)
		return false;
	if (timer == false)
	{
		if (source.tagName.toLowerCase() != 'select' && 
			source.name != 'telephone portable' && source.name != 'telephone fixe')
		{
			show_check_waiter(source, true);
		}
		setTimeout(function () { check_input_by_type(source, strict); }, 2000);
		timer = true;
	}
	return true;
}

function	add_event_form(obj)
{

	if (document.addEventListener)
	{
		if (check_input == true)
			obj.addEventListener('keyup', form_onkeydown, false);
		if (check_numbers == true && obj.className.match(/input_[0-9]+_char/g))
			obj.addEventListener('keyup', form_block_not_number, false);
		obj.addEventListener('focus', form_onfocus, false);
		obj.addEventListener('blur', form_onblur, false);
	}
	else
	{
		if (check_input == true)
			obj.attachEvent('onkeyup', form_onkeydown);
		if (check_numbers == true && obj.className.match(/input_[0-9]+_char/g))
			obj.attachEvent('onkeyup', form_block_not_number);
		obj.attachEvent('onfocus', form_onfocus);
		obj.attachEvent('onblur', form_onblur);
	}
}

/*
** Autres
*/

/* Recherche dans un tableau, renvoi true si il trouve, false sinon */
function	in_array(input_array, search)
{
	for (var i = 0; i < input_array.length; i++)
	{
		if (input_array[i] == search)
			return true;
	}
	return false;
}

function	show_errors_list(errors)
{
	var		container;
	
	if (!(container = document.getElementById('errors_list')))
		return false;
	container.innerHTML = '<p>Des erreurs ont &eacute;t&eacute; trouv&eacute;es : </p>';
	for (var i = 0; i < errors.length; i++)
	{
		container.innerHTML += errors[i] + '<br />';
	}
	return true;
}
/* Fin autres */