/*##############################################
# Account form V2
# includes/js/validation.inc.js
# Copyright http://www.skymarket.co.uk
# steve.clarke@skymarket.co.uk
##############################################*/  

function validateField(id, infobox) {
	if(document.getElementById(id)) {
		var validation = fieldDescriptions[infobox][id]['validation']
		var fieldValue = document.getElementById(id).value;
		var valid = true;
		var regexp = '';
		
		for(vmethod in validation) {
			switch(vmethod) {
				case 'mandatory':
					valid = v_mandatory(fieldValue);
					break;
				case 'mandatory_if':
					valid = v_mandatory_if(fieldValue, validation[vmethod]);
					break;
				case 'mandatory_checked':
					valid = v_mandatory_checked(id);
					break;
				case 'non_mandatory':
					valid = v_nonMandatory(fieldValue, validation[vmethod]);
					break;
				case 'alpha':
					regexp = /^[A-Z]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'alpha_spaces':
					regexp = /^[A-Z ]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'alphanumeric_spaces':
					regexp = /^[A-Z0-9 ]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'alphanumeric':
					regexp = /^[A-Z0-9]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'numeric':
					regexp = /^[0-9]+$/;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'minlength':
					valid = v_minlength(fieldValue, validation[vmethod]);
					break;
				case 'maxlength':
					valid = v_maxlength(fieldValue, validation[vmethod]);
					break;
				case 'forename_surname':
					valid = v_forename_surname(fieldValue);
					break;
				case 'address_fields':
					regexp = /^[-A-Z' \.]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'address_fields_numeric':
					regexp = /^[-A-Z0-9' \.]+$/i;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'dialing_code':
					regexp = /^\+\d{1,4}$/;
					valid = v_regexp(fieldValue, regexp);
					break;
				case 'phoneno':
					valid = v_phoneno(fieldValue);
					break;
				case 'website':
					valid = v_website(fieldValue);
					break;
				case 'username':
					valid = v_username(fieldValue);
					break;
				case 'email':
					valid = v_email(fieldValue);
					break;
				case 'confirm':
					valid = v_confirm(fieldValue, validation[vmethod]);
					break;
				case 'password':
					valid = v_password(fieldValue);
					break;
				case 'heard_of_us':
					valid = v_heard_of_us(fieldValue);
					break;
			}
			
			if(valid == false) {break;}
		}
		
		if(valid == false) {
			// An error has occured, do error proceedure
			setFieldError(id);
			
			// Show address fields if invalid
			var addressFields = new Array('f_address1', 'f_address2', 'f_address3', 'f_town', 'f_county');
			var country = document.getElementById('s_country').value;
			for(var i = 0; i < addressFields.length; i++) {
				if(id == addressFields[i] && country != '') {
					showHideAddressFields('block');
					break;
				}
			}
		} else {
			// Set classes back to original
			unsetError(id);
		}
		
		setInfoBoxBack(infobox);
		
		return valid;
	}	
	
	return true;
}

/* GENERIC VALIDATION METHODS */

function v_mandatory(fieldValue) {
	fieldValue = fieldValue.replace(/ /g, '');
	if(fieldValue == '') {return false;} else {return true;}
}

function v_mandatory_if(fieldValue, otherFieldId) {
	var otherFieldValue = document.getElementById(otherFieldId).value;
	if(otherFieldValue != '' && fieldValue == '') {return false;} else {return true;}
}

function v_nonMandatory(fieldValue, otherFieldId) {
	var otherFieldValue = document.getElementById(otherFieldId).value;
	if(fieldValue == '') {
		unsetError(otherFieldId);
	}
	
	return true;
}

function v_mandatory_checked(id) {
	if(!document.getElementById(id).checked) {return false;}
	
	return true;
}

function v_regexp(fieldValue, regexp) {
	if(!fieldValue.match(regexp) && fieldValue != '') {	return false;} else {return true;}
}

function v_confirm(fieldValue, otherFieldId) {
	var otherFieldValue = document.getElementById(otherFieldId).value;
	
	if(otherFieldValue != '' && fieldValue != otherFieldValue) {return false;} else {return true;}
}

function v_minlength(fieldValue, minLength) {
	if(fieldValue.length < minLength && fieldValue != '') {return false;} else {return true;}
}

function v_maxlength(fieldValue, maxLength) {
	if(fieldValue.length > maxLength && fieldValue != '') {return false;} else {return true;}
}

/* FIELD SPECIFIC VALIDATION METHODS */
function v_forename_surname(fieldValue) {
	var regexp = /^[A-Z-' ]+$/i;
	if(!fieldValue.match(regexp)) {return false;}
	if(fieldValue.match(/(^[-' ])|([-' ]$)/)) {return false;}
	
	letters = fieldValue.replace(/[-' ]+/gi, '');
	if(letters.length < 2) {return false;}
	
	return true;	
}

function v_phoneno(fieldValue) {
	var phoneno = fieldValue.replace(/ /g, '');
	var number = document.getElementById('f_intcode').value.replace('+', '')+phoneno;
	if(phoneno != '') {
		if(!phoneno.match(/^[0-9]+$/)) {
			return false;
		} else if(number.length < 10) {
			return false;
		}
	}
	
	return true;
}

function v_website(fieldValue) {
	var webAddress = (fieldValue.match('http://')) ? fieldValue : 'http://'+fieldValue;
	var regexp = /^http:\/\/(www\.)?(([-A-Z0-9]\.)+)?([-A-Z0-9]+\.[A-Z]+(\.[A-Z]+)*)(\/.*)?$/i
	
	if(fieldValue != '' && !webAddress.match(regexp)) {
		return false;
	}
	
	return true;	
}

function v_username(fieldValue) {
	if(fieldValue.length > 0) {
		var is_email = (fieldValue.match('@')) ? 1 : 0;
		
		if(is_email) {
			return v_email(fieldValue);
		} else {
			regexp = /^[A-Z0-9]+$/i;
			if(!fieldValue.match(regexp)) {return false;}
			if(fieldValue.length < 5) {return false;}
			if(fieldValue.length > 50) {return false;}
		}
	} else {
		return false;
	}
	
	return true;
}

function v_email(fieldValue) {
	regexp = /^([-A-Z0-9_\.]+(\.[-A-Z0-9_]+)?)\@([-A-Z0-9\.]+\.[A-Z]+(\.[A-Z]+)?)$/i
	if(fieldValue != '' && !fieldValue.match(regexp)) {return false;} else {return true;}
}

function v_password(fieldValue) {
	var regexp = /[\D]/gi;
	var matches = fieldValue.replace(regexp, '');
	
	if(fieldValue.length > 0) {
		if(fieldValue.length < 8) {
			return false;
		} else if(matches.length < 2) {
			return false;
		}
	}
	
	return true;
}

function v_heard_of_us(fieldValue) {
	var otherFields = new Array('Search Engine', 'Trade Show', 'Trade Magazine', 'Other');
	var heardOfUs = document.getElementById('s_heardOfUs').value;
	for(var i = 0; i < otherFields.length; i++) {
		if(heardOfUs == otherFields[i] && fieldValue == '') {
			return false;
		}
	}
	
	return true;
}




function finalValidation() {
	var valid = true;
	var displayErrMsg = false;
	var fieldList = new Array();
	fieldList['personal'] = fieldDescriptions['personal'];
	fieldList['account'] = fieldDescriptions['account'];
	fieldList['promo'] = fieldDescriptions['promo'];
	
	document.getElementById('enterButt').disabled = true;
	document.getElementById('enterButt').value = 'Checking...';
	
	for(infoBox in fieldList) {
		for(field in fieldList[infoBox]) {
			if(field != 'default') {
				valid = validateField(field, infoBox);
				if(valid == false && displayErrMsg == false) {
					displayErrMsg = true;
				}
			}
		}
	}
	
	if(displayErrMsg) {
		alert('The highlighted fields need valid entries in order for you to proceed.');
		document.getElementById('enterButt').disabled = false;
		document.getElementById('enterButt').value = 'Enter';
	} else {

		var postdata = new Object;
		
		postdata['do'] = 'final_validation';
		postdata['email'] = document.getElementById('f_email').value;
		postdata['alt_email'] = document.getElementById('f_altEmail').value;
		postdata['username'] = document.getElementById('f_username').value;
		postdata['editing'] = (editing) ? 1 : 0;
	
		apilite_post('validation.php', postdata, 'v_captcha', '', 'finalValidationFalse', '');
	}
	
}

function v_captcha() {	
	if(!editing && 1 == 0) { // 06/11/08 CMF taking this bit out as the captcha has gone walkabout. - Can't verify what isn't there! (Also changed in process.php)
		var veriText = document.getElementById('imageVerification').value;
		
		if(veriText == '') {
			alert('Please verify the verification image before continuing');
		} else {
			var postdata = new Object;
			
			postdata['do'] = 'captcha_check';
			postdata['image_verification'] = veriText;
		
			apilite_post('validation.php', postdata, 'v_captchaTrue', '', 'v_captchaFalse', '');
		}
	} else {
		submitForm();
	}

}

function v_captchaTrue(response, args) {
	// alert('Verification correct -- this is where the form would be submitted');
	submitForm()
}

function v_captchaFalse(response, args) {
	alert('Invalid verification code');
	// alert(response);
}

function finalValidationFalse(response, args) {
	var cache = response.split('||')[0];
	var errFields = cache.split(',');
	var errors = response.split('||')[1];
	
	
	if(errors.length > 0) {
		alert("The following errors have occurred:\n\n"+errors);
	} else {
		alert('An error has occured, please check the form has been filled in correctly.');
	}
	
	for(var i = 0; i < errFields.length; i++) {
		setFieldError(errFields[i]);
	}
	
	document.getElementById('enterButt').disabled = false;
	document.getElementById('enterButt').value = 'Enter';
}

function submitForm() {
	document.getElementById('fromForm').value = 2;
	document.getElementById('accountform').submit();
		
	document.getElementById('enterButt').disabled = false;
	document.getElementById('enterButt').value = 'Enter';
}

function unsetError(id) {
	var className = document.getElementById(id).className.replace('fieldError', '');
	if(document.getElementById(id+'Label')) {
		document.getElementById(id+'Label').className = '';
		document.getElementById(id+'Label').style.color = labelColour;
	}
	document.getElementById(id).className = className;
	if(document.getElementById(id+'Req')) {document.getElementById(id+'Req').className = '';}
}

var labelColour = '';

function setFieldError(id) {
	if(!document.getElementById(id).className.match(/fieldError/)) {
		if(document.getElementById(id+'Label')) {
			labelColour = document.getElementById(id+'Label').style.color;
			document.getElementById(id+'Label').className = 'fieldErrorText';
			document.getElementById(id+'Label').style.color = labelErrorColour;
		}
		document.getElementById(id).className += ' fieldError';
		if(document.getElementById(id+'Req')) {document.getElementById(id+'Req').className += ' reqAsterixError';}
	}
}

function checkError(id, infobox) {
	var className = document.getElementById(id).className;
	
	if(className.match(/fieldError$/i)) {
		
		switch(infobox) {
			case 'personal':
				document.getElementById('infoboxPersonal').className += ' infoboxError';
				break;
			case 'account':
				document.getElementById('infoboxAccount').className += ' infoboxError';
				break;
			case 'promo':
				document.getElementById('infoboxPromo').className += ' infoboxError';
				break;
		}
		
	} else {
		setInfoBoxBack(infobox);
	}
}

function setInfoBoxBack(infobox) {
	switch(infobox) {
		case 'personal':
			document.getElementById('infoboxPersonal').className = 'infoboxPersonal';
			break;
		case 'account':
			document.getElementById('infoboxAccount').className = 'infoboxAccount';
			break;
		case 'promo':
			document.getElementById('infoboxPromo').className = 'infoboxPromo';
			break;
	}
}
