window.addEvent("domready", function(){
    var form                      = Browser.Engine.gecko  ?  document.forms['rka']  :  $("rka");
    var travel_begin_date         = form.getElement("input[name=travel_begin_date]");
    var travel_begin_hour         = form.getElement("select[name=travel_begin_hour]");
    var travel_begin_minute       = form.getElement("select[name=travel_begin_minute]");
    var travel_end_date           = form.getElement("input[name=travel_end_date]");
    var travel_end_hour           = form.getElement("select[name=travel_end_hour]");
    var travel_end_minute         = form.getElement("select[name=travel_end_minute]");
    var travel_address1           = form.getElement("input[name=travel_address1]");
    var travel_address2           = form.getElement("input[name=travel_address2]");
    var travel_direction          = form.getElement("input[name=travel_direction]");
    var travel_detour_direction   = form.getElement("input[name=travel_detour_direction]");
    var travel_roundtrip          = form.getElement("input[name=travel_roundtrip]");
    var catering_total            = form.getElement("input[name=catering_total]");
    var accommodation_bf_days     = form.getElement("input[name=accommodation_bf_days]");
    var accommodation_bf_amount   = form.getElement("input[name=accommodation_bf_amount]");
    var accommodation_bf_total    = form.getElement("input[name=accommodation_bf_total]");
    var accommodation_wobf_days   = form.getElement("input[name=accommodation_wobf_days]");
    var accommodation_wobf_amount = form.getElement("input[name=accommodation_wobf_amount]");
    var accommodation_wobf_total  = form.getElement("input[name=accommodation_wobf_total]");
    var accommodation_fr_days     = form.getElement("input[name=accommodation_fr_days]");
    var accommodation_fr_amount   = form.getElement("input[name=accommodation_fr_amount]");
    var accommodation_fr_total    = form.getElement("input[name=accommodation_fr_total]");
    var accommodation_total       = form.getElement("input[name=accommodation_total]");
    var transport_car_direction   = form.getElement("input[name=transport_car_direction]");
    var transport_car_amount      = form.getElement("input[name=transport_car_amount]");
    var transport_car_total       = form.getElement("input[name=transport_car_total]");
    var transport_train_total     = form.getElement("input[name=transport_train_total]");
    var transport_taxi_total      = form.getElement("input[name=transport_taxi_total]");
    var transport_plane_total     = form.getElement("input[name=transport_plane_total]");
    var transport_misc_text       = form.getElement("input[name=transport_misc_text]");
    var transport_misc_total      = form.getElement("input[name=transport_misc_total]");
    var transport_total           = form.getElement("input[name=transport_total]");
    var misc_semi_total           = form.getElement("input[name=misc_semi_total]");
    var misc_custom1_text         = form.getElement("input[name=misc_custom1_text]");
    var misc_custom1_total        = form.getElement("input[name=misc_custom1_total]");
    var misc_custom2_text         = form.getElement("input[name=misc_custom2_text]");
    var misc_custom2_total        = form.getElement("input[name=misc_custom2_total]");
    var misc_total                = form.getElement("input[name=misc_total]");
    var total                     = form.getElement("input[name=total]");
    var save_button               = form.getElement("input[name=save_button]");
    var print_button              = form.getElement("input[name=print_button]");
    var templates_img             = $('templates_img');

    form.reset();

    var TransportDirectionInstance = new TransportDirection({
        'travel':    travel_direction,
        'detour':    travel_detour_direction,
        'transport': transport_car_direction
    });



    new dateFormat(travel_begin_date);
    new dateFormat(travel_end_date);
    new timeFormat(travel_begin_hour, travel_begin_minute, { h:10, m:0 });
    new timeFormat(travel_end_hour, travel_end_minute, { h:18, m:0 });

    new Duration({
        'start': {
            'date':   travel_begin_date,
            'hour':   travel_begin_hour,
            'minute': travel_begin_minute
        },
        'end': {
            'date':   travel_end_date,
            'hour':   travel_end_hour,
            'minute': travel_end_minute
        },
        'accommodation': form.getElement("input[name=accommodation_fr_days]"),
        'catering':      new CateringCharge({
            'total': catering_total
        })
    });

    new Address(travel_address1);
    new Address(travel_address2);

    new Direction({
        'start':     travel_address1,
        'end':       travel_address2,
        'roundtrip': travel_roundtrip,
        'direction': travel_direction,
        'TDI':       TransportDirectionInstance
    });
    new Roundtrip({
        'checkbox':  travel_roundtrip,
        'direction': travel_direction,
        'TDI':       TransportDirectionInstance
    });
    new DetourDirection({
        'direction': travel_detour_direction,
        'TDI':       TransportDirectionInstance
    });

    new AccommodationCharge({
        'item_bf': {
            'days':   accommodation_bf_days,
            'amount': accommodation_bf_amount,
            'total':  accommodation_bf_total
        },
        'item': {
            'days':   accommodation_wobf_days,
            'amount': accommodation_wobf_amount,
            'total':  accommodation_wobf_total
        },
        'flatrate': {
            'days':   accommodation_fr_days,
            'amount': accommodation_fr_amount,
            'total':  accommodation_fr_total
        },
        'total': accommodation_total
    });

    new TransportCharge({
        'car': {
            'direction': transport_car_direction,
            'amount':    transport_car_amount,
            'total':     transport_car_total
        },
        'train': transport_train_total,
        'taxi':  transport_taxi_total,
        'plane': transport_plane_total,
        'misc':  transport_misc_total,
        'total': transport_total
    });

    new MiscCharge({
        'semi':   misc_semi_total,
        'custom': [misc_custom1_total, misc_custom2_total],
        'total':  misc_total
    });

    new TotalCharge({
        'catering':      catering_total,
        'accommodation': accommodation_total,
        'transport':     transport_total,
        'misc':          misc_total,
        'total':         total
    });

    new SaveButton(save_button);
    new PrintButton(print_button);

    new Templates({
        'form': form,
        'img':  templates_img
    });
});
