var FORMAT_DEFAULT="image/png";

// dd2MercMeters Conversion Functions
// from http://search.cpan.org/src/RRWO/GPS-Lowrance-0.31/lib/Geo/Coordinates/MercatorMeters.pm
//
//var POLAR_RADIUS = 6356752.0;
var POLAR_RADIUS = 6343000.0;
//var EQUATORIAL_RADIUS = 6378140.0;
var EQUATORIAL_RADIUS = 6356752.0;
//var MAGIC_NUMBER=6378137;
//Original magic number
//var MAGIC_NUMBER=6356752.3142;

var DEG2RAD=0.017453292519943295;
var PI=3.14159267;
function dd2MercMetersLng(p_lng) {
	return EQUATORIAL_RADIUS*(p_lng*DEG2RAD);
} 
function dd2MercMetersLat(p_lat) {
	if (p_lat >= 85) p_lat=85;
	if (p_lat <= -85) p_lat=-85;
	return POLAR_RADIUS*Math.log(Math.tan(((p_lat*DEG2RAD)+(PI/2.0)) /2.0));
}


CustomGetTileUrl=function(a,b,c) {
	if (this.myMercZoomLevel == undefined) {
    	this.myMercZoomLevel = 15;
	}

	if (this.myFormat == undefined) {
    	this.myFormat = FORMAT_DEFAULT;
	}

	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);


	var lBbox = 0.0;
	var lSRS = "";

	if (map.getZoom() < 5) { 
		// use mercator projection when viewimg large areas
		lBbox=dd2MercMetersLng(lUL.x)+","+dd2MercMetersLat(lUL.y)+","+dd2MercMetersLng(lLR.x)+","+dd2MercMetersLat(lLR.y);
		lSRS="EPSG:3395";
	}
	else {
		// use geographic projection when viewing details
		lBbox=lUL.x+","+lUL.y+","+lLR.x+","+lLR.y;
		lSRS="EPSG:4326";

	}

	var lURL=this.myBaseURL;
	lURL+="&REQUEST=GetMap";
	lURL+="&SERVICE=WMS";
	lURL+="&VERSION=1.1.1";
	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";
	//document.write("<br>"+lURL + "<br/>")
	//alert(" url is " + lURL);
	return lURL;
}

function customOpacity() { return this.myOpacity; }
