//depends: prototype.js, scriptaculous.js

function hideValidation(now) {

	var thisDuration = 0.2;
	var thisFrom = 0.9;
	var thisTo = 0.0;
	
	if(now) {
		thisDuration = thisFrom = thisTo = 0.0;
	}
	
	new Effect.Opacity("ajaxErrorContainer", {duration:thisDuration, from:thisFrom, to:thisTo});
	validationShown = false;
	setTimeout("hide('ajaxErrorContainer');",1000*thisDuration);
}

var validationShown = false;
function ajaxValidation(action,callerForm,initiator,waitSource) {
	if(action && callerForm) {
		//put "waiting" stuff here
		if(validationShown) {
			//fade the element
			//turn the element off
			new Effect.Opacity("ajaxErrorContainer", {duration:0.2, from:0.9, to:0.0});
			validationShown = false;
		} else {
			new Effect.Opacity("ajaxErrorContainer", {duration:0.0, from:0.0, to:0.0});
		}

		//use wait button
		var originalSource = "";
		var originalAlt = "";
		if(initiator && waitSource) {
			//this assumes the initiator is an image or image button
			originalSource = initiator.src;
			originalAlt = initiator.alt;
			initiator.src = waitSource;
			initiator.alt = "Wait...";
		}

		//get the form fields
		var queryString = "?";
		for(i = 0; i < callerForm.elements.length; i++) {
			queryString += callerForm.elements[i].name + "=" + callerForm.elements[i].value + ((i < callerForm.elements.length-1 ) ? ("&") : (""));
		}

		new Ajax.Request(action + queryString, {
			method:"post",
			onSuccess: function(transport) {
				//put stuff to show errors here if error text does not contain "FORWARD WITHOUT ERRORS"
				if(transport.responseText.indexOf("FORWARD WITHOUT ERRORS") >= 0) {
					callerForm.submit();
				} else {
					$("ajaxErrorContainer").innerHTML = transport.responseText;
					$("ajaxErrorContainer").style.display = "block";
					new Effect.Opacity("ajaxErrorContainer", {duration:0.7, from:0.0, to:0.9});
					initiator.src = originalSource;
					initiator.alt = originalAlt;
					validationShown = true;
				}
			},
			onFailure: function() {
				//submit to traditional validation if ajax fails
				callerForm.submit();
			}
		});		
	}
	return false;
}