var Validation = {

	validate : function () {
		var $LabelsToValidate = $('form[id=Entry]').find('label');
		var Valid = true;
		$LabelsToValidate.each(function(index, Element){
			var ValidationID = $(Element).attr('for');
			if (ValidationID != ''){
				if ($('input[name='+ValidationID+']:radio').length){
					var ValidationType = "RADIO";
				} else {
					var ValidationType = $('#'+ValidationID).get(0).tagName;
				}
				var ValidationRequired = $(Element).attr('required');
				var ValidationMethod = $(Element).attr('validation');
				var ValidationText = $(Element).text();
				//alert('ValidationID: '+ValidationID+'\nValidationType: '+ValidationType+'\nValidationRequired: '+ValidationRequired+'\nValidationMethod: '+ValidationMethod+'\nValidationText: '+ValidationText+'');
				//Required Validation happens first here
				if (typeof(ValidationID) !== 'undefined' && typeof(ValidationType) !== 'undefined' && typeof(ValidationRequired) !== 'undefined'){
					if (ValidationType.toUpperCase() == 'RADIO' && ValidationRequired==1){
						if (Validation.getRadioVal(ValidationID) == ''){
							alert('You must provide an answer for the following question\n\n'+ValidationText);
							Valid = false;
							return false;
						}
					} else if (ValidationType.toUpperCase() == 'SELECT' && ValidationRequired==1){
						if (Validation.getSelectVal(ValidationID) == ''){
							alert('You must provide an answer for the following question\n\n'+ValidationText);
							Valid = false;
							return false;
						}
					} else if (ValidationType.toUpperCase() == 'INPUT' && ValidationRequired==1){
						if (Validation.getInputVal(ValidationID) == ''){
							alert('You must provide an answer for the following question\n\n'+ValidationText);
							Valid = false;
							return false;
						}
					}
				}
				//Standard Validations happens second here
				if (typeof(ValidationID) !== 'undefined' && typeof(ValidationType) !== 'undefined' && ValidationMethod !='' && typeof(ValidationMethod) !== 'undefined'){
					if (ValidationType.toUpperCase() == 'INPUT' && ValidationMethod.toUpperCase() == 'EMAIL'){
						if (!app.isValidEmail(app.getInputVal(ValidationID))){
							alert('The following email address appears invalid\n\n'+app.getInputVal(ValidationID));
							Valid = false;
							return false;
						}
					}
				}
				//Custom Validations happens last here
				if (typeof ValidationID == 'string' && eval('typeof check_' + ValidationID) == 'function') {
					if(eval('check_'+ValidationID+'()') == false){
						Valid = false;
						return false;
					}
				}
				//if(typeof check_ + question.REFERENCENAME == 'function'){check_ + question.REFERENCENAME();}
			}
		});
		/*if (Valid){
			$LabelsToValidate.each(function(index, Element){
				var ValidationID = $(Element).attr('for');
				var ValidationType = $(Element).attr('type');
				var ValidationMethod = $(Element).attr('validation');
				var ValidationText = $(Element).text();
				if (typeof(ValidationID) !== 'undefined' && typeof(ValidationType) !== 'undefined' && ValidationMethod !='' && typeof(ValidationMethod) !== 'undefined'){
					if (ValidationType.toUpperCase() == 'INPUT' && ValidationMethod.toUpperCase() == 'EMAIL'){
						if (!app.isValidEmail(app.getInputVal(ValidationID))){
							alert('The following email address appears invalid\n\n'+app.getInputVal(ValidationID));
							Valid = false;
							return false;
						}
					}
				}
			});
		}*/
		
		return Valid;
	},
	
	/*******************************************************************************
	 * 
	 * getRadioVal() - determines the value of a group of radio buttons
	 * 
	 * arguments - string "radioGroup" - the name of the group of radio buttons
	 * 
	 *******************************************************************************/
	
	getRadioVal : function(radioGroup) {
		if (typeof ($('input[name='+radioGroup+']:radio:checked').val()) == "undefined") {
			return "";
		}else{
			return $('input[name='+radioGroup+']:radio:checked').val();
		}
	},
	
	/*******************************************************************************
	 * 
	 * getSelectVal() - determines the value of a selectbox
	 * 
	 * arguments - string "selectbox" - the name of the selectbox
	 * 
	 *******************************************************************************/
	
	getSelectVal : function(selectbox) {
		if (typeof ($("#"+selectbox).val()) == "undefined") {
			return "";
		}else{
			return $("#"+selectbox).val();
		}
	},
	
	/*******************************************************************************
	 * 
	 * getInputVal() - determines the value of an input
	 * 
	 * arguments - string "selectbox" - the name of the selectbox
	 * 
	 *******************************************************************************/
	
	getInputVal : function(input) {
		if (typeof ($("input[name='"+input+"']").val()) == "undefined") {
			return "";
		}else{
			return jQuery.trim($("input[name='"+input+"']").val());
		}
	},
	
	/*******************************************************************************
	 * 
	 * isValidEmail() - bool. Performs a RegEx to determine email validity
	 *
	 * arguments - string "email" - the email address to perform check on 
	 * 
	 *******************************************************************************/
	
	isValidEmail : function(email) {	
		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
		if (filter.test(email)){
			return true;
		}else{
			return false;
		}
	}

};
