<!--vtv. Check mandatory fields for ApplyOnline and similar pages S.-->

//submit form in case CreateCkrMF (Main Flow)
function submitApplyOnline(fieldObj) {
	if (validateFields(fieldObj) == true) {
		//no errors. Submit
		fieldObj.submit();
	}
	else {
		return false;
	}
}

//Validate mandatory fields
function validateFields(fieldObj) {
	msg = "Please enter:";
	ret = true; //default
	
	if(trim(fieldObj.txtCompany.value) == '') {
		frameElem(fieldObj.txtCompany, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Agency/Company Name";		
	}

	if(trim(fieldObj.txtContName.value) == '') {
		frameElem(fieldObj.txtContName, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Contact Name";		
	}

	if(trim(fieldObj.txtAddress.value) == '') {
		frameElem(fieldObj.txtAddress, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Address";		
	}

	if(trim(fieldObj.txtCity.value) == '') {
		frameElem(fieldObj.txtCity, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "City";		
	}

	if(fieldObj.selCountry.value == '') {
		frameElem(fieldObj.selCountry, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Country";		
	}

	if(fieldObj.state.value == '') {
		frameElem(fieldObj.state, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "State";		
	}

	if(trim(fieldObj.txtZip.value) == '') {
		frameElem(fieldObj.txtZip, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "ZIP";		
	}

	if(trim(fieldObj.txtPhone.value) == '') {
		frameElem(fieldObj.txtPhone, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Phone";		
	}

	/*if(trim(fieldObj.txtFax.value) == '') {
		frameElem(fieldObj.txtFax, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Fax";		
	}*/

	if(!verifyEmail(fieldObj.txtEmail.value)) {
		frameElem(fieldObj.txtEmail, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Valid email address";		
	}

	/*if(trim(fieldObj.website.value) == '') {
		frameElem(fieldObj.website, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Website";		
	}*/


	/*strResult = validateDate(fieldObj.Edate, true);
	if (strResult != "") {
		frameElem(fieldObj.Edate, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "E&O Effective Date: " + strResult;
	}*/

	/*strResult = validateDate(fieldObj.Bdate, true);
	if (strResult != "") {
		frameElem(fieldObj.Bdate, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Bond Effective Date: " + strResult;
	}*/

	if(trim(fieldObj.staff.value) == '') {
		frameElem(fieldObj.staff, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Number of Staff Members";		
	}

	if(fieldObj.paymentTerm[0].checked == false && fieldObj.paymentTerm[1].checked == false) {
		frameElem(fieldObj.paymentTerm[0], 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		frameElem(fieldObj.paymentTerm[1], 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Payment Term";		
	}

	/*strResult = validateDate(fieldObj.txtDate, true);
	if (strResult != "") {
		frameElem(fieldObj.txtDate, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Date: " + strResult;
	}*/

	//if(fieldObj.txtAccNo.value.search(/\d{16}/) == -1) {
	//identify checked radiobutton with Card Type
	for(i=0; i<=fieldObj.chkCard.length; i++) {
		if(fieldObj.chkCard[i].checked == true) {
			break;
		}
	}
	
	if(!validateCC(fieldObj.chkCard[i].value, fieldObj.txtAccNo.value)) {
		frameElem(fieldObj.txtAccNo, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Credit Card Number";		
	}

	//var re5digit=/^\d{5}$/ //regular expression defining a 5 digit number
	//if (document.myform.myinput.value.search(re5digit)==-1) //if match failed
	if(fieldObj.CVNum.value.search(/^\d{3}$/) == -1) {
		frameElem(fieldObj.CVNum, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "CVNum";		
	}

	if(trim(fieldObj.txtExpDateMM.value) == '') {
		frameElem(fieldObj.txtExpDateMM, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Expiration Date: month";
	}
	if(trim(fieldObj.txtExpDateYY.value) == '') {
		frameElem(fieldObj.txtExpDateYY, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Expiration Date: year";
	}
	fieldObj.txtExpDate.value = fieldObj.txtExpDateMM.value + fieldObj.txtExpDateYY.value;

	if(trim(fieldObj.txtCardName.value) == '') {
		frameElem(fieldObj.txtCardName, 'set', '#FF3300', 'solid', '1px', '#000000', '#FFFFCC');
		ret = false;
		msg += "\n - " + "Name on Card";		
	}

	if(!ret) {
		msg += "\n\nClick OK to continue edit";
		alert(msg); //correct errors
		return false;
	}
	else {
		//no errors. Save
		//fieldObj.submit();
		return ret;
	}
}

//<!-- Set/Unset frame around HMTL element -->
function frameElem(fieldObj, action, borderColor, borderStyle, borderWidth, textColor, bgColor) {
	//set to default
	action = typeof(action) != 'undefined' ? action : '';
	borderColor = typeof(borderColor) != 'undefined' ? borderColor : '';
	borderStyle = typeof(borderStyle) != 'undefined' ? borderStyle : '';
	borderWidth = typeof(borderWidth) != 'undefined' ? borderWidth : '';
	textColor = typeof(textColor) != 'undefined' ? textColor : '';
	bgColor = typeof(bgColor) != 'undefined' ? bgColor : '';
	//set: style="border-color:#FF3300; border-style:solid; border-width: 2px; color:#000000; background-color:#FFFFCC;"
	//fieldObj.style.border = '#CC3300 solid 2px';
	switch(action){
		case "set":
			fieldObj.style.borderColor = borderColor;
			fieldObj.style.borderStyle = borderStyle;
			fieldObj.style.borderWidth = borderWidth;
			fieldObj.style.color = textColor;
			fieldObj.style.backgroundColor = bgColor;
		break;
		case "unset":
			fieldObj.style.borderColor = '';
			fieldObj.style.borderStyle = '';
			fieldObj.style.borderWidth = '';
			fieldObj.style.color = '';
			fieldObj.style.backgroundColor = '';
		break;
		default:
			//alert('action not defined: ' + action);
		break;
	}
	return true;
}

//remove spaces from Left and Right
function trim(s) {
	return rtrim(ltrim(s));
}

//remove spaces from Left
function ltrim(s) {
	return s.replace(/^\s+/, ''); 
}

//remove spaces from Right
function rtrim(s) {
	return s.replace(/\s+$/, ''); 
}

function verifyEmail(emal) {
	var status = false;
	//var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i;
	//var emailRegEx = /^[A-Za-z0-9]([A-Za-z0-9_-]|(\.[A-Za-z0-9]))+@[A-Za-z0-9](([A-Za-z0-9]|(-[A-Za-z0-9]))+)\.([A-Za-z]{2,6})(\.([A-Za-z]{2}))?$/;
	var emailRegEx = /^[\w-]+(?:\.[\w-]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}$/;
	if (emal.search(emailRegEx) == -1) {
		//alert("Please enter a valid email address");
	}
	else {
		status = true;
	}
	return status;
}

function validateCC(type, ccnum) {
	if (type == "Visa Card") {
		// Visa: length 16, prefix 4, dashes optional.
		//var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
		var re = /^4\d{3}?\d{4}?\d{4}?\d{4}$/;
	} else if (type == "Master Card") {
		// Mastercard: length 16, prefix 51-55, dashes optional.
		//var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
		var re = /^5[1-5]\d{2}?\d{4}?\d{4}?\d{4}$/;
	} else if (type == "Disc") {
		// Discover: length 16, prefix 6011, dashes optional.
		//var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
		var re = /^6011?\d{4}?\d{4}?\d{4}$/;
	} else if (type == "American Express") {
		// American Express: length 15, prefix 34 or 37.
		var re = /^3[4,7]\d{13}$/;
	} else if (type == "Diners") {
		// Diners: length 14, prefix 30, 36, or 38.
		var re = /^3[0,6,8]\d{12}$/;
	}
	
	
	//re = re.split("-?").join(""); // Remove all dashes from CC
	if (!re.test(ccnum)) {
		return false;
	}
	else {
		return true;
	}
	//the code below is not reachable until else{return true;} above
	
	// Remove all dashes for the checksum checks to eliminate negative numbers
	ccnum = ccnum.split("-").join("");
	// Checksum ("Mod 10")
	// Add even digits in even length strings or odd digits in odd length strings.
	var checksum = 0;
	for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
	checksum += parseInt(ccnum.charAt(i-1));
	}
	// Analyze odd digits in even length strings or even digits in odd length strings.
	for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
		var digit = parseInt(ccnum.charAt(i-1)) * 2;
		if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	}
	if ((checksum % 10) == 0) {
		return true; 
	}
	else {
		return false;
	}
}

/*//<!--Validate Date S-->
var dtCh= "/";
//vtv. old value: var minYear=1900;
//vtv. old value: var maxYear=2100;

function isInteger(s) {
	var i;
	for (i = 0; i < s.length; i++) {   
		// Check that current character is number.
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}

function stripCharsInBag(s, bag) {
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++) {   
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function daysInFebruary (year) {
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

//Days per Month: Jan=31 Feb=29(in this case) Mar=31 ... Dec=31
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {
			this[i] = 29
		}
   } 
  return this;
}

//check the date for valid format and if chkYr = true, check as well for MinimumYear .. MaximumYear period
function isDate(dtStr, chkYr) {
	//Date Regular Expression:
	//var reDateFormat = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/ // date format separator - / .
	//var reDateFormat = /^\d{2}(\-)\d{2}\1\d{4}$/ // date format separator -
	var reDateFormat = /^\d{1,2}(\/)\d{1,2}\1\d{4}$/ // date format separator /
	
	//Validate date format
	if (!reDateFormat.test(dtStr)) {
		return returnString = "date format should be: DD"+dtCh+"MM"+dtCh+"YYYY";
	}
	
	//Date should be within DOB of people
	//KPN wants these values
	var minYear=2009;
	var maxYear=2034;
	
	//vtv. Old value
	//var minYear=1909;
	//var maxYear=1991;
	

	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	//vtv.old: Format MM-DD-
	//vtv.old: var strMonth=dtStr.substring(0,pos1);
	//vtv.old: var strDay=dtStr.substring(pos1+1,pos2);
	//vtv. Format DD-MM
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1) {
		//alert("The date format should be : DD"+dtCh+"MM"+dtCh+"YYYY");
		//return false;
		return returnString = "date format should be: DD"+dtCh+"MM"+dtCh+"YYYY"; //The date format should be
	}
	if (strMonth.length<1 || month<1 || month>12) {
		//alert("Please enter a valid month");
		//return false;
		return returnString = "valid month"; //a valid month
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]) {
		//alert("Please enter a valid day");
		//return false;
		return returnString = "een geldige dag"; //a valid day
	}
	if (chkYr && (strYear.length != 4 || year==0 || year<minYear || year>maxYear)) {
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
		//return false;
		return returnString = "a valid 4 digit year between "+minYear+" and "+maxYear;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false) {
		//alert("Please enter a valid date");
		//return false;
		return returnString = "valid date"; //a valid date
	}
	//return true;
	return returnString = ""; //vtv. equal to TRUE
}

//validate Date field
function validateDate(fieldObj, chkYr) {
	//var dt = document.frmNewRecCkr.dob;
	//var dt = fieldObj;

	
	//vtv. Old algorithm S
	//if (isDate(dt.value)==false) {
	//	//dt.focus();
	//	return false;
	//}
  //  return true;
	//vtv. Old algorithm E
	
	//make a call to isDate func.
	var errorMsg = (isDate(fieldObj.value, chkYr));
	if (errorMsg != "") {
		//alert(errorMsg);
		return errorMsg;
	}
	return "";
}
<!--Validate Date E-->*/
<!--vtv. Check mandatory fields for ApplyOnline and similar pages E.-->
