﻿
window.appendLoadEvent(function () {

    // Preload des images
    //   total
    var preloadImg1 = new Image();
    preloadImg1.src = "/ressources/_global/vpc/images/ajax-indicator_beige.gif";
    //   line
    var preloadImg2 = new Image();
    preloadImg2.src = "/ressources/_global/vpc/images/ajax-indicator_blanc.gif";
    //   inline
    var preloadImg3 = new Image();
    preloadImg3.src = "/ressources/_global/images/images_vpc/wait_inline.gif";
    //   checkGiftCard
    var preloadImg4 = new Image();
    preloadImg4.src = "/ressources/_global/images/images_vpc/bt_verifier_encours.gif";
    //   shippingCost
    var preloadImg5 = new Image();
    preloadImg5.src = "/ressources/_global/vpc/images/ajax-indicator.small.gif";
    //   spin-buttons
    //     min reached
    var preloadImg6 = new Image();
    preloadImg6.src = "/ressources/_global/vpc/images/images_vpc/spinbtn_updn_min_reached.gif";
    //     up and down
    var preloadImg7 = new Image();
    preloadImg7.src = "/ressources/_global/vpc/images/images_vpc/spinbtn_updn.gif";
    //     max reached
    var preloadImg8 = new Image();
    preloadImg8.src = "/ressources/_global/vpc/images/images_vpc/spinbtn_updn_max_reached.gif";
    
    var fr = $id('form:basket:main');
    
    if (!fr) {
        return;
    }
    
    $(fr).find("input:submit,input:image").click(function(ev) {
        this.form.clk = this;
        
        if (ev.offsetX != undefined) {
            this.form.clk_x = ev.offsetX;
            this.form.clk_y = ev.offsetY;
        } else if (typeof jQuery.fn.offset == 'function') { // try to use dimensions plugin
            var offset = $(this).offset();
            this.form.clk_x = ev.pageX - offset.left;
            this.form.clk_y = ev.pageY - offset.top;
        } else {
            this.form.clk_x = ev.pageX - this.offsetLeft;
            this.form.clk_y = ev.pageY - this.offsetTop;
        }
        
    });
    /*
    $(fr).bind('submit', function(event) {
        this.$.ajax.perform();
        return false;
    });
    */
    
    
    fr.$ = {
        form: fr,
        images: {
            waiting: {
                total: '/ressources/_global/vpc/images/ajax-indicator_blanc.gif',
                line: '/ressources/_global/vpc/images/ajax-indicator_blanc.gif',
                inline: '/ressources/_global/vpc/images/ajax-indicator.gif',
                checkGiftCard: '/ressources/_global/vpc/images/ajax-indicator_blanc.gif',
                shippingCost: '/ressources/_global/vpc/images/ajax-indicator.small.gif'
            },
            original: {}
        },
        ajax: {
            errors: {
                contenerId: 'errors_contener_basket',
                ajaxClass: 'ajax_errors'
            },
            info: {
                contenerId: 'info_contener_basket',
                ajaxClass: 'ajax_info'
            },
            inAction: false,
            buffer: document.createElement('div'),
            mustRecall: false,
            preCallback: function () {return true;},
            call: function () {
                var fr = $id('form:basket:main');
                
                
                fr.$._spin.inputId.forEach(function (inputId) {
                    var fr = $id('form:basket:main');
                    
                    if (!fr.$._spin.timerId[inputId]) {
                        return;
                    }
                    
                    window.clearInterval(fr.$._spin.timerId[inputId]);
                });
                
                var ajaxFlag = '&ajax_basket=on';
                
                if (fr.action.indexOf('?') < 0) {
                    ajaxFlag = '?ajax_basket=on';
                }
                
                fr.$.ajax.buffer = null;
                fr.$.ajax.buffer = document.createElement('div');
                
                $(fr).ajaxSubmit(
                    fr.$.ajax.buffer,
                    function (data) {
                        var fr = $id('form:basket:main');
                        fr.$.ajax.inAction = false;
                        fr.$.ajax.mustRecall = false;
                        
                        // les erreurs
                        //alert(fr.$.ajax.buffer.innerHTML);
                        $('#' + fr.$.ajax.errors.contenerId).empty()
                        
                        var errors = $(fr.$.ajax.buffer).find('div.' + fr.$.ajax.errors.ajaxClass).get();
                        var hasErrors = false;
                        
                        if (0 < errors.length) {
                            if (!errors.nodeName) {
                                errors = errors[0];
                            }
                            hasErrors = true;
                            
                            $('#' + fr.$.ajax.errors.contenerId).append(errors);
                            
                            $(fr.$.ajax.buffer).find('div.' + fr.$.ajax.errors.ajaxClass).remove();
                            
                        }
                        
                        $('#' + fr.$.ajax.info.contenerId).empty()
                        var info = $(fr.$.ajax.buffer).find('div.' + fr.$.ajax.info.ajaxClass).get();
                        var hasInfo = false;
                        
                        if (0 < info.length) {
                            if (!info.nodeName) {
                                info = info[0];
                            }
                            
                            hasInfo = true;
                            
                            $('#' + fr.$.ajax.info.contenerId).append(info.innerHTML);
                            
                            $(fr.$.ajax.buffer).find('div.' + fr.$.ajax.info.ajaxClass).remove();
                            
                        }
                        
                        
                        if (fr.$.ajax.mustRecall == true) {
                            fr.$.ajax.mustRecall = false;
                            fr.$.ajax.call();
                            return;
                        }
                        
                        var txt = '';
                        var tmp = $(fr.$.ajax.buffer).get();
                        if (0 < tmp.length) {
                            tmp = tmp[0];
                            txt = tmp.innerHTML;
                        }
                        
                        
                        
                        $(fr).find('div.form_contener').empty().append(txt);
                        
                        
                        fr.$.updateFields();
                        
                        
                        fr.$.ajax.after(hasErrors, hasInfo);
                        
                        
                    },
                    fr.$.ajax.preCallback,
                    fr.action + ajaxFlag
                );
            },
            before: function () {
                var fr = $id('form:basket:main');
                var btn = $id('basket:order:start');
                
                $(btn).bind('click', function () {
                    return false;
                });
                
                var price = $id('total_price');
                $(price).empty().append('<img src="' + fr.$.images.waiting.total + '" alt="..."  />')
                
            },
            after: function () {
                var fr = $id('form:basket:main');
                var btn = $id('basket:order:start');
                
                var errors = $coalesce(arguments[0], false);
                var info = $coalesce(arguments[1], false);
                
                
                $(btn).unbind('click');
                
                if (errors == true) {
                    //$('#' + fr.$.ajax.errors.contenerId).ScrollTo('slow');
                    
                } else if (info == true) {
                    //$('#' + fr.$.ajax.info.contenerId).ScrollTo('slow');
                    
                }
                
                
            },
            perform: function () {
                var fr = $id('form:basket:main');
                
                
                if (fr.$.ajax.inAction == true) {
                    fr.$.ajax.mustRecall = true;
                    return;
                }
                this.inAction = true;
                
                fr.$.ajax.before();
                fr.$.ajax.preCallback = $coalesce(arguments[0] || null, function () {return true;});
                
                setTimeout(function () {
                    var fr = $id('form:basket:main');
                    
                    fr.$.ajax.call();
                    
                }, 10);
                
                
                
                
            }
            
            
        },
        
        _spin: {
            last: {},
            timerId: {},
            inputId: [],
            delay: 500,
            perform: function (inputId) {
                var self = $id('form:basket:main');
                
                window.clearInterval(self.$._spin.timerId[inputId]);
                self.$._spin.timerId[inputId] = null;
                self.$._spin.last[inputId] = null;
                
                var fr =$id('form:basket:main'); 
                
                if (fr.$.ajax.inAction == true) {
                    return;
                }
                
                
                $($id(inputId.replace(':qte', ':price')))
                    .empty()
                    .append('<img src="' + fr.$.images.waiting.line + '" alt="..."  />')
                
                
                // on submit le formulaire...
                fr.$.ajax.perform();
                
            },
            update: function (inputId, newValue, oldValue) {
                $($id(inputId)).removeClass('spin-button-min-reached').removeClass('spin-button-max-reached');
                
                if (newValue == 1) {
                    $($id(inputId)).addClass('spin-button-min-reached');
                    
                } else if (newValue == 100) {
                    $($id(inputId)).addClass('spin-button-max-reached');
                    
                }
                
                if (newValue == oldValue) {
                    return;
                }
                
                var self = $id('form:basket:main');
                var currentDate = new Date();
                var currentTimestamp = currentDate.getMilliseconds();
                
                
                self.$._spin.last[inputId] = currentTimestamp;
                
                if (!!self.$._spin.timerId[inputId]) {
                    window.clearInterval(self.$._spin.timerId[inputId]);
                    self.$._spin.timerId[inputId] = null;
                }
                var iid = inputId;
                
                self.$._spin.timerId[inputId] = window.setInterval(function () {
                    self.$._spin.perform(iid);
                }, self.$._spin.delay);
                
                if (self.$._spin.inputId.indexOf(inputId) < 0) {
                    self.$._spin.inputId.push(inputId);
                }
                
            }
        },
        
        updateFields: function () {
            if (window.navigator
                    && window.navigator.vendor
                    && window.navigator.vendor.toLowerCase().trim() == 'firefox') {
                var vs = window.navigator.vendorSub.split('.');
                if (((vs.length < 2) && (vs[0] < 2))
                        || ((vs[0] < 2) && (vs[1] < 2))) {
                    $(fr).find('input.spin-button').each(function () {
                        this.autoComplete = false;
                    }).SpinButton({
                        min: 1,
                        max: 100,
                        step: 1,
                        reset : 1
                    });
                    return true;
                }
            }
            
            // spin button
            var fr = $id('form:basket:main');
            
            $('#recompute').css({
                'visibility' : 'hidden'
            });
            
            if ($.browser.safari) {
                $(fr).find('input.spin-button')
                    .each(function () {
                        this.readOnly = true;
                        this.autoComplete = false;
                        
                    })
                    .removeClass('spin-button')
                    .addClass('short_input')
                    .each(function () {
                        var self = this;
                        
                        $(this).siblings('a.spin-button-up:hidden').bind('click', function () {
                            var value = Number.parse.integer(self.value);
                            if (99 < value) {
                                return;
                            }
                            self.value = value + 1;
                            $id('form:basket:main').$._spin.update(self.id, newValue, oldValue);
                            return false;
                        }).each(function () {
                            this.href = 'javascript://';
                        }).show();
                        
                        $(this).prev('a.spin-button-down:hidden').bind('click', function () {
                            var value = Number.parse.integer(self.value);
                            if (value < 1) {
                                return;
                            }
                            self.value = value - 1;
                            $id('form:basket:main').$._spin.update(self.id, newValue, oldValue);
                            return false;
                        }).each(function () {
                            this.href = 'javascript://';
                        }).show();
                        
                    });
                    
                
            } else {
                $(fr).find('input.spin-button').each(function () {
                    //this.readOnly = true;
                    this.autoComplete = false;
                    
                }).SpinButton({
                    min: 1,
                    max: 100,
                    step: 1,
                    reset : 1,
                    onAdjustValue: function (newValue, oldValue) {
                        $id('form:basket:main').$._spin.update(this.id, newValue, oldValue);
                    }
                });
                
            }
            
            var standardFunc = function (imgSrc) {
                return function () {
                    var self = this;
                    setTimeout(function () {
                        var fr = $id('form:basket:main');
                        
                        $(self)
                            .after('<img src="' + imgSrc + '" alt="..."  />')
                            .after('<input type="hidden" value="on" name="'+self.name+'"  >');
                        
                        self.parentNode.removeChild(self);
                        
                        fr.$.ajax.perform();
                    }, 10);
                    return false;
                }
            }
            
            var standardFuncInline = function (imgSrc) {
                return function () {
                    var self = this;
                    setTimeout(function () {
                        var fr = $id('form:basket:main');
                        
                        $(self)
                            .after('<img src="' + imgSrc + '" alt="..." style="vertical-align:middle;" />')
                            .after('<input type="hidden" value="on" name="'+self.name+'"  >');
                        
                        self.parentNode.removeChild(self);
                        
                        fr.$.ajax.perform();
                    }, 10);
                    return false;
                }
            }
            
            var standardFuncBtVerif = function (imgSrc) {
                return function () {
                    var self = this;
                    setTimeout(function () {
                        var fr = $id('form:basket:main');
                        
                        $(self)
                            .after('<input src="' + imgSrc + '" alt="..." class="bt_verifier cursor_lien" type="image"/>')
                            .after('<input type="hidden" value="on" name="'+self.name+'"  >');
                        
                        self.parentNode.removeChild(self);
                        
                        fr.$.ajax.perform();
                    }, 10);
                    return false;
                }
            }
            
            // remove / select product...
            $(fr).find('input.remove_product, input.select_product, button.remove_product').unbind('click').bind('click',
                    standardFuncInline(fr.$.images.waiting.inline));
            
            $(fr).find('input.basket_calc').unbind('click').bind('click',
                    standardFunc(fr.$.images.waiting.line));
            
            if ($id('basket:gift-card:post')) {
                $(fr).find($id('basket:gift-card:post')).unbind('click').bind('click',
                    standardFuncBtVerif(fr.$.images.waiting.checkGiftCard));
            }
            
            $(fr).find('input.remove_gift_card, button.remove_gift_card').unbind('click').bind('click',
                    standardFunc(fr.$.images.waiting.line));
            
            
            
            $($id('basket:gift-card:new')).unbind('keyup').bind('keypress', function (event) {
                if (event.keyCode != 13) {
                    return;
                }
                event.preventDefault();
                event.stopPropagation();
                
                setTimeout(function () {
                    $($id('basket:gift-card:post')).trigger('click');
                }, 10);
                
                return false;
            });
            
            $(fr).find('select.shipping_country').unbind('change').bind('change', function () {
                var self = this;
                setTimeout(function () {
                    var fr = $id('form:basket:main');
                    
                    $('#shipping_cost')
                        .empty()
                        .append('<img class="image" src="' + fr.$.images.waiting.shippingCost + '" alt="..."  />');
                    
                    fr.$.ajax.perform();
                }, 10);
                //return true;
            });
            
            
            $(fr).find('input.packaged_product').unbind('click').bind('click', function () {
                var fr = $id('form:basket:main');
                var btn = $id('basket:package:choose');
                
                //var contener = $id(this.id + ':message');
                var contener1 = $id(this.id + ':message');
                var contener2 = $id(this.id + ':label');
                //alert(this.id);
                
                $(contener1).css('visibility', 'visible');
                $(contener2).empty().append(
                    '<img src="' + fr.$.images.waiting.inline + '" alt="..." style="vertical-align:middle;" />');
                
                fr.$.ajax.perform();
                return true;
                
                var lst = $(fr).find('input.packaged_product').get();
                
                
                
                if (lst.every(function (element) {
                    return !element.checked;
                })) {
                    btn.disabled = true;
                    $(fr).find('div.go_to_package_cont').addClass('disabled');
                    $($id(this.id+':message')).css({'visibility':'hidden'});
                    $('#ssttle_btn').empty().append('Vers les Infos Livraison');
                } else {
                    btn.disabled = false;
                    $(fr).find('div.go_to_package_cont').removeClass('disabled');
                    $($id(this.id+':message')).css({'visibility':'visible'});
                    $('#ssttle_btn').empty().append('Vers le choix des paquets cadeaux');
                }
                
                
                
            });
            
            
            
        }
    }
    
    
    
    fr.$.updateFields();

});
