var configurationForm = {

    articleBox: null,
    options: null,

    urlPrefix: null,
    
    product_id: null,
    constructor_id: null,
    result_article: null,


    setOptionVariantUrl         : "module/Constructor/Index/set-option-variant",
    addProductToProjectUrl      : "module/Projects/Index/add-product-to-room",
    addProductToNewProjectUrl   : "module/Projects/Index/add-product-to-new-project",
    getSelectRoomFormUrl        : "module/Projects/Index/select-room-form",


    messages: {},


    init: function() {
        this.articleBox = $("#good_article");
        this.priceBox = $("#result_price");
    },



    setOptionVariant: function(optionId, variantId) {
        var self = this;

        var params = {
            product_id      : self.product_id,
            constructor_id  : self.constructor_id,
            option_id       : optionId,
            variant_id      : variantId,
            result_article  : self.result_article
        };

        $.post(self.setOptionVariantUrl, params, function(data) {
            if (data["error"] && data["error"].length) {
                //alert(data["error"]);
            }
            else {
                self.setResultArticles(data["result_article"], data["human_article"]);
                self.setSelectedOptions(data["result_parts"]);
                self.setResultPrice(data["result_price"])
            }
        }, "json");
    },



    setResultArticles: function(result_article, human_article) {
        this.result_article = result_article;
        this.articleBox
            .html(human_article)
            .append("<input type='hidden' id='configurationResultArticle' value='"+result_article+"' />");
    },



    setResultPrice: function(result_price) {
        this.result_price = result_price;
        this.priceBox.html(result_price);
    },



    setSelectedOptions: function(result_parts) {
        $(".configurationVariantLink").removeClass("active");
        for (var optionId in result_parts) {
            var variantId = result_parts[optionId]["variant"]["id"];
            $("#variant" + optionId + "-" + variantId).addClass("active");
        }
    },



    initUrlPrefix: function(urlPrefix) {
        if (this.urlPrefix != null)
            return;

        this.urlPrefix = urlPrefix;
        this.setOptionVariantUrl            = this.urlPrefix + this.setOptionVariantUrl;
        this.addProductToProjectUrl         = this.urlPrefix + this.addProductToProjectUrl;
        this.addProductToNewProjectUrl      = this.urlPrefix + this.addProductToNewProjectUrl;
        this.getSelectRoomFormUrl           = this.urlPrefix + this.getSelectRoomFormUrl;
    },




    showAddToProjectForm: function() {
        var self = this;
        $.post(self.getSelectRoomFormUrl, function(data) {
            $("#selectProjectFormBox").html(data).css("display", "block");
            self.activateProjectsTree("#selectProjectFormBox");
        });
    },



    addProductToRoom: function(id) {
        var self = this;
        jConfirm(self.messages["projectsAddProductConfirmBody"], self.messages["projectsAddProductConfirmTitle"], function(agree) {
            
            if (!agree) return;
            
            var params = {
                room_id     : id,
                product_id  : self.product_id,
                article     : self.result_article
            };

            $.post(self.addProductToProjectUrl, params, function(data) {
                if (data && data.length) {
                    jAlert(data, self.messages["projectsProductAddedTitle"], function() {
                        $("#selectProjectFormBox").empty();
                    });
                }
            });
        });
    },



    addProductToNewProject: function() {
        var self = this;

        var params = {
            product_id  : self.product_id,
            article     : self.result_article
        };

        $.post(self.addProductToNewProjectUrl, params, function(data) {
            if (data && data.length) {
                jAlert(data, self.messages["projectsProductAddedTitle"], function() {
                    $("#selectProjectFormBox").empty();
                });
            }
        });
    },



    activateProjectsTree: function(id) {
        $("a.showHideLink").click(
            function() {
                var a  = $(this);
                var li = $(a.parents("li")[0]);
                var ul = $($("ul", li)[0]);
                
                if (li.is(".close")) {
                    li.removeClass("close").addClass("open");
                    ul.css("display", "block");
                }
                else {
                    li.removeClass("open").addClass("close");
                    ul.css("display", "none");
                }
            });
    }






};

