
function fromBase64(str) {
  var x =
    "\76???\77\64\65\66\67\70\71\72\73\74\75???\0???" +
    "\0\1\2\3\4\5\6\7\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31??????" +
    "\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";
  var i=0, len=str.length;
  var out = "";
  str += "===".substring((len+3)&3);
  len += -len & 3;
  while(i<len) {
    var c=x.charCodeAt(str.charCodeAt(i++)-0x2b);
    c <<= 6;
    c |= x.charCodeAt(str.charCodeAt(i++)-0x2b);
    c <<= 6;
    c |= x.charCodeAt(str.charCodeAt(i++)-0x2b);
    c <<= 6;
    c |= x.charCodeAt(str.charCodeAt(i++)-0x2b);
    out += String.fromCharCode(c>>16,c>>8&0xff,c&0xff);
  }
  if (str.charCodeAt(len-1)==0x3d) {
    if (str.charCodeAt(len-2)==0x3d)
      out = out.substring(0,out.length-2);
    else
      out = out.substring(0,out.length-1);
  } 
  return out;
}

function Multiload(e) {
  var fs = Multiload.funcs, len = fs.length;
  for (var i=0; i<len; ++i) {
    var f = fs[i], t = typeof f;
    if (t == "function") f(e);
    else if (t == "string") eval(f);
  }
}
Multiload.funcs = new Array();
Multiload.addLoader = function(f) { Multiload.funcs.push(f); }

Multiload.addLoader(function(){
  var ancs = document.getElementsByTagName("a");
  var len = ancs.length;
  for (var i=0; i<len; ++i) {
    var a = ancs[i];
    if (a.href.substr(0,4)=="b64:")
      a.href = fromBase64(a.href.substr(4));
  }
});

function ThrobFader(container) {
	var ELEMENT = document.ELEMENT_NODE;
	var children = new Array();
	var rawChildren = container.childNodes;
	var len = rawChildren.length;
	for (var i=0; i<len; ++i) {
		var child = rawChildren[i];
		if (child.nodeType == ELEMENT) {
			children.push(child);
			child.style.display = "none";
		}
	}
	if (children.length == 0) {
		this.start = function() { }
		return;
	}
	var DELTA = 1 / ThrobFader.FADE_STEPS;
	var VIS_DURATION = ThrobFader.VIS_DURATION;
	var STEP_DURATION = ThrobFader.FADE_DURATION /  ThrobFader.FADE_STEPS;
	var setOpacity = ThrobFader.setOpacity;
	var index = 0;
	var alpha = 0;
	var interval;
	var element = children[index];
	
	var fadeIn = function() {
		alpha += DELTA;
		if (alpha >= 1) {
			alpha = 1;
			window.clearInterval(interval);
			window.setTimeout(wait,VIS_DURATION);
		}
		setOpacity(element,alpha);
	}
	
	var fadeOut = function() {
		alpha -= DELTA;
		if (alpha <= 0) {
			alpha = 0;
			setOpacity(element,0);
			window.clearInterval(interval);
			index++;
			if (index >= children.length) index = 0;
			element = children[index];
			interval = window.setInterval(fadeIn,STEP_DURATION);
		}
		else setOpacity(element,alpha);
	}
	
	var wait = function() {
		interval = window.setInterval(fadeOut,STEP_DURATION);
	}
	
	this.start = function() {
		interval = window.setInterval(fadeIn,STEP_DURATION);
	}
}
ThrobFader.VIS_DURATION = 5000; // milliseconds
ThrobFader.FADE_DURATION = 1000; // milliseconds
ThrobFader.FADE_STEPS = 100;
ThrobFader.setOpacity = function(element,alpha) {
	var style = element.style;
	if (!alpha) style.display = "none";
	else style.display = "";
	style.opacity = alpha;
	style.MozOpacity = alpha;
	style.filter = "alpha(opacity="+Math.floor(100*alpha)+")";
}

