<#--
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.
-->

<#-- gift card fields -->
  <input type="hidden" name="addGiftCard" value="Y"/>
  <#assign giftCard = giftCard!>
  <#if paymentMethodTypeId! != "GIFT_CARD">
    <tr>
      <td colspan="3"><hr /></td>
    </tr>
  </#if>
  <tr>
    <td width="26%" align="right" valign="top"><div class="tableheadtext">${uiLabelMap.AccountingGiftCardInformation}</div></td>
    <td width="5">&nbsp;</td>
    <td width="74%">&nbsp;</td>
  </tr>
  <tr>
    <td width="26%" align="right" valign="middle"><div>${uiLabelMap.AccountingGiftCardNumber}</div></td>
    <td width="5">&nbsp;</td>
    <td width="74%">
      <input type="text" class="inputBox" size="20" maxlength="60" name="giftCardNumber" value="${giftCard.cardNumber!}"/>
    *</td>
  </tr>
  <tr>
    <td width="26%" align="right" valign="middle"><div>${uiLabelMap.AccountingPINNumber}</div></td>
    <td width="5">&nbsp;</td>
    <td width="74%">
      <input type="text" class="inputBox" size="10" maxlength="60" name="giftCardPin" value="${giftCard.pinNumber!}"/>
    *</td>
  </tr>
  <tr>
    <td width="26%" align="right" valign="middle"><div>${uiLabelMap.CommonDescription}</div></td>
    <td width="5">&nbsp;</td>
    <td width="74%">
      <input type="text" class="inputBox" size="30" maxlength="60" name="description" value="${giftCard.description!}"/>
    </td>
  </tr>
  <#if paymentMethodTypeId! != "GIFT_CARD">
    <tr>
      <td width="26%" align="right" valign="middle"><div>${uiLabelMap.AccountingAmountToUse}</div></td>
      <td width="5">&nbsp;</td>
      <td width="74%">
        <input type="text" class="inputBox" size="5" maxlength="10" name="giftCardAmount" value="${giftCard.pinNumber!}"/>
      *</td>
    </tr>
  </#if>
