/* global array for validation status */
formStatus = {errors: {}, hasErrors: false};

fieldNames = new Array();
fieldNames["firstName"] = "First name";
fieldNames["secondName"] = "Second name";
fieldNames["email"] = "E-mail";

/* will contain the URI-encoded string for submitting */
formParams = '';

/**
 * display all errors
 **/
displayErrorFields = function(fields) {
    errorString = '<p>The following fields are required:</p>';
    errorString += '<ul class="validation">';
    // mark the label and add the field name to the list
    for(var i = 0; i<fields.length; i++) {
		if($(fields[i]+"Label") != null) {
			$(fields[i]+"Label").addClassName("error");
			errorString += '<li class="error-msg">' + fieldNames[fields[i]] + '</li>';
		}
        $(fields[i]).addClassName("error");
	}
    errorString += '</ul>';
    $('colourReadingErrors').innerHTML = errorString;
}


/**
 * send the form contents to the server
 **/
submitAjaxRequest = function(theForm) {
    var colourTest = new Ajax.Request(theForm.action, {
        onComplete: function(request) {
            var result = request.responseText.evalJSON();
            if(result.success == false) {
                formStatus.hasErrors = true;
                formStatus.errors =  result.errors;
                return;
            }
            else {
                $('colourReadingContent').hide();
                $('colourReadingThanks').show();
            }
        },
        method: theForm.method,
        parameters: formParams
    });
    
}


/**
 * validate form by checking that all fields are set
 **/
clientSideValidation = function(theForm) {
    
    var error_fields = new Array();
    var valid = true;
    
    for(var i=0; i<theForm.elements.length; i++) {
        var element = theForm.elements[i];
        if(element.value.length == 0 && element.type != 'checkbox') {
            // check to see if this is required
            if(fieldNames[element.name] != undefined) {
                error_fields.push(element.name);
                valid = false;
            }
        }
		formParams += encodeURIComponent(element.name) + '=' + encodeURIComponent((element.type=="checkbox" ? element.checked : element.value)) + '&'
    }
    if(!valid) {
        formStatus.errors = error_fields;
        formStatus.hasErrors = true;
    }
    
    return valid;
}




/**
 * event handler for form submission
 **/
doSubmitForm = function() {
   
	var theForm = $('colourReadingsForm');
 
    /* reset global URI-encoded form parameters */
    formParams = '';
    /* reset form status */
    formStatus = {errors: {}, hasErrors: false};
    /* reset displayed error messages */
    $('colourReadingErrors').innerHTML = '';
    /* validate */
    var valid = clientSideValidation(theForm);
    
    if(valid) {
        submitAjaxRequest(theForm);
    }
    
    if(formStatus.hasErrors) {
        displayErrorFields(formStatus.errors);
    }
   
    return false;
}

