/**
 * LIB FORM INPUTS
 * Validations typiques des inputs d'un formulaire.
 * @version 1.0
 * @requiere mootools
 */
 
/// INPUTS - Fonctions
 
function input_get_val( idInput ) {
	return $(idInput).get('value');
}
 
/**
 * @return chaine sans les blancs en début et en fin.
 */
function str_trim( str ) {
	if (str == null) return '';
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

/**
 * @return true si input vide ou chaine de caracteres blancs.
 */
function input_is_empty( idInput ) {	
	var input = input_get_val(idInput);
//	alert('input='+idInput+' value='+input);
	return (input == '' || str_trim(input) == '');
}

/**
 * @return true si date pas au format francais jj/mm/aaaa
 */
function input_is_bad_date_fr( idInput ) {	
	if (input_is_empty(idInput)) return true;
	var reg = RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");	
	return !reg.test(str_trim(input_val(idInput)));
}

/**
 * @return true si email pas valide : vide ou mauvais format.
 */
function input_is_bad_email( idInput ) {	
	if (input_is_empty(idInput)) return true;
	var input = input_get_val(idInput);
	/* bug: accepte adresses de la forme machin@truc */
//	var reg = RegExp("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$", "gi");
//	var reg = RegExp("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$");
//	var reg = RegExp("^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$", "gi");
	var reg = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
	return !reg.test(input);
}

/**
 * @return true si les deux inputs n'ont pas la meme valeur
 */
function input_not_same( idInput, idOtherInput ) {
	var input = input_get_val(idInput);	
	var input2 = input_get_val(idOtherInput);		
	return (input != input2);
}

/**
 * Force le texte d'une textarea en dessous d'une longueur maximale.
 * @param ta textarea instance
 * @param maxLength longueur max
 */
function input_textarea_truncate( ta, maxLength ) {
	if (ta==null) return;
	if (ta.value.length > maxLength) ta.value = ta.value.substr(0, maxLength);
}

/// INPUT - Scripts

/**
 * Surveille la longueur d'un input et met à jour le texte de la balise surveillante.
 * La basile surveillante rapporte le nombre de caractères restants. *
 * La balise doit être du format suivant:
 * - avoir la classe [monitorClassName]
 * - définir les paramètres suivant :
 * 		'maxlength'	= longueur maximale souhaitee de l'input.
 *		'monitored'	= id de l'input à surveiller.
 *
 * Exemple:
 *	<textarea id="message"></textarea>
 *  <div class=".input_monitor" checkFor="message"></div>
 * 
 * TODO en faire une classe javascript complète (element + méthode de spawn)
 *
 * @param monitorCssSelector eg: '.input_monitor', '#my_monitor'
 */
function spawn_input_length_monitor( monitorCssSelector ) {
	$(document).addEvent('domready', function() {
		$$(monitorCssSelector).each(function(e) {
			var maxLength = e.get('maxlength');										  
			var forTa = e.get('monitored');
			var ta = $(forTa);
		
			var fnUpdate = (function () { 
				var count = ta.get('value').length;
				var left = maxLength - count;
				if (left < 0) left = 0;
				e.set('text', (left == 0 ? "(longueur maximale dépassée!)":"("+left+" caractères restants)"));
			});
		
			ta.addEvents({
				keydown: fnUpdate,
				keyup: fnUpdate,			
				mouseleave: fnUpdate,
				mouseenter: fnUpdate,
				click: fnUpdate,
				change: fnUpdate,
				select: fnUpdate,
				blur: fnUpdate
			});		
		});
	});
}

function browser_hasPlaceholderProperty() {
	var dummy = document.createElement('input');
	return 'placeholder' in dummy;
}

/**
 * Simule la propriété "placeholder" sur les input de type "text" pour les browser qui ne la supporte pas.
 * N'a aucun effet sur les browers supportant placeholder. 
 * Il est donc ok de mettre "placeholder=xxx" sur les inputs et d'appeler cette fonction a chaque domready :-)
 * Utilise simplement la propriété value et l'efface quand on clique dessus.
 */
function spawn_input_placeholders() {

	if (!browser_hasPlaceholderProperty()) {										  
								  										  
		// utilise propriété value à la place.
		$$('input').each(function(e) {						  
			if (e.getProperty('type') == 'text') {
				e.setProperty('value', e.getProperty('placeholder'));
				e.addEvent('click', function() {
					e.setProperty('value', '');											 
				});
			}
		});
	}	
}

/// FORMS - Fonctions

function form_clear_error( idErreur ) {
	var eErreur = $(idErreur);
	eErreur.hide();
	eErreur.set('text', '');		
}

/**
 * @return false
*/ 
function form_error( idErreur, msg ) {
	var eErreur = $(idErreur);	
	eErreur.set('text', msg);
	eErreur.show();		
	return false;
}
