// Function to display errors
function vErrors() {
	if (iErrCount < 1) {return true}
	
	// Build error mesage
	var elRoot = document.getElementById('jsMsg');
	removeChildren(elRoot)
	var elH2 = document.createElement('h2');
	elH2.appendChild(document.createTextNode('Important Message'));
	elRoot.appendChild(elH2);
		
	var elP = document.createElement('p');
	var elA = document.createElement('a');
	elA.setAttribute('href', '#errList');
	elA.setAttribute('accesskey', '8');
	elA.appendChild(document.createTextNode('Use access key Alt+8 to return to this section'));
	elP.appendChild(elA);
	elP.className = 'accessOnly';
	elRoot.appendChild(elP);

	elP = document.createElement('p');
	elP.appendChild(document.createTextNode('Please address the following issues before you continue:'));
	elRoot.appendChild(elP);

	// Add individual error messages
	elRoot.appendChild(elErrList);

	// Remove any error messages left by the server
	if (document.getElementById('errors')) {
		var elSE = document.getElementById('errors');
		removeChildren(elSE);
		elSE.style.display = 'none';
	}

	// Scroll to top of page
	elRoot.className = 'errors';
	scroll(0, 0);
	return false;
}

// Focus on a field
function foc(field) {
	document.getElementById(field).focus();
}

// Focus on a field and select text inside
function fs(field) {
	document.getElementById(field).focus();
	document.getElementById(field).select();
}

// Remove leading and trailing whitespace
function trimStr(str) {
	return str.replace(/^\s*|\s*$/g,"");
}

// Check payment is by card
function isCard(field) {
    var reg1 = /^(?!00)[\d]{2}$/;
	return reg1.test(field.value);
}

function createFieldLink(jsCommand, linkText) {
	var elA = document.createElement('a');
	elA.onclick = new Function('javascript:' + jsCommand + ';return false');
	elA.setAttribute('href', '');
	elA.appendChild(document.createTextNode(linkText));
	return elA;
}

function createSelectLink(fieldname, linkText, fielddesc) {
    return createFieldLink('foc(\'' + fieldname + '\')', linkText);
}

function createInputLink(fieldname, linkText, fielddesc) {
    return createFieldLink('fs(\'' + fieldname + '\')', linkText);
}

function createBoldText(text) {
	var elS = document.createElement('strong');
	elS.appendChild(document.createTextNode(text));
	return elS;
}

