Protoform = function (form, success) {
	this.form = $(form);
	this.onSuccess = success;

	this.highlightClassName = 'protoformHighlight';

	this.onSubmit = function (e) {
		if (e) { Event.stop(e); }
		this.clearHighlights();
		this.clearMessages();
		this.disableForm();
		this.lastRequest = this.form.request({onComplete:this.onComplete.bind(this)});
	};

	this.disableFormActual = function () {
		var element;
		for (var i = this.form.elements.length; i--;)
		{
			element = this.form.elements[i];
			if (!element.disabled)
			{
				element.disabled = true;
				element._protoform_disabled = true;
			}
		}
	};

	this.disableForm = function () {
		window.setTimeout(this.disableFormActual.bind(this), 1);
	};

	this.clearHighlights = function () {
		for (var i = this.form.elements.length; i--;)
			$(this.form.elements[i]).removeClassName(this.highlightClassName);
	};

	this.clearMessages = function () {
		var node;
		if (node = $(this.form.id +'_message'))
			node.update();
		for (var i = this.form.elements.length; i--;)
			if (node = $(this.form.id +'_'+ this.form.elements[i].name +'_message'))
				node.update();
	};

	this.onComplete = function (request) {
		this.enableForm();

		var response = request.responseText.evalJSON(true);
		if (response.success)
			this.onSuccess.call(this, request, response);
		else
			this.onFailure.call(this, request, response);
	};

	this.onFailure = function (request, response) {
		var node;

		if (response.message)
			if (node = $(this.form.id +'_message'))
				node.update(response.message)
			else
				alert(response.message);

		for (var i = this.form.elements.length; i--;)
		{
			var element = this.form.elements[i];
			var reaction = response.reactions[element.name];

			if (reaction && reaction.highlight)
				$(element).addClassName(this.highlightClassName);

			node = $(this.form.id +'_'+ element.name +'_message');
			if (reaction && node)
				node.update(reaction.message ? reaction.message : "");
		}
	};

	this.enableForm = function () {
		var element;
		for (var i = this.form.elements.length; i--;)
		{
			element = this.form.elements[i];
			if (element._protoform_disabled)
			{
				element.disabled = false;
				element._protoform_disabled = undefined;
			}
		}
	};

	this.form.observe('submit', this.onSubmit.bind(this));
};

onContactSuccess = function () {
	location.href = "default.asp?mod=copy&alias=contact-thanks";
};

Event.observe(window, "load", function(){
	if (typeof sIFR == "function")
	{
		sIFR.replaceElement(".sifr-Frutiger_SAIN_Rm_v_1-red", named({ sFlashSrc:"sifr/Frutiger_SAIN_Rm_v_1.swf", sColor:"#aa1415", sBgColor:"#ffffff", sWmode:"transparent" }));
		sIFR.replaceElement(".sifr-Frutiger_SAIN_Rm_v_1-gray", named({ sFlashSrc:"sifr/Frutiger_SAIN_Rm_v_1.swf", sColor:"#2b2b2b", sBgColor:"#ffffff", sWmode:"transparent" }));
	}
	
	var node;
	if (node = $("contactForm"))
	{
		node.action = "submit.asp";
		new Protoform(node, onContactSuccess);
	}
});

