var MAGIC_NUMBER = 6356752.3142;//polar radius = 6356752.3142m 
var DEG2RAD = 0.0174532922519943;//degrees to the equivalent measure in radians 
var PI = 3.14159267; 

// untis transforing function 
function dd2MercMetersLng(p_lng) { 
        return MAGIC_NUMBER * (p_lng * DEG2RAD); 
} 


// units transforing function 
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)); 
} 


// OQC WMS standard url 
CustomGetTileUrl = function(a, b, c) { 
        if (typeof(window['this.myMercZoomLevel']) == "undefined") this.myMercZoomLevel = 0; 
        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 && map.getZoom() < this.myMercZoomLevel) { 
                var lBbox = dd2MercMetersLng(lUL.lngDegrees) + "," + dd2MercMetersLat(lUL.latDegrees) + "," + dd2MercMetersLng(lLR.lngDegrees) + "," + dd2MercMetersLat(lLR.latDegrees); 
                var lSRS = "EPSG:54004"; 
        } else { 
                var lBbox = lUL.x + "," + lUL.y + "," + lLR.x + "," + lLR.y; 
                var lSRS = "EPSG:4326"; 
        } 
        var lURL = this.myBaseURL; 
        lURL += "&REQUEST=GetMap"; 
        lURL += "&SERVICE=WMS"; 
        lURL += "&VERSION=" + this.myVersion; 
        lURL += "&LAYERS=" + this.myLayers; 
        lURL += "&STYLES=" + this.myStyles; 
        lURL += "&FORMAT=" + this.myFormat; 
        lURL += "&BGCOLOR=" + this.myBgColor; 
        lURL += "&TRANSPARENT=TRUE";//false 
        lURL += "&SRS=" + lSRS; 
        lURL += "&BBOX=" + lBbox; 
        lURL += "&WIDTH=256"; 
        lURL += "&HEIGHT=256"; 
        lURL += "&reaspect=false"; 

        return lURL; 

} 


/** Create WMS type spec as a GMap Spec. */ 
function createWMSSpec(wmsURL, gName, gShortName, wmsLayers,wmsStyles, wmsFormat, wmsVersion, wmsBgColor, wmsSrs) { 
        var tile = new GTileLayer(new GCopyrightCollection(""), 1, 17); 
        tile.myLayers = wmsLayers; 
        tile.myStyles = (wmsStyles ? wmsStyles : ""); 
        tile.myFormat = (wmsFormat ? wmsFormat : "image/gif"); 
        tile.myVersion = (wmsVersion ? wmsVersion : "1.1.1"); 
        tile.myBgColor = (wmsBgColor ? wmsBgColor : "FFFFFF"); 
        tile.myBaseURL = wmsURL; 
        tile.getTileUrl = CustomGetTileUrl;         
	
	var GTLO = new GTileLayerOverlay(tile);
	map.addOverlay(GTLO);
	GTLO.hide();

        return GTLO; 

} 
