function rand(n) {
  return ( Math.floor ( Math.random ( ) * n + 1 ) );
}

/* Config Vars */
var style = rand(5);
//style = 5;
var maxStyle = 5;

function debug(value) {
	document.getElementById("debug").innerHTML = value;
}

function bisestile(anno) {
	if ( (anno % 100 == 0) && (anno % 400 == 0) ) {
		return true;
	} else if (anno % 4 == 0) {
		return true;
	} else {
		return false;
	}
}

function numGiorni(mese, anno) {
	
	var result = new Array(
			0,  // Elemento 0
			31, // Gennaio
			28, // Febbraio
			31, // Marzo
			30, // Aprile
			31, // Maggio
			30, // Giugno
			31, // Luglio
			31, // Agosto
			30, // Settembre
			31, // Ottobre
			30, // Novembre
			31  // Dicembre
	);
	
	if ( bisestile(anno) && mese == 2 ) {
		result[mese]++;
	}
	
	return result[mese];
	
}

function cfrNum(num, x, cfr) {
	if (num - x >= 0) {
		return cfr;
	} else {
		return cfrNum(num, x / 10, cfr - 1);
	}
}

function splitNum(num) {
	var result = new Array(
				0,
				new Array
	);
	var x = 1;
	var points = new Array;
	
	/* Assumo che non si possa vivere piu' di 999.999.999.999 secondi */
	result[0] = cfrNum(num, 100000000000, 12);
	
	for (var i = 0; i < (result[0] - 1); i++) {
		x = x * 10;
	}
	
	for (var i = result[0]; i > 0; i--) {
		var temp = Math.floor(num / x);
		num = num - (x * temp);
		x = x / 10;
		result[1][i] = temp;
	}
	
	var count = 1;
	for (var i = result[0]; i > 0; i--) {
		if (i != result[0] && i % 3 == 0) {
			points[count] = ".";
			count++;
		}
		
		points[count] = result[1][i];
		count++;
	}
	
	result[0] = count - 1;
	result[1] = points;
	
	return result;
}

function switchStyle(num) {
	if (num == null) {
		style++;
		if (style > maxStyle) {
			style = 1;
		}
	} else {
		style = num;
	}
}

var scPos = 1;
var scDir = "up";
function chooseStyle(num, pos, maxPos) {
	if (style == 5) { /* ETTETTO: Supercar */
		var classe =  " class=\"supercar_off\"";
		
		if (pos == scPos) {	
			classe = " class=\"supercar_on\"";
		}
		
		return "<font" + classe + "\">" + num + "</font>";
	} else if (style == 4) { /* ETTETTO: Focus su numeri */
		return "<font class=\"focus\">" + num + "</font>";
	} else if (style == 3) { /* ETTETTO: Ingrandimento numeri */
		var size = 0;
		switch (num) {
			case 0:
				size = 20;
			break;
			case 1:
				size = 30;
			break;
			case 2:
				size = 40;
			break;
			case 3:
				size = 50;
			break;
			case 4:
				size = 60;
			break;
			case 5:
				size = 70;
			break;
			case 6:
				size = 80;
			break;
			case 7:
				size = 90;
			break;
			case 8:
				size = 100;
			break;
			case 9:
				size = 124;
			break;
			default:
				size = 62;
		}
		
		return "<font style=\"font-size: " + size + "px\" class=\"focus\">" + num + "</font>";
	} else if (style == 2) { /* ETTETTO: Mint fresh */
		switch (pos) {
			case 1:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 2:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			case 3:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 4:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			case 5:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 6:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			case 7:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 8:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			case 9:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 10:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			case 11:
				return "<font class=\"lightgreen\">" + num + "</font>";
			break;
			case 12:
				return "<font class=\"lightblue\">" + num + "</font>";
			break;
			default:
				return "<font class=\"nocolor\">" + num + "</font>";
		}
	} else { /* ETTETTO: Arcobaleno */
		switch (pos) {
			case 1:
				return "<font class=\"red\">" + num + "</font>";
			break;
			case 2:
				return "<font class=\"orange\">" + num + "</font>";
			break;
			case 3:
				return "<font class=\"yellow\">" + num + "</font>";
			break;
			case 4:
				return "<font class=\"green\">" + num + "</font>";
			break;
			case 5:
				return "<font class=\"blue\">" + num + "</font>";
			break;
			case 6:
				return "<font class=\"purple\">" + num + "</font>";
			break;
			case 7:
				return "<font class=\"red\">" + num + "</font>";
			break;
			case 8:
				return "<font class=\"orange\">" + num + "</font>";
			break;
			case 9:
				return "<font class=\"yellow\">" + num + "</font>";
			break;
			case 10:
				return "<font class=\"green\">" + num + "</font>";
			break;
			case 11:
				return "<font class=\"blue\">" + num + "</font>";
			break;
			case 12:
				return "<font class=\"purple\">" + num + "</font>";
			break;
			default:
				return "<font class=\"nocolor\">" + num + "</font>";
		}
	}
}

function updateText(id, value) {
	var output = splitNum(value);
	
	
	document.getElementById(id).innerHTML = "";
	for (var i = 1; i <= output[0]; i++) {
		var temp = chooseStyle(output[1][i], i, output[0]);
		document.getElementById(id).innerHTML += temp;
	}
	
	/* SUPERCAR FIX */
	if (style == 5) {
		if (scDir == "up") {
			scPos++;
			if (scPos >= output[0]) {
				scPos = output[0];
				scDir = "down";
			}
		} else {
			scPos--;
			if (scPos <= 1) {
				scPos = 1;
				scDir = "up";
			}
		}
	}
	/* SUPERCAR FIX END */
	
	var time = new Date().toString();
	document.getElementById("time").innerHTML = time;
}

function startTimer(div, value) {
	setTimeout("updateText('" + div + "', " + (value + 1) + "); startTimer('" + div + "', " + (value + 1) + ");", 1000);
}

function lifetime(div, g, m, a, hh, mm, ss) {
	var giorni       = 0;
	var mesi         = 0;
	var ore          = 0;
	var minuti       = 0;
	var secondi      = 0;
	var fGiorno      = 7;
	var fMese        = 5;
	var fAnno        = 1990;
	var fOre         = 9;
	var fMinuti      = 21;
	var fSecondi     = 0;
	
	/*
		1 anno    = 365 (366) giorni
		1 mese    = 28 (29) / 30 / 31 giorni
		1 giorno  = 24 ore
		1 ora     = 60 minuti
		1 minuto  = 60 secondi
	*/
	
	//------------------------------------
	// Approssimazione a giorni
	//------------------------------------
	
	/* Giorni del primo mese */
	giorni = giorni + numGiorni(fMese, fAnno) - (fGiorno + 1);
	
	/* Mesi del primo anno in giorni */
	for (var i = fMese + 1; i <= 12; i++) {
		giorni = giorni + numGiorni(i, fAnno);
	}
	
	/* Anni tra il primo e l'ultimo esclusi in giorni */
	for (var i = fAnno + 1; i < a; i++) {
		if ( bisestile(i) ) {
			giorni = giorni + 366;
		} else {
			giorni = giorni + 365;
		}
	}
	
	/* Giorni dell'ultimo mese */
	giorni = giorni + g - 1;
	
	/* Mesi dell'ultimo anno in giorni */
	for (var i = m - 1; i >= 1; i--) {
		giorni = giorni + numGiorni(i, a);
	}
	
	//------------------------------------
	// Approssimazione a ore
	//------------------------------------
	
	/* Ore del primo giorno */
	ore = ore + 24 - (fOre + 1);
	
	/* Ore intermedie */
	ore = ore + (giorni * 24);
	
	/* Ore dell'ultimo giorno */
	ore = ore + (hh - 1);
	
	//------------------------------------
	// Approssimazione a minuti
	//------------------------------------
	
	/* Minuti della prima ora */
	minuti = minuti + 60 - (fMinuti + 1);
	
	/* Minuti intermedi */
	minuti = minuti + (ore * 60);
	
	/* Minuti dell'ultima ora */
	minuti = minuti + (mm - 1);
	
	//------------------------------------
	// Approssimazione a secondi
	//------------------------------------
	
	/* Secondi del primo minuto */
	secondi = secondi + 60 - (fSecondi);
	
	/* Secondi intermedi */
	secondi = secondi + (minuti * 60);
	
	/* Secondi dell'ultimo minuto */
	secondi = secondi + (ss);
	
	/* Aggiorna timer */
	updateText(div, secondi);
	startTimer(div, secondi);
}
