<style>
    * {
        -webkit-box-sizing: border-box;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
    }
    #divCheckoutWrapper {
        min-height: 600px;
        background-repeat: no-repeat;
        background-image: url('images/checkout-loading-background.png');
    }
        #divCheckoutWrapper section {
            display: none;
        }
    #subpagecontent {
        background: #f4f4f4;
    }
    h2 {
        margin: 15px 0 15px 0;
    }
    .credit,
    .invoice,
    .gstTax {
        display: none;
    }
    .no-gutter {
        padding-left: 0;
        padding-right: 0;
    }
    .right-gutter {
        padding-left: 0;
        padding-right: 15px;
    }
    .left-gutter {
        padding-left: 15px;
        padding-right: 0;
    }
    section.row {
        margin: 20px 0;
        background: #fff;
        padding: 15px 15px 20px;
        box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
        -webkit-box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
        -moz-box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
    }
        section.row.clear {
            background: transparent;
            box-shadow: none;
            -webkit-box-shadow: none;
            -moz-box-shadow: none;
        }
    section {
    }
    h3 span {
        color: #ee3a43;
    }
    label {
        font-weight: 400 !important;
        width: auto;
    }
    input[type="text"],
    input[type="password"] {
        border-radius: 5px;
        padding: 0px 10px !important;
    }
    #divMultiAddressWrapper {
        padding: 0 20px;
        display: none;
    }
    #divOneTimeAddressWrapper {
        padding: 0 20px;
        display: none;
    }
    .checkoutOrder label,
    .dx-field-item-label-text {
        color: #ee3a43;
    }
    #shippingInfo label,
    #shippingInfo .dx-field-item-label-text {
        color: #000
    }
    .checkoutOrder .inputRow input,
    .checkoutOrder .inputRow select {
        margin-top: 5px;
    }
    .checkoutIcon {
        font-family: 'Open Sans', Arial, sans-serif !important;
        font-size: 12px !important;
        max-width: 190px;
    }
        .checkoutIcon span {
            font-family: 'Open Sans', Arial, sans-serif !important;
            font-size: 12px !important;
            white-space: normal;
        }
    .dx-field-label {
        padding: 0;
    }
    .dx-button {
        border-width: 0px;
    }
    .dx-button-has-text .dx-button-content {
        padding: 3px;
    }
    .dx-field-value:not(.dx-switch):not(.dx-checkbox):not(.dx-button) {
        width: 100;
    }
    .dx-field-value:not(.dx-widget) > .dx-button, .dx-field-value:not(.dx-widget) > .dx-checkbox, .dx-field-value:not(.dx-widget) > .dx-switch {
        float: unset;
        /*    width;*/
        float: left;
        padding: 5px !important;
        border: 1px solid #e2e0e0;
        text-align: center;
        margin-bottom: 15px;
        margin-right: 15px;
        margin-top: 4px;
        font-size: 14px;
    }
    div#default-address {
        float: none;
        text-align: center;
    }
    div#invoiceBtn, div#credit-cardBtn, div#default-address, div#change-address {
        width: 100;
    }
    .dx-button-mode-contained.dx-state-hover {
        background-color: #fff;
    }
    .dx-button-mode-contained.dx-state-focused {
        background-color: #fff;
    }
    .dx-button-mode-contained.dx-state-active {
        background-color: #fff;
    }
    .checkoutIcon img,
    .checkoutIcon .dx-button-content img,
    .checkoutIcon .dx-button-mode-contained .dx-icon {
        display: block;
        margin: auto;
        width;
        min-width: 40px;
        height: auto;
        max-width: 60px;
    }
    .dx-datebox-wrapper-calendar .dx-calendar {
        margin: 5px;
    }
    .dx-calendar-navigator .dx-calendar-caption-button.dx-button .dx-button-content {
        padding: 2px 15px 4px;
        color: #ee3a43;
    }
    .dx-calendar-cell.dx-calendar-today {
        font-weight: bold;
        color: #ee3a43;
    }
    .dx-calendar-navigator-next-view.dx-button .dx-icon, .dx-calendar-navigator-next-month.dx-button .dx-icon,
    .dx-calendar-navigator-previous-view.dx-button .dx-icon, .dx-calendar-navigator-previous-month.dx-button .dx-icon {
        color: #ee3a43;
    }
    .dx-calendar-cell.dx-calendar-contoured-date {
        -webkit-box-shadow: inset 0 0 0 1px #e2b1b1;
        box-shadow: inset 0 0 0 1px #e2b1b1;
    }
    .dx-calendar-cell.dx-calendar-selected-date.dx-calendar-contoured-date, .dx-calendar-cell.dx-calendar-selected-date.dx-calendar-today.dx-calendar-contoured-date {
        -webkit-box-shadow: inset 0 0 0 1px#ee3a43, inset 0 0 0 1000px #ee3a43;
        box-shadow: inset 0 0 0 1px#ee3a43, inset 0 0 0 1000px #ee3a43;
    }
    .col-xs-12.shippingInfo {
        padding: 20px 15px;
        border-bottom: 1px solid gainsboro;
    }
    .inputRow.col-xs-12 {
        padding: 5px 0;
    }
    .inputRow > div {
        padding-left: 0;
        padding-bottom: 5px;
    }
    .inputRow input,
    .inputRow select {
        height: 30px;
        width: 100;
    }
    .inputRow textarea {
        width;
    }
    .checkoutOrder .inputRow input,
    .checkoutOrder .inputRow select,
    .inputRow textarea {
        margin-top: 5px;
    }
    input.purchaseOrder {
        max-width: 290px;
    }
    input.expiration {
        width: 130px;
    }
    input.promotion {
        width: 80;
        margin-right: 15px;
        height: 30px;
        margin-bottom: 0;
    }
    input[type=date] {
        line-height: 25px;
        width: 160px;
    }
    .amount span {
        float: right;
    }
    .totalpriceRow {
        font-weight: 600;
    }
    .cartTitles.row {
        padding: 15px 0;
        margin-right: 0;
        margin-left: 0;
    }
    .cartTitles .col-sm-2.hidden-xs {
        /*max-width: 223px;*/
    }
    .col-sm-2.price.totalprice {
        padding-left: 40px;
    }
    .cartDetails.row {
        padding: 20px 0;
        border-bottom: 1px solid #dddddd;
        display: flex;
        width;
        box-shadow: none;
    }
    .cartDetails {
        background: #fff;
        color: gray;
        font-size: 12px;
        text-align: center;
        box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
        -webkit-box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
        -moz-box-shadow: 0 2px 6px rgba(69, 73, 91, .078);
    }
        .cartDetails img {
            width: 100;
            min-width: 75px;
            max-width: 250px
        }
        .cartDetails.row div {
            display: flow-root;
            margin: auto 0;
        }
        .cartDetails .backorderQTY {
            color: #ee3a43;
        }
    .totalsRow {
        margin-bottom: 20px;
        padding-bottom: 15px;
        display: flex;
    }
    div#icon-submit {
        width;
        padding: 10px 5px !important;
    }
    #icon-submit.dx-button-has-text .dx-button-content {
        padding: 0px 18px 0px;
    }
        #icon-submit.dx-button-has-text .dx-button-content i {
            float: right;
            color: #fff;
        }
        #icon-submit.dx-button-has-text .dx-button-content span {
            float: left;
        }
    .checkoutSubmit {
        display: flow-root;
        margin: auto 0 0;
        max-width: 360px;
    }
        .checkoutSubmit button {
            width: 100;
            text-align: left;
        }
    .cartRow {
        width;
        padding: 0 !important;
    }
    .productDetails {
        text-align: left;
        /*max-width: 440px;*/
    }
    .cartDetails colgroup, .cartDetails .dx-datagrid-headers {
        display: none;
    }
    .cartDetails label.visible-xs {
        float: left;
    }
    .item-name.productDetails,
    .cartTitles,
    .cartDetails .price,
    .cartDetails .totalPrice {
        font-weight: 600;
    }
    @media (min-width: 326px) {
        .totalsRow,
        .cartDetails.row {
            display: block;
            /*      padding: 15px;*/
            margin: auto auto;
        }
        .tab-content {
            padding-left: 0;
        }
        .checkoutSubmit {
            margin: 20px 0;
        }
        .totalpriceRow {
            margin-bottom: 30px;
        }
        .cartDetails.row div {
            display: block;
            margin: auto 0;
            white-space: normal;
        }
        .cartDetails label.visible-xs {
            float: left;
            width: auto;
            padding-right: 15px;
            min-width: 60px;
        }
        .cartTitles,
        .cartDetails .price,
        .cartDetails .quantity,
        .cartDetails .backordered,
        .cartDetails .totalPrice {
            text-align: left;
            padding: 10px 15px
        }
        div#PromotionalCode {
            width: 75%;
            float: left;
            margin-right: 5px;
            margin-bottom: 10px;
            margin-top: 4px;
        }
        input.promotion {
            margin-bottom: 15px;
        }
    }
    @media (min-width: 767px) {
        .totalsRow,
        .cartDetails.row {
            display: flex;
            padding: 0 15px;
            margin-bottom: 20px;
        }
        .totalpriceRow {
            margin-bottom: 0px;
        }
        .checkoutSubmit {
            margin: auto 0 0;
        }
        .cartTitles,
        .cartDetails .price,
        .cartDetails .quantity,
        .cartDetails .backordered,
        .cartDetails .totalPrice {
            text-align: center;
            padding: 5px 15px
        }
    }
    h3,
    .h3-style {
        font-size: 20px;
        line-height: 26px;
        font-weight: 300;
        font-family: 'Open Sans', Arial, sans-serif;
        margin: 30px 0 30px;
    }
    .btn {
        border-width: 2px;
        text-transform: uppercase;
        font-weight: 500;
        letter-spacing: 1.7px;
        -webkit-transition: all 0.2s ease-in-out, color 0.2s ease-in-out, box-shadow 0.1s ease-in-out;
        transition: all 0.2s ease-in-out, color 0.2s ease-in-out, box-shadow 0.1s ease-in-out;
        outline-color: #ee3a43 !important;
        padding: 7px 12px 6px;
    }
    .btn-primary, .dx-toolbar-button .dx-button-mode-contained {
        color: #fff;
        background-color: #ee3a43;
        border-color: #ee3a43;
    }
    .btn-sm {
        font-size: 10px;
        padding: 6px 10px 5px;
        /*   line-height: 0.5;*/
        border-radius: 3px;
    }
    .btn-lg {
        padding: 11px 16px 10px;
        font-size: 15px;
        line-height: 1.33333;
        border-radius: 6px;
    }
    button {
        /* margin: 0px 6px !important;*/
    }
        button.btn.btn-primary {
            font-size: 1.0em;
            min-width: 115px;
        }
    .cartDetails #btnCancel {
        float: right;
        position: relative;
        top: -15px;
    }
    .dx-toolbar-button .dx-button-mode-contained {
        padding: 6px;
    }
        .dx-toolbar-button .dx-button-mode-contained .dx-icon {
            position: relative;
            left: -25px;
            color: #fff;
        }
        .btn.btn-primary:hover,
        .btn.btn-primary:focus,
        .dx-toolbar-button .dx-button-mode-contained.dx-state-hover {
            background-color: #000;
            color: white;
            border-color: #000;
            outline: none;
        }
    .dx-toolbar-button .dx-closebutton.dx-button-mode-contained.dx-state-hover {
        background: transparent;
        border: 1px solid transparent;
    }
    .popupToolbarButton {
        margin-top: -15px;
    }
