var MagicMail = new Class({
	Implements: Options,
	initialize: function(container, options) {
		this.setOptions(options);
		this.container = $(container);
		this.form = this.container.getElement('form');
		this.submitBtn = this.form.getElement('input[type=submit]');
		this.submitBtn_defaultText = this.submitBtn.getProperty('value');
		this.msgContainer = this.container.getElement('.msgContainer');
		
		this.init();
	},
	
	init: function(){
		var self = this;
		
		//modify input names
		$$(this.form.getElements('input'),this.form.getElements('textarea')).each(function(el){
			var rel = el.getProperty('rel');
			if(rel) el.setProperty('name',rel);
		});
		
		this.form.addEvent('submit',function(e){
			e.stop();
			if(self.checkForm()){
				self.msgContainer.setStyle('display','none');
				self.submitBtn.setProperty('value','Loading...').disabled = true;
				this.send();
			}
		});
		this.form.set('send',{
			url: this.form.getProperty('rel'),
			method:'post',
			onComplete:this.onSendComplete.bind(this)
		});
	},
	
	checkForm: function(){
		var fieldName = this.form.getElement('.magicMail-name');
		var fieldEmail = this.form.getElement('.magicMail-email');
		var fieldMessage = this.form.getElement('textarea');
		var errorMsg = [];
		
		var fieldNameValue = fieldName.value.trim();
		if(fieldNameValue.length <= 0){
			this.setFieldError(fieldName,true);
			errorMsg.push('Please fill in Name field.');
		}else{
			this.setFieldError(fieldName,false);
		}
		
		if(!formValidator.isEmail(fieldEmail.value.trim())){
			this.setFieldError(fieldEmail,true);
			errorMsg.push('Please provide a valid email.');
		}else{
			this.setFieldError(fieldEmail,false);
		}
		
		var fieldMessageValue = fieldMessage.value.trim();
		if(fieldMessageValue.length <= 0){
			this.setFieldError(fieldMessage,true);
			errorMsg.push('Please enter a message.');
		}else{
			this.setFieldError(fieldMessage,false);
		}
		
		if(errorMsg.length > 0){
			this.msg('<ul><li>'+errorMsg.join('</li><li>')+'</li></ul>','error');
			return false;
		}else{
			return true;
		}
	},
	
	onSendComplete: function(responseText){
		var submitBtn_enable = false;
		if(responseText){
			var response = false;
			try{
				response = JSON.decode(responseText);
			}catch(e){}
			
			if(response){
				if(response.error){
					this.msg(response.errorMsg,'error');
					submitBtn_enable = true;
				}else{
					this.submitBtn.disabled = false; //without this, a page refresh (F5) ends up on a disabled submit...
					this.submitBtn.dispose();
					this.msg('Thank you !<br/>Email was sent successfully !','success');
				}
			}else{
				this.msg('Error when parsing response...','error');
				submitBtn_enable = true;
			}
		}else{
			this.msg('Error: no response.','error');
			submitBtn_enable = true;
		}
		
		if(submitBtn_enable){
			this.submitBtn.setProperty('value',this.submitBtn_defaultText).disabled = false;
		}
		
	},
	
	msg: function(msg,flag){
		this.msgContainer.removeClass('error').removeClass('success'); //reset classname
		if(flag)
			this.msgContainer.addClass(flag);
		this.msgContainer.set('html',msg);
		if(this.msgContainer.getStyle('display')=='none')
			this.msgContainer.setStyle('display','block');
	},
	
	setFieldError: function(field,setError){
		if(setError){
			field.addClass('error');
		}else{
			field.removeClass('error');
		}
	}
	
});