function setupFieldSets()
{
    var fieldSets = $A(document.getElementsByClassName('fieldset'));
    fieldSets.each( function(fieldSet)
    {
        var inputs = $A(fieldSet.getElementsByTagName('input'));
        inputs.each(observeFieldSetElement);
        var selects = $A(fieldSet.getElementsByTagName('select'));
        selects.each(observeFieldSetElement);
        updateFieldSet(fieldSet, 'inputSelect', 'inputNonSelect');
    });    
}

function observeFieldSetElement(elem)
{
    Event.observe(elem, 'focus', focusFieldSet);
    Event.observe(elem, 'blur',  blurFieldSet);
}

function focusFieldSet(evt)
{
    var fieldSet = Event.element(evt).parentNode;
    updateFieldSet(fieldSet, 'inputNonSelect', 'inputSelect');
}

function blurFieldSet(evt)
{
    var fieldSet = Event.element(evt).parentNode;
    updateFieldSet(fieldSet, 'inputSelect', 'inputNonSelect');
}

function updateFieldSet(fieldSet, from, to)
{
    swapClassNames(fieldSet, from, to);
    $A(fieldSet.childNodes).each( function(elem) 
    {
        if (elem.nodeType == 1)
        {
            swapClassNames(elem, from, to);
        }
    } );
}

Event.observe(window, 'load', setupFieldSets);
