﻿var Basket = new Object;
var total_discount = 0;
var blockType = null;

var HtmlUpdate = function(jQobjects,callback) {
    var callback = callback || function(){};
    $.each(jQobjects,function(){
        var id = $(this).attr('id');
        $('#'+id).html($(this).children());
        callback($(this));
    });
    
};

Basket = {
    ShowImage: function (img) {
        //$('.basket-image img').attr("src","/Admin/Public/GetImage.aspx?Image=%2fFiles%2fTemplates%2fDesigns%2fshop%2fdemo%2f" + img + "&Height=166");
    },
    request: function (url, callback) {
        var data = {};
        $.ajax({
            url: url,
            beforeSend: function (xhr) { ajaxloader.start(xhr); },
            timeout: 120000,
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr);
            },
            success: function () {
                $.ajax({
                    url: global.url.CurrentPage,
                    timeout: 120000,
                    success: function (data) {
                        Basket.update(data);
                        if ($('#filter').size()) {
                            filterSubmit();
                        } else {
                            Basket.checkout.update(data);
                        };
                    }
                });
            }
        });
    },

    cartCmd: function (cmd, prod, key) {
        var isProductPage = global.url.CurrentPage.indexOf(global.url.ProductPage) == 0 || global.url.CurrentPage.indexOf('/Product/') > 0 ;
        var isBasketPage = global.url.CurrentPage.indexOf(global.url.BasketPage) == 0;
        var isShopPage = global.url.CurrentPage.indexOf(global.url.GroupsPage) == 0 || (!isProductPage && !isBasketPage && global.url.CurrentPage.indexOf('/Shop/') > 0) || $('body').hasClass('pageid-1');
        var isSearchPage = global.url.CurrentPage.indexOf(global.url.ProductSearch) == 0 || (!isProductPage && !isBasketPage && global.url.CurrentPage.indexOf('/Search') > 0);
        var post = Basket.defineCmdUrl(isShopPage, isProductPage, cmd, prod, key, isSearchPage);
        $.ajax({
            url: post,
            cache: false,
            beforeSend: function (xhr) { ajaxloader.start(xhr); },
            timeout: 120000,
            error: function (xhr, ajaxOptions, thrownError) {
                ajaxloader.stop();
                ajax_send_error();
            },
            success: function (data, statusText, xhr, form) {
                if ($('.search-basket-action').size()) {
                    search_request();
                }
                ajaxloader.stop();

                if (isShopPage || isSearchPage || isBasketPage)
                    Basket.updateProductList(data,prod);
                else {
                    Basket.updateProduct(data, this.url, isProductPage);
                };
                Basket.update(data);

            }
        });
    },

    defineCmdUrl: function (isShopPage, isProductPage, cmd, prod, key, isSearchPage) {
        var post = global.url.AjaxProduct;
        
        if (blockType=='AjaxProductThumb' || isShopPage || isSearchPage || global.url.CurrentPage==global.url.BasketPage || global.url.CurrentPage=='/LIC-Sverige/Hem.aspx') {
            //post = global.url.GroupsPageClean;
            //if (isSearchPage) {
            //    post = global.url.ProductSearchClean;
            //};
            //post += post.indexOf("?") > 0 ? "&" : "?";
            //post += $('#EcomSearch').serialize();
            post = global.url.AjaxProduct;
            post += post.indexOf("?") > 0 ? "&" : "?";
            post += 'cartcmd=' + cmd + "&ProductID=" + prod;
            if (key && key.length > 0) {
                post += post.indexOf("?") > 0 ? "&" : "?";
                post += "key=" + key;
            };
            post += '&Redirect=' + escape(global.url.AjaxProduct+"?ProductID="+prod);
            
        } else {
            if (isProductPage) {
                post = global.url.ProductPageClean;
            };
            post += post.indexOf("?") > 0 ? "&" : "?";
            post += 'cartcmd=' + cmd + "&ProductID=" + prod;
            if (key && key.length > 0) {
                post += post.indexOf("?") > 0 ? "&" : "?";
                post += "key=" + key;
            };
            post += post.indexOf("?") > 0 ? "&" : "?";
            post += 'Redirect=' + escape(global.url.CurrentPage);
        };
        //post += post.indexOf("?") > 0 ? "&" : "?";
        //post += 'cartcmd=' + cmd + "&ProductID=" + prod;
        

        
        
        return post;
    },

    getBlockId: function (url) {
        var index = url.indexOf("&ProductID=");
        if (index > 0) {
            url = url.substr(index + "&ProductID=".length, url.length);
            index = url.indexOf("&");
            if (index > 0)
                url = url.substr(0, index);
            return url;
        }
        return '';
    },

    updateProductList: function (data,prod) {
        var new_content = $(data).find('#prod_'+prod);
        
        var callback  = function () {
            if (global.url.CurrentPage==global.url.BasketPage) {
                
                if (!$(new_content).hasClass('incart')) {
                    $('#prod_'+prod).remove();
                    
                    if (!$('.checkout-container .prod-thumb').size()) {
                        window.location  = '/';
                    };
                };
            } else {
                if ($(new_content).hasClass('incart')) {
                    $('#prod_'+prod).addClass('incart');
                } else {
                    $('#prod_'+prod).removeClass('incart');
                };
            };
            
            selectBoxes_init();
            page_height();
            product_view.current();
            if ($('.prod-thumb.view-block').size() > 0) title_view.apply_short();
            product_images.init();
            title_view.generate();
            title_view.apply_short();
            Compare.init();
            if ($(".compare-products").length > 0)
                Compare.compare();
        };
        
        HtmlUpdate(new_content,callback);
    },

    updateProduct: function (data, url, isProductPage) {
        var blockId = Basket.getBlockId(url);
        if (blockId && blockId.length > 0) {
            var id = ".prod_" + blockId;
            var from = $(data).find(id);
            var to = $(id);
            if (to && to.length > 0) {
                if (from && from.length > 0) {
                    to.html(from.html());
                    if (from.hasClass('incart') && !to.hasClass('incart'))
                        to.addClass('incart');
                    else if (!from.hasClass('incart') && to.hasClass('incart'))
                        to.removeClass('incart');
                }
                else
                    to.remove();
            }
            else {
                if (!isProductPage) $(".ajaxcontent-wrap").html($(data).find(".ajaxcontent-wrap").html());
            }
        }
        if (isProductPage && blockType == null) {
            $(".product").attr('class', $(data).find(".product").attr('class'));
            $(".product-cost-wrap").html($(data).find(".product-cost-wrap").html());
        }
        title_view.generate();
        title_view.apply_short();
    },

    checkIsBasketEmpty: function (data) {
        if ($(data).find(".prod-thumb").length == 0) {
            window.location = '/';
            return true;
        }
        return false;
    },

    emptyRedirect: function () {
        var emptyUrl = "/Default.aspx?CartCmd=EmptyCart";
        $.ajax({
            url: emptyUrl,
            beforeSubmit: ajaxloader.start(),
            timeout: 120000,
            error: function (xhr, ajaxOptions, thrownError) {
                ajaxloader.stop();
                ajax_send_error();
            },
            success: function (data, statusText, xhr, form) {
                ajaxloader.stop();
                window.location = '/';
            }
        });
        return false;
    },

    update: function (data) {
        var newbasket = $(data).find('.basket-wrapper');
        $('.basket-wrapper').remove();
        $('.basket').append($(newbasket));
        Basket.discount();
        Basket.fx.stop();
        Basket.foldout();
    },
    discount: function () {
        var data = 0;
        $('.discount-data').each(function () {
            data = data + parseFloat($(this).text());
        });
        data = data * -1;
        if (!data) {
            data = "0.00"
        };
        $('.basket-yousave span').text(data);
    },
    foldout: function () {
        if ($('.basket-item-hidden').size()) {
            if (!$('.basket-item-wrap').size()) {
                $('.basket-item-hidden').wrapAll('<div class="basket-item-wrap"></div>');
            };
            $('.basket-open-full').show();
        };
    },
    checkout: {
        request: function (orderid, CartCmd) {
            var data = {};
            data.CartCmd = CartCmd;
            data.key = orderid;
            $.ajax({
                url: '/Default.aspx',
                beforeSend: Basket.checkout.fx.start(),
                timeout: 120000,
                data: data,
                success: function () {
                    $.ajax({
                        url: global.url.CurrentPage,
                        timeout: 10000,
                        success: function (data) {
                            if ($('#filter').size()) {
                                filterSubmit();
                                Basket.update(data);
                            } else {
                                Basket.checkout.update(data);
                            };
                        }
                    });
                }
            });
        },
        update: function (data) {
            Basket.update(data);
            if ($(data).find('#basket-null').size()) {
                
            } else {
                var ajaxcontent = $(data).find('.ajaxcontent-wrap');
                var ajaxcontent_important = $(data).find('.important-ajaxcontent-wrap');
                if (ajaxcontent_important.size()) {
                    $('.important-ajaxcontent-wrap').remove();
                    $('.important-ajaxcontent').append(ajaxcontent_important);
                } else {
                    $('.ajaxcontent-wrap').remove();
                    $('.ajaxcontent').append(ajaxcontent);
                };
                selectBoxes_init();
                page_height();
                Basket.checkout.fx.stop();
                product_view.current();
                title_view.generate();
                if ($('.prod-thumb.view-block').size() > 0) title_view.apply_short();
                product_images.init();
                Basket.foldout();
                LookedProducts.save();
            }

        },
        fx: {
            start: function () {
                ajaxloader.start();
                Basket.fx.start(),
                $('.checkout-wrapper').css('opacity', '0.5');
            },
            stop: function () {
                ajaxloader.stop();
                $('.checkout-wrapper').css('opacity', '1');
            }
        }
    },
    fx: {
        start: function () {
            ajaxloader.start();
            $('.basket').css('opacity', '0.5');
        },
        stop: function () {
            ajaxloader.stop();
            $('.basket').css('opacity', '1');
        }
    }
};

