/**
 * JQUERY Form Control BY ALNEO SA :)
 */

(function($) {
    // définition du plugin
    $.fn.alyFormControl = function(options) {
		var defaults = {
			initClass : "alyFormControl",
			emptyClass : "inputEmpty",
			stdClass : "inputStandard",
			btnSubmit : true,
			btnSubmitValue : "OK"
		};
		
		var opts = $.extend(defaults, options);
		
		/**
		 * Fonction principale
		 * @param {Object} f
		 */
		function controlForm(f) {
			// on cherche tous les inputs qui sont de la class voulue
			var input = $("input."+opts.initClass);
			
			$(input).each(function() {
				
				// On récupère la valeur initiale du champ
				var defaultText = $(this).val();
				
				// On récupère le formulaire parent de l'input
				var form = $(this).parent();
				
				// On ajoute la class ayant le style "vide"
				$(this).addClass(opts.emptyClass);
				
				// On ajoute les actions
				$(this).focus(clearInput);
				$(this).blur(setDefaultText);
				
				/**
				 * Lorsqu'on "rentre" dans le champs
				 */
				function clearInput() {
					
					createSubmitButton();
					
					// Si le champs est vide ou qu'il contient le texte initial
					if($(this).val() == "" || $(this).val() == defaultText) {
						
						// On vide le champs
						$(this).val("");
						// On enlève la class ayant le style "vide"
						if($(this).hasClass(opts.emptyClass)) {
							$(this).removeClass(opts.emptyClass);
						}
						// On lui attribue la class standard
						$(this).addClass(opts.stdClass);
					}
				}
				
				/**
				 * Lorsqu'on sort du champs
				 */
				function setDefaultText() {
					// Si le champs est vide
					if($(this).val() == "") {
						// On lui réattribue le texte par défaut
						$(this).val(defaultText);
						// On lui enlève la class standard
						if($(this).hasClass(opts.stdClass)) {
							$(this).removeClass(opts.stdClass);
						}
						// on lui attribue la class ayant le style "vide"
						$(this).addClass(opts.emptyClass);
						
						deleteSubmitButton();
					}
				}
				
				/**
				 * Création du bouton de validation
				 */
				function createSubmitButton() {
					// Si on a demandé un bouton de validation
					if(opts.btnSubmit == true) {
						// On contrôle que le formulaire n'a pas déjà un bouton de validation
						if($(form).find(":submit").length) {
							// Si le formulaire existe déjà on ne fait rien
						}
						else {
							$(form).append('<input type="submit" value="'+opts.btnSubmitValue+'" />');
						}
					}
				}
				
				/**
				 * Suppression du bouton de validation
				 */
				function deleteSubmitButton() {
					if($(form).find(":submit")) {
						$(form).find(":submit").remove();
					}
				}
			});
		}
		
		controlForm();
		
        return $(this);
		
    };
})(jQuery);
