
function bf_init(step) {
    bf_session['step'] = step;
    $('#bookingform_noscript').hide();
    $('#bookingform').show();
    switch (step) {
    case '':
        break;
    case 'start':
        $('#bf_airport_id span').each(function () {
            $(this).click(function () {
                bf_airport_change($(this).attr('name'));
            });
        })
        datepicker('departure_date', false);
        datepicker('return_date', false);
        $('#departure_date, #return_date').datepicker('option', 'minDate', new Date(bf_session['time']));
        $('#departure_date, #return_date').datepicker('option', 'numberOfMonths', 2);
        
        $('#departure_date, #return_date, #departure_airport, #adac').change(function(){
            bf_start_recheck();
        });
        if(bf_session['data']['parking_id'] != '' && bf_session['data']['parking_id'] != undefined){
            bf_airport_change(substr(bf_session['data']['parking_id'],0,3));
        }else{
            bf_airport_change('SXF');
        }
        break;
    case 'details':
        
        break;
    }    
}

function bf_previous(){
    switch (bf_session['step']) {
        case 'details':
        case 'success':
            window.location.href = '?step=start';
            break;
        case 'confirm':
            window.location.href = '?step=details';
            break;
    }
}

function bf_submit(value){
    switch (bf_session['step']) {
        case 'start':
            var price = $('#bf_parking_' + value + ' .price span').html();
            price = substr(price, 0, strpos(price,' '));
            var data = 'step=details';
            data = data + '&parking_id=' + value;
            if($('#adac').attr('checked')){
                data = data + '&adac=1';
            }
            data = data + '&price=' + price;
            data = data + '&departure_date=' + datetostr($('#departure_date').datepicker('getDate'));
            data = data + '&return_date=' + datetostr($('#return_date').datepicker('getDate'));
            //alert(data);
            $('#bf_form input').attr('value',data);
            $('#bf_form').submit();
            return false;
            break;
        case 'details':
            $('input[name=bookingform\[vehicle_id\]]').val($('input[name=bookingform\[vehicle_id\]]').val().toUpperCase());
            
            var bf_validator = new Object();
            //bf_validator['arrival_time'] = $('input[name=bookingform\[arrival_time\]]').val().search(/^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])$/) != -1;
            //bf_validator['departure_time'] = $('input[name=bookingform\[departure_time\]]').val().search(/^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])$/) != -1;
            //bf_validator['return_time'] = $('input[name=bookingform\[return_time\]]').val().search(/^(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])$/) != -1;
            //bf_validator['departure_flightnumber'] = $('input[name=bookingform\[departure_flightnumber\]]').val().search(/^([a-zA-Z]{2,3}[ ]{0,1}[0-9]{2,4})?[\?]?$/) != -1;
            //bf_validator['return_flightnumber'] = $('input[name=bookingform\[return_flightnumber\]]').val().search(/^([a-zA-Z]{2,3}[ ]{0,1}[0-9]{2,4})?$/) != -1;
            bf_validator['persons'] = $('input[name=bookingform\[persons\]]').val().search(/^[0-2]?[1-9]$/) != -1;
            bf_validator['babies'] = $('input[name=bookingform\[babies\]]').val().search(/^[0-2]?[0-9]$/) != -1;
            bf_validator['children'] = $('input[name=bookingform\[children\]]').val().search(/^[0-2]?[0-9]$/) != -1;
            bf_validator['vehicle_id'] = $('input[name=bookingform\[vehicle_id\]]').val().search(/^[A-ZÄÖÜ0-9 \-]{0,10}$/) != -1;
            bf_validator['name'] = $('input[name=bookingform\[name\]]').val().search(/^[^0-9]{0,32}$/) != -1;
            bf_validator['surname'] = $('input[name=bookingform\[surname\]]').val().search(/^[^0-9]{2,32}$/) != -1;
            bf_validator['phone'] = $('input[name=bookingform\[phone\]]').val().search(/^[0-9\+\-\/\(\) ]{6,32}$/) != -1;
            bf_validator['phone2'] = $('input[name=bookingform\[phone2\]]').val().search(/^[0-9\+\-\/\(\) ]{0,32}$/) != -1;
            bf_validator['email'] = $('input[name=bookingform\[email\]]').val().search(/^(([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))?$/) != -1;
            
            var bf_valid = true;
            for(var key in bf_validator){
                var selector = 'input[name=bookingform\[' + key + '\]]';
                $(selector).removeClass('bf_invalid');
                if(!bf_validator[key]){
                    $(selector).addClass('bf_invalid');
                    bf_valid = false;
                }
            }
            return bf_valid;
            break;
        case 'confirm':
            var selector = 'input[name=bookingform\[agb\]]';
            if($(selector).attr('checked')){
                return true;
            }else{
                alert('Bitte bestätigen Sie Ihre Einwilligung für unsere AGB.')
                return false;
            }
        default:
            alert('Error in bf_submit(). Step not found: "' + bf_session['step'] + '"');
            return false;
    }
}

function bf_airport_change(airport_key) {
    bf_session['airport_key'] = airport_key;
    
    $('#bf_airport_id span[name="' + airport_key + '"]').addClass('active');
    $('#bf_airport_id span[name!="' + airport_key + '"]').removeClass('active');

    if (airport_key == 'TRANSFER') {
        $('select[name$="_airport_key"]').removeAttr('disabled');
        $('#bf_adac_box').hide();
    } else {
        $('select[name$="_airport_key"] option[value="' + airport_key + '"]').attr('selected', 'selected');
        $('select[name$="_airport_key"]').attr('disabled', 'disabled');
        $('#bf_adac_box').show();
    }
    
    $('tr[class="bf_parkings"][name="bf_parkings_' + airport_key + '"]').show();
    $('tr[class="bf_parkings"][name!="bf_parkings_' + airport_key + '"]').hide();
    
    bf_start_recheck();
}

function bf_start_recheck(){
    var date = $('#departure_date').datepicker('getDate');
    var airport_key = bf_session['airport_key'];
    var days = ($('#return_date').datepicker('getDate') - $('#departure_date').datepicker('getDate')) / ( 86400 * 1000 ) + 1;
    if(days < 1){
        var date_return = new Date;
        $('#return_date').datepicker('setDate', new Date(date));
        days = 1;
    } 
    days = Math.round(days);
    
    if (airport_key == 'TRANSFER'){
        var departure_airport_key = $('select[name="departure_airport_key"]').val(); 
        var return_airport_key = $('select[name="return_airport_key"]').val(); 
        
        $('select[name="return_airport_key"] option[value!="' + departure_airport_key + '"]').removeAttr('disabled');
        $('select[name="return_airport_key"] option[value="' + departure_airport_key + '"]').attr('disabled', 'disabled');
        
        if(departure_airport_key == return_airport_key){
            $('select[name="return_airport_key"] option[value!="' + departure_airport_key + '"]:first').attr('selected', 'selected');
        }   
    }
        
    for (var parking_id = 0; parking_id < bf_pricelist[airport_key].length; parking_id++) {
        var price = 0;
        var price_class = false;
        for (var list_id = 0; list_id < bf_pricelist[airport_key][parking_id].length; list_id++){
            var list = bf_pricelist[airport_key][parking_id][list_id];
            var from_date = strtodate(list['from_date']);
            var to_date = strtodate(list['to_date']);
            if(from_date <= date && to_date >= date){
            //$('#debug').html($('#debug').html()+ "<br />days :" + days + "<br />date: " + date + "<br />from_date: " + from_date + "<br />to_date: " + to_date+"<br />");
                for(var row_id = 0; row_id < list['prices'].length; row_id++){
                    var row = list['prices'][row_id];
                    if(days <= row['days']){
                        price =  parseFloat(row['fix']) + days * parseFloat(row['daily']);
                        if(row['class'] != ''){
                            price_class = row['class'];
                        }
                        break;
                    }
                }
            }
        }
        if (airport_key != 'TRANSFER'){
            if($('#adac').attr('checked') == true){
                var discount = Math.round( 0.05 * price );
                price = price - discount;
            }
        }
        
        if(price_class == '' && price == 0){
            price_class = 'noprice';
        }

        $('#bf_parking_' + airport_key + '_' + parking_id).removeClass(
            'bf_box_noprice bf_box_nocheck bf_box_check bf_box_nocapacity bf_box_available'
        );
        
        if(price_class == ''){
            var return_date = $('#return_date').datepicker('getDate');
            price_class = 'available';
            var check_date = $('#departure_date').datepicker('getDate');
            while(check_date <= return_date){
                if(bf_availability[airport_key][parking_id][datetostr(check_date)] == undefined){
                    price_class = 'nocheck';
                    break;                  
                }if(bf_availability[airport_key][parking_id][datetostr(check_date)] == 0 ){
                    price_class = 'nocapacity';
                    break;
                }
                check_date.setDate(check_date.getDate() + 1);   
            }
        }
        $('#bf_parking_' + airport_key + '_' + parking_id).addClass('bf_box_' + price_class);
        $('#bf_parking_' + airport_key + '_' + parking_id + ' .price span').html(price + ' &euro;');
    }
}

/**************************************************************/

function datepicker(id, buttons){
    id = '#' + id;
    $(id).datepicker({
        altFormat: 'yy-mm-dd',
        altField: id + '_alt',
        showButtonPanel: true,
        showOtherMonths: true,
        selectOtherMonths: true
    });
    if (buttons) {
        datepicker_buttons(id);
    }
}

function datepicker_buttons(id){
    $(id + '_next').click(function() {
        var date = $(id).datepicker('getDate');
        date.setDate(date.getDate() + 1);
        $(id).datepicker('setDate', date);
        $(id).change();
    });
    $(id + '_previous').click(function() {
        var date = $(id).datepicker('getDate');
        date.setDate(date.getDate() - 1);
        $(id).datepicker('setDate', date);
        $(id).change();
    });
}

function monthpicker_buttons(id){
    id = '#' + id;
    $(id + '_next').click(function() {
        var date = strtodate_de('01.'+$(id).val());
        date.setMonth(date.getMonth() + 1);
        $(id).val(substr(datetostr_de(date),3));
        $(id).change();
    });
    $(id + '_previous').click(function() {
        var date = strtodate_de('01.'+$(id).val());
        date.setMonth(date.getMonth() - 1);
        $(id).val(substr(datetostr_de(date),3));
        $(id).change();
    });
}

function datetostr(js_date){
    var str = date('Y-m-d', js_date.getTime() / 1000);
    return str;
}

function datetostr_de(js_date){
    var str = date('d.m.Y', js_date.getTime() / 1000);
    return str;
}

function strtodate(str){
    var date = new Date(substr(str,0,4), substr(str,5,2) - 1, substr(str,8,2));
    return date;
}

function strtodate_de(str){
    var date = new Date(substr(str,6,4), substr(str,3,2) - 1, substr(str,0,2));
    return date;
}