// Validate required SELECT field
function vReqSel(field,fieldname,fielddesc) {
	if (field.value == null || field.value == "") {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('Please '));

		var elA = createSelectLink(fieldname,'select ' + fielddesc);
		elLi.appendChild(elA);

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate required INPUT field
function vReqInp(field,fieldname,fielddesc) {
	field.value = trimStr(field.value);
	if (field.value.length==0) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('Please '));

		var elA = createInputLink(fieldname, 'enter ' + fielddesc);
		elLi.appendChild(elA);

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate name & address type field
function vNameAdd(field,fieldname,fielddesc) {
	var reg1 = /^[-!,&'ÀÈÌÒÙàèìòùÁÉÍÓÚÝáéíóúýÂÊÎÔÛâêîôûÃÑÕãñõÄËÏÖÜŸäëïöüŸçÇŒœßØøÅåÆæÞþÐð\*\.\?\+\(\)\w\s]*$/;
	field.value = trimStr(field.value);
	if (!reg1.test(field.value)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered contains invalid characters. Only letters (Aa-Zz), ';
		s += 'letters with accents, numbers (0-9), spaces, and the characters ';
		s += '-_\',.!?()&+*/ are allowed. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the ' + fielddesc));

		elLi.appendChild(document.createTextNode(' using only the allowed characters.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate phone number field
function vPhone(field,fieldname,fielddesc) {
	var reg1 = /^[-\*\.\+\(\)\d\s]*$/;
	field.value = trimStr(field.value);
	if (!reg1.test(field.value)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered contains invalid characters. Only numbers (0-9), ';
		s += 'spaces, and the characters *.+()- are allowed. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the ' + fielddesc));

		elLi.appendChild(document.createTextNode(' using only the allowed characters.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate email field
function vEmail(field,fieldname,fielddesc) {
	var reg1 = /^[-_A-Za-z0-9@=#~'\$\.\+]*$/;
	var reg2 = /^[^@\.]+(\.[^@\.]+)*@[^@\.]+(\.[^@\.]+)+$/;
	field.value = trimStr(field.value);
	if (!reg1.test(field.value)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered contains invalid characters or spaces. We can ';
		s += 'only accept email addresses that contain letters (Aa-Zz), numbers (0-9), ';
		s += 'at sign (@), full stops / periods (.) plus the characters -_+=~\'#. ';
		s += 'Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the ' + fielddesc));

		elLi.appendChild(document.createTextNode(' using only the allowed characters.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
	else if (!reg2.test(field.value)&&!(field.value.length==0)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('There is a problem with the '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered - an at sign (@) or a full stop (.)';
		s += ' may be missing, or in the wrong place. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the ' + fielddesc));

		elLi.appendChild(document.createTextNode('.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate password format
function vPass(field,fieldname,fielddesc) {
	var reg1 = /^[A-Za-z0-9]*$/;
	if (!reg1.test(field.value)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered contains invalid characters. Only letters ';
		s += '(Aa-Zz) and numbers (0-9) are allowed with no spaces. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter your ' + fielddesc));

		elLi.appendChild(document.createTextNode('.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate new passwords
function vPass2 (field1,field2,fieldname1,minLen,maxLen) {
	var reg1 = /^[A-Za-z0-9]*$/;
	if (!reg1.test(field1.value)) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText('password'));

		var s = ' that you entered contains invalid characters. Only letters (Aa-Zz) and ';
		s += 'numbers (0-9) are allowed with no spaces. Please ';
		elTxt = document.createTextNode(s);
		elLi.appendChild(elTxt);

		elLi.appendChild(createInputLink(fieldname1, 're-enter your password'));

		elLi.appendChild(document.createTextNode(' into both boxes.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
	else if (field1.value.length<minLen&&field1.value.length!=0) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText('password'));

		elLi.appendChild(document.createTextNode(' that you entered is too short. Please '));

		elLi.appendChild(createInputLink(fieldname1, 'enter a password'));

		var s = ' between '+minLen+' and '+maxLen+' characters in length into both boxes.';
		elLi.appendChild(document.createTextNode(s));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
	else if (field1.value!=field2.value&&field1.value.length!=0) {
		var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText('password'));

		var s = ' you entered in the first box did not match the password in the second '
		s += 'box. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname1, 're-enter your password'));

		elLi.appendChild(document.createTextNode(' into both boxes.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}

// Validate credit card number
function vCCN(field,fieldname,fielddesc) {

	//Remove all spaces, commas, hyphens and dots
	field.value = field.value.replace(/[-\,\.\s]+/g,"")
	if (field.value.length!=0&&(field.value.length<13||field.value.length>19)) {
	    var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText('card number'));

		var s = ' that you entered has the wrong number of digits (The card number is ';
		s += 'the long number across the centre of your card, which should be between ';
		s += '13 and 19 digits long). Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the card number'));

		elLi.appendChild(document.createTextNode('.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
	else {
		vNum(field,fieldname,fielddesc);
	}
}

// Validate CV2 number
function vCV2(field,fieldname,fielddesc) {
	field.value = trimStr(field.value);
	if (!(field.value.length==3||field.value.length==0)) {
	    var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('You entered the wrong number of '));

		elLi.appendChild(createBoldText('security digits'));

		var s = ' for your card (the security digits are the final 3 digits on the ';
		s += 'signature strip on the back of your card). You need to enter exactly 3 ';
		s += 'digits. Please ';
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter your security digits'));

		elLi.appendChild(document.createTextNode('.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
	else {
		vNum(field,fieldname,fielddesc);
	}
}

// Switch / Maestro - check that either issue number or valid from date is filled in
function vMaestro(paymthfield,issfield,issfname,vfmfield,vfmfname,vfyfield) {
	if(paymthfield.value=='03') {
		if(issfield.value==''&&(vfmfield.value==''||vfyfield.value=='')) {
		    var elLi = document.createElement('li');

			var s = 'You have selected Switch / Maestro as a payment method - please ';
			elLi.appendChild(document.createTextNode(s));

			elLi.appendChild(createInputLink(issfname, 'enter the issue number'));

			var s = ' (if your card has one), or if your card does not have an issue ';
			s += 'number, please select the ';
			elLi.appendChild(document.createTextNode(s));

			elLi.appendChild(createSelectLink(vfmfname, 'start month'));

			elLi.appendChild(document.createTextNode(' and year.'));

			elErrList.appendChild(elLi);
			iErrCount += 1;
		}
	}
}

// Validate a numeric field
function vNum(field,fieldname,fielddesc) {
	var reg1 = /^[0-9]*$/;
	field.value = trimStr(field.value);
	if (!reg1.test(field.value)) {
	    var elLi = document.createElement('li');

		elLi.appendChild(document.createTextNode('The '));

		elLi.appendChild(createBoldText(fielddesc));

		var s = ' that you entered contains invalid characters. Only numbers (0-9) '
		s += 'are allowed. Please '
		elLi.appendChild(document.createTextNode(s));

		elLi.appendChild(createInputLink(fieldname, 're-enter the ' + fielddesc));

		elLi.appendChild(document.createTextNode('.'));

		elErrList.appendChild(elLi);
		iErrCount += 1;
	}
}