jQuery().ready
(
	function()
	{
		// common messages
		$('.error-message, .success-message, .error-message-home, .success-message-home', '.notify-message').toggle().fadeIn('slow');
		
		// links
		$('a[href=#]').attr('href', 'javascript:void(0);');
		
		// search
		$('form.search-form').submit
		(
			function()
			{
				if ($('input[@name=q]', $(this)).val().length < 4)
				{
					alert('Please enter a search query at least 4 characters long.');
					return false;
				}
				else
				{
					return true;
				}
			}
		);
		
		// user profile
		$('#pt-diseases')
			.focus(function() { if ($(this).val() == '<none>') $(this).val(''); })
			.blur(function() { if ($(this).val() == '') $(this).val('<none>'); });
			
		$('a[@id^=delete-pet]')
			.click(function() { return confirm('Are you sure to delete this pet\'s profile?'); } );
		
		
		// feedback rating
		var markVals	= $('input[@name=rate]');
		var markElms	= $("div.feedback-rating");
		for (var i = 0; i < markElms.length; ++i)
		{
			var value	= ($(markVals[i])) ? $(markVals[i]).val() : 0;
			$(markElms[i]).rating('rate', {curvalue:value});
		}
		
		
		// rating block update
		function updateRatingImage(blockContainer, ratingIdentifier, ratingData)
		{
			$(blockContainer).fadeTo
			(
				'slow', 0,
				function()
				{
					$('img', $(this)).remove();
					$(this).append($(ratingIdentifier, ratingData).text());
					$(this).fadeTo('slow', 1);
				}
			);
		}
		
		
		// answers rating
		$('form.ajax-answer-rate').submit
		(
			function()
			{
				var options = 
				{
					type: 'post',
					dataType: 'xml',
					processData: false,				  
					success: answerRateSent
				};
				
				var subjectForm = $(this);
				
				$(subjectForm).parent('div.new').fadeTo
				(
					'normal', 0,
					function()
					{
						$(this).css('display', 'none');
						$(this).siblings('div.ajax-loader').show();
						$(subjectForm).ajaxSubmit(options);
					}
				);
				
				return false;
			}
		);
		
		function answerRateSent(data)
		{
			var response = $('response', data);
			var success = $('status', response).text() == 'OK';
			var messageText = $('message', data).text();
			var messageClass = (success ? 'success' : 'error') + '-note';
			var answerId = $('id', data).text();
			var container = 'answer-rate-' + answerId;
			
			$('#' + container + ' div.ajax-loader').hide();
			$('#' + container + ' div.ajax-message').text(messageText).addClass(success ? 'success-note' : 'error-note').fadeIn('slow');
			
			if (success)
			{
				updateRatingImage('#' + container + ' div.current', 'current-answer-rate', data);
				updateRatingImage('#heading div.rating', 'current-question-rate', data);
			}
			
			return false;
		}
		
		
		// articles rating
		$('form#ajax-article-rate').submit
		(
			function()
			{
				var options = 
				{
					type: 'post',
					dataType: 'xml',
					processData: false,				  
					success: articleRateSent
				};
				
				var subjectForm = $(this);
				
				$(subjectForm).fadeTo
				(
					'normal', 0,
					function()
					{
						$(this).css('display', 'none');
						$(this).siblings('div.ajax-loader').show();
						$(subjectForm).ajaxSubmit(options);
					}
				);
				
				return false;
			}
		);
		
		function articleRateSent(data)
		{
			var response = $('response', data);
			var success = $('status', response).text() == 'OK';
			var messageText = $('message', data).text();
			var messageClass = (success ? 'success' : 'error') + '-note';
			var container = 'div.rate-article';
			
			$(container + ' div.ajax-loader').hide();
			$(container + ' div.ajax-message').text(messageText).addClass(success ? 'success-note' : 'error-note').fadeIn('slow');
			
			if (success)
			{
				updateRatingImage('#heading div.rating', 'current-rate', data);
			}
			
			return false;
		}
		
		
		// ask a new question page
		$('a#new-question-new-pet').click
		(
			function()
			{
				$('form#ask-new-question input#create-new-pet').val(1);
				$('form#ask-new-question').submit();
			}
		);
		
		
		// advisor profile
		$('#profile-edit-clinic button#find-clinic').click
		(
			function()
			{
				var zip = $('input#zip').val();
				
				if (!zip)
				{
					clinicMessage('Please enter a zip code', 'error-note');
					$('input#zip').focus();
					return false;
				}
				
				$('div#clinics-response').hide();
				$('#submit').hide();
				$('#new-clinic').hide();
				$('#ajax-loader').show();
				
				$.ajax
				({
					type: 'POST',
					url: '/clinic-locator.php',
					data: 'zip=' + zip,
					success: clinicsLoaded
				});
				
				return false;
			}
		);
		
		function clinicsLoaded(data)
		{
			var response = $('response', data);
			var success = $('status', response).text() == 'OK';
			var messageText = $('message', data).text();
			var messageClass = (success ? 'success' : 'error') + '-note';
			
			clinicMessage(messageText, messageClass);
			
			if (success)
			{
				$('div#clinics-response select').html($('clinics', response).text());
				$('div#clinics-response select').children(':first').attr('selected', 'selected');
				
				if ($('div#clinics-response').not(':visible').is('div'))
				{
					$('div#clinics-response').slideDown('slow');
				}
				
				$('#submit').show();
				$('#new-clinic').show();
			}
			
			$('#ajax-loader').hide();
			
			return false;
		}
		
		function clinicMessage(messageText, messageClass)
		{
			if ($('div#clinics-message').not(':visible').is('div'))
			{
				$('div#clinics-message').text(messageText).attr('class', messageClass).fadeIn('fast');
			}
			else
			{
				$('div#clinics-message').fadeTo
				(
					'fast', 0.05,
					function()
					{
						$(this).text(messageText).attr('class', messageClass).fadeTo('fast', 1);
					}
				);
			}			
		}
		
		
		// feedback rating
		var rateVals	= $('input[@name=rate]');
		var rateElms	= $("div.clinic-feedback-rating");
		for (var i = 0; i < rateElms.length; ++i)
		{
			var value	= ($(rateVals[i])) ? $(rateVals[i]).val() : 0;
			$(rateElms[i]).rating('rate', {curvalue:value});
		}
		
		
		$('a.edit-answer').click
		(
			function()
			{
				var id = $(this).attr('rel');
				
				$("#answer-" + id + " div.text").hide();
				$("#answer-" + id + " div.edit div.link").hide();
			
				$("#answer-" + id + " div.edit div.form").show();				
			}
		);
		
		$('a.cancel-edit-answer').click
		(
			function()
			{
				var id = $(this).attr('rel');
				
				$("#answer-" + id + " div.edit div.form").hide();
		
				$("#answer-" + id + " div.text").show();
				$("#answer-" + id + " div.edit div.link").show();				
			}
		);
	}
);