var NewsletterForm =
{
	init: function() {
		var newsletterForm = document.getElementById("newsletter_form");
		Core.addEventListener(newsletterForm, "submit", NewsletterForm.submitListener);
		var newsletterButton = document.getElementById("newsletter_button");
		Core.addEventListener(newsletterButton, "click", NewsletterForm.submitListener);
	},

	submitListener: function(event) {
		var form = this;
		try {
			var requester = new XMLHttpRequest();
		}
		catch (error) {
			try {
				var requester = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (error) {
				var requester = null;
			}
		}
		if (requester != null) {
			var element = document.getElementById('newsletter-status');
			element.className += ' working';

			form._timer = setTimeout(function() {
				requester.abort();
				NewsletterForm.writeError("The server timed out while making your request.");
			}, 10000);

			var parameters = "ajax_submit=1";
			var formElements = [];

			var textareas = form.getElementsByTagName("textarea");
			for (var i = 0; i < textareas.length; i++) {
				formElements[formElements.length] = textareas[i];
			}

			var selects = form.getElementsByTagName("select");
			for (var i = 0; i < selects.length; i++) {
				formElements[formElements.length] = selects[i];
			}

			var inputs = form.getElementsByTagName("input");
			for (var i = 0; i < inputs.length; i++) {
				var inputType = inputs[i].getAttribute("type");
				if (inputType == null || inputType == "text" || inputType == "hidden" || (typeof inputs[i].checked != "undefined" && inputs[i].checked == true)) {
					formElements[formElements.length] = inputs[i];
				}
			}

			for (var i = 0; i < formElements.length; i++) {
				var elementName = formElements[i].getAttribute("name");
				if (elementName != null && elementName != "") {
					parameters += "&" + elementName + "=" +
					encodeURIComponent(formElements[i].value);
				}
			}

			requester.open("POST", 'index.php', true);
			requester.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			requester.onreadystatechange = function() {
				clearTimeout(form._timer);
				if (requester.readyState == 4) {
					if (requester.status == 200 || requester.status == 304) {
						NewsletterForm.processResult(requester.responseXML,form);
					} else {
						NewsletterForm.writeError("The server was unable to be contacted.");
					}
				}
			};
			requester.send(parameters);
			Core.preventDefault(event);
		}
	},

	writeStatus: function(statval, resval, form) {
		var element = document.getElementById('newsletter-status');
		element.innerHTML = resval;
		element.className = statval == 1 ? 'success' : (statval == 2 ? 'error' : (statval == 3 ? 'info' : ''));
		if(statval == 1) {
			var newP = document.createElement("p");
			form.parentNode.replaceChild(newP, form);
		}
	},

	writeError: function(errorMsg) {
		var element = document.getElementById('newsletter-status');
		element.innerHTML = errorMsg;
		element.className = 'info';
		return;
		alert(errorMsg);
	},

	processResult: function(responseXML, form) {
		var statusNode = responseXML.getElementsByTagName("status")[0];
		var statusTextNode = statusNode.firstChild;
		var statusValue = statusTextNode.nodeValue;

		var resultNode = responseXML.getElementsByTagName("result")[0];
		var resultTextNode = resultNode.firstChild;
		var resultValue = resultTextNode.nodeValue;

		NewsletterForm.writeStatus(statusValue, resultValue, form);		
	}
};

Core.start(NewsletterForm);


