var disableCreateReview = false;
var uploadedImages = [];




$('#first_review_form').submit(function (e) {
    e.preventDefault();
    createReview(true);
    return false;
});

/* delay function to dalay running sript in some cases */
/**
* Usage
*   $('input').keyup(function() {
*       delay(function(){
*         alert('Time elapsed!');
*       }, 1000 );
*   });
*
*/

var delay = (function() {
    var timer = 0;
    return function(callback, ms) {
        clearTimeout(timer);
        timer = setTimeout(callback, ms);
    };
})();


var public_ip_address  = '';
var triggered  = false;

$(document).on('blur', '#comments', function(event) {
    event.preventDefault();

    var length = $('#comments').val().length;
    if (!triggered) {
        if (length > 50) {
            $.ajax({
                url: '/get-questions-html',
                type: 'get',
                dataType: 'json',
                data: {
                    comments: $('#comments').val(),
                    url_key: 'eazyresearch-com'
                },
                success: function(data, textStatus, xhr) {
                    if (data.count > 0) {
                        $('#reviewQuestions').html(data.html);
                        triggered = true;
                    }
                }
            });
        } else {
            $('#reviewQuestions').html('');
            triggered = false;
        }
    }
});

var selectedQRating = 0;
var clickedQRating = false;


$(document).on('mouseover', '.WriteReviewForm__Qstars', function(event) {
    event.preventDefault();
    var i = $(this).data('star');
    for (x=1; x<=i; x++) {
        $('.WriteReviewForm__Qstars[data-star=' + x + ']').addClass('isSelected');
    }
    for (x=i+1; x<=5; x++) {
        $('.WriteReviewForm__Qstars[data-star=' + x + ']').removeClass('isSelected');
    }
});
$(document).on('mouseleave', '.WriteReviewForm__Qstars', function(event) {
    event.preventDefault();
    $('.WriteReviewForm__Qstars').removeClass('isSelected');
    if(clickedQRating) {
        i = selectedQRating;
        for (x=1; x<=i; x++) {
            $('.WriteReviewForm__Qstars[data-star=' + x + ']').addClass('isSelected');
        }
    }
});
$(document).on('click', '.WriteReviewForm__Qstars', function(event) {
    event.preventDefault();
    var i = $(this).data('star');
    for (x=0; x<=i; x++) {
        $('.WriteReviewForm__Qstars[data-star=' + x + ']').addClass('isSelected');
    }
    clickedQRating = true;
    selectedQRating = i;
});

$(document).on('change', 'input[name="review8"]', function(event) {
    event.preventDefault();
    $('#howMuch').addClass('hidden');
    if ($(this).data('answer') == 22 ) {
        $('#howMuch').removeClass('hidden');
    }
});

$(document).on('change', 'input[name^="review"]', function(event) {
    event.preventDefault();
    if ($(this).hasClass('notApplicable')) {

        var metric = $(this).closest('.WriteReviewForm__metric');
        var _this = $(this).closest('.WriteReviewForm__items');
        var others = metric.find('.WriteReviewForm__items').not(_this);
        others.addClass('hidden');
        others.each(function(index, el) {

                $(el).find('input:radio[class="radioBox__input"]:checked').prop('checked', false).attr('checked', false);

                if ($(el).has('.WriteReviewStars').length > 0) {
                clickedQRating = false;
                selectedQRating = 0;
                for (x=0; x<= i; x++) {
                    $('.WriteReviewForm__Qstars[data-star=' + x + ']').removeClass('isSelected');
                }
            }

            $('#howMuch').addClass('hidden');
        });
    }
    if ($(this).hasClass('Applicable')) {

        var metric = $(this).closest('.WriteReviewForm__metric');
        var _this = $(this).closest('.WriteReviewForm__items');
        var others = metric.find('.WriteReviewForm__items').not(_this);
        others.removeClass('hidden');

    }
});

async function createReview(firstReview) {

    if (typeof uploaded !== 'undefined' && uploaded == false){
        return;
    }

    if(!disableCreateReview) {
        if(firstReview) {
            var rating = selectedRating;
            var content = $('#review_content_input').val();
            var name = $('#review_name_input').val();
            var email = $('#review_email_input').val();

            var data = new FormData();

            var questions = [];

            var howMuck = null;
            if ($('#howMuch').length > 0) {
                howMuck = $('#howMuch').val();
            }

            if (selectedQRating != 0) {
                var el =  $('.WriteReviewForm__Qstars[data-star=' + selectedQRating + ']');
                questions.push({
                    'metric' :  el.data('metric'),
                    'question' :  el.data('question'),
                    'answer' :  el.data('answer'),
                    'value' :  null,
                }) ;
            }

            $.each($('.WriteReviewForm__items'), function(index, el) {
                var question = $(el).find('input:radio:checked');

                if (question.length > 0) {
                    if (!question.hasClass('notApplicable')) {
                        questions.push({
                            'metric' : question.data('metric'),
                            'question' : question.data('question'),
                            'answer' : question.data('answer'),
                            'value' :  ((question.data('question') == 8 && question.data('answer') == 22) ? howMuck : null),
                        }) ;
                    }
                }
            });

            data.append('questions', JSON.stringify(questions));

            data.append('ip_address', public_ip_address);

            data.append('rating', rating);
            data.append('comments', content);
            data.append('name', name);
            data.append('email', email);
            data.append('store', store_url_key);

        } else {
            //Bind to formData for image uploading purposes
            var data = new FormData();

            var questions = [];

            var howMuck = null;
            if ($('#howMuch').length > 0) {
                howMuck = $('#howMuch').val();
            }

            if (selectedQRating != 0) {
                var el =  $('.WriteReviewForm__Qstars[data-star=' + selectedQRating + ']');
                questions.push({
                    'metric' :  el.data('metric'),
                    'question' :  el.data('question'),
                    'answer' :  el.data('answer'),
                    'value' :  null,
                }) ;
            }

                $.each($('.WriteReviewForm__items'), function(index, el) {
                var question = $(el).find('input:radio:checked');

                if (question.length > 0) {
                    if (!question.hasClass('notApplicable')) {
                        questions.push({
                            'metric' : question.data('metric'),
                            'question' : question.data('question'),
                            'answer' : question.data('answer'),
                                'value' :  ((question.data('question') == 8 && question.data('answer') == 22) ? howMuck : null),
                        }) ;
                    }
                }
            });

            data.append('questions', JSON.stringify(questions));

            data.append('ip_address', public_ip_address);

            data.append('rating', selectedRating);
            data.append('comments', $('#comments').val());
            data.append('name', $('#name').val());
            data.append('email', $('#email').val());
            data.append('storeId', 'WM1ZX');

            //Bind to local variables for validation
            var rating = selectedRating;
            var content = $('#comments').val();
            var name = $('#name').val();
            var email = $('#email').val();

            
            
                data.append('files', $('#uploaded').val());

                // data.append('images', included_images );
                //var fileInput = document.getElementById("files_198663");
                //var files = fileInput.files;

                //for (x=0; x <= files.length; x++) {
                //    data.append('image[]', files[x]);
                //}

            
        }



        
        // Display the key/value pairs
        // for (var pair of data.entries())
        // {
        //  console.log(pair[0]+ ', '+ pair[1]);
        // }
        // return false;

        if(validateReview(rating, content, name, email, firstReview)) {

            if (grecaptcha instanceof Object) {
                const token = await grecaptcha.execute('6LfXZCkaAAAAAA6P92lEjjUSaoqB_tFkjJB_8G1A', { action: 'company_page_submit_review' });
                data.append('recaptcha_token', token);
            }

            if (FingerprintJS instanceof Object) {
                const fp = await FingerprintJS.load();
                const fpResult = await fp.get();
                data.append('device_fingerprint', fpResult.visitorId);
            }

            data.append('iovation_blackbox', document.getElementById('iovation_blackbox').value);

            submitForm(data, firstReview);
        }
    }
    return false;
};

function submitForm(data, firstReview) {

    disableForm(true, firstReview);
    //$('#review_submit_loading').toggle();
    $('#submitReview').toggleClass( "Button--isLoading" );
    $('#formOverlay').toggle();

    $.ajax({
        url: '/save-review',
        //url: '/submit-review',
        type: 'post',
        data: data,
        dataType: 'json',
        processData: false,
        contentType: false,
        cache: false,
        success: function (data) {
            if (data.status == 'success') {

                //Displays a Thankyou Message after a successful review
                if(firstReview) {
                    $('#review_content_input').val('');
                    $('#review_name_input').val('');
                    $('#review_email_input').val('');
                } else {
                    thankyouRedirect(data);
                    $('#comments').val('');
                    $('#email').val('');
                    $('#name').val('');
                    selectedRating = 0;
                    for (x=0; x<=5; x++) {
                        $('.WriteReviewStars__star[data-rating='+x+']').removeClass('isSelected');
                    }

                    thankyouRedirect(data);
                    // createShareLink(store_url_key, data.review_id);
                    // $('.WriteReviewThankYou').addClass('isActive');
                    $('.WriteReviewForm').removeClass('isActive');
                    $('.WriteReviewForm').attr('aria-hidden', true);
                    reviewFormOpen = false;
                    disableForm(false, firstReview);

                }
            } else {
                const message = data.message || "please try again later";
                $('#review_error_main_output').html("* There was a problem submitting your review; " + message + ".");
                disableForm(false, firstReview);
                $('#submitReview').toggleClass( "Button--isLoading" );
                $('#formOverlay').toggle();
            }
        },
        error: function(response, textStatus, errorThrown) {
            const message = response.responseJSON.message || "please try again later";
            $('#review_error_main_output').html("* There was a problem submitting your review; " + message + ".");
            disableForm(false, firstReview);
            $('#submitReview').toggleClass( "Button--isLoading" );
            $('#formOverlay').toggle();
        }
    });
}

function validateReview(rating, content, name, email, firstReview) {
    var isValid = true;
    $('#review_error_email_output').html('');
    if(!email || !/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$/.test(email)) {
        if(email.includes("+")) {
            $('#review_error_email_output').html("* Plus sign is not allowed in an email address.");
        }else{
            $('#review_error_email_output').html("* Please enter a valid email address.");
        }
        isValid = false;
    }
    if(firstReview || $(".WriteReviewForm__input[id=name][required]").length) {
        if(!name) {
            $('#review_error_name_output').html("* Please enter your full name.");
            isValid = false;
        }
    }
    if(!content || content.length < 10) {
        $('#review_error_comments_output').html("* Please write a review. Must contain 10 characters or more.");
        isValid = false;
    }
    if(!rating || rating == 0) {
        $('#review_error_main_output').html("* Please leave a rating that reflects your experience..");
        isValid = false;
    }
    return isValid;
};

function disableForm(disable, firstReview) {
    if(firstReview) {
        if(disable) {
            $(':input[type="submit"]').prop('disabled', true);
            $('#review_content_input').prop('disabled', true);
            $('#review_name_input').prop('disabled', true);
            $('#review_email_input').prop('disabled', true);
        } else {
            $(':input[type="submit"]').prop('disabled', false);
            $('#review_content_input').prop('disabled', false);
            $('#review_name_input').prop('disabled', false);
            $('#review_email_input').prop('disabled', false);
        }
    } else {
        if(disable) {
            disableCreateReview = true;
            $('#submitReview').prop('disabled', true);
            $('#submitReview').addClass('isDisabled');
            $('#comments').prop('disabled', true);
            $('#comments').addClass('isDisabled');
            $('#name').prop('disabled', true);
            $('#name').addClass('isDisabled');
            $('#email').prop('disabled', true);
            $('#email').addClass('isDisabled');
        } else {
            disableCreateReview = false;
            $('#submitReview').prop('disabled', false);
            $('#submitReview').removeClass('isDisabled');
            $('#comments').prop('disabled', false);
            $('#comments').removeClass('isDisabled');
            $('#name').prop('disabled', false);
            $('#name').removeClass('isDisabled');
            $('#email').prop('disabled', false);
            $('#email').removeClass('isDisabled');
        }
    }
};
function thankyouRedirect(data) {
    // var storeDomain = 'https://www.reviews.io/company-reviews/store/eazyresearch-com';
    // storeDomain = storeDomain.replace(/^https?:\/\//, '');
    // var domainParts = storeDomain.split('.');

    // if(domainParts[0] == 'www' || domainParts[0] == 'web' || domainParts[0] == 'reviews') {
        window.location.replace("https://www.reviews.io/company-reviews/store/eazyresearch-com/thank-you?review= " + data.review_id );
    // } else {
    //     window.location.href = "/thank-you?review=" + data.review_id;
    // }
};
function dismissThankyou() {
    $('.WriteReviewThankYou').removeClass('isActive');
};

var clickedRating = false;
var reviewFormOpen = false;
var selectedRating = 0;


var labels = {
    1:"Very Poor", 2:"Poor", 3:"Acceptable", 4:"Good", 5:"Very Good"
};

$('.WriteReviewStars__star').hover(function(r) {
    var i = $(this).data('rating');

    $('#WriteReviewTip span').fadeOut('normal', function(e){
        $(this).html(labels[i]).fadeIn('normal');
    });

    for (x=0; x<=i; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').addClass('isSelected');
    }
    for (x>i; x<=5; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').removeClass('isSelected');
    }
}, function(r){
    $('#WriteReviewTip span').fadeOut('normal', function(e){
        $(this).html("Your Rating").fadeIn('normal');
    });
    for (x=0; x<=5; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').removeClass('isSelected');
    }
    if(clickedRating) {
        i = selectedRating;
        for (x=0; x<=i; x++) {
            $('.WriteReviewStars__star[data-rating='+x+']').addClass('isSelected');
        }
        $('#WriteReviewTip span').fadeOut('normal', function(e){
            $(this).html(labels[i]).fadeIn('normal');
        });
    }
});

// Handle focus and blur for keyboard accessibility
$('.WriteReviewStars__star').on('focus', function() {
    var i = $(this).data('rating');

    $('#WriteReviewTip span').fadeOut('normal', function(e){
        $(this).html(labels[i]).fadeIn('normal');
    });

    for (x=0; x<=i; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').addClass('isSelected');
    }
    for (x>i; x<=5; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').removeClass('isSelected');
    }
});

$('.WriteReviewStars__star').on('blur', function() {
    $('#WriteReviewTip span').fadeOut('normal', function(e){
        $(this).html("Your Rating").fadeIn('normal');
    });
    for (x=0; x<=5; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').removeClass('isSelected');
    }
    if(clickedRating) {
        i = selectedRating;
        for (x=0; x<=i; x++) {
            $('.WriteReviewStars__star[data-rating='+x+']').addClass('isSelected');
        }
        $('#WriteReviewTip span').fadeOut('normal', function(e){
            $(this).html(labels[i]).fadeIn('normal');
        });
    }
});

$('.WriteReviewStars__star').on('click keydown', function(r) {
    // Check for 'Enter' or 'Space' key for accessibility
    if (r.type === 'keydown' && (r.key !== 'Enter' && r.key !== ' ')) {
        return;
    }

    r.preventDefault();

    var i = $(this).data('rating');
    for (x=0; x<=i; x++) {
        $('.WriteReviewStars__star[data-rating='+x+']').addClass('isSelected');
    }
    if(i <= 2) {
        $('#commentsLabel').html(`Sorry to hear that you had a bad experience with <strong>https://eazyresearch.com/</strong>, What went wrong?`);
    } else {
        $('#commentsLabel').html(`Tell us how <strong>https://eazyresearch.com/</strong> made you happy?`);
    }
    clickedRating = true;
    selectedRating = i;
    if(!reviewFormOpen) {
        $('.WriteReviewForm').addClass('isActive');
        $('.WriteReviewForm').attr('aria-hidden', false);



        $('.WriteReviewForm__inner').find('input, select, textarea, button, a, [href]').each(function () {
            if ($(this).attr('type') !== 'hidden') {
                $(this).attr({
                    'tabindex': 0,
                    'aria-hidden': 'false'
                });
            }
        });

        console.log('opening form');

        $('#comments').focus();

        reviewFormOpen = true;
    }
});

$("#comments").keyup(function() {
    if((10 - $(this).val().length) == 10) {
        $("#commentscount").text("Minimum 10 characters");
    } else if ((10 - $(this).val().length) > 0) {
        $("#commentscount").text("Minimum "+ (10 - $(this).val().length) +" characters remaining ");
    } else {
        $("#commentscount").text("");
    }
});