</style>
<!-- priley -->
<script src='/ECommerce/Site/Shop/js/geographicData.js'></script>
<script type="text/javascript">
    /*
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Checkout Widget
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '                                 (c) 1999-2020
        '                      by Dovetail Internet Technologies, LLC
        '             www.dovetailinternet.com       www.CyberStoreForSYSPRO.com
        '                         sales@CyberStoreForSYSPRO.com
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' All rights reserved. Not to be used without permission.
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Filename: Checkout.html
        ' Version:  CyberStore For SYSPRO v2020.0.0
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Development Date: August 2020
        ' Revision: 1.0.18
        ' Modified: 8/9/2020
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Purpose: present shopper with single-page checkout experience.
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' Documentation: http://documentation.cyberstoreforsyspro.com/#CheckoutWidget.html
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '
     */
    $('#myTabs a').click(function (e) {
        e.preventDefault()
        $(this).tab('show')
    });
    var CheckoutLoadPanel = null,
        OrderData = {},
        CheckOutUrl = '',
        PaymentMethod = {},
        InvoiceMethod = {},
        CCMethod = {},
        AddressData = [],
        CustomOrderData = {},
        AccountProfile = {},
        ShippingOptions = { ShippingMethodID: -1, SpecialInstructions: '', OrderHeaderComments: '', AlternateKey: '', RequestedShipDate: '' },
        OneTimeAddressData = { ShipToName: '', FirstName: '', LastName: '', Address1: '', Address2: '', Address3: '', City: '', State: '', Zip: '', Phone: '', IsDropShip: true, AddressCode: '' },
        OrderAddresses = { BillingAddress: {}, ShippingAddress: {} };
    // TODO: move this to global.js or check if there is a simpler function for this
    function DateToMMDDYYYY(dateNum) {
        let date = new Date(dateNum);
        return ((date.getMonth().toString().length > 1) ? (date.getMonth() + 1) : ('0' + (date.getMonth() + 1))) + '/' + ((date.getDate().toString().length > 1) ? date.getDate() : ('0' + date.getDate())) + '/' + date.getFullYear();
    }
    function Today() {
        var today = new Date();
        return today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();
    }
    $(function () {
        _.templateSettings.variable = 'item';
        CheckoutLoadPanel = $('#divLoadPanel').dxLoadPanel({
            shadingColor: 'rgba(0,0,0,0.7)',
            visible: true,
            showIndicator: true,
            showPane: true,
            closeOnOutsideClick: false,
            message: 'Loading order preferences ...',
        }).dxLoadPanel('instance');
        function loadData(DATA, options) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                if (!response.Result.Success) {
                    var alertResult = DevExpress.ui.dialog.alert(response.Result.Message, 'Message');
                    alertResult.done(function () {
                        CheckoutLoadPanel.option('message', 'Returning to your cart ...')
                        window.location.replace(SITE_PATHS.application + '/ShoppingCart.aspx');
                    });
                    return;
                }
                else {
                    OrderData = response.Data;
                    CheckOutUrl = OrderData.CheckOutPageUrl;
                    itemDetails.option('dataSource', OrderData.Details);
                    // purchase order
                    orderDetailsForm.getEditor('PO').option('value', OrderData.PO);
                    // requested ship date
                    if ('RequestedShipDate' in OrderData) {
                        if (OrderData.RequestedShipDate !== '') {
                            orderDetailsForm.getEditor('RequestedShipDate').option({
                                value: Date.parse(OrderData.RequestedShipDate)
                            });
                        }
                        orderDetailsForm.getEditor('RequestedShipDate').option({
                            disabled: (OrderData.CanChangeShipDate != null)
                                ? !OrderData.CanChangeShipDate
                                : true,
                        });
                        if (OrderData.CanChangeShipDate) {
                            orderDetailsForm.getEditor('RequestedShipDate').option({
                                value: Date.parse(OrderData.MinimumShipDate),
                                min: ('MinimumShipDate' in OrderData) ? Date.parse(OrderData.MinimumShipDate) : Today(),
                                max: ('MaximumShipDate' in OrderData) ? Date.parse(OrderData.MaximumShipDate) : null,
                                onValueChanged: function (e) {
                                    ShippingOptions.RequestedShipDate = DateToMMDDYYYY(e.value);
                                }
                            });
                            ShippingOptions.RequestedShipDate = OrderData.MinimumShipDate;
                        }
                    }
                    else {
                        orderDetailsForm.itemOption('section1.RequestedShipDate', {
                            visible: false,
                        });
                    }
                    /* TODO: figure out how to handle hiding the WEBXXXX PO when desired
                    if (widgetOptions.useDefaultPONumber !== null) {
                        if (widgetOptions.useDefaultPONumber) {
                            orderDetailsForm.getEditor('PO').option('value', OrderData.PO);
                        }
                    }
                    else {
                        orderDetailsForm.getEditor('PO').option('value', OrderData.PO);
                    }
                    */
                    // special instructions
                    shippingInfoForm.getEditor('SpecialInstructions').option('value', OrderData.SpecialInstructions);
                    // alternate key
                    if ('AlternateKeyLabelText' in OrderData) {
                        shippingInfoForm.itemOption('section2.AlternateKey', {
                            visible: true,
                            label: {
                                text: OrderData.AlternateKeyLabelText
                            }
                        });
                    }
                    else {
                    }
                    // shipping
                    displayShippingAddress({
                        ShipToName: (OrderData.CompanyName != '')
                            ? OrderData.CompanyName
                            : OrderData.Name,
                        FirstName: OrderData.FirstName,
                        LastName: OrderData.LastName,
                        Address1: OrderData.ShipppingAddress1,
                        Address2: OrderData.ShipppingAddress2,
                        Address3: OrderData.ShipppingAddress3,
                        City: OrderData.City,
                        State: OrderData.State,
                        Zip: OrderData.Zip,
                        Country: OrderData.Country,
                        Phone: OrderData.Phone,
                        TaxCity: OrderData.TaxCity,
                        TaxState: OrderData.TaxState,
                        TaxArea: OrderData.TaxArea,
                        TaxCountyZip: OrderData.TaxCountyZip
                    });
                    // billing
                    displayBillingAddress({
                        FirstName: OrderData.FirstName,
                        LastName: OrderData.LastName,
                        Address1: OrderData.BillingAddress1,
                        Address2: OrderData.BillingAddress2,
                        Address3: OrderData.BillingAddress3,
                        City: OrderData.BillingCity,
                        State: OrderData.BillingState,
                        Zip: OrderData.BillingZip,
                        Country: OrderData.BillingCountry,
                        Phone: OrderData.BillingPhone
                    });
                    $('#divBillingCompany').text(OrderData.Name);
                    $('#divEmail').text(OrderData.Email);
                    // promo
                    if (OrderData.WebPromotionCode !== null) {
                        promoCodeDetail.option('value', OrderData.WebPromotionCode);
                    }
                    // order totals
                    $('#spnSubtotal').text(OrderData.OrderSubTotal);
                    if (OrderData.ShippingCostAmount != null) {
                        $('#spnShippingCost').text(OrderData.ShippingCost);
                    }
                    else {
                        $('#spnShippingCost').text('TBD');
                    }
                    $('#spnTax').text(OrderData.Tax);
                    if (OrderData.GSTTaxAmount > 0) {
                        $('#spnGSTTax').text(OrderData.GSTTax);
                        $('.gstTax').css('display', 'block');
                        if (OrderData.TaxAmount == 0) {
                            $('.tax').css('display', 'none');
                        }
                    }
                    if (OrderData.WebPromotionValueAmount != 0) {
                        $('#spnPromoValue').text(OrderData.WebPromotionValue);
                        $('.promo').css('display', 'block');
                    }
                    else {
                        $('.promo').css('display', 'none');
                    }
                    $('#spnOrderTotal').text(OrderData.OrderTotal);
                }
                var getShipping = true, getPayments = true, getProfile = true;
                if (!_.isEmpty(options)) {
                    if ('getShipping' in options) { getShipping = options.getShipping; }
                    if ('getPayments' in options) { getPayments = options.getPayments; }
                    if ('getProfile' in options) { getProfile = options.getProfile; }
                }
                if (getProfile) { MakeAJAXCall('Visitor.GetAccountProfile', {}, populateProfile, response); }
                // paint the checkout form
                $('#divCheckoutWrapper').css('background-image', 'none');
                $('#divCheckoutWrapper section').css('display', 'block');
                CheckoutLoadPanel.hide();
                if (orderDetailsForm.getEditor('PO').option('value') === '') {
                    orderDetailsForm.getEditor('PO').focus();
                }
                if (getShipping) { MakeAJAXCall('Order.GetShippingMethods', {}, populateShipping); }
                if (getPayments) { MakeAJAXCall('Order.GetPaymentMethods', {}, buildPaymentMethods); }
            }
        }
        var orderDetailsForm = $('#orderDetails').dxForm({
            items: [{
                itemType: 'group',
                name: 'section1',
                cssClass: 'inputRow',
                colCount: 3,
                items: [{
                    dataField: 'PO',
                    editorType: 'dxTextBox',
                    label: {
                        text: 'PO Number',
                        location: 'top'
                    },
                    editorOptions: {
                        placeholder: 'Your PO Number',
                        onChange: function () {
                            MakeAJAXCall('Order.SaveOrderPayment', getPaymentParams());
                        },
                        maxLength: 30
                    }
                },
                {
                    dataField: 'RequestedShipDate',
                    editorType: 'dxDateBox',
                    label: {
                        text: 'Requested Ship Date',
                        location: 'top',
                    },
                    editorOptions: {
                        width: '100',
                        calendarOptions: {
                            showTodayButton: true
                        }
                    }
                },
                {
                    dataField: 'ATPendDate',
                    visible: false,
                    editorType: 'dxDateBox',
                    label: {
                        location: 'top'
                    },
                    editorOptions: {
                        width'
                    }
                }]
            }]
        }).dxForm('instance');
        // SHIPPING INFORMATION
        var shippingInfoForm = $('#shippingInfo').dxForm({
            items: [{
                itemType: 'group',
                cssClass: 'inputRow',
                name: 'section2',
                colCount: 1,
                items: [{
                    dataField: 'ShippingMethod',
                    editorType: 'dxSelectBox',
                    editorOptions: {
                        dataSource: [{ Method_ID: 0, Description: 'Calculating Options ...' }],
                        valueExpr: 'Method_ID',
                        displayExpr: 'Description',
                        value: 0,
                        placeholder: 'Calculating Options ...',
                        disabled: true,
                        onValueChanged: function (e) {
                            var val = e.value;
                            ShippingOptions.ShippingMethodID = (typeof val === 'string') ? val.substring(val.indexOf("_") + 1) : val;
                        }
                    },
                },
                {
                    dataField: 'SpecialInstructions',
                    editorType: 'dxTextBox',
                    label: {
                        text: 'Special Instructions'
                    },
                    editorOptions: {
                        placeholder: 'Type any special instructions',
                        onChange: function (e) {
                            ShippingOptions.SpecialInstructions = e.component.option('value');
                        },
                        maxLength: 50
                    }
                },
                {
                    dataField: 'AlternateKey',
                    visible: false,
                    editorType: 'dxTextBox',
                    editorOptions: {
                        onChange: function (e) {
                            ShippingOptions.AlternateKey = e.component.option('value');
                        },
                        maxLength: 10,
                        width: 150
                    }
                }
                ]
            }]
        }).dxForm('instance');
        //ADDRESS BUTTONS
        $('#default-address').dxButton({
            icon: '/Ecommerce/site/themes/images/defaultAddress.png',
            text: 'Default Address',
            onClick: function () {
                var defaultAddress = GetObjectFromArrayByKeyValue(AddressData.Addresses, 'AddressCode', AddressData.DefaultShippingAddressCode);
                displayShippingAddress(Array.isArray(defaultAddress)
                    ? defaultAddress[0]
                    : defaultAddress);
                saveAddresses();
            }
        });
        var changeAddressButton = $('#change-address').dxButton({
            icon: '/Ecommerce/site/themes/images/changeAddress.png',
            text: 'Change Address',
            disabled: true,
            onClick: function () {
                addressPopUp.show();
            },
        }).dxButton('instance');
        //PAYMENT BUTTONS
        var btnInvoice = $('#invoiceBtn').dxButton({
            icon: '/Ecommerce/site/themes/images/invoice.png',
            text: 'Invoice',
            visible: false,
            onClick: function (e) {
                PaymentMethod == InvoiceMethod;
                //switchPaymentMethod(InvoiceMethod);
            }
        }).dxButton('instance');
        var btnCreditCard = $('#credit-cardBtn').dxButton({
            icon: '/Ecommerce/site/themes/images/creditCard.png',
            text: 'Credit Card',
            visible: false,
            onClick: function (e) {
                PaymentMethod = CCMethod;
                //switchPaymentMethod(CCMethod);
            }
        }).dxButton('instance');
        var btnCancel = $('#btnCancel').dxButton({
            text: 'Cancel',
            elementAttr: {
                class: 'btn btn-primary btn-sm'
            },
            onClick: function () {
                var result = DevExpress.ui.dialog.confirm('Are you sure you want to cancel checkout and return to the cart?', 'Cancel Checkout');
                result.done(function (success) {
                    if (success) {
                        CheckoutLoadPanel.option('message', 'Cancelling Checkout ...');
                        CheckoutLoadPanel.show();
                        MakeAJAXCall('Order.CancelCheckOut', {}, validateCancel);
                    }
                });
            }
        }).dxButton('instance');
        // PAYMENT DETAIL SCRIPTS
        var ccDetailForm = $('#ccDetails').dxForm({
            items: [{
                itemType: 'group',
                cssClass: 'inputRow',
                name: 'section4',
                colCount: 1,
                items: [{
                    dataField: 'CardHolder',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top'
                    },
                    editorOptions: {
                        placeholder: 'Name on Card',
                    }
                },
                {
                    dataField: 'CardNumber',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top'
                    },
                    editorOptions: {
                        placeholder: 'XXXX XXXX XXXX XXXX',
                        elementAttr: { id: 'txtCreditCardNumber' },
                        onValueChanged: function (e) {
                        }
                    }
                },
                {
                    dataField: 'ExpiryDate',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top'
                    },
                    editorOptions: {
                        width: '45',
                        placeholder: 'MM/YYYY'
                    }
                },
                {
                    dataField: 'CVS',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top'
                    },
                    editorOptions: {
                        width',
                        placeholder: 'XXX'
                    }
                }]
            }],
            visible: false,
        }).dxForm('instance');
        //PROMO CODE
        var promoCodeDetail = $('#PromotionalCode').dxTextBox({
            placeholder: 'Enter Code and Apply',
        }).dxTextBox('instance');
        var promoButton = $('#btnApplyPromo').dxButton({
            text: 'APPLY',
            onClick: function (e) {
                var promoCode = promoCodeDetail.option('value');
                if (promoCode !== null && promoCode !== '') {
                    // validate and apply the promo
                    MakeAJAXCall("Order.ApplyWebPromotion", {
                        PromotionCode: promoCode
                    }, validatePromo);
                }
                else {
                    // remove any existing promo
                    MakeAJAXCall("Order.RemoveWebPromotion", {}, validatePromo);
                }
            }
        });
        $('#icon-submit').dxButton({
            icon: 'fa fa-long-arrow-right',
            text: 'Submit Order',
            onClick: function (e) {
                // do we show a speedbump or go right to checkout processing?
                if ('ConfirmationMessageText' in OrderData) {
                    // show confirmation message
                    var result = DevExpress.ui.dialog.confirm(OrderData.ConfirmationMessageText, 'Confirm Order');
                    result.done(function (success) {
                        if (success) {
                            processOrder();
                        }
                    });
                }
                else {
                    // no confirmation message, just go and process the order
                    processOrder();
                }
            }
        });
        var formatDate = new Intl.DateTimeFormat('en-US').format;
        var itemDetails = $('#cart-grid').dxDataGrid({
            rowTemplate: function (container, item) {
                var data = item.data,
                    markup = '<div class="cartRow ' + ((data.rowIndex % 2) ? 'dx-row-alt' : '') + '">' +
                        '<div class="cartDetails row">' +
                        '<div class="col-sm-2 col-md-2 col-lg-1"><img src="' + data.Photo1 + '" /></div>' +
                        '<div class="col-sm-2 col-md-2 col-lg-3">' +
                        '<div class="item-name productDetails">' + data.Description + '</div>' +
                        '<div class="item-stockcode productDetails">' + data.StockCode + '</div>' +
                        '</div>' +
                        '<div class="col-sm-2 price"><label class="visible-xs">Price:</label>' + data.WebPrice + '</div>' +
                        '<div class="col-xs-6 col-sm-2 quantity"><label class="visible-xs">Qty: </label>' + data.Quantity + '</div>' +
                        '<div class="col-sm-2 price"><label class="visible-xs">Backordered:</label>' + ((data.IsBackordered) ? 'Yes' : '') + '</div>' +
                        '<div class="col-sm-2 price"><label class="visible-xs">Total Price:</label>' + data.TotalPrice + '</div>' +
                        '</div>' +
                        '</div>';
                container.append(markup);
            },
            loadPanel: {
                enabled: false
            },
            showBorders: false,
            columns: [
                'column'
            ]
        }).dxDataGrid('instance');
        var addressList = $('#divMultiAddressList').dxList({
            visible: true,
            itemTemplate: $('#tmplMultiAddress'),
            showSelectionControls: true,
            selectionMode: 'single',
            height: 400,
            keyExpr: 'AddressCode',
        }).dxList('instance');
        var oneTimeAddressForm = $('#divOneTimeAddressForm').dxForm({
            items: [{
                itemType: 'group',
                cssClass: 'inputRow',
                colCount: 1,
                items: [{
                    dataField: 'ShipToName',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top',
                        text: 'Ship To Name'
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.ShipToName = e.value;
                            if (e.value.indexOf(' ') < 1) {
                                oneTimeAdressData.FirstName = e.value;
                            }
                            else {
                                var arrName = e.value.split(" ");
                                OneTimeAddressData.FirstName = arrName.slice(0, 1).join(' ');
                                OneTimeAddressData.LastName = arrName.slice(1, arrName.length).join(' ');
                            }
                        },
                    }
                },
                {
                    dataField: 'Addresss1',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top',
                        text: 'Address'
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.Address1 = e.value;
                        },
                    }
                },
                {
                    dataField: 'Address2',
                    editorType: 'dxTextBox',
                    label: {
                        visible: false,
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.Address2 = e.value;
                        },
                    }
                },
                {
                    dataField: 'Address3',
                    editorType: 'dxTextBox',
                    label: {
                        visible: false,
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.Address3 = e.value;
                        },
                    }
                }
                ]
            },
            {
                itemType: 'group',
                cssClass: 'inputRow',
                colCount: 3,
                items: [{
                    dataField: 'City',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top',
                        text: 'City'
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.City = e.value;
                        },
                    }
                },
                {
                    dataField: 'State',
                    editorType: 'dxSelectBox',
                    label: {
                        location: 'top',
                        text: 'State'
                    },
                    editorOptions: {
                        dataSource: {
                            store: GetStateStoreByCountry(_Currency.CountryCode),
                            pageSize: 5,
                            paginate: true,
                        },
                        elementAttr: {
                            id: 'stateSelectId',
                        },
                        inputAttr: {
                            autocomplete: 'test-autocomplete'
                        },
                        displayExpr: 'StateName',
                        valueExpr: 'StateCode',
                        searchEnabled: true,
                        onValueChanged: function (e) {
                            OneTimeAddressData.State = e.value;
                        }
                    }
                },
                {
                    dataField: 'Zip',
                    editorType: 'dxTextBox',
                    label: {
                        location: 'top',
                        text: 'Zip'
                    },
                    editorOptions: {
                        onValueChanged: function (e) {
                            OneTimeAddressData.Zip = e.value;
                        },
                    }
                },
                ]
            },
            {
                itemType: 'group',
                cssClass: 'inputRow',
                colCount: 2,
                items: [
                    {
                        dataField: 'Country',
                        editorType: 'dxSelectBox',
                        label: {
                            location: 'top',
                            text: 'Country'
                        },
                        editorOptions: {
                            dataSource: {
                                store: _CountryStore._array.filter(getVisibleCountries => getVisibleCountries.UseCountry == true),
                                pageSize: 5,
                                paginate: true,
                            },
                            elementAttr: {
                                id: 'CountrySelectId',
                            },
                            inputAttr: {
                                autocomplete: 'test-autocomplete'
                            },
                            displayExpr: 'CountryName',
                            valueExpr: 'CountryCode',
                            searchEnabled: true,
                            onValueChanged: function (e) {
                                oneTimeAddressForm.getEditor('State').reset();
                                oneTimeAddressForm.getEditor('State').option('dataSource', GetStateStoreByCountry(e.value));
                                OneTimeAddressData.Country = e.value;
                            },
                            onInitialized: function (e) {
                                var c = GetObjectFromArrayByKeyValue(_CountryStore._array, 'CountryCode', _Currency.CountryCode.toUpperCase());
                                e.component.option('value', c[0].CountryCode.toUpperCase());
                                OneTimeAddressData.Country = c[0].CountryCode.toUpperCase();
                            }
                        }
                    },
                    {
                        dataField: 'Phone',
                        editorType: 'dxTextBox',
                        label: {
                            location: 'top',
                            text: 'Phone'
                        },
                        editorOptions: {
                            onValueChanged: function (e) {
                                OneTimeAddressData.Phone = e.value;
                            },
                        }
                    }]
            }],
        }).dxForm('instance');
        var addressPopUp = $('#popMultiAddress').dxPopup({
            title: 'Additional Shipping Address',
            visible: false,
            height: 600,
            width: 600,
            onShowing: function () {
                if ($('#divMultiAddressWrapper').css('display') == 'none' &&
                    $('#divOneTimeAddressWrapper').css('display') == 'none') {
                    $('#divMultiAddressWrapper').css('display', 'block');
                }
            },
            toolbarItems: [{
                widget: 'dxButton',
                location: 'before',
                toolbar: 'bottom',
                options: {
                    text: '+ Add a One-Time Address',
                    onClick: function () {
                        $('#btnAddOneTimeAddress').dxButton('instance').option('visible', false);
                        $('#btnSelectOnFile').dxButton('instance').option('visible', true);
                        $('#divMultiAddressWrapper').css('display', 'none');
                        $('#divOneTimeAddressWrapper').css('display', 'block');
                    },
                    elementAttr: {
                        class: 'popupToolbarButton add',
                        id: 'btnAddOneTimeAddress'
                    },
                }
            }, {
                widget: 'dxButton',
                location: 'before',
                toolbar: 'bottom',
                options: {
                    text: 'Back to Address List',
                    onClick: function () {
                        $('#btnSelectOnFile').dxButton('instance').option('visible', false);
                        $('#btnAddOneTimeAddress').dxButton('instance').option('visible', true);
                        $('#divOneTimeAddressWrapper').css('display', 'none');
                        $('#divMultiAddressWrapper').css('display', 'block');
                    },
                    elementAttr: {
                        class: 'popupToolbarButton add',
                        id: 'btnSelectOnFile'
                    },
                    visible: false
                }
            }, {
                widget: 'dxButton',
                location: 'after',
                toolbar: 'bottom',
                options: {
                    text: 'Use This Address',
                    onClick: function (e) {
                        if ($('#btnSelectOnFile').dxButton('instance').option('visible')) {
                            displayShippingAddress(OneTimeAddressData);
                        }
                        else {
                            var selectedKey = addressList.option('selectedItemKeys');
                            var selectedKeyIndex = AddressData.Addresses.findIndex(function (address) {
                                return address.AddressCode == selectedKey
                            });
                            displayShippingAddress(AddressData.Addresses[selectedKeyIndex]);
                        }
                        addressPopUp.hide();
                        saveAddresses();
                    },
                    elementAttr: {
                        class: 'popupToolbarButton change',
                        id: 'btnUseThisAddress'
                    },
                }
            }],
        }).dxPopup('instance');
        function populateShipping(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var d = JSON.parse(DATA);
                var methods = d.Data.Methods;
                if (methods.length == 0) {
                    // no methods returned, set messaging and fallback vale of shipping method ID
                    shippingInfoForm.itemOption('section2.ShippingMethod', {
                        label: {
                            text: 'Shipping To Be Set Off-line'
                        }
                    });
                    shippingInfoForm.getEditor('ShippingMethod').option({
                        visible: false
                    });
                    ShippingOptions.ShippingMethodID = -1;
                    $('#spnShippingCost').text('TBD');
                }
                else {
                    // get the method_ID into the value of the drop down to extract
                    // shipping ID from the text string in the editor's onValueChanged function
                    shippingInfoForm.getEditor('ShippingMethod').option({
                        dataSource: methods,
                        value: (methods.length > 0)
                            ? methods[0].Method_ID
                            : -1,
                        disabled: false
                    });
                }
            }
        }
        function buildPaymentMethods(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var d = JSON.parse(DATA);
                var methods = d.Data.Methods;
                if (d.Data.MethodCount > 0) {
                    for (var i = 0; i < methods.length; i++) {
                        if (methods[i].MethodType == 'IN') {
                            InvoiceMethod = methods[i];
                            showInvoice();
                            break;
                        }
                    }
                    for (var i = 0; i < methods.length; i++) {
                        if (methods[i].MethodType == 'CC') {
                            CCMethod = methods[i];
                            showCreditCard();
                            break;
                        }
                    }
                }
                var p = GetObjectFromArrayByKeyValue(methods, 'MethodName', OrderData.MethodName);
                PaymentMethod = (Array.isArray(p))
                    ? p[0]
                    : p;
                MakeAJAXCall('Visitor.GetShippingAddresses', {}, populateAddresses);
            }
        }
        function populateProfile(DATA, setupResponse) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                if (result.Success) {
                    AccountProfile = response.Data;
                }
                // run any custom load processing before painting the checkout form
                if (typeof populateProfile_customization === 'function') { populateProfile_customization(setupResponse.Result, setupResponse.Data); }
            }
        }
        // Modify the body of the populateProfile_customization function to accomodate any custom processing requirements that are conditional on
        // the presence of any data contained in the Account Profile, if any
        // if no customizations, then leave the body blank with just a return statement like so
        //
        /*
            function populateProfile_customization(resultObj, dataObj) {
                return;
            }
        */
        function populateProfile_customization(resultObj, dataObj) {
            return;
        }
        function showInvoice() {
            $('.checkoutIcon.invoice').css('display', 'block')
            btnInvoice.option('visible', true);
            $('.invoice').css('display', 'block');
        }
        function showCreditCard() {
            $('.checkoutIcon.cc').css('display', 'block')
            btnCreditCard.option('visible', true);
            ccDetailForm.option('visible', true);
            $('.credit').css('display', 'block');
        }
        function getPaymentParams() {
            var cardType = '',
                ccNumber = '',
                ccCVN = '',
                ccMonth = '',
                ccYear = '',
                ccFirst = ''
            ccLast = '';
            if (PaymentMethod.MethodType == 'CC') {
                $('#txtCreditCardNumber').find('input').validateCreditCard(function (result) {
                    cardType = result.card_type.name;
                });
                ccNumber = ccDetailForm.getEditor('CardNumber').option('value');
                ccCVN = ccDetailForm.getEditor('CVS').option('value');
                ccMonth = ccDetailForm.getEditor('ExpiryDate').option('value').substring(0, 2);
                ccYear = ccDetailForm.getEditor('ExpiryDate').option('value').substring(3);
                var name = ccDetailForm.getEditor('CardHolder').option('value').split(' ');
                ccFirst = name[0];
                if (name.length > 1) {
                    ccLast = name[name.length - 1].trim();
                }
            }
            var paymentInfo = {
                PaymentMethod_ID: PaymentMethod.PaymentMethod_ID,
                CreditCardType: cardType.toUpperCase(),
                CreditCardNumber: ccNumber,
                CreditCardVerification: ccCVN,
                CreditCardMonth: ccMonth,
                CreditCardYear: ccYear,
                CreditCardFirstName: ccFirst,
                CreditCardLastName: ccLast,
                PONumber: orderDetailsForm.getEditor('PO').option('value')
            }
            return paymentInfo;
        }
        function saveAddresses() {
            MakeAJAXCall("Order.SaveOrderAddresses", {
                ShippingCode: OrderAddresses.ShippingAddress.AddressCode,
                ShippingFirstName: OrderAddresses.ShippingAddress.FirstName,
                ShippingLastName: OrderAddresses.ShippingAddress.LastName,
                ShippingAddress1: OrderAddresses.ShippingAddress.Address1,
                ShippingAddress2: OrderAddresses.ShippingAddress.Address2,
                ShippingAddress3: OrderAddresses.ShippingAddress.Address3,
                ShippingCity: OrderAddresses.ShippingAddress.City,
                ShippingState: OrderAddresses.ShippingAddress.State,
                ShippingZip: OrderAddresses.ShippingAddress.Zip,
                ShippingCountry: OrderAddresses.ShippingAddress.Country,
                ShippingPhone: OrderAddresses.ShippingAddress.Phone,
                ShippingTaxArea: OrderAddresses.ShippingAddress.TaxArea || '',
                ShippingTaxCity: OrderAddresses.ShippingAddress.TaxCity || '',
                ShippingTaxState: OrderAddresses.ShippingAddress.TaxState || '',
                ShippingTaxCountyZip: OrderAddresses.ShippingAddress.TaxCountyZip || '',
                ShippingIsDropShip: OrderAddresses.ShippingAddress.IsDropShip,
                BillingFirstName: OrderAddresses.BillingAddress.FirstName,
                BillingLastName: OrderAddresses.BillingAddress.LastName,
                BillingAddress1: OrderAddresses.BillingAddress.Address1,
                BillingAddress2: OrderAddresses.BillingAddress.Address2,
                BillingAddress3: OrderAddresses.BillingAddress.Address2,
                BillingCity: OrderAddresses.BillingAddress.City,
                BillingState: OrderAddresses.BillingAddress.State,
                BillingZip: OrderAddresses.BillingAddress.Zip,
                BillingCountry: OrderAddresses.BillingAddress.Country,
                BillingPhone: OrderAddresses.BillingAddress.Phone
            }, shippingUpdated);
        }
        function shippingUpdated(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                if (result.Success) {
                    MakeAJAXCall('Order.SetupOrder', {}, loadData, {
                        getPayments: false,
                        getProfile: false
                    });
                    ToastAlert("Shipping address updated.", true, 5000);
                } else {
                    ToastAlert(result.Message, false);
                }
            }
        }
        function validatePromo(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                var promoCode = promoCodeDetail.option('value');
                if (result.Success) {
                    // promo was applied tell the user what happened
                    ToastAlert(result.Message, true, 5000);
                    // reload the order
                    MakeAJAXCall('Order.SetupOrder', {}, loadData, {
                        getShipping: false,
                        getPayments: false,
                        getProfile: false
                    });
                }
                else {
                    // promo not applied
                    ToastAlert(String.Format('The web promotion code \'{0}\' could not be applied. {0}. Please try again.', promoCode, result.Message), false);
                    promoCodeDetail.option('value', '');
                }
            }
            else {
                ToastAlert(String.Format('The web promotion entered could not be applied. {0}. Please try again.', result.Message), false);
            }
        }
        function validateCancel(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                if (result.Success) {
                    window.location.replace(SITE_PATHS.application + '/ShoppingCart.aspx');
                    return;
                }
            }
            CheckoutLoadPanel.hide();
            DevExpress.ui.dialog.alert('There was a problem while attempting to cancel your checkout. Please try again.', 'Alert');
        }
        function populateAddresses(DATA) {
            if (DATA === '') { return; }
            // build our objects for handling
            var response = JSON.parse(DATA);
            var result = response.Result;
            if (result.Success) {
                AddressData = response.Data;
                AddressData.Addresses.forEach(function (address, i) {
                    if (address.AddressCode === AddressData.DefaultShippingAddressCode) {
                        AddressData.Addresses.splice(i, 1);
                        AddressData.Addresses.unshift(address);
                    }
                });
                addressList.option({
                    dataSource: AddressData.Addresses
                });
                var defaultAddressIndex = AddressData.Addresses.findIndex(function (address) {
                    return address.AddressCode == AddressData.DefaultShippingAddressCode
                });
                addressList.selectItem(defaultAddressIndex);
                changeAddressButton.option('disabled', false);
            }
        }
        function displayShippingAddress(address) {
            if (!('IsDropShip' in address)) {
                address.IsDropShip = false;
            }
            OrderAddresses.ShippingAddress = address;
            $('#divShippingCompany').text((address.ShipToName == null) ? '' : address.ShipToName);
            if (address.ShipToName != address.FirstName && address.ShipToName != address.FirstName + ' ' + address.LastName) {
                $('#spnShippingFirstName').text((address.FirstName == null) ? '' : address.FirstName);
                $('#spnShippingLastName').text((address.LastName == null) ? '' : address.LastName);
            }
            else {
                $('#spnShippingFirstName').text('');
                $('#spnShippingLastName').text('');
            }
            $('#divShippingAddress1').text((address.Address1 == null) ? '' : address.Address1);
            $('#divShippingAddress2').text((address.Address2 == null) ? '' : address.Address2);
            $('#divShippingAddress3').text((address.Address3 == null) ? '' : address.Address3);
            $('#spnShippingCity').text((address.City == null) ? '' : address.City);
            $('#spnShippingState').text((address.State == null) ? '' : address.State);
            $('#spnShippingZipCode').text((address.Zip == null) ? '' : address.Zip);
            $('#divShippingCountry').text((address.Country == null) ? '' : address.Country);
        }
        function displayBillingAddress(address) {
            OrderAddresses.BillingAddress = address;
            $('#divBillingAddress1').text(OrderData.BillingAddress1);
            $('#divBillingAddress2').text(OrderData.BillingAddress2);
            $('#divBillingAddress3').text(OrderData.BillingAddress3);
            $('#spnBillingCity').text(OrderData.BillingCity);
            $('#spnBillingState').text(OrderData.BillingState);
            $('#spnBillingZipCode').text(OrderData.BillingZip);
            $('#divBillingCountry').text(OrderData.BillingCountry);
            $('#divBillingPhone').text(OrderData.BillingPhone);
        }
        function finishOrder(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                if (result.Success) {
                    window.location.replace(SITE_PATHS.application + '/CheckOutDisplayOrderReceipt.aspx');
                }
                else {
                    DevExpress.ui.dialog.alert(result.Message, 'Order Error');
                    CheckoutLoadPanel.hide();
                }
            }
        }
        // TODO: this won't work, the fields disappear
        /*
        function switchPaymentMethod(methodObj) {
            PaymentMethod = methodObj;
            if ('PODisplay' in methodObj) {
                switch (methodObj.PODisplay) {
                    case "R": // ask for PO AND required
                        if ('ReferenceLabel' in methodObj) {
                            orderDetailsForm.itemOption('section1.PO', {
                                label: {
                                    text: methodObj.ReferenceLabel,
                                    location: top
                                },
                                visible: true,
                                validationRules: [{
                                    type: 'required',
                                    message: String.Format('{0} is required.', methodObj.ReferenceLabel || 'A PO')
                                }],
                            });
                        }
                        break;
                    case "N": // Don't ask for PO
                        orderDetailsForm.itemOption('section1.PO', {
                            visible: false,
                            validationRules: [],
                        });
                        break;
                    case "Y": // ask for PO, not required
                        if ('ReferenceLabel' in methodObj) {
                            orderDetailsForm.itemOption('section1.PO', {
                                label: {
                                    text: methodObj.ReferenceLabel,
                                    location: top
                                },
                                validationRules: [],
                                visible: true
                            });
                        }
                        break;
                }
            }
        }
        */
        function validateShippingOptions(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                // check for success
                if (!result.Success) {
                    CheckoutLoadPanel.hide();
                    DevExpress.ui.dialog.alert(result.Message);
                }
                else {
                    MakeAJAXCall('Order.SaveOrderPayment', getPaymentParams(), validatePayment);
                }
            }
        }
        function validatePayment(DATA) {
            if (ValidAJAXResponse(DATA)) {
                // build our objects for handling
                var response = JSON.parse(DATA);
                var result = response.Result;
                // check for failure
                if (!result.Success) {
                    CheckoutLoadPanel.hide();
                    DevExpress.ui.dialog.alert(result.Message);
                }
                else {
                    //
                    // we succeeded getting data back from the previous MakeAJAXCall, so let's now process the order
                    //
                    if (_.isEmpty(CustomOrderData)) {
                        // process the order without CustomData
                        MakeAJAXCall('Order.ProcessOrder', {}, finishOrder);
                    }
                    else {
                        // the CustomOrderData object has been populated, so we will process the order with the CustomData
                        MakeAJAXCall('Order.ProcessOrderWithCustomData', { CustomData: CustomOrderData }, finishOrder);
                    }
                }
            }
        }
        function processOrder() {
            CheckoutLoadPanel.option('message', 'Processing Order ...');
            CheckoutLoadPanel.show();
            MakeAJAXCall('Order.SaveShippingOptions', ShippingOptions, validateShippingOptions);
        }
       
        ///-------------------------------------------------------------------------------------------------
        /// <summary>
        ///     returns an Array of States based on the countryCode.
        /// </summary>
        ///
        /// <param name='countryCode'>
        ///     countryCode inthis case currency CountyCode
        /// </param>
        ///
        /// <returns>
        ///     returns an Array of States
        /// </returns>
        ///-------------------------------------------------------------------------------------------------
        function GetStateStoreByCountry(CountryCode) {
            try {
                var statesArr;
                var vCountries = [];
                var vCountries = _CountryStore._array.filter(getVisibleCountries => getVisibleCountries.UseCountry == true);
                if (!vCountries.some(item => item.CountryCode === CountryCode.toUpperCase())) {
                    statesArr = [];
                    return statesArr;
                }
                if (CountryCode === null || CountryCode == "undefined" || CountryCode === "") {
                    statesArr = [];
                    return statesArr;
                }
                var c = GetObjectFromArrayByKeyValue(_CountryStore._array, 'CountryCode', CountryCode.toUpperCase());
                if (c[0].States.length > 0) {
                    allStatesArr = c[0].States;
                    statesArr = allStatesArr.filter(getvisibleStates => getvisibleStates.UseState == true);
                } else {
                    statesArr = [];
                }
                return statesArr;
            } catch (err) {
                statesArr = [];
                return statesArr;
            }
        }
        // now that everything is setup, let's setup the order and get going
        MakeAJAXCall('Order.SetupOrder', {}, loadData);
    });
