// Form Validation v4.2.1 by Derrick Gall (Jan. 2009)
// Last Updated: Jan. 2010

if (!$('script[src$="formValidationFSP.js"]:first').attr('hasexecuted')) {
	
	// Trim string method
	String.prototype.trim = function() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); };
	
	// Form validation
	function formValidation(objForm) {
		// Create objForm object
		var objGroups = {};
		
		// Remove old error if exists
		$('#formError').addClass('formHide');
		$('#formError').removeAttr('id');
		
		// Validate fields
		validateCount = objForm.find('.validate').length;
		validatedCount = 0;
		
		// Gather fields that need validation
		var arrFields = $.makeArray(objForm.find('.validate'));
		
		for (var i=0; i<arrFields.length; i++) {
			var field = $(arrFields[i]), fieldValue = field.val(), fieldID = field.attr('id'), validated = false;
	
			// Text inputs
			if (field.hasClass('text')) {
				if (!fieldValue || fieldValue == field.attr('title')) return showError(fieldID);
				validated = true;
			}
			
			// E-mail inputs
			if (field.hasClass('email')) {
				if (!fieldValue.match(/^[^@]+\@[^@]+$/) || fieldValue == field.attr('title')) return showError(fieldID);
				validated = true;
			}
			
			// Number inputs
			if (field.hasClass('number')) {
				if (!fieldValue.match(/^[\d\- \+\(\)]+$/) || fieldValue == field.attr('title')) return showError(fieldID);
				validated = true;
			}
			
			// Select fields
			if (field.hasClass('select')) {
				if (fieldValue == 'DID NOT RESPOND') return showError(fieldID);
				validated = true;
			}
			
			// Radio fields
			if (field.hasClass('radio')) {
				var fieldName = field.attr('name');
				validated = true;
				if (!objGroups[fieldName]) {
					// Signify fields with that name have already been validated
					objGroups[fieldName] = true;
					if (!objForm.find('input[name="' + fieldName + '"]:checked').length) return showError(fieldID);
				}
			}
			
			// Checkbox fields
			if (field.hasClass('checkbox')) {
				var fieldName = field.attr('name');
				validated = true;
				if (!objGroups[fieldName]) {
					// Signify fields with that name have already been validated
					objGroups[fieldName] = true;
					var count = objForm.find('input[name="' + fieldName + '"]:checked').length,
					fieldClass = field.attr('class');
					
					// Validate based on text and number provided in class attribute
					if (fieldClass.indexOf('exactly') > -1) {
						if (count != fieldClass.replace(/.*(exactly)(\d+)?.*/gi, '$2')) return showError(fieldID);
					}
					if (fieldClass.indexOf('atLeast') > -1) {
						if (count < fieldClass.replace(/.*(atLeast)(\d+)?.*/gi, '$2')) return showError(fieldID);
					}
					if (fieldClass.indexOf('atMost') > -1) {
						if (count > fieldClass.replace(/.*(atMost)(\d+)?.*/gi, '$2')) return showError(fieldID);
					}
					if (!count && fieldClass.match(/exactly||atLeast||atMost/)) return showError(fieldID);
				}
			}
			
			if (!validated && !fieldValue) return showError(fieldID);
		}
	
		return true;
	}
	
	// Show Error
	function showError(id) {
		$('label.formHide[for="' + id + '"]').attr('id', 'formError');
		$('#formError').removeClass('formHide');
		location.href = '#formError';
		return false;
	}
	
	$(document).ready(function(){
							   
		// Apply function to each intake form
		$('form[id^="intakeForm"],form[id^="blogCommentForm"]').submit(function() {
			if (!formValidation($(this))) return false;
			
			// Empty autofilled fields
			$(this).find('input[title],textarea[title]').each(function(){
				if ($(this).attr('title') == $(this).val()) $(this).val('');
			});
			
			addgmttime();
			return true;
		});
		
		// Disclaimer Popup
		$('#intakeFormShortAutofill,#intakeFormShort').each(function(){
			// Add click event to close link
			$('#intakeFormShortDisclaimer a').click(function(){ $('#intakeFormShortDisclaimer').slideToggle(200); });
			
			// Add click event to disclaimer link
			$(this).find('a.intakeFormShortDisclaimerLink').each(function(){
				$(this).attr('href', '#intakeFormShortDisclaimer');
				$(this).click(function(){
					// Get estimated position, window position, and set default position
					var estPosition = $(this)[0].offsetWidth + $(this).offset().left + 300,
					windowWidth = $(window).width(),
					positionLeft = $(this).offset().left + $(this).width() + 10;
					
					// If estimated position is greater than the window width, position left
					if (estPosition > windowWidth) positionLeft -= (320 + $(this).width());
					
					// Position disclaimer
					$('#intakeFormShortDisclaimer').css({ position: 'absolute', left: positionLeft, top: $(this).offset().top });
					
					// Show disclaimer
					$('#intakeFormShortDisclaimer').slideToggle(200);
				})
			});
			
		});
		
		// E-mail Obfuscation validation
		$('form[id^="emailObfuscation"]').each(function(){
	
			$(this).submit(function(){
				// Check for guid
				if (!checkObfuscationURL()) return false;
				// Validate form
				if (!formValidation($(this))) return false;
				// Set email_subject value
				$('#email_subject').val($('#emailObfuscationSubject').val());
				// Check if user wants a copy
				if ($('#emailObfuscationCopyMe').attr('checked')) {
					$('#copymeEmail').val($('#emailObfuscationEmailAddress').val());
				} else $('#copymeEmail').val('');
				
				addgmttime();
				return true;
			});
			
			// Function to check for guid in query string
			function checkObfuscationURL() {
				var url = location.href;
				if (url.indexOf('JSPeditPageContent.do') > -1) return true;
				if (url.indexOf('guid=') > -1) {
					var guid = url.replace(/.*guid=([^=]*=).*/gi, '$1');
					$('#guid').val(guid);
					return true;
				} else {
					alert('An error occured. Please use the back button on your browser and click on the e-mail link again.');
					return false;
				}
			}
			
			// Check for guid
			checkObfuscationURL();
			
			// Show subject and copy me inputs
			$('.formHasJavaScript').removeClass('formHasJavaScript');
			// Remove "NoJavaScript" input
			$('#formNoJavaScript').remove();
		});
	});
	
	$('script[src$="formValidationFSP.js"]:first').attr('hasexecuted', true);
}
