﻿/// <reference path="ext-js/ext-base.js" />
/// <reference path="ext-js/ext-all-debug.js" />

Ext.onReady(function() {
    var elements = Ext.query("*[id^=quantity-]");
    for (var i = 0; i < elements.length; i++) {
        var x = new Ext.form.NumberField({ applyTo: elements[i].id });
        Ext.get(elements[i].id).on('keydown', function(e) { return updateQuantity(this.id.split('quantity-')[1]); });
    }

    if (Ext.get("Coupon") != null && Ext.get("Coupon").getValue().trim() != "")
        ApplyCoupon();

    if( Ext.get("apply-coupon-link") != null )
    {
    	Ext.get("apply-coupon-link").on("click",
	    function() {
		ApplyCoupon();
        	return false;
    	});
 }
 
 Ext.get('purchase-previous-quote').dom.href = "javascript: void(0)";
 Ext.get('purchase-previous-quote').on('click', function() {
     Ext.MessageBox.prompt('Quote Number', 'Please enter your quote number:', purchaseQuote);
 });
 

 function purchaseQuote(btn, text) {
     if (btn == 'ok') {
         Ext.Ajax.request({
             url: '/ShoppingCart/ValidateQuoteNumber',
             method: 'POST',
             params: { orderId: (text != "" ? text : 0) },
             success: function(result, request) {
                 try {
                     if (result.responseText == "True")
                         window.location = "/ShoppingCart/QuoteToPurchase/" + text;
                     else
                         Ext.Msg.show({
                             title: 'Quote Error',
                             msg: "Invalid Quote #" + text,
                             buttons: Ext.Msg.OK
                         });
                 }
                 catch (ex) {
                     Ext.Msg.show({
                         title: 'Quote Error',
                         msg: "Error: " + ex.message,
                         buttons: Ext.Msg.OK
                     });
                 }
             },
             failure: function(result, request) {
                 Ext.Msg.show({
                     title: 'Failed',
                     msg: result.responseText,
                     buttons: Ext.Msg.OK
                 });
             }
         });
     }
 }

Ext.get('purchase-previous-invoice').dom.href = "javascript: void(0)";
Ext.get('purchase-previous-invoice').on('click', function() {
    Ext.MessageBox.prompt('Invoice Number', 'Please enter your invoice number:', purchaseInvoice);
});

function purchaseInvoice(btn, text) {
     if (btn == 'ok') {
         Ext.Ajax.request({
             url: '/ShoppingCart/ValidateInvoiceNumber',
             method: 'POST',
             params: { invoiceId: (text != "" ? text : 0) },
             success: function(result, request) {
                 try {
                     if (result.responseText == "True")
                         window.location = "/ShoppingCart/InvoiceToPurchase/" + text;
                     else
                         Ext.Msg.show({
                             title: 'Invoice Error',
                             msg: "Invalid Invoice #" + text,
                             buttons: Ext.Msg.OK
                         });
                 }
                 catch (ex) {
                     Ext.Msg.show({
                         title: 'Invoice Error',
                         msg: "Error: " + ex.message,
                         buttons: Ext.Msg.OK
                     });
                 }
             },
             failure: function(result, request) {
                 Ext.Msg.show({
                     title: 'Failed',
                     msg: result.responseText,
                     buttons: Ext.Msg.OK
                 });
             }
         });
     }
 }
});


function updateCartTotals(cart) {
    for (var i = 0; i < cart.CartItems.length; i++) {
        var item = cart.CartItems[i];
        Ext.fly("total-price-" + item.Id).update(Ext.util.Format.usMoney(item.TotalPrice));
        Ext.fly("discount-" + item.Id).update((item.CurrentDiscount * 100) + "%");
    }

    Ext.get("subtotal").update(Ext.util.Format.usMoney(cart.SubTotal));

    if (cart.DiscountAmount > 0) {
        Ext.fly("discount-row").show();
        Ext.fly("discount-amount").update("-" + Ext.util.Format.usMoney(cart.DiscountAmount));
    } else {
        Ext.fly("discount-row").setVisibilityMode(Ext.Element.DISPLAY);
        Ext.fly("discount-row").hide();
    }

    Ext.fly("total-price").update(Ext.util.Format.usMoney(cart.TotalPrice));
}

var quanityId;
function updateQuantity(itemId) {
    if (quanityId != null)
        clearTimeout(quanityId);
    quanityId = (function() { updatePrice(itemId); }).defer(200);
}

function updatePrice(id) {

    var cart;

    var quantity = Ext.get("quantity-" + id).getValue();
    if (quantity == "") quantity = 0;
    
    Ext.Ajax.request({
        url: '/ShoppingCart/UpdatePrice',
        method: 'POST',
        params: { cartId: id, quantity: quantity },
        success: function(result, request) {
            cart = Ext.decode(result.responseText);
            updateCartTotals(cart);
        },
        failure: function(result, request) {
        }
    });

    if(Ext.get("Coupon") != null && Ext.get("Coupon").getValue().trim() != "")
        ApplyCoupon();
    
    return false;
}

function ApplyCoupon() {

        Ext.Ajax.request({
            url: '/ShoppingCart/ApplyCoupon',
            method: 'POST',
            params: { couponCode: Ext.get("Coupon").getValue() },
            success: function(result, request) {
                try {

                    var result = Ext.decode(result.responseText);
                    var cart;
                    var error;

                    if (result.cart == null) {
                        cart = result;
                    }
                    else {
                        cart = result.cart;
                        error = result.error;
                    }

                    if (error == null) {
                        Ext.get("discount-amount").update(Ext.util.Format.usMoney(cart.CouponValue));
                        Ext.get("coupon-error").update("");
                    }
                    else {
                        Ext.get("discount-amount").update("");
                        
                        if(error.Value != null)
                            Ext.get("coupon-error").update(error.Value);
                            
                    }
                    updateCartTotals(cart);
                }
                catch (err) {
                    alert(err.toString() + ' Could not decode ' + result.responseText);
                }
            },
            failure: function(result, request) {
                Ext.get('result').update('Failed: ' + result.responseText);
            }
        });
    
    return false;
}