/**
 * Form Validation Module
 * 
 * @author Michael T. Smith (msmith@mcdpartners.com)
 * $Id: validation.js 17 2009-05-07 15:08:30Z msmith $
 */
(function () {

	/**
	 * Form to be validated
	 * 
	 * @var HTMLElement
	 */
	var validatableForm = document.getElementById('finish_scenario_form');
	
	/**
	 * Fields to be validated
	 * 
	 * @var Object
	 */
	var validatableFields = {
		'ending' : document.getElementById('ending_textarea'),
		'name' : document.getElementById('name_input'),
		'email' : document.getElementById('email_input')
	};
	
	var errorMessages = {
		'ending' : document.getElementById('blank-ending'),
		'name' : document.getElementById('blank-name'),
		'email' : document.getElementById('blank-email')
	}
	var hidSubmitFlag=document.getElementById('hidSubmitFlag');
	
	/**
	 * Submission Button
	 * 
	 * @var HTMLElement
	 */
	var submissionButton = document.getElementById('overlay_finish_scenario_submit');
	

	/**
	 * Stores the validation Results
	 * 
	 * @var Array
	 */
	var validationFlag = [];
	
	/**
	 * Method to validate fields
	 * 
	 * @return Boolean
	 */
	var validateFields = function () {
		// Reset the validation flag every run
		validationFlag = [];
		
		// Run checks
		// TODO: Remove the tight coupling of validation type to field name
		if (validatableFields['ending'].value.length === 0) validationFlag.push('ending');
		if (validatableFields['name'].value.length === 0 ) validationFlag.push('name');
		if (!(validatableFields['email'].value.match(/\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6}/))) validationFlag.push('email');
		
		if (validationFlag.length === 0) {
			return true;
		}
		else {
			return false;
		}
	};
	
	/**
	 * Method to show errors
	 */
	var showErrorMessages = function () {
		// Reset the error messages to hidden.
		mcd.dom.addClass('error-list', 'hide');
		
		for (error in errorMessages) {
			mcd.dom.addClass(errorMessages[error], 'hide');
		}
		
		// Add the applicable error messages
		for (var i = 0; i < validationFlag.length; i++) {
			mcd.dom.removeClass('error-list', 'hide');
			
			if (validationFlag[i] === 'ending') {
				mcd.dom.removeClass(errorMessages['ending'], 'hide');
			}
			if (validationFlag[i] === 'name') {
				mcd.dom.removeClass(errorMessages['name'], 'hide');
			}
			if (validationFlag[i] === 'email') {
				mcd.dom.removeClass(errorMessages['email'], 'hide');
			}
		}
	};
	
	
	//  Initializing Procedure
	var init = function () {
		mcd.event.add(submissionButton, 'click', function (event) {
			mcd.event.preventDefault(event);
			
			if (validateFields()) {
				hidSubmitFlag.value="submitted";
				
				//submissionButton.click();
				//alert(hidSubmitFlag.value);
				validatableForm.submit();
				
				
			}
			else {
				showErrorMessages();
			}
		});
	};
	
	// Ready? Go!!
	mcd.dom.ready(init);
})();
