/**
  * Displays the shortcode content for the Bootstrap 3 style.
  *
  * @param string $input The input string, can be empty.
  * @param int $bookingid The ID of the BTB_Booking to process.
  * @param array $atts The shortcode attributes. See class description for explanation.
  */
 public static function bs3_style_filter($input, $bookingid, array $atts)
 {
     $ret = $input;
     $ret .= '<div id="btb_checkout_table">';
     // START CREATING FORM
     if (!empty($atts['headline'])) {
         $ret .= '<h3>' . $atts['headline'] . '</h3>';
     }
     $ret .= '<form id="btb_checkout_form" method="post" onSubmit="return checkForm()">';
     $ret .= wp_nonce_field('btb_checkout_data', 'btb_checkout_nonce', true, false);
     $ret .= '<input type="hidden" value="' . $bookingid . '" id="btb_checkout_bookingid" name="btb_checkout_bookingid">';
     $ret .= '<input type="hidden" value="false" id="btb_checkout_cancel" name="btb_checkout_cancel">';
     $ret .= '<div class="row btb_checkout_row">';
     $formLabel = new BTCFormLabel(array('for' => 'btb_checkout_title'), __('Form of address', 'bt-booking'));
     $formSelect = new BTCFormSelect(array('mr' => __('Mr.', 'bt-booking'), 'mrs' => __('Mrs.', 'bt-booking')), array('id' => 'btb_checkout_title'), array('htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-2">' . $formLabel->render(false) . '<br>' . $formSelect->render(false) . '</div>';
     $firstNameLabel = new BTCFormLabel(array('for' => 'btb_checkout_first_name'), __('First name', 'bt-booking') . '<span style="color:red">*</span>');
     $firstNameInput = new BTCInputText(array('id' => 'btb_checkout_first_name', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-5">' . $firstNameLabel->render(false) . $firstNameInput->render(false) . '</div>';
     $lastNameLabel = new BTCFormLabel(array('for' => 'btb_checkout_last_name'), __('Last name', 'bt-booking') . '<span style="color:red">*</span>');
     $lastNameInput = new BTCInputText(array('id' => 'btb_checkout_last_name', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-5">' . $lastNameLabel->render(false) . $lastNameInput->render(false) . '</div>';
     $ret .= '</div>';
     $ret .= '<div class="row btb_checkout_row">';
     $addressLabel = new BTCFormLabel(array('for' => 'btb_checkout_address'), __('Address', 'bt-booking') . '<span style="color:red">*</span>');
     $addressInput = new BTCInputText(array('id' => 'btb_checkout_address', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-12">' . $addressLabel->render(false) . $addressInput->render(false) . '</div>';
     $ret .= '</div>';
     $ret .= '<div class="row btb_checkout_row">';
     $plzLabel = new BTCFormLabel(array('for' => 'btb_checkout_zip'), __('Postal code', 'bt-booking') . '<span style="color:red">*</span>');
     $plzInput = new BTCInputText(array('id' => 'btb_checkout_zip', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-3">' . $plzLabel->render(false) . $plzInput->render(false) . '</div>';
     $cityLabel = new BTCFormLabel(array('for' => 'btb_checkout_city'), __('City', 'bt-booking') . '<span style="color:red">*</span>');
     $cityInput = new BTCInputText(array('id' => 'btb_checkout_city', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-4">' . $cityLabel->render(false) . $cityInput->render(false) . '</div>';
     $countryLabel = new BTCFormLabel(array('for' => 'btb_checkout_country'), __('Country', 'bt-booking') . '<span style="color:red">*</span>');
     $countrySelect = new BTCFormSelect(BTBookingCountries::get_countries(), array('id' => 'btb_checkout_country', 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-5">' . $countryLabel->render(false) . '<br>' . $countrySelect->render(false) . '</div>';
     $ret .= '</div>';
     $ret .= '<div class="row btb_checkout_row">';
     $phoneLabel = new BTCFormLabel(array('for' => 'btb_checkout_phone'), __('Phone number', 'bt-booking') . '<span style="color:red">*</span>');
     $phoneInput = new BTCInputText(array('id' => 'btb_checkout_phone', 'required' => true, 'pattern' => '^[+0123456789][\\/\\-\\d\\s]*', 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-6">' . $phoneLabel->render(false) . $phoneInput->render(false) . '</div>';
     $emailLabel = new BTCFormLabel(array('for' => 'btb_checkout_mail'), __('E-mail address', 'bt-booking') . '<span style="color:red">*</span>');
     $emailInput = new BTCInputText(array('id' => 'btb_checkout_mail', 'required' => true, 'htmlClasses' => 'form-control'));
     $ret .= '<div class="form-group col-md-6">' . $emailLabel->render(false) . $emailInput->render(false) . '</div>';
     $ret .= '</div>';
     $ret .= '<div class="row btb_checkout_row"><div class="col-md-12">';
     $ret .= '<label for="btb_checkout_notes">' . __('Booking notes', 'bt-booking') . '</label><textarea style="width:100%" rows=5 id="btb_checkout_notes" name="btb_checkout_notes" placeholder="' . __('Notes for your booking', 'bt-booking') . '"></textarea>';
     $ret .= '</div></div>';
     $info = get_option('btb_checkout_info', '');
     if (!empty($info)) {
         $ret .= '<div class="row btb_checkout_row"><div class="col-md-12"><div id="btb_checkout_info">' . $info . '</div></div></div>';
     }
     if (get_option('btb_checkout_require_terms', 0)) {
         $ret .= '<div class="row btb_checkout_row"><div class="col-md-12"><fieldset><label for="btb_checkout_terms_accepted"><input type="checkbox" id="btb_checkout_terms_accepted" name="btb_checkout_terms_accepted" value="1" required></input>' . get_option('btb_checkout_require_text', '') . '</label></fieldset></div></div>';
     }
     $ret .= '<div class="row btb_checkout_row"><div class="col-md-12"><div id="error_message_container" style="display:none"></div></div></div>';
     $ret .= '<div class="btb_checkout_row">';
     $ret .= '<button style="float:right" type="submit" class="btn btn-primary btn-sm">' . get_option('btb_checkout_book_now_text', __('Book now', 'bt-booking')) . '</button>';
     $ret .= '<button formnovalidate onClick="cancelBooking()" style="float:left" type="submit" class="btn btn-warning btn-sm">' . __('Cancel booking', 'bt-booking') . '</button>';
     $ret .= '</div>';
     $ret .= '</form>';
     // END CREATING FORM
     $ret .= '</div>';
     // END CONTAINER
     return $ret;
 }
 /**
  * Provides the meta box showing the customers identity data.
  *
  * @param object $post
  */
 public static function btb_booking_address_box($post)
 {
     $booking = btb_get_booking($post->ID);
     wp_nonce_field('btb_save_booking_address_box_data', 'btb_booking_addres_box_nonce');
     $companyrow = new BTCTableRow();
     $companyrow->add_content(BTCWPAdminInputSelect::create('btb_title', __('Form of address', 'bt-booking'), $booking->title, array('mr' => __('Mr.', 'bt-booking'), 'mrs' => __('Mrs.', 'bt-booking')), true));
     $companyrow->add_content(BTCWPAdminInputText::create('btb_company', __('Company', 'bt-booking'), $booking->company, true));
     $namerow = new BTCTableRow();
     $namerow->add_content(BTCWPAdminInputText::create('btb_first_name', __('First name', 'bt-booking'), $booking->first_name, true));
     $namerow->add_content(BTCWPAdminInputText::create('btb_last_name', __('Last name', 'bt-booking'), $booking->last_name, true));
     $address = get_post_meta($post->ID, 'btb_address');
     $a = $address[0];
     $addressrow = new BTCTableRow();
     $addressrow->add_content(BTCWPAdminInputText::create('btb_address', __('Address', 'bt-booking'), $booking->address, true));
     $addressrow->add_content(BTCWPAdminInputText::create('btb_address2', __('Additional address', 'bt-booking'), $booking->address2, true));
     $cityrow = new BTCTableRow();
     $cityrow->add_content(BTCWPAdminInputText::create('btb_city', __('City', 'bt-booking'), $booking->city, true));
     $cityrow->add_content(BTCWPAdminInputText::create('btb_zip', __('Postal code', 'bt-booking'), $booking->zip, true));
     $countryrow = new BTCTableRow();
     $countryrow->add_content(BTCWPAdminInputSelect::create('btb_country', __('Country', 'bt-booking'), $booking->country, BTBookingCountries::get_countries(), true));
     $emailrow = new BTCTableRow();
     $emailrow->add_content(BTCWPAdminInputText::create('btb_mail', __('E-mail address', 'bt-booking'), $booking->email, true));
     $emailrow->add_content(BTCWPAdminInputText::create('btb_phone', __('Phone number', 'bt-booking'), $booking->phone, true));
     $table = new BTCTable(array('htmlClasses' => 'form-table'), new BTCTableBody(array(), array($companyrow, $namerow, $addressrow, $cityrow, $countryrow, $emailrow)));
     $table->render();
 }
    /**
     * Provides the meta box for editinig the venue address.
     *
     * The box provides input fields for the addres and map location of the venue.
     *
     * @param object $post
     */
    public static function btb_venue_address_box($post)
    {
        $venue = btb_get_venue($post->ID);
        wp_localize_script('btb-edit-venue-script', 'BTBooking', array('lat' => $venue->latitude, 'lng' => $venue->longitude, 'queryErrorMsg' => __('When querying the data an error has occurred.', 'bt-booking'), 'nothingFoundMsg' => __('For the specified address no place could be found.', 'bt-booking')));
        wp_enqueue_script('btb-edit-venue-script');
        wp_nonce_field('btb_save_venue_address_box_data', 'btb_venue_address_box_nonce');
        // Creating first row, showing street name and house number
        $row1 = new BTCTableRow();
        $row1->add_content(BTCWPAdminInputText::create('btb_address_street', esc_html__('Street', 'bt-booking'), $venue->street));
        $row1->add_content(BTCWPAdminInputText::create('btb_address_number', esc_html__('Number', 'bt-booking'), $venue->house_number));
        // Creating second row, showing postal code and city
        $row2 = new BTCTableRow();
        $row2->add_content(BTCWPAdminInputText::create('btb_address_zip', esc_html__('Postal code', 'bt-booking'), $venue->postal_code));
        $row2->add_content(BTCWPAdminInputText::create('btb_address_city', esc_html__('City', 'bt-booking'), $venue->city));
        // Creating third row, showing state/region and country
        $row3 = new BTCTableRow();
        $row3->add_content(BTCWPAdminInputText::create('btb_address_region', esc_html__('State/Region', 'bt-booking'), $venue->region));
        $row3->add_content(BTCWPAdminInputSelect::create('btb_address_country', esc_html__('Country', 'bt-booking'), $venue->country, BTBookingCountries::get_countries()));
        // Creating fourth row, showing switch for using map coordinates
        $row4 = new BTCTableRow();
        $row4->add_content(BTCWPAdminInputCheckbox::create('btb_use_coordinates', esc_html__('Use map coordinates', 'bt-booking'), $venue->use_map_coords));
        $row4->add_content(new BTCTableData());
        $saButtonAttrs = array('id' => 'search_address', 'type' => 'button', 'htmlClasses' => 'button button-small');
        if (!$venue->use_map_coords) {
            $saButtonAttrs["style"] = "display:none";
        }
        $row4->add_content(new BTCTableData(new BTCFormButton($saButtonAttrs, esc_html__('Search address', 'bt-booking'))));
        $table = new BTCTable(array('htmlClasses' => 'form-table'), new BTCTableBody(array(), array($row1, $row2, $row3, $row4)));
        $table->render();
        $loc_table = new BTCTable(array('id' => 'locs_table', 'htmlClasses' => 'form-table', 'style' => 'display:none;'));
        $loc_head_row = new BTCTableRow();
        $thstyle = array('padding' => '15px 10px');
        $loc_head_row->add_content(new BTCTableData(esc_html__('Choose', 'bt-booking'), array('style' => $thstyle), true));
        $loc_head_row->add_content(new BTCTableData(esc_html__('Street & No.', 'bt-booking'), array('style' => $thstyle), true));
        $loc_head_row->add_content(new BTCTableData(esc_html__('City', 'bt-booking'), array('style' => $thstyle), true));
        $loc_head_row->add_content(new BTCTableData(esc_html__('ZIP', 'bt-booking'), array('style' => $thstyle), true));
        $loc_head_row->add_content(new BTCTableData(esc_html__('State', 'bt-booking'), array('style' => $thstyle), true));
        $loc_head = new BTCTableHead(array(), $loc_head_row);
        $loc_body = new BTCTableBody(array('id' => 'locs_body'));
        $loc_table->head = $loc_head;
        $loc_table->body = $loc_body;
        $loc_table->render();
        ?>
		<input type="hidden" id="btb_address_lat" name="btb_address_lat" value="<?php 
        echo $venue->latitude;
        ?>
">
		<input type="hidden" id="btb_address_lon" name="btb_address_lon" value="<?php 
        echo $venue->longitude;
        ?>
">

		<div id="mapMessages">
		</div>

		<div id="venueMap" style="height:300px;<?php 
        echo $venue->use_map_coords ? '' : ' display:none';
        ?>
">
		</div>

		<?php 
    }
 public function struct_data_address_country_cb()
 {
     BTCWPSettingsFormSelect::render('btb_struct_data_country', BTBookingCountries::get_countries(), get_option('btb_struct_data_country', ''), esc_html__('Country of your organization\'s address.', 'bt-booking'));
 }