var cw_validation = {
	isLetter: function(val) {
		if (/^[a-zA-Z]$/.test(val)) return true;
		return false;
	},
	
	isAlpha: function(val) {
		if (/^[a-zA-Z]+$/.test(val)) return true;
		return false;
	},
	
	isAlphaNumeric: function(val) {
		if (/^[a-zA-Z0-9]+$/.test(val)) return true;
		return false;
	},
	
	isDigit: function(val) {
		if (/^\d/.test(val)) return true;
		return false;
	},
	
	isLetterOrDigit: function(val) {
		if (/^([a-zA-Z]|\d)$/.test(val)) return true;
		return false;
	},
	
	isInteger: function(val) {
		if (/^\d+$/.test(val)) return true;
		return false;
	},
	
	isSignedInteger: function(val) {
		if (/^(\+|\-)?\d+$/.test(val)) return true;
		return false;
	},
	
	isFloat: function(val) {
		if (/^\d+(\.\d+)?$/.test(val)) return true;
		return false;
	},
	
	isSignedFloat: function(val) {
		if (/^(\+|\-)?\d+(\.\d+)?$/.test(val)) return true;
		return false;
	},
	
	isEmail: function(val) {
		if (/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val) && !/\.\./.test(val)) return true;
		return false;
	},
	
	isURL: function(val) {
		if ( /^http(s)?:\/\/([0-9a-z-_]+\.)+[a-z]{2,4}((\/|\\\\)[0-9a-z-_\/\.?&amp;=]*)?$/i.test(val) ) return true;
		return false;
	},
	
	isDate: function(dateStr) {
		var datePat = /^(\d{1,2})(\/)(\d{1,2})(\/)(\d{2}|\d{4})$/;
		var matchArray = dateStr.match(datePat); // is the format ok?
		var datestatus = true;
		
		if (matchArray == null || matchArray[1] == null)
			return false;
		else {
			if(matchArray[3] == null || matchArray[5] == null)
				return false;
		}
		
		month = matchArray[1];
		day = matchArray[3];
		year = matchArray[5];
		
		if (month < 1 || month > 12)
			datestatus = false;
		
		if (day < 1 || day > 31)
			datestatus = false;
		
		if ((month==4 || month==6 || month==9 || month==11) && day==31)
			datestatus=false;
		
		if (month == 2) {
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

			if (day > 29 || (day==29 && !isleap))
				datestatus = false;
		}
		
		return datestatus; 
	},
	
	isYear: function(val) {
		val = val.replace(/^0*/, '');
		if (/^\d+$/.test(val) && parseInt(val) >= 1000 && parseInt(val) <= 9999) return true;
		return false;
	},
	
	isMonth: function(val) {
		val = val.replace(/^0*/, '');
		if (/^\d+$/.test(val) && parseInt(val) >= 1 && parseInt(val) <= 12) return true;
		return false;
	},
	
	isDay: function(val) {
		val = val.replace(/^0*/, '');
		if (/^\d+$/.test(val) && parseInt(val) >= 1 && parseInt(val) <= 31) return true;
		return false;
	},
	
	isTime: function(val) {
		if ( /^(0?[1-9]|1[0-2]):[0-5]\d\s?(AM|PM)?$/.test(val) || /^(0?\d|1\d|2[0-3]):[0-5]\d$/.test(val)) return true;
		return false;
	},
	
	isDuration: function(val) {
		if (/^\d+:[0-5]\d$/.test(val)) return true;
		return false;
	},
	
	isUSPhone: function(val) {
		var phone = val.replace(/-|\(|\)|\s/g, '');
		if (Validation.isInteger(phone) && phone.length == 10) return true;
		return false;
	},
	
	isZip: function(val) {
		if ( /^\d{5}(-\d{4})?$/.test(val) ) return true;
		return false;
	},
	
	isFilePath: function(val) {
		if ( /^([a-zA-Z]\:|\\\\[^\/\\:*?"<>|]+\\[^\/\\:*?"<>|]+)(\\[^\/\\:*?"<>|]+)+(\.[^\/\\:*?"<>|]+)$/.test(val) ) return true;
		return false;
	},
	
	isMinLen: function(field, minLen) {
		if (field.value.length >= minLen)
			return true;
		return false;
	},
	
	isMaxLen: function(field, maxLen) {
		if (field.value.length <= maxLen)
			return true;
		return false;
	}
}

