/**
 * Get taxation rate
 *
 * @since 1.3.3
 * @param bool $country
 * @param bool $state
 * @return mixed|void
 */
function edd_get_tax_rate($country = false, $state = false)
{
    $rate = (double) edd_get_option('tax_rate', 0);
    $user_address = edd_get_customer_address();
    if (empty($country)) {
        if (!empty($_POST['billing_country'])) {
            $country = $_POST['billing_country'];
        } elseif (is_user_logged_in() && !empty($user_address)) {
            $country = $user_address['country'];
        }
        $country = !empty($country) ? $country : edd_get_shop_country();
    }
    if (empty($state)) {
        if (!empty($_POST['state'])) {
            $state = $_POST['state'];
        } elseif (!empty($_POST['card_state'])) {
            $state = $_POST['card_state'];
        } elseif (is_user_logged_in() && !empty($user_address)) {
            $state = $user_address['state'];
        }
        $state = !empty($state) ? $state : edd_get_shop_state();
    }
    if (!empty($country)) {
        $tax_rates = edd_get_tax_rates();
        if (!empty($tax_rates)) {
            // Locate the tax rate for this country / state, if it exists
            foreach ($tax_rates as $key => $tax_rate) {
                if ($country != $tax_rate['country']) {
                    continue;
                }
                if (!empty($tax_rate['global'])) {
                    if (!empty($tax_rate['rate'])) {
                        $rate = number_format($tax_rate['rate'], 4);
                    }
                } else {
                    if (empty($tax_rate['state']) || strtolower($state) != strtolower($tax_rate['state'])) {
                        continue;
                    }
                    $state_rate = $tax_rate['rate'];
                    if (0 !== $state_rate || !empty($state_rate)) {
                        $rate = number_format($state_rate, 4);
                    }
                }
            }
        }
    }
    if ($rate > 1) {
        // Convert to a number we can use
        $rate = $rate / 100;
    }
    return apply_filters('edd_tax_rate', $rate, $country, $state);
}
/**
 * Get Shop States
 *
 * @since 1.6
 *
 * @param null $country
 * @return mixed|void  A list of states for the shop's base country
 */
function edd_get_shop_states($country = null)
{
    global $edd_options;
    if (empty($country)) {
        $country = edd_get_shop_country();
    }
    switch ($country) {
        case 'US':
            $states = edd_get_states_list();
            break;
        case 'CA':
            $states = edd_get_provinces_list();
            break;
        case 'AU':
            $states = edd_get_australian_states_list();
            break;
        case 'BR':
            $states = edd_get_brazil_states_list();
            break;
        case 'CN':
            $states = edd_get_chinese_states_list();
            break;
        case 'HK':
            $states = edd_get_hong_kong_states_list();
            break;
        case 'HU':
            $states = edd_get_hungary_states_list();
            break;
        case 'ID':
            $states = edd_get_indonesian_states_list();
            break;
        case 'IN':
            $states = edd_get_indian_states_list();
            break;
        case 'MY':
            $states = edd_get_malaysian_states_list();
            break;
        case 'NZ':
            $states = edd_get_new_zealand_states_list();
            break;
        case 'TH':
            $states = edd_get_thailand_states_list();
            break;
        case 'ZA':
            $states = edd_get_south_african_states_list();
            break;
        default:
            $states = array();
            break;
    }
    return apply_filters('edd_shop_states', $states);
}
function edd_wallet_process_incentive()
{
    if ($_REQUEST['gateway'] == 'wallet') {
        EDD()->session->set('wallet_has_incentives', '1');
    } else {
        EDD()->session->set('wallet_has_incentives', null);
    }
    // Refresh the cart
    if (empty($_POST['billing_country'])) {
        $_POST['billing_country'] = edd_get_shop_country();
    }
    ob_start();
    edd_checkout_cart();
    $cart = ob_get_clean();
    $response = array('html' => $cart, 'tax_raw' => edd_get_cart_tax(), 'tax' => html_entity_decode(edd_cart_tax(false), ENT_COMPAT, 'UTF-8'), 'tax_rate_raw' => edd_get_tax_rate(), 'tax_rate' => html_entity_decode(edd_get_formatted_tax_rate(), ENT_COMPAT, 'UTF-8'), 'total' => html_entity_decode(edd_cart_total(false), ENT_COMPAT, 'UTF-8'), 'total_raw' => edd_get_cart_total());
    echo json_encode($response);
    edd_die();
}
/**
 * Outputs the default credit card address fields
 *
 * @since 1.0
 * @return void
 */
