// Prosper Listing Detail Extensions
// version 0.1 BETA
// 02-10-2007
// Copyright (c) 2007, Duane Wandless
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
//
// --------------------------------------------------------------------
//
// This is a Greasemonkey user script.
//
// To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "Prosper Countdown timer", and click Uninstall.
//
// --------------------------------------------------------------------
//
// ==UserScript==
// @name Prosper Listing Detail Extensions
// @namespace http://retireme99.googlepages.com/firefoxextension
// @description Adds functionality to the Prosper Listing Detail page.
// @include https://prosper.com/*
// @include https://www.prosper.com/*
// @include http://prosper.com/*
// @include http://www.prosper.com/*
// ==/UserScript==
if (document.getElementById("ctrlBorrowerInfo_ctrlBorrowerLink_lnkUser") != null)
{
CalcRemainingAmt();
ShowStartDate();
}
function CalcRemainingAmt()
{
if (document.getElementById("ctrlListingSummary_ctrlPercentFnd_l") == null)
return;
var tmpString = getInnerText(document.getElementById("ctrlListingSummary_ctrlPercentFnd_l"));
var percent = tmpString.replace("%", "");
tmpString = getInnerText(document.getElementById("ctrlListingSummary_ctrlAmtReq_label"));
var amt = tmpString.replace("$", "");
amt = amt.replace(",", "");
amt = amt.substring(0, amt.indexOf("."));
var remain = amt * percent / 100;
var tempElem = document.getElementById("ctrlListingSummary_lblFundingPercentage");
insertAdjacentHTML(tempElem, "afterEnd", "
" + formatCurrency(amt-remain) + " remaining");
insertAdjacentHTML(tempElem, "afterEnd", "
" + formatCurrency(remain) + " funded");
}
function ShowStartDate()
{
var tempElem = document.getElementById("ctrlListingSummary_ctrlTimeLeft_lblTimeLeft");
//tempElem = document.getElementById("ctrlListingSummary_ctrlTimeLeft_lblTimeLeft");
insertAdjacentHTML(tempElem, "afterEnd", "
Start: " + getInnerTextById("lblListingStartDate") + "
");
insertAdjacentHTML(tempElem, "afterEnd", "End: " + CalcEndingDate("lblListingStartDate") + "
");
}
function CalcEndingDate(id)
{
var idx, idx2;
var tempElem;
var tmpString = "";
var innerString;
var dt = new Date();
var utcDate = dt.getTime();
{
tempElem = document.getElementById("lblListingEndDate");
if (tempElem != null && getInnerText(tempElem) != "n/a")
{
return getInnerText(tempElem);
}
tempElem = document.getElementById("ctrlListingSummary_ctrlTimeLeft_lblTimeLeft");
innerString = getInnerText(tempElem);
if ((idx = innerString.indexOf("d")) != -1)
{
tmpString = innerString.substring(0, idx).replace("d", "");
utcDate = utcDate + (1*tmpString)*24*60*60*1000;
}
idx += 1;
if ((idx2 = innerString.indexOf("h")) != -1)
{
tmpString = innerString.substring(idx, idx2).replace("h", "");
utcDate = utcDate + (1*tmpString)*60*60*1000;
}
idx2 += 1;
if ((idx = innerString.indexOf("m")) != -1)
{
tmpString = innerString.substring(idx2, idx).replace("m", "");
utcDate = utcDate + (1*tmpString)*60*1000;
}
}
var newDate = new Date();
newDate.setTime(utcDate);
return formatDate(newDate); //("MMM-d-yyyy hh:mm tt") + " " + m_timeZone;
}
function ConvertMonth(month)
{
switch (month)
{
case 0 : return 'Jan';
case 1 : return 'Feb';
case 2 : return 'Mar';
case 3 : return 'Apr';
case 4 : return 'May';
case 5 : return 'Jun';
case 6 : return 'Jul';
case 7 : return 'Aug';
case 8 : return 'Sep';
case 9 : return 'Oct';
case 10 : return 'Nov';
case 11 : return 'Dec';
default : return 'Unk';
}
}
function formatDate(utcDate)
{
var dateObj = utcDate; //new Date(utcDate);
var month = ConvertMonth(dateObj.getMonth());
var day = dateObj.getDate();
var year = dateObj.getFullYear();
var hour = dateObj.getHours();
var min = dateObj.getMinutes();
var ampm;
if (hour > 11)
{
ampm = "PM";
hour = (1*hour) - 12;
}
else
ampm = "AM";
if (min < 10)
min = "0" + min;
if (hour == 0)
hour = "12";
return month + "-" + day + "-" + year + " " + hour+":"+min + " " + ampm;
}
function formatCurrency(num) {
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
cents = num%100;
num = Math.floor(num/100).toString();
if(cents<10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + '$' + num + '.' + cents);
}
function insertAdjacentElement (elem, where,parsedNode)
{
switch (where){
case 'beforeBegin':
elem.parentNode.insertBefore(parsedNode,this)
break;
case 'afterBegin':
elem.insertBefore(parsedNode,this.firstChild);
break;
case 'beforeEnd':
elem.appendChild(parsedNode);
break;
case 'afterEnd':
if (elem.nextSibling)
elem.parentNode.insertBefore(parsedNode,this.nextSibling);
else
elem.parentNode.appendChild(parsedNode);
break;
}
}
function insertAdjacentHTML (elem, where,htmlStr)
{
var r = elem.ownerDocument.createRange();
r.setStartBefore(elem);
var parsedHTML = r.createContextualFragment(htmlStr);
insertAdjacentElement(elem, where,parsedHTML)
}
function insertAdjacentText (elem, where,txtStr)
{
var parsedText = document.createTextNode(txtStr)
insertAdjacentElement(elem, where,parsedText)
}
function getInnerText(elt) {
var _innerText = elt.innerText;
if (_innerText == undefined) {
_innerText = elt.innerHTML.replace(/<[^>]+>/g,"");
}
return _innerText;
}
function getInnerTextById(idString) {
var elem = document.getElementById(idString);
if (elem == null)
return "";
return getInnerText(elem);
}
var m_nMins = 20;
var m_nSecs = 60;
var logo = document.createElement("div");
logo.innerHTML = '20:00
';
document.body.insertBefore(logo, document.body.firstChild);
var countInterval;
countInterval = window.setInterval(countTimer, 15000);
function countTimer()
{
var elem;
elem = document.getElementById("countdown");
if (elem == null)
return;
if (document.getElementById("ctlLoginStatus_hlSignOut") == null)
{
elem.innerHTML = "";
return;
}
m_nSecs -= 15;
if (m_nSecs < 0)
m_nSecs = 45;
if (m_nSecs == 45)
{
m_nMins--;
}
var secs = m_nSecs == 60 || m_nSecs == 0 ? "00" : m_nSecs;
if (m_nMins <= 0 && m_nSecs <= 0)
{
elem.innerHTML = "Time expired";
window.clearInterval(countInterval);
return;
}
elem.innerHTML = m_nMins + ":" + secs;
if (m_nMins <= 3)
{
// I could not get firefox to allow the popup
// and just the alert is a blocking call
// so just do the timer
//timeoutpopup();
//alert ("Timeout is fast approaching");
}
}
window.addEventListener('load', function (e)
{
m_nMins = 20;
m_nSecs = 60;
}
);
function timeoutpopup() {
newwindow2=window.open('','prospertimeout','height=100,width=250');
var tmp = newwindow2.document;
tmp.write('Prosper Timer');
tmp.write('Prosper timeout is fast approaching.
');
if (m_nMins <= 0 && m_nSecs <= 0)
tmp.write('
Time expired');
else
{
var secs = m_nSecs == 60 || m_nSecs == 0 ? "00" : m_nSecs;
tmp.write('
Time left: ' + m_nMins + ':' + secs + '');
}
tmp.write('');
tmp.close();
}