var Checkout = {
    FormValidator: {
        step2: function() {
            if (typeof($(this).validate)=='function'){
                $('#ordersubmit-step2').validate({
                    rules: {
                        EcomOrderCustomerEmail: {
                            required: true,
                            email: true
                        },
                        EcomOrderCustomerName: "required",
                        EcomOrderCustomerLastname: "required",
                        EcomOrderCustomerAddress: "required",
                        EcomOrderCustomerZip: "required",
                        EcomOrderCustomerCity: "required",
                        EcomOrderCustomerAccepted: "required"
                    }
                });
            };
        }
    },
    init: function() {
        Checkout.FormValidator.step2();
    },
    payment_load: function() {
        var post = $('#ordersubmit').serialize()+'&CartV2.GotoStep2=Next';
        $.ajax({
            url: global.url.BasketPage,
            data: post,
            type: 'post',
            error: function(){
                $('#iModal-background').remove();
                ajaxloader.stop();
                ajax_send_error();
            },
            timeout: 120000,
            beforeSend: function (xhr) { ajaxloader.start(xhr); },
            success: function(html) {
                $('#iModal-background').remove();
                var paymentgate_data = $(html).find('#paymentgateform').serialize();
                var cancelurl = $(html).find('#cancelurl').val();
                $('body').data('cancelurl',cancelurl);
                $('body').append('<div id="iModal-background"></div>');
                $('body').append('<div id="payment-iframe-close" class="icon-close"></div>');
                var scrolling = 'no';
                if(navigator.userAgent.search(/msie/i)!= -1) {
                    scrolling='yes';
                };
                $('body').append('<iframe id="payment-iframe" src="https://payment.architrade.com/paymentweb/start.action?'+paymentgate_data+'" width="778" height="363" frameborder="0" border="0" scrolling="'+scrolling+'"></iframe>');
                $('#payment-iframe').load(function(){
                    ajaxloader.stop();
                });
            }
        });
    }
};

var ShippingMetod = {
    init: function () {
        this.current();
        this.change();
    },
    current: function () {
        var data = $('[name = EcomCartShippingmethodID]:checked').attr('price');
        if (data) {
            var CurrencySymbol = $('[name = EcomCartShippingmethodID]:checked').attr('currency');
            data = this.parseF(data);
            $('#basket-shipping').text(this.formatN(data.toFixed(2)));

            var total = this.parseF($('#basket-total').attr('data'));

            var totalbasket = (total + data).toFixed(2);
            totalbasket = CurrencySymbol + ' ' + this.formatN(totalbasket);
            $('.basket-total-data').html(totalbasket);

        };
    },

    parseF: function (val) {
        var dbg = val + '-> ';
        val = val.replace(/[^\-\d\,\.]/g, "");
        dbg += val + '-> ';
        var indexD = val.indexOf('.');
        var indexC = val.indexOf(',');
        if (indexD > 0 && indexC > 0) {
            if (indexD > indexC)
                val = val.replace(/\,/g, '');
            else
                val = val.replace(/\./g, '');
        }
        dbg += val + '-> ';
        val = val.replace(/\,/g, '.');
        dbg += val + '-> ';
        dbg += parseFloat(val);
        return parseFloat(val);
    },

    change: function () {
        $('[name = EcomCartShippingmethodID]').change(function () {
            ShippingMetod.current();
        });
    },

    formatN: function (num) {
        var separator = $("#decimal-separator");
        if (separator && separator.length > 0 && num.indexOf(separator) < 0) {
            separator = separator.val();
            num = num.replace(/\./g, separator);
            num = num.replace(/\,/g, separator);
            return num;
        }
        return num;
    }
};

