YAHOO.util.Event.onDOMReady(init);

var form_errors_obj = null;
var form_status_obj = null;
var form_container_obj = null;
var submit_button_obj = null;

var form_errors_module = null;
var form_status_module = null;
var form_container_module = null;

function hide_and_disable()
{
	// form_container_module.hide();
	
	submit_button_obj.disabled = "disabled";
}

function hide_form_errors()
{
	var anim_attribs = 
	{
		height: {to:0}
	};
	
	var anim = new YAHOO.util.Anim("form_errors", anim_attribs, 1);
	anim.onComplete.subscribe(function(s, o) {form_errors_module.hide(); form_errors_obj.style.height = "auto"; form_errors_obj.style.overflow = "visible";});
	
	form_errors_obj.style.overflow = "hidden";
	
	anim.animate();
}

function hide_form_status()
{
	var anim_attribs = 
	{
		height: {to:0}
	};
	
	var anim = new YAHOO.util.Anim("form_status", anim_attribs, 1);
	anim.onComplete.subscribe(function(s, o) {form_status_module.hide(); form_status_obj.style.height = "auto"; form_status_obj.style.overflow = "visible";});
	
	form_status_obj.style.overflow = "hidden";
	
	anim.animate();
}

function init()
{
	form_errors_obj = document.getElementById("form_errors");
	form_status_obj = document.getElementById("form_status");
	form_container_obj = document.getElementById("form_container");	
	submit_button_obj = document.getElementById("f_submit");
	
	form_errors_module = new YAHOO.widget.Module("form_errors");
	form_status_module = new YAHOO.widget.Module("form_status");
	form_container_module = new YAHOO.widget.Module("form_container");
	
	submit_button_obj.disabled = false;
}

function init_2()
{
	// Disable caching
	$.ajaxSettings.cache = false;
}

function process_form(form_id)
{
	submit_button_obj.value = "Processing...";
	
	var form_obj = document.getElementById(form_id);
	if(form_obj == null)
	{
		alert("Please reload the page and try again.");
		return false;
	}
	
	// Get Form Data
	var fields = Array();
	var count = 0;
	var more_fields = true;
	
	while(more_fields)
	{
		var cur_field = document.getElementById("f_" + count);
		
		if(cur_field != null)
		{
			fields.push(cur_field);
			count++;
			continue;
		}
		
		more_fields = false;
	}
	
	verify_save_send(form_id, fields);
}

function process_form_2(form_id)
{
	submit_button_obj.value = "Processing...";
	
	var form_obj = document.getElementById(form_id);
	if(form_obj == null)
	{
		alert("Please reload the page and try again.");
		return false;
	}
	
	verify_save_send_2(form_id);
}

function set_form_status(msg)
{
	form_status_obj.innerHTML = msg;
	form_errors_module.hide();
	show_form_status();
	
	// form_status_module.show();
}

function set_form_errors(msg)
{
	form_errors_obj.innerHTML = msg;
	form_status_module.hide();
	show_form_errors();
}

function show_form_errors()
{	
	var original_color = "#EBE7DA";
	// alert("Original Color: " + original_color);
	
	var anim_attribs = 
	{
		backgroundColor: {to: original_color}
	};
		
	// alert("Creating animation.");
	
	var anim = new YAHOO.util.ColorAnim("form_errors", anim_attribs);
	anim.onStart.subscribe(function(s, o) {form_errors_obj.style.backgroundColor = "#F2E449";});
	// anim.onComplete.subscribe(function(s, o) {alert("Color animation complete.");});
	
	form_errors_module.show();
	
	anim.animate();
}

function show_form_status()
{	
	var original_color = "#EBE7DA";
	
	var anim_attribs = 
	{
		backgroundColor: {to: original_color}
	};
		
	var anim = new YAHOO.util.ColorAnim("form_status", anim_attribs);
	anim.onStart.subscribe(function(s, o) {form_status_obj.style.backgroundColor = "#F2E449";});
	
	form_status_module.show();
	
	anim.animate();
}

