// Ajoute le support de Array.indexOf pour IE
if(!Array.indexOf)
{
	Array.prototype.indexOf = function(obj)
	{
		for(var i=0; i<this.length; i++)
		{
			if(this[i] == obj)
				return i;
		}
		return -1;
	}
}



// Envoit le formulaire
function SendForm ( f , config , fields , path )
{
	if ( path == undefined ) path = '';


	var fields_tab = fields.split ( ',' );
	if ( CheckFormFields ( f , fields_tab ) )
	{

		// Envoit la requête AJAX
		var params = GetFormFields(f) + 'MF2_Config=' + config;
		//alert ( params );
		AjaxRequest ( path + 'Lib/MF2.php' , 'post' , params , function ( rep )
		{
			// Affiche un message de réponse
			alert ( rep );
			
			// Vide le formulaire si il a été correctement envoyé
			if ( rep == 'Votre message a bien été envoyé' )
				ResetFormFields ( f );
			
		});
		return false;
	
	}
	else
	{
		// Il manque des champs !
		//alert ( 'Vous devez renseigner les champs marqués en rouge' );
		return false;
	}
}



// Demande une confirmation avant de vider un formulaire
function ResetForm ( f )
{
	if ( confirm ( 'Etes vous sur de vouloir annuler ? Tous les champs seront vidés.' ) )
	{
		ResetFormFields ( f );
		return true;
	}
	else
		return false;
}



// Vide tous les champs du formulaire et remet leur style originel
function ResetFormFields ( f )
{
	for ( i=0 ; i <= f.elements.length - 1; i++ )
	{
		if ( f.elements[i].type != 'reset' && f.elements[i].type != 'submit' )
		{
			f.elements[i].value = '';
			
			if (  f.elements[i].type == 'radio' || f.elements[i].type == 'checkbox' )
				f.elements[i].style.border = 'solid 0px black';
			else
				f.elements[i].style.border = 'solid 1px black';
		}
	}
}




// Verifie la présence des champs obligatoire, marque en rouge ceux qui n'ont pas été renseignés
function CheckFormFields ( f , mandatoryfields )
{
	var champs_manquants = '';

	var valid = true;
	var radios = new Array();
	for ( i=0 ; i < f.elements.length; i++ )
	{
		// On ignore les boutons de type reset et submit
		if ( f.elements[i].type != 'reset' && f.elements[i].type != 'submit' )
		{
		
			// Par défaut on marque en vert
			f.elements[i].style.border = 'solid 1px #00FF00';

			
			// Verifie les champs email
			if ( f.elements[i].type == 'text' && f.elements[i].className == 'email' )
			{
				// Si le champs est obligatoire ou a commencé a être remplis...
				if ( mandatoryfields.indexOf( f.elements[i].name ) != -1 )
				{
					if ( f.elements[i].value.length == 0 )
					{
						// Marque le champs comme nom valide
						valid = false;
						f.elements[i].style.border = 'solid 1px red';
						champs_manquants += '- ' + f.elements[i].name + '\n';
						continue;
					}
				}
				if ( f.elements[i].value != '' )
				{
					// ... on verifit le format
					if ( !CheckMail ( f.elements[i].value ) )
					{
						// Marque le champs comme nom valide
						valid = false;
						f.elements[i].style.border = 'solid 1px red';
						champs_manquants += '- ' + f.elements[i].name + ' (le format de cette adresse mail n\'est pas correct)\n';
						continue;
					}
				}
			}

			
			// Si le champs est obligatoire
			if ( mandatoryfields.indexOf( f.elements[i].name ) != -1 )
			{
				// On teste si le champs est vide
				if ( f.elements[i].type == 'radio' )
				{
					if ( f.elements[i].checked )
						radios.push ( f.elements[i].name );
				}
				else if ( f.elements[i].value.length == 0 )
				{
					// Marque le champs comme nom valide
					valid = false;
					f.elements[i].style.border = 'solid 1px red';
					champs_manquants += '- ' + f.elements[i].name + '\n';
				}
			}
		
		}
	}
	
	
	// Verifie les champs radio obligatoires
	var last_champs_manquant = '';
	for ( i=0 ; i < f.elements.length; i++ )
	{
		if ( f.elements[i].type == 'radio' && ( mandatoryfields.indexOf( f.elements[i].name ) != -1 ) )
		{
			var ok = false;
			for ( j=0; j < radios.length; j++ )
			{
				// Verifie qu'au moins une case a été cochée
				if ( radios[j] == f.elements[i].name )
				{
					ok = true;
					break;
				}
			}
			
			// Aucune case cochée
			if ( !ok )
			{
				valid = false;
				
				// Marque toutes les cases en rouge
				f.elements[i].style.border = 'solid 1px red';
				
				// Verifie l'unicité du nom du champs dans la liste des champs oubliés
				if ( f.elements[i].name != last_champs_manquant )
					champs_manquants += '- ' + f.elements[i].name + '\n';
				last_champs_manquant = f.elements[i].name;
			}
		}
	}
	
	
	// Tous les champs n'ont pas été remplis : erreur
	if ( champs_manquants != '' )
		alert ( 'Vous devez préalablement renseigner les champs suivants :\n' + champs_manquants );
	
	return valid;
}



