var esm = esm || {};
esm.form = esm.form || {};

$(window).load(function () {
	esm.form.getNodes();
	esm.form.init();
});

esm.form.getNodes = function() {
	esm.form.node = $('#request');
	esm.form.submitBtn = $('#submit');
	esm.form.resetBtn = $('#reset');
	esm.form.overlay = $('#overlay');
};

esm.form.init = function() {
	if (!esm.form.node) {
		return null;
	};
	
	var inputsArray = [];
	var hasSuccess = esm.form.node.hasClass('success');
	
	var _setInput = function(input) {
		if (!input) {
			return null;
		};
		
		var node = $(input);
		var value = node.val();
		var id = node.attr('id');
		var title = esm.form.titles[id];
		
		return {
			clear : function() {
				node.val('');
			},
			resetField : function() {
				node.val(title);
			},
			title : function() {
				return title;	
			},
			value : function() {
				return node.val();	
			},
			node : function() {
				return node[0];	
			}
		}
	};
	
	var textInputs = esm.form.node.find('input:text');
	textInputs.each( function() {
		var input = _setInput(this);
		inputsArray.push(input);
		
		hasSuccess ? input.resetField() : '';
		
		$(this).focus( function(e) {
			var currentNode = this;
			$(inputsArray).each( function() {
				var node = this.node();
				// checks current input
				if (currentNode == node) {
					if (this.title() == this.value()) {
						this.clear();
					};
				} else {
					if (this.value() == '') {
						this.resetField();
					};					
				};
			});
		});
	});	
	
	var setOverlay = function() {
		esm.form.overlay.click( function(e) {
			if (!$(this).hasClass('hidden')) {
				$(this).addClass('hidden');
			};
		});
	};	
	setOverlay();
	
	esm.form.submitBtn.click( function(e) {
		e.preventDefault();
		esm.form.node.submit();
	});
	
	esm.form.resetBtn.click( function(e) {
		e.preventDefault();
		$(inputsArray).each( function() {
			this.resetField();		   
		});
	});
};

esm.form.titles = {
	name : 'Name',
	company : 'Company',
	street : 'Street',
	add_floor : 'Floor',
	cross_street : 'Cross Street',
	city : 'City',
	state : 'State',
	zip : 'Zip',
	phone : 'Phone (+ area code)',
	email : 'Email',
	city_to : 'City',
	state_to : 'State'
};
