//	
//	ServiceRequest_Validation.js
//
//	November 2004
//


//***********************************************************************************
//	Generic Section -- See GenericValidation.js for fully commented versions.
//***********************************************************************************
var defaultEmptyOK = true

var USStateCodeDelimiter = "|";
var USStateCodes = "AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|AE|AA|AE|AE|AP"
var CanadianProvinceCodes = "AB|BC|MB|NB|NF|NT|NS|ON|PE|QC|SK|YT"

var reInteger = /^\d+$/
var reEmail = /^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/
var reLetter = /^[a-zA-Z]$/
var reDigit = /^\d/
var reCanadaPost = /^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$/

var digitsInZIPCode1 = 5
var digitsInZIPCode2 = 9
var digitsInUSPhoneNumber = 10

var formatInProgress = false

function isDigit (c)
	{
	return reDigit.test(c)
	}

function isEmail (str)
	{
	if (isEmpty(str))
		{
		if (isEmail.arguments.length == 1)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isEmail.arguments[1] == true);
			}
		}
	else
		{
		return reEmail.test(str)
		}
	}

function isEmpty(str)
	{
	return ((str == null) || (str.length == 0))
	}

function isInteger (str)
	{
	if (isEmpty(str))
    	{
		if (isInteger.arguments.length == 1)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isInteger.arguments[1] == true);
			}
		}
	return reInteger.test(str)
	}

function isIntegerInRange (str, min, max)
	{   
	if (isEmpty(str))
		{
		if (isIntegerInRange.arguments.length == 3)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isIntegerInRange.arguments[3] == true);
			}
		}

    	if (!isInteger(str, false))
    		{
    		return false;
    		}

	var num = parseInt (str);
	return ((num >= min) && (num <= max));
	}
	
function isLetter (c)
	{
	return reLetter.test(c)
	}

function isProvinceCode(str)
	{
	if (isEmpty(str))
		{
		if (isProvinceCode.arguments.length == 1)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isProvinceCode.arguments[1] == true);
			}
		}
	return ( (CanadianProvinceCodes.indexOf(str) != -1) &&
		     (str.indexOf(USStateCodeDelimiter) == -1) )
	}
	
function isStateCode(str)
	{
	if (isEmpty(str))
		{
		if (isStateCode.arguments.length == 1)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isStateCode.arguments[1] == true);
			}
		}
	return ( (USStateCodes.indexOf(str) != -1) &&
		     (str.indexOf(USStateCodeDelimiter) == -1) )
	}

function isZIPCode (str)
	{
	if (isEmpty(str))
		{
		if (isZIPCode.arguments.length == 1)
			{
			return defaultEmptyOK;
			}
		else
			{
			return (isZIPCode.arguments[1] == true);
			}
		}
   
	return (isInteger(str) && 
           ((str.length == digitsInZIPCode1) || (str.length == digitsInZIPCode2)))
	}

function reformat (str)
	{
	var arg;
	var sPos = 0;
	var resultString = "";

	for (var i = 1; i < reformat.arguments.length; i++)
		{
    	arg = reformat.arguments[i];
		if (i % 2 == 1)
			{
			resultString += arg;
			}
		else
       		{
       		resultString += str.substring(sPos, sPos + arg);
			sPos += arg;
			}
		}

	return resultString;
	}

	function reformatUSPhone(obj) {

		if (! formatInProgress)	{
			
			formatInProgress = true
			var sOriginal = obj.value
			var sWork = stripCharsInRE(sOriginal, /\D/g)

			sWork = sWork.replace(/^1/, "")

			if (sWork.length > 10) {
				
				sWork = (reformat (sWork, "", 3, "-", 3, "-", 4, " x", 6))
				
				if (sWork != sOriginal) {
					obj.value = sWork
					alert("We've reformatted your phone number and extension. \r\r" +
						"If you were attempting to enter two phone numbers, you are limited to a single phone number.")
					obj.focus()
					obj.select()
				}
			}
			else if (sWork.length == 10) {
				sWork = (reformat (sWork, "", 3, "-", 3, "-", 4))
				obj.value = sWork
			}
			else if (sWork.length == 0)	{
				obj.value = sWork
			}
			else {
				alert("Phone and Fax Number must include the area code.  Please include an area code with the number.")
				obj.focus()
				obj.select()
			}
			
			formatInProgress = false
		}
	}

function stripCharsInRE (str, regExp)
	{
	return str.replace(regExp, "")
	}


function stripNonNumerics(obj)
	{
	var strClean = stripCharsInRE(obj.value, /\D/g)
	
	if(obj.value != strClean)
		{
		obj.value = strClean
		}
	}
	
