function _exp_checkout_do_payment()
 {
     global $event_details, $cart_totals;
     $event_id = $event_details['ID'];
     if (is_null($event_id)) {
         //return false;
     }
     $regis_id = $this->erm->get_regis_id();
     $post_ID = $this->erm->get_regis_post_id();
     $this->ecm->setup_event_details($event_id);
     $line_item_surcharge = false;
     $line_item_surcharge = apply_filters('egm__pp_exp__line_item_surcharge', $line_item_surcharge);
     $_totals = $this->erm->calculate_cart_totals();
     $amount = $cart_totals['money_totals']['grand_total'];
     $amount = epl_get_balance_due();
     $tax = epl_get_element_m('surcharge', 'money_totals', $cart_totals, 0);
     $subtotal = epl_get_element_m('subtotal', 'money_totals', $cart_totals, 0);
     $num_days_in_cart = array();
     $price_multiplier = array();
     $price_multiplier_label = array();
     $discount_amount = number_format(epl_get_element('discount_amount', $cart_totals['money_totals'], 0), 2, ".", "");
     //$subtotal = $discount_amount > 0 ? number_format( $subtotal - $discount_amount, 2 ) : $subtotal;
     $this->epl->load_file('libraries/gateways/paypal/paypal.php');
     $paypal = new EPL_Paypal();
     $gateway_info = $this->erm->get_gateway_info();
     $paypal->_credentials = array('USER' => $gateway_info['_epl_pp_exp_user'], 'PWD' => $gateway_info['_epl_pp_exp_pwd'], 'SIGNATURE' => $gateway_info['_epl_pp_exp_sig']);
     $requestParams = array('TOKEN' => $_GET['token'], 'PAYMENTACTION' => 'Sale', 'PAYERID' => $_GET['PayerID']);
     $orderParams = array('PAYMENTREQUEST_0_AMT' => $amount, 'PAYMENTREQUEST_0_ITEMAMT' => $amount - $tax, 'PAYMENTREQUEST_0_CURRENCYCODE' => epl_nz(epl_get_general_setting('epl_currency_code'), 'USD'), 'PAYMENTREQUEST_0_TAXAMT' => $line_item_surcharge === false ? $tax : 0);
     $counter = 0;
     $tickets = $_SESSION['__epl'][$regis_id]['_dates']['_att_quantity'];
     $dates = isset($_SESSION['__epl'][$regis_id]['_dates']['_epl_start_date']) ? $_SESSION['__epl'][$regis_id]['_dates']['_epl_start_date'] : array();
     $events = $_SESSION['__epl'][$regis_id]['_events'];
     $parallel_pay = epl_get_regis_setting('_epl_enable_PP_parallel_pay') == 10 && !epl_is_empty_array(epl_get_element('_epl_price_parallel_pay_email', $event_details, array()));
     $pp_email = epl_get_element('_epl_pp_exp_email', $gateway_info);
     if ($parallel_pay) {
         $orderParams = array();
         foreach ($tickets as $event_id => $ind_tickets) {
             $this->ecm->setup_event_details($event_id);
             foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                 $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
                 $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
                 if (epl_is_eligible_for_member_price($ticket_id)) {
                     $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
                 }
                 $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                 if ($qty > 0) {
                     $orderParams['PAYMENTREQUEST_' . $counter . '_AMT'] = $ticket_price;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_SELLERPAYPALACCOUNTID'] = epl_get_element_m($ticket_id, '_epl_price_parallel_pay_email', $event_details, $pp_email);
                     $orderParams['PAYMENTREQUEST_' . $counter . '_SHIPPINGAMT'] = 0;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_CURRENCYCODE'] = epl_nz(epl_get_general_setting('epl_currency_code'), 'USD');
                     $orderParams['PAYMENTREQUEST_' . $counter . '_ITEMAMT'] = $ticket_price;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_TAXAMT'] = 0;
                     $orderParams['PAYMENTREQUEST_' . $counter . '_DESC'] = substr($ticket_name, 0, 126);
                     $orderParams['PAYMENTREQUEST_' . $counter . '_PAYMENTREQUESTID'] = $post_ID . '-' . $counter;
                     $counter++;
                 }
             }
         }
     }
     $counter = 0;
     $item = array();
     foreach ($tickets as $event_id => $ind_tickets) {
         $this->ecm->setup_event_details($event_id);
         $num_days_in_cart[$event_id] = count(epl_get_element($event_id, $dates, array()));
         $price_multiplier[$event_id] = $event_details['_epl_price_per'] == 10 && !epl_is_date_level_price() ? $num_days_in_cart[$event_id] : 1;
         $price_multiplier_label[$event_id] = $price_multiplier[$event_id] > 1 ? ' - ' . $num_days_in_cart[$event_id] . ' ' . epl__('days') : '';
         foreach ($ind_tickets as $ticket_id => $ticket_qty) {
             $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
             $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
             if (epl_is_eligible_for_member_price($ticket_id)) {
                 $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
             }
             $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
             if ($qty > 0) {
                 $item['L_PAYMENTREQUEST_0_NAME' . $counter] = substr($event_details['post_title'], 0, 126);
                 $item['L_PAYMENTREQUEST_0_DESC' . $counter] = $ticket_name . $price_multiplier_label[$event_id];
                 //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                 $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $ticket_price;
                 $item['L_PAYMENTREQUEST_0_QTY' . $counter] = $qty * $price_multiplier[$event_id];
                 $counter++;
             }
         }
     }
     if ($parallel_pay) {
         $item = array();
         $counter = 0;
         $ticket_counter = 0;
         //this will be incremented if we do line item per ticket qty
         foreach ($tickets as $event_id => $ind_tickets) {
             $this->ecm->setup_event_details($event_id);
             foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                 $ticket_name = epl_get_element($ticket_id, $event_details['_epl_price_name']);
                 $ticket_price = epl_get_element($ticket_id, $event_details['_epl_price']);
                 if (epl_is_eligible_for_member_price($ticket_id)) {
                     $ticket_price = epl_get_element_m($ticket_id, '_epl_member_price', $event_details, $ticket_price);
                 }
                 $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                 if ($qty > 0) {
                     $item['L_PAYMENTREQUEST_' . $counter . '_NAME' . $ticket_counter] = substr($event_details['post_title'], 0, 126);
                     $item['L_PAYMENTREQUEST_' . $counter . '_DESC' . $ticket_counter] = $ticket_name . $price_multiplier_label[$event_id];
                     //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                     $item['L_PAYMENTREQUEST_' . $counter . '_AMT' . $ticket_counter] = $ticket_price;
                     $item['L_PAYMENTREQUEST_' . $counter . '_QTY' . $ticket_counter] = $qty * $price_multiplier[$event_id];
                     $counter++;
                 }
             }
         }
     }
     if (!$parallel_pay) {
         if ($tax > 0 && $line_item_surcharge !== false) {
             //$discount_description = epl_get_element( 'discount_description', $cart_totals['money_totals'], null );
             foreach ($_SESSION['__epl'][$regis_id]['_events'] as $event_id => $event_totals) {
                 $sc = epl_get_element_m('surcharge', 'money_totals', $event_totals, 0);
                 if ($sc == 0) {
                     continue;
                 }
                 $this->ecm->setup_event_details($event_id);
                 $surcharge_label = epl_get_element('_epl_surcharge_label', $event_details, epl__('Surcharge'));
                 $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $surcharge_label;
                 //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
                 //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                 $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $sc;
                 $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
                 $requestParams['PAYMENTREQUEST_0_ITEMAMT'] += $sc;
                 $counter++;
             }
         }
         if ($discount_amount > 0) {
             $discount_description = epl_get_element('discount_description', $cart_totals['money_totals'], null);
             $discount_description = substr($discount_description, 0, 126);
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $discount_amount;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         $alt_total_due = epl_get_element_m('pay_deposit', 'money_totals', $cart_totals) == 1;
         if ($alt_total_due > 0) {
             $counter++;
             $balance_due_desc = epl__('Deposit Offset.  Due at a later date.');
             $balance_due_desc = substr($balance_due_desc, 0, 126);
             $balance_offset = get_the_regis_total_amount(false) - $amount;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $balance_due_desc;
             //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
             //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $balance_offset;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         $payment_data = epl_get_regis_payments();
         if (!empty($payment_data)) {
             if (count($payment_data) > 0) {
                 foreach ($payment_data as $time => $p) {
                     $counter++;
                     $payment_made_description = epl__('Offset for payment made on: ') . epl_formatted_date($p['_epl_payment_date']);
                     $payment_made_description = substr($payment_made_description, 0, 126);
                     $item['L_PAYMENTREQUEST_0_NAME' . $counter] = $payment_made_description;
                     //$item['L_PAYMENTREQUEST_0_DESC' . $counter] = $discount_description;
                     //$item['L_PAYMENTREQUEST_0_NUMBER' . $counter] = $ticket_id;
                     $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * $p['_epl_payment_amount'];
                     $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
                 }
             }
         }
         if (($donation_amount = epl_get_element_m('donation_amount', 'money_totals', $cart_totals, 0)) > 0) {
             $counter++;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = epl__('Donation');
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = $donation_amount;
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
         if (($original_total = epl_get_element_m('original_total', 'money_totals', $cart_totals, 0)) > 0) {
             $counter++;
             $item['L_PAYMENTREQUEST_0_NAME' . $counter] = epl__('Offset');
             $item['L_PAYMENTREQUEST_0_AMT' . $counter] = -1 * ($original_total - $orderParams['PAYMENTREQUEST_0_AMT']);
             $item['L_PAYMENTREQUEST_0_QTY' . $counter] = 1;
         }
     }
     $request = $requestParams + $item + $orderParams;
     $request = apply_filters('epl_express_checkout_do_payment_request_params', $request);
     $response = $paypal->request('DoExpressCheckoutPayment', $request);
     if (is_array($response) && $response['ACK'] == 'Success') {
         $payment_amount = $response['PAYMENTINFO_0_AMT'];
         $counter = 0;
         if ($parallel_pay) {
             $payment_amount = 0;
             foreach ($tickets as $event_id => $ind_tickets) {
                 $this->ecm->setup_event_details($event_id);
                 foreach ($ind_tickets as $ticket_id => $ticket_qty) {
                     $qty = is_array($ticket_qty) ? array_sum($ticket_qty) : $ticket_qty;
                     if ($qty > 0) {
                         $payment_amount += epl_get_element('PAYMENTINFO_' . $counter . '_AMT', $response, 0);
                         $counter++;
                     }
                 }
             }
         }
         $data['post_ID'] = $post_ID;
         $data['_epl_grand_total'] = $cart_totals['money_totals']['grand_total'];
         $data['_epl_payment_amount'] = $payment_amount;
         $data['_epl_payment_date'] = current_time('mysql');
         $data['_epl_payment_method'] = $this->erm->get_payment_profile_id();
         $data['_epl_transaction_id'] = $response['PAYMENTINFO_0_TRANSACTIONID'];
         $data['_epl_prediscount_total'] = epl_get_element('pre_discount_total', $cart_totals['money_totals'], 0);
         $data['_epl_discount_amount'] = epl_get_element('discount_amount', $cart_totals['money_totals'], 0);
         $data = apply_filters('epl_pp_exp_response_data', $data, $response);
         $this->erm->update_payment_data($data);
         return true;
         //echo "DONE";
     } else {
         $error = 'ERROR: ' . $response['L_SHORTMESSAGE0'] . '. ' . $response['L_LONGMESSAGE0'];
         echo EPL_Util::get_instance()->epl_invoke_error(0, $error, false);
     }
     return false;
 }
function epl_get_balance_due()
{
    global $cart_totals;
    $regis_total = get_the_regis_total_amount(false);
    $payment_data = epl_get_regis_payments();
    $alt_total_due = epl_get_element_m('pay_deposit', 'money_totals', $cart_totals) == 1 ? epl_get_element_m('min_deposit', 'money_totals', $cart_totals, $regis_total) : $regis_total;
    if (!empty($payment_data)) {
        $total_paid = 0;
        foreach ($payment_data as $time => $p) {
            if ($p['_epl_payment_amount'] == 0) {
                continue;
            }
            $regis_total -= epl_get_formatted_curr($p['_epl_payment_amount'], 4);
        }
    } else {
        $regis_total = $alt_total_due;
    }
    return $regis_total == 0 ? abs($regis_total) : $regis_total;
}
 function payment_info_box($post_ID = null)
 {
     global $regis_details;
     if (is_null($post_ID)) {
         $post_ID = (int) $_POST['post_ID'];
     }
     if ($GLOBALS['epl_ajax'] || !isset($this->regis_meta)) {
         $regis_details = $this->regis_meta = $this->ecm->setup_regis_details($post_ID, true);
     }
     $this->temp_set_payment_method_id();
     $data['post_ID'] = $post_ID;
     //$data['event_id'] = $this->event_id;
     $data['regis_status_id'] = $this->regis_meta['_epl_regis_status'];
     $data['regis_status'] = isset($this->regis_meta['_epl_regis_status']) ? $this->ind_fields['_epl_regis_status']['options'][$this->regis_meta['_epl_regis_status']] : '';
     $data['payment_method'] = isset($this->regis_meta['_epl_payment_method']) && $this->regis_meta['_epl_payment_method'] != '' ? $this->ind_fields['_epl_payment_method']['options'][$this->regis_meta['_epl_payment_method']] : '';
     $data += $this->get_waitlist_info();
     $grand_total = get_the_regis_total_amount(false);
     //epl_get_formatted_curr( epl_nz( $this->regis_meta['_epl_grand_total'], 0 ) );
     $amount_paid = epl_get_formatted_curr(epl_nz($this->regis_meta['_epl_payment_amount'], 0));
     $data['grand_total'] = epl_get_formatted_curr($grand_total, null, true);
     $href = add_query_arg(array('epl_action' => 'epl_payment_snapshot', 'post_ID' => $post_ID), epl_get_url());
     $data['snapshot_link'] = '<a data-post_id = "' . $post_ID . '" class="epl_payment_snapshot" href="#"><img src="' . EPL_FULL_URL . 'images/application_view_list.png" /> </a>';
     //$data['snapshot_link'] = '<img id = "' . $post_ID . '" class="epl_payment_snapshot" src="' . EPL_FULL_URL . 'images/application_view_list.png" />';
     $data['status_class'] = 'epl_status_pending';
     if ($this->regis_meta['_epl_regis_status'] == 1) {
         $data['status_class'] = 'epl_status_incomplete';
     } elseif ($this->regis_meta['_epl_regis_status'] == 5) {
         $data['status_class'] = 'epl_status_paid';
     } elseif ($this->regis_meta['_epl_regis_status'] == 10) {
         $data['status_class'] = 'epl_status_cancelled';
     } elseif ($this->regis_meta['_epl_regis_status'] == 15) {
         $data['status_class'] = 'epl_status_refunded';
     } elseif ($this->regis_meta['_epl_regis_status'] == 20) {
         $data['status_class'] = 'epl_status_waitlist';
     }
     return $this->epl->load_view('admin/registration/regis-list-payment-info', $data, true);
 }
                        <tbody>

                            <?php 
if ($payment_instructions != '' && !epl_is_zero_total() && !epl_is_free_event()) {
    echo $payment_instructions;
}
?>


                            <tr>
                                <td><?php 
epl_e('Total');
?>
</td>
                                <td><?php 
echo get_the_regis_total_amount();
?>
</td>
                            </tr>
                            <tr>
                                <td><?php 
epl_e('Amount Paid');
?>
</td>
                                <td><?php 
echo get_the_regis_payment_amount();
?>
</td>
                            </tr>
                            <tr class="balance">
                                <td><?php 
        echo $k;
        ?>
][_epl_payment_note]"><?php 
        echo $p['_epl_payment_note'];
        ?>
</textarea>
                        </td>
                        <td style="vertical-align: middle;">
                            <div class="epl_action epl_delete force_delete"></div>
                        </td>
                    </tr>

                    <?php 
    }
}
$grand_total = get_the_regis_total_amount(false);
$balance = $grand_total - $total_paid;
?>
        </tbody>
        <tfoot class="money_totals">
            <tr>
                <td colspan="2" style="text-align: right;"><?php 
epl_e('Total Payments');
?>
</td>
                <td><?php 
echo epl_get_formatted_curr($total_paid, null, true);
?>
</td>
                <td colspan="3"></td>
            </tr>