function isDate(date) {
	var valid = true;
	
	var i = date.indexOf('/');
	var i2 = date.indexOf('/', i + 1);
	
	day = date.substring(0, i);						// day
	month = date.substring(i + 1, i2);		// month
	year = date.substring(i2 + 1);				// year
	
	if(	isNaN(day) || isNaN(month) || isNaN(year) ||
			day < 1 || day > 31 || day.length > 2 || day.length < 1 ||
			month < 1 || month > 12 || month.length > 2 || month.length < 1 ||
			year < 0 || year.length > 4 || year.length < 4)
		return false;

	var mon = parseInt(month, 10);
	
	// April, June, September, November only 30 days
	if(mon == 4 || mon == 6 || mon == 9 || mon == 11) {
		if(parseInt(day, 10) > 30)
			valid = false;
	}
	else if(mon == 2) {
		if(parseInt(day, 10) > (28 + (parseInt(year, 10) % 4 == 0 && parseInt(year, 10) % 400 != 0 ? 1 : 0)) )
			valid = false;
	}
	else if(parseInt(day, 10) > 31)
		valid = false;
	
	return valid;
}

function trim(str)
{
	newString = str;
	
	// Remove the leading characters
	while (newString.charAt(0) == ' ') {
		newString = newString.substring(1, newString.length);
	}
	
	// Remove the trailing characters
	while (newString.charAt(newString.length - 1) == ' ') {
		newString = newString.substring(0, newString.length - 1);
	}
	
	return newString;
}

// Check if the first item is selected
function invalidDropdown(item, field) {
	if(item.selectedIndex == 0) {
		alert("Please select an item from the \"" + field + "\" dropdown.");		
		item.focus();
		return true;
	}
	return false;
}

// Check if the first item is selected
function invalidMultiDropdown(item, field, min) {
	item = item;
	var count = 0;
	
	for(var i = 0; i < item.options.length; i++) {
		if(item.options[i].selected)
			count++;
	}
	
	if(count < min) {
		alert("Please select at lease " + min + " item" + (min > 1 ? "" : "s") + " from the \"" + field + "\" dropdown.");		
		item.focus();
		return true;
	}
	return false;
}

// Check if the first item is selected
function invalidDate(item, field) {
	if(!isDate(item.value)) {
		alert("Please enter a valid date in the \"" + field + "\" field.");
		item.focus();
		return true;
	}
	return false;
}

// Check if the first item is selected
function invalidDateGroup(form, field, caption, first, count) {
	if(count != 3)
		return false;
	
	var day = form[field + "_" + first].options[form[field + "_" + first].selectedIndex].value;
	var month = form[field + "_" + (first + 1)].options[form[field + "_" + (first + 1)].selectedIndex].value;
	var year = form[field + "_" + (first + 2)].options[form[field + "_" + (first + 2)].selectedIndex].value;
	
	// Ignore if N/A
	if(day == "")
		day = "1";
	if(month == "")
		month = "1";
	if(year == "")
		year = "1900";
	
	if(!isDate(day + "/" + month + "/" + year)) {
		alert("Please enter a valid date for the \"" + caption + "\".");
		form[field + "_" + first].focus();
		return true;
	}
	return false;
}

function invalidTime(items, field, first, count) {
	if(count == 2) {
		return invalidNumber(items[first], field, true) || 
					 invalidNumber(items[first + 1], field, true);
	}
	return true;
}

function invalidWeight(items, field, first, count) {
	if(count == 2) {
		return invalidNumber(items[first], field, true) || 
					 invalidNumber(items[first + 1], field, true);
	}
	return true;
}

// Check if a field is empty
function emptyField(item, field) {
	if(trim(item.value) == "") {
		alert("Please enter a value for the \"" + field + "\" field.");
		item.focus();
		item.select();
		return true;
	}
	return false;
}

// Check for invalid string
function invalidString(item, field, min, max) {
	var length = trim(item.value).length;
	min = parseInt(min);
	max = parseInt(max);
	
	if(length < min || (length > max && max > 0)) {
		alert("The field \"" + field + "\" must be between " + min + " and " + max + " characters long.");
		item.focus();
		item.select();
		return true;
	}
	return false;
}

// Check number
function invalidNumber(item, field, required) {
	var number = trim(item.value);
	
	if(required && number == "") {
		alert("Please enter a value for the \"" + field + "\" field.");
		item.focus();
		return true;
	}
	else {
		var i = 0;
		var checkOK = "0123456789";
		
		while(i < number.length && checkOK.indexOf(number.charAt(i)) >= 0)
			i++;
		
		if(i < number.length || isNaN(number)) {
			alert("Only numbers are valid for the \"" + field + "\" field.");
			item.focus();
			return true;
		}
		else
			return false;
	}
}			

function invalidLetters(item, field, required) {
	var number = trim(item.value);
	
	if(required && number == "") {
		alert("Please enter a value for the \"" + field + "\" field.");
		item.focus();
		return true;
	}
	else {
		var i = 0;
		var checkOK = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzfSOZsozY \t\r\n\f";
		
		while(i < number.length && checkOK.indexOf(number.charAt(i)) >= 0)
			i++;
		
		if(i < number.length ) {
			alert("Only Letters are valid for the \"" + field + "\" field.");
			item.focus();
			return true;
		}
		else
			return false;
	}
}			

function invalidPhone(item, field, required) {
	var number = trim(item.value);
	
	if(required && number == "") {
		alert("Please enter a value for the \"" + field + "\" field.");
		item.focus();
		return true;
	}
	else {
		var i = 0;
		var checkOK = "0123456789. /-+";
		
		while(i < number.length && checkOK.indexOf(number.charAt(i)) >= 0)
			i++;
		
		if(i < number.length) {
			alert("Only numbers are valid for the \"" + field + "\" field.");
			item.focus();
			return true;
		}
		else
			return false;
	}
}			

function invalidEmail(item, field, required) {
	var email = item.value;
	
	if(required && email == "")
	{
		alert("Please enter a value for the \"" + field + "\" field.");
		item.focus();
		return true;
	}
	else if(!required && email == "")
		return false;
		
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/; // not valid
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/; // valid
	if (!reg1.test(email) && reg2.test(email)) { // if syntax is valid	
		 return false;
	}
	else
	{
		alert("\"" + email + "\" is an invalid e-mail address");
		item.focus();
		item.select();
		return true;
	}
}

// Get item value (check if dropdown or text field)
function getItemValue(item) {
	if(item.options)
		return item.options[item.selectedIndex].value;
	else
		return item.value;
}
