var TimeToFade = 1000.0;
var isIE = navigator.appName.indexOf("Microsoft") != -1;
var fTimer;
var tTimer;
var iTimer;
var xTimer;
var sArray = new Array();
var loops = 0;
var maxloops = 1;
var debugIsOn = false;

function debug(msg) {
	if (debugIsOn) {
		document.getElementById("messages").innerHTML = msg;
	}
}


function setOpacity(elem, opacityAsInt) {
    var opacityAsDecimal = opacityAsInt;
    //debug('opacity starting as:' + opacityAsDecimal);

    if (opacityAsInt > 100)
        opacityAsInt = opacityAsDecimal = 100;
    else if (opacityAsInt < 0)
        opacityAsInt = opacityAsDecimal = 0;

    opacityAsDecimal /= 100;
    if (opacityAsInt < 1)
        opacityAsInt = 1; // IE7 bug, text smoothing cuts out if 0

    if (isIE) {
    	elem.style.filter  = "alpha(opacity=" + opacityAsInt + ")";
    } else {
    	elem.style.opacity = (opacityAsDecimal);
    }
}




function showArticle(articleId) {
	clearTimeout(fTimer);
	clearTimeout(tTimer);
	clearTimeout(iTimer);
	clearTimeout(xTimer);
        var aIndex = 0;
	var fElement;
	var tElement;
        var iElement;
	var xElement;
	for (var i=0; i < sArray.length; i++) {
		if (sArray[i] != articleId) {
			fElement = document.getElementById('slidef-' + sArray[i]);
			tElement = document.getElementById('slidet-' + sArray[i]);
			setOpacity(fElement,0);
			fElement.style.visibility = 'hidden';
			fElement.style.display = 'none';
			setOpacity(tElement,45);
			if (isIE) {
				iElement = document.getElementById('imgf-' + sArray[i]);
				xElement = document.getElementById('txtf-' + sArray[i]);
				setOpacity(iElement,0);
				setOpacity(xElement,0);
			}
		}
	}
	fElement = document.getElementById('slidef-' + articleId);
	tElement = document.getElementById('slidet-' + articleId);
	setOpacity(fElement,100);
	fElement.style.visibility = 'visible';
	fElement.style.display = 'block';
	setOpacity(tElement,100);
	if (isIE) {
		iElement = document.getElementById('imgf-' + articleId);
		xElement = document.getElementById('txtf-' + articleId);
		iElement.style.visibility = 'visible';
		iElement.style.display = 'block';
		xElement.style.visibility = 'visible';
		xElement.style.display = 'block';
		setOpacity(iElement,100);
		setOpacity(xElement,75);
	}
}

function launchFade(fIndex,isFadeOut) {
	debug('launching fade...');
	var fostr = 'false';
	if (isFadeOut) {
		fostr = 'true';
	} 

	if (fIndex >= sArray.length) {
		fIndex = 0;
		loops++;
	}

	var wait = 100;
	if (isFadeOut) {
		wait = 5000;
		debug('fading out ' + fIndex);
	} else {
		debug('fading in ' + fIndex);
	}
	fTimer = setTimeout("fadeIt('slidef'," + fIndex + ",1.0,0.0," + fostr + ",true);",wait);
	tTimer = setTimeout("fadeIt('slidet'," + fIndex + ",1.0,0.45," + fostr + ",false);",wait);
	if (isIE) {
		debug('is IE');
		iTimer = setTimeout("fadeIt('imgf'," + fIndex + ",1.0,0.0," + fostr + ",true);",wait);
		xTimer = setTimeout("fadeIt('txtf'," + fIndex + ",0.75,0.0," + fostr + ",true);",wait);
	}
}



