/****************************************************************************
 *   Copyright (C) 2010, 2011  Rouven Spreckels  <info@dididah.com>         *
 *                                                                          *
 *   fade is free software: you can redistribute it and/or modify           *
 *   it under the terms of the GNU General Public License as published by   *
 *   the Free Software Foundation, either version 3 of the License, or      *
 *   (at your option) any later version.                                    *
 *                                                                          *
 *   fade is distributed in the hope that it will be useful,                *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of         *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
 *   GNU General Public License for more details.                           *
 *                                                                          *
 *   You should have received a copy of the GNU General Public License      *
 *   along with fade.  If not, see <http://www.gnu.org/licenses/>.          *
 ****************************************************************************/

fadeTime = 400;
fadeMin = 0.0;
fadeMax = 1.0;
fadeRate = 20;

function fade(id, time, min, max, rate, lastTick) {
	var tick = new Date().getTime();
	var e = document.getElementById(id);
	if (e.fadeState) {
		if (lastTick)
			e.fadeTimeElapsed += tick-lastTick;
		else {
			e.fadeState = e.fadeState == 1 ? -1 : 1;
			e.fadeTimeElapsed = e.fadeTime-e.fadeTimeElapsed;
			if (time != null) {
				e.fadeTimeElapsed = e.fadeTimeElapsed/e.fadeTime*time;
				e.fadeTime = time;
			}
			return;
		}
	}
	else {
		e.fadeTime = time != null ? time : e.fadeTime != null ? e.fadeTime : fadeTime;
		e.fadeMin = min != null ? min : e.fadeMin != null ? e.fadeMin : fadeMin;
		e.fadeMax = max != null ? max : e.fadeMax != null ? e.fadeMax : fadeMax;
		e.fadeRate = rate != null ? rate : e.fadeRate != null ? e.fadeRate : fadeRate;
		e.fadeState = e.style.opacity == e.fadeMax ? -1 : 1;
		e.fadeTimeElapsed = 0.0;
	}
	var opacity = e.fadeTimeElapsed/e.fadeTime;
	if (e.fadeTimeElapsed >= e.fadeTime)
		opacity = 1.0;
	if (e.fadeState == -1)
		opacity = 1.0-opacity;
	opacity = (e.fadeMax-e.fadeMin)*opacity+e.fadeMin;
	e.style.opacity = opacity;
	e.style.filter = 'alpha(opacity='+opacity*100+')';// IE
	if (e.fadeTimeElapsed >= e.fadeTime)
		e.fadeState = null;
	else
		setTimeout(function() {
			fade(id, null, null, null, null, tick);
		}, e.fadeRate);
}