function edd_default_cc_address_fields()
{
    $logged_in = is_user_logged_in();
    $customer = EDD()->session->get('customer');
    $customer = wp_parse_args($customer, array('address' => array('line1' => '', 'line2' => '', 'city' => '', 'zip' => '', 'state' => '', 'country' => '')));
    $customer['address'] = array_map('sanitize_text_field', $customer['address']);
    if ($logged_in) {
        $user_address = get_user_meta(get_current_user_id(), '_edd_user_address', true);
        foreach ($customer['address'] as $key => $field) {
            if (empty($field) && !empty($user_address[$key])) {
                $customer['address'][$key] = $user_address[$key];
            } else {
                $customer['address'][$key] = '';
            }
        }
    }
    ob_start();
    ?>
	<fieldset id="edd_cc_address" class="cc-address">
		<span><legend><?php 
    _e('Billing Details', 'edd');
    ?>
</legend></span>
		<?php 
    do_action('edd_cc_billing_top');
    ?>
		<p id="edd-card-address-wrap">
			<label for="card_address" class="edd-label">
				<?php 
    _e('Billing Address', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('card_address')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The primary billing address for your credit card.', 'edd');
    ?>
</span>
			<input type="text" id="card_address" name="card_address" class="card-address edd-input<?php 
    if (edd_field_is_required('card_address')) {
        echo ' required';
    }
    ?>
" placeholder="<?php 
    _e('Address line 1', 'edd');
    ?>
" value="<?php 
    echo $customer['address']['line1'];
    ?>
"/>
		</p>
		<p id="edd-card-address-2-wrap">
			<label for="card_address_2" class="edd-label">
				<?php 
    _e('Billing Address Line 2 (optional)', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('card_address_2')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The suite, apt no, PO box, etc, associated with your billing address.', 'edd');
    ?>
</span>
			<input type="text" id="card_address_2" name="card_address_2" class="card-address-2 edd-input<?php 
    if (edd_field_is_required('card_address_2')) {
        echo ' required';
    }
    ?>
" placeholder="<?php 
    _e('Address line 2', 'edd');
    ?>
" value="<?php 
    echo $customer['address']['line2'];
    ?>
"/>
		</p>
		<p id="edd-card-city-wrap">
			<label for="card_city" class="edd-label">
				<?php 
    _e('Billing City', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('card_city')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The city for your billing address.', 'edd');
    ?>
</span>
			<input type="text" id="card_city" name="card_city" class="card-city edd-input<?php 
    if (edd_field_is_required('card_city')) {
        echo ' required';
    }
    ?>
" placeholder="<?php 
    _e('City', 'edd');
    ?>
" value="<?php 
    echo $customer['address']['city'];
    ?>
"/>
		</p>
		<p id="edd-card-zip-wrap">
			<label for="card_zip" class="edd-label">
				<?php 
    _e('Billing Zip / Postal Code', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('card_zip')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The zip or postal code for your billing address.', 'edd');
    ?>
</span>
			<input type="text" size="4" name="card_zip" class="card-zip edd-input<?php 
    if (edd_field_is_required('card_zip')) {
        echo ' required';
    }
    ?>
" placeholder="<?php 
    _e('Zip / Postal code', 'edd');
    ?>
" value="<?php 
    echo $customer['address']['zip'];
    ?>
"/>
		</p>
		<p id="edd-card-country-wrap">
			<label for="billing_country" class="edd-label">
				<?php 
    _e('Billing Country', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('billing_country')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The country for your billing address.', 'edd');
    ?>
</span>
			<select name="billing_country" id="billing_country" class="billing_country edd-select<?php 
    if (edd_field_is_required('billing_country')) {
        echo ' required';
    }
    ?>
">
				<?php 
    $selected_country = edd_get_shop_country();
    if (!empty($customer['address']['country']) && '*' !== $customer['address']['country']) {
        $selected_country = $customer['address']['country'];
    }
    $countries = edd_get_country_list();
    foreach ($countries as $country_code => $country) {
        echo '<option value="' . esc_attr($country_code) . '"' . selected($country_code, $selected_country, false) . '>' . $country . '</option>';
    }
    ?>
			</select>
		</p>
		<p id="edd-card-state-wrap">
			<label for="card_state" class="edd-label">
				<?php 
    _e('Billing State / Province', 'edd');
    ?>
				<?php 
    if (edd_field_is_required('card_state')) {
        ?>
					<span class="edd-required-indicator">*</span>
				<?php 
    }
    ?>
			</label>
			<span class="edd-description"><?php 
    _e('The state or province for your billing address.', 'edd');
    ?>
</span>
            <?php 
    $selected_state = edd_get_shop_state();
    $states = edd_get_shop_states($selected_country);
    if (!empty($customer['address']['state'])) {
        $selected_state = $customer['address']['state'];
    }
    if (!empty($states)) {
        ?>
            <select name="card_state" id="card_state" class="card_state edd-select<?php 
        if (edd_field_is_required('card_state')) {
            echo ' required';
        }
        ?>
">
                <?php 
        foreach ($states as $state_code => $state) {
            echo '<option value="' . $state_code . '"' . selected($state_code, $selected_state, false) . '>' . $state . '</option>';
        }
        ?>
            </select>
        	<?php 
    } else {
        ?>
			<input type="text" size="6" name="card_state" id="card_state" class="card_state edd-input" placeholder="<?php 
        _e('State / Province', 'edd');
        ?>
"/>
			<?php 
    }
    ?>
		</p>
		<?php 
    do_action('edd_cc_billing_bottom');
    ?>
	</fieldset>
	<?php 
    echo ob_get_clean();
}
/**
 * Retrieve a states drop down
 *
 * @since 1.6
 * @return void
 */
function edd_ajax_get_states_field()
{
    if (empty($_POST['country'])) {
        $_POST['country'] = edd_get_shop_country();
    }
    $states = edd_get_shop_states($_POST['country']);
    if (!empty($states)) {
        $args = array('name' => $_POST['field_name'], 'id' => $_POST['field_name'], 'class' => $_POST['field_name'] . '  edd-select', 'options' => $states, 'show_option_all' => false, 'show_option_none' => false);
        $response = EDD()->html->select($args);
    } else {
        $response = 'nostates';
    }
    echo $response;
    edd_die();
}
 /**
  * Load javascript files and localized variables
  *
  * @access public
  * @since  2.4
  * @return void
  */
 public function load_scripts()
 {
     if (!edd_is_checkout()) {
         return;
     }
     $test_mode = edd_is_test_mode();
     $seller_id = edd_get_option('amazon_seller_id', '');
     $client_id = edd_get_option('amazon_client_id', '');
     $default_amazon_scope = array('profile', 'postal_code', 'payments:widget');
     if (edd_use_taxes()) {
         $default_amazon_scope[] = 'payments:shipping_address';
     }
     $default_amazon_button_settings = array('type' => 'PwA', 'color' => 'Gold', 'size' => 'medium', 'scope' => implode(' ', $default_amazon_scope), 'popup' => true);
     $amazon_button_settings = apply_filters('edd_amazon_button_settings', $default_amazon_button_settings);
     $base_url = '';
     $sandbox = $test_mode ? 'sandbox/' : '';
     switch (edd_get_shop_country()) {
         case 'GB':
             $base_url = 'https://static-eu.payments-amazon.com/OffAmazonPayments/uk/' . $sandbox . 'lpa/';
             break;
         case 'DE':
             $base_url = 'https://static-eu.payments-amazon.com/OffAmazonPayments/de/' . $sandbox . 'lpa/';
             break;
         default:
             $base_url = 'https://static-na.payments-amazon.com/OffAmazonPayments/us/' . $sandbox;
             break;
     }
     if (!empty($base_url)) {
         $url = $base_url . 'js/Widgets.js?sellerId=' . $seller_id;
         wp_enqueue_script('edd-amazon-widgets', $url, array('jquery'), null, false);
         wp_localize_script('edd-amazon-widgets', 'edd_amazon', apply_filters('edd_amazon_checkout_vars', array('sellerId' => $seller_id, 'clientId' => $client_id, 'referenceID' => $this->reference_id, 'buttonType' => $amazon_button_settings['type'], 'buttonColor' => $amazon_button_settings['color'], 'buttonSize' => $amazon_button_settings['size'], 'scope' => $amazon_button_settings['scope'], 'popup' => $amazon_button_settings['popup'], 'checkoutUri' => $this->get_amazon_checkout_uri(), 'redirectUri' => $this->get_amazon_authenticate_redirect(), 'signinUri' => $this->get_amazon_signin_redirect())));
     }
 }
 /**
  * Retrieve the URL for connecting Amazon account to EDD
  *
  * @access public
  * @since  2.4
  * @return string
  */
 private function get_registration_url()
 {
     switch (edd_get_shop_country()) {
         case 'GB':
             $base_url = 'https://payments.amazon.co.uk/preregistration/lpa';
             break;
         case 'DE':
             $base_url = 'https://payments.amazon.de/preregistration/lpa';
             break;
         default:
             $base_url = 'https://sellercentral.amazon.com/hz/me/sp/signup';
             break;
     }
     $query_args = array('solutionProviderId' => 'A3JST9YM1SX7LB', 'marketplaceId' => 'AGWSWK15IEJJ7', 'solutionProviderToken' => 'AAAAAQAAAAEAAAAQnngerc8vYweGDt8byl2smgAAAHBgMm923quugHaGmPi%2B3sqo93TSL1aKwU85v71Zh7EXVK8De%2FuahjCFHft3cxN3rwAF4Iwg03sDW0jnkLULmFk7M1Fr69IV2XF477m0kU1EM0Z%2FbQssHdLai%2Fzoce1jZVmw8So3F2jhiDyfTHUK2AYP', 'solutionProviderOptions' => 'lwa%3Bmws-acc%3B');
     return add_query_arg($query_args, $base_url);
 }
/**
 * Get Shop States
 *
 * @since 1.6
 *
 * @param null $country
 * @return mixed|void  A list of states for the shop's base country
 */
function edd_get_shop_states($country = null)
{
    if (empty($country)) {
        $country = edd_get_shop_country();
    }
    switch ($country) {
        case 'US':
            $states = edd_get_states_list();
            break;
        case 'CA':
            $states = edd_get_provinces_list();
            break;
        case 'AU':
            $states = edd_get_australian_states_list();
            break;
        case 'BD':
            $states = edd_get_bangladeshi_states_list();
            break;
        case 'BG':
            $states = edd_get_bulgarian_states_list();
            break;
        case 'BR':
            $states = edd_get_brazil_states_list();
            break;
        case 'CN':
            $states = edd_get_chinese_states_list();
            break;
        case 'HK':
            $states = edd_get_hong_kong_states_list();
            break;
        case 'HU':
            $states = edd_get_hungary_states_list();
            break;
        case 'ID':
            $states = edd_get_indonesian_states_list();
            break;
        case 'IN':
            $states = edd_get_indian_states_list();
            break;
        case 'IR':
            $states = edd_get_iranian_states_list();
            break;
        case 'IT':
            $states = edd_get_italian_states_list();
            break;
        case 'JP':
            $states = edd_get_japanese_states_list();
            break;
        case 'MX':
            $states = edd_get_mexican_states_list();
            break;
        case 'MY':
            $states = edd_get_malaysian_states_list();
            break;
        case 'NP':
            $states = edd_get_nepalese_states_list();
            break;
        case 'NZ':
            $states = edd_get_new_zealand_states_list();
            break;
        case 'PE':
            $states = edd_get_peruvian_states_list();
            break;
        case 'TH':
            $states = edd_get_thailand_states_list();
            break;
        case 'TR':
            $states = edd_get_turkey_states_list();
            break;
        case 'ZA':
            $states = edd_get_south_african_states_list();
            break;
        case 'ES':
            $states = edd_get_spain_states_list();
            break;
        default:
            $states = array();
            break;
    }
    return apply_filters('edd_shop_states', $states);
}