/**
 *  copied from ngtimeago library
 */
(function(){
    "use strict";

    function TimeSinceFilter(){

        return function(input){

            var substitute = function(stringOrFunction, number, strings){
                    var string = angular.isFunction(stringOrFunction) ? stringOrFunction(number, dateDifference) :
                                 stringOrFunction;
                    var value = (strings.numbers && strings.numbers[number]) || number;
                    return string.replace(/%d/i, value);
                },
                nowTime = (new Date()).getTime(),
                date = (new Date(input)).getTime(),
                strings = {
                    prefixAgo: '',
                    prefixFromNow: '',
                    suffixAgo: "ago",
                    suffixFromNow: "from now",
                    seconds: "%d seconds",
                    minute: "about a minute",
                    minutes: "%d minutes",
                    hour: "about an hour",
                    hours: "about %d hours",
                    day: "a day",
                    days: "%d days",
                    month: "about a month",
                    months: "%d months",
                    year: "about a year",
                    years: "%d years"
                },
                dateDifference = nowTime - date,
                words,
                seconds = Math.abs(dateDifference) / 1000,
                minutes = seconds / 60,
                hours = minutes / 60,
                days = hours / 24,
                years = days / 365,
                separator = strings.wordSeparator === undefined ? " " : strings.wordSeparator,

                prefix = strings.prefixAgo,
                suffix = strings.suffixAgo;

            words = seconds < 45 && substitute(strings.seconds, Math.round(seconds), strings) ||
                    seconds < 90 && substitute(strings.minute, 1, strings) ||
                    minutes < 45 && substitute(strings.minutes, Math.round(minutes), strings) ||
                    minutes < 90 && substitute(strings.hour, 1, strings) ||
                    hours < 24 && substitute(strings.hours, Math.round(hours), strings) ||
                    hours < 42 && substitute(strings.day, 1, strings) ||
                    days < 30 && substitute(strings.days, Math.round(days), strings) ||
                    days < 45 && substitute(strings.month, 1, strings) ||
                    days < 365 && substitute(strings.months, Math.round(days / 30), strings) ||
                    years < 1.5 && substitute(strings.year, 1, strings) ||
                    substitute(strings.years, Math.round(years), strings);
            prefix.replace(/ /g, '');
            words.replace(/ /g, '');
            suffix.replace(/ /g, '');
            return (prefix + ' ' + words + ' ' + suffix + ' ' + separator);

        };
    }

    angular.module("DCX")
           .filter("timeSince", TimeSinceFilter);

})();