<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->

<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">

    <form name="FindGeo" id="FindGeo" target="${currentUrl}" extends="LookupGeo" extends-resource="component://common/widget/LookupForms.xml"/>        
    
    <form name="ListGeos" extends-resource="component://common/widget/LookupForms.xml" extends="listLookupGeo" paginate-target="${currentUrl}"
        odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar" separate-columns="true" >
        <field name="geoId"  widget-style="buttontext" title="${uiLabelMap.CommonGeoId}">
            <hyperlink also-hidden="false" target-type="plain" description="${geoId}"  target="LinkGeos">
                <parameter param-name="geoId"/>
            </hyperlink>
        </field>
        <field name="wellKnownText" title="${uiLabelMap.CommonGeoWellKnownText}"><display/></field>
        <field name="deleteLink" title="${uiLabelMap.CommonEmptyHeader}" widget-style="buttontext">
            <hyperlink target="deleteGeo" description="${uiLabelMap.CommonRemove}">
                <parameter param-name="geoId"/>
                <parameter param-name="noConditionFind" value="Y"/>
            </hyperlink>
        </field>
    </form>
    
    <form name="EditGeo" type="single" target="updateGeo" title="" default-map-name="geo"
        header-row-style="header-row" default-table-style="basic-table">
        <alt-target use-when="geo==null" target="createGeo"/>
        <field name="geoId" title="${uiLabelMap.CommonGeoId}"><lookup target-form-name="LookupGeo"/></field>
        <field name="geoTypeId" title="${uiLabelMap.CommonGeoTypeId}">
            <drop-down allow-empty="true">
                <entity-options key-field-name="geoTypeId" entity-name="GeoType" description="${description}">
                    <entity-order-by field-name="description"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="geoName" title="${uiLabelMap.CommonGeoName}"><text/></field>
        <field name="geoCode" title="${uiLabelMap.CommonGeoCode}"><text/></field>
        <field name="geoSecCode" title="${uiLabelMap.CommonGeoSecCode}"><text/></field>
        <field name="abbreviation" title="${uiLabelMap.CommonGeoAbbr}"><text/></field>
        <field name="wellKnownText" title="${uiLabelMap.CommonGeoWellKnownText}"><textarea/></field>

        <field name="submitButton" title="${uiLabelMap.CommonSubmit}" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>
    <form name="ListLookupGeo" extends="ListGeos">
        <field name="geoId" title="${uiLabelMap.CommonGeoId}" widget-style="buttontext">
            <hyperlink also-hidden="false" target-type="plain" description="${geoId}" target="javascript:set_value('${geoId}')"/>
        </field>        
        <field name="deleteLink"><ignored/></field>        
    </form>
    
    <form name="LinkGeos" type="single" target="linkGeos" title="" focus-field-name="geoId" 
        header-row-style="header-row" default-table-style="basic-table">
        <field name="geoIds" title="${uiLabelMap.CommonGeos}">
            <drop-down allow-multiple="true">
                <entity-options entity-name="Geo" key-field-name="geoId" description="${geoName} (${geoId})">
<!--                    <entity-constraint name="geoTypeId" operator="in" value="STATE,PROVINCE,REGIONS"/><!-\- useful to quickly test -\->-->
                    <entity-order-by field-name="geoId"/>
                </entity-options>
            </drop-down>
        </field>        
        <field name="dummy" title="${uiLabelMap.CommonEmptyHeader}"><display/></field>
        <field name="geoAssocTypeId" title="${uiLabelMap.CommonGeoAssocTypeId}"
            event="onChange" 
            action="typeValue = jQuery('#${asm_typeField}').val(); selectMultipleRelatedValues('${asm_requestName}', '${asm_paramKey}', '${asm_relatedField}', '${asm_multipleSelect}', '${asm_type}', typeValue, '${asm_responseName}');">
            <drop-down>
                <entity-options key-field-name="geoAssocTypeId" entity-name="GeoAssocType" description="${description}">
                    <entity-order-by field-name="description"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="geoId" title="${uiLabelMap.CommonGeo}">
            <drop-down current="selected">
                <entity-options entity-name="Geo" key-field-name="geoId" description="${geoName} (${geoId})">
                    <entity-order-by field-name="geoId"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="submitButton" title="${uiLabelMap.CommonSubmit}" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>
        
</forms>
