var map = new Object();
var setup = new Object();
var bounds = new Object();
var xml = new Object();
var points = new Array();
var markers = new Array();
var locations = new Array();
var users = new Array();
var birds = new Array();
var observations = new Array();
var reports = new Array();
var customIcons = new Object();
var geocoder = new google.maps.Geocoder();
var infoWindow = new google.maps.InfoWindow;

setup = {
	table: '',
	table_id: 0,
	mode: '',
	maptype: 'roadmap',
	center: new google.maps.LatLng(60,11.081759),
	zoom: 8,
	location: 0
}

locations[0] = {
	id: 0,
	name: 'Udefinert'
};

customIcons = {
  normal: {
    icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_brown.png',
      new google.maps.Size(12, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    shadow: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_shadow.png',
      new google.maps.Size(22, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    explain: 'http://labs.google.com/ridefinder/images/mm_20_brown.png|Ikke rapporteringspliktig art'
  },
  lrsk_r: {
    icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_green.png',
      new google.maps.Size(12, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    shadow: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_shadow.png',
      new google.maps.Size(22, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    explain: 'http://labs.google.com/ridefinder/images/mm_20_green.png|Rapporteringspliktig art'
  },
  lrsk_x: {
    icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_red.png',
      new google.maps.Size(12, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    shadow: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_shadow.png',
      new google.maps.Size(22, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    explain: 'http://labs.google.com/ridefinder/images/mm_20_red.png|Rapporteringspliktig art med krav til beskrivelse'
  },
  zero: {
    icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_gray.png',
      new google.maps.Size(12, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    shadow: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_shadow.png',
      new google.maps.Size(22, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    explain: 'http://labs.google.com/ridefinder/images/mm_20_gray.png|Nullobservasjoner'
  },
  pointless: { 
    icon: new google.maps.MarkerImage('http://www.google.com/mapfiles/markerU.png',
      new google.maps.Size(20, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(10, 34)),
    shadow: new google.maps.MarkerImage('http://www.google.com/mapfiles/shadow50.png',
      new google.maps.Size(37, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(10, 34)),
    explain: 'http://www.google.com/mapfiles/markerU.png|Umarkerte observasjoner'
  },
  location: { 
    icon: new google.maps.MarkerImage('http://www.google.com/mapfiles/arrow.png',
      new google.maps.Size(39, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(11, 34)),
    shadow: new google.maps.MarkerImage('http://www.google.com/mapfiles/arrowshadow.png',
      new google.maps.Size(39, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(11, 34)),
    explain: 'http://www.google.com/mapfiles/arrow.png|Lokalitet'
  },
  report: { 
    icon: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_red.png',
      new google.maps.Size(12, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    shadow: new google.maps.MarkerImage('http://labs.google.com/ridefinder/images/mm_20_shadow.png',
      new google.maps.Size(22, 20),
      new google.maps.Point(0,0),
      new google.maps.Point(6, 20)),
    explain: 'http://labs.google.com/ridefinder/images/mm_20_red.png|Rapport'
  },
  centerfix: { 
    icon: new google.maps.MarkerImage('http://www.google.com/mapfiles/arrow.png',
      new google.maps.Size(39, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(11, 34)),
    shadow: new google.maps.MarkerImage('http://www.google.com/mapfiles/arrowshadow.png',
      new google.maps.Size(39, 34),
      new google.maps.Point(0,0),
      new google.maps.Point(11, 34)),
    explain: 'http://www.google.com/mapfiles/arrow.png|Lokalitet'
  }
};

function tagged_marker(id,tag,title,draggable,type,point){
	if (markers[id]) return;
	var marker = new google.maps.Marker({
		map: map,
		position: (point) ? point : setup.center,
		draggable: (draggable) ? true : false,
		icon: new google.maps.MarkerImage('http://images.nofoa.no/marker_' + tag + '.png',
    		  new google.maps.Size(30,30),
      		  new google.maps.Point(0,0),
      		  new google.maps.Point(15,30)
		),
  		title: (title) ? title : '',
		id: id}
	);
	if (draggable)
		add_events(marker);
	markers[id] = marker;
	return marker;		
}

function add_events(marker){
	google.maps.event.addListener(marker, 'dragstart', function() {
		// ting som skjer når man begynner å flytte en markør
	});
	google.maps.event.addListener(marker, 'drag', function() {
		// ting som skjer mens man flytter en markør
		//update_marker_position(marker.getPosition());
	});
	google.maps.event.addListener(marker, 'dragend', function() {
		// ting som skjer når man har flyttet en markør
		save_marker_position(marker);		
	}); 	
}

function count(obj){
	var c = 0;
	obj = getIT(obj);
	for (var i in obj){
		c ++;
	}
	return c;
}

function findUserLocation()
{
    if (navigator.geolocation){
        navigator.geolocation.getCurrentPosition(foundUserLocation, noLocationFound);
    }
}

function foundUserLocation(position)
{
	var lat = position.latitude;
	var lng = position.longitude;
	if (isNumber(lat) && isNumber(lng))
		alert('Din posisjon: ' + lat + 'Ø, ' + lng + ' N');
	else
		noLocationFound()
}

function noLocationFound()
{
    alert('Finner ikke din posisjon');
}

function set_context(context){
	if (context){
		table_data = context.split('-');
		setup.table = table_data[0];
		setup.table_id = table_data[1];
		setup.mode = table_data[2];
	}
}

function observation_container(pointRef){
	this.pointRef = pointRef;
}

function data_container(type, xmlData){
	switch (type){
		case 'location':
			this.id = parseInt(xmlData.getAttribute("id"));
			this.name = xmlData.getAttribute("name");
			this.county = xmlData.getAttribute("county");
			this.biotope = xmlData.getAttribute("biotope");
			this.utm = xmlData.getAttribute("utm");
			this.lat = parseFloat(xmlData.getAttribute("lat"));
			this.lng = parseFloat(xmlData.getAttribute("lng"));
			this.obsCount = parseInt(xmlData.getAttribute("obs_count"));
			this.pointRef = 0;
			break;
		case 'report':
			this.id = parseInt(xmlData.getAttribute("id"));
			this.date = xmlData.getAttribute("date");
			this.location_id = parseInt(xmlData.getAttribute("location_id"));
			this.loc_name = parseInt(xmlData.getAttribute("loc_name"));
			this.county = xmlData.getAttribute("county");
			this.user_id = xmlData.getAttribute("user_id");
			this.utm = xmlData.getAttribute("utm");
			this.lat = parseFloat(xmlData.getAttribute("lat"));
			this.lng = parseFloat(xmlData.getAttribute("lng"));
			this.obsCount = parseInt(xmlData.getAttribute("obs_count"));
			this.pointRef = 0;
			break;
		case 'bird':
			this.id = xmlData.getAttribute("id");
			this.name = xmlData.getAttribute("name");
			this.lrsk = xmlData.getAttribute("lrsk");
			break;
		case 'user':
			this.id = xmlData.getAttribute("id");
			this.name = xmlData.getAttribute("name");
			break;
	}
}

function geocode_position(pos) {
	geocoder.geocode({
		latLng: pos
	}, function(responses) {
		if (responses && responses.length > 0) {
			return responses[0].formatted_address;
		} else {
			return 'Ingen stedsinformasjon tilgjeneglig';
		}
	});
}
   	
function StatkartMapType(name, layer) {
  this.layer = layer
  this.name = name
  this.alt = name
  this.tileSize = new google.maps.Size(256,256);
  this.maxZoom = 19;
  this.getTile = function(coord, zoom, ownerDocument) {
  	zoom = zoom<20 ? zoom : 10;
    var div = ownerDocument.createElement('DIV');
    div.style.width = this.tileSize.width + 'px';
    div.style.height = this.tileSize.height + 'px';
    div.style.backgroundImage = "url(http://opencache.statkart.no/gatekeeper/gk/gk.open_gmaps?layers=" + this.layer + "&zoom=" + zoom + "&x=" + coord.x + "&y=" + coord.y + ")";
    return div;
  };
}

function load_map(context) {
	set_context(context);
	request = new Ajax.Request('/Sider/Lokaliteter/XMLmapfeed3.php',
		{
			method: 'get',
			parameters: 'context=' + context,
			requestHeaders: {Accept: 'text/xml'},
			onComplete: function (transport){
			    xml = parseXml(transport.responseText);			    
			    get_setup();			    
				map = new google.maps.Map(document.getElementById('map_canvas'), {
				  backgroundColor: '#d3d3d3',
				  zoom: setup.zoom,
				  center: setup.center,
				  scaleControl: true,
				  mapTypeControl: true,
				  mapTypeControlOptions: {
				    mapTypeIds: ['topo2', 'topo2graatone', 'toporaster2', 'veikart', 'sjo_hovedkart2', 'satellite', 'hybrid'],
				    style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
				  },
				  navigationControl: true,
				  navigationControlOptions: {
					style: (setup.mode == 'plot') ? google.maps.NavigationControlStyle.SMALL : google.maps.NavigationControlStyle.ZOOM_PAN
				  }
				});
				
				var styledMapOptions = {
					map: map,
					name: "Vei"
				}				

				var GMStyles = [
				{
				  featureType: "landscape",
				  elementType: "geometry",
				  stylers: [
				  	{ hue: "#00f333" },
				    { saturation: 40 },
				    { lightness: 40 }
				  ]
				},
				{
				  featureType: "water",
				  elementType: "geometry",
				  stylers: [
				  	{ hue: "#ccf3f3" },
				    { saturation: 40 },
				    { lightness: 40 }
				  ]
				},{
				  featureType: "administrative.locality",
				  elementType: "labels",
				  stylers: [
				    { hue: "#0022ff" },
				    { saturation: 50 },
				    { lightness: -10 },
				    { gamma: 2.50 }
				  ]
				},{
				  featureType: "transit.line",
				  elementType: "geometry",
				  stylers: [
				    { hue: "#ff0000" },
				    { visibility: "on" },
				    { lightness: -70 }
				  ]
				}
				];				
				var GMapType = new google.maps.StyledMapType(GMStyles, styledMapOptions);  
				map.mapTypes.set('topo2',new StatkartMapType("Topografi", "topo2"));
				map.mapTypes.set('topo2graatone',new StatkartMapType("Gråtone", "topo2graatone"));
				map.mapTypes.set('toporaster2',new StatkartMapType("Land", "toporaster2"));
				map.mapTypes.set('veikart', GMapType);
				map.mapTypes.set('sjo_hovedkart2',new StatkartMapType("Sjø", "sjo_hovedkart2"));
				map.setMapTypeId(setup.maptype);
				bounds = new google.maps.LatLngBounds();
			    get_database();
				setup_markers();
				Effect.Appear('kartinstuks');
			} 
		}
	)
}

function get_setup(){
    var data = xml.documentElement.getElementsByTagName("config");
	for (var i = 0; i < data.length; i++) {
		var type = data[i].getAttribute("type");
		switch(type) {
			case 'table':
				setup.table = data[i].getAttribute("value");
				break;
			case 'table_id':
				setup.table_id = parseInt(data[i].getAttribute("value"));
				break;
			case 'maptype':
				setup.maptype = data[i].getAttribute("value");
				break;
			case 'mode':
				setup.mode = data[i].getAttribute("value");
				break;
			case 'location':
				setup.location = parseInt(data[i].getAttribute("value"));
				break;
			case 'center':
				var lat = parseFloat(data[i].getAttribute("lat"));
				var lng = parseFloat(data[i].getAttribute("lng"));
				setup.center = new google.maps.LatLng(lat,lng);
				break;
			case 'zoom':
				setup.zoom = parseInt(data[i].getAttribute("value"));
				break;
			default:
		}		
   	}
}

function get_database(){
	var tables = ['location','report','bird','user'];
    for (table = 0; table < tables.length; table++) {
		var data = xml.documentElement.getElementsByTagName(tables[table]);
	    for (var i = 0; i < data.length; i++) {
			var id = parseInt(data[i].getAttribute("id"));
			var record = new data_container(tables[table],data[i]);
			switch(tables[table]) {
				case 'location':
					locations[id] = record;
					break;
				case 'report':
					reports[id] = record;
					break;
				case 'bird':
					birds[id] = record;
					break;
				case 'user':
					users[id] = record;
					break;
				default:
			}
	    }
	}
}

function setup_markers(){
	var explain = '';
	var data = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0, len = data.length; i < len; i++) {
		var type = data[i].getAttribute("type");
		var draggable = parseInt(data[i].getAttribute("draggable"));
		var icon = customIcons[type] || customIcons['normal'];
		if (customIcons[type].explain){
			ep = icon.explain.split('|');
			explain += '<tr><td align="center"><img src="' + ep[0] + '" />&nbsp;</td><td>' + ep[1] + '</td></tr>';
			customIcons[type].explain = '';
		}
		switch(type) {
			case 'report':
				var utm = data[i].getAttribute("utm");
				var point = new google.maps.LatLng(
					parseFloat(data[i].getAttribute("lat")),
					parseFloat(data[i].getAttribute("lng"))
				);
				bounds.extend(point);
				var report_id = parseInt(data[i].getAttribute("report_id"));
				var location_id = parseInt(data[i].getAttribute("location_id"));
				var loc_name = data[i].getAttribute("loc_name");
				var county = data[i].getAttribute("county");
				var user_id = parseInt(data[i].getAttribute("user_id"));
				var date = data[i].getAttribute("date");
				var count = parseInt(data[i].getAttribute("count"));
				var html = '<div class="body" style="padding:3px"><div style="margin-bottom:5px; font-weight:bold"><a title="Se rapporten >>" href="/observasjoner/' + report_id + '">Rapport #' + report_id + '</a></div>Tid: ' + date + '<br />Rapport&oslash;r: ' + users[user_id].name + '<div class="kart_zoom">Zoom til <a title="Zoom inn på lokaliteten" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + i + ',14,\'topo2\'); return false;">lokalitet</a> | <a title="Zoom inn på lokaliteten så eventuelle bygninger vises" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + i + ',16,\'topo2\'); return false;">bygninger</a> | <a title="Zoom ut til opprinnelig kartutsnitt" href="#listetoppen" onclick="focus_reset(); return false;">tilbake</a></div></div>';
				var title = loc_name + '; ' + count + ', ' + date;
				var marker = new google.maps.Marker({
					map: map,
					position: point,
					draggable: draggable ? true : false,
					icon: icon.icon,
					shadow: icon.shadow,
					title: title,
					zIndex: parseInt(point.lat()-1)
				});	
				break;
			case 'location':
			case 'centerfix':
				var location_id = parseInt(data[i].getAttribute("location_id"));
				locations[location_id].pointRef = i;
				var utm = locations[location_id].utm;
				var point = new google.maps.LatLng(
					locations[location_id].lat,
					locations[location_id].lng
				);
				var title = locations[location_id].name;
				var html = '<div class="body" style="padding:3px"><div style="margin-bottom:5px; font-weight:bold">#' +location_id + ' ' + locations[location_id].name + '</a></div>Kommune: ' + locations[location_id].county + '<br />Biotop: ' + locations[location_id].biotope + '<br />UTM: ' + locations[location_id].utm + '<div class="kart_zoom">Zoom til <a title="Zoom inn på lokaliteten" href="#listetoppen" onclick="focus_on(\'marker\',' + i + ',14,\'topo2\'); return false;">lokalitet</a> | <a title="Zoom inn så eventuelle bygninger vises" href="#listetoppen" onclick="focus_on(\'marker\',' + i + ',16,\'topo2\'); return false;">bygninger</a> | <a title="Vis opprinnelig kartutsnitt" href="#listetoppen" onclick="focus_reset(); return false;">tilbake</a></div></div>';
				var marker = new google.maps.Marker({
					map: map,
					position: point,
					draggable: draggable ? true : false,
					icon: icon.icon,
					shadow: icon.shadow,
					title: title,
					zIndex: parseInt(point.lat()-1)
				});	
				break;
			case 'pointless':
				var point = (point) ? point : map.getCenter();
				bounds.extend(point);
				var report_id = parseInt(data[i].getAttribute("report_id"));
				reports[report_id].pointRef = i;
				var location_id = reports[report_id].location_id;
				var loc_name = (location_id) ? locations[location_id].name: reports[report_id].loc_name;
				var county = (location_id) ? locations[location_id].county : reports[report_id].county;
				var utm = (location_id) ? locations[location_id].utm: reports[report_id].utm;
				var user_id = reports[report_id].user_id;
				var date = reports[report_id].date;
				var count = parseInt(data[i].getAttribute("count"));
				var html = '<div class="body" style="padding:3px"><div style="margin-bottom:5px; font-weight:bold"><a title="Se rapporten >>" href="/observasjoner/' + report_id + '">Rapport #' + report_id + '</a></div>Umarkerte observasjoner<br />Antall: ' + count + "<br />Kommune: " + county + "<br />Sted: " + loc_name + '<br />UTM: ' + utm + '<br />Tid: ' + date + '<br />Rapport&oslash;r: ' + users[user_id].name + '<div class="kart_zoom">Zoom til <a title="Zoom inn på lokaliteten" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + report_id + ',14,\'topo2\'); return false;">lokalitet</a> | <a title="Zoom inn på lokaliteten så eventuelle bygninger vises" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + report_id + ',16,\'topo2\'); return false;">bygninger</a> | <a title="Zoom ut til opprinnelig kartutsnitt" href="#listetoppen" onclick="focus_reset(); return false;">tilbake</a></div></div>';
				var title = 'Umarkerte observasjoner; ' + count + ', ' + date;
				var marker = new google.maps.Marker({
					map: map,
					position: point,
					draggable: draggable ? true : false,
					icon: icon.icon,
					shadow: icon.shadow,
					title: title,
					zIndex: parseInt(point.lat()-1)
				});
				break;
			default:
				var utm = data[i].getAttribute("utm");
				var point = new google.maps.LatLng(
					parseFloat(data[i].getAttribute("lat")),
					parseFloat(data[i].getAttribute("lng"))
				);
				bounds.extend(point);
				var id = parseInt(data[i].getAttribute("id"));
				var report_id = parseInt(data[i].getAttribute("report_id"));
				var obs_id = parseInt(data[i].getAttribute("obs_id"));
				var location_id = parseInt(data[i].getAttribute("location_id"));
				var loc_name = data[i].getAttribute("loc_name");
				var county = data[i].getAttribute("county");
				var user_id = parseInt(data[i].getAttribute("user_id"));
				var bird_id = parseInt(data[i].getAttribute("bird_id"));
				var date = data[i].getAttribute("date");
				var count = parseInt(data[i].getAttribute("count"));
				var html = '<div class="body" style="padding:3px"><div style="margin-bottom:5px; font-weight:bold"><a title="Se rapporten >>" href="/observasjoner/' + report_id + '">Rapport #' + report_id + '</a></div>Art: #' + bird_id + ' ' + birds[bird_id].name + "<br />Antall: " + count + "<br />Kommune: " + county + "<br />Sted: " + loc_name + '<br />UTM: ' + utm + '<br />Tid: ' + date + '<br />Rapport&oslash;r: ' + users[user_id].name + '<div class="kart_zoom">Zoom til <a title="Zoom inn på lokaliteten" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + obs_id + ',14,\'topo2\'); return false;">lokalitet</a> | <a title="Zoom inn på lokaliteten så eventuelle bygninger vises" href="#listetoppen" onclick="focus_on(\'' + type + '\',' + obs_id + ',16,\'topo2\'); return false;">bygninger</a> | <a title="Zoom ut til opprinnelig kartutsnitt" href="#listetoppen" onclick="focus_reset(); return false;">tilbake</a></div></div>';
				var title = birds[bird_id].name + '; ' + count + ', ' + date;
				observations[obs_id] = new observation_container(i);
				
				var marker = tagged_marker(id,bird_id,title,draggable,type,point);
//				var marker = new google.maps.Marker({
//					map: map,
//					position: point,
//					draggable: draggable ? true : false,
//					icon: icon.icon,
//					shadow: icon.shadow,
//					title: title,
//					id: id
//				});
		}
		points[i] = point; 
		markers[i] = marker;
		if (setup.mode != 'plot')
			bindInfoWindow(markers[i], map, html);
		if (type == 'centerfix'){
			google.maps.event.addListener(map, 'maptypeid_changed', function() {
				// ting som skjer mens man endrer kartutsnittet
				if (map.getMapTypeId() != setup.maptype){
				    setup.maptype = map.getMapTypeId();
					save_setup();
				}
			});
			google.maps.event.addListener(map, 'drag', function() {
				// ting som skjer mens man endrer kartutsnittet
				latLng = map.getCenter();
				points[0] = latLng;
				markers[0].setPosition(latLng);			
			});
			google.maps.event.addListener(map, 'idle', function() {
				// ting som skjer når man har endret kartutsnittet
				latLng = map.getCenter();
				points[0] = latLng;
				markers[0].setPosition(latLng);	
			    setup.zoom = map.getZoom(); 
			    setup.center = latLng;
				save_setup();	
			});			
		}
//		if (draggable){	
//			add_events(marker);
//		}
    }
    if (!bounds.isEmpty()){
    	map.setCenter(bounds.getCenter());
//		zoomChangeBoundsListener = 
//		google.maps.event.addListener(map,'bounds_changed',function (event) { 
//			if (this.getZoom() > setup.zoom)
//				this.setZoom(setup.zoom);
//			setup.zoom = this.getZoom();
//		    setup.center = this.getCenter();
//		    setup.maptype = this.getMapTypeId();
//			google.maps.event.removeListener(zoomChangeBoundsListener);
//		});
	}
	  //	map.fitBounds(bounds);
	if (x = document.getElementById('explain_markers')){
		if (explain){
			explain = '<p class="body_fet" style="margin:1.5em 0 0.5em 0">Markørforklaring</p><table class="body" border="0">' + explain + '</table>';
		}
		explain += '<p><a class="knapp_green_short" title="Zoom ut til opprinnelig kartutsnitt" href="#" onclick="focus_reset(); return false;"><< Tilbakestill kartet</a></p>';
		x.innerHTML = explain;
	}
}

function bindInfoWindow(marker, map, html) {
  google.maps.event.addListener(marker, 'click', function() {
    infoWindow.setContent(html);
    infoWindow.open(map, marker);
  });
}

function save_setup(){
	data = setup;
	data.lat = data.center.lat();
	data.lng = data.center.lng();
	data = Object.toJSON(data);
	request = new Ajax.Request('/Sider/Lokaliteter/JSONmapfeed.php',
		{
			parameters: 'data=' + data,
			//requestHeaders: {Accept: 'application/json'},
			onComplete: function (transport){
			    //alert(transport.responseText);
			    //var json = transport.responseText.evalJSON(true);
			}
		}
	)
}

function save_marker_position(marker) {
	this.data = {
		mode: 'bird_position',
		id: marker.id,
		lat: marker.position.lat(),
		lng: marker.position.lng()
	}
	request = new Ajax.Request('/Sider/Lokaliteter/JSONmapfeed.php',
		{
			parameters: 'data=' + Object.toJSON(this.data),
			//requestHeaders: {Accept: 'application/json'},
			onComplete: function (transport){
			    //alert(transport.responseText);
			    //var json = transport.responseText.evalJSON(true);
			}
		}
	)
}

function update_marker_position(latLng) {
  pos = [
    latLng.lat(),
    latLng.lng()
  ].join(';');
}

function focus_on(type,ref,zoom,maptype){
	switch (type) {
		case 'marker':		
			point = ref;
			break;
		case 'location':		
			point = locations[ref].pointRef;
			break;
		case 'pointless':		
			point = reports[ref].pointRef;
			break;
		default: 
			point = observations[ref].pointRef;
	}
	map.setCenter(points[point]);
	if (zoom) { map.setZoom(zoom); }
	if (maptype && map.getMapTypeId() == setup.maptype) { map.setMapTypeId(maptype); }
	google.maps.event.trigger(markers[point],'click');
}

function focus_reset(){
	map.setCenter(setup.center);
	map.setZoom(setup.zoom);
	map.setMapTypeId(setup.maptype);
	infoWindow.close();
}

function parseXml(str) {
  if (window.ActiveXObject) {
    var doc = new ActiveXObject('Microsoft.XMLDOM');
    doc.loadXML(str);
    return doc;
  } else if (window.DOMParser) {
    return (new DOMParser).parseFromString(str, 'text/xml');
  }
}

function doNothing() {}

// metoder for tegning av bokser

function BoundsBox(map, bounds, opt_options) {
  this.bounds_ = bounds;
  this.setMap(map);
  this.opts = opt_options || {};
  if(this.opts.fit) map.fitBounds(bounds);
  this.map = map;
}

BoundsBox.prototype = new google.maps.OverlayView();

BoundsBox.prototype.draw = function() {
  var me = this;
  var div = this.div_;
  if (!div) {
    div = this.div_ = document.createElement('div');
    div.style.position = "absolute";
    div.className = this.opts.cssClass || 'bounds-box';
    div.innerHTML = this.opts.html || "";
    google.maps.event.addDomListener(div, "click", function(event) {
      google.maps.event.trigger(me, "click", event);
    });
    var panes = this.getPanes();
    panes.overlayLayer.appendChild(div);
  }

  var pixSW = this.getProjection().fromLatLngToDivPixel(this.bounds_.getSouthWest());
  var pixNE = this.getProjection().fromLatLngToDivPixel(this.bounds_.getNorthEast());
  this.divSize = new google.maps.Size((pixNE.x-pixSW.x), (pixSW.y-pixNE.y));
  div.style.left = pixSW.x + 'px';
  div.style.top = pixNE.y + 'px';
  div.style.width = this.divSize.width + "px";
  div.style.height = this.divSize.height + "px";
}

BoundsBox.prototype.remove = function() {
  if (this.div_) {
    this.div_.parentNode.removeChild(this.div_);
    this.div_ = null;
  }
}

BoundsBox.prototype.getPosition = function() {
  return this.bounds_.getCenter();
}
BoundsBox.prototype.setClassName = function(cssClass) {
  this.div_.className = cssClass;
}
BoundsBox.prototype.getClassName = function() {
  return this.div_.className;
}
BoundsBox.prototype.setContent = function(html) {
  this.div_.innerHTML = html;
}
BoundsBox.prototype.getContent = function() {
  return this.div_.innerHTML;
}
BoundsBox.prototype.getDiv = function() {
  return this.div_;
}
BoundsBox.prototype.getSize = function() {
  return this.divSize;
}
