function registerFormFields(aForm, firstField) {
    var inputs = Form.getElements(aForm);
    for (var i = 0; (input = inputs[i]); i++) {
        if (['input', 'select', 'textarea'].include(input.tagName.toLowerCase()) &&
            !['submit', 'hidden'].include(input.type.toLowerCase())) {
            
            Event.observe(input, 'focus', function(event) {
                element = Event.element(event);
                hightlighGroup(element, true)
            }, false);

            Event.observe(input, 'blur', function(event) {
                element = Event.element(event);
                hightlighGroup(element, false)
            }, false);
        }
    }
    // I chose not to use Form.focusFirstElement(aForm); as it wasn't returning a select item if it was first
    if (firstField) {
        Field.focus(firstField);
    }
}

function hightlighGroup(element, doHighlight) {
    if (element.tagName != null) { // to catch a stupid bug that was 'eventing' on an HTMLDocument element
        while (element.parentNode && (!Element.hasClassName(element, 'form-group'))) {
            element = element.parentNode;
        }

        if (doHighlight) {
            Element.addClassName(element, 'form-group-hover');
        } else {
            Element.removeClassName(element, 'form-group-hover');
        }
    }
}