var sInts = new Array;
var sInt;

function sfHover(myId, myEl) {
	var sfEls = document.getElementById(myId).getElementsByTagName(myEl);
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" hover";
		}
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" hover\\b"), "");
		}
	}
}
function changeOpac(opacity, id) {
	var object = document.getElementById(id).style;
	if (navigator.userAgent.toLowerCase().indexOf('opera') != -1) {
		// alert(end);
		if (opacity == 0) object.visibility = 'hidden';
		else object.visibility = 'visible';
	} else {
		if (opacity == 100) opacity = 99.99; // only go up to 99.99 to stop image flicker in mozilla
		object.filter = "alpha(opacity=" + opacity + ")";
		object.KhtmlOpacity = (opacity / 100);
		object.opacity = (opacity / 100);
		object.MozOpacity = (opacity / 100);
	}
} 
function easing(t, b, c, d, type) {
/*
--
Easing Equations (c) 2003 Robert Penner, all rights reserved.
This work is subject to the terms in http://www.robertpenner.com/easing_terms_of_use.html.
--
t = current time; b = start value; c = end value; d = total time;
*/

var a=1.70158;var p=0;


	switch (type) {
		case 'in': {
			return c*(t/=d)*t + b; // in
			break;
		}
		case 'inout': {
			if (t < d/2) return 2*c*t*t/(d*d) + b;
			var ts = t - d/2;
			return -2*c*ts*ts/(d*d) + 2*c*ts/d + c/2 + b;		
		}
		case 'out': {
			return -c*t*t/(d*d) + 2*c*t/d + b;
		}
		case 'expoin': {
			var flip = 1;
			if (c < 0) {
				flip *= -1;
				c *= -1;
			}
			return flip * (Math.exp(Math.log(c)/d * t)) + b;		
		}
		case 'expoout': {
			var flip = 1;
			if (c < 0) {
				flip *= -1;
				c *= -1;
			}
			return flip * (-Math.exp(-Math.log(c)/d * (t-d)) + c + 1) + b;
		}
		case 'expoinout': {
			var flip = 1;
			if (c < 0) {
				flip *= -1;
				c *= -1;
			}
			if (t < d/2) return flip * (Math.exp(Math.log(c/2)/(d/2) * t)) + b;
			return flip * (-Math.exp(-2*Math.log(c/2)/d * (t-d)) + c + 1) + b;
		}
		case 'bounceout': {
			if ((t/=d) < (1/2.75)) {
				return c*(7.5625*t*t) + b;
			} else if (t < (2/2.75)) {
				return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
			} else if (t < (2.5/2.75)) {
				return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
			} else {
				return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
			}
		}
		case 'elasout': {
			if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
			if (a < Math.abs(c)) { a=c; var s=p/4; }
			else var s = p/(2*Math.PI) * Math.asin (c/a);
			return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
		}
		default: {
			return c*t/d + b; //linear
		}
	}
}

function fadeMe(me, myStart, end) {
	// alert(me.id);
	me.i = 0;
	me.myStart = myStart;
	me.end = end;
	addInterval('doFade("'+ me.id +'")');
}
function addInterval(string) {
	var toGo = (sInts.length == 0) ? true : false;
	sInts.push(string);
	// alert(sInts.length);
	// alert(toGo);
	if (toGo) {
		sInt = setInterval('goNow();', smooth);
	}
}

function goNow() {
	// alert('blah');
	notDone = new Array;
	for (var sI = 0; sI < sInts.length; sI++) {
		// alert(sInts[sI]);
		if (!eval(sInts[sI])) {
			notDone.push(sInts[sI]);
			// sInts.splice(sI--, 1);
			// alert('a:'+sInts.length);
		}
	}
	sInts = notDone;
	// alert(sInts.length);
	// sInt = setTimeout('goNow();', smooth);
	if (sInts.length < 1) {
		// clearTimeout(sInt);
		clearInterval(sInt);
	}
	// alert(sInt);
}


function doFade(id) {
	// alert(id);
	var finished = false
	var me = document.getElementById(id);
	me.i += smooth;
	var opac = (me.myStart < me.end) ? 
			easing(me.i, me.myStart, me.end, transition, 'expoout') :
			me.myStart - easing(me.i, me.end, me.myStart, transition, 'expoout');
	// alert(opac);
	if(me.i >= transition) {
		finished = true
		opac = me.end;
	}
	changeOpac(opac, me.id);
	return(finished);
}

function sizeTo(me, h) {
	/*
	alert(y);
	alert(me.id);
	alert(h);
	*/
	me.startH = me.offsetHeight;
	if ((me.startH - h) == 0) return;
	me.endH = h;
	me.i = 0;
	addInterval('resize("'+me.id+'");', smooth);
}

function resize(id) {
	var finished = false
	me = document.getElementById(id);
	me.i += smooth;
	// alert(me.startH + ":" + me.endH);
	// if (me.i < 50) alert(me.myStartY+' - '+me.endY);
	var sizeTrans = (me.startH < me.endH) ? transOutTime : transInTime;
	var newH = (me.startH < me.endH) ? 
			me.startH + easing(me.i, 0, me.endH - me.startH, sizeTrans, transOut) :
			me.startH - easing(me.i, 0, me.startH - me.endH, sizeTrans, transIn);

	if(me.i >= sizeTrans) {
		// alert(me.endH);
		finished = true
		me.i = 0;
		newH = me.endH;
	}
	// alert(newH);
	me.style.height = (newH/15) + 'em';
	if (me.offsetHeight != newH) me.style.height = (newH + 1)/15 + 'em';
	return(finished);
}
function fixE(e) {
	if (typeof e == 'undefined') e = window.event;
	if (typeof e.target == 'undefined') e.target = e.srcElement;
	if (typeof e.clientX == 'undefined') e.clientX = e.offsetX;
  if (typeof e.clientY == 'undefined') e.clientY = e.offsetY;
	return e;
}
function addClass(me, cl) {
	me.className = (me.className) ? me.className + ' ' + cl : cl;
}

function removeClass(me, cl) {
	var reg = new RegExp('[ ]*'+cl, "g")
	me.className = me.className.replace(cl, '');
}

function replaceClass(me, ccl, ncl) {
	me.className = me.className.replace(ccl, ncl);
}
function hasClass(me, cl) {
	if (me.className)
	return (me.className.indexOf(cl) > -1);
	else return false;
}
function removeNode(me) { me.parentNode.removeChild(me); }
