
function addUpDown(id, up, down) {
	var img = document.getElementById(id);
	if ( !img ) return;
	img.onmouseover = function() {
		img.src = down;
	}
	img.onmouseout = function() {
		img.src = up;
	}
	/* Preload */
	var imgUp = new Image();
	imgUp.src = up;
	var imgDown = new Image();
	imgDown.src = down;
}

function up(id) {
	document.getElementById(id + 'Img' ).src = 'img/btn-' + id + '-u.gif';
}

function down(id) {
	document.getElementById(id + 'Img' ).src = 'img/btn-' + id + '.gif';
}

/* PLACEMENTS */

var placements = null;
var placementSizes = new Object();

function addPlacement(func) {
	var oldonload = placements;
	if (typeof placements != 'function') {
		placements = func;
	} else {
		placements = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

/* From http://simonwillison.net/2004/May/26/addLoadEvent/ */
function addLoadEvent(func) {
	if ( typeof func  != 'function' ) alert('no function: ' + func);
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

var bgX;
var bgY;
var scale;

function findSize(obj) {
	return [obj.offsetWidth, obj.offsetHeight];
}

function findPos(obj) {
	if (obj.offsetParent) {
		var curleft = 0, curtop = 0;
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return [curleft,curtop];
	}
	return [obj.offsetLeft, obj.offsetTop];
}

var bgImg = null;

function loadBG(src) {
	bgImg = new Image();
	bgImg.onload = function() { onBgLoaded(); };
	bgImg.src = src;
}

var bgPos, bgSize, scale;

function onBgLoaded() {
	
	// get background positioning
	var bgOrigW = bgImg.width;
	var bgElem = document.getElementById('bgImg');
	
	bgPos = findPos(bgElem);
	bgSize = findSize(bgElem);
	scale = bgImg.width / bgSize[0];
	
	if ( placements ) placements();
}

function placeLoaded(obj, sizeObj, x, y, disp) {
	
	var size;
	if ( placementSizes[obj.id] != null ) {
		// have saved this width
		size = placementSizes[obj.id];
	} else {
		size = [sizeObj.width, sizeObj.height];
		placementSizes[obj.id] = size;
	}
	
	/* rescale */
	var nx = x / scale;
	var ny = y / scale;
	/* translate to center */
	nx = bgPos[0] + nx;
	ny = bgPos[1] + ny;
	obj.style.left = nx + "px";
	obj.style.top = ny + "px";
		
	if ( sizeObj == null ) sizeObj = obj;
	if ( size[0] > 1 ) {
		sizeObj.width = size[0] / scale;
		sizeObj.height = size[1] / scale;
	}
	if ( disp )
		obj.style.display = disp;
}

function place(id, x, y, disp) {
	
	var obj = document.getElementById(id);
	
	if ( ! obj.width && ! obj.firstChild ) {
		
		// is image, do deferred load (IE)
		var img = new Image();
		img.onload = function() {
			placementSizes[obj.id] = [img.width, img.height];
			placeLoaded(obj, null, x, y, disp);
		}
		
		img.src = obj.src;
	} else if ( obj.firstChild && obj.firstChild.width ) {
		placementSizes[obj.id] = [obj.firstChild.width, obj.firstChild.height];
		placeLoaded(obj, obj.firstChild, x, y, disp);
	} else {
		// already have a width, or do not resize
		placeLoaded(obj, obj, x, y, disp);
	}
	
}

window.onresize = onBgLoaded;

