var barMap = new Class({
	initialize: function(el,data,datafield){
		_this = this;
		_this.el = el;
		_this.data = data;
		_this.datafield = datafield; // what datafield to view bars for
		_this.map = new GMap2(el);
		_this.map.setMapType(G_PHYSICAL_MAP);
		_this.center = _this.getCenter(_this.data.points);
		_this.map.setCenter(new GLatLng(_this.center.lat, _this.center.lng), 11);
		//_this.map.addControl(new GMapTypeControl(1));
		_this.map.addControl(new GSmallMapControl());
		//_this.map.addControl(new GScaleControl(256));
		new GKeyboardHandler(_this.map);
		_this.map.enableContinuousZoom();
		_this.map.enableDoubleClickZoom();
		//_this.map.disableDragging();
		var temp = _this.getMinMax(_this.data.points);
		_this.data.min_value = temp.min;
		_this.data.max_value = temp.max;
		temp = null;
		_this.pointArray = [];
		_this.levels = _this.getLevels();
		_this.levels.each(function(level,i){
			_this.pointArray.push(_this.data.points.filter(function(item,index){
				return (item[_this.datafield] >= level.min && item[_this.datafield] <= level.max);
			}));
		});
		_this.pointArray.each(function(points,i){
			points.each(function(p){
				var toplisthtml = "";
				p.toppliste.each(function(toplist) { 
					toplisthtml += '<dt><a style="text-decoration:underline;" href="details.php?id=' + toplist.id + '">' + toplist.fornavn + ' ' + toplist.mellomnavn + ' ' + toplist.etternavn + '</a></dt><dd>' + _this.addCommas(toplist.topnum) + '</dd>';
				});
				var icon = new GIcon();
				icon.image = '/images/mapicons/'+(i+1)+'.png';
				icon.iconSize = new GSize(12, 45);
				icon.iconAnchor = new GPoint(10, 63);
				icon.infoWindowAnchor = new GPoint(25, 7);
				_this.map.addOverlay(_this.getLabeledmarker(new GLatLng(p.lat, p.lng),icon, p.postnr,p.postnr + " " + p.sted,function(marker) {
					 marker.openInfoWindowHtml("<div class=\"mapbox\" style=\"width:250px;height:260px;\"><h3>"+p.postnr+" "+p.sted+"</h3><p><b>Gjennomsnitts...</b></p><dl><dt>...inntekt</dt><dd>"+_this.addCommas(p.inntekt)+"</dd><dt>...formue</dt><dd>"+_this.addCommas(p.formue)+"</dd><dt>...skatt</dt><dd>"+_this.addCommas(p.skatt)+"</dd></dl><p><b>Topp 5 "+_this.datafield+"</b></p><dl>"+toplisthtml+"</dl></div>");
				}));
			});
		});
		
	},
	
	addCommas: function(nStr){
			nStr += '';
			x = nStr.split('.');
			x1 = x[0];
			x2 = x.length > 1 ? '.' + x[1] : '';
			var rgx = /(\d+)(\d{3})/;
			while (rgx.test(x1)) {
				x1 = x1.replace(rgx, '$1' + ' ' + '$2');
			}
			return x1 + x2;
		},
	
	getMinMax: function(points){
		var sortable = [];
		points.each(function(item,i){
			sortable.push(item[_this.datafield]);
		});
		sortable = sortable.sort(function(a, b){
			return a - b;
		});
		return {
			'max': sortable.getLast(),
			'min': sortable[0]
		};
	},
	
	getCenter: function(points){
		var lng = 0;
		var lat = 0;
		points.each(function(item){
			lng = lng+item.lng;
			lat = lat+item.lat;
		});
		return {
			"lng": lng / points.length,
			"lat": lat / points.length
		};
	},
	
	getLevels: function(){
		var min = _this.data.min_value;
		var max = _this.data.max_value;
		var interval = (max - min) / 10;
		return [
			{"min":min,"max":min+interval},
			{"min":min+interval+1,"max":min+(interval*2)},
			{"min":min+(interval*2)+1,"max":min+(interval*3)},
			{"min":min+(interval*3)+1,"max":min+(interval*4)},
			{"min":min+(interval*4)+1,"max":min+(interval*5)},
			{"min":min+(interval*5)+1,"max":min+(interval*6)},
			{"min":min+(interval*6)+1,"max":min+(interval*7)},
			{"min":min+(interval*7)+1,"max":min+(interval*8)},
			{"min":min+(interval*8)+1,"max":min+(interval*9)},
			{"min":min+(interval*9)+1,"max":max}
		];
	},
	
	getLabeledmarker: function(latlng,icon,label,labelExt,fn) {
		opts = { 
		 "icon": icon,
	     "clickable": true,
	     "title": labelExt,
	     "labelText": label,
		 "labelOffset": new GSize(-17,-17)
		};
		var marker = new LabeledMarker(latlng, opts);
		
		GEvent.addListener(marker, "click", function(){
			fn(marker);
		});
		return marker;
	}
});