/*
Call generic wms service for GoogleMaps v2
John Deck, UC Berkeley
Inspiration & Code from:
	Mike Williams http://www.econym.demon.co.uk/googlemaps2/ V2 Reference & custommap code
	Brian Flood http://www.spatialdatalogic.com/cs/blogs/brian_flood/archive/2005/07/11/39.aspx V1 WMS code
	Kyle Mulka http://blog.kylemulka.com/?p=287  V1 WMS code modifications
	http://search.cpan.org/src/RRWO/GPS-Lowrance-0.31/lib/Geo/Coordinates/MercatorMeters.pm
*/

var MAGIC_NUMBER=6356752.3142;
var DEG2RAD=0.0174532922519943;
var PI=3.14159267;
function dd2MercMetersLng(p_lng) {
	return MAGIC_NUMBER*(p_lng*DEG2RAD);
}

function dd2MercMetersLat(p_lat) {
	if (p_lat >= 85) p_lat=85;
	if (p_lat <= -85) p_lat=-85;
	return MAGIC_NUMBER*Math.log(Math.tan(((p_lat*DEG2RAD)+(PI/2)) /2));
}

CustomGetTileUrl=function(a,b,c) {
	if (typeof(window['this.myStyles'])=="undefined") this.myStyles="";
	var lULP = new GPoint(a.x*256,(a.y+1)*256);
	var lLRP = new GPoint((a.x+1)*256,a.y*256);
	var lUL = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
	var lLR = G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
	// switch between Mercator and DD if merczoomlevel is set
	if (this.myMercZoomLevel!=0 && b < this.myMercZoomLevel) {
    	var lBbox=dd2MercMetersLng(lUL.x)+","+dd2MercMetersLat(lUL.y)+","+dd2MercMetersLng(lLR.x)+","+dd2MercMetersLat(lLR.y);
    	var lSRS="EPSG:54004";
	} else {
    	var lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
    	var lSRS="EPSG:4326";
	}
	var lURL=this.myBaseURLFunc(a,b);
	lURL+="&REQUEST=GetMap";
	lURL+="&SERVICE=WMS";
	lURL+="&VERSION=1.1.1";
	if (this.myLayers) {
		lURL+="&LAYERS="+this.myLayers;
	}
	lURL+="&STYLES="+this.myStyles; lURL+="&FORMAT="+this.myFormat;
//	lURL+="&BGCOLOR=0xFFFFFF";
	lURL+="&TRANSPARENT=TRUE";
	lURL+="&SRS="+lSRS;
	lURL+="&BBOX="+lBbox;
	lURL+="&WIDTH=256";
	lURL+="&HEIGHT=256";
	lURL+="&reaspect=false";
	return lURL;
//	document.write(lURL);
};
function availAreaLoad() {
	startMap();
}

pDomApi.addEvent(window, 'domload', availAreaLoad);

function initializeMap(name, width, height) {
  	if (!GBrowserIsCompatible()) {
  		return false;
  	}
  	var map = new GMap2(document.getElementById(name), { size: new GSize(width,height) });

  	map.addControl(new GLargeMapControl());
  	map.addControl(new GMapTypeControl());
  	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(100,10));
  	map.addControl(new GScaleControl(),pos);
    map.addControl(new GOverviewMapControl());

	map.disableDoubleClickZoom(); // since 2.58
    return map;
}

function startMap() {
	var url;
	geocoder = new GClientGeocoder();

	map = initializeMap("map", 600, 400);
	if (layerUrl) {
		url = layerUrl;
	} else {
		url = 'TYPE=shape&SEASON=2010';
	}


	/* create copyright for layer */
	var myCopyrightC = new GCopyrightCollection();
	var myBounds	= new GLatLngBounds(new GLatLng(50,2), new GLatLng(55,9));
	var myCopyright = new GCopyright('PrezentCopy',myBounds,0,'Prezent');
	myCopyrightC.addCopyright(myCopyright);
    var tileLayer= new GTileLayer(myCopyrightC,1,17, { opacity:0.8 } );

	tileLayer.myBaseURLFunc = function(a,b) {
        var w = ((a.x + a.y) % hosts.length-1)+1;
        var f = hosts[w] + '?' + url;
        return f;
    }

    tileLayer.myMercZoomLevel=1;
    tileLayer.myLayers='totalExtent';

    tileLayer.myFormat='image/gif';
    tileLayer.getTileUrl=CustomGetTileUrl;


	var olLayer = new GTileLayerOverlay(tileLayer);
	olLayer.visible = true;

    map.removeMapType(G_HYBRID_MAP);

	if (window.mapscfg == undefined) {
		alert('error in config: mapscfg not defined');
	} else {    
		var center = mapscfg.default_center.split(',');
		map.setCenter(new GLatLng(center[0], center[1]), parseInt(mapscfg.default_zoom));
	}

	map.addOverlay(olLayer);
}

// global vars
var map;
var layerUrl;

// events
pDomApi.addEvent(window, 'unload',  function() {
    // prevent memory leaks
    GUnload();
});


