					<!-- hide from the old browsers

					var requiredFields = new Array();
					var errorMessage   = new Array();

					var i = 0;
					requiredFields[i] = 'reg.user.first_name';
					errorMessage[i++] = 'Please enter your first name.';

					requiredFields[i] = 'reg.user.last_name';
					errorMessage[i++] = 'Please enter your last name.';

					requiredFields[i] = 'reg.user.service_user_name';
					errorMessage[i++] = 'Please enter your desired username.';

					requiredFields[i] = 'reg.user.password';
					errorMessage[i++] = 'Please choose a password.';

					requiredFields[i] = 'password_confirm';
					errorMessage[i++] = 'Please confirm your password.';

					requiredFields[i] = 'reg.user.email';
					errorMessage[i++] = 'Please enter your email address';

					requiredFields[i] = 'dobYear';
					errorMessage[i++] = 'Please enter your year of birth';


					/*
					 * cjohnson - shell function to handle all validation needs
					 */
					function checkForm (formObj) {
					    var returnVal = false;
					    returnVal = validateForm(formObj);
					    if (returnVal) {
					        returnVal = comparePasswords(formObj);
					    }
					    if (returnVal) {
					        returnVal = validateUsername(formObj);
					    }

					    if (returnVal) {
					        returnVal = validateEmail(formObj);
					    }

					    if (returnVal) {
					        returnVal = assembleDate (formObj, 'regDobDay', 'regDobMonth', 'regDobYear', 'reg.user.dob');
					    }

					    return (returnVal);
					}

					/*
					 * cjohnson - makes sure any form elements with names that match names in requiredFields
					 * array are not blank or have something selected for select objects
					 */
					function validateForm (formObj) {
					    var groupElements = new Object;
					    for (var i = 0; i < formObj.elements.length; i++) {
					        for (var j = 0; j < requiredFields.length; j++) {
					            if (requiredFields[j].toLowerCase() == formObj.elements[i].name.toLowerCase()) {
					                /* if element is text field or textarea and it can't be blank, first see if it is blank, 
					                 * if so return false, otherwise, get rid of double spaces and leading spaces then check 
					                 * again to see if it is blank
					                 */
					                if ((formObj.elements[i].type == "text") || (formObj.elements[i].type == "textarea") || (formObj.elements[i].type == "hidden") || (formObj.elements[i].type == "password")) {
					                    if (formObj.elements[i].value == '') {
					                        alert (errorMessage[j]);
					                        return false;
					                    } else {
					                        formObj.elements[i].value = spaceTrim(formObj.elements[i].value);
					                        if (formObj.elements[i].value == '') {
					                            alert (errorMessage[j]);
					                            return false;
					                        }
					                    }
					                } /* end checking for text and textarea */
					                
					                /* if element is a single select element make sure something is selected and whatever is selected has a value */
					                if (formObj.elements[i].type == "select") {
					                    if (formObj.elements[i].selectedIndex < 0) {
					                            alert (errorMessage[j]);
					                            return false;
					                    } else if (formObj.elements[i].options[formObj.elements[i].selectedIndex].value == '') {
					                            alert (errorMessage[j]);
					                            return false;
					                    }
					                } /* end checking for single select elements */

					                /* if element is a multiple select element make sure something is selected and one of whatever is selected has a value*/
					                if (formObj.elements[i].type == "select-multiple") {
					                    if (formObj.elements[i].selectedIndex < 0) {
					                            alert (errorMessage[j]);
					                            return false;
					                    } else {
					                        var showError = true;
					                        /* loop through all options looking for what is selected */
					                        for (k = 0; k < formObj.elements[i].options.length; k++) {
					                            if (formObj.elements[i].options[k].selected) {
					                                if (formObj.elements[i].options[k].value != '') {
					                                    showError = false;
					                                }
					                            }
					                        }
					 
					                        if (showError) {
					                            alert (errorMessage[j]);
					                            return false;
					                        }
					                    }
					                } /* end checking for single select elements */
					                
					                /* if element is a radio button element make sure one of the group is selected and that the selected option has a value */
					                if (formObj.elements[i].type == "radio") {
					                    /* use the fact that objects in javascript are hashes to keep track of whether we've seen this item before and whether it has already been validated */
					                    if (groupElements[formObj.elements[i].name] == true) {
					                        /* do nothing, one of the group has already been determined okay */
					                    } else {
					                        if (formObj.elements[i].checked && formObj.elements.value != '') {
					                            /* mark this group as okay */
					                            groupElements[formObj.elements[i].name] = true;
					                        } else {
					                            /* save the index of the required fields array as the value for showing error message later */
					                            groupElements[formObj.elements[i].name] = j;
					                        }
					                    }
					                } /* end checking for radio elements */
					                
					            } /* end if field must be completed logic */
					        } /* end for loop through requiredFields array */
					    } /* end loop through all form fields array */
					    
					    /* check elements that occurred as groups to make sure one of each group was selected and validated */
					    for (var property in groupElements) {
					        if (groupElements[property] != true) {
					            alert (errorMessage[groupElements[property]]);
					            return false;
					        }
					    }
					    return true;
					}


					/* modified by cjohnson
					 * provided by tonyz from a library
					 * removes leading and trailing spaces from a string as well as removing
					 * occurences of double spacing
					 */
					function spaceTrim(InString) {
					    /* get rid of all double spaces */
					    while (InString.indexOf("  ") != -1) {
					        Temp = InString.substring(0, InString.indexOf("  "))
					        InString = Temp + InString.substring(InString.indexOf("  ")+1, InString.length)
					    }
					    
					    /* get rid of leading spaces */
					    if (InString.substring(0, 1) == " ") {
					        InString = InString.substring(1, InString.length);
					    }

					    /* get rid of trailing spaces */
					    if (InString.substring (InString.length-1) == " ") {
					        InString = InString.substring(0, InString.length-1);
					    }
					    
					    return (InString)
					}

					/* 
					 * cjohnson - will make sure that any set of form elements containing the 
					 * word password in their name will match in value
					 * ignores element named reg.user.old_password and any element with a {
					 * in its value
					 */
					function comparePasswords (formObj) {
					    var password = null;
					    for (i = 0; i < formObj.elements.length; i++) {
					        if (formObj.elements[i].name.toLowerCase().indexOf("password") != -1 && formObj.elements[i].name.toLowerCase() != 'reg.user.old_password' && formObj.elements[i].value.indexOf('{') == -1) {
					            if (password != null) {
					                if (password != formObj.elements[i].value) {
					                    alert ("Your passwords do not match");
					                    return false;
					                }
					            } else {
					                password = formObj.elements[i].value;
					            }
					        }
					    }
					    
					    return true;
					}


					/* 
					 * cjohnson - will make sure that any form element containing the 
					 * word email in it's name will match a "valid" format, test of value
					 * was lifted from the AOE templates
					 */
					function validateEmail (formObj) {
					    var atIndex         = null;
					    var domain          = null;
					    var dotIndex        = null;
					    var topLevelDomain  = null;
					    for (i = 0; i < formObj.elements.length; i++) {
					        if (formObj.elements[i].name.toLowerCase().indexOf("email") != -1
					&& formObj.elements[i].name.toLowerCase().indexOf("email.status") == -1) {

					            formObj.elements[i].value = spaceTrim(formObj.elements[i].value);
					            var str = formObj.elements[i].value;
					            if (!(/^[\.\-\+\w]*@\w+([\.-]?\w+)*(\.\w{2,6})+$/.test(str))) {
					                alert ("Your email address (" + str + ") does not appear to be valid");
					                return false;
					            }
					        }
					    }
					    
					    return true;
					}

					/* 
					 * cjohnson - will make sure that any form element containing the 
					 * word zipcode in it's name will match a "valid" format
					 * basically means that it must contain 5 digits
					 */
					function validateZipcode (formObj) {
					    for (var i = 0; i < formObj.elements.length; i++) {
					        if (formObj.elements[i].name.toLowerCase().indexOf("zipcode") != -1) {
					            if (formObj.elements[i].value.length == 5) {
					                for (var j = 0; j <= formObj.elements[i].value.length; j++) {
					                    if ("0123456789".indexOf(formObj.elements[i].value.charAt(j)) == -1) {
					                        alert ("Your zipcode does not appear to be valid");
					                        return false;
					                    }
					                }
					            } else {
					                alert ("Your zipcode does not appear to be valid");
					                return false;
					            }
					        }
					    }
					    return true;
					}

					/*
					 * cjohnson - will take three form elements (day, month, year) and assemble them into
					 * a single element in date format
					 * assumes that the three given elements are of type text or select
					 * assumes no validation is needed
					 * assumes all elements exist and are appropriately named
					 */
					function assembleDate (formObj, dayName, monthName, yearName, destName) {
					    var destIndex = -1;
					    var dayVal    = null;
					    var monthVal  = null;
					    var yearVal   = null;
					    var today     = new Date();
					    var compare_date = new Date(today.getYear() - 13, today.getMonth(), today.getDate());
					    var month     = compare_date.getMonth();
					    var day       = compare_date.getDate();
					    var year      = compare_date.getFullYear();
					    month++;
					    
					    for (i = 0; i < formObj.elements.length; i++) {
					        if (formObj.elements[i].name == dayName) {
					            if (formObj.elements[i].type == 'text') {
					                dayVal = formObj.elements[i].value;
					            } else if (formObj.elements[i].type.indexOf('select') != -1) {
					                dayVal = formObj.elements[i].options[formObj.elements[i].selectedIndex].value;
					            }
					        } else if (formObj.elements[i].name == monthName) {
					            if (formObj.elements[i].type == 'text') {
					                monthVal = formObj.elements[i].value;
					                monthNumVal = monthVal;
					            } else if (formObj.elements[i].type.indexOf('select') != -1) {
					                monthVal = formObj.elements[i].options[formObj.elements[i].selectedIndex].value;
					                monthNumVal = formObj.elements[i].selectedIndex + 1; /* remove +1 if empty first option available */
					            }
					        } else if (formObj.elements[i].name == yearName) {
					            if (formObj.elements[i].type == 'text') {
					                yearVal = formObj.elements[i].value;
					            } else if (formObj.elements[i].type.indexOf('select') != -1) {
					                yearVal = formObj.elements[i].options[formObj.elements[i].selectedIndex].value;
					            }
					        } else if (formObj.elements[i].name == destName) {
					            destIndex = i;
					        }
					    }

					    if (destIndex != -1) {
					        if (yearVal >= year) {
					            if (monthNumVal >= month || yearVal > year) {
					                if (dayVal >= day || monthNumVal > month || yearVal > year) {
					                    alert ("We're sorry, but it appears that you are under the age of 13.  Due to strict federal laws that make it illegal for us to take information from children under 13 years of age, please have your parent or guardian assist you in creating an account using their information.");
					                    window.location = "http://www.morrisdigitalworks.com/";
					                    return false;
					                }
					            }
					        }

					        if (yearVal < 1000) {
					            alert ("Please specify your date of birth using 4 digits for the year");
					            return false;
					        }

					        formObj.elements[destIndex].value = dayVal + '-' + monthVal + '-' + yearVal;
					    }

					    return true;
					}

					/*
					 * cjohnson - for use with checkboxes when the status of the checkbox needs to be used
					 * to modify a value of another form element
					 */
					function checkboxHiddenValue (formElementObj, hiddenElementName) {
					    var newValue = '';

					    if (formElementObj.checked) {
					        newValue = formElementObj.value;
					    }
					    
					    for (i = 0; i < formElementObj.form.elements.length; i++) {
					        if (formElementObj.form.elements[i].name.toLowerCase() == hiddenElementName.toLowerCase()) {
					            formElementObj.form.elements[i].value = newValue;
					        }
					    }
					    
					    return;
					}

					/*
					 * cjohnson - check to make sure form element value contains only allowed characters
					 */
					function validateFormElement (formElementObj, elementName) {
					    var allowedChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_@.';
					    var returnVal = true;
					    var i = 0;
					    for (; i < formElementObj.value.length; i++) {
					        if (allowedChars.indexOf(formElementObj.value.charAt(i)) == -1) {
					            if (formElementObj.value.charAt(i) == ' ') {
					                alert ('You have an invalid character (space) in your ' + elementName + '. Allowed characters are [' + allowedChars + ']');
					            } else {
					                alert ('You have an invalid character (' + formElementObj.value.charAt(i) + ') in your ' + elementName + '. Allowed characters are [' + allowedChars + ']');
					            }
					            i = formElementObj.length;
					            returnVal = false;
					            formElementObj.focus();
					        }
					    }

					    return (returnVal);
					}

					/*
					 * cjohnson - pass the username form element to the validateFormElement function
					 */

					function validateUsername ( formObj ) {
					    var returnVal = true;
					    for (i = 0; i < formObj.elements.length; i++) {
					        if (formObj.elements[i].name.toLowerCase().indexOf("service_user_name") != -1) {
					            returnVal = validateFormElement(formObj.elements[i], 'username');
					        }
					    }
					    return (returnVal);
					}
					// -->