var originalPostCode;

document.observe('dom:loaded', function()
{
	// Set all messages to invisible.
	$$('p.formMessage').each(function(obj)
	{
		obj.style.opacity = 0;
		obj.style.filter = 'alpha(opacity: 0)';
	});
	
	// Add focus and blur events to fields if there's an associated message. 
	$$('[group]').each(function(obj)
	{
		if($('formSectionMessage' + obj.getAttribute('group')))
		{
			obj.observe('focus', formFieldFocus);
			obj.observe('blur', formFieldBlur);
		}
	});

	$$('[toggletarget]').each(function(obj)
	{
		obj.observe('change', toggleFields);
		toggleFields(obj);
	});
	
	// Add keyup and keydown events to textareas that have a maxlength attribute.
	$$('textarea[maxlength]').each(function(obj)
	{
		obj.observe('keyup', setMaxLength);
		obj.observe('keydown', setMaxLength);
	});

	// Add a form reset if the postcode changes.
	if($('formAddressLookup'))
	{
		originalPostCode = $('formAddressPostCode').value;

		$('formAddressLookup').observe('change', function(obj)
		{
			if($('formAddressPostCode').value != originalPostCode)
			{
				$$('[group="address"]').each(clearField);
			}
		});
	}
});

function toggleFields(e)
{
	var source = e.element ? e.element() : e;  
	
	if(source.type == 'radio')
	{
		$$('[name=' + source.name + ']').each(function(radio)
		{
			$$('[group="' + radio.getAttribute('toggletarget') + '"]').each(function(target)
			{
				target.disabled = !radio.checked; 
			});
		});
	}

	$$('[group="' + source.getAttribute('toggletarget') + '"]').each(function(target)
	{
		target.disabled = !source.checked; 
	});
}

function clearField(obj)
{
	obj.value = '';
}

function formFieldFocus(e)
{
	message = $('formSectionMessage' + e.element().getAttribute('group')); 
	renderEngine.addRenderable(new OpacityInterpolator(message, 1, 0.3));
}

function formFieldBlur(e)
{
	message = $('formSectionMessage' + e.element().getAttribute('group')); 
	renderEngine.addRenderable(new OpacityInterpolator(message, 0, 0.3));
}

function setMaxLength(e)
{
	obj = e.element();
	obj.value = obj.value.substring(0, obj.getAttribute('maxlength'));
}

function show_widget(widget, identifier)
{
	if (identifier > "") {
		identifier = "_"+identifier;
	}else{
		identifier = "";
	}
	$(widget+'_widget'+identifier).style.display='inline-block';
	$(widget+'_widget_show'+identifier).style.visibility='hidden';
}

function hide_widget(widget, identifier)
{
	if (identifier > "") {
		identifier = "_"+identifier;
	}else{
		identifier = "";
	}
	$(widget+'_widget'+identifier).style.display='none';
	$(widget+'_widget_show'+identifier).style.visibility='visible';
	$('formAddressCountry'+identifier).style.visibility='visible';
}

