pkg('mdv.footer');

mdv.footer.ContactForm = function() {
	var nodes = {};
	var inputs;
	
	var url = '';

	
	function init(root) {
		if(!root)
			return;
		
		nodes.root = root;
		nodes.contactPanel = $('.contact', root);
		nodes.formPanel = $('.contactForm', root);
		nodes.successPanel = $('.contactSuccess', root);
		nodes.errorPanel = $('.contactError', root);
		nodes.form = $('form', root);
		nodes.btnContact = $('.btnContact', root);
		nodes.btnClose = $('.close', root);
		nodes.submit = $('.submit', root);
		nodes.btnContinue = $('.continue', root);
		nodes.btnReset = $('.restart', root);
		nodes.inputName = $('input[name="name"]', root);
		nodes.inputEmail = $('input[name="email"]', root);
		nodes.inputRemark = $('input[name="message"]', root);
		//
		inputs = nodes.inputName.add(nodes.inputEmail).add(nodes.inputRemark);
		
		url = nodes.form.attr('action');
		
		nodes.btnContact.bind('click', onClickBtnContact);
		nodes.btnClose.bind('click', onClickBtnClose);
		nodes.submit.bind('click', onClickSubmit);
		nodes.btnContinue.bind('click', onClickBtnContinue);
		nodes.btnReset.bind('click', onClickBtnReset);
		//
		inputs.bind('focus', onFocusInput).bind('blur', onBlurInput);
	}
	
	function showError() {
		nodes.formPanel.css('display', 'none');
		nodes.errorPanel.css('display', 'block');
	}
	
	function removeFieldErrors() {
		$('.inputWrapper', nodes.root).removeClass('error');
	}
	
	function onClickBtnContact(event) {
		event.preventDefault();
		
		nodes.contactPanel.css('display', 'none');
		nodes.formPanel.css('display', 'block');
	}
	
	function onClickBtnClose(event) {
		event.preventDefault();
		
		nodes.formPanel.css('display', 'none');
		nodes.contactPanel.css('display', 'block');
		nodes.form.get(0).reset();
		removeFieldErrors();
	}
	
	function onFocusInput() {
		var $this = $(this);
		
		if($this.val() == $this.attr('m:defaultValue')) {
			$this.val('');
		}
	}
	
	function onBlurInput() {
		var $this = $(this);
		
		if($this.val() == '') {
			$this.val($this.attr('m:defaultValue'));
		}
	}
	
	function onClickSubmit(event) {
		event.preventDefault();
		
		removeFieldErrors();
		
		// Clear default values
		for(var i = 0; i < inputs.length; i++) {
			var $input = $(inputs[i]);
			if($input.val() == $input.attr('m:defaultValue')) {
				$input.val('');
			}
		}
		
		$.ajax({
			type:'POST',
			url: url,
			data: nodes.form.serialize(),
			async : false,
			dataType: 'json',
			success: onSuccessSubmit,
			error: onErrorSubmit
		});
	}
	
	function onSuccessSubmit(data) {
		if(data.success) {
			nodes.formPanel.css('display', 'none');
			nodes.successPanel.css('display', 'block');
		}
		else {
			if(typeof(data.fields) == 'undefined') {
				// General error
				showError();
			}
			else {
				// Show field errors
				for(var i = 0; i < data.fields.length; i++) {
					$field = $('input[name="'+data.fields[i]+'"]');
					if($field) {
						$field.parents('.inputWrapper').addClass('error');
					}
				}
			}
		}
	}
	
	function onErrorSubmit() {
		showError();
	}
	
	function onClickBtnContinue(event) {
		event.preventDefault();
		
		nodes.successPanel.css('display', 'none');
		nodes.contactPanel.css('display', 'block');
		nodes.form.get(0).reset();
	}
	
	function onClickBtnReset(event) {
		event.preventDefault();
		
		nodes.errorPanel.css('display', 'none');
		nodes.formPanel.css('display', 'block');
		nodes.form.get(0).reset();
	}
	
	init.apply(this, arguments);
};
