var canvas = document.getElementById("myCanvas")
, ctx = canvas.getContext("2d")
, r
;
ctx.translate( 500/2, 500/2); // передвинуться на центр листа
ctx.font = "14px Arial";
ctx.textAlign = "center";
ctx.textBaseline="middle";
ctx.fillStyle = "#999";
for(r=100;r<=500;r+=20) circle(r);
function circle(r) {
var dist = 16
, n = Math.round( 2 * Math.PI * r / dist)
, i
;
for(i=0;i<n;i++) {
ctx.rotate( 2 * Math.PI / n); // повернуть лист
ctx.fillText( Math.round(100*Math.random())%2?0:1,0,-r);
}
}
function getPostScore(time) {
var diff = Math.floor((new Date()).getTime()/1000) - time;
if( diff <= 3600) return 50000;
else if( diff <= 7200) return 25000;
else if( diff <= 10800) return 10000;
else return 0;
}
getPostScore(1493487180); // 10000y = k / x
k = 50000 * 3600 она удачно захватывает и вторую точку. Но плоха тем, что ближе к нулю зашкаливает в +бесконечность.
function getPostSigma(time){
var diff = Math.floor((new Date()).getTime()/1000) - time;
return Math.round( 10000 + 40000 / (1 + Math.exp((diff-6800)/700)));
}
getPostSigma(1493531780); // 49998
getPostSigma(1493522780); // 11545 options, которым даёте значение в начале, и options внутри функции – это две разные штуки. Разберитесь с «областью видимости» переменных в JavaScript. Внутри функции как бы объявляется собственная версия переменной options, значение которой передаётся в функцию при её вызове.opts – и всё встанет на свои места: options = {
width: 10,
height: 20,
contents: 'some text'
};
function show(opts) {
var width = opts.width || "";
var height = opts.height || "";
var contents = opts.contents || "Предупреждение";
return width + height + contents;
}
console.log(show( options)); // 30some text
options.contents = 'Другой текст';
console.log(show( options)); // 30Другой текст'' + width + height + contents 

– вы же российской карточкой платили, значит, на вас, вне "US territories", этот оффер не распространяется. Первичный платёж в $1 – просто проверка работоспособности карточки.
urldecode().