
/**
 * Search Stuff
 * 	 - Autocomplete
 *   - Flatten query string for analytics
 *   - Event handlers for search popup
 */
$(document).ready(function()
{	
	// flatten query string for analytics
	$('#search form').submit(function()
	{
		// remove any placeholder text
		$('input.placeholder, textarea.placeholder', this).each(function()
		{
			if(this.value == this.originalText) { this.value = ''; }
		});
		
		// interrupt the search query, and replace it with a single search string
		var form = $(this);
		var searchText = $("input[type=text][name='query[]']", form);
		var queries = searchText.val() ? [ searchText.val() ] : [ ];
		$('input:checked').each(function() { queries.push($(this).val()); });
		$('input[name=q]', form).val(queries.join(' '));
		window.location = '/search/?query=' + encodeURIComponent(queries.join(' '));
		return false;
	});
	
	// autocomplete
	$('#base-query, #pop-query, input#post_topic').each(function()
	{
		var field = this;
		var options = field.id == 'post_topic' ? { } :
			{ 'resultsClass': 'ac_search', 'width': 213, 'selectFirst': false };		
		$(field).autocomplete('/posts/topics-autocomplete/', options)
		.result(function()
		{
			if(field.id == 'base-query')
			{
				//$(field).val('"' + $(field).val() + '"');
				$(field.form).submit();
			}
		});
	});
	
	// event handlers for search popup
	$('#view-topics').click(function()
	{
		$('#pop-query').val($('#base-query').val());
		$('#topics-pop').fadeIn('fast', function()
		{
			$('#pop-query').focus();
		});
	});	
	$('#close-pop').click(function() { $('#topics-pop').fadeOut('fast'); });
});

/**
 * PNG Fix 
 */
$(document).ready(function()
{
	$.ifixpng('/images/required/pixel.gif');
	$('img[src$=.png]').ifixpng(); 	
});


/** 
 * Set up events for placeholder <input> tags
 */
$(document).ready(function()
{
	$('form:not(#search form)').submit(function()
	{
		$('input.placeholder, textarea.placeholder', this).each(function()
		{
			if(this.value == this.originalText)
			{
				this.value = '';
			}
		});
	});
	
	$('input.placeholder, textarea.placeholder').each(function()
	{
		this.originalText = $(this).val();
		$(this).focus(function()
		{
			if(this.value == this.originalText) { this.value = ''; }
		})
		.blur(function()
		{
			if(this.value == '') { this.value = this.originalText; }
		});
	});
});


/**
 * Asynchronous 'Heart' Code
 */
$(document).ready(function()
{
	$('.heart').each(function()
	{
		var heart = this;
		$('a', heart).click(function()
		{
			var link = this;			
			var pk = $(link).attr('rel');
			var url = $(link).hasClass('provider') ?
				('/providers/heart/' + pk) : 
				('/posts/heart/' + pk);	
			if($(link).hasClass('inactive')) { return; }
			$.getJSON(url, function(result)
			{
				if(result.success)
				{
					$('.count', heart).text(result.count);
					$(link).addClass('inactive');
				}
			});
		});
	});
});


/**
 * Provider Map or Contact View 
 */
$(document).ready(function()
{
	var contactLink = $('#map-nav a.contact');
	var mapLink = $('#map-nav a.directions');
	var map = $('#google-map');
	var form = $('#provider-contact');

	// activate the contact form
	contactLink.click(function()
	{
		contactLink.addClass('active');
		mapLink.removeClass('active');
		form.show();
		map.hide();
	});
	
	// activate the google map
	mapLink.click(function()
	{
		contactLink.removeClass('active');
		mapLink.addClass('active');
		map.show();
		form.hide();
	});
});


/**
 * Fix the minimum height of short pages
 */
$(document).ready(function()
{
	var footer = $('#footer');
	var originalHeight = footer.height();
	
	function setFooterSize()
	{		
		var gap = $(window).height() - (footer.position().top + originalHeight);
		footer.height(gap > 0 ? (originalHeight + gap) : originalHeight);
	}
	
	setFooterSize();
	$(window).resize(setFooterSize);
});


/** 
 * Share Popup
 */
$(document).ready(function()
{	
	$('.post, #wide-column, .left-column').each(function()
	{
		var group = $(this);
		var url = $('form', group).attr('action');
		var slideout = $('.share-slideout', group);
		var shareLinks = $(".share-slideout a[class*='record']", group);
		var trigger = $('.share-trigger', group).click(showSharing);
		var popup = $('.send-email-pop', group);
				
		shareLinks.click(function()
		{
			var pk = $(this).attr('rel');
			var type = $(this).attr('rev');
			var url = $(this).hasClass('posts') ? '/posts/share/' : '/providers/share/';
			$.getJSON(url, { pk: pk, type: type }, function(result)
			{ 
				if(result.success)
					$('.post-shares-' + pk).text(result.count);
			});

		});	
		
		function clearValidation() 
		{
			$('.error', group).css({ display: 'none' });
		}
		
		function validateFields() 
		{
			var success = true;
			var emailPattern = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
			function fail(field) { success = false; $('.' + field).css({ display: 'inline' }); }
			
			// name is missing
			if($("input[name='sender-name']", group).val() == '')
				fail('missing-name');
			 
			// sender email is missing
			if($("input[name='sender-email']", group).val() == '')
				fail('missing-email');
			// sender email is invalid
			else if(!$("input[name='sender-email']", group).val().match(emailPattern))
				fail('invalid-email')
						
			// recipients are missing
			if($("input[name='recipients']", group).val() == '')
			{
				fail('missing-recipients');
			}
			// recipient email(s) are invalid
			else
			{
				var recipients = $("input[name='recipients']", group).val().split(/\s*,\s*/);
				for(var i=0;i<recipients.length;i++)
				{
					if(recipients[i] != '' && !recipients[i].match(emailPattern))
					{
						fail('invalid-recipients');
						break;
					}
				}
			}
			
			return success;
		}
		
		function closeAll()
		{
			$('.share-slideout[open=yes]').each(function()
			{				
				$('.send-email-pop').css({ display: 'none' });
				var slideout = $(this);
				slideout.attr('open', 'no');
				slideout.animate({ height: 0, paddingBottom: 0 }, 'fast', function() 
				{ 
					slideout.css({ display: 'none', overflow: 'hidden' });
					if(window.ResizeGoogleMap) { window.ResizeGoogleMap(); }
				});
			});
		}
				
		function showSharing()
		{ 
			var open = slideout.attr('open');
			closeAll();			
			if(open != 'yes') 
			{
				slideout.show(0).animate({ height: 29, paddingBottom: 4 }, 'fast', function() 
				{ 
					slideout.css({ overflow: 'visible' });
					if(window.ResizeGoogleMap) { window.ResizeGoogleMap(); }
				}); 
				slideout.attr('open', 'yes');
			} 
		}
		
		// open email popup
		$('.send-email', group).click(function() 
		{
			$('.send-email-pop').css({ display: 'none' });
			$('input.text, textarea', group).val('');
			clearValidation();
			popup.show();
		});
		
		// close email popup
		$('.close-pop', group).click(function() 
		{
			popup.hide("fast", function() { popup.css({ display: 'none' }); });
		});
		
		// send email 
		$('.send-email-pop input[type=submit]', group).click(function()
		{
			clearValidation();
			if(validateFields()) 
			{
				var params = 
				{
					name: $("input[name='sender-name']", group).val(),
					email: $("input[name='sender-email']", group).val(),
					recipients: $("input[name='recipients']", group).val(),
					message: $("textarea[name='message']", group).val()
				};
				
				$.getJSON(url, params, function(results)
				{
					popup.hide("fast", function() { popup.css({ display: 'none' }); });
				});				
			}
			return false;			
		});
	});
	
});

