<!--

objForm = null;

/*
CLASS DECLARATIONS AND IMPLEMENTATIONS
*/

function IntegralType (min, max)
{
	this.Min = min;
	this.Max = max;
}

SQL_TINYINT  = new IntegralType (0, 255);
SQL_SMALLINT = new IntegralType (-32768, 32767);
SQL_INT      = new IntegralType (-2147483648, 2147483647);
SQL_BIGINT   = new IntegralType (-9223372036854775808, 9223372036854775807);


/*
FORM VALIDATION FUNCTIONS
*/

function CheckText (fieldName, msg)
{
	return (objForm.elements[fieldName].value == "") ? msg + "\n" : "";
}


function CheckSelectList (fieldName, msg)
{
	var myList = objForm.elements[fieldName];
	return (myList[myList.selectedIndex].value == "") ? msg + "\n" : "";
}


function CheckBoxSet (fieldName, msg)
{
	var i, isChecked, els;
	isChecked = false;
	els = objForm.elements;
	for (i=0; i < els.length && !isChecked; i++)
	{
		if (els[i].name == fieldName)
		{
			isChecked = els[i].checked;
		}
	}
	return (isChecked) ? "" : msg + "\n";
}


function CheckZip (fieldName)
{
	var myField = objForm.elements[fieldName];
	if (myField.value.length < 1)
		return ("Zip Code\n");
	return ("");
}


function CheckAreaCode (fieldName)
{	
	var myRegx = /^\d{3}$/;
	var myArea = objForm.elements[fieldName].value;

	if (!myArea.match (myRegx))
		return ("Area Code must be exactly 3 digits\n");
	return ("");
}


function CheckPhoneNumber (fieldName)
{
	var myRegx = /^\d{3}[\s\.-]?\d{4}$/;
	var myPhone = objForm.elements[fieldName].value;

	if (!myPhone.match (myRegx))
		return ("Phone Number should have the pattern 555-1212\n");
	return ("");
}


function CheckUsername (fieldName)
{
	var myRegx = /^\w{5,20}$/;
	var myUsername = objForm.elements[fieldName].value;
	
	//username will be auto-generated if this field is empty
	if (myUsername == "")
		return ("");

	if (!myUsername.match (myRegx))
		return ("Username must consist of 5-20\n   alphanumeric characters\n   (leave blank to auto-generate)\n")
	return ("");
}


function CheckPassword (fieldName)
{
	var myRegx = /^\w{5,20}$/;
	var myPassword = objForm.elements[fieldName].value;
	
	if (!myPassword.match (myRegx))
		return ("Password must consist of 5-20\n   alphanumeric characters\n")
	return ("");
}


function CheckRadioSet (fieldName, msg)
{
	var mySet = objForm.elements[fieldName], i, checked;
	for (i = 0; i < mySet.length; i++)
	{
		if (mySet[i].checked)
			return ("");
	}
	return (msg + "\n");
}


function CheckPrice (fieldName)
{
	var myRegx = /^\d*\.?\d?\d?$/;
	var myPrice = objForm.elements[fieldName].value;
	
	if (myPrice.length == 0 || !myPrice.match (myRegx))
		return ("Improperly formatted price\n");
	return ("");
}


function CheckInteger (fieldName, intType, msg)
{
	var myField = objForm.elements[fieldName];
	var myValue = myField.value;
	
	if (isNaN (myValue) || myValue == "")
		return (msg + " requires a numeric value\n");
	if (myValue > intType.Max || myValue < intType.Min)
		return (msg + " must be between " + intType.Min + " and " + intType.Max + "\n");
	
	myField.value = parseInt (myField.value);
	return ("");
}


function CheckUrlNullable (fieldName)
{
	var myRegx = /^http:\/\/.{6,}$/;
	var myUrl = objForm.elements[fieldName].value;
	
	if (myUrl == "")
		return ("");
	if (!myUrl.match (myRegx))
		return ("Website URL improperly formatted\n");
		
	return ("");
}


function CheckEmailNullable (fieldName)
{
	var emailStr = objForm.elements[fieldName].value;
	
	if (emailStr == "")
		return  ("")
		
	return CheckEmailFormat (fieldName);
}


function CheckEmail (fieldName)
{
	var emailStr = objForm.elements[fieldName].value;

	if (emailStr == "")
		return  ("Email Address\n")
		
	return CheckEmailFormat (fieldName);
}


function CheckEmailFormat (fieldName)
{
	var emailStr = objForm.elements[fieldName].value;
	
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null)
		return ("Email Address seems incorrect (check @ and .'s)\n")

	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null)
		return ("Email Address username does not seem to be valid\n")

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null)
	{
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
				return ("Destination IP address is invalid\n")
		}
		return "";
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null)
		return ("Email Address domain name does not seem to be valid\n")

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)
		return ("Email Address must end in a three-letter domain, or two letter country\n")

	if (len<2)
		return ("This address is missing a hostname\n")
	
	return "";
}


function DisplayMessage (missinginfo)
{
	if (missinginfo != "")
	{
		msg = "The Following Error(s) Occurred:\nYou Forgot To Enter The Following Fields:\n\n" + missinginfo + 
			  "\nPlease fill in the above fields and submit again. Thanks!";
		alert (msg);
		return false;
	}
	else
	{
		return true;
	}
}


//-->
