﻿function TopNews(webUrl, listTitle, rowLimit) {
    if (webUrl == "") {
        $(".topNewsItems").append('No news site is found');
        $(".topNews").show();
        return;
    }
    this.webUrl = webUrl;
    this.listTitle = listTitle;    
    this.rowLimit = rowLimit == 0 ? "" : rowLimit;
    this.FetchNews();
}

TopNews.prototype.FetchNews = function () {
    var context = new SP.ClientContext(this.webUrl);

    var list = context.get_web().get_lists().getByTitle(this.listTitle);        
    
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml("<View><Query><Where><IsNotNull><FieldRef Name='NewsDate'/></IsNotNull></Where><OrderBy><FieldRef Name='NewsOrder' Ascending='False' /><FieldRef Name='NewsDate' Ascending='False' /></OrderBy></Query><RowLimit>" + this.rowLimit + "</RowLimit></View>");
    this.news = list.getItems(camlQuery);
    context.load(this.news, 'Include(NewsDate, Title, FileRef)');    
    context.executeQueryAsync(Function.createDelegate(this, this.onSucceeded), Function.createDelegate(this, this.onFailed));
}

TopNews.prototype.onSucceeded = function (sender, args) {
    var itemsContainer = $(".topNewsItems");
    var items = "";
    var enumerator = this.news.getEnumerator();
    while (enumerator.moveNext()) {
        var listItem = enumerator.get_current();
        var date = new Date(listItem.get_item("NewsDate"));
        var curr_date = date.getDate();
        var curr_month = date.getMonth();
        curr_month++;
        curr_month = curr_month < 10 ? "0" + curr_month : curr_month;
        var curr_year = date.getFullYear();
        var articleDate = curr_date + "-" + curr_month + "-" + curr_year;
        var title = listItem.get_item("Title");
        var href = listItem.get_item("FileRef");
        items += "<li><a href='" + href + "'>" + title + " <span class='newsDate'>(" + articleDate + ")</span></a></li>";
    }
    if (items == "") {
        items = "No news is found";
    }
    itemsContainer.append(items);
    $(".topNews").show();
}

TopNews.prototype.onFailed = function (sender, args) {
    $(".topNewsItems").append('Error connecting to the news site');
    $(".topNews").show();
}
