/** 
 * @projectDescription Mediagong main script file
 *
 * @author 	Sébastien Dussaut sebastien.dussaut@mediagong.tv
 * @version 	0.1 
 */


// Global variables
var errors = new Array();
var ErrorMsgArray = {
	"name":"",
	"firstname":"",
	"email":"",
	"company":"",
	"address":"",
	"zip":"",
	"city":"",
	"message":"",
	"generic":"Merci de remplir correctement les champs obligatoires identifiés par *."
};

var FormMessageArray = {
	"success": "Votre message a bien été envoyé. Nous vous répondrons dans les meilleurs délais.",
	"error": "Une erreur est survenue pendant l'envoi de votre message. Merci de réessayer dans quelques instants."
}

/**
 * @classDescription Frame Factory form validation Javascript Class
 */
var ManageForm = {
	/**
	 * Sets up form validation
	 * @method
	 */
	init: function(){
		
		// variables
		var fields;
		var fieldsMandatory;
		var formStatus;
		var errorStatus;
		
		jQuery("input[type=submit]").each(function(){
			
			jQuery(this).bind("click", function(event){

				// resets states
				errors = [];
				jQuery("#errorBlock").empty();

				// prevents default behaviour
				event.preventDefault();
				
				fieldsMandatory = jQuery(this).parents("form").find(".mandatory :input");
				fields = jQuery(this).parents("form").find(":input");
				
				for(var i = 0; i < fieldsMandatory.length; i++) {
					errorStatus = ManageForm.checkInput(fieldsMandatory[i]);
				}
				
				formStatus = jQuery.grep(errorStatus, function(n,i){
					return n == true;
				});
				
				// submits form
				if(formStatus.length < 1) {
					var url = jQuery(this).parents("form").attr("action");
					jQuery.ajax({
						type: "POST",
						url: url,
						data: fields,
						dataType: "json",
						success: function(data){

							if ( 'undefined' == typeof data.error ) {
								if ( '1' == data.result.status ) { 				
									jQuery("#contacForm").fadeOut(350, function(){
										jQuery("<p class=\"retour\">"+ FormMessageArray.success +"</p>")
										.appendTo("#contactBlock")
										.fadeIn(350);
									});

								} else {
									jQuery("#contacForm").fadeOut(350, function(){
										jQuery("<p class=\"retour\">"+ FormMessageArray.error +"</p>")
										.appendTo("#contactBlock")
										.fadeIn(350);
									});
								}
							} else {

								for( var i in data.error ) {
									ManageForm.setErrorField( jQuery( '#' + i ) );
									if(i == 'message')
										ManageForm.setErrorMessage('Veuillez corriger les champs en rouge <br />Message : '+ data.error.message);								
									else
										ManageForm.setErrorMessage( 'Veuillez corriger les champs en rouge' );
								}
								//window.location = "http://mediagong.localhost/contact.php";
								//ManageForm.setErrorMessage( 'Veuillez corriger les champs en rouge' );
							}
						}
					});
				}
			});
		});		
	},
	/**
	 * Method for checking input (input, select, etc) value.
	 * @method
	 * @param	{Object}	jQuery collection: input to be checked
	 * @return	{Array}		Returns "errors" array (boolean values).
	 */
	checkInput: function(obj){
		
		switch(obj.nodeName.toLowerCase()) {
			case "textarea":
			
				if (obj.value != "" && obj.value.length <= 10000) {
					ManageForm.removeError(obj);
					errors.push(false);				
				} else {
					errors.push(true);
					ManageForm.setError(obj);
				}
				break;
				
			default:
				if (obj.value != "") {
					
					switch(obj.id) {
						case "email":
							// mail check regular expression
							var regexp = new RegExp(/^([a-zA-Z0-9]+(([\.\-\_]?[a-zA-Z0-9]+)+)?)\@(([a-zA-Z0-9]+[\.\-\_])+[a-zA-Z]{2,4})$/);
							
							if (!jQuery(obj).val().match(regexp)) {
								errors.push(true);
								ManageForm.setError(obj);
							} else {
								ManageForm.removeError(obj);
								errors.push(false);
							}
							break;
						default:
							ManageForm.removeError(obj);
							errors.push(false);
							break;
					}				
				} else {
					errors.push(true);
					ManageForm.setError(obj);
				}
				break;	
		}
		return errors;
	},
	setErrorMessage: function(msg) {
		jQuery("#errorBlock").html( msg );
	},
	setErrorField: function(obj) {
		jQuery(obj).parent().addClass("error");
	},
	/**
	 * Sets error status: displays error message and add error class.
	 * @method
	 * @param	{Object}	jQuery collection: input checked.
	 */
	setError: function(obj) {
		ManageForm.setErrorMessage( ErrorMsgArray.generic );
		ManageForm.setErrorField( obj );
	},
	/**
	 * Removes error status.
	 * @method
	 * @param	{Object}	jQuery collection: input checked.
	 */
	removeError: function(obj) {
		jQuery(obj).parent().removeClass("error");
	}
}

/* launching scripts */
jQuery(document).ready( function() {
	ManageForm.init();
});
