// 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(); }