
var lockAnim = false;
var g_mstArr = new Array();
g_mstArr[0] = "OVER";
g_mstArr[1] = "DOWN";

var g_stArr = new Array();
g_stArr[0] = "ON";
g_stArr[1] = "ANIM";

var g_pre = new Array();

//:pre(s,arr) - preload image
//
function pre(s,arr) {
	if (s == "")
		return;
	if (!arr)
		arr = g_pre;
	var i = push(arr,new Image());
	arr[i].src = s;
}

//:sSrc(o,src,alt) - switch image (o) source to src and alternate text to alt
//
function sSrc(o,src,alt) {
	if (o) {
		if (src && src != "" && src != o.src) o.src = src;
		if (alt && alt != "") o.alt = alt;
	}
}

function isSt(s,arr) {
	if (s == "")
		return -1;
	for (var i in arr) {
		if (arr[i] == s)
			return i;
	}
	return -1;
}

function addSt(s,arr,on) {
	var ix = isSt(s,arr);
	if (on && ix == -1)
		arr[arr.length] = s;
	else if (!on && ix != -1)
		arr[ix] = "";
}

function gSt(arr,last) {
	if (last)
		return (arr.length > 0 && arr[arr.length - 1] != "") ? "_" + arr[arr.length - 1] : "";
	var ret = "";
	for (var i in arr) {
		if (arr[i] && arr[i] != "")
			ret += "_" + arr[i];
	}
	return ret;
}

//:applySt(o,st,on) - set src to DOWN, OVER...
//		st = DOWN, OVER, ON, ANIM...
//
function applySt(src,st,on) {
	var n = src.lastIndexOf(".");
	if (n==-1) n = src.length;
	var ext = src.substr(n,src.length);
	src = src.substr(0,n);
	var stArr = new Array();
	var mstArr = new Array();
	var cstArr = new Array();
	while (src != "" && (n = src.lastIndexOf("_")) != -1) {
		var s = src.substr(n + 1,src.length);
		src = src.substr(0,n);
		if (s == "")
			continue;
		if (isSt(s,g_mstArr) != -1)
			mstArr[mstArr.length] = s;
		else if (isSt(s,g_stArr) != -1 && isSt(s,stArr) == -1)
			stArr[stArr.length] = s;
		else if (isSt(s,cstArr) == -1)
			cstArr[cstArr.length] = s;	
	}
	if (isSt(st,g_mstArr) != -1)
		addSt(st,mstArr,on);
	else if (isSt(st,g_stArr) != -1)
		addSt(st,stArr,on);
	else
		addSt(st,cstArr,on);
	return src + gSt(cstArr) + gSt(stArr) + gSt(mstArr,true) + ext;
}

function applySts(src,s,on) {
	while (s && s != "") {
		var n = s.lastIndexOf("_")
		src = applySt(src,s.substr(n + 1,s.length),on);
		s = s.substr(0,n);
	}
	return src;
}

function applyAllSts(s,on,off) {
	return applySts(applySts(s,off,false),on,true);
}

function applyAllStsN(s,on,off) {
	return applySts(applySts(s,sStMask( off ),false),sStMask( on ),true);
}

//:sBGSt(o,on,off) - set background image state (o) source to DOWN, OVER...
//		on,off = DOWN, OVER, ON, ANIM...
//
function sBGSt(o,on,off) {
	if (o && o.style && o.style.backgroundImage && o.style.backgroundImage != "")
		o.style.backgroundImage = applyAllSts(o.style.backgroundImage,on,off);
}

//:sBGStN(o,onN,offN) - set image state (o) source to DOWN, OVER...
//		on,off = mask of suffix IDs...
//
function sBGStN(o,on,off) {
	sBGSt(o,sStMask( on ),sStMask( off ))
}

//:sImgSt(o,on,off) - set image state (o) source to DOWN, OVER...
//		on,off = DOWN, OVER, ON, ANIM...
//
function sImgSt(o,on,off) {
	if (o && o.src && o.src != "")
		o.src = applyAllSts(o.src.toString(),on,off);
}

//:sImgStN(o,onN,offN) - set image state (o) source to DOWN, OVER...
//		on,off = mask of suffix IDs...
//
function sImgStN(o,on,off) {
	var onS = sStMask( on );
	var offS = sStMask( off );
	sImgSt(o,onS,offS)
}

function sStMask(i) {
	var s = "";
	if ( i & 0x001 ) // OVER
		s += "_OVER";
	if ( i & 0x002 ) // DOWN
		s += "_DOWN";
	if ( i & 0x004 ) // ON
		s += "_ON";
	if ( i & 0x008 ) // ANIM
		s += "_ANIM";
	if ( s.charAt( 0 ) == "_" )
		s = s.slice( 1 );
	return s;
}

function sAnim(o,secs) {
	if ((!lockAnim || !secs) && o && o.src != "") {
		if (secs) {
			lockAnim = true;
			setTimeout("lockAnim = false;",secs * 1000);
		}
		var src = o.src.toString();
		if (src.lastIndexOf("_ANIM") != -1)
			sImgSt(o,"","ANIM");
		else
			sImgSt(o,"ANIM");
	}		
}

function smover() { sBGStN( this, 0x001, 0 ); }
function smout() { sBGStN( this, 0, 0x001 ); }
function smdown() { sBGStN( this, 0x002, 0 ); }
function smup() { sBGStN( this, 0, 0x002 ); }
function cmover() { if ( this ) this.className = applyAllStsN(this.className,0x001,0); }
function cmout() { if ( this ) this.className = applyAllStsN(this.className,0,0x001); }
