
function bv_flip(I,Trg) {
	var To = (Trg) ? Trg :
	         (I.src.indexOf('_off') +1) ? 'on' : 'off';
	if (I[To]) I.src = I[To].src;
}


function bv_preload(I) {
	if (!I.loaded && I.src) {
		var Args = (arguments.length > 1) ? arguments : ["null","on","off"];
		I.loaded = false;
		var Srcs = I.src.match(/^(.*\/)([^\/]+)_(on|off|down)\.(\w{3,4})$/);
		for (var xx=1; xx<Args.length; xx++) {
			I[Args[xx]] = new Image();
			I[Args[xx]].src = Srcs[1] + Srcs[2] +"_"+ Args[xx] +"."+ Srcs[4];
		}
		if (bv_RolloverStickyImgs[Srcs[2]]) {
			I[bv_RolloverStickyImgs[Srcs[2]]["from"]] = I[bv_RolloverStickyImgs[Srcs[2]]["to"]];
			bv_flip(I, "off");
		}
		I.loaded = true;
	}
}


var bv_RolloverStickyImgs = {};
function setRolloverStickyOn() {
	for (var idx=0; idx<arguments.length; idx++)
		bv_RolloverStickyImgs[arguments[idx]] = { "from":"off", "to":"on" };
}
function setRolloverStickyOff() {
	for (var idx=0; idx<arguments.length; idx++)
		bv_RolloverStickyImgs[arguments[idx]] = { "from":"on", "to":"off" };
}


/*~~~~~~~~~~~~~~~~~*/


function bv_prepRollover(I,OffSuf,OnSuf,DownSuf) {
	if (typeof(I) != "object") return;
	var Off = (OffSuf) ? OffSuf : "off";
	var On = (OnSuf) ? OnSuf : "on";
	var Down = (DownSuf) ? DownSuf : false;
	
	if (Down) bv_preload(I,Off,On,Down);
	else bv_preload(I,Off,On);

// store existing event handlers so you don't override them
	I.bv_AfterRolloverMouseover = (I.onmouseover) ? I.onmouseover : function() {};
	I.bv_AfterRolloverMouseout  = (I.onmouseout)  ? I.onmouseout  : function() {};
	I.bv_AfterRolloverMousedown = (I.onmousedown) ? I.onmousedown : function() {};
	I.bv_AfterRolloverMouseup   = (I.onmouseup)   ? I.onmouseup   : function() {};
	
	I.onmouseover = function () { bv_flip(this,On);  this.bv_AfterRolloverMouseover(); };
	I.onmouseout  = function () { bv_flip(this,Off); this.bv_AfterRolloverMouseout();  };
	if (Down) {
		I.onmousedown = function () { bv_flip(this,Down); this.bv_AfterRolloverMousedown(); };
		I.onmouseup   = function () { bv_flip(this,On);   this.bv_AfterRolloverMouseup();   };
	}
	
}


bv_enableRollover = function() {
	var Imgs = document.getElementsByTagName('img');
	for (var xx=0; xx<Imgs.length; xx++) {
		if ( // if it has a className that starts with bvEnable and has ":roll-" in it:
			Imgs[xx].className &&
			Imgs[xx].className.indexOf('bvEnable') == 0 &&
			/:roll-/.test(Imgs[xx].className)
		) { // then enable the rollover for that image
			if (/:roll-all/.test(Imgs[xx].className))
				bv_prepRollover(Imgs[xx],"off","on","down");
			else
				bv_prepRollover(Imgs[xx],"off","on");
		}
	}
}


if (!window.ToLoad) window.ToLoad = new Array();

window.ToLoad[window.ToLoad.length] = bv_enableRollover;
window.onload = function() {
	for (var xx = window.ToLoad.length -1; xx >= 0; xx--) {
		window.ToLoad[xx]();
	}
}


