
var passwordPattern = /^[a-zA-Z0-9,\!@#\$%\^&\*\(\)\{\}\[\]_\+=:;<>\?\/|\\\s\.\-\"]{6,12}$/;
var emailPattern    = /^\s*[\w\-\.]+@[\w\-]+(\.[\w\-]+)+\s*$/;
var urlPattern      = /((http|https):\/\/){1}(([\w\.-])+){2,}\.((\w)+){1}(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
var userIdPattern   = /^\s*[a-zA-Z]{1}[a-zA-Z0-9]{0,9}\w*\s*$/;
var userNamePattern = /^([a-zA-z0-9\.\-\' ])+$/;
var letterPattern   = /[a-zA-Z]/;

function nameValidate(field, name, fCheckEmpty) {
	var message = "";
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	if ((field.value == "") || (!field.value.match(userNamePattern))) {
		message = "Invalid Entry in " + name + " field";
	}
	updateFormError(field.id, message);
	return message=="";
}

function validateUserName(str) {
	if (str.length == 0) {
		return "!badUserId";
	} else if (!str.substr(0,1).match(letterPattern)) {
		return "!badFirstChar";
	} else if (!str.match(userIdPattern)) {
		return "!badUserId";
	}
	str = str.replace(/\s+/g, "");
	return str;
}

function userNameValidate(field, fCheckEmpty) {
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	var res = validateUserName(field.value);
	var message = "";
	if (res == "!badUserId") {
		message = 'Invalid User ID';
	} else if (res == "!badFirstChar") {
		message = 'User ID must begin with a letter';
	}
	updateFormError(field.id, message);
	return message=="";
}

function validateEmailData(str) {
	if (!str.match(emailPattern)) return "!badChars";
	str = str.replace(/\s+/g, "");
	return str;
}

function emailValidate(field, fCheckEmpty) {
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	if(field.readOnly){
		return true;
	}
	var res = validateEmailData(field.value);
	var message = "";
	if(res == "!badChars"){
		message = 'This is not a valid email format.';
	} else {
		field.value = res;
	}
	updateFormError(field.id, message);
	return message=="";
}

function phonePreValidate(field, fCheckEmpty) {
	var phn = document.getElementById(field).value;
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	
	if ((phn == "") || (phn.length == 0)) {
		message = 'Invalid Telephone Number';
		updateFormError(field, message);
		return;
	} else {
		var newPhn = validatePhoneData(phn);
		if (newPhn.substr(0,1) == "!") {
			var message = "";
			if ((newPhn == "!badFormat") || (newPhn == "!tooShort")) {
				message = 'Invalid Telephone Number.';
			} else if (newPhn == "!badCountryCode") {
				message = 'Unknown Country Code.';
			} else if (newPhn == "!badLengthForCountryCode") {
				message = 'Telephone number too short for given country code.';
			} else if (newPhn == "!badFormatForCountryCode") {
				message = 'Invalid Telephone Number for given country code.';
			}
			updateFormError(field, message);
			return message=="";
		} else {
			field.value = newPhn;
			updateFormError(field, ""); 
		}
	}
}

function phonePreValidateWithCC(countryCode, telNumField, fCheckEmpty) {
	
	var phn = document.getElementById(telNumField).value;
	
	if ((!fCheckEmpty) && ((countryCode == "") || (phn == ""))) {
		message = 'Invalid Telephone Number';
		updateFormError(telNumField, message);
		return true;
	}
	if ((phn == "") || (phn.length == 0)) {
		message= 'Invlid Telephone Number';
	    updateFormError(telNumField, message);
		return;
	} else if ((countryCode == "") || (countryCode.length == 0)) {
		return;
	} else {
		var newPhn = validatePhoneDataWithCC(countryCode, phn);
		if (newPhn.substr(0,1) == "!") {
			var message = "";
			if ((newPhn == "!badFormat") || (newPhn == "!tooShort")) {
				message = 'Invalid Telephone Number.';
			} else if (newPhn == "!badCountryCode") {
				message = 'Unknown Country Code.';
			} else if (newPhn == "!badLengthForCountryCode") {
				message = 'Telephone number too short for given country code.';
			} else if (newPhn == "!badFormatForCountryCode") {
				message = 'Invalid Telephone Number for given country code.';
			}
			updateFormError(telNumField, message);
			return message=="";
		} else {
			telNumField.value = newPhn;
			updateFormError(telNumField, "");
		}
	}
}

function validatePasswordData(str) {
	if (!str.match(passwordPattern)) return "!badPassword";
	return str;
}

function passwordValidate(field, fCheckEmpty){
	if(field.readOnly) return true;
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	var res = validatePasswordData(field.value);
	var message = "";
	if (res == "!badPassword") {
		message = 'Password must contain 6-12 letters and numbers';
	} else {
		field.value = res;
	}
	updateFormError(field.id, message);
	return message=="";
}

function validateUrlData(str) {
	if (!str.match(urlPattern)) return "!badUrl";
	return str;
}

function comparePasswordData(str1, str2) {
	if (str1 != str2) return false;
	return true;
}

function passwordMatch(field1, field2, fCheckEmpty){
	//field1 - Password
	//field2 - Re-Entered Password
	if(field2.readOnly) return true;
	if ((!fCheckEmpty) && (field2.value == "")) {
		updateFormError(field2.id, "");
		return true;
	}
	var res = comparePasswordData(field1.value, field2.value);
	var message = "";
	if (res == false) {
		message = "The password you entered in Re-Enter field did not match.";
	}
	updateFormError(field2.id, message);
	return message=="";
}

function urlValidate(field, fCheckEmpty){
	if(field.readOnly) return true;
	if ((!fCheckEmpty) && (field.value == "")) {
		updateFormError(field.id, "");
		return true;
	}
	var res = validateUrlData(field.value);
	var message = "";
	if (res == "!badUrl") {
		message = 'URL is invalid';
	} else {
		field.value = res;
	}
	updateFormError(field.id, message);
	return message=="";
}

function captchaValidate(field) {
	if (field.value.length == 0) {
		updateFormError(field.id, 'Please enter the string in the image.');
		return false;
	}

	return true;
}