// Récupère sous forme de chaine de paramètres (ie: key=valeur&key2=valeur2...) les champs du formulaire
function GetFormFields( f )
{
	var chaine = "";
	for ( i=0 ; i <= f.elements.length - 1; i++ )
	{
	
		// On ignore les boutons de type reset et submit
		if ( f.elements[i].type != 'reset' && f.elements[i].type != 'submit' )
		{

			if ( f.elements[i].type == 'radio' )
			{
				if ( f.elements[i].checked )
					chaine += f.elements[i].name + "=" + encodeURIComponent ( f.elements[i].value ) + "&";
			}
			else if ( f.elements[i].type == 'checkbox' )
			{
				if ( f.elements[i].checked )
					chaine += f.elements[i].name + "=oui&";
				else
					chaine += f.elements[i].name + "=non&";
			}
			else
			{
				chaine += f.elements[i].name + "=" + encodeURIComponent ( f.elements[i].value ) + "&";
			}
		
		}
	}
	return chaine;
}


// Renvoit si l'adresse mail passée en paramètre est dans un format valide
function CheckMail ( email )
{
	var verif = /^[a-zA-Z0-9]+[a-zA-Z0-9._-]*@[a-zA-Z0-9]+[a-zA-Z0-9.-]*\.[a-zA-Z]{2,4}$/;
	return verif.exec( email );
}


// Renvoit un objet XMLHttpRequest
function GetXHR ()
{
	if (window.XMLHttpRequest) 
	{
		//Firefox ou IE >= 7.0
		xhr = new XMLHttpRequest();
	}
	else if ( window.ActiveXObject ) 
	{
		try 
		{ // essaie de charger l'objet pour IE
			xhr = new ActiveXObject( "Msxml2.XMLHTTP" );
		} 
		catch (e) 
		{
		    try 
		    { // essaie de charger l'objet pour une autre version IE
				xhr = new ActiveXObject ( "Microsoft.XMLHTTP" );
		    } 
		    catch (e) 
		    {
				window.alert("Votre navigateur ne prend pas en charge la technologie AJAX.");
		    }
		} 
	}
	return xhr;
}


// Execute une requete AJAX
function AjaxRequest ( url , type , params , callback )
{
	var xhr = GetXHR();
	if ( xhr )
	{
	    xhr.onreadystatechange  = function ()
	    {
	        if ( xhr.readyState == 4 )
	        {
				if ( xhr.status == 200 && callback )
				{
					callback ( xhr.responseText );
				}       
	        }
	    }; 
		
		
		var send_params = null;
		if ( type == 'POST' || type == 'post' )
		{
			type = 'POST';
			send_params = params;
		}
		else
		{
			type = 'GET';
			url = url + '?' + params;
			send_params = null;
		}

		xhr.open ( type , url , true ); 
		
		if ( type == 'POST' )
			xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		
		xhr.send ( send_params ); 
	}
}

