﻿var RecentTweets = function(elementId, title, followususername) {
    var self = this;
    self.elementId = elementId;
    self.title = title;
    self.req = null;
    self.tweets = null;
    self.followususername = followususername;
    self.showheading = false;
    self.showfooter = false;

    this.init = function() {
    }

    this.download = function(serviceurl) {
        self.req = new XMLHttpRequest();
        self.req.open("GET", serviceurl, /*async*/true);
        self.req.onreadystatechange = self.xmlhttphandler;
        self.req.send(/*no params*/null);

    }

    this.xmlhttphandler = function() {
        if (self.req.readyState != 4) {
            return;
        }

        if (self.req.status != 200) {
            var s = self.req.responseText;
            self.onerror(s);

            return;
        }

        var s = self.req.responseText;
        self.onsuccess(s);
    }

    this.onerror = function(result) {
    }

    this.onsuccess = function(result) {
        var s = "self.tweets = " + result;
        eval(s);

        var container = document.getElementById(self.elementId);

        if (self.showheading) {
            var h3 = document.createElement("h3");
            h3.innerHTML = self.title;
            container.appendChild(h3);
        }

        var ul = document.createElement("ul");
        for (var i = 0; i < self.tweets.length; i++) {
            var tweet = self.tweets[i];
            self.AddTweet(tweet, ul);
        }
        container.appendChild(ul);

        if (self.showfooter) {
            var footer = document.createElement("div");
            footer.className = "footer";
            var followuslink = document.createElement("a");
            followuslink.innerHTML = "follow us on Twitter";
            followuslink.className = "twitter-follow-us";
            followuslink.href = "https://twitter.com/" + self.followususername;
            followuslink.target = "_blank";
            footer.appendChild(followuslink);
            container.appendChild(footer);
        }
    }

    this.AddTweet = function(tweet, listelement) {
        var li = document.createElement("li");
        li.innerHTML = tweet.message;
        li.style.backgroundImage = "url('" + tweet.profileimage + "')";
        li.style.backgroundRepeat = "no-repeat";
        li.style.backgroundPosition = "0px 5px";
        li.onclick = function() {
            open(tweet.link, "_blank");
        };

        var time = self.relative_time(tweet.pubdate);
        var span = document.createElement("span");
        span.className = "pubdate";
        span.innerHTML = time;
        li.appendChild(span);

        listelement.appendChild(li);
    }


    this.relative_time = function(time_value) {
        var parsed_date = Date.parse(time_value);
        var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
        var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
        delta = delta + (relative_to.getTimezoneOffset() * 60);

        if (delta < 60) {
            return 'less than a minute ago';
        } else if (delta < 120) {
            return 'about a minute ago';
        } else if (delta < (60 * 60)) {
            return (parseInt(delta / 60)).toString() + ' minutes ago';
        } else if (delta < (120 * 60)) {
            return 'about an hour ago';
        } else if (delta < (24 * 60 * 60)) {
            return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
        } else if (delta < (48 * 60 * 60)) {
            return '1 day ago';
        } else {
            return (parseInt(delta / 86400)).toString() + ' days ago';
        }
    }
}

