﻿/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("TraderMagazine");
TraderMagazine.PurchaseManager = function() {
    TraderMagazine.PurchaseManager.initializeBase(this);

    this.Order = new Object();
    this.Order.ProductCategory = 0;
    this.Order.FirstName = "";
    this.Order.LastName = "";
    this.Order.Company = "";
    this.Order.Address1 = "";
    this.Order.Address2 = "";
    this.Order.PostCode = "";
    this.Order.City = "";
    this.Order.CountryId = "de";
    this.Order.Country = "";
    this.Order.Phone = "";
    this.Order.Month = "";
    this.Order.Year = "";
    this.Order.EMail = "";
    this.Order.PaymentMethod = "0";
    this.Order.CardOwner = "";
    this.Order.CardNumber = "";
    this.Order.CVV = "";
    this.Order.ValidMonth = "";
    this.Order.ValidYear = "";
    this.Order.Expiry = "";
    this.Order.ConditionsConfirmed = "";
    this.payType = ["Mastercard", "Visa", "giropay"];
    this.cardDataEnabled = false;

    this.Order.SendInvoiceTo = false;
    this.Order.IFirstName = "";
    this.Order.ILastName = "";
    this.Order.ICompany = "";
    this.Order.IAddress1 = "";
    this.Order.IAddress2 = "";
    this.Order.IPostCode = "";
    this.Order.ICity = "";
    this.Order.ICountry = "";
    this.Order.IPhone = "";
    this.Order.IEMail = "";
}
TraderMagazine.PurchaseManager.prototype = {
    initialize: function() {
        TraderMagazine.PurchaseManager.callBaseMethod(this, 'initialize');
    },
    /// <summary>
    // put product in the basket
    /// </summary>
    toBasket: function(topId, productId, numberOfExtras, extrasIds, numberOfSubProducts, subProductsIds) {

        if (GLOBALS.username == "") {
            DIALOG.createDialogContainer(Text.advice, false, 300, 150);
            $get("DialogContent").innerHTML = Text.errors.e36;
        } else {
            var success = true;
            var selectedProducts = [];
            var customerNumber = "";

            if (productId == "") {
                var checkedSubProducts = PURCHASE.checkCheckBoxes("SelectProductsError", numberOfSubProducts, subProductsIds);
                if (checkedSubProducts.length > 0) {
                    for (var i in checkedSubProducts) {
                        selectedProducts.push(checkedSubProducts[i]);
                    }
                } else {
                    success = false;
                }
            } else {
                selectedProducts.push(productId);
            }
            var parameter = "";

            // TODO improve this functionality
            if (topId == "toolbox_upgrade" && success) {
                var pId = selectedProducts[0];
                if (pId == "toolbox_basic_upgrade_de") numberOfExtras = 1;
                if (pId == "toolbox_adv_upgrade_de") numberOfExtras = 2;
                if (pId == "toolbox_pro_upgrade_de") numberOfExtras = 3;

            }

            if (topId == "p4" && success) {
                var pId = selectedProducts[0];
                if (pId == "traders_package_1_de") numberOfExtras = 1;
                if (pId == "traders_package_3_de") numberOfExtras = 3;
                if (pId == "traders_package_4_de") numberOfExtras = 4;
                if (pId == "traders_package_5_de") numberOfExtras = 5;
                if (pId == "traders_package_6_de") numberOfExtras = 6;
                if (pId == "traders_package_7_de") numberOfExtras = 7;


                customerNumber = $get("SubscriberInput").value;
                if (!ERROR.checkField(customerNumber, "SubscriberInputError", "singleline", 0, Text.errors.e33)) success = false;


            }


            if (numberOfExtras > 0) {
                var checkedExtras = PURCHASE.checkCheckBoxes("SelectExtrasError", numberOfExtras, extrasIds);
                if (checkedExtras.length > 0) {
                    for (var i in checkedExtras) {
                        parameter += checkedExtras[i] + ",";
                    }
                } else {
                    success = false;
                }
            }

            if (topId == "single_issue" && success) {
                var month = $get("IssueMonth").value;
                var year = $get("IssueYear").value;
                var now = new Date();
                var currentMonth = now.getMonth();
                var currentYear = now.getFullYear();

                if (year == -1 || month == -1) {
                    ERROR.showError("ChooseIssueError", Text.errors.e49);
                    success = false;
                }
                else if (month > currentMonth && year == currentYear) {
                    ERROR.showError("ChooseIssueError", Text.errors.e49);
                    success = false;

                } else {
                    parameter = Text.months.item[month] + " " + year;
                    ERROR.hideError("ChooseIssueError");
                    success = true;
                }
            }

            if (topId != "single_issue") {
                if ($get("ConfirmTerms") && success) {
                    success = $get("ConfirmTerms").checked;
                    if (success) {
                        ERROR.hideError("DetailsInputError");
                    } else {
                        ERROR.showError("DetailsInputError", Text.errors.e42);
                    }
                }
            }
            if (success)
                TradersMag.ShopService.ShopService.CheckProductBasket(selectedProducts, parameter, PURCHASE.Order.ProductCategory,customerNumber, PURCHASE.initializePage, GLOBALS.callError);



        }
    },

    /// <summary>
    // put product in the basket
    /// </summary>
    checkCheckBoxes: function(errorId, numberOfExtras, extrasIdsString) {
        var extrasIds = Array.parse(extrasIdsString);
        var checkedExtras = [];
        for (var i in extrasIds) {
            if ($get("CB_" + extrasIds[i]).checked) {
                checkedExtras.push(extrasIds[i]);
            }

        }
        if (numberOfExtras > 0) {
            if (checkedExtras.length != numberOfExtras) {
                var error = Text.please_select + " " + numberOfExtras + " " + Text.products;
                ERROR.showError(errorId, error);
                var checkedExtras = [];
            } else {
                ERROR.hideError(errorId);
            }
        }
        return checkedExtras;

    },
    /// <summary>
    // put product in the basket
    /// </summary>
    deleteSubProducts: function(topId) {
        if (GLOBALS.username == "") {
            DIALOG.createDialogContainer(Text.advice, false, 300, 150);
            $get("DialogContent").innerHTML = Text.errors.e36;
        } else {
            TradersMag.ShopService.ShopService.DeleteSubProducts(topId, PURCHASE.initializePage, GLOBALS.callError);
        }
    },
    /// <summary>
    // put product in the basket
    /// </summary>
    toBasketFromDetails: function(topId, checkBoxIds) {
        if (GLOBALS.username == "") {
            DIALOG.createDialogContainer(Text.advice, false, 300, 150);
            $get("DialogContent").innerHTML = Text.errors.e36;


        } else {
            if (checkBoxIds != "[]") {
                var customerNumber = "";
                var success = true;
                if (topId == "p4") {
                    customerNumber = $get("SubscriberInput").value;
                    if (!ERROR.checkField(customerNumber, "SubscriberInputError", "singleline", 0, Text.errors.e33)) success = false;


                    if (success) {



                        var selectedProducts = [];
                        var pIds = Array.parse(checkBoxIds);
                        for (var i = 0; i < pIds.length; i++) {
                            if ($get("CB_" + pIds[i]).checked) {
                                Array.add(selectedProducts, $get("CB_" + pIds[i]).value);
                            }
                        }
                        if (selectedProducts.length > 0) {
                            var productId = selectedProducts[0];
                            var numberOfCds = Number(productId.split("_")[2]);


                            var tradersCdIds = ["Traders2002", "Traders2003", "Traders2004", "Traders2005", "Traders2006", "Traders2007", "Traders2008", "Traders2008"];

                            for (var i = 0; i < 8; i++) {
                                if ($get("CB_" + tradersCdIds[i]).checked) {
                                    Array.add(selectedProducts, tradersCdIds[i]);
                                }

                            }

                            if (selectedProducts.length != numberOfCds + 1) {
                                $get("DetailsInputError").innerHTML = "Sie haben die falsche Anzahl an CDs gewählt";
                            } else {
                                TradersMag.ShopService.ShopService.CheckSubProductsBasket(customerNumber, topId, selectedProducts, PURCHASE.initializePage, GLOBALS.callError);
                            }
                        } else {
                            $get("DetailsInputError").innerHTML = Text.errors.e46;
                        }
                    }




                }
                else {
                    var selectedProducts = [];
                    var pIds = Array.parse(checkBoxIds);
                    for (var i = 0; i < pIds.length; i++) {
                        if ($get("CB_" + pIds[i]).checked) {
                            Array.add(selectedProducts, $get("CB_" + pIds[i]).value);
                        }
                    }
                    if (selectedProducts.length > 0) {
                        TradersMag.ShopService.ShopService.CheckSubProductsBasket(customerNumber, topId, selectedProducts, PURCHASE.initializePage, GLOBALS.callError);
                    } else {
                        $get("DetailsInputError").innerHTML = Text.errors.e46;
                    }
                }
            }
        }
    },

    /// <summary>
    /// get cash page
    /// </summary>
    initializePage: function(html) {
        $get("Content").innerHTML = html;
        PURCHASE.initHandler();
    },
    /// <summary>
    /// initialize handlers for this page
    /// </summary>
    initHandler: function() {
        if ($get("CashTable")) {
            if ($get("CashBtn"))
                $get("CashBtn").onclick = function() {
                    if (GLOBALS.username == "") {
                        DIALOG.createDialogContainer(Text.advice, false, 300, 150);
                        $get("DialogContent").innerHTML = Text.errors.e36;
                    } else {
                        PURCHASE.toPaymentForm();
                    }
                }
        }
        if ($get("BuyIssueTable")) {
            $get("DelFieldsBtn").onclick = function() {
                $get("BuyIssueName").value = "";
                $get("BuyIssueEmail").value = "";
            }
            $get("BuyIssueBtn").onclick = function() {
                ERROR.hideError("BuyIssueNameError");
                ERROR.hideError("BuyIssueEmailError");
                var buyIssueName = $get("BuyIssueName").value;
                var buyIssueEmail = $get("BuyIssueEmail").value;

                var success = true;
                if (!ERROR.checkField(buyIssueName, "BuyIssueNameError", "multiline", 3, Text.errors.e17)) success = false;
                if (!ERROR.checkEMail(buyIssueEmail)) {
                    ERROR.showError("BuyIssueEmailError", Text.errors.e19);
                    success = false;
                }

                if (success) {
                    $get("BuyIssueBtn").onclick = null;
                    TradersMag.WebService.PageService.SendMail(buyIssueEmail, buyIssueName, PURCHASE.emailSended, GLOBALS.callError);


                }

            }
        }
    },
    /// <summary>
    /// initialize  page
    /// </summary>
    reloadPage: function() {
        //this.product = new Object();
        // this.product["count"] = 0;
        // this.product.products = new Object();
        PAGE.init();
    },
    /// <summary>
    /// insert content
    /// </summary>
    detailsPage: function(topId) {
        Sys.Debug.trace("detailsPage  " + topId);
        Sys.Application.addHistoryPoint({ h: topId }, "TRADERS´ // Ihr persönlicher Tradingcoach");
        //TradersMag.ShopService.ShopService.CreateProductDetailsPage(topId, PURCHASE.Order.ProductCategory, this.insertDetails, GLOBALS.callError);
    },
    /// <summary>
    /// insert content
    /// </summary>
    changeCheckbox: function(id) {
        $get("CB_traders_package_1_de").checked = false;
        $get("CB_traders_package_3_de").checked = false;
        $get("CB_traders_package_4_de").checked = false;
        $get("CB_traders_package_5_de").checked = false;
        $get("CB_traders_package_6_de").checked = false;
        $get("CB_traders_package_7_de").checked = false;
        $get("CB_" + id).checked = true;
    },
    /// <summary>
    /// insert content
    /// </summary>
    insertDetails: function(html) {
        Sys.Debug.trace("insertDetails  " + html);
        $get("MagHolder3_1_0").innerHTML = html
        PURCHASE.initHandler();
    },

    /// <summary>
    /// get cash page
    /// </summary>
    addToBasket: function(success) {
        if (success) {
            PURCHASE.setBasketInfo();

        }
        else {
            DIALOG.createDialogContainer(Text.advice, false, 300, 150);
            $get("DialogContent").innerHTML = Text.errors.e21;

        }




    },
    /// <summary>
    /// get cash page
    /// </summary>
    toPaymentForm: function() {
        COMP.createLoaderWhite($get("MagHolder3_1_0"), 300);
        Sys.Application.addHistoryPoint({ h: "payment_form" }, "TRADERS´ // Ihr persönlicher Tradingcoach");
    },
    /// <summary>
    /// insert payment form
    /// </summary>
    insertPaymentForm: function(html) {
        if (html == "") {
            DIALOG.createDialogContainer(Text.advice, false, 300, 150);
            $get("DialogContent").innerHTML = Text.errors.e36;
        } else {
            $get("MagHolder3_1_0").innerHTML = html;
            $get("CashBtnLabel").innerHTML = Text.back;
            $get("CashBtn").onclick = function() {
                PURCHASE.reloadPage();
            }
            $get("StartPurchaseBtn").onclick = function() {
                if (PURCHASE.checkInput()) {
                    COMP.createLoaderWhite($get("MagHolder3_1_0"), 300);
                    TradersMag.ShopService.ShopService.CreateProductPaymentConfirmation(PURCHASE.Order, PURCHASE.insertConfirmationForm, GLOBALS.callError);
                }
            }
        }
    },
    /// <summary>
    // remove product form basket
    /// </summary>
    removeProductId: function(productId) {
        if (GLOBALS.username != "") {
            TradersMag.ShopService.ShopService.RemoveProductId(productId, PURCHASE.Order.ProductCategory, PURCHASE.insertPaymentForm, GLOBALS.callError);

        }
    },
    /// <summary>
    // remove product form basket
    /// </summary>
    removeProductIdFromDetails: function(productId) {

        if (GLOBALS.username != "") {
            TradersMag.ShopService.ShopService.RemoveProductIdFromDetails(productId, PURCHASE.Order.ProductCategory, PAGE.insertContent, GLOBALS.callError);

        }
    },

    /// <summary>
    /// insert content
    /// </summary>
    insertConfirmationForm: function(html) {
        if (html == "0") {
            alert("bitte einloggen");
        } else {
            $get("MagHolder3_1_0").innerHTML = html;
            $get("StartPurchaseBtnLabel").innerHTML = Text.order;
            $get("StartPurchaseBtn").onclick = function() {
                COMP.createLoaderWhite($get("MagHolder3_1_0"), 300);
                TradersMag.ShopService.ShopService.ProductOrder(PURCHASE.Order, PURCHASE.insertPaymentConfirmation, GLOBALS.callError);
            }
        }
    },
    /// <summary>
    /// insert content
    /// </summary>
    insertPaymentConfirmation: function(result) {
        if (result) {
            $get("CashTable_0_0").innerHTML = "";
            $get("MagHolder3_1_0").innerHTML = "<div style='padding:10px;margin:10px;margin-bottom:300px;'>" + Text.magazine.confirmation + "</div>";
        } else {
            $get("MagHolder3_1_0").innerHTML = "<div style='padding:10px;margin:10px;margin-bottom:300px;'>" + Text.errors.e35 + "</div>";
        }
    },
    /// <summary>
    // editor function : edit text
    /// </summary>
    emailSended: function(result) {

        if (result) {
            $get("MagHolder3_0_0").innerHTML = "<div style='padding:10px;margin:10px;margin-bottom:300px;'>" + Text.magazine.confirmation + "</div>";
        } else {
            $get("MagHolder3_0_0").innerHTML = "<div style='padding:10px;margin:10px;margin-bottom:300px;'>" + Text.errors.e35 + "</div>";
        }
    },

    /// <summary>
    // editor function : edit text
    /// </summary>
    detailsSaved: function(result) {
        if (result) {
            PAGE.init();
        }
    },



    /// <summary>
    // set basket info
    /// </summary>
    setBasketInfo: function() {
        var response = "";
        response = Text.magazine.you_have + " " + this.product["count"] + " " + Text.magazine.products_in;
        response = "<div style='width:260px'>" + response.replace(" ", "&nbsp;") + "</div>";
        $get("CashTable_0_0").innerHTML = response;
    },
    /// <summary>
    /// input check
    /// </summary>
    /// <returns></returns>
    checkInput: function() {
        this.readInput();
        var success = true;
        if (!ERROR.checkField(this.Order.FirstName, "FirstNameError", "singleline", 2, Text.errors.e1)) success = false;
        if (!ERROR.checkField(this.Order.LastName, "LastNameError", "singleline", 2, Text.errors.e2)) success = false;
        if (!ERROR.checkField(this.Order.Company, "CompanyError", "singleline", 0, Text.errors.e33)) success = false;
        if (!ERROR.checkField(this.Order.Address1, "AdressError", "singleline", 2, Text.errors.e33)) {
            success = false;
        } else {
            if (!ERROR.checkField(this.Order.Address2, "AdressError", "singleline", 1, Text.errors.e33)) success = false;
        }
        if (!ERROR.checkPLZ(this.Order.PostCode)) {
            ERROR.showError("CityError", Text.errors.e37);
            success = false;
        } else {
            if (!ERROR.checkField(this.Order.City, "CityError", "singleline", 2, Text.errors.e38)) success = false;
        }
        if (!ERROR.checkField(this.Order.Phone, "PhoneError", "singleline", 0, Text.errors.e39)) success = false;
        // if (!ERROR.checkField(this.Order.CardOwner, "CardOwnerError", "name", 2, Text.errors.e44)) success = false;
        //if (!ERROR.checkField(this.Order.CVV, "CVVError", "int", 3, Text.errors.e41)) success = false;
        // if (!ERROR.checkField(this.Order.CardNumber, "CardNumberError", "credit", 12, Text.errors.e40)) success = false;
        if (!ERROR.checkEMail(this.Order.EMail)) {
            ERROR.showError("EMailError", Text.errors.e19);
            success = false;
        }
        this.Order.SendInvoiceTo = $get("SendInvoiceTo").checked;
        if (this.Order.SendInvoiceTo) {
            this.readInputInvoiceForm();
            // if (!ERROR.checkField(this.Order.IFirstName, "IFirstNameError", "singleline", 2, Text.errors.e1)) success = false;
            // if (!ERROR.checkField(this.Order.ILastName, "ILastNameError", "singleline", 2, Text.errors.e2)) success = false;
            if (!ERROR.checkField(this.Order.ICompany, "ICompanyError", "singleline", 0, Text.errors.e33)) success = false;
            if (!ERROR.checkField(this.Order.IAddress1, "IAdressError", "singleline", 2, Text.errors.e33)) {
                success = false;
            } else {
                if (!ERROR.checkField(this.Order.IAddress2, "IAdressError", "singleline", 1, Text.errors.e33)) success = false;
            }
            if (!ERROR.checkPLZ(this.Order.IPostCode)) {
                ERROR.showError("ICityError", Text.errors.e37);
                success = false;
            } else {
                if (!ERROR.checkField(this.Order.ICity, "ICityError", "singleline", 2, Text.errors.e38)) success = false;
            }
            if (!ERROR.checkField(this.Order.IPhone, "IPhoneError", "singleline", 0, Text.errors.e39)) success = false;
            // if (!ERROR.checkField(this.Order.CardOwner, "CardOwnerError", "name", 2, Text.errors.e44)) success = false;
            //if (!ERROR.checkField(this.Order.CVV, "CVVError", "int", 3, Text.errors.e41)) success = false;
            // if (!ERROR.checkField(this.Order.CardNumber, "CardNumberError", "credit", 12, Text.errors.e40)) success = false;
            if (!ERROR.checkEMail(this.Order.IEMail)) {
                ERROR.showError("IEMailError", Text.errors.e19);
                success = false;
            }




        }



        /*
        var year = Number($get("ExpiryYear").value);
        var month = Number($get("ExpiryMonth").value) - 1;
        var now = new Date();
        var currYear = now.getFullYear();
        var currMonth = now.getMonth();
        if (year <= currYear) {
        if (month <= currMonth) {
        ERROR.showError("CVVError", Text.errors.e54);
        success = false;
        }
        }
        */

        return success;
    },
    /// <summary>
    /// read input due to current page
    /// </summary>
    /// <returns></returns>
    hideErrors: function() {
        ERROR.hideError("FirstNameError");
        ERROR.hideError("LastnameError");
        ERROR.hideError("CompanyError");
        ERROR.hideError("AdressError");
        ERROR.hideError("CityError");
        ERROR.hideError("PhoneError");
        ERROR.hideError("EMailError");
        // ERROR.hideError("CardOwnerError");
        //ERROR.hideError("CVVError");
        //ERROR.hideError("CardNumberError");
    },
    /// <summary>
    /// read input due to current page
    /// </summary>
    /// <returns></returns>
    readInput: function() {
        this.Order.FirstName = $get("FirstName").value;
        this.Order.LastName = $get("LastName").value;
        this.Order.Company = $get("Company").value;
        this.Order.Address1 = $get("Street").value;
        this.Order.Address2 = $get("StreetNumber").value;
        this.Order.PostCode = $get("PostCode").value;
        this.Order.City = $get("City").value;
        this.Order.Country = $get("CountryDropDown").value;
        this.Order.Phone = $get("Phone").value;
        this.Order.EMail = $get("EMail").value;
        if ($get("IssueYear")) {
            this.Order.Year = $get("IssueYear").value;
        }
        if ($get("IssueMonth")) {
            this.Order.Month = $get("IssueMonth").value;
        }
        //  var expiry = $get("ExpiryMonth").value + $get("ExpiryYear").value;
        // if ($get("PayType").value == 12) this.Order.PaymentMethod = this.payType[0];
        // if ($get("PayType").value == 15) this.Order.PaymentMethod = this.payType[1];
        //if ($get("PayType").value == -1) this.Order.PaymentMethod = this.payType[2];
        // this.Order.CVV = $get("CVV").value;
        //this.Order.CardOwner = $get("CardOwner").value;
        //if (!this.cardDataEnabled)
        // this.Order.CardNumber = $get("CardNumber").value;
        // this.Order.Expiry = expiry;
    },
    /// <summary>
    /// read input due to current page
    /// </summary>
    /// <returns></returns>
    readInputInvoiceForm: function() {
        this.Order.IFirstName = $get("IFirstName").value;
        this.Order.ILastName = $get("ILastName").value;
        this.Order.ICompany = $get("ICompany").value;
        this.Order.IAddress1 = $get("IStreet").value;
        this.Order.IAddress2 = $get("IStreetNumber").value;
        this.Order.IPostCode = $get("IPostCode").value;
        this.Order.ICity = $get("ICity").value;
        this.Order.ICountry = $get("ICountryDropDown").value;
        this.Order.IPhone = $get("IPhone").value;
        this.Order.IEMail = $get("IEMail").value;


    },
    dispose: function() {
        //Add custom dispose actions here
        TraderMagazine.PurchaseManager.callBaseMethod(this, 'dispose');
    }
}
TraderMagazine.PurchaseManager.registerClass('TraderMagazine.PurchaseManager', Sys.Component);
if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
