var DynamicField = {
    
    init: function (element) {
        element = $(element);
        Object.extend(element, DynamicField);
        element.initialize();
        return element;
    },
    
    initialize: function () {
        expr = /\d+([\.,]\d{2})?/
        labels = $$('label[for='+this.id+']');
        if (labels.length == 1)
            label = labels[0];
        labels = this.up().getElementsBySelector('.costs')
        if (labels.length == 1)
            label = labels[0];
        this.sum = Number(label.innerHTML.match(expr)[0]);
    }
}


var DynamicForm = {

    
    init: function (element) {
        element = $(element);
        Object.extend(element, DynamicForm);
        element.initialize();
        return element;
    },
    
    initialize: function () {
        this.dyn_fields = this.getElementsBySelector('input','input[type=checkbox]','input[type=radio]');
        this.dyn_fields.each(DynamicField.init);
        this.recalculate();
    },
    
    
    recalculate: function () {
        this.sum = 0;
        for (var i = 0, max = this.dyn_fields.length; i < max; ++i) {
            if (this.dyn_fields[i].checked)
                this.sum += this.dyn_fields[i].sum
        }
        return this.sum;
    }
    
}

var DynamicPrice= {

    
    init: function (element) {
        element = $(element);
        Object.extend(element, DynamicPrice);
        element.initialize();
        return element;
    },
    
    initialize: function () {
        this.initial_price = Number(this.getElementsBySelector('span.dprice')[0].innerHTML);
        this.price = this.initial_price;
    },
    
    
    change: function (price) {
        this.price = price;
        this.getElementsBySelector('span.dprice')[0].update(price)
    },
    
    add: function (diff) {
        this.change(this.price + diff)
    },
    
    raise: function (amount) {
        this.change(this.price + this.price*amount/100)
    },
    
    revert: function () {
        this.price = this.initial_price;
    }
}




function change_price(element, price) {
    expr = /\d+([\.,]\d{2})?/;
    element.innerHTML = element.innerHTML.replace(expr, price)
}


function onDomLoaded() {
    df = $('product_form');
    if (df) {
        expr = /\d+([\.,]\d{2})?/;
        df = DynamicForm.init(df);
        change_price($$('#order p')[0], df.recalculate());
        df.observe('change', function (event) {
            change_price($$('#order p')[0], df.recalculate());
        })
    }
    change_cur_form = $('change_cur');
    if (change_cur_form) {
        change_cur_form.down('select').observe('change', function (event) {
            event.element().up('form').submit();
        });
    }    
    
    
    if ($('receiver-cards')) {
        receiver_inputs = $$('#id_receiver, #id_phone, #id_address');
        $('receiver-cards').hide();
        $('receiver-cards').select('.card p').each(function(card){
            Event.observe(card,'mouseover',function(event){
                $('receiver-cards').select('.card').each(function(card){card.removeClassName('active')});
                event.element().up('.card').addClassName('active');
            });
            Event.observe(card,'click',function(event){
                receiver_inputs.each(function(input){
                    if (input.getValue() == '') {
                        card = event.element().up('.card');
                        input.value = card.down('.r-'+input.name).innerHTML
                    }
                })
                $('receiver-cards').hide();
            });
        })
        function show_cards(event) {
            cards = $('receiver-cards')
            var input = event.element();
            if (input.getValue() == '') {
                var dimensions = input.getDimensions();
                var offset = input.cumulativeOffset();
                cards.style.left = offset.left+'px';
                cards.style.top = offset.top+dimensions.height+1+'px';
                cards.style.minWidth = dimensions.width+'px';
                if (Prototype.Browser.IE)
                    cards.style.width = dimensions.width+'px';
                cards.show();
            }
            else {
                if (cards.visible())
                    cards.hide();
            }
        }
        receiver_inputs.each(function (element) {
            Event.observe(element,'focus',show_cards);
            Event.observe(element,'keyup',show_cards);
            Event.observe(element,'blur',function (event) {
                $('receiver-cards').hide();
            });
        });
    }
}


Event.observe(document,"dom:loaded",onDomLoaded);