function formatStateCode(objStateCode)
	{
	if (isEmpty(objStateCode.value))
		{
		return true
		}
	else
		{
		var strStateCode = objStateCode.value.toUpperCase()

		if (isStateCode(strStateCode) || isProvinceCode(strStateCode))
			{
			objStateCode.value = strStateCode
			return true
			}
		else
			{
			alert('The two-letter state or province code you entered is not valid.  ' +
				  'Please enter a valid code.')
			objStateCode.select()
			objStateCode.focus()
			return false
			}
		}
	}

function formatPostalCode(objStateCode, objPostalCode)
	{	
	if (isEmpty(objStateCode.value) || (objStateCode.value == "XX") || isEmpty(objPostalCode.value))
		{
		return true
		}
	else
		{
		var strPostalCode = objPostalCode.value.toUpperCase()
		var strStateCode = objStateCode.value.toUpperCase()
		
		if (isStateCode(strStateCode))
			{
			strPostalCode = stripCharsInRE(strPostalCode, /\D/g)

			if (isZIPCode(strPostalCode))
				{
				if (strPostalCode.length == digitsInZIPCode2)
					{
					strPostalCode = reformat(strPostalCode, "", 5, "-", 4)
					objPostalCode.value = strPostalCode
					return true
					}
				}
			else
				{
				alert('The zip code you entered is not valid.  ' +
					  'Please enter a valid 5- or 9-digit zip code.')
				objPostalCode.focus()
				objPostalCode.select()
				return false
				}
			}
		else if (isProvinceCode(strStateCode))
			{
			strPostalCode = stripCharsInRE(strPostalCode, / /)
			
			if (reCanadaPost.test(strPostalCode))
				{
				strPostalCode = strPostalCode.substr(0,3) + " " + strPostalCode.substr(3,3)
				objPostalCode.value = strPostalCode
				return true
				}
			else
				{
				alert('The postal code you entered is not valid.  ' +
					  'Please enter a valid 6-character postal code.')
				objPostalCode.focus()
				objPostalCode.select()
				return false
				}
			}
		else
			{
			alert('The two-letter state or province code you entered is not valid.  ' +
				  'Please enter a valid state or province code before attempting to enter a postal code.')
			objPostalCode.value = ""
			objStateCode.focus()
			objStateCode.select()
			return true
			}
		}
	}

	function validateEmail(txtEmail) {
		var strValidationMessage = ""

		if (! isEmail(txtEmail.value)) {
			alert("Please check your email address for errors.  It does not appear to be valid.")
			txtEmail.focus()
			txtEmail.select()
			return false
		}
		else {
			return true
		}
	}


//***********************************************************************************
//	Vendor and Contractor Registration Section -- These are specific to VREG
//***********************************************************************************

function confirmDiscard()
	{
	if (confirm('Do you want to return to the Vendor and Contractor Registration home page ' +
				'without saving your changes?'))
		{
		submitLink('.')
		}
	}

	function checkPostalCode() {
		
		with(document.frmServiceRequest) {
		
			var strCountry = ddlCountry.value
			
			if (strCountry == "USA" || strCountry == "CANADA") {
				formatPostalCode(ddlState, txtZip)
			}
		}
	}

	function isValidInput()	{

		var blnSubmit
		var strMsg
		var strPhone
		var strDescr
		
		strMsg = ""
		
		with(document.frmServiceRequest) {
			
			reformatUSPhone(txtHomePhone);
			
			if (isEmpty(txtFirstName.value)) {
				strMsg += "'First Name' is a required field.\r"
			}
			
			if (isEmpty(txtLastName.value))	{
				strMsg += "'Last Name' is a required field.\r"
			}
			
			if (isEmpty(txtZip.value)) {
				strMsg += "'Zip Code' is a required field.\r"
			}
			
			if (isEmpty(txtCity.value)) {
				strMsg += "'City' is a required field.\r"
			}
			
			if (isEmpty(ddlState.value)) {
				strMsg += "'State' is a required field.\r"
			}

			if (isEmpty(txtEmail.value)) {
				strMsg += "'E-mail' is a required field.\r"
			}

			if (isEmpty(ddlIssue.value)) {
				strMsg += "'Issue' is a required field.\r"
			}
			
			if (isEmpty(txtHomePhone.value))	{
				strMsg += "'Home Phone' is a required field.\r"
			}
			
			if (isEmpty(txtLocation.value)) {
				strMsg += "'Incident Location' is a required field.\r"
			}

			if ((isEmpty(ddlPark.value) || (ddlPark.value == "XX"))  && mblnIsCityParkVisible) {
				strMsg += "'City Park' is a required field.\r"
			}
			
			if (isEmpty(txtComments.value)) {
				strMsg += "'Description of animal...' is a required field.\r"
			}
			
			if (! isEmpty(strMsg)) {
				alert(strMsg)
				return false
			}
			else {
				return validateEmail(txtEmail)	
			}
		}
	}

