var ItemIntoCart = Class.create();

ItemIntoCart.prototype = {
    initialize: function(forms, patterns, order_action) {
        this.forms = forms;
        this.patterns = patterns;
        this.order_action = order_action;

        this.addCart();
        this.orderCart(this.order_action);
        this.upNumber();
        this.downNumber();
    },

    addCart: function() {
        this.forms.each( function(form) {
            var add_element = $('add_' + form);
            if ($(form) && add_element) {
                Event.observe(add_element, 'click', function() {
                    var is_error = false;
                    $$('form#' + form + ' select').each(function(select) {
                        if (select.className == 'pattern') {
                            if (!select.value) {
                                is_error = true;
                                alert($(select.id + '_label').innerHTML + 'が選択されていません');
                            }
                        }
                    });

                    var cart_num_element = $('num_' + form);
                    if (cart_num_element) {
                        var cart_num = cart_num_element.value;
                    }

                    if (cart_num_element && (Number(cart_num) < 1 || cart_num.match(/[^0-9]/g))) {
                        is_error = true;
                        alert('数量が正しくありません');
                    }

                    if (!is_error) {
                        $(form).submit();
                    }
                });
            }
        });
    },

    orderCart: function(order_action) {
        this.forms.each( function(form) {
            var order_element = $('order_' + form);
            if ($(form) && order_element) {
                Event.observe(order_element, 'click', function() {
                    var cart_num_element = $('num_' + form);
                    if (cart_num_element) {
                        var cart_num = cart_num_element.value;
                    }

                    if (cart_num_element && (Number(cart_num) < 1 || cart_num.match(/[^0-9]/g))) {
                        alert('数量が正しくありません');
                    } else {
                        $(form).action = order_action;
                        $(form).submit();
                    }
                });
            }
        });
    },

    upNumber: function() {
        this.forms.each( function(form) {
            var up_element = $('up_' + form);
            var cart_num_element = $('num_' + form);
            if (up_element && cart_num_element) {
                Event.observe(up_element, 'click', function() {
                    var cart_num = Number(cart_num_element.value);
                    cart_num_element.value = cart_num + 1;
                });
            }
        });
    },

    downNumber: function() {
        this.forms.each( function(form) {
            var down_element = $('down_' + form);
            var cart_num_element = $('num_' + form);
            if (down_element && cart_num_element) {
                Event.observe(down_element, 'click', function() {
                    var cart_num = Number(cart_num_element.value);
                    if (cart_num > 0) {
                        cart_num_element.value = cart_num - 1;
                    }
                });
            }
        });
    }
}
