<form>
{
let $search-keys-regex := {"author": "Person", "title": "Titel", "free": "Alle", "keywords": "Schlag", "isbn": "Nummer", "id": "Signatur"}
let $inputs := .//input
let $selects := .//select
let $basic-selects := $selects[starts-with(@name, "IKT")]
let $basic-inputs := $inputs[starts-with(@name, "TRM")]
let $options := $basic-selects//option

let $filter-names := {"language": "ADI_TAA", "country": "ADI_LND", "sort": "SRT"}
let $filter-selects := {|for $name in map:keys($filter-names)
                         let $ids := $filter-names($name)
                         let $select := $selects[@name = $ids][1]
                         where $select
                         return {$name: $select} |}
                         
let $media-type-inputs := $inputs[@name = "ADI_MAT"]
let $media-type-captions := $media-type-inputs/../following-sibling::td[1]
return (
  search-basic-selects := $basic-selects/@name,
  search-basic-inputs := $basic-inputs/@name,
  if (count($search-basic-selects) lt 3 or count($search-basic-selects) ne count($search-basic-inputs)) then
    vl:raise-internal("Zu wenig Suchfelder oder die Suchfelder wurden nicht erkannt.")
  else (),
  search-basic-options := map:merge( for $key in jn:keys($search-keys-regex) let $r :=  $search-keys-regex($key)
                                     return  {$key: head($options[matches(., $r)]/@value)}
                                   ),

  search-basic-input-year := $inputs[@name = "ADI_JVU"]/@name,

  search-filter-map := {| map:keys($filter-selects)  ! {.: $filter-selects(.)/@name} |},

  search-params := (
    for $key in ("title", "author", "free", "keywords", "isbn", "id")
     where $search-basic-options($key)
     return $key, 
    $search-basic-input-year[1]!"year",
    map:keys($filter-selects) ! {"name": ., "options": $filter-selects(.)//option},
    if (exists($media-type-inputs)) then 
      {"name": "mediaType", "options": ({"caption": "--alle--", "value": ""}, for $input at $i in $media-type-inputs return {"caption": $media-type-captions[$i], "value": $input/@value}) }  
    else ()
  ),
  
  
  search-form := form()  
)
 }

</form>