var ContactFormManager = new Class({
	initialize: function(container, button, url){
		this.container = container;
		this.button = button;		
		this.url = url;
		this.fields = $$(this.container.getElementsByTagName('input'), this.container.getElementsByTagName('textarea'));
		this.labels = this.container.getElements('label');		
		this.setup();
	},
	
	warn: function(checked, message){
		//this.clearMessage();
		var warning = new Element('span');
		warning.addClass(checked ? 'decostylAdminCheckedMessage' : 'decostylAdminUncheckedMessage');
		warning.set('text', message);
		warning.inject(this.container, 'top');
	},
	
	clear: function(){
		this.clean();
		this.container.reset();
	},
	
	clean: function(){
		var messages = $$('.decostylAdminCheckedMessage, .decostylAdminUncheckedMessage');
		for(var m = 0; m < messages.length; m++){
			messages[m].dispose();
		}
		for(var l = 0; l < this.labels.length; l++){
			this.labels[l].setStyle('color', '#0e0f0f');
		}
	},
	
	getFieldByName: function(name){
		for(var f = 0; f < this.fields.length; f++){
			if(this.fields[f].get('name') == name){
				return this.fields[f];
			}
		}
		return null;
	},
	
	getLabelByName: function(name){
		for(var l = 0; l < this.labels.length; l++){
			if(this.labels[l].get('for') == name){
				return this.labels[l];
			}
		}
		return null;
	},
	
	getValues: function(){
		var values = new Hash();
		for(var f = 0; f < this.fields.length; f++){
			values.set(this.fields[f].get('name'), this.fields[f].get('value'));
		}
		return values;
	},
	
	proceed: function(errors){
		this.clean();
		if(errors.length > 0){
			this.getLabelByName(errors[0].field).setStyle('color', '#f06233');
			this.warn(false, errors[0].message);
		}
		else{
			this.clear();
			this.warn(true, 'Le message a été correctement transmis. Nous tâcherons de vous répondre au plus vite!');
		}
	},
	
	send: function(){
		var jSonRequest = new Request.JSON({
			url: this.url, 
			method: 'post',
			data: this.getValues(),
			onComplete: function(errors){
				document.retrieve('contactFormManager').proceed(errors);
			}
		}).post();
	},
	
	setup: function(){
		document.store('contactFormManager', this);
		this.button.store('contactFormManager', this);
		this.button.addEvent('click', function(event){
			event.target.retrieve('contactFormManager').send();
		});	
	}
});

