'Render this widget
@param field: the Field
@param value: the currently selected value(s)
@param attributes: HTML attributes for the widget'

def __call__(self, field, value, **attributes):

    fieldname = field.name
    attr = Storage(attributes)
    if ('_id' in attr):
        _id = attr.pop('_id')
    else:
        _id = ('%s-options' % fieldname)
    attr['_id'] = _id
    if ('_name' not in attr):
        attr['_name'] = fieldname
    options = self._options(field, value)
    if ('empty' in options):
        widget = DIV(SPAN(options['empty'], _class='no-options-available'), INPUT(_type='hidden', _name=fieldname, _value=None), **attr)
    else:
        widget = DIV(**attr)
        append = widget.append
        render_item = self._render_item
        for option in options:
            item = render_item(fieldname, option)
            append(item)
    return widget