</script>
<div id="divLoadPanel"></div>
<div id="divCheckoutWrapper" class="container-fluid no-gutter">
    <h2>Checkout</h2>
    <section class="row checkoutOrder">
        <h3><span>1.</span>Order Details</h3>
        <div class="col-xs-12">
            <div class="inputRow col-xs-12">
                <div id="orderDetails"></div>
            </div>
        </div>
    </section>
    <section class="row checkoutShipping">
        <h3><span>2.</span> Shipping Information</h3>
        <div class="col-xs-12 no-gutter">
            <div class="col-sm-6">
                <div id="shippingInfo"></div>
            </div>
            <div class="col-sm-5">
                <div class="checkoutIcon col-xs-5">
                    <div class="dx-field">
                        <div class="dx-field-value">
                            <div id="default-address"></div>
                        </div>
                    </div>
                </div>
                <div class="checkoutIcon col-xs-5">
                    <div class="dx-field-value">
                        <div id="change-address"></div>
                    </div>
                </div>
                <div class="col-xs-12 shippingInfo">
                    <div id="divShippingCompany"></div>
                    <div><span id="spnShippingFirstName"></span> <span id="spnShippingLastName"></span></div>
                    <div id="divShippingAddress1"></div>
                    <div id="divShippingAddress2"></div>
                    <div id="divShippingAddress3"></div>
                    <div><span id="spnShippingCity"></span>, <span id="spnShippingState"></span> <span id="spnShippingZipCode"></span></div>
                    <div id="divShippingCountry"></div>
                </div>
                <div class="col-xs-12 billingInfo">
                    <h3>Billing Info</h3>
                    <div class="col-sm-6 no-gutter">
                        <div id="divBillingCompany"></div>
                        <div id="divBillingAddress1"></div>
                        <div id="divBillingAddress2"></div>
                        <div id="divBillingAddress3"></div>
                        <div><span id="spnBillingCity"></span>, <span id="spnBillingState"></span> <span id="spnBillingZipCode"></span></div>
                        <div id="divBillingCountry"></div>
                    </div>
                    <div class="col-sm-6 no-gutter">
                        <div id="divBillingPhone"></div>
                        <div id="divEmail"></div>
                    </div>
                </div>
            </div>
    </section>
    <section class="row checkoutPayment">
        <h3><span>3.</span>Payment Info</h3>
        <div class="col-xs-12 no-gutter">
            <div class="col-sm-6">
                <!-- Nav tabs -->
                <ul class="nav col-sm-4 right-gutter" role="tablist">
                    <li role="presentation">
                        <div class="checkoutIcon col-xs-5 col-sm-12 invoice">
                            <a href="#invoice" aria-controls="invoice" role="tab" data-toggle="tab">
                                <div class="dx-field">
                                    <div class="dx-field-value">
                                        <div id="invoiceBtn"></div>
                                    </div>
                                </div>
                            </a>
                        </div>
                    </li>
                    <li role="presentation">
                        <div class="checkoutIcon col-xs-5 col-sm-12 credit">
                            <a href="#credit" aria-controls="credit" role="tab" data-toggle="tab">
                                <div class="dx-field">
                                    <div class="dx-field-value">
                                        <div id="credit-cardBtn"></div>
                                    </div>
                                </div>
                            </a>
                        </div>
                    </li>
                </ul>
                <!-- Tab panes -->
                <div class="tab-content col-sm-7">
                    <div role="tabpanel" class="tab-pane active" id="invoice">
                        <div id="invoiceDetails"></div>
                    </div>
                    <div role="tabpanel" class="tab-pane " id="credit">
                        <div id="ccDetails"></div>
                    </div>
                </div>
            </div>
            <div class="col-sm-5">
                <div class="inputRow col-xs-12 no-gutter">
                    <div class="dx-field">
                        <div class="dx-field-label">Promotional Code:</div>
                        <div class="dx-field-value">
                            <div id="PromotionalCode"></div>
                            <div id="btnApplyPromo" class="btn btn-primary btn-sm"></div>
                        </div>
                    </div>
                    <div class="alert col-xs-12 no-gutter">
                        <p>Credit card accounts receive a pre-authorization of 10% to cover shipping costs. This will fall off when the lowest shipping rate has been calculated, similar to a hotel or gas pump.</p>
                    </div>
                </div>
            </div>
    </section>
    <section class="row clear checkoutDetails">
        <div class="col-xs-12 totalsRow">
            <div class="col-sm-12 col-md-5 col-md-offset-1">
                <div class="inputRow col-xs-12">
                    <div class="col-xs-7"><span>Subtotal</span></div>
                    <div class="col-xs-4 amount"><span id="spnSubtotal"></span></div>
                </div>
                <div class="inputRow col-xs-12">
                    <div class="col-xs-7"><span>Estimated Shipping</span></div>
                    <div class="col-xs-4 amount"><span id="spnShippingCost"></span></div>
                </div>
                <div class="inputRow col-xs-12 tax">
                    <div class="col-xs-7"><span>Estimated Taxes</span></div>
                    <div class="col-xs-4 amount"><span id="spnTax"></span></div>
                </div>
                <div class="inputRow col-xs-12 gstTax">
                    <div class="col-xs-7"><span>Estimated GST Taxes</span></div>
                    <div class="col-xs-4 amount"><span id="spnGSTTax"></span></div>
                </div>
                <div class="inputRow col-xs-12 promo">
                    <div class="col-xs-7"><span>Promotional Discount</span></div>
                    <div class="col-xs-4 amount"><span id="spnPromoValue"></span></div>
                </div>
                <div class="inputRow totalpriceRow col-xs-12">
                    <div class="col-xs-7"><span>Total</span></div>
                    <div class="col-xs-4 amount"><span id="spnOrderTotal"></span></div>
                </div>
            </div>
            <div class="col-sm-1 hidden-xs"></div>
            <div class="dx-field-value col-sm-12 col-md-4 checkoutSubmit">
                <div id="icon-submit" class="btn btn-primary btn-lgd"></div>
            </div>
        </div>
        <div class="cartDetails col-xs-12">
            <div class="cartTitles row">
                <div class="col-sm-4 productDetails">Product Details</div>
                <div class="col-sm-2  hidden-xs">Price</div>
                <div class="col-sm-2  hidden-xs">Quantity</div>
                <div class="col-sm-2  hidden-xs">Backordered</div>
                <div class="col-sm-2  hidden-xs">Total Price</div>
            </div>
            <div id="cart-grid"></div>
            <div id="btnCancel"></div>
        </div>
    </section>
</div>
<div id="popMultiAddress">
    <div id="divMultiAddressWrapper">
        <h4>Choose from the Available Ship To Addresses below.</h4>
        <div id="divMultiAddressList"></div>
    </div>
    <div id="divOneTimeAddressWrapper">
        <h4>Enter a One-Time Shipping Address below.</h4>
        <div id="divOneTimeAddressForm"></div>
    </div>
</div>
<script type="text/html" id="tmplMultiAddress">
    <div><b><%= item.FirstName + ' ' + item.LastName %></b></div>
    <div><%= item.Address1 %></div>
    <div><%= item.Address2 %></div>
    <div><%= item.Address3 %></div>
    <div><%= item.City %> <%= item.State %> <%= item.Zip %></div>
    <div><%= item.Country %></div>
</script>
<script src="js/jquery-creditcardvalidator/jquery.creditCardValidator.js"></script>