function createRegions(areas) {
	var regions = [
// name             lat         lng      min_lat min_lng max_lat max_lng
['Scotland',		56.666988, -3.80972, 54.837, -7.472, 60.331, -1.168],
['Northern Ireland',54.612762, -6.37705, 54.155, -7.826, 55.202, -5.519],
['North East',		54.330413, -1.33441, 53.606, -2.459, 55.605, 0.036 ],
['North West',		53.660491, -2.48539, 53.000, -3.592, 54.994, -1.676],
['East Midlands',	52.769390, -0.21695, 51.796, -1.721, 53.708, 1.734 ],
['West Midlands',	52.469019, -2.00539, 51.908, -3.075, 53.115, -0.597],
['Wales',			52.171739, -3.54085, 51.404, -5.063, 53.411, -2.688],
['South West',		50.954554, -2.97102, 49.892, -6.352, 52.061, -1.483],
['South East',		51.442515, -0.30872, 50.604, -1.591, 52.194, 1.431 ],
['Greater London',	51.506124, -0.13060, 51.269, -0.550, 51.765, 0.389 ]];

	var NAME    = 0;
	var LAT     = 1;
	var LNG     = 2;
	var MIN_LAT = 3;
	var MIN_LNG = 4;
	var MAX_LAT = 5;
	var MAX_LNG = 6;

	var labels = [];
	var keyed = {};
	for (var i = 0; i < regions.length; i++) {
		var region  = regions[i][NAME];
		var lat     = regions[i][LAT];
		var lng     = regions[i][LNG];
		var min_lat = regions[i][MIN_LAT];
		var min_lng = regions[i][MIN_LNG];
		var max_lat = regions[i][MAX_LAT];
		var max_lng	= regions[i][MAX_LNG];

		var latlng = new GLatLng(lat, lng);
		var label = new RegionLabel(latlng, region);
		label.setUserData({
			region:  region,
			lat:     lat,
			lng:     lng,
			min_lat: min_lat,
			min_lng: min_lng,
			max_lat: max_lat,
			max_lng: max_lng,
			areas:   []
		});
		labels.push(label);
		keyed[region] = label;
	}

	// load areas into their regions
	for(var i = 0; i < areas.length; i++) {
		var region = keyed[areas[i].getUserData().region];
		if(region)
			region.getUserData().areas.push(areas[i]);
		else
			alert('No: ' + areas[i].getUserData().region);
	}	
	return labels;
}

function RegionLabel(latlng,html) {
	BpLabel.call(this,latlng,html,'regularLabel');
	this._isRegionLabel = true;
}
RegionLabel.prototype = new BpLabel(new GLatLng(0,0),'');

RegionLabel.prototype.initialize = function(map) {
	this._map = map;
	BpLabel.prototype.initialize.apply(this,arguments);

	this.setCursor('pointer');
	this._over  = GEvent.bindDom(this.getEventTarget(),'mouseover',this,this.onOver);
	this._out   = GEvent.bindDom(this.getEventTarget(),'mouseout',this,this.onOut);
	this._click = GEvent.bindDom(this.getEventTarget(),'click',this,this.onClick);
};

RegionLabel.prototype.remove = function() {
	GEvent.removeListener(this._click);
	GEvent.removeListener(this._over);
	GEvent.removeListener(this._out);
	BpLabel.prototype.remove.call(this);
}

RegionLabel.prototype.onClick = function() {
	if (this.isMapped())
		GEvent.trigger(this.getEventTarget(),'mouseout');

	manageCrumbs('region', this);

	var ud = this.getUserData();
	var min_latlng = new GLatLng(ud.min_lat, ud.min_lng);
	var max_latlng = new GLatLng(ud.max_lat, ud.max_lng);
	map.zoomToMarkers(0, [min_latlng, max_latlng]);
};

RegionLabel.prototype.onOver = function() {
	this.setClassName('hoverLabel');
	this.setZIndex(1000000);
};

RegionLabel.prototype.onOut = function() {
	this.setClassName('regularLabel');
	this.setZIndex(GOverlay.getZIndex(this.getPoint().lat()));
};

