$(document).ready(function() {
    $('li').each(function(i) {
        var $li = $(this);
        var qlabel = $li.attr('id')
        var $radios = $li.find('input[type=radio], input[type=checkbox]');
        var $texts = $li.find('input[type=text]');

        if ($li.hasClass('missing') && $li.find('input[type=radio][checked=true]').size() > 0)
            $li.removeClass('missing');

        // When any radio in this group is changed, disable all text inputs.
        $radios.change(function() {
            $texts.attr('disabled', $radios.length > 0);
            $li.removeClass('missing');
        });

        $radios.each(function(j) {
            var $radio = $(this);
            var $text = $radio.next('label').next('input[type=text]');
            if ($text.size() > 0) {
                $text.attr('disabled', !$radio.attr('checked'));

                // When this radio is selected, enable text input
                $radio.change(function() {
                    if ($radio.attr('checked'))
                        $text.attr('disabled', false);
                });
            }
        });
    });
});
