function heartbeat(dt1, dt2) {

    var seconds = 1000; 
    var daylightSaving = 0;
	var noHeart = 3024000;
	var speedHeart = 4233600;
	var daySeconds = 86400;
	var pregnancy = 280 * daySeconds;
	var message = "";

    var fh1 = dt1.getTimezoneOffset();
    var fh2 = dt2.getTimezoneOffset(); 
    
    if(dt2 > dt1){
      daylightSaving = (fh2 - fh1) * seconds;
    } 
    else{
      daylightSaving = (fh1 - fh2) * seconds;    
    }

    var diff = Math.abs(dt2.getTime() - dt1.getTime()) - daylightSaving;
	var total = Math.ceil(diff / seconds);

	if(total < noHeart) {
		var dayRest = Math.ceil((noHeart - total) / daySeconds);
		var resp = "";
		
		if(dayRest <= 1){
			resp = "Falta 1 dia";
		} else {
			resp = "Faltam " + dayRest + " dias";
		}

		message = "O coração do bebê dá sinais de vida ao final da quinta semana de gestação. " + resp + "  para o coração do seu filho começar a bater.";	
	} else {
		var heartok = Math.ceil(total - noHeart);
		
		if(heartok <= speedHeart) {
			bits = heartok * 3;
		} else {
			heartSp = heartok-speedHeart;
			Sbits = speedHeart * 3;
			Sbits2 = heartSp * 2;
			bits = Sbits + Sbits2;
		}
		
		if (total <= pregnancy) {
			message = "O coração do seu bebê já teve <strong>" + heartbeatFormat(bits) + "</strong> batimentos cardíacos.";
		} else {
			message = "Ops! A data informada parece ser de uma criança que já nasceu. A Calculadora do coração contabiliza somente os batimentos do bebê durante a gestação. Verifique e tente de novo.";
		}
	}
	
	return message;
}

function heartbeatFormat(n) {
	n += '';
	x = n.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}
