//Returns if the provided value is null or empty
function isNullOrEmpty(val){
	return val == null || val == '';
}

//If val is null or empty, returns the provided default value
function ifNotEmpty(val, defaultVal){
	defaultVal = defaultVal != null ? defaultVal : '';
	return !isNullOrEmpty(val) ? val : defaultVal;
}

function scrollToTop(){
	document.getElementsByTagName('main')[0].scrollIntoView();
}

//Parses a number value from a string or returns 0 if val is invalid
function parseValue(val){
	val = !isNullOrEmpty(val) ? (val + '').replace(',', '').replace('$', '') : val;
	var num = parseFloat(val);
	return isNaN(num) ? 0 : num;
}

//Validates the provided form for required fields
function validateForm(form, dictionary){
	resetForm(form);
	var isValid = true;
	jQuery(form + ' .required').each(function(){
		if(jQuery(this).hasClass('invalid-match')){
			isValid = false;
			jQuery(this).siblings('.tb').find('input').addClass('invalid');
		} else if(jQuery(this).is('button')){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('ssn') && !jQuery(this).val().match(/^[0-9]{9}$/)){ 
			//regex for 9 digits with dashes and numbers only /^[0-9]{9}$|^[0-9]{3}-[0-9]{2}-[0-9]{4}$/
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('email') && !jQuery(this).val().match(/^[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,}$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('phone') && !jQuery(this).val().match(/^[0-9]{10}$|^[0-9]{3}-[0-9]{3}-[0-9]{4}$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('zipcode') && !jQuery(this).val().match(/^[0-9]{5}(?:-[0-9]{4})?$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('number') && !jQuery(this).val().match(/^-{0,1}[0-9,]+$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('currency') && !jQuery(this).val().match(/^\+?[0-9]*\.?[0-9]+$/)){
			isValid = false;
			jQuery(this).addClass('invalid');			
		} else if(jQuery(this).hasClass('year') && !jQuery(this).val().match(/^[1,2][0-9]{3}$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('credit') && !jQuery(this).val().match(/^[0-9]{16}$|^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$|^[0-9]{4}-[0-9]{6}-[0-9]{5}$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(jQuery(this).hasClass('license') && !jQuery(this).val().match(/^[A-Z]{1}[0-9]{1,8}$/)){
			isValid = false;
			jQuery(this).addClass('invalid');
		}  else if(jQuery(this).is('input:file') && jQuery(this)[0].files.length == 0){
			isValid = false;
			jQuery(this).addClass('invalid');
		} else if(isNullOrEmpty(jQuery(this).val())){
			isValid = false;
			jQuery(this).addClass('invalid');
		}
	});

	jQuery(form + ' .validate').each(function(){
		if(jQuery(this).val() != '' && jQuery(this).val() != null){
			var regex = new RegExp(jQuery(this).attr("regex"));
			if(!regex.test(jQuery(this).val())){
				isValid = false;
				jQuery(this).addClass('invalid');
			}
		}
	});

	jQuery('.invalid').change(function(){
		if(!isNullOrEmpty(jQuery(this).val())){
			jQuery(this).removeClass('invalid');
		}
	});

	if(!isValid){
		scrollToTop();

		jQuery(form).prepend('<p class="formError" style="color: var(--red);">' + dictionary.required_fields_missing + '</p>');
		jQuery(form + ' .formError').slideDown();
	}

	return isValid;
}

function showError(form, msg){
	jQuery(form).prepend('<div class="formError">' + msg + '</div>');
	scrollToTop();
}

//Resets form validation (removes error messages)
function resetForm(form){
	jQuery(form + ' .formError').remove();
	jQuery(form + ' .invalid').removeClass('invalid');
	jQuery(form + ' div.validation').hide();
}

function checkAttachment(file){
	if(file.files.length > 0){
		file.classList.remove('required');
		document.getElementById(file.id + '_filename').value = file.files[0].name;
	} else{
		file.classList.add('required');
		document.getElementById(file.id + '_filename').value = '';
	}
}

function getMonthNumber(name){
	switch(name){
		case 'January':
		case 'Jan':
			return '01';
		case 'February':
		case 'Feb':
			return '02';
		case 'March':
		case 'Mar':
			return '03';
		case 'April':
		case 'Apr':
			return '04';
		case 'May':
			return '05';
		case 'June':
		case 'Jun':
			return '06';
		case 'July':
		case 'Jul':
			return '07';
		case 'August':
		case 'Aug':
			return '08';
		case 'September':
		case 'Sep':
			return '09';
		case 'October':
		case 'Oct':
			return '10';
		case 'November':
		case 'Nov':
			return '11';
		case 'December':
		case 'Dec':
			return '12';
	}

	function to12Hour(t){
		if(this.isNullOrEmpty(t)){
			return '';
		}

		var min = t.substr(3,2);
		var hour = parseInt(t.substr(0,2));
		if(hour == 0){
			return 12 + ':' + min + 'am';
		} else if(hour == 12){
			return 12 + ':' + min + 'pm';
		} else if(hour > 12){
			return (hour - 12) + ':' + min + 'pm';
		} else if(hour < 12){
			return hour + ':' + min + 'am';
		}
	}
}