
function orderDirector (I_data) {
    var orderData = I_data;
    var tryOrderNotSelected = false;
    
    this.onChangeValue = function(I_event, I_id, I_color) {
        this.calculate();
    }
    
    this.calculate = function () {
        allSum = 0;
        prevValue = $('order-total-amount').innerHTML;
        for (i in orderData) {
            prod = orderData[i];
            prodAmount = 0;
            prodPrice = 0;
            
            $(prod['grayEl']).value = normalizeAmount($(prod['grayEl']).value);
            prodAmount += parseInt($(prod['grayEl']).value);
            prodPrice += addValue(0, $F(prod['grayEl']), prod['price']);

            if ('wall' != prod['type']) {
            	$(prod['colorEl']).value = normalizeAmount($(prod['colorEl']).value);
            	prodAmount += parseInt($(prod['colorEl']).value);
            	prodPrice += addValue(0, $F(prod['colorEl']), prod['priceColor']);

            	$(prod['premiumEl']).value = normalizeAmount($(prod['premiumEl']).value);
            	prodAmount += parseInt($(prod['premiumEl']).value);
            	prodPrice += addValue(0, $F(prod['premiumEl']), prod['pricePremium']);

            	$(prod['total']).innerHTML = prodAmount;
        	}
            
            allSum += prodPrice;
            
            $(prod['totalPrice']).innerHTML = prodPrice;

            //$(prod['colorEl']).value = normalizeAmount($(prod['colorEl']).value);
            //allSum = addValue(allSum, $F(prod['colorEl']), prod['price']);
            //$(prod['colorTotalEl']).innerHTML = addValue(0, $F(prod['colorEl']), prod['priceColor']);
            

            //$(prod['premiumTotalEl']).innerHTML = addValue(0, $F(prod['premiumEl']), prod['price']);
        }
        
        if ($('order-wall-install') && $('order-wall-install').checked) {
            $('w1').value = normalizeAmount($F('w1'));
            $('w2').value = normalizeAmount($F('w2'));
            $('w3').value = normalizeAmount($F('w3'));
            secCount = parseInt($F('w1'));
            stolb15 = parseInt($F('w2'));
            stolb2 = parseInt($F('w3'));
            while (stolb2 > 0 && secCount > 0) {
                stolb2--;
                secCount-=4;
                allSum += 50;
            }
            while (stolb15 > 0 && secCount > 0) {
                stolb2--;
                secCount-=3;
                allSum += 50;
            }
        }
        allSum = formatValue(allSum);
        $('order-total-amount').innerHTML = allSum;
        if (prevValue != allSum) {
            if (tryOrderNotSelected)
                Element.hide('order-form-messages');
                Effect.Pulsate('order-total-amount', {
                duration: 1, 
                afterFinishInternal: function() {
                    Element.setStyle('order-total-amount', {opacity: 1});
                }
            });
        }
    }
    
    var normalizeAmount = function (I_value) {
        if (isNaN(I_value) || '' == I_value)
           return 0;
        else
           return parseInt(I_value);
    };
    
    var formatValue = function (I_value) {
        //return I_value;
        s = I_value + '';
        valRes = '';
        for (i=s.length-1, j=0; i >= 0; i--, j++) {
            valRes = s.charAt(i) + ((!(j%3))?' ':'') + valRes;
        }
        return valRes;
    };
    
    this.onClickOrder = function () {
        new Effect.ScrollTo($('order-form-label-end'), {
            /*afterFinishInternal: function() {
                Effect.SlideDown('order-form-cont', {
                    afterFinishInternal: function () {
                        new Effect.ScrollTo($('order-form-label-end')); 
                    }
                });
            }*/
        });
        
        return false;
    };
    
    this.onClickSubmit = function () {
        this.calculate();
        if ('0' == parseInt($('order-total-amount').innerHTML)) {
            tryOrderNotSelected = true;
            $('order-form-messages').innerHTML = $('order-not-selected').innerHTML;
            Effect.Appear('order-form-messages');
            return false;
        } else {
            tryOrderNotSelected = false;
        }
        Element.hide('order-form-messages');
        data = Form.serialize($('order-form'));
        new Ajax.Request('/order/add', {
            onSuccess : onSubmitResponse.bind(this),
            onFailure : onRequestError.bind(this),
            method: "POST",
            parameters : data
        });

        return false;
    };
    
    var onSubmitResponse = function (I_resp) {
        try {
            rData = eval('(' + I_resp.responseText + ')');
        } catch(e) {
            onRequestError();
            return false;
        }
        
        if ('error' == rData['status']) {
            $('order-form-messages').innerHTML = rData['body'];
            Effect.Appear('order-form-messages');
        } else {
            window.location = '/price-and-order/done';
            //alert('redirect after ok');
        }
    };
    
    var onRequestError = function (I_resp) {
        //alert('error');
    };
    
    var addValue = function (I_dst, I_src, I_factor) {
        if (!isNaN(I_src)) {
            if (I_src < 0)
                I_src = -I_src;
            I_dst += I_src * I_factor;
        }
        return I_dst;
    };
    
    for (i in orderData) {
        prod = orderData[i];
        prod['grayEl'] = prod['code'];
        prod['colorEl'] = prod['code'] + '_color';
        prod['premiumEl'] = prod['code'] + '_premium';
        prod['total'] = prod['code'] + '_total';
        prod['totalPrice'] = prod['code'] + '_totalPrice';
        if ('wall' == prod['type'])
            continue;
        Event.observe(prod['grayEl'], 'change', this.onChangeValue.bindAsEventListener(this, prod['code'], 'gray'));
        Event.observe(prod['colorEl'], 'change', this.onChangeValue.bindAsEventListener(this, prod['code'], 'color'));
        Event.observe(prod['premiumEl'], 'change', this.onChangeValue.bindAsEventListener(this, prod['code'], 'premium'));
    }
    
    this.calculate();
    
    setInterval(this.calculate.bindAsEventListener(this), 1000);
}