function address_widget_find(postcode, nameornumber, street, optional, city, identifier)
{
	if (identifier > "") {
		identifier = "_"+identifier;
	}else{
		identifier = "";
	}
	widget_url = "ajax/address_finder.php";
	widget_results = "address_widget"+identifier;
	// Notify the customer that we are performing the search
	$(widget_results).innerHTML="Searching ... please wait";
//	new Ajax.Request(widget_url,
//			{
//				parameters:
//				"?postcode="+postcode+"&nameornumber="+nameornumber+"&street="+street+"&optional="+optional+"&city="+city+"&identifier="+identifier,
//				
//				onSuccess: function(t){
//					$(widget_results).innerHTML=t.responseText; 
//					$('address_widget'+identifier).style.display='inline-block';
//					$('address_widget_show'+identifier).style.visibility='hidden';
//					$('formAddressCountry'+identifier).style.visibility='hidden';
//					},
//				onFailure: function(){ alert("Something went wrong...") }
//			});

// We're just about to do the lookup so switch to show the cancel button rather than leaving the lookup one on display
	$('address_widget'+identifier).style.display='inline-block';
	$('address_widget_show'+identifier).style.visibility='hidden';
//	$('formAddressCountry'+identifier).style.visibility='hidden';
	
	new Ajax.Request(widget_url,
	{
		parameters:
		"?postcode="+postcode+"&nameornumber="+nameornumber+"&street="+street+"&optional="+optional+"&city="+city+"&identifier="+identifier,
		
		onSuccess: function(t){
			// Switch back on the lookup button
			$('address_widget'+identifier).style.display='none';
			$('address_widget_show'+identifier).style.visibility='visible';
//			$('formAddressCountry'+identifier).style.visibility='visible';
			
			eval('var result=' + t.responseText);
			switch (typeof(result)) {
				case 'number':
					switch(result) {
						case 1:
							//$(widget_results).innerHTML='<div style="text-align:center; margin: 10px 0;">Sorry, no results were found for the given details.</div>';
							alert('Sorry, no results were found for the given details');
							break;
						case 2:
							//$(widget_results).innerHTML='<div style="text-align:center; margin: 10px 0;">Too many results for the given details; fill in more of the address to narrow the results.</div>';
							alert('Too many results for the given details; fill in more of the address to narrow the results.');
							break;
						case 3:
							//$(widget_results).innerHTML='<div style="text-align:center; margin: 10px 0;">Please supply the full address, cannot lookup non-UK addresses</div>';
							alert('Please supply the full address, cannot lookup non-UK addresses');
							break;
						default:
							//$(widget_results).innerHTML='<div style="text-align:center; margin: 10px 0;">Please supply the full address, cannot lookup this address</div>';
							alert('Please supply the full address, cannot lookup this address');
							break;
					}
//					$('address_widget'+identifier).style.display='inline-block';
//					$('address_widget_show'+identifier).style.visibility='hidden';
//					$('formAddressCountry'+identifier).style.visibility='hidden';
					break;
				case 'object':
					// This should be an array of addresses so let's go through it
					if (result.length==1) {
						o=result[0];
						//$(widget_results).innerHTML="Only one address";
						address_fill(identifier,o.nameOrNumber,o.street,o.optional,o.city,o.country,o.postCode);
//						$('address_widget'+identifier).style.display='inline-block';
//						$('address_widget_show'+identifier).style.visibility='hidden';
//						$('formAddressCountry'+identifier).style.visibility='hidden';
					} else {
						var res="";
						for(o in result) {
							if (typeof(result[o])!="object") {
								continue;
							}
							//res+="<div style='display:block;'>";
							res+="\n<p>";
							res+="<a href='javascript:;' onclick="+'"'+"address_fill('"+identifier+"','"+result[o].nameOrNumber+"','"+result[o].street+"','"+result[o].optional+"','"+result[o].city+"','"+result[o].country+"','"+result[o].postCode+"')"+'"'+">";
							if(result[o].nameOrNumber!="") {
								res+=result[o].nameOrNumber+', ';
							}
							if(result[o].street!="") {
								res+=result[o].street+', ';
							}
							if(result[o].optional!="") {
								res+=result[o].optional+', ';
							}
							if(result[o].city!="") {
								res+=result[o].city;
							}
							//res+="</a></div>";
							res+="</a></p>";
						}
						$(widget_results).innerHTML=res+"\n";
						$('address_widget'+identifier).style.display='inline-block';
						$('address_widget_show'+identifier).style.visibility='hidden';
						$('formAddressCountry'+identifier).style.visibility='hidden';
					}
					break;
				default:
					$(widget_results).innerHTML='<div style="text-align:center; margin: 10px 0;">Please supply the full address</div>';
					alert('Please supply the full address');
//					$('address_widget'+identifier).style.display='inline-block';
//					$('address_widget_show'+identifier).style.visibility='hidden';
//					$('formAddressCountry'+identifier).style.visibility='hidden';
					break;
			}
		},
		onFailure: function(){ alert("Something went wrong...") }
	});
}

function address_fill(identifier, non, street, optional, city, country, postcode)
{
	if (identifier > "") {
		identifier = "_"+identifier;
	}else{
		identifier = "";
	}

	$('formAddressNameNumber'+identifier).value=non;
	$('formAddressStreet'+identifier).value=street;
	$('formAddressExtra'+identifier).value=optional;
	$('formAddressCity'+identifier).value=city;
	$('formAddressCountry'+identifier).value=country;
	$('formAddressPostCode'+identifier).value=postcode;
	
	$('address_widget'+identifier).style.display='none';
	$('address_widget_show'+identifier).style.visibility='visible';
	$('formAddressCountry'+identifier).style.visibility='visible';
}