//
// Note: This file depends on the jQuery library.
//

/**
 * LHH HTML5 Validation
 * 
 * Based on jquery.formalize and
 * nmcFormHelper plugin - v1.0.5
 * http://www.newmediacampaigns.com 
 **/

var LHHValidate = {
	
	init : function() {

		// Create a new element to test for html5 attributes
		var i = document.createElement('input');
		
		// Check if "required" or "pattern" attributes are available
		if ( !('required' in i && 'pattern' in i) ) {
			LHHValidate.validation.init();
		}

	},
	
	validation : {
	
		init : function() {
			$('form').submit( LHHValidate.validation.check );
		},
		
		check : function() {

			$form = $(this);
			$invalidElements = $([]);
			
			// Hide any currently displayed error before we re-check
			var allElements = $('input, textarea', 'label', $form);
			//allElements.removeClass('requiredError patternError');
			allElements.removeClass('error');
			LHHValidate.validation.hideErrors( allElements );
			
			// Check for required inputs
			$('input[required], textarea[required]', $form).each(function() {
				var $element = $(this);
				
				if ( $.trim($element.val()) == '' || $element.val() == $element.attr('placeholder') )
				{
					//$element.addClass('requiredError');
					$element.addClass('error');
					$invalidElements = $invalidElements.add($element);
				}
			});
			
			// Check for pattern mismatches
			$('input[pattern], textarea[pattern]', $form).each(function() {
				var $element = $(this);
				var pattern = new RegExp( '^(?:'+$element.attr('pattern')+')$' );
				
				if ( !( pattern.test($element.val()) ) )
				{
					//$element.addClass('patternError');
					$element.addClass('error');
					$invalidElements = $invalidElements.add($element);
				}
			});
			
			// Check specifically for email mismatches
			$('input[type=email]', $form).each(function() {
				var $element = $(this);
				
				var current_value = $element.val();
				
				if (current_value != '' && !current_value.match(/^\S+@\S+\.\S+$/)) {
					//$element.addClass('patternError');
					$element.addClass('error');
					$invalidElements = $invalidElements.add($element);
				}
				
			});
			
			// Check specifically for url mismatches
			$('input[type=url]', $form).each(function() {
				var $element = $(this);

				var current_value = $element.val();
				
				if (current_value != '' && !current_value.match(/(^https?:\/\/)/i)) {
					//$element.addClass('patternError');
					$element.addClass('error');
					$invalidElements = $invalidElements.add($element);
				}
				
			});
			
			// If there were errors
			if ($invalidElements.length > 0)
			{
				// Pass off all the invalid elements to the error-showing function
				LHHValidate.validation.displayErrors($invalidElements);
				
				// Re-enable the submission buttons
				enableAllFormSubmits();
				
				// Cancel the form submission
				return false;
			}
		},
		
		hideErrors : function($elements) {
			$elements.removeClass('error');
			$elements.siblings('label.error').remove();
		},
		
		displayErrors : function($elements) {
			var $counter = 0;
			$elements.each(function() {
				$this = $(this);
				if ($counter == 0) {
					$this.focus();
				}
				$('label[for="' + $this.attr('id') + '"]').addClass('error');
				$counter++;
			});
		}
	}
		
}

$(document).ready(
	function() {
		LHHValidate.init();
	}
);

