// JavaScript Document

/**
* @Authors: MiB
* @Version: 0.1.1
* @Date: 2010-05-23
* @Copyright: RAGBIT GmbH - All rights reserved.
**/

function shaderClass () {
	this.alphaBlend = function (fadeObject, fromAlpha, toAlpha, microseconds, killElement) {
		if (fadeObject === null) return null;
		if (typeof fadeObject != 'object') var fadeObject = document.getElementById(fadeObject);
		if (fromAlpha === null) fromAlpha = 0;
		if (toAlpha === null) toAlpha = 1;
		if (!microseconds) microseconds = 2000;
		if (killElement === null) killElement = true;
		
		var currentAlpha = fromAlpha;
		var fps = 24;
		var imageTime = 1000/fps;
		var stepNum = microseconds/imageTime;
		var stepMax = stepNum + (microseconds/100);
		var currentStep = 0;
		var iteration = parseFloat((toAlpha-fromAlpha)/stepNum);
		var setAlpha;
		var timeIndex;
		
		var isIE = document.all ? true : false;
		
		//alert(isIE);
		
		while (currentStep <= stepMax && (currentAlpha <= toAlpha && fromAlpha < toAlpha || currentAlpha >= toAlpha && fromAlpha > toAlpha)) {
			currentStep = currentStep +1;
			currentAlpha = fromAlpha + (iteration * currentStep);
			if (fromAlpha < toAlpha && currentAlpha >= toAlpha || fromAlpha > toAlpha && currentAlpha <= toAlpha) currentAlpha = toAlpha;
			if (currentAlpha < 0) currentAlpha = 0.0;
			if (currentAlpha > 1) currentAlpha = 1.0;
			setAlpha = Math.round(currentAlpha*100)/100;
			timeIndex = Math.round(imageTime * currentStep);
			setTimeout (
				(function (fadeObject, setAlpha, timeIndex) {
  				return function() {
					if (!isIE) fadeObject.style.opacity = setAlpha;
					else fadeObject.style.filter = 'Alpha(opacity='+(Math.round(setAlpha*100))+')';
  				};
				})(fadeObject, setAlpha, timeIndex), timeIndex
			);
			if (currentAlpha == toAlpha) break;
		};
		if (killElement) {
			setTimeout (
				function () {
					fadeObject.parentNode.removeChild(fadeObject);
				}, timeIndex
			);
		};
	};
	
	this.setAlpha = function (setObject, setAlpha) {
		var isIE = document.all ? true : false;
		if (!isIE) setObject.style.opacity = setAlpha;
		else {
			setObject.style.filter = 'Alpha(opacity='+(Math.round(setAlpha*100))+')';
			setObject.style.backgroundColor = 'white';
		}
	};
	
	this.fadeDisplay = function (fadeObject, toDisplay, fromAlpha, toAlpha, microseconds) {
		// using this.alphaBlend(fadeObject, fromAlpha, toAlpha, microseconds, killElement)
		if (fadeObject === null) return null;
		if (typeof fadeObject != 'object') var fadeObject = document.getElementById(fadeObject);
		if (!toDisplay) toDisplay = 'none';
		if (!microseconds) microseconds = 500;
		
		if (toDisplay == 'none') { // fade out: 1. fade, 2. set display
			if (fromAlpha === null) fromAlpha = 1;
			if (toAlpha === null) toAlpha = 0;
			setTimeout (
				function () {
					fadeObject.style.display = toDisplay;
				}, microseconds
			);
		} else { // fade in: 1. set display, 2. fade
			if (fromAlpha === null) fromAlpha = 0;
			if (toAlpha === null) toAlpha = 1;
			this.setAlpha(fadeObject, fromAlpha);
			fadeObject.style.display = toDisplay;
		}
		this.alphaBlend(fadeObject, fromAlpha, toAlpha, microseconds, false);
	}
	
	this.fadeTextColor = function (containerObject, fromColor, toColor, killElement, microseconds, step, iterationRed, iterationGreen, iterationBlue) {
		if (typeof containerObject != 'object') var containerObject = document.getElementById(containerObject);
		
		if (!fromColor) fromColor = '000000';
		if (!toColor) toColor = 'ffffff';
		if (killElement === null) killElement = true;
		if (!microseconds) microseconds = 1000;
		if (!step) step = 0;
		step = step+1;
		
		fps = 24;
		var imageTime = Math.round(1000/fps);
		
		var fromIntColorRed = parseInt(fromColor.substring(0,2),16);
		var fromIntColorGreen = parseInt(fromColor.substring(2,4),16);
		var fromIntColorBlue = parseInt(fromColor.substring(4,6),16);
		
		var toIntColorRed = parseInt(toColor.substring(0,2),16);
		var toIntColorGreen = parseInt(toColor.substring(2,4),16);
		var toIntColorBlue = parseInt(toColor.substring(4,6),16);
		
		var stepNum = Math.round(microseconds/imageTime);
		
		if (!iterationRed) iterationRed = Math.round((toIntColorRed-fromIntColorRed)/stepNum);
		if (!iterationGreen) iterationGreen = Math.round((toIntColorGreen-fromIntColorGreen)/stepNum);
		if (!iterationBlue) iterationBlue = Math.round((toIntColorBlue-fromIntColorBlue)/stepNum);
		
		var newIntColorRed = fromIntColorRed + iterationRed;
		if (newIntColorRed < 0) newIntColorRed = 0;
		if (newIntColorRed > 255) newIntColorRed = 255;
		var newIntColorGreen = fromIntColorGreen + iterationGreen;
		if (newIntColorGreen < 0) newIntColorGreen = 0;
		if (newIntColorGreen > 255) newIntColorGreen = 255;
		var newIntColorBlue = fromIntColorBlue + iterationBlue;
		if (newIntColorBlue < 0) newIntColorBlue = 0;
		if (newIntColorBlue > 255) newIntColorBlue = 255;
		
		var newHexColorRed = newIntColorRed.toString(16);
		if (newHexColorRed.length <2) newHexColorRed = '0'+newHexColorRed;
		var newHexColorGreen = newIntColorGreen.toString(16);
		if (newHexColorGreen.length <2) newHexColorGreen = '0'+newHexColorGreen;
		var newHexColorBlue = newIntColorBlue.toString(16);
		if (newHexColorBlue.length <2) newHexColorBlue = '0'+newHexColorBlue;
		
		var changeColor = newHexColorRed+''+newHexColorGreen+''+newHexColorBlue;
		
		//alert (stepNum+','+iterationRed+','+fromIntColorRed+','+toIntColorRed+','+(fromIntColorRed-toIntColorRed)+','+Math.abs((fromIntColorRed-toIntColorRed)/stepNum)+','+changeColor);
		
		if (step<stepNum && changeColor.length == 6) {
			containerObject.style.color = '#'+changeColor;
			setTimeout(
				function () {
					shaderObj.fadeTextColor(containerObject, changeColor, toColor, killElement, microseconds, step, iterationRed, iterationGreen, iterationBlue);
				}, imageTime
			);
		} else {
			containerObject.style.color = '#'+toColor;
			if (killElement) {
				containerObject.parentNode.removeChild(containerObject);
			}
		}
		return true;
	};
}
var shaderObj = new shaderClass ();
/*
if(hex>0) { //If color is not black yet
hex-=11; // increase color darkness
document.getElementById("sample").style.color="rgb("+hex+","+hex+","+hex+")";
setTimeout("fadetext()",20); 
}
else
hex=255 //reset hex value
*/
