def get_custom_element_function(self,field):
     from gluon.sqlhtml import OptionsWidget
     if OptionsWidget.has_options(field):
         widget=SQLFORM.widgets.options.widget(field,'no_selection').xml()
         script= """
              function (value, options) {
                    var el = document.createElement('div');
                    el.innerHTML='%s'.replace('>'+value+'<',' selected="selected">'+value+'<');
                    el.children[0].style.width="100%%";
                    return el;
              }""" % widget;
         return script;
     elif field.type=='boolean':
         return "get_bool_widget"
     else:        
         if field.type=='time':
             calendar="el.children[0].onfocus=function(){time_setup(this.attributes['id'].value);};"
         elif field.type=='date':
             calendar="el.children[0].onfocus=function(){calendar_setup_date(this.attributes['id'].value);};"
         elif field.type=='datetime':
             calendar="el.children[0].onfocus=function(){calendar_setup_datetime(this.attributes['id'].value);};"
         elif field.type=='double':
             calendar="el.children[0].onfocus=function(){double_setup(this);};"
         elif field.type=='integer':
             calendar="el.children[0].onfocus=function(){integer_setup(this);};"
         else:
             calendar=""
         if field.widget:
             widget=field.widget(field,'a_value').xml().replace('<','\<').replace('>','\>').replace("'","\\'")
         else:
             widget=SQLFORM.widgets[field.type].widget(field,'a_value').xml()
         
         str="""
            function (value, options) {var el = document.createElement('div');  el.innerHTML='%s'.replace('a_value',value);  
            %s
            el.children[0].style.width="100%%";
            return el;
            }""" 
         return str% (widget,calendar);
 def has_lookups(self,field):
     from gluon.sqlhtml import OptionsWidget
     return OptionsWidget.has_options(field)