'Entry point for the form builder
@param resource: the S3Resource to render the widget for
@param get_vars: the GET vars (URL query vars) to prepopulate
the widget
@param alias: the resource alias to use'

def __call__(self, resource, get_vars=None, alias=None):

    self.alias = alias
    self._attr(resource)
    variable = self.variable(resource, get_vars)
    defaults = {}
    for (k, v) in self.values.items():
        selector = self._prefix(k)
        defaults[selector] = v
    if (type(variable) is list):
        values = Storage()
        for k in variable:
            if (k in defaults):
                values[k] = defaults[k]
            else:
                values[k] = self._values(get_vars, k)
    elif (variable in defaults):
        values = defaults[variable]
    else:
        values = self._values(get_vars, variable)
    widget = self.widget(resource, values)
    if self.alternatives:
        variable = self._variable(self.selector, self.operator)
    data = self.data_element(variable)
    if (type(data) is list):
        data.append(widget)
    else:
        data = [data, widget]
    return TAG[''](*data)
