//depends: showHide.js, 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);
}

function ajaxOfferValidation(action,callerForm,initiator,waitSource,showContainer) {
		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 query string
		var queryString = getQueryString(callerForm);
		
		//do the ajax call and hide the form after request
		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) {
					initiator.src = originalSource;
					initiator.alt = originalAlt;
					show("thankYouContent");
					Effect.Highlight("thankYouContent");
				} else {
					var startContainer = "";
					var endContainer = "";
					if(showContainer) {
						startContainer = '<div id="ajaxErrorStart">&nbsp;</div><div id="ajaxErrorBody">';
						endContainer = '</div><div id="ajaxErrorEnd">&nbsp;</div>';
					}
				
					$("ajaxErrorContainer").innerHTML = startContainer + transport.responseText + endContainer;
					$("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;
}

function ajaxContentFeedbackFormSubmit(action, callerForm, initiator, waitSource) {
		//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 query string
		var queryString = getQueryString(callerForm);
		
		//do the ajax call and hide the form after request
		new Ajax.Request(action + queryString, {
			method:"post",
			onSuccess: function(transport) {
				hide("didThisHelpForm");
				show("thanksForFeedback");
			},
			onFailure: function() {
				hide("didThisHelpForm");
				show("thanksForFeedback");
			}
		});	
}

function getQueryString(callerForm) {
		//get the form fields
		var queryString = "?";
		var nullRadio = new Boolean(false);
		//only include checked radio options
		for(i = 0; i < callerForm.elements.length; i++) {
			nullRadio = new Boolean(false);
			if(callerForm.elements[i].type == "radio") {
				if(callerForm.elements[i].checked == true) {
					queryString += callerForm.elements[i].name + "=" + callerForm.elements[i].value;
				} else {
					nullRadio = new Boolean(true);
				}
			} else {
				queryString += callerForm.elements[i].name + "=" + callerForm.elements[i].value;
			}
			queryString += ((i < callerForm.elements.length-1 && nullRadio != true) ? ("&") : (""));
		}
		return queryString;
}

var validationShown = false;
function ajaxValidation(action,callerForm,initiator,waitSource,showContainer) {
	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...";
		}

		var queryString = getQueryString(callerForm);

		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 {
					var startContainer = "";
					var endContainer = "";
					if(showContainer) {
						startContainer = '<div id="ajaxErrorStart">&nbsp;</div><div id="ajaxErrorBody">';
						endContainer = '</div><div id="ajaxErrorEnd">&nbsp;</div>';
					}
				
					$("ajaxErrorContainer").innerHTML = startContainer + transport.responseText + endContainer;
					$("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;
}