$(function(){
    var loading = false;
    var submitted = false;
    var messageListTimer;
    
    function showMessage(type, messageText){
        clearTimeout(messageListTimer);
        if($("ul."+type+"list").length === 0) $("body").append("<ul class='"+type+"list'><li>"+messageText+"</li><a class='error-dt-close' data-action='close'>X</></ul>");
        else{
            $("ul."+type+"list > li").text(messageText);
            $("ul."+type+"list").removeClass('hidden');
        }
        message = setTimeout(function(){$("ul."+type+"list").remove();}, 5000);
    }

    function checkRaters(){
        if(submitted === true) {
            $("ul[data-type='rater']").each(function () {
                if ($(this).find($(".selected")).length > 0) {
                    $(this).find($("[data-type='errormessage']")).remove();
                }
                else {
                    if($(this).find("[data-type='errormessage']").length === 0) $(this).prepend("<p data-type='errormessage'>Értékelned kell!</p>");
                }
            });

            return $("ul[data-type='rater'] [data-type='errormessage']").length === 0;
        }

        return false;
    }

    $("body").on('click', '[data-rating]', function(){
        var list = $(this).parents("[data-type='rater']");
        var rate = parseInt($(this).attr('data-rating'));
        list.find($("span[data-rating]")).removeClass('selected');

        list.find($('span[data-rating]')).each(function(){
            var currentRate = parseInt($(this).attr('data-rating'));
            if(currentRate <= rate) $(this).addClass('selected');
        });

        checkRaters();
    });

    $("[data-rating]").hover(function(){
        var list = $(this).parents("[data-type='rater']");
        var rate = parseInt($(this).attr('data-rating'));
        list.find($("span[data-rating]")).removeClass('hover');

        list.find($('span[data-rating]')).each(function(){
            var currentRate = parseInt($(this).attr('data-rating'));
            if(currentRate <= rate) $(this).addClass('hover');
        });
    }, function(){
        var list = $(this).parents("[data-type='rater']");
        list.find($("span[data-rating]")).removeClass('hover');
    });

    $("body").on('click', "[data-action='rating']", function(){
        submitted = true;

        var numberOfRaters = $("ul[data-type='rater']").length;
        var completedRequests = 0;

        if(checkRaters() === true) {
            $("ul[data-type='rater']").each(function () {
                var data = {action: 'rating'};
                data.contenttype = $(this).attr('data-contenttype');
                data.contentid = $(this).attr('data-contentid');
                data.raterid = $(this).attr('data-raterid');
                data.rating = $(this).find('span.selected:last').attr('data-rating');
                data.message = $(this).find("[name='rater-message']").val();

                $.ajax({
                    url: '/ertekelesek/',
                    type: 'POST',
                    data: data,
                    dataType: 'JSON',
                    success: function (response) {
                        if (response.status === 'success') {
                            completedRequests++;
                            if (completedRequests === numberOfRaters){
                                showMessage('success', 'Az értékelésedet elmentettük!');
                                $("[data-name='ratingcontainer']").replaceWith("<div><p>Az értékelésedet elmentettük. 48 óra múlva tudod újra értékelni a hirdetőt.</p></div>");
                            }
                        }
                        else {
                            showMessage('error', 'Hiba történt a mentés során, kérlek, próbáld újra később!');
                        }
                        loading = false;
                    }
                });
            });
        }
    });

    $("[data-name='accepted_ratings']").on('click', function(){
        var closed = $("[data-name='accepted_ratings_list']").hasClass('hidden');

        if(closed){
            $("[data-name='accepted_ratings_list']").removeClass('hidden');
            $("[data-name='rejected_ratings_list']").addClass('hidden');
        }
        else{
            $("[data-name='accepted_ratings_list']").addClass('hidden');
        }
    });

    $("[data-name='rejected_ratings']").on('click', function(){
        var closed = $("[data-name='rejected_ratings_list']").hasClass('hidden');

        if(closed){
            $("[data-name='rejected_ratings_list']").removeClass('hidden');
            $("[data-name='accepted_ratings_list']").addClass('hidden');
        }
        else{
            $("[data-name='rejected_ratings_list']").addClass('hidden');
        }
    });
});