// point60a_validation.js
// ----------------------
// Provides validation for the Point 6.0a update form. Requires addEvent()
// and addLoadEvent() from Common.js.


// CONSTANTS

var FORM_ID = 'RegistrationForm';
var HIGHLIGHT_CLASS = 'validation-highlight';
var ERROR_BOX_ID = 'ValidationErrors';
var DEFAULT_ERROR_HTML = '<p>The following errors were encountered:</p><ul></ul>';


// FUNCTIONS

// Initializes validation event handlers.
function InitializeValidation() {
    var registrationForm = document.getElementById(FORM_ID);
    addEvent(registrationForm, 'submit', ValidateForm);
}



// Handles submission of the update form. If invalid, highlights the invalid 
// fields, displays validation messages, and cancels submission. Otherwise, 
// submits the form.
function ValidateForm(e) {
    
    // Reset any previous validation display
    ResetValidation();
    var isValid = true;
    
    // Check each required field
    
    // ...Company
    if (IsEmpty('Company')) {
        HighlightField('Company');
        AddValidationMessage('Company Name cannot be empty');
        isValid = false;
    }
    
    // ...First Name
    if (IsEmpty('FirstName')) {
        HighlightField('FirstName');
        AddValidationMessage('First Name cannot be empty');
        isValid = false;
    }
    
    // ...Last Name
    if (IsEmpty('LastName')) {
        HighlightField('LastName');
        AddValidationMessage('Last Name cannot be empty');
        isValid = false;
   }
	
	  // ...Street Address
    if (IsEmpty('address1')) {
        HighlightField('address1');
        AddValidationMessage('Street Address cannot be empty');
        isValid = false;
    }
	
	  // ...City, State
    if (IsEmpty('address2')) {
        HighlightField('address2');
        AddValidationMessage('City, State cannot be empty');
        isValid = false;
    }
    
    // ...Phone Number
    if (IsEmpty('Phone')) {
        HighlightField('Phone');
        AddValidationMessage('Phone Number cannot be empty');
        isValid = false;
    }
    
    // ...Email
    if (IsEmpty('Email')) {
        HighlightField('Email');
        AddValidationMessage('Email Address cannot be empty');
        isValid = false;
    }
    
    // If form isn't valid, cancel submission
    if (!isValid) {
        if (e && e.preventDefault) {
            e.preventDefault();
        }
        return false;
    }
}



// Clears validation messages and field highlights.
function ResetValidation() {
    
    // Clear highlights on all fields
    var highlightedFields = getElementsByClass(HIGHLIGHT_CLASS);
    for (var i = 0; i < highlightedFields.length; i++) {
        highlightedFields[i].className = '';
    }
    
    // Clear validation messages
    var errorBox = document.getElementById(ERROR_BOX_ID);
    errorBox.innerHTML = DEFAULT_ERROR_HTML;
    errorBox.style.display = 'none';
}



// Returns true if the given field is empty. 
function IsEmpty(fieldId) {
    var field = document.getElementById(fieldId);
    if (field.value == '') {
        return true;
    }
    else {
        return false;
    }
}



// Highlights the given field as invalid.
function HighlightField(fieldId) {
    var field = document.getElementById(fieldId);
    field.className = HIGHLIGHT_CLASS;
}



// Adds the given validation error to the list, showing it if it's hidden.
function AddValidationMessage(message) {
    
    // Show the validation error box
    var errorBox = document.getElementById(ERROR_BOX_ID);
    errorBox.style.display = 'block';
    
    // Add the message to the list
    var errorList = errorBox.getElementsByTagName('ul')[0];
    var messageItem = document.createElement('li');
    messageItem.innerHTML = message;
    errorList.appendChild(messageItem);
}

// MAIN SCRIPT

// Initialize validation on page load
addLoadEvent(InitializeValidation);

