/* == Time ago == */ (function($){$.timeago = function(timestamp){if (timestamp instanceof Date){return inWords(timestamp)}else if (typeof timestamp === "string"){return inWords($.timeago.parse(timestamp))}else{return inWords($.timeago.datetime(timestamp))}};var $t = $.timeago;$.extend($.timeago,{settings:{refreshMillis:1000,allowFuture:false,strings:{prefixAgo:null,prefixZero:null,prefixFromNow:null,suffixAgo:"trước",suffixZero:"",suffixFromNow:"trước đây",seconds:"Vài giây trước",minute:"1 phút trước",minutes:"%d phút trước",hour:"1 giờ trước",hours:"%d giờ trước",yesterday:"Ngày hôm qua",day:"1 ngày trước",days:"%d ngày trước",week:"1 tuần trước",weeks:"%d tuần trước",month:"1 tháng trước",months:"%d tháng trước",year:"1 năm trước",years:"%d năm trước",numbers:[]}},inWords:function(distanceMillis){var $l = this.settings.strings;var prefix = $l.prefixAgo;var suffix = $l.suffixAgo;var $2 = this.settings.strings;var prefix = $2.prefixZero;var suffix = $2.suffixZero;if (this.settings.allowFuture){if (distanceMillis < 0){prefix = $l.prefixFromNow;suffix = $l.suffixFromNow}}var seconds = Math.abs(distanceMillis) / 1000;var minutes = seconds / 60;var hours = minutes / 60;var days = hours / 24;var years = days / 365;function substitute(stringOrFunction,number){var string = $.isFunction(stringOrFunction) ? stringOrFunction(number,distanceMillis):stringOrFunction;var value = ($l.numbers && $l.numbers[number]) || number;return string.replace(/%d/i,value)}var words = seconds < 60 && substitute($l.seconds,Math.round(seconds)) || seconds < 90 && substitute($l.minute,1) || minutes < 45 && substitute($l.minutes,Math.round(minutes)) || minutes < 90 && substitute($l.hour,1) || hours < 24 && substitute($l.hours,Math.round(hours)) || hours < 48 && substitute($2.yesterday,1) || days < 7 && substitute($l.days,Math.round(days)) || days < 14 && substitute($l.weeks,1) || days < 21 && substitute($l.weeks,2) || days < 28 && substitute($l.weeks,3) || days < 30 && substitute($l.weeks,4) || days < 30 && substitute($l.days,Math.floor(days)) || days < 60 && substitute($l.month,1) || days < 365 && substitute($l.months,Math.floor(days / 30)) || years < 2 && substitute($l.year,1) || substitute($l.years,Math.floor(years));return $.trim([prefix,words,suffix].join(" "))},parse:function(iso8601){var s = $.trim(iso8601);s = s.replace(/\.\d\d\d+/,""); s = s.replace(/-/,"/").replace(/-/,"/");s = s.replace(/T/," ").replace(/Z/," UTC");s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); return new Date(s)},datetime:function(elem){ var isTime = $(elem).get(0).tagName.toLowerCase() === "time"; $(elem).is("time");var iso8601 = isTime ? $(elem).attr("datetime"):$(elem).attr("title");return $t.parse(iso8601)}});$.fn.timeago = function(){var self = this;self.each(refresh);var $s = $t.settings;if ($s.refreshMillis > 0){setInterval(function(){self.each(refresh)},$s.refreshMillis)}return self};function refresh(){var data = prepareData(this);if (!isNaN(data.datetime)){$(this).text(inWords(data.datetime))}return this}function prepareData(element){element = $(element);if (!element.data("timeago")){element.data("timeago",{datetime:$t.datetime(element)});var text = $.trim(element.text());if (text.length > 0){element.attr("title",text)}}return element.data("timeago")}function inWords(date){return $t.inWords(distance(date))}function distance(date){return (new Date().getTime() - date.getTime())} document.createElement("abbr");document.createElement("time")}(jQuery));