$(document).ready(function() {
    Basket.foldout();
    Checkout.init();
    ShippingMetod.init();
    
    $('.addtobasket-buttons .buy').live('click', function () {
        var pid = $(this).attr('prodid');
        
        if ($(this).parents('.wrapper').length>0) {
            blockType = 'AjaxProductThumb';
        } else {
            blockType = null;
        };
        Basket.cartCmd('add', pid);
        return false;
    });

    $('.addtobasket-buttons .remove').live('click', function () {
        var orderid = $(this).attr('orderid');
        var pid = $(this).attr('prodid');
        var total = parseInt($(this).attr('total'));
        if (total) {
            if (total == 1) {
                Basket.cartCmd('DelOrderLine', pid, orderid);
            } else {
                Basket.cartCmd('DecOrderLine', pid, orderid);
            };
        };
        return false;
    });
       
    $('.addtobasket-buttons .add').live('click',function(){
        var total = parseInt($(this).attr('total'));
        if (total) {
            var orderid = $(this).attr('orderid');
            var pid = $(this).attr('prodid');
            Basket.cartCmd('IncOrderLine', pid, orderid);
        };
        return false;
    });
    
      
    $('.basket-checkout form').attr("action",global.url.BasketPage);
       
    var sum = 0;
    $('.basket-item-discount').each(function() {
        sum += parseInt(this.innerHTML);
    });
    
    $('.basket-yousave span').innerHTML = sum * -1;
    
    $('.basket-open-full').live('click',function(){
        $('.basket-item-wrap').slideToggle(500);
        $(this).toggleClass("active");
    });
    
    $('.checkout-empty').live('click',function(){
        $.ajax({
            url: '/Default.aspx?CartCmd=EmptyCart',
            timeout: 120000,
            beforeSend: function (xhr) { ajaxloader.start(xhr); },
            success: function() {
                ajaxloader.stop();
                window.location = '/';
            }
        });
    });
    
    $('.basket-bonus a').live('click',function(e){
        var url = document.location.href;
        url += url.indexOf("?") > 0 ? "&" : "?";
        url += "usebonus=1&CartV2.GotoStep1=Next";
        document.location.href = url;
        return false;
    });
    
    $('#GotoStep1Link').live('click',function(){
        $('#GotoStep1Form').attr('action',global.url.BasketPage).submit();
        return false;
    });
    
});


