File "booking1.js"

Full Path: /home/ptgoldenvisa/public_html/scheduleyourcall/booking1.js
File size: 9.98 KB
MIME-type: text/plain
Charset: utf-8

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) month = '0' + month;
    if (day.length < 2) day = '0' + day;

    return [year, month, day].join('-');
}

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

function initPhoneInput(){
    var input = $("#phone"),
        output = $("#output");

    input.intlTelInput({
        nationalMode: true,
        initialCountry: "auto",
        // initialCountry: "at",
        utilsScript: "js/utils.js", // just for formatting/placeholders etc
        geoIpLookup: function(callback) {
            $.get('https://ipinfo.io', function() {}, "jsonp").always(function(resp) {
                var countryCode = (resp && resp.country) ? resp.country : "AT";
                callback(countryCode);
            });
        },
    });

    // listen to "keyup", but also "change" to update when the user selects a country
    input.on("keyup change", function() {
        var intlNumber = input.intlTelInput("getNumber");
        if (intlNumber) {
            var m = (window.phoneMsg && window.phoneMsg.int) || "International: ";
            output.text(m + intlNumber);
        } else {
            var m = (window.phoneMsg && window.phoneMsg.cta) || "Please enter a number below";
            output.text(m);
        }
    });
}

$(document).ready(function(){

    //var appUrl = 'https://script.google.com/macros/s/AKfycbxcOoYJmZvlqde7e3hrAazfFmmKo4iJCoJc93oDWW1AqJBGjROb/exec'; // Sergey's app
    var appUrl = 'https://script.google.com/macros/s/AKfycbzuZxqLx_0jj83hxVs4pYq8cqCZTMJB6_BLKdQLNgrqGKUI83M/exec'; // Sara's app
    var appointmentDate;
    var $container = $('#picker');
    var selectedSlot;
    var muteConnErr = false;

    initPhoneInput();

    function dateSelected(date){
        selectedSlot = null;
        var d = formatDate(date);

        updTimeslots(d);
    }

    var i18n = window.pikaday_i18n || {
            previousMonth : 'Previous Month',
            nextMonth     : 'Next Month',
            months        : ['January','February','March','April','May','June','July','August','September','October','November','December'],
            weekdays      : ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],
            weekdaysShort : ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
        };
    var tzList = moment.tz.names();
    var tzListFormatted = $.map(tzList, function (obj) {
        // obj.text = obj.text || obj.name; // replace name with the property used for the text
        return {
            id: obj,
            text: moment.tz(obj).format('Z z') + " " + obj
        }
    });
    var localTz = moment.tz.guess();
    $('#tz').select2({
        data: tzListFormatted
    });
    $('#tz').val(localTz).trigger('change');
    $('#tz').on('change.select2', function(){
        localTz = $('#tz').val();
        renderSlots();
    });

    var disabledDates = [];
    var picker = new Pikaday({
        field: document.getElementById('pikaday'),
//        firstDay: 1,
        bound: false,
        container: document.getElementById('pc'),
        i18n: i18n,
        minDate: new Date(),
        firstDay: window.calendarStartsAt || 0,
        disableDayFn: function(date){
            return (date.getDay() === 6 || date.getDay() === 0); // modified by Volodymyr  https://www.upwork.com/o/profiles/users/_~0145ce7ea4bc029243/ , saturday day number is 6. disabled
//            return (date.getDay() === 0);
        },
        onSelect: dateSelected
    });


    var initD = getParameterByName('date', window.location.href);
    if (initD) {
        picker.setDate(initD);
        selectedSlot = null;
        updTimeslots(initD);
    }

    var locales = {
        'de': 'de-DE',
        'ru': 'ru-RU',
        'en': 'en-EN'
    };
    var lang = getParameterByName('lang', window.location.href) || window.language || 'en';

    function showPage(n){
        var classList = $('.pages').attr('class').split(/\s+/);
        $.each(classList, function(index, item) {
            if (item.substr(0,5) === 'show-') {
                $('.pages').removeClass(item);
            }
        });

        $('.pages').addClass('show-'+n);
    }

    function connError(){
        if (muteConnErr) {
            muteConnErr = false;
            return;
        }
        $.alert({
            type: 'red',
            boxWidth: '30%',
            useBootstrap: false,
            title: 'Oops ...',
            content: window.conn_err || 'Connection error. Try again.',
        });
    }

    $('.change-app').click(function(){
        showPage(1);
        selectedSlot = null;
        var d = formatDate(picker.getDate());
        updTimeslots(d);
        return false;
    });

    function toTimeZone(time, zone) {
        var format = 'hh:mm A';
        return moment(time, format).tz(zone).format(format);
    }

    var slotRequest, slotList = [];
    function renderSlots(forDate){
        $('#slots').replaceWith($('<div />').attr('id', 'slots'));
        //$('#slots').children().remove();

        if (0 == slotList.length) {
            var _day = (forDate === formatDate(new Date())) ? "today" : i18n.weekdays[new Date(forDate).getDay()];
            $('#slots').append($('<span />').text("We are fully booked for " + _day + ". Please choose another day"));
        }
        for (var i=0;i<slotList.length;i++) {
            var title = slotList[i].start;
            title = toTimeZone(new Date(title), localTz);

            var $a = $('<a />').text(title).addClass('app').attr('href', '#');
            $a.slot = slotList[i];

            $a.click(function (sl) {
                return function () {
                    $(this).siblings().remove();
                    selectedSlot = sl;
                    var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
                    var str = new Date(sl.start).toLocaleString(locales[lang], options) + " <span class='slot'>" + toTimeZone(new Date(sl.start), localTz) + "</span>";
                    $('#app-time span').html(str);
                    showPage(2);
                    return false;
                };
            }(slotList[i]));

            $('#slots').append($a);
        }

        $("#slots").mCustomScrollbar({
            axis:"y",
            theme:"dark"
        });
    }

    function updTimeslots(date, live){
        var $slots = $('#slots');
        $('#no-slots').hide();
        $('#circularG').show();
        $slots.html('');

        if (slotRequest){
            muteConnErr = true;
            slotRequest.abort();
            $('#circularG').show();
        }

        var qString = '?date='+date;
        if (live) {
            qString += '&source=live';
        }
        slotRequest = $.get(appUrl+qString);
        slotRequest.fail(connError);
        slotRequest.always(function(){
            $('#circularG').hide();
        });



        //////////// for DEV puprposes ///////////////

        // var daySlots = [{"start":"2018-06-21T05:00:00.000Z","end":"2018-06-21T05:30:00.000Z"},{"start":"2018-06-21T05:50:00.000Z","end":"2018-06-21T06:20:00.000Z"},{"start":"2018-06-21T06:40:00.000Z","end":"2018-06-21T07:10:00.000Z"},{"start":"2018-06-21T07:30:00.000Z","end":"2018-06-21T08:00:00.000Z"},{"start":"2018-06-21T08:20:00.000Z","end":"2018-06-21T08:50:00.000Z"},{"start":"2018-06-21T09:10:00.000Z","end":"2018-06-21T09:40:00.000Z"},{"start":"2018-06-21T10:00:00.000Z","end":"2018-06-21T10:30:00.000Z"},{"start":"2018-06-21T10:50:00.000Z","end":"2018-06-21T11:20:00.000Z"},{"start":"2018-06-21T11:40:00.000Z","end":"2018-06-21T12:10:00.000Z"},{"start":"2018-06-21T12:30:00.000Z","end":"2018-06-21T13:00:00.000Z"},{"start":"2018-06-21T13:20:00.000Z","end":"2018-06-21T13:50:00.000Z"},{"start":"2018-06-21T14:10:00.000Z","end":"2018-06-21T14:40:00.000Z"},{"start":"2018-06-21T15:00:00.000Z","end":"2018-06-21T15:30:00.000Z"},{"start":"2018-06-21T15:50:00.000Z","end":"2018-06-21T16:20:00.000Z"},{"start":"2018-06-21T16:40:00.000Z","end":"2018-06-21T17:10:00.000Z"},{"start":"2018-06-21T17:30:00.000Z","end":"2018-06-21T18:00:00.000Z"},{"start":"2018-06-21T18:20:00.000Z","end":"2018-06-21T18:50:00.000Z"}];
        // slotList = daySlots;
        // renderSlots();

        /////////////////////////////////////////

        slotRequest.success(function(daySlots){
            slotList = daySlots;
            renderSlots(date);

        });


    }

    $('#book').click(function(){
        var form = $( "#details" );
        form.validate({
            rules: {
                email: 'email'
            }
        });

       if (!form.valid()){
           return;
       }

        var fdata = {
            name: $('#details .name input').val(),
            phone: $("#phone").intlTelInput("getNumber"),
            email: $('#details .email input').val(),
            subject: window.location.href /* $('#details .subject input').val(), */
        };

        var data = $.extend({}, selectedSlot, fdata);
        $('#book').attr('disabled', true);
        var req = $.post( appUrl, {data: JSON.stringify(data)} );
        req.success(function(data){
            showPage(3);
            $('.page3').removeClass('is-ok').removeClass('is-again');

            if ('ok' == data) {
                $('.page3').addClass('is-ok');
                var d = formatDate(picker.getDate());
            } else {
                $('.page3').addClass('is-again');
            }
        });
        req.fail(connError);
        req.always(function(){
            $('#book').attr('disabled', false)
        });
    });

    $('.retry').click(function(){
        showPage(1);
        selectedSlot = null;
        $('#slots').html('');
        var d = formatDate(picker.getDate());
        updTimeslots(d, true);
        return false;
    });

});