var googleMap = Class.create(
{
	
	addressesOnMap: '',
	initialize: function(obj)
	{
		var classRoot = this;
		var root = window;
		this.obj = obj;
		//Sjekker på om browsern støtter google maps
		if (root.GBrowserIsCompatible()) {
			//Lager map obj
			var map = new GMap2($(classRoot.obj.map),{
				size: new GSize(classRoot.obj.width,classRoot.obj.height),
				matTypes: [G_HYBRID_MAP,G_NORMAL_MAP,G_SATELLITE_MAP]
			});
			//map.setMapType(G_HYBRID_MAP);
			map.enableScrollWheelZoom();
			//Sjekker på om det eksisterer adresser.
			if(classRoot.obj.address != ''){
				if(classRoot.obj.address[0][0] == 'default')//overstyring for å vise norge på kart.
				{
					classRoot.setDefaultAddress(classRoot,map);
				}
				else
				{
					if(classRoot.obj.singelAddress){
						classRoot.setLocationSingelAddress(classRoot,map);
					}else{
						classRoot.setLocationMultipleAddresses(classRoot,map);
					}
					//Sjekker om det skal være controllers på kartet
					if(classRoot.obj.controls){
						classRoot.addControls(map);
					}
				}
			}
		}
	},
	setDefaultAddress: function(classRoot,map)
	{
		var address = classRoot.obj.address;
  		var bounds = new GLatLngBounds();
  		var addressLength = classRoot.obj.address.length;
  		
  		classRoot.obj.address.each(function(adr,i){
			var point = new GLatLng(classRoot.obj.address[i][2],classRoot.obj.address[i][1]);
			map.setCenter(point, 4);
			bounds.extend(point);
		});
	},
	setLocationMultipleAddresses: function(classRoot,map){
  		var address = classRoot.obj.address;
  		var bounds = new GLatLngBounds();
  		var addressLength = classRoot.obj.address.length;
  		
  		classRoot.obj.address.each(function(adr,i){
			var point = new GLatLng(classRoot.obj.address[i][2],classRoot.obj.address[i][1]);
			if(i == 0){
				map.setCenter(point, classRoot.obj.zoomLvl);
				//map.setCenter(point, 4);
			}
			var marker = new GMarker(point);
			GEvent.addListener(marker, 'click', function() {
				map.setCenter(point, classRoot.obj.zoomLvl);
			});
			map.addOverlay(marker);
			bounds.extend(point);
			
			if(classRoot.obj.centerPosition != ''){
				if(i == (addressLength-1)){
					var centerPoint = new GLatLng(classRoot.obj.centerPosition[1],classRoot.obj.centerPosition[0]);
					map.setCenter(centerPoint,classRoot.obj.zoomLvl);
				}
			}else{
				if(classRoot.obj.zoomAuto == 'auto'){
					if(i == (addressLength-1)){
						map.setZoom(map.getBoundsZoomLevel(bounds));  
						map.setCenter(bounds.getCenter());
					}
				}
			}
		});
	},
	setLocationSingelAddress: function(classRoot,map){
		var geocoder = new GClientGeocoder();
  		var bounds = new GLatLngBounds();

  		if (geocoder)
		{
			geocoder.getLatLng(
				classRoot.obj.address,
				function(point)
				{
					if (point){

						if(classRoot.obj.zoomAuto == 'auto'){
							bounds.extend(point);
							map.setZoom(map.getBoundsZoomLevel(bounds));  
            				map.setCenter(bounds.getCenter());
						}else{
							map.setCenter(point, classRoot.obj.zoomLvl);
						}
						
						var marker = new GMarker(point);
						map.addOverlay(marker);
					}
			});
		}
	},
	
	addControls: function(map){

		map.addControl(new GSmallMapControl());
		var mapControl = new GMapTypeControl();
		map.addControl(mapControl);
	}
});