function verify_save_send(form_id, fields)
{
	var url = "service.php";
	var post_vars = "action=verify_save_send&form_name=" + form_id;
	
	for(var i in fields)
	{
		var current_val = null;
		switch(fields[i].type)
		{
			case "select-one": current_val = fields[i].options[fields[i].selectedIndex].value; break;
			case "text": current_val = fields[i].value; break;
			case "checkbox": current_val = fields[i].checked ? "Yes" : "No"; break;
			case "textarea": current_val = fields[i].value; break;
		}
		
		// post_vars += "&data[" + encodeURIComponent(fields[i].name) + "]=" + encodeURIComponent(fields[i].value);
		post_vars += "&data[" + encodeURIComponent(fields[i].name) + "]=" + encodeURIComponent(current_val);
	}
	
	var callback =
	{
		success: verify_save_send_success,
		failure: verify_save_send_failure,
		cache: false
	}
	
	var transaction = YAHOO.util.Connect.asyncRequest("POST", url, callback, post_vars);	
}

function verify_save_send_2(form_id)
{
	var url = "service.php";
	
	var data = {
		action: 'verify_save_send',
		form_name: form_id,
		data: $("#" + form_id).serialize()
	};
	
	$.post(url, data, verify_save_send_process_2, "json");
}

function verify_save_send_failure(o)
{
	set_form_errors("An error occurred while submitting your data.  Please try again in a few moments.");
	submit_button_obj.value = "Submit";
	// alert(o.responseText);
}

function verify_save_send_process_2(response)
{
	window.location.hash = "form_errors";
	submit_button_obj.value = "Submit";
	
	// Check for verify_errors
	if(response.verify_errors && response.verify_errors.length != 0)
	{
		var error_msg = "Please correct the following errors:<ul>";
		
		for(var i in response.verify_errors)
		{
			error_msg += "<li>" + response.verify_errors[i] + "</li>";
		}
		
		error_msg += "</ul>";
		
		set_form_errors(error_msg);
		return;
	}
	else
	{
		hide_form_errors();
	}
	
	// Check for mail_errors
	if(response.mail_errors && response.mail_errors.length != 0)
	{
		var error_msg = "The following errors occured while sending your data:<ul>";
		
		for(var i in response.mail_errors)
		{
			error_msg += "<li>" + response.mail_errors[i] + "</li>";
		}
		
		error_msg += "</ul>";
		
		set_form_errors(error_msg);
		return;
	}
	else
	{
		hide_form_errors();
	}
	
	// Check for status message
	if(response.success_message)
	{
		set_form_status(response.success_message);
		hide_and_disable();
		setTimeout(function(){submit_button_obj.disabled = false;}, 5000);
		return;
	}
	else
	{
		set_form_errors("Hmm...I can't tell whether or not your data was submitted successfully.  Please try again.");
	}
}

function verify_save_send_success(o)
{
	window.location.hash = "form_errors";
	// window.location.hash = "none";
	// $.scrollTo("#form_errors", 10000);
	submit_button_obj.value = "Submit";
	
	// alert(o.responseText);
	
	var response = eval("(" + o.responseText + ")");
	
	// Check for verify_errors
	if(response.verify_errors && response.verify_errors.length != 0)
	{
		var error_msg = "Please correct the following errors:<ul>";
		
		for(var i in response.verify_errors)
		{
			error_msg += "<li>" + response.verify_errors[i] + "</li>";
		}
		
		error_msg += "</ul>";
		
		set_form_errors(error_msg);
		return;
	}
	else
	{
		hide_form_errors();
	}
	
	// Check for mail_errors
	if(response.mail_errors && response.mail_errors.length != 0)
	{
		var error_msg = "The following errors occured while sending your data:<ul>";
		
		for(var i in response.mail_errors)
		{
			error_msg += "<li>" + response.mail_errors[i] + "</li>";
		}
		
		error_msg += "</ul>";
		
		set_form_errors(error_msg);
		return;
	}
	else
	{
		hide_form_errors();
	}
	
	// Check for status message
	if(response.success_message)
	{
		set_form_status(response.success_message);
		hide_and_disable();
		setTimeout(function(){submit_button_obj.disabled = false;}, 5000);
		return;
	}
	else
	{
		set_form_errors("Hmm...I can't tell whether or not your data was submitted successfully.  Please try again.");
	}
}
