/*
Library of various form validation tools.
*/

//Validate to integers only
function valToInt(itemVal,itemID,checkID) {
	var x = itemVal;
	//remove all commas
    var idxComma = x.indexOf(',');
    while (idxComma > -1) {
        x = x.replace(',','');
		document.getElementById(itemID).value = x;
        idxComma = x.indexOf(',');
    }
	//remove all decimals and/or round up
    var idxDec = x.indexOf('.');
    while (idxDec > -1 && idxDec != x.length - 3 && idxDec != x.length - 2) {
        x = x.replace('.','');
		document.getElementById(itemID).value = x;
        idxDec = x.indexOf('.');
    }
    x = Math.round(x);
	document.getElementById(itemID).value = Math.round(x);
    if (x == 0) {
        x = '';
		document.getElementById(itemID).value = '';
    }
	
	var filter = /^\d+$/;
	if (filter.test(x) || x=='') {
		document.getElementById(itemID).style.backgroundColor='#FFFFFF';
		document.getElementById(itemID).style.border='1px solid #969696';
		document.getElementById(checkID).innerHTML = '';
		return true;
	} else {
		document.getElementById(itemID).select();
		document.getElementById(itemID).value = '';
		document.getElementById(itemID).style.backgroundColor='#FFFFCC';
		document.getElementById(itemID).style.border='1px solid #000000';
		if (itemID == 'Price') {
			alert("Please leave the 'Price' field blank or enter numbers only.\n\nLeaving this field blank allows for a future value of 'Call Dealer'.");
		} else {
			document.getElementById(checkID).innerHTML = ' * Whole Numbers Only';
		}
		document.getElementById(itemID).focus();
		return false;
	}
}

//Set maxlength attribute to a textarea
function textLimit(field, maxlen) {
	if (field.value.length > maxlen + 1){
		alert('Max character limit reached');
	}
	if (field.value.length > maxlen){
		field.value = field.value.substring(0, maxlen);
	}
}

//Return only a valid zip code of either '*****' or '*****-****' format
function valZip(Zip, fieldID, sClass, sClassError, errorID) {
	var re= /\D/;
	var mask = /\d{5}/;
	var mask2 = /\d{5}\-\\d{4}/
	var x = document.getElementById(fieldID).value;
	var retval = true;
	var newZip;
	if (x == '') {
		if (sClass != '') {
			document.getElementById(fieldID).sClass = sClass;
		}
		if (document.getElementById(errorID).innerHTML != ' *Required') {
			document.getElementById(errorID).innerHTML = ' *';
		}
	}
	if (x != "" && (!mask.test(x) || !mask2.test(x))){
		 if (x != ""){
				while (re.test(x)){
					 x = x.replace(re,"");
				}
		 }
		 if (x.length != 5 && x.length != 9 && x.length != 10){
		 		//document.getElementById(fieldID).select();
				if (sClassError != '') {
					document.getElementById(fieldID).className = sClassError;
				}
				document.getElementById(errorID).innerHTML = ' *Please enter a valid Zip';
				//document.getElementById(fieldID).focus();
				retval = false;
		 }else if (x.length == 5){
		 		document.getElementById(errorID).innerHTML = ' *';
				if (sClass != '') {
					document.getElementById(fieldID).className = sClass;
				}
		 		document.getElementById(fieldID).value=x;
		 }else if (x.length == 10 && x.substring(5)=='-'){
		 		document.getElementById(errorID).innerHTML = ' *';
				if (sClass != '') {
					document.getElementById(fieldID).className = sClass;
				}
				document.getElementById(fieldID).value=x;
		 }else{
		 		document.getElementById(errorID).innerHTML = ' *';
				if (sClass != '') {
					document.getElementById(fieldID).className = sClass;
				}
				newZip = x.substring(0,5) + '-' + x.substring(5,10);
				document.getElementById(fieldID).value=newZip;
		 }
	}
	return retval;
}

//Return only a valid phone number in '(***) ***-****' format
function FormatPhone(Phone, fieldID, sClass, sClassError, errorID, isSubmit) {
	var re= /\D/;
	var mask = /\(\d{3}\)\s\d{3}-\d{4}/;
	var num = Phone;
	var retval = true;
	var newNum;
	if (num == '') {
		if (sClass != '') {
			document.getElementById(fieldID).className = sClass;
		}
		if (errorID != '') {
			if (document.getElementById(errorID).innerHTML == ' *Required')
			{
				document.getElementById(errorID).innerHTML = ' *Required';
			}
			else
			{
				document.getElementById(errorID).innerHTML = ' *';
			}
		}
		retval = false;
	}
	if (num != "" && !mask.test(num)){
		 if (num != ""){
				while (re.test(num)){
					 num = num.replace(re,"");
				}
		 }
		 if (num.length != 10){
		 		//document.getElementById(fieldID).select();
				if (sClassError != '') {
					document.getElementById(fieldID).className = sClassError;
				}
				if (errorID != '') {
					document.getElementById(errorID).innerHTML = ' *Must use a 10 digit phone number';
				} else if (!isSubmit) {
					alert(' *Must use a 10 digit phone number');	
				}
				//document.getElementById(fieldID).focus();
				retval = false;
		 }else{
		 		if (errorID != '') {
					document.getElementById(errorID).innerHTML = ' *';
		 		}
				if (sClass != '') {
					document.getElementById(fieldID).className = sClass;
				}
				newNum = '(' + num.substring(0,3) + ') ' + num.substring(3,6) + '-' + num.substring(6,10);
				document.getElementById(fieldID).value=newNum;
		 }
	}
	return retval;
}

//Validate that the email address is in proper format
function checkMail(Email, fieldID, sClass, sClassError, errorID, isSubmit)
{
	var x = Email;
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (filter.test(x) || x==''){
		if (errorID != '') {
			if (document.getElementById(errorID).innerHTML == ' *Required')
			{
				document.getElementById(errorID).innerHTML = ' *Required';
			}
			else
			{
				document.getElementById(errorID).innerHTML = ' *';
			}	
		}
		if (sClass != '') {
			document.getElementById(fieldID).className = sClass;
		}
		if (x=='')
		{
			return false;
		}
		else
		{
			if (errorID != '') {
				document.getElementById(errorID).innerHTML = ' *';
			}
			return true;
		}
	} else {
		//document.getElementById(fieldID).select();
		if (sClassError != '') {
			document.getElementById(fieldID).className = sClassError;
		}
		if (errorID != '') {
			document.getElementById(errorID).innerHTML = ' *Must use a valid email address';
		} else if (!isSubmit) {
			alert(' *Must use a valid email address');	
		}
		//document.getElementById(fieldID).focus();
		return false;
	}
}

//Return only a valid year between 1900 and 2019
function valYr(Year, fieldID, sClass, sClassError)
{
	if ((Year.length == 2) && (Year > 15)) {
		var x = '19' + Year;
		document.getElementById(fieldID).value = x;
	} else if (Year.length == 2) {
		var x = '20' + Year;
		document.getElementById(fieldID).value = x;
	} else {
		var x = Year;
	}
	var filter = /(1{1}9{1}\d{2})|(2{1}0{1}(0{1}|1{1})\d{1})/;
	if (filter.test(x) || x==''){
		if (sClass != '') {
			document.getElementById(fieldID).className = sClass;
		}
		return true;
	} else {
		document.getElementById(fieldID).select();
		document.getElementById(fieldID).value = '';
		if (sClassError != '') {
			document.getElementById(fieldID).className = sClassError;
		}
		alert('Please enter a valid Year');
		document.getElementById(fieldID).focus();
		return false;
	}
}
