## Script (Python) "select_topics_window_handler"
##bind container=container
##bind context=context
##bind namespace=
##bind script=script
##bind subpath=traverse_subpath
##parameters=
##title=
##
inputs = []
request = context.REQUEST
topicmap = context.getTopicMap()
if not request.has_key('method'):
  request.set('method', 'dummy')

# Set 'searchstring'
display_results = 0
if not request.has_key('searchstring'):
    request.set('searchstring', '')
elif request.searchstring:
    display_results = 1
    
# Fill 'topictypes' with defaults if not given.
if not request.has_key('topictypes'):
    topictypes = []
    for topic in topicmap.getTopicBySubjectIdentifier('http://psi.emnekart.no/ztm/core/#topictype', wrap=True).getTypeFor(wrap=True):
        topictypes.append(topic.tm_serial)
    request.set('topictypes', topictypes)
elif same_type(request.topictypes, ''):
    request.set('topictypes', [request.topictypes])

# I believe this is used to avoid performing a possibly
# expensive search when we first enter the searhf form.
if not request.has_key('display_results'):
    tmpdict = {}
    tmpdict['type'] = 'hidden'
    tmpdict['name'] = 'display_results'
    tmpdict['value']= '1'
    inputs.append(tmpdict)
else:
    display_results=1

# Enumrate other keys used to specify a narrower search
for key in request.form.keys():
    tmpdict = {}
    if key in ['searchstring', 'selectedtopictypes']:
        continue
    elif key == 'topictypes':
        for item in topicmap.makeList(request.topictypes):
            tmpdict = {}
            tmpdict['type'] = 'hidden'
            tmpdict['name'] = 'topictypes:list'
            tmpdict['value']= str(item)
            inputs.append(tmpdict)
        continue
    else:
      tmpdict['type'] = 'hidden'
      tmpdict['name'] = key
      tmpdict['value']= request.form[key]
      inputs.append(tmpdict)

# Select topictypes to search for.
if request.has_key('selectedtopictypes'):
    selectedtopictypes = request.selectedtopictypes
else:
    # Default is all selected
    selectedtopictypes = request.topictypes
selectedtypes = []
for item in request.topictypes:
    tmpdict= {}
    tmpdict['type'] = 'checkbox'
    tmpdict['name'] = 'selectedtopictypes:list'
    if item in selectedtopictypes:
        tmpdict['checked']='checked'
    else:
        tmpdict['checked']=0
    tmpdict['value'] = item
    tmpdict['content'] = topicmap.getTopicBySerial(item, wrap=1).getBaseName()
    selectedtypes.append(tmpdict)
resultlist = []
if display_results:
    
    resultlist = topicmap.findTopics(topictypes=selectedtopictypes, searchstring=request.searchstring, brain=1)
# return a nicely packaged dictionary.
return {'inputs':inputs, 'multipletypes': len(request.topictypes)>1, 'topictypes':request.topictypes, 'selectedtypes':selectedtypes,'selectedtopictypes':selectedtopictypes, 'resultlist':resultlist, 'resultlength': len(resultlist), 'select_single':request.get('select_single', 0), 'display_results': display_results}
