/*
 * This component is intended to display QA entries
 */

/**
 * Component constructor
 */
function qalist() {
    var list =
    {
        paginator : {
            prev_text : "<<",
            next_text : ">>"
        },
        settings : {
            paginate : true,
            pageSize : 2,
            loadingImage : ''
        },
        init : function(elem){
            this.container =  $(elem);
            $(elem).addClass("qalist");
        },
        load : function(url){
            list.renderLoadingImage();
            jQuery.getJSON(url, function(data){
                list.data = data;
                var renderedData = data;
                var dataType = renderedData.type;
                if(dataType == "cat"){
                    list.container.empty();
                    list.renderCategories(renderedData.data);
                }else{
                    if(list.settings.paginate){
                        var pageSize = list.settings.pageSize;
                        list.pages = Math.ceil(data.data.length / pageSize);
                        list.openPage(0);
                    }else{
                        list.container.empty();
                        list.renderData(renderedData);
                    }
                }
            })
        },
        renderData : function(data){
            var rData = data
            var qdata = $("<div>").addClass("data");
            var result = $("<ul>");
            var length = rData.length;

            for(var i=0; i < length; i++){
                var item = rData[i];
                result.append($("<li>").addClass("question").html(item.question));
                if(item.shortAnswer != ""){
                    result.append($("<li>").addClass("short-answer").html("<i><b>Коротка відповідь </b></i>" + item.shortAnswer));
                }
                result.append($("<li>").addClass("full-answer").html("<i><b>Повна відповідь </b></i>" +item.fullAnswer));
                result.append($("<br>"));
            }
            result.appendTo(qdata);
            list.container.append(qdata);
        },
        renderCategories : function(data){
            var $data = jQuery("<div>").addClass("data");
            var $result = jQuery("<ul>").appendTo($data);
            for(i = 0; i < data.length; i++){
                var category = data[i];
                var catId = category.id;
                var $category = jQuery("<li>").data("id", catId).addClass("question").css("color","black").text(category.name).css("cursor", "pointer");
                $category.click(function(){
                    list.categoryOnClick(jQuery(this).data("id"))
                    }).appendTo($result);
            }
            list.container.append($data);
        },
        renderPaginator : function(){
            if(list.settings.paginate && list.pages > 1){
                var paginator = $("<div>").addClass("paginator").html("&nbsp;");
                var prev = $("<div>").addClass("nav").addClass("prev").html(list.paginator.prev_text);
                if(list.page > 0){
                    var page = list.page - 1;
                    prev.click(function(){
                        list.openPage(page);
                    });
                }else{
                    prev.addClass("disabled");
                }
                prev.appendTo(paginator);
                for(var i = 0; i < list.pages; i++){
                    var linkText = "&nbsp;" + (i + 1 );
                    var pageLink = $("<div>").attr("page", i).addClass("nav").html(linkText)
                    if (i == list.page){
                        pageLink.addClass("active");
                    }
                    pageLink.pageIndex = i;
                    pageLink.click(function(){
                        list.openPage($(this).attr("page"));
                        $(this).addClass("active");
                        return false;
                    })
                    paginator.append(pageLink);
                }
                var nextp = $("<div>").addClass("nav").addClass("next").html(list.paginator.next_text);
                if(list.page < (list.pages - 1)){
                    var npage = list.page - (-1); //Avoid using + because of possible concatenation
                    nextp.click(function(){
                        list.openPage(npage);
                    });
                }else{
                    nextp.addClass("disabled");
                }
                nextp.appendTo(paginator);
                paginator.append($("<div>").css("clear","both"));
                list.container.append(paginator);
            }
        },
        renderLoadingImage : function(){
            list.container.empty();
            if(this.settings.loadingImage != ''){
                var indicator = $("<img>").attr("src", this.settings.loadingImage);
                this.container.append(indicator);
            }
        },
        openPage : function(page){
            list.page = page;
            list.renderLoadingImage();
            var pageSize = list.settings.pageSize;
            var startIndex = page * pageSize;
            var endIndex = Math.min((startIndex + pageSize), list.data.data.length);
            var data = new Array;
            var counter = 0;
            for(var k=startIndex; k<endIndex; k++){
                data[counter] = list.data.data[k];
                counter ++;

            }
            list.container.empty();
            list.renderData(data);
            list.renderPaginator();
        }
    };
    return list;

}

