// JavaScript Document
// quick trim method added to strng class
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); }

// check that the string is greater or equal to a certain length (1 is default)
function validate(field, msg, len){
	//console.log('validate');
	// default length
	if(len == undefined){
		len = 1;
	}
	//console.log(field);
	if(field.value.replace(/^\s+|\s+$/g,"").length < len){
		if(msg != false) alert(msg);
		field.focus();
		return false;
	}else{
		return true;
	}
}
function validatePassword(pw, cpw, msg){
	//console.log(pw.value + ":" + cpw.value + ":" + msg);
	if(pw.value.length > 0){
		
		if(!validate(pw, msg, 6)) {
			if(msg != false) alert(msg);
			pw.focus();
			return false;
		}
		if(pw.value.length > 32){
			if(msg != false) alert(msg);
			pw.focus();
			return false;
		}
		if(pw.value.search(/[a-z]/) == -1 || pw.value.search(/[A-Z]/) == -1 || pw.value.search(/[0-9]/) == -1){
			if(msg != false) alert(msg);
			pw.focus();
			return false;
		}
		if(cpw !== false && (pw.value != cpw.value)){
			alert("Your password and confirm password entries do not match.");
			pw.focus();
			return false;
		}
	}
	return true;
}
function validateChecked(field, msg){
	//console.log('checked');
	if(!field.checked){
		if(msg != false) alert(msg);
		field.focus();
		return false;
	}else{
		return true;
	}
}
function validateRadio(field, msg){
	var rval = false;
	// go though each option and see if it is checked
	for(var i = 0; i < field.length; i++){
		if(field[i].checked){
			rval = true;
		}
	}
	if(!rval){
		if(msg != false) alert(msg);
		field[0].focus();
		return false;
	}else{
		return true;
	}
}
function validateNumber(field, msg){
	//console.log('number');
	var filter = /^[0-9 ]*$/;
	if(!filter.test(field.value)){
		if(msg != false) alert(msg);
		field.focus();
		return false;
	}else{
		return true;
	}
}
function validateEmail(field, msg){
	//console.log('email');
	if(field.value.length > 0){
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if(!filter.test(field.value)){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}
	}
	return true;
}
function validatePhone(field, msg){
	//console.log('phone');
	// only validate where there has been some input - to make required run validate first
	if(field.value.length > 0){
		var pattn = new RegExp("^[0-9 ]*$");
		if(!pattn.test(field.value) || field.value.length < 10){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}
		// check its not all one value (1111111111111)
		var charstr = '';
		var chars = field.value.split('');
		for(char in chars){
			if(charstr.indexOf(chars[char]) == -1){
				charstr += chars[char];
			}
		}
		if(charstr.length < 2){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}
	}
	
	return true;
}
function validateConfirm(field1, field2, msg){
	if(field1.value != field2.value){
		if(msg != false) alert(msg);
		field2.focus();
		return false;
	} else {
		return true;
	}
}
function validatePostcode(field, msg){
	//console.log('postcode');
	if(field.value.length > 0){
		// this regex seems to be the best and most complete (doesn't allow GIR OAA or SAN TA1 though)
		var pattn = new RegExp("^((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) {0,1}[0-9][A-Za-z]{2})$");
		if(!pattn.test(field.value)){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}else{
			return true;
		}
	} else {
		return true;
	}
}
function validateDate(field, msg, format){
	if(typeof(format) == 'undefined'){
		var format = 'dd/mm/yyyy';
	}
	//console.log('date');
	if(field.value.length > 0){
		switch (format){
		case 'dd/mm/yyyy':
			filter = /^[0-3][0-9]\/[0-1][0-9]\/[12][90][0-9][0-9]$/;
			break;
		case 'mmyy':
			filter = /^([0][0-9]|[1][0-2])[0-9][0-9]$/;
			break;
		}
		if(!filter.test(field.value)){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}
	}
	return true;
}
function validateBankAccountNo(field, msg){
	//console.log('bankacct');
	if(!validateNumber(field, msg)){
		return false;
	}
	if(8 != field.value.length){
		if(msg != false) alert(msg);
		field.focus();
		return false;
	}else{
		return true;
	}
}
function validateBankSortCode(field, msg){
	//console.log('banksort');
	if(!validateNumber(field, msg)){
		return false;
	}
	if(6 != field.value.length){
		if(msg != false) alert(msg);
		field.focus();
		return false;
	}else{
		return true;
	}
}
//make sure client is over certain age (18 is default)
function validateAge(field, msg, min_age){
	//console.log('age');
	
	if(field.value.length > 0){
		if(!min_age){
			min_age = 18;
		}
		var tday=new Date();
		var checkY=tday.getFullYear() - min_age;
		var checkDate = checkY.toString();
		
		var checkM=tday.getMonth()+1;
		checkM = checkM.toString();
		if(checkM.length == 1){
			checkDate += '0'; //add leading zero if single digit
		}
		checkDate += checkM;
		
		var checkD=tday.getDate();
		checkD = checkD.toString();
		if(checkD.length == 1){
			checkDate += '0';
		}
		checkDate += checkD; //add leading zero if single digit
		
		// get string of entered dob value (in yyyymmdd format)
		dobArray = field.value.split('/');
		dobDate = dobArray[2]+dobArray[1]+dobArray[0];
		
		////console.log(checkDate + '::' + dobDate);
		if(checkDate >= dobDate){
			return true;
		} else {
			if(msg != false) alert(msg);
			return false;
		}
	}
	return true;
	
}
function validateInceptionDate(field, msg1, msg2){
	
	if(field.value.length > 0){
		var earlyDate = new Date();
		var lateDate = new Date();
		lateDate.setDate(lateDate.getDate() + 30)
		var incdate = new Date();
		var incArray= field.value.split("/");
		incdate.setFullYear(incArray[2], incArray[1] - 1, incArray[0]);
		
		if(incdate < earlyDate){
			if(msg1 != false) alert(msg1);
			field.focus();
			return false;
		}else if(incdate > lateDate){
			if(msg2 != false) alert(msg2);
			field.focus();
			return false;
		}
	}
	return true;
}

function validateTime(field, msg){
	if(field.value.length > 0){
		filter = /^[0-2][0-9]:[0-5][0-9]$/
		if(!filter.test(field.value)){
			if(msg != false) alert(msg);
			field.focus();
			return false;
		}
	}
	return true;
}

function validateTypeList(field, listsource, msg){
	// check if the value is in the list
	for(category in listsource){
		for(suggestion in listsource[category]){
			if(listsource[category][suggestion] == field.value){
				return true;
			}
		}
	}
	// if the value is not in the list check to see that something else has been entered
	altObj = document.getElementById(field.id + '_alt');
	if(altObj != null){
		if(!validate(altObj, msg, 2) || altObj.value == 'Type alternative here...'){
			if(msg != false) alert(msg);
			return false;
		}
	} else {
		if(msg != false) alert(msg);
		return false;
	}
	
	// now check that a category has been selected
	catObj = document.getElementById(field.id + '_type');
	if(!catObj.disabled){
		if(!validate(catObj, msg, 2)){
			if(msg != false) alert(msg);
			return false;
		}
	}
	
	return true;
}


function validateGroup(msg, validcount, required){
	if(typeof(required) == 'undefined'){
		var required = 1;
	}
	if(validcount < required){
		if(msg != false) alert(msg);
		return false;
	}
	
	return true;
}
