function preg_match(expression,string) {
	var regex = new RegExp(expression);
	return regex.test(string);
	}

function toggle(id) {
	with(document.getElementById(id).style)
		display = (display=='none') ? 'inline':'none';
	}

function ajax(url,target) {
	var done		= 4;
	var ok			= 200;
	var method		= 'GET';
	var target_type	= typeof target;
	var request		= new XMLHttpRequest();

	request.open(method, url, true);
	request.onreadystatechange = function() {
		if(request.readyState == done && request.status == ok) {
			switch(target_type) {
				case('string'):
					document.getElementById(target).innerHTML = request.responseText;
					break;
				case('function'):
					target(request.responseText);
					break;
				default:
					alert("I don't know what to do with target type '"+target_type+"'...");
				}
			}
		}
	request.send(null);
	}

function money(amount) {
	return commas(significantdigits(amount,2));
	}

function commas(number) {
	// Don't look at me, I'm hideous!
	var width		= 3;
	var string		= number.toString();
	var dot			= string.indexOf('.');
	var units		= string;
	var decimals	= '';
	var final		= '';
	if(dot !== false) {
		decimals	= string.substr(dot+1);
		units		= string.substr(0,dot);
		}
	var chunks = Math.ceil(units.length/width);
	for(var i = 1; i<chunks; i++) {
		final = units.substr(-(i*width),width) + ((final)?',' + final:'');
		}
	var remaining = units.length - (width * (chunks - 1));
	if(remaining) final = units.substr(0,remaining) + ((final)?',' + final:'');
	if(decimals) final += '.' + decimals;

	return final;
	}
 
function significantdigits(value,precision) {
	value			= parseFloat(value);
	var	multiplier	= Math.pow(10,precision);
	var left		= parseInt(value/1);
	var pre			= Math.round((value*multiplier)%multiplier);
	var right		= parseInt(pre);

	// Gross...
	var padding = '';
	for(var n=1; n<precision; n++)
		if(right < Math.pow(10,n)) padding += '0';
	right = padding + right;
	// .

	return left + '.' + right;
	}