function fadeIt(elementtype,aIndex,maxOpacity,minOpacity,isFadeOut,hideWhenOut) {

  var eid = elementtype + '-' + sArray[aIndex];
  
  debug('in fadeIt:' + elementtype + "," + isFadeOut + "," + eid);
  
  var element = document.getElementById(eid);
  if(element == null) {
    debug('null element');
    return;
  }

  var fostr = 'false';
  if (isFadeOut) {
	fostr = 'true';
  }

  var tstr = "animateFade(" + new Date().getTime() + ",'" + elementtype + "'," + aIndex + ",'" + maxOpacity + "','" + minOpacity + "'," + fostr + "," + hideWhenOut + ")";
  debug(tstr);
  if (elementtype == 'slidef') {
  	fTimer = setTimeout(tstr,33);
  } else {
	if (elementtype == 'slidet') {
  		tTimer = setTimeout(tstr,33);
	} else {
		if (isIE) {
			if (elementtype == 'imgf') {
  				iTimer = setTimeout(tstr,33);
			} else {
				xTimer = setTimeout(tstr,33);
			}
		}
	}
  }  
}


function animateFade(lastTick,elementtype,aIndex,maxOpacity,minOpacity,isFadeOut,hideWhenOut) {  
  var curTick = new Date().getTime();
  var elapsedTicks = curTick - lastTick;
 
  var eid = elementtype + '-' + sArray[aIndex];
  var element = document.getElementById(eid);
  var floatmax = parseFloat(maxOpacity);
  var floatmin = parseFloat(minOpacity);

  debug('animateFade:' + elementtype + ',' + aIndex + ',' + maxOpacity + ',' + minOpacity + ',' + isFadeOut + ',' + hideWhenOut);

  if (element.FadeTimeLeft == null) { 
	element.FadeTimeLeft = TimeToFade; 
	if (isFadeOut) {
		setOpacity(element,parseInt('' + parseFloat(maxOpacity)*100));
		element.style.opacity = maxOpacity;
        } else {
        	element.style.visibility = 'visible';
		element.style.display = 'block';
		element.style.opacity = minOpacity;
	}
  }
 
  if(element.FadeTimeLeft <= elapsedTicks) {
    if (isFadeOut) {
	setOpacity(element,parseInt('' + parseFloat(minOpacity)*100));
        if (hideWhenOut) {
        	element.style.visibility = 'hidden';
		element.style.display = 'none';
	}
	element.FadeTimeLeft = null; 
    } else {
	setOpacity(element,parseInt('' + parseFloat(maxOpacity)*100));
	element.FadeTimeLeft = null; 
    }

    if (!isFadeOut && loops >= maxloops && aIndex == 0) {
	debug('loop done');
        return;
    } else {
	if (elementtype == 'slidef') {
		debug('launching a new fade');
		if (isFadeOut) {
    			launchFade(aIndex+1,false);
		} else {
			launchFade(aIndex,true);
		}
	}
    }
    debug('done animateFade');
    return;
  }
 
  element.FadeTimeLeft -= elapsedTicks;
  var timeratio = element.FadeTimeLeft/TimeToFade;
  var opslice = (floatmax - floatmin) * timeratio;
  //debug("Opslice:" + timeratio);
  var newOpVal;
  if(isFadeOut) {
	newOpVal = floatmin + opslice;
  } else {
	newOpVal = floatmax - opslice;
  }
  ieopval = parseInt('' + (newOpVal * 100));
  if (elementtype == 'slidef') {
  	debug('IE opacity: ' + ieopval);
  }
  setOpacity(element,ieopval);
 
  var fostr = 'false';
  if (isFadeOut) {
	fostr = 'true';
  }

  if (elementtype == 'slidef') {
  	xTimer = setTimeout("animateFade(" + curTick + ",'slidef'," + aIndex + ",'" + maxOpacity + "','" + minOpacity + "'," + fostr + "," + hideWhenOut + ")", 33);
  } else {
	if (elementtype == 'slidet') {
  		tTimer = setTimeout("animateFade(" + curTick + ",'slidet'," + aIndex + ",'" + maxOpacity + "','" + minOpacity + "'," + fostr + "," + hideWhenOut + ")", 33);
	} else {
		if (isIE) {
			if (elementtype == 'imgf') {
  				iTimer = setTimeout("animateFade(" + curTick + ",'imgf'," + aIndex + ",'" + maxOpacity + "','" + minOpacity + "'," + fostr + "," + hideWhenOut + ")", 33);
			} else {
  				xTimer = setTimeout("animateFade(" + curTick + ",'txtf'," + aIndex + ",'" + maxOpacity + "','" + minOpacity + "'," + fostr + "," + hideWhenOut + ")", 33);
			}
		}
	}
  }
}


