if(typeof cmscontacteditor == 'undefined') {
var cmscontacteditor = {};

cmscontacteditor.addressFields = 
[ "given_name", "middle", "family_name", "organization", "address_line1", "address_line2", "address_line3", "city", "region", "region_ff", "postal_code", "country" ];
cmscontacteditor.phoneFields = 
[ "nanp", "nanp_extension", "intl", "intl_extension" ];

cmscontacteditor.buttonRecordClick = function (evt) {
	var button = Event.findElement(evt, 'button');
	if (button.disabled)
		return;
	var form = Event.findElement(evt, 'form');
	var input = form.elements['buttonclicked'];
	if (button && input)
		input.value = button.name;
}

cmscontacteditor.countrySelectUpdate = function(evt) {
	var country_select = evt.target || Event.element(evt);
	var region_select = Element.select(country_select.parentNode.parentNode, "div.region select").pop();
	var region_input = Element.select(country_select.parentNode.parentNode, "div.region input").pop();
	if (country_select.value == 'US') {
		region_select.style.display = 'block';
		region_input.style.display = 'none';
	}
	else {
		region_select.style.display = 'none';
		region_input.style.display = 'block';
	}
}

cmscontacteditor.addressSelectUpdate = function(evt) {
	var select = evt.target || Event.element(evt);
	var n = select.value;
	if (!n || n == "")
		return;
	var prefix = select.name.replace(/_address_selection$/, '');
	var form = select.form;
	for(var i = 0; fld = cmscontacteditor.addressFields[i]; i++) {
		var dest = form[prefix+"_"+fld];
		if (!dest)
			continue;
		var src = $(n+"_"+prefix+"_"+fld);
		if (src && src.firstChild) {
			dest.value = src.firstChild.data;
		}
		else {
			dest.value = '';
		}
	}	
	cmscontacteditor.countrySelectUpdate({ target: $(prefix+"_country") });
	if (Selector.findChildElements(form, [ 'span.address_select_clear' ]).length > 0)
		select.value='';
	var sameAs = form['shipping_same_as_billing'];
	if (sameAs)
		sameAs.checked = false;
}

cmscontacteditor.phoneSelectUpdate = function(evt) {
	var select = evt.target || Event.element(evt);
	var n = select.value;
	if (!n || n == "")
		return;
	var prefix = select.name.replace(/_phonenumber_selection$/, '');
	var form = select.form;
	for(var i = 0; fld = cmscontacteditor.phoneFields[i]; i++) {
		var dest = form[prefix+"_"+fld];
		if (!dest)
			continue;
		var src = $(n+"_"+prefix+"_"+fld);
		if (src && src.firstChild) {
			dest.value = src.firstChild.data;
		}
		else {
			dest.value = '';
		}
	}	
	var format = $(n+"_"+prefix+"_phone_number_format");
	if (format && format.firstChild) {
		var btn = $(prefix+"_phone_number_format_"+format.firstChild.data);
		if (btn)
			btn.click();
	}
	if (Selector.findChildElements(form, [ 'span.phone_select_clear' ]).length > 0)
		select.value='';
}

cms.executeOnWindowLoadOrAfter(function() {
	var el, list;

	list = $$('div.updateprincipalbean button');
	while (el = list.pop()) {
		Event.observe(el, 'click', cmscontacteditor.buttonRecordClick, false);
	}
		
	// shows/hides region fields depending on selected country
	list = $$("div.country select");
	while(el = list.pop()) {
		Event.observe(el, 'change', cmscontacteditor.countrySelectUpdate, false);
		cmscontacteditor.countrySelectUpdate({ target: el });
	}
	
	list=$$('div.address_existing select');
	while (el = list.pop()) {
		Event.observe(el, 'change', cmscontacteditor.addressSelectUpdate, false);
	}
	
	list=$$('div.phonenumber_existing select');
	while (el = list.pop()) {
		Event.observe(el, 'change', cmscontacteditor.phoneSelectUpdate, false);
	}
	
	// shows/hides phone number fields depending on NANP selection
	list = $$("div.phone_number");
	while(el = list.pop()) {
		var nanp_radio = Element.select(el, ".nanp_button input").pop();
		var intl_radio = Element.select(el, ".intl_button input").pop();
		var nanp_div = Element.select(el, "div.nanp").pop();
		var intl_div = Element.select(el, "div.intl").pop();
		
		if (nanp_radio && nanp_div && intl_radio && intl_div) {
			var update = function() {
				if (nanp_radio.checked) {
					nanp_div.style.display = 'block';
					intl_div.style.display = 'none';
				}
				else {
					nanp_div.style.display = 'none';
					intl_div.style.display = 'block';
				}
			}
			Event.observe(nanp_radio, 'click', update, false);
			Event.observe(intl_radio, 'click', update, false);
			update();
		}
	}	
	
});


}
