function $(id) {
	return document.getElementById(id);
	}

	function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function OpenPopupWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
  }
  
// Functions to change classnames of elements:
//============================================
var CSSClass = {};
CSSClass.is = function(e, c) {
	if (typeof e == "string") e = document.getElementById(e);
	var classes = e.className;

	if (!classes) return false;
	if (classes == c) return true;

	return e.className.search("\\b" + c + "\\b") != -1;
	}

// Add class c if not already there
CSSClass.add = function(e,c) {
	if (typeof e == "string") e= document.getElementById(e);
	if (CSSClass.is(e,c)) return;
	if (e.classame) c = " " + c;
	e.className += c;
	}

// Remove all occurrences class c from element
CSSClass.remove = function(e,c) {
	if (typeof e == "string") e= document.getElementById(e);
	e.className = e.className.replace(new RegExp("\\b" + c + "\\b\\s*", "g"), "");
	}

var down = function() {alert("Down - FAIL");};
var up = function() {alert("UP Fail");};
var stop = function() {};
var scroll = {};

//alert("LOADED UTILS");

function createScrollers(elemId, upId, downId) {
	//alert("Scroll Height: " + elemId.scrollHeight);
	try {
		scroll = new Animator({'fps':50, 'duration':6000, transition:Animator.tx.linear}).addSubject(new CSSStyleSubject( $('content'), 'top: 0px','top: -' + (elemId.scrollHeight - 240) + 'px'));
		}
	catch (e) {
		txt="";
		for (prop in e) {
			txt += prop + ": " + e[prop] + "\n";
			}
		alert("ERROR " + txt); 
		}
	finally {

		down = function() { scroll.seekTo(0);}
		up = function() { scroll.seekTo(1);}
		stop = function() { scroll.stop();}
		}

	upId.onmousedown = down;
	downId.onmousedown = up;
	upId.onmouseup = stop;
	downId.onmouseup= stop;

	}

// Accepts a variable number of arguments. The visibility of the first argument
// is toggled, and if then visible, the rest are set to 'hidden'.
function toggleMenuVisibility(e) {
	if (CSSClass.is(e,"visible")) {
		CSSClass.remove(e,"visible");
		CSSClass.add(e, "hidden");
		return;
		}

	CSSClass.remove(e, "hidden");
	CSSClass.add(e, "visible");

	if (arguments.length < 2) return;

	for (var n = 1; n < arguments.length; n++) {
		if (CSSClass.is(arguments[n],"visible")) {
			CSSClass.remove(arguments[n],"visible");
			CSSClass.add(arguments[n], "hidden");
			}
		}

	return;
	}

//Rolling fade through animation
//==============================


function fadeRound(fadeTime,holdTime,picList) {
	var nPics = picList.length;

	if (nPics < 2) return;

	var fader1 = new Animator({'fps':50, 'duration':fadeTime, transition:Animator.tx.linear})
	var fader2 = new Animator({'fps':50, 'duration':fadeTime, transition:Animator.tx.linear})

	var picIDs = []
	for (var n = 0; n < picList.length; n++) {
		picIDs[n] = $(picList[n]);
		}
	var curPic = 0;
	var nextTimerId = setInterval(fadeNext, holdTime+2*fadeTime);

	/********************
	Every NEXTIMAGE seconds {
		{FadeOut pic(n)}->OnComplete-> {FadeIn Pic(n+1)}
		}
	**********************/
	function fadeNext() {

		// Set fader2 to fade IN next picture
		fader2.clearSubjects();
		fader2.addSubject(new CSSStyleSubject( picIDs[(curPic+1) % nPics], 'opacity:0;filter:alpha(opacity=0)','opacity:1;filter:alpha(opacity=100)'));

		// Set fader1 to fade OUT current picture, and onComplete to call fader2
		fader1.clearSubjects();
		fader1.addSubject(new CSSStyleSubject( picIDs[curPic], 'opacity:0;filter:alpha(opacity=0)','opacity:1;filter:alpha(opacity=100)'));
		fader1.options['onComplete'] = function() {fader2.seekFromTo(0,1);};

		// Increment Current Picture counter (modulo Npics).
		curPic = (curPic + 1) % nPics;

		// Call fader1 in seekTo mode
		fader1.seekFromTo(1,0);
		}

	
	}

/*
Every NEXTIMAGE seconds {
	{FadeOut pic(n)}->OnComplete-> {FadeIn Pic(n+1)}
	}
*/
