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'));
}

// Reviews

function showComments(id)
{
	new Ajax.Updater({ success: 'reviewComments' + id }, '../reviews/showComments/'+id, {parameters: { layout: 'off' }});
	$('showComments' + id).toggle();
	$('hideComments' + id).toggle();
}

function hideComments(id)
{
	$('reviewComments' + id).innerHTML='';
	$('showComments' + id).toggle();
	$('hideComments' + id).toggle();
}

function writeComment(id)
{
	new Ajax.Request('../reviews/writeComment/'+id,
	{
		parameters:
		{
			layout: 'off'
		},

		onSuccess: function(t)
		{
			$('writeReviewComment' + id).innerHTML = t.responseText;
			updateFormObservers();
			$('commentText' + id).focus();
    	}
	});
}

function previewComment(id)
{
	new Ajax.Updater({ success: 'writeReviewComment' + id }, '../reviews/previewComment/'+id+'?layout=off', {parameters: $('commentForm'+id).serialize()});
}

function saveComment(id)
{
	new Ajax.Updater({ success: 'writeReviewComment' + id }, '../reviews/saveComment/'+id, {parameters: { layout: 'off' }});
}

function cancelComment(id)
{
	$('writeReviewComment'+id).innerHTML='';
}
