﻿// truncates a string to a specified length applying "..." at the end if needed
function truncate_string(s,len) {
    t_s = s;
    if (t_s.length > len) {
        t_s = t_s.substring(0, len);
        try {
            if (s.substring(t_s.length, t_s.length + 1) != " ") {
                idx_last_space = t_s.lastIndexOf(" ");
                if (idx_last_space != -1) {
                    t_s = t_s.substring(0, idx_last_space);
                }
            }
        }
        catch (e) { }
    }

    if (s.length > len) {
        t_s += "...";
    }
    return t_s;
};


// formats a datetime into a short date with time ("1/1/2009 9:00 AM")
function format_datetime(dt) {
    var strAM = 'AM';
    var strMin;
    var strSec;
    var strDte = ''

    strDte = (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
    strDte += '<br/>';

    if (dt.getHours() - 12 > 0) {
        strAM = 'PM';
        strDte += (dt.getHours() - 12);
    } else {
        if (dt.getHours() == "0") {
            strDte += "12";
        } else {
            strDte += dt.getHours();
        }
    }

    if (dt.getSeconds() < 10) {
        strSec = '0' + dt.getSeconds();
    } else {
        strSec = dt.getSeconds();
    }

    if (dt.getMinutes() < 10) {
        strMin = '0' + dt.getMinutes();
    } else {
        strMin = dt.getMinutes()
    }

    strDte += ':' + strMin + ' ' + strAM;
    return strDte;
};


// produces an elaped time message from the datetime passed ("2 days 35 mins ago")
function make_elapsed_time(dt) {
    if (dt.getFullYear() == "1900") {
        return "never"
    }

    var now = new Date();
    var mins = Math.round((now.getTime() - dt.getTime()) / 60000); // 60000 ms in a minute
    var hrs = 0;
    var days = 0;
    
    // determine proper hrs
    if (mins >= 60) {
        hrs = Math.floor(mins / 60);
        mins = Math.floor(mins - (hrs * 60));
    }

    // determine proper days
    if (hrs >= 24) {
        days = Math.floor(hrs / 24);
        hrs = Math.floor(hrs - (days * 24));
    }

    var day_msg = " days";
    var hr_msg = " hrs";
    var min_msg = " mins";

    var msg_parts = new Array();
    var formatted_elapsed_time = "";

    // set days part
    if (days > 0) {
        if (days == 1) {
            day_msg = day_msg.replace("s", "");
        }
        else if (days >= 90) {
            // if the date is older than 90 days ago
            // just show a typical formatted date
            return format_datetime(dt);
        }
        msg_parts[0] = days + day_msg;
    }
    // set hours part
    if (hrs > 0) {
        if (hrs == 1) {
            hr_msg = hr_msg.replace("s", "");
        }
        msg_parts[1] = hrs + hr_msg;
    }
    // set minutes part
    if (mins > 0) {
        if (mins == 1) {
            min_msg = min_msg.replace("s", "");
        }
        msg_parts[2] = mins + min_msg;
    }

    formatted_elapsed_time = msg_parts.join(" ");

    // if they're all zero set a better message
    if (formatted_elapsed_time.replace(" ", "") == "") {
        formatted_elapsed_time = "a moment";
    }

    return formatted_elapsed_time + " ago";
}
