// Set up some info
var count = 0;
var rate = 0;
var day_rate = 0;
var num_digits = 10;
var active = true;
var px_offset = 0;
var comma_first = null;

function ts(date) {
    return Math.round(date.getTime() / 1000);
}

var start_date = ts(new Date(2010, 3, 20, 10, 0, 0));
var siphon_date = ts(new Date(2010, 4, 17, 7, 0, 0));
var end_date = ts(new Date());  // Change this if oil stops

// BP siphons "1,000 barrels/day" (or 42,000 gal/day)
var siphon_rate = 42000 / (24*60*60); 

function oilTotal(rate) {
    oil = 0;
    now = ts(new Date());
    
    // Add oil until siphoning
    oil += rate * (siphon_date - start_date);

    // Add oil from siphoning to now
    rate -= siphon_rate;
    oil += rate * (end_date - siphon_date);

    return Math.floor(oil);
}

$(document).ready(function() {
    comma_first = $('.comma-first');
    $.getJSON('json.php', null, function(settings) {
	count = Math.round(settings.start);
	$('#slider').slider({
	    min: 210000,
	    max: 4500000,
	    value: 210000,
	    slide: function(event, ui) {
		day_rate = ui.value;
		$('#rate .rate-number').text(commas(day_rate));
		rate = day_rate / (24*60*60);
	    },
	    change: function(event, ui) {
		day_rate = ui.value;
		$('#rate .rate-number').text(commas(day_rate));
		rate = day_rate / (24*60*60);
		counterJump(oilTotal(rate));
		rate -= siphon_rate;		
	    }
	});
	$('a.rate-change').click(function(e) {	   
	    var val = $(this).find('input').attr('value') * 1000;
	    $('#slider').slider("value", val);
	    e.preventDefault();
	});
	active = settings.active;
  	if (active) {
	    day_rate = settings.day_rate;
  	    rate = settings.rate;
	    setTimeout(counterFlip, 500);
 	}
	$('#slider').slider('value', day_rate);
    });
});

function digits(num) {
    num = Math.round(num);
    dig = Array();
    for (i = 0; num != 0; i++) {
	d = num % 10;
	dig.push(d);
	num = Math.floor(num / 10);
    }
    return dig;
}

function counterFlip() {
    counterJump(count + (rate/2));

    if (active) {
	setTimeout(counterFlip, 500);
    }
}

function counterJump(num) {
    new_digs = digits(num);
    old_digs = digits(count);

    for (i = 0; i <= num_digits; i++) {
	if (i >= new_digs.length) {
	    flipDigit(num_digits-i, ' ');
	}
	else if (old_digs[i] != new_digs[i]) {
	    flipDigit(num_digits-i, new_digs[i]);
	}
    }

    count = num;

    if (count >= 1000000000) {
	comma_first.removeClass('hidden');
    }
    else {
	comma_first.addClass('hidden');
    }
    
    move = (((num_digits+1) - new_digs.length) * 4);

    if (move != px_offset) {
	if (move > 0) {
	    $('#counter-inner div').css({
		'marginLeft': '-' + move + 'px',
		'marginRight': move + 'px'
	    });
	    $('#counter-inner').css('paddingLeft', '0px');
	}
	else {
	    $('#counter-inner div').css({
		'marginLeft': '0px',
		'marginRight': '0px'
	    });
	    $('#counter-inner').css('paddingLeft', '5px');
	}
	px_offset = move;
    }
}

function flipDigit(d, val) {
    d = '#d' + d;
    $d = $(d);
    $d_kids = $(d + ' span');

    var cur = $d_kids.text();
    var h = $d.height();
    var w = $d.width();

    $d.css('height', h);
    $d.css('width', w);

    $d_kids.css('display', 'block');
    $d_kids.css('position', 'absolute');
    $d_kids.css('height', h);
    $d_kids.css('width', w);
    $d_kids.css('padding', 0);
    $d_kids.css('margin', 0);

    
    $d.prepend('<span style="display: block; position: absolute; left: 0px; top: -' + h + 'px;">' + val + '</span>');
    $(d + ' span:nth-child(1)').animate({
	'top': '0px'
    }, 300);
    $(d + ' span:nth-child(2)').animate({
	'top': h + 'px'
    }, 300, 'linear', function() { $(this).detach(); });
}

function commas(num) {
    var str = '';
    while (num > 0) {
	digs = num % 1000;
	num = Math.floor(num / 1000);
	digs = new String(digs);
	while (digs.length < 3 && num > 0) {
	    digs = '0' + digs;
	}
	str = digs + ',' + str;
    }
    if (str.substr(str.length - 1) == ',') {
	str = str.substr(0,str.length - 1);
    }
    return str;
}
