YAHOO.namespace("contactus.container");

var ContactUs = {
	
	base: null,
	err: null,
	
	getFormElements: function (form_name) {
		var tmp = YAHOO.util.Dom.getElementsBy(
			function (obj) {
				if (obj && obj.nodeName && (
					obj.nodeName.toLowerCase() == 'input' ||
					obj.nodeName.toLowerCase() == 'select' ||
					obj.nodeName.toLowerCase() == 'textarea'
				)) {
					return true;
				}
				return false;
			},
			null,
			document.forms[form_name]
		);
		var result = {};
		for (var i in tmp) {
			
			if (!tmp[i].name) {
				continue;
			}
			result[tmp[i].name] = tmp[i];
		}
		
		return result;
	},
	
	doChangeFormState: function (form, state) {
		var self = YAHOO.contactus.container.handler;
		var inputs = self.getFormElements(form);
		
		for (var i in inputs) {
			inputs[i].disabled = !state;
		}
	},
	
	trim: function(str) {
		str = str.replace(/^[\s]+/, '');
		return str.replace(/[\s]+$/, '');
	},
	
	show: function(msg) {
		
		var self = YAHOO.contactus.container.handler;
		
		if (!self.err) {
			return;
		}
		
		self.err.innerHTML = msg;
		self.err.style.display = 'block';
	},
	
	hide: function() {
		
		var self = YAHOO.contactus.container.handler;
		
		if (!self.err) {
			return;
		}
		
		self.err.style.display = 'none';
	},
	
	onSubmitSuccess: function(obj) {
		
		var self = YAHOO.contactus.container.handler;
		
		var f = document.forms['contact_form'];
		self.doChangeFormState(f, true);
		
		if (obj.responseText != 'ok') {
			self.show(obj.responseText);
			return;
		}
		
		f.style.display = 'none';
		var ok = YAHOO.util.Dom.get('contact_ok');
		if (!ok) {
			return;
		}
		
		ok.style.display = 'block';
	},
	
	submit: function() {
		
		var self = YAHOO.contactus.container.handler;
		
		var f = document.forms['contact_form'];
		
		if (!f) {
			return;
		}
		
		f.full_name.value = self.trim(f.full_name.value);
		if (f.full_name.value.length == 0) {
			self.show('Name is required field');
			return;
		}
		
		f.login.value = self.trim(f.login.value);
		if (f.login.value.length > 0) {
			if (!f.login.value.match(/^[a-z\d\-\_]{3,80}$/gi)) {
				self.show('User ID is invalid');
				return;
			}
		}
		
		f.email.value = self.trim(f.email.value);
		if (!f.email.value.match(/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$/gi)) {
			self.show('E-mail address is invalid');
			return;
		}
		
		if (f.subject.value * 1 <= 0) {
			self.show('Please, select your topic');
			return;
		}
		
		f.question.value = self.trim(f.question.value);
		if (!f.question.value.match(/^[^\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\xFF]{10,}$/gi)) {
			self.show('Please, type your query');
			return;
		}
		
		self.hide();
		
		var callback = {
			success: self.onSubmitSuccess,
			failure: function() {}
		};
		
		var url = self.base + 'contact-us/submit/';
		YAHOO.util.Connect.setForm(f);
		YAHOO.util.Connect.asyncRequest('POST', url, callback);
		self.doChangeFormState(f, false);
		
	},
	
	init: function () {
		if (YAHOO.contactus.container.handler) {
			return;
		}
		YAHOO.contactus.container.handler = ContactUs;
		var self = YAHOO.contactus.container.handler;
		
		try {
			var result = YAHOO.util.Dom.getElementsBy(
				function (elm) { return true; }, 'base'
			);
			if (result && result.length) {
				result = result[0].href;
				if (result.substr(result.length - 1, 1) != '/') {
					result += '/';
				}
				self.base = result;
			}
		} catch (x) { self.base = ''; }
		
		self.err = YAHOO.util.Dom.get('contact_err');
	}
}

YAHOO.util.Event.addListener(window, "load", ContactUs.init);
