/**
 * @abstract An AJAX-based processor for web forms
 * @author Mikhail Kornienko (mike@macdiggs.com)
 * @copyright (c)2006 Mikhail Kornienko
 */

//the form name should be "mainform"

var formProcessorScript = "/form_processor.php";
// no need to touch anything below.

addLoadEvent(initFormProcessor);

function initFormProcessor()
{
	//getting all available forms.
	if (!document.mainform) {
		//alert("no form");
		return;
	}
	document.mainform.setAttribute("id", "mainform");
	var formCharset = document.mainform.getAttribute("accept-charset");
	if (formCharset==null) {
		//alert("setting form charset");
		//document.mainform.setAttribute("accept-charset", "UTF-8");
	}
	document.mainform.onsubmit = checkFormInput;
}

function checkFormInput()
{
	//shows an alert with form values
	formname = "mainform";
	//alert("checking for form input:"+formname);
	
	var pars = Form.serialize($('mainform'));
	var pars = pars + "&form_action=check";

	var myAjax = new Ajax.Request(formProcessorScript, {method: 'post', parameters: pars, onComplete: checkComplete} );
	
	return false;
	
	
	var theForm = $(formname);
	
	//getting the required fields.
	var neededValue = theForm.need.value;
	var neededArray = neededValue.split(" ");
	var matchValue = theForm.match.value;
	var matchArray = neededValue.split(" ");
	//alert("needed elements:"+neededArray.length);
	
	//checking for all the elements being entered.
	var errorString = "";
	for (i=0; i<neededArray.length; i++) {
		var elementName = neededArray[i];
		
		var cmd = "document."+formname+"['"+elementName+"'].type";
		var elementType = eval(cmd);
		alert("eltype:"+elementType);
		
		var cmd = "document."+formname+"['"+elementName+"'].value";
		var elementValue = eval(cmd);
		
		if (elementValue.length==0) {
			errorString += "<li> "+elementName;
		}
	}
	
	//checking for matching elements to match.
	
	
	if (errorString.length>0) {
		errorString = "下記の必須項目を記入してください<br>" + errorString;
		displayErrors(errorString, "form_errors");	
		return false; //error, not proceeding.
	}
	
	var agree = confirm("この内容で送信してもよろしいでしょうか？");
	if (agree) {
		sendForm(formname);
	}
	return false;
}

function checkComplete(originalRequest)
{
	//alert("check complete");
	var checkData = originalRequest.responseText;
	
	if (checkData.length>1) {
		checkData = "下記の必須項目を記入してください<br>" + checkData;
		displayErrors(checkData, "form_errors");	
		return false; //error, not proceeding.
	} else {
		var agree = confirm("この内容で送信してもよろしいでしょうか？");
		if (agree) {
			sendForm(formname);
		}
	}
}

function sendForm(formname)
{
	//and all for nothing heheh :)
	var pars = Form.serialize($('mainform'));

	var myAjax = new Ajax.Updater( "mainform", formProcessorScript, {method: 'post', parameters: pars, onLoading: showLoad, onComplete: showResponse} );
}

function showLoad () {
	//alert("loading");
	//$('load').style.display = 'block';
}
function showResponse (originalRequest) {
	new Effect.ScrollTo("mainform");
	var reportString = "フォームを無事に送信しました。";
	displayErrors(reportString, "form_flash");	
	$("form_errors").style.display = 'none';
}

function displayErrors(errorsText, paneID)
{
	//this displays errors by creating an error div (id: form_errors) or using an existing one
	var errorsDiv;
	//first checking if we need to create a new element
	errorsDiv = document.getElementById(paneID);
	if (!errorsDiv) {
		//need to create a new div
		var newErrorDiv = document.createElement("div");
		newErrorDiv.setAttribute("id", paneID);
		newErrorDiv.style.display = "none";
		//inserting just before the form.
		$("mainform").parentNode.insertBefore(newErrorDiv, $("mainform"));
		errorsDiv = newErrorDiv;
	}
	errorsDiv.innerHTML = errorsText;
	//errorsDiv.style.height = "1px";
	
	new Effect.Appear(paneID, {duration: 1});
	new Effect.ScrollTo(paneID, {duration: 1});
	new Effect.Highlight(paneID, {duration: 3});
}