function animateProperty(e, p, u, v, n, i, s, f, q) { // element, property, unit, value, newValue, interval, speed, additionalFunction, quitFunction
	if(!s) s=.15;
	e[v] += (e[n]-e[v])*s;
	if (Math.abs(e[n]-e[v])<.5) {
		e[v] = e[n];
		if(q) q();
		clearInterval(e[i]);
	}
	e.style[p] = e[v]+u;
	if(f) f();
}
//
function fadeColor(e, p, s, i) { // element, property, speed, interval
	Math.abs(e.newRed-e.red)>1 ? e.red += (e.newRed-e.red)*s : e.red = e.newRed;
	Math.abs(e.newGreen-e.green)>1 ? e.green += (e.newGreen-e.green)*s : e.green = e.newGreen;
	Math.abs(e.newBlue-e.blue)>1 ? e.blue += (e.newBlue-e.blue)*s : e.blue = e.newBlue;
	//
	if (e.red == e.newRed && e.green == e.newGreen && e.blue == e.newBlue) {
		clearInterval(e[i]);
	}
	//	
	var redHex = Math.round(e.red).toString(16);
	var greenHex = Math.round(e.green).toString(16);
	var blueHex = Math.round(e.blue).toString(16);
	var fillColor =	"#"+zeros.slice(0, 2-redHex.length)+redHex+
					zeros.slice(0, 2-greenHex.length)+greenHex+
					zeros.slice(0, 2-blueHex.length)+blueHex;
	//
	e.style[p] = fillColor;
}
//
function startFade(e, n) {
	if(String(e.alpha) == 'undefined') getAlpha(e);
	e.fi ? clearInterval(e.fi) : null;
	e.fi = setInterval(function() {fadeAlpha(e, n, 'fi')}, 20);
}

function fadeAlpha(e, n, i) { // element, newAlpha, interval
	var s=.2;
	e.alpha += (n-e.alpha)*s;
	if (Math.abs(n-e.alpha)<.5){
		e.alpha = n;
		clearInterval(e[i]);
	}
	setAlpha(e, e.alpha);
}

function setAlpha(e, a) {
	e.alpha = a;
	if (e.runtimeStyle) {
		e.style.filter=a<100 ? "alpha(opacity="+a+")" : '';
	} else {
		e.style.opacity=a/100;
	}
	e.style.visibility=a>0 ? 'visible' : 'hidden';
}

function getAlpha(e) {
	e.alpha = parseFloat(e.style.opacity)*100;
	if (e.alpha == null) e.alpha=100;
}