var infoWindow;
var minZoomLevel = 8;
var maxZoomLevel = 12;


var strictBounds = new google.maps.LatLngBounds(
	new google.maps.LatLng(58.5630911513, 7.056813), 
	new google.maps.LatLng(60.230933, 9.99957775469)
);



  var maptiler = new google.maps.ImageMapType({
    getTileUrl: function(tile, zoom) {
      if ((zoom < minZoomLevel) || (zoom > maxZoomLevel)) {
          return "http://www.maptiler.org/img/none.png";
      } 
      var ymax = 1 << zoom;
      var y = ymax - tile.y -1;

          return "/extension/visitrauland/design/visitcommon/images/map1/"+zoom+"/"+tile.x+"/"+y+".png";

    },
   tileSize: new google.maps.Size(256, 256),
   isPng: true,
   maxZoom: maxZoomLevel,
   minZoom: minZoomLevel,
   name: "Telemark",
   alt: "Telemark tiles"
  });

var mapTypeIds = [];
//mapTypeIds.push("Telemark");
for(var type in google.maps.MapTypeId) {
	mapTypeIds.push(google.maps.MapTypeId[type]);
}



var GoogleMarkerMap =
{
    map: false,
    mapLanguage: 'no',
    mapLat: 59.358396,
    mapLng: 10.338135,
    
    zoomValue: 8,
    zoomToFitValue: 0.1,
    zoomDivider: 6,
    
    enableScrollwheel: false,
    
    markerGroups: new Array(),
    infoWindows: new Array(),
    
    initialize: function( id )
    {
        GoogleMarkerMap.clearAll();
        GoogleMarkerMap.createMap( id );
    },
    
    createMap: function( id )
    {
        var latlng = new google.maps.LatLng( GoogleMarkerMap.mapLat, GoogleMarkerMap.mapLng );				  
	
        var myOptions =
        {
            zoom: GoogleMarkerMap.zoomValue,
            center: latlng,
            scrollwheel: GoogleMarkerMap.enableScrollwheel,
            scaleControl: true,
            //mapTypeId: 'Telemark',
            //mapTypeControlOptions: { mapTypeIds: mapTypeIds }
	    mapTypeId: google.maps.MapTypeId.ROADMAP,
            mapTypeControlOptions: { mapTypeIds: [] }
        };


        GoogleMarkerMap.mapCanvas = document.getElementById( id );
        GoogleMarkerMap.map = new google.maps.Map( GoogleMarkerMap.mapCanvas, myOptions );


				  //var tilelayer = google.maps.GTileLayer(null, minZoomLevel, maxZoomLevel);
			          //var mercator = new google.maps.GMercatorProjection(mapMaxZoom+1);

			          // IE 7-: support for PNG alpha channel
			          // Unfortunately, the opacity for whole overlay is then not changeable, either or...
			          //tilelayer.isPng = function() { return true;};
			          //tilelayer.getOpacity = function() { return opacity; }

			          //overlay = new google.maps.GTileLayerOverlay( tilelayer );
			          //GoogleMarkerMap.map.addOverlay(overlay);

			          //map.addControl(new GLargeMapControl3D());
			          //map.addControl(new GHierarchicalMapTypeControl());
			          //GoogleMarkerMap.map.addControl(new CTransparencyControl( overlay ));
				  GoogleMarkerMap.map.overlayMapTypes.insertAt(0, maptiler);
				  //GoogleMarkerMap.map.mapTypes.set("Telemark",maptiler);
			          //map.enableContinuousZoom();
			          //map.enableScrollWheelZoom();

			          //map.setMapType(G_HYBRID_MAP);






        google.maps.event.addListener(GoogleMarkerMap.map, "idle", function() {
            var bounds = this.getBounds();

            GoogleMarkerMap.southWestLat = bounds.getSouthWest().lat();
            GoogleMarkerMap.southWestLng = bounds.getSouthWest().lng();
            GoogleMarkerMap.northEastLat = bounds.getNorthEast().lat();
            GoogleMarkerMap.northEastLng = bounds.getNorthEast().lng();
        });

    // Listen for the dragend event
    google.maps.event.addListener(GoogleMarkerMap.map, 'dragend', function() 
    {
	console.log('Hello');
        var c = GoogleMarkerMap.map.getCenter();
        if (!strictBounds.contains(c)) 
        {
            // We're out of bounds - Move the map back within the bounds
            var x = c.lng(),
            y = c.lat(),
            maxX = strictBounds.getNorthEast().lng(),
            maxY = strictBounds.getNorthEast().lat(),
            minX = strictBounds.getSouthWest().lng(),
            minY = strictBounds.getSouthWest().lat();
            
            if (x < minX) x = minX;
            if (x > maxX) x = maxX;
            if (y < minY) y = minY;
            if (y > maxY) y = maxY;
        
            GoogleMarkerMap.map.setCenter(new google.maps.LatLng(y, x));
        }
    });
    
    // Limit the zoom level
    google.maps.event.addListener(GoogleMarkerMap.map, 'zoom_changed', function() 
    {
        if (GoogleMarkerMap.infoWindow)
            GoogleMarkerMap.infoWindow.close();
        if (GoogleMarkerMap.map.getZoom() < minZoomLevel) 
            GoogleMarkerMap.map.setZoom(minZoomLevel);
        else if (GoogleMarkerMap.map.getZoom() > maxZoomLevel) 
            GoogleMarkerMap.map.setZoom(maxZoomLevel);
    });



    },
    
    clearAll: function()
    {
        GoogleMarkerMap.map = false;
        GoogleMarkerMap.markerGroups = new Array();
        GoogleMarkerMap.infoWindows = new Array();
    },
    
    zoomToFit: function()
    {
        var bounds = new google.maps.LatLngBounds();
        for ( var x in GoogleMarkerMap.markerGroups ) 
        {
            for ( var y in GoogleMarkerMap.markerGroups[x] ) 
            {
                // And increase the bounds to take this point
                bounds.extend( GoogleMarkerMap.markerGroups[x][y].position );
            }
        }

        bounds = GoogleMarkerMap.setMinSize( bounds, GoogleMarkerMap.zoomToFitValue );
        GoogleMarkerMap.map.fitBounds( bounds );
        GoogleMarkerMap.map.setZoom(8);
    },
    
    setMinSize: function( bounds, value )
    {
        var northEast = bounds.getNorthEast();
        var southWest = bounds.getSouthWest();

        var latDiff = northEast.lat() - southWest.lat();
        var lngDiff = northEast.lng() - southWest.lng();

        var level = value / GoogleMarkerMap.zoomDivider;

        if ( latDiff < value ||
             lngDiff < value )
        {
            var newLat = northEast.lat() + level;
            var newLng = northEast.lng() + level;

            var gwLatlng = new google.maps.LatLng( newLat, newLng );
    		bounds.extend( gwLatlng );

            newLat = southWest.lat() - level;
            newLng = southWest.lng() - level;

            gwLatlng = new google.maps.LatLng( newLat, newLng );
    		bounds.extend( gwLatlng );
        }
        return bounds;
    },
    
    addMarkerGroup: function( groupId )
    {
        if(typeof( GoogleMarkerMap.markerGroups[groupId] ) == "undefined")
        {
            GoogleMarkerMap.markerGroups[groupId] = new Array();
        }
    },
    
    hideMarkerGroup: function( groupId )
    {
        for ( var i in GoogleMarkerMap.markerGroups[groupId] )
        {
            GoogleMarkerMap.markerGroups[groupId][i].setVisible( false );
            GoogleMarkerMap.infoWindows[i].close();
        }
    },
    
    showMarkerGroup: function( groupId )
    {
        for ( var i in GoogleMarkerMap.markerGroups[groupId] )
        {
            GoogleMarkerMap.markerGroups[groupId][i].setVisible( true );
        }
    },
    
    addMarker: function( markerOptions )
    {
        var groupId = markerOptions.groupId;
        var id = markerOptions.id;
        var longitude = parseFloat( markerOptions.longitude );
        var latitude = parseFloat( markerOptions.latitude );
        var title = markerOptions.title;
        var iconImage = markerOptions.iconImage;
        var shadowImage = markerOptions.shadowImage;
        var useInfoWindow = markerOptions.useInfoWindow;
        var url = markerOptions.url;
        var gwLatlng = new google.maps.LatLng( latitude, longitude );
        
        var marker = new google.maps.Marker({
            position: gwLatlng,
            map: GoogleMarkerMap.map,
            title: title
        });
                            
        if ( iconImage && iconImage != '' )
        {
            marker.setIcon( iconImage );
        }

        if ( shadowImage && shadowImage != '' )
        {
            marker.setShadow( shadowImage );
        }

        if ( useInfoWindow )
        {
            GoogleMarkerMap.addInfoWindow( marker, markerOptions );
        }
        else if ( !useInfoWindow && url && url != '' )
        {
            google.maps.event.addListener( marker, 'click', function(){
                window.location = url;		
		
            })
        }
        
        GoogleMarkerMap.markerGroups[groupId][id] = marker;
    },
    
    addInfoWindow: function ( marker, windowOptions )
    {
        var id = windowOptions.id;
        var longitude = parseFloat( windowOptions.longitude );
        var latitude = parseFloat( windowOptions.latitude );
        var title = windowOptions.title;
        var url = windowOptions.url;
        var linkText = windowOptions.linkText;
        var content = windowOptions.content;
        var image = windowOptions.image;  
	var templateURL = windowOptions.templateURL         
	
        var value = '';
        

        if ( image != undefined && image != '' )
        {
            value += '<img src="' + image + '" alt="" />';
        }
        
        value += '<h3>' + title + '</h3>';

        if ( content != undefined && content != '' )
        {
            value += content;
        }

        if ( url != undefined && url != '' )
        {
            value += '<p><a href="' + url + '">' + linkText + '</a></p>';
        }
        
        value = '<div class="infowindow-content">' + value + '</div>';

        
        
        google.maps.event.addListener( marker, 'click', function() {
		


		$('#ajax-content').load(templateURL, function()
		{
			
			$(function() {
			    $('#gallery-' + id + ' a').lightBox({containerResizeSpeed: 100});
			});
			

			//infoWindow.setContent(document.getElementById('lot' + id));
			$('#lot' + id).fadeIn('slow');

			replaceEmailByClass('span', 'emailaddresslink-class');

                        $("#fancybox-overlay").css("z-index",50);


			$("#fancybox-inner").css('overflow-y', 'hidden');

			$("#map_box_link").click();

			$('#fancybox-inner').width(600);
			$('#fancybox-wrap').width(620);			

		        $('#ajax-content .attribute-short').html(value);
			$("#fancybox-wrap").css("z-index",51).css("left","50%").css("margin-left","-310px");
			
		});

		

        });
    }
    
}


















