// Name of the RFI form
var RFI_FORM_ID = "command";

function processValidationCheck() {
	var url = '/ajax/serviceobjects/address';
	new Ajax.Request(url, {
		method: 'post',
		parameters: $(RFI_FORM_ID).serialize(true),
		onFailure: function(transport, json) {
			// ignore errors, let user pass through
			$(RFI_FORM_ID).submit();
		},
		onSuccess: function(transport,json) {
			if(!json) {
				try {
					// try Prototype's JSON
					json = String.evalJSON(this.transport.responseText);
				} catch (e) {
					try {
						// root-level EVAL
						json = eval('(' + this.transport.responseText + ')');
					} catch(er) {
						return; /* error, could not transpose Response to JSON */
					}
				}
			}
			try
			{
				if(json.status=="error") {
					// In Error response state, submit form
					$(RFI_FORM_ID).submit();
				} else {
					if(json.addressChangeModel.hasChanges) {
						// pick which error to show, similarAddressErrorMessage or noAddressErrorMessage
						if(json.addressChangeModel.errorMessage) {
							// Address is not found
							$('noAddressErrorMessage').show();
						} else {
							$('similarAddressErrorMessage').show();
							// present suggested list
							populateSimilarAddress(json.addressChangeModel);
						}
						fillValidationFields();
						processResponse();
					}
				}
			} catch (e) {
				//$(RFI_FORM_ID).submit();
			}
		}
	});
}

function populateField(value, useBlank) {
	var subBlankForNull = (arguments.length == 1)?false:useBlank;
	return (value ? value : (subBlankForNull ? "" : "&nbsp;"));
}

/**
 * Setup suggested address + append hidden input with value, name with edit_ prefix to re-leverage
 * existing setEditedValuesToOrig() function to copy from hidden fields to RFI form
 */
function populateSimilarAddress(model) {
	$("suggest_address").innerHTML = populateField(model.addr1)
	$("suggest_address").appendChild(
		new Element('input', {
			className: 'display-none',
			id: 'edit_address',
			value: populateField(model.addr1,true)
		})
		);
	$("suggest_address2").innerHTML = populateField(model.addr2)
	$("suggest_address2").appendChild(
		new Element('input', {
			className: 'display-none',
			id: 'edit_address2',
			value: populateField(model.addr2,true)
		})
		);
	$("suggest_city").innerHTML = populateField(model.city)
	$("suggest_city").appendChild(
		new Element('input', {
			className: 'display-none',
			id: 'edit_city',
			value: populateField(model.city,true)
		})
		);
	$("suggest_state").innerHTML = populateField(model.state)
	$("suggest_state").appendChild(
		new Element('input', {
			className: 'display-none',
			id: 'edit_state',
			value: populateField(model.state,true)
		})
		);
	$("suggest_postalCode").innerHTML = populateField(model.postalCode)
	$("suggest_postalCode").insert(
		new Element('input', {
			className: 'display-none',
			id: 'edit_postalCode',
			value: populateField(model.postalCode,true)
		})
		);
	if(!$('useOrigAddress')) {
		$("previousAddress").appendChild(
			new Element('input', {
				type:'radio',
				name:'addressChoice',
				id:'useOrigAddress',
				checked:"checked",
				value:'orig'
			})
			);
		$("previousAddress").appendChild(
			new Element('label',{
				'for': 'useOrigAddress'
			}).update('Use this Address')
			);
	} // end check for existing use orig address radio
	if(!$('useSuggestedAddress')) {
		// add break element to compensate for the "edit address" link
		$("suggestedAddress").appendChild(
			new Element('br')
			);
		$("suggestedAddress").appendChild(
			new Element("input", {
				type:'radio',
				name:'addressChoice',
				id:'useSuggestedAddress',
				value:'edit'
			})
			);
		$("suggestedAddress").appendChild(
			new Element('label',{
				'for': 'useSuggestedAddress'
			}).update('Use suggested Address')
			);
	} // end check for existing use suggested address radio
	$("suggestedAddress").show();
}

function fillValidationFields() {
	["orig_address","orig_address2","orig_city","orig_state","orig_postalCode"].each(function(obj) {
		var dest = $(obj);
		// remove prefix (orig_)
		var srcName = obj.sub("orig_","");
		var src = $(srcName);
		dest.innerHTML = src.value;
	});
}

/**
 * Build Lightbox and setup edit capability
 */
function processResponse() {
	var addressValidationWrap = $('addressValidationWrap');
	Modalbox.show($(addressValidationWrap), {
		overlayClose: false,
		title: "Address Verification",
		transitions: false,
		width: 600,
		afterLoad: function() {
			var continueButton = $('addressValidationContinue');
			Event.observe(continueButton, 'click', function(event) {
				//user has clicked on 'Continue'
				event.stop();
				setEditedValuesToOrig();
				Modalbox.hide({
					afterHide: function() {
						$(RFI_FORM_ID).submit();
					}
				}); // end of Hide)
			}); // end of observer for continueButton);
		} // end of afterLoad
	}); // end of "show"
}// end of function

function setEditedValuesToOrig() {
	// user has no suggestedAddresses (nothing returned) and check for "edited" address
	// user has suggestedAddresses and has selected the "use suggested address" radio buttoon
	var hasUserPickedUseOrigRadio = ($("useOrigAddress")?$("useOrigAddress").checked:false);
	var hasEditedOrigAddress = !$('editPreviousAddress').visible();
	if(!hasUserPickedUseOrigRadio || hasEditedOrigAddress) {
		if($('edit_address')) {
			["edit_address","edit_address2","edit_city","edit_state","edit_postalCode"].each(function(obj) {
				var src = $(obj);
				var destName = obj.sub("edit_","");
				var dest = $(destName);
				dest.value = src.value;
			});
		}
	} // end if user has picked use orig address
}

function makeAddressValidationEditable() {
	var tabOrder = 1000;
	["orig_address","orig_address2","orig_city","orig_state","orig_postalCode"].each(function(obj) {
		var dest = $(obj);
		var srcName = obj.sub("orig_","");
		var srcFormElement = $(srcName);
		var newNode = srcFormElement.cloneNode(true);
		newNode.id = "edit_" + srcName;
		newNode.name = "edit_" + srcName;
		newNode.tabIndex = tabOrder++;
		dest.innerHTML = "";
		dest.appendChild(newNode);
	});
	$('editPreviousAddress').hide();
	Modalbox.resizeToContent();
}

//DE2048 - DO NOT DO ANY VALIDATION AT ALL but leaving this in here in case we ever need it in the future
//function performSimpleValidation() {
//	var isValid = true;
//	["address","address2","city","state","postalCode"].each(function(obj) {
//		var node = $(obj);
//		if(isValid) {
//			isValid = !(!node || node.value=="");
//		}
//	});
//	return isValid;
//}

// RFI Submit Button
//var submitButton = $('submitButton');
//if (submitButton) {
//	Event.observe(submitButton, 'click', function(event) {
//		if(performSimpleValidation()) {
//			event.stop();
//			processValidationCheck();
//		} // end simple validation
//	})
