// *************** START QUAL AND COOKIE SCRIPTS *************** //
function initializeQualtoolState() {

// set the state to what's in the cookie
	var toolHolder = (isNN4) ? (document.qualtoolId.document) : document;
	if (covadVisitorData.state != null)
		toolHolder.qualtool.state.selectedIndex = covadVisitorData.state;
		
}

// *************** FORM VALIDATION VARIABLE DECLARATIONS *************** //
var regex_whitespace = /^\s+$/
var regex_alphabetic = /^[a-zA-Z]+$/
var regex_alphanumeric = /^[a-zA-Z0-9]+$/
var regex_integer = /^\d+$/

// remove all the spaces to restore the original regexp

var regex_email = /^.+$/
var error_location = "Pick a location";
var error_telephone = "Enter a telephone number";
var error_street1 = "Enter a street address";
var error_address2 = "";
var error_city = "Enter a city";
var error_state = "Enter a state";
var error_zip = "Enter a zip";
var error_city_state_zip = "Enter a city and state and/or a zip"
var error_email = "Enter an email address";


// *************** QUALTOOL FORM VALIDATION FUNCTIONS *************** //
// Return TRUE if "text" is empty
function isEmptyString(text) {
	return ((text == null) || (text.length == 0));
}

// Return TRUE if "text" is empty or contains whitespace characters
function isWhitespace(text) {
	return (validateEmptyString(text) || regex_whitespace.test(text));
}

// Return TRUE if "text" is comprised of integers
function isIntegerString(text) {
	return (regex_integer.test(text));
}

// Return TRUE if one element in a Radio Button group is selected

function isRadioSelected(radioGroup) {
	var length = radioGroup.length;
	if (length == 0)
		return radioGroup.checked;
	for (var i=0; i<length; i++) {
		if (radioGroup[i].checked)
			return true;
	}
	return false
}

// does not check zip+4
function isZipCode(text) {
	if (text.length < 5)
		return false;
	return isIntegerString(text.substring(0, 5));
}

function isStreetAddress(text) {
	return (!isEmptyString(text))
}

function isCity(text) {
	return (!isEmptyString(text))
}

function isState(select) {
	return (select.selectedIndex != 0)
}

function isPhoneAreaCode(text) {
	if(! (text.length == 3))
		return false;
	return isIntegerString(text)
}

// Prefix - the first 3 digits of a 7 digit phone number.
function isPhonePrefix(text){
	if(! (text.length == 3))
		return false;
	return isIntegerString(text)
}

// Extension is the last 4 digits of a 7 digit phone number
function isPhoneExtension(text) {
	if(! (text.length == 4))
		return false;
	return isIntegerString(text)
}

// Do the correct action for a validation error
function validationError(anErrorMsg, aValidationManager) {
	aValidationManager.addError(anErrorMsg);
	return false;
}

// Object for management of error messages.
function ValidationManager() {
	this.errors = [];
	this.addError = function (aString) {
		this.errors[this.errors.length] = aString;
	};
	this.displayError = function() {
		alert(this.errors.join("\n"));
	}
	this.hasError = function() {
		return this.errors.length > 0;
	}
}

// Manages the validation of the qualtool
function QualtoolValidator(aForm) {
	this.qualtoolForm = aForm;
	this.manager = new ValidationManager();
	this.error = function (aString) {
		return validationError(aString, this.manager);
	};

	this.fieldValue = function (aFieldName) {
		return this.qualtoolForm[aFieldName].value
	};

	this.validateChoice = function () {
		if (! isRadioSelected(this.qualtoolForm.choice))
			return this.error(error_location);
		return true
	};

	this.validatePhoneNumber = function () {
		var isValid = isPhoneAreaCode(this.fieldValue("npa")) &
			isPhonePrefix(this.fieldValue("nxx")) & 
			isPhoneExtension(this.fieldValue("lastfour"));
		if (!isValid )
			return this.error(error_telephone);
		return true	
	}

	this.validateAddress = function() {
		if (!isStreetAddress(this.fieldValue("street1")))
			this.error(error_street1);
	};
	
	this.validateZip = function() {
		if (!isZipCode(this.fieldValue("zip")))
			this.error(error_zip);
	};

	this.validate = function() {
		this.validateChoice();
		this.validatePhoneNumber();
		this.validateAddress();
		this.validateZip();
	};

	this.addToCookie = function(aCookie) {
		aCookie.address = this.fieldValue("street1") + "\n" + this.fieldValue("street2"); 
		aCookie.phone = this.fieldValue("npa") + this.fieldValue("nxx") + this.fieldValue("lastfour");
		aCookie.city = this.fieldValue("city");
		aCookie.state = this.qualtoolForm.state.selectedIndex;
		aCookie.zip = this.fieldValue("zip");
		for (var i = 0; i < length; i++)
			if (this.qualtoolForm.choice[i].checked)
				aCookie.choice = i;
		aCookie.store();
	}
}

// Validates qualtool
function validateAndStoreQualtool(aForm) {
	var validator = new QualtoolValidator(aForm);
	validator.validate();
	if (validator.manager.hasError()) {
		validator.manager.displayError();
		return false;
	};
	validator.addToCookie(covadVisitorData);
	return true;
}