﻿/// <reference path="jquery-1.4.2.min-vsdoc.js" />
//This script file includes all javascript functions needed for this site, call functions from "jquery.document.ready.js"

//UPDATE SMALL CART
$.updateSmallCart = function (o) {
    var cart = $.extend({
        container: '#cart.small',
        url: gBaseUrl + 'GLOBAL-AJAX/BasketSmall.aspx?fc=' + $.forceCache(),
        updateStatus: true,
        updateBigCart: true
    }, o);

    if (cart.updateBigCart) {
        if (cart.updateStatus)
            $.ajaxLoadingStatus({ update: true, text: $.tr('Uppdaterar kundkorg, var god vänta.') });
        if (!cart.updateStatus)
            $.ajaxLoadingStatus({ text: $.tr('Uppdaterar kundkorg, var god vänta.') });
    }
    $.ajax({
        url: cart.url,
        success: function (p) {
            $(cart.container).html($(p).find(cart.container));
            if (cart.updateBigCart) {
                $.ajaxLoadingStatus({ create: false, update: false });
            }
            $('#showBigCartButton').toggleBigCart();
            $('#isShowPriceWithVAT').isShowPriceWithVAT();
            $('#updateLatestRowNoteButton').bindLatestRowNoteButton();
            $.selectActiveCart();
            if (afterCartUpdatedCallback != undefined) {
                afterCartUpdatedCallback();
                afterCartUpdatedCallback = undefined;
            }
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
        }
    });
}

$.fn.bindLatestRowNoteButton = function () {
    var artnr, artquant, artref, newref;
    $(this).click(function () {
        artnr = $('#updateEditTextArticleNo').val();
        artquant = $('#updateEditTextQuantity').val();
        artref = $('#updateEditTextCustomerReferense').val();

        newref = prompt($.tr('Ange notis:'), artref);

        if (newref != null && newref != artref) {
            $.ajaxLoadingStatus({ text: $.tr('Uppdaterar notis, var god vänta.') });
            $.ajax({
                type: 'GET',
                contentType: 'application/json',
                url: '/webservices/basketservice.svc/UpdateBasket?articleNo=' + artnr + '&quantity=' + artquant + '&ediText=' + newref,
                dataType: 'json',
                processData: false,
                success: function (result) {
                    if (result != null && result.d != null && result.d.Success) {
                        if (result.d.ErrorMessage != null) {
                            alert(result.d.ErrorMessage);
                        }
                        $.updateSmallCart();
                    }
                    else {
                        $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
                        $.ajaxLoadingStatus({ create: false, update: false });
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
                }
            });
        }

    });
}

$.selectActiveCart = function () {
    $('#basket' + $('#ActiveBasketOrderId').val()).attr("selected", "selected");
}




//TOGGLE BIG CART
var $cart;
$.fn.toggleBigCart = function (o) {
    try {
        var settings = $.extend({
            cartSize: [940, ''],
            cartPosXY: ['', 69]
        }, o);

        $(this).click(function () {
            try {
                if ($cart) {
                    $.toggleOverylay(); //hiding overlay
                    $.updateSmallCart({ updateStatus: false });
                    $cart.remove();
                    $cart = undefined;
                }
                else {
                    //getting window width and hight and saving to array
                    var ws = [$(window).width(), $(window).height()];

                    //calling function to calculate new cart position, function returns array with x and y cordinates
                    var cp = $.calculateCartPosition(ws, settings.cartSize, settings.cartPosXY);

                    if (isNaN(parseInt(settings.cartSize[1])))
                        var tmph = 'auto';
                    else
                        var tmph = settings.cartSize[1] + 'px';

                    $cart = $('<div />').css({
                        'position': 'absolute',
                        'left': cp[0] + 'px',
                        'top': cp[1] + 'px',
                        'width': settings.cartSize[0] + 'px',
                        'height': tmph,
                        'background': '#c5c5c5'
                    }).html('&nbsp;').prependTo('body').hide();

                    $cart.updateBigCart({
                        oncall: function () {
                            $.ajaxLoadingStatus({ text: $.tr('Hämtar kundkorg, var god vänta.') });
                        },
                        callback: function () {
                            $.ajaxLoadingStatus({ update: false, create: false });
                            $cart.show(); //showing cart
                            $.toggleOverylay({ lock: false }); //showing overlay
                            $cart.css({
                                'z-index': (parseInt($overlay.css('z-index')) + 1)
                            });
                        }
                    });
                }
            } catch (e) {
                $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle öppnas.'));
            }
        });

        //helpers
        $.calculateCartPosition = function (w, c, p) {
            //calculation X cordinates
            if (!isNaN(parseInt(c[0])) && isNaN(parseInt(p[0])))
                var cx = (w[0] / 2) - (c[0] / 2);
            else
                var cx = p[0];
            //calculation Y cordinates
            if (!isNaN(parseInt(c[1])) && isNaN(parseInt(p[1])))
                var cy = ((w[1] / 2) - (c[1] / 2)) + $(document).scrollTop();
            else
                var cy = p[1] + $(document).scrollTop();

            return [cx, cy];
        }
    }
    catch (e) {
        $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle öppnas.'));
    }
}




//CREATE BIG CART
$.fn.updateBigCart = function (o) {
    var $t = $(this);
    var $d, $close, $save, $print, $update, $orders, $deleterow, $note, $modified, $cri, $crv, ccr, mod, successful;
    var s = $.extend({
        oncall: false,
        callback: false
    }, o);

    if ($.isFunction(s.oncall))
        s.oncall();

    $.ajax({
        url: gBaseUrl + 'GLOBAL-AJAX/BasketBig.aspx?fc=' + $.forceCache(),
        success: function (p) {
            $d = $($(p).find('#AJAXcontainer').html());
            $t.html($d);

            //Getting, checking and setting customer reference
            $crv = $d.find('#CustomerReferenceValue');
            $cri = $d.find('#CustomerReferenceInput');

            if ($crv.val() == '<!--@Softgear:ActiveBasket:CustomerReference-->')
                $crv.val('');

            if ($crv.val() != '')
                $cri.val($crv.val());

            ccr = $cri.val();

            //grabbing buttons
            $close = $d.find('#closebutton, #closebutton2');
            $save = $d.find('#savebutton, #savebutton2');
            $print = $d.find('#printbutton, #printbutton2');
            $update = $d.find('#updatebutton, #updatebutton2');
            $order = $d.find('#orderbutton, #orderbutton2');
            $deleterow = $d.find('.layer2 .button.delete');
            $note = $d.find('.layer2 .actions .button.note');

            //binding price pop
            $d.find('.cartPricepop').offerPricesPopup({modifyOverlay: false});

            //binding buttons to functions
            //close
            $close.toggleBigCart();
            //UPDATE
            $update.click(function () {
                $modified = $t.find('tr.pending');
                mod = $.makeArray($modified);
                $modified = undefined;

                //updating customer refrence if changed
                if (ccr != $cri.val()) {
                    $t.hide();
                    $.ajaxLoadingStatus({ text: $.tr('Uppdaterar kundreferens till:') + ' "' + $cri.val() + '"', modifyOverlay: false });
                    $.ajax({
                        type: 'GET',
                        contentType: 'application/json',
                        url: '/webservices/basketservice.svc/SetCustomerReference?reference=' + encodeURI($cri.val()),
                        dataType: 'json',
                        processData: false,
                        success: function () {
                            if (mod.length == 0) {
                                $t.updateBigCart({
                                    oncall: function () {
                                        $.ajaxLoadingStatus({ update: true, text: $.tr('Uppdaterar kundkorg, var god vänta.'), modifyOverlay: false });
                                    },
                                    callback: function () {
                                        $.ajaxLoadingStatus({ update: false, create: false, modifyOverlay: false });
                                        $t.show();
                                    }
                                });
                            }
                            else {
                                $.ajaxLoadingStatus({ update: true, text: $.tr('Kundreferens uppdaterad'), modifyOverlay: false });
                            }
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $.showErrorMessage($.tr('Ett fel uppstod när kundreferensen skulle uppdateras'));
                        }
                    });
                }
                //updating rows
                if (mod.length != 0) {
                    $t.hide();
                    if (ccr == $cri.val())
                        $.ajaxLoadingStatus({ text: $.tr('Uppdaterar ') + mod.length + $.tr(' ändrade rader...'), modifyOverlay: false });
                    else
                        $.ajaxLoadingStatus({ update: true, text: $.tr('Uppdaterar ') + mod.length + $.tr(' ändrade rader...'), modifyOverlay: false });
                    successful = 0;

                    for (var i in mod) {
                        $.ajax({
                            type: 'GET',
                            contentType: 'application/json',
                            url: '/webservices/basketservice.svc/UpdateBasket?articleNo=' + $(mod[i]).attr('title') + '&quantity=' + $(mod[i]).find('.input input').val() + '&ediText=' + encodeURI($(mod[i]).find('.actions .noteinput input').val()),
                            dataType: 'json',
                            processData: false,
                            success: function (result) {
                                if (result != null && result.d != null && result.d.Success) {
                                    if (result.d.ErrorMessage != null) {
                                        alert(result.d.ErrorMessage);
                                    }
                                    successful++;
                                    if (successful == mod.length) {
                                        $t.updateBigCart({
                                            oncall: function () {
                                                $.ajaxLoadingStatus({ update: true, text: $.tr('Uppdaterar kundkorg, var god vänta.'), modifyOverlay: false });
                                            },
                                            callback: function () {
                                                $.ajaxLoadingStatus({ update: false, create: false, modifyOverlay: false });
                                                $t.show();
                                            }
                                        });
                                    }
                                }
                                else {
                                    $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
                                }

                            },
                            error: function (XMLHttpRequest, textStatus, errorThrown) {
                                $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
                            }
                        });
                    }
                }

                if (mod.length == 0 && ccr == $cri.val()) {
                    alert($.tr('Det finns inga rader att uppdatera'));
                    return false;
                }
            });
            //DELETE ROW
            $deleterow.click(function () {
                if (confirm($.tr('Är du säker på att du vill ta bort artikel med artikelnummer: ') + this.name)) {
                    $t.hide();
                    $.ajaxLoadingStatus({ text: $.tr('Tar bort rad, var god vänta.'), modifyOverlay: false });
                    $.ajax({
                        type: 'GET',
                        contentType: 'application/json',
                        url: '/webservices/basketservice.svc/RemoveFromBasket?articleNo=' + this.name,
                        dataType: 'json',
                        processData: false,
                        success: function (p) {
                            if ($.ajaxErrorHandler(p)) {
                                //clearing unwanted data;
                                p = undefined;
                                $.ajaxLoadingStatus({ update: true, text: $.tr('Klart!'), modifyOverlay: false });
                                $t.updateBigCart({
                                    oncall: function () {
                                        $.ajaxLoadingStatus({ update: true, text: $.tr('Uppdaterar kundkorg, var god vänta.'), modifyOverlay: false });
                                    },
                                    callback: function () {
                                        $.ajaxLoadingStatus({ update: false, create: false, modifyOverlay: false });
                                        $t.show();
                                    }
                                });
                            }
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            $.showErrorMessage($.tr('Ett fel uppstod när raden skulle tas bort från kundkorgen'));
                        }
                    });
                }
                else {
                    return false;
                }
            });
            //SAVE (if user is logged in)
            if (user.auth) {
                $save.click(function () {
                    $.saveOrderToTemplate( $('#saveid').val() );
                });
            }
            //EDIT NOTE
            $note.click(function () {
                if ($(this).siblings('.noteinput:first').css('display') == 'none') {
                    $d.find('.layer2 .actions .noteinput').hide();
                    $(this).siblings('.noteinput:first').show();
                    $(this).siblings('.noteinput:first').children('input:first').focus();
                }
                else {
                    $(this).siblings('.noteinput:first').hide();
                }
                return false;
            });
            //PRINT
            $print.click(function () {
                var printurl = gBaseUrl + 'GLOBAL-AJAX/BasketBig.Print.aspx?fc=' + $.forceCache();
                var printwindow = window.open(printurl, 'HansenPrintWindow', 'left=0,top=0,width=200,height=50');
            });
            //INPUT BINDINGS
            $d.find('.layer2 .actions .noteinput input').focus($.isPendingChange);
            $d.find('.layer2 .actions .noteinput input').blur($.isPendingChange);
            $d.find('.layer2 .input input').focus($.isPendingChange);
            $d.find('.layer2 .input input').blur($.isPendingChange);
            //SHOW VAT BINDING
            $('#isShowPriceWithVATCart').isShowPriceWithVAT();
            //Binding add returl url function
            $('.returl').addReturnUrl();

            if ($.isFunction(s.callback))
                s.callback();
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen skulle uppdateras.'));
        }
    });
}



$.saveOrderToTemplate = function (sid, MO) {
    var sdesc = prompt($.tr('Ange namn på mall:'), '');

    if ((sdesc != null) && (sdesc != undefined) && (sdesc != '')) {
        if (MO == undefined)
            MO = false;

        if (sdesc != '') {
            $.ajaxLoadingStatus({ text: $.tr('Sparar mall, var god vänta'), modifyOverlay: MO });
            $.ajax({
                type: 'GET',
                contentType: 'application/json',
                url: '/webservices/ordertemplateservice.svc/AddOrderTemplateFromOrder?description=' + sdesc + '&orderNo=' + sid,
                dataType: 'json',
                processData: false,
                success: function (p) {
                    if ($.ajaxErrorHandler(p)) {
                        $.ajaxLoadingStatus({ update: false, create: false, modifyOverlay: MO });
                        alert($.tr('Din mall är nu sparad'));
                    }
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    $.showErrorMessage($.tr('Ett fel uppstod när mallen skulle sparas.'));
                }
            });
        }
        else {
            alert($.tr('Du måste ange ett namn på mallen'));
        }
    }
}



//CHECK IF CART ROW WAS CHANGED
var input;
$.isPendingChange = function (e) {
    try {
        if (e.type == 'focus') {
            input = [this.name, this.value, '', ''];
            this.select();
        }
        if (e.type == 'blur') {
            if ($.isArray(input)) {
                input[2] = this.name;
                input[3] = this.value;
                if (input[0] == input[2]) {
                    if (input[1] != input[3])
                        $(this).parents('tr.orderrow').addClass('pending');
                }
            }
        }
    }
    catch (e) {
        $.showErrorMessage($.tr('Ett fel uppstod när kundkorgen kontrollerades') + " - " + e.Message);
    }
}

