	//document.write("<script   type=\"text/javascript\"   src=\"lib/OpenLayers.js\"></scr"+"ipt>");
	document.oncontextmenu=new Function("return false");
	 var map, layer, icon; 
     function init(){ 
		var pdfTileSize = new OpenLayers.Size(240, 240);
/*	 var options = {
            controls: [],
            maxResolution:1.40625/2,
            numZoomLevels: 6,
			layerContainerOrigin: new OpenLayers.LonLat(113.7298566, 22.93312719),
            units: 'degrees',
            projection: "EPSG:4326",
			tileSize: pdfTileSize
        };
	 var pdfResolutions = [ 
							0.000650116,
							0.000323985, 
							0.000152934,
							0.0000810444, 
							0.0000404189
						  ];
	 var pdfResolutions = [ 
							0.00065,
							0.000325, 
							0.0001625,
							0.00008125, 
							0.000040625,
							0.0000203125,
							0.00001015625
						  ];
	 var pdfResolutions_y = [ 
							0.0006016,
							0.0003008, 
							0.0001504,
							0.0000752, 
							0.0000376,
							0.0000188,
							0.0000094
						  ];
  */      
	 var pdfResolutions = [ 
							0.000650116,
							0.00032398472, 
							0.000162490220588237,
							0.000081044406565656, 
							0.0000404188846153849,
							0.0000202192861757105,
							0.0000101147130350196,
							0.00000505212231968808
						  ];

	 var pdfResolutions_y = [ 
							0.0006012523,
							0.000301324361111111, 
							0.000150183110294117,
							0.0000752083497474746, 
							0.0000376505826923077,
							0.0000188006847545219,
							0.00000940433819714657,
							0.00000470004345354128
						  ];

	 var options = {
            controls: [],
			resolutions: pdfResolutions,
			resolutions_y: pdfResolutions_y, 
			maxExtent: new OpenLayers.Bounds(113.825815, 22.06136755, 114.4490663, 22.64615803), 
            numZoomLevels: 8,
            units: 'degrees',
			lang: _lang,
			tileSize: pdfTileSize
        };

        map = new OpenLayers.Map("map", options);
		var constantina = new OpenLayers.LonLat(114.1025895, 22.33371386);
		
		//var wms = new OpenLayers.Layer.TMS( "overview", "http://localhost:8080/map/", 
                                        //  { type: 'JPG', getURL: getOverviewTileURL, displayOutsideMaxExtent: true }); 
     	//map.addLayer(wms);
		//var midland = new OpenLayers.Layer.TMS("map", "http://localhost:8080/MidlandMap_SZ/sz_map_image/", 
        //                                  { type: 'gif', getURL: getTileURL, displayOutsideMaxExtent: true }); 
		
		var midland = new OpenLayers.Layer.TMS("map", "../map_image/", 
                                          { type: 'jpg', getURL: getTileURL, displayOutsideMaxExtent: false }); 
		map.addLayer(midland);
		
		

		//control layer
		var overviewoptions = {
		   layers: [midland.clone()],
		   minRatio: 8,
		   maxRatio: 128
		};
				
		//Over View
		//var overview = new OpenLayers.Control.OverviewMap({mapOptions: overviewoptions});
		//map.addControl(overview);

		// Layer Switcher
		//map.addControl(new OpenLayers.Control.LayerSwitcher()); 

		// Show mouse position for debugging
		//map.addControl(new OpenLayers.Control.MousePosition());

		map.setCenter(constantina, 0);
		//overview.maximizeControl(); //default open overview
		

		// Add markers layer
		var markers = new OpenLayers.Layer.Markers( "Markers" );
		map.addLayer(markers);
		var size = new OpenLayers.Size(66,33);
		var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
		icon = new OpenLayers.Icon('./img/pinblue.png',size,offset);

		// Add Coordinate layer
		var Coordinates = new OpenLayers.Layer.Coordinates( "Coordinates" );
		map.addLayer(Coordinates);
		var size = new OpenLayers.Size(20,36);
		var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);

		// Add POI markers layer
		var POIMarkers = new OpenLayers.Layer.POIMarkers( "POIMarkers" , {retrievePOI: retrievePOIOutside});
		map.addLayer(POIMarkers);
		// Add POI markers switcher
		map.addControl(new OpenLayers.Control.POISwitcher({markerLayer:POIMarkers}));
		
		// ZoomBar
		map.addControl(new OpenLayers.Control.PanZoomBar());

		// Mouse Tool Bar (Drag function)
		var mouseToolbar = new OpenLayers.Control.MouseToolbar();
		mouseToolbar.draw = MouseToolbarAddButtons;
		mouseToolbar.defaultClick = MouseToolbarDefaultClick;
		mouseToolbar.buttonUp = MouseToolbarButtonUp;
		map.addControl(mouseToolbar);
    } 

	function rpad(inputText, padNumber) {
		var strRpad = "000" + inputText;
		strRpad = strRpad.substr(strRpad.length-padNumber);
		return strRpad;
	}
	
	function getTileURL(bounds) { 
	 	var res = this.map.getResolution(); 
	 	var res_y = this.map.getResolutionVer(); 
	 	var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w)) + 1; 
	 	var y = Math.round((this.maxExtent.top - bounds.top) / (res_y * this.tileSize.h)) + 1; 
	 	var z = this.map.getZoom();
		z = z+2; // z start from level 2
		var maxXY = Math.pow(2,z);
		
		//var tilePath = "http://10.0.0.181/ajaxmap/hk_map_image_20080318/";
		var tilePath = "http://www.midlandmap.hk/map_hk/tile/" + this.map.lang + "/";
		var returnPath = tilePath + "02/001/001." + this.type;

		if (x > 0 && y > 0 && z > 0 && x <= maxXY && y <= maxXY)
			returnPath = tilePath + "0" + z + "/" + rpad(x, 3) + "/" + rpad(y, 3) + "." + this.type;
		return returnPath;
		//return tilePath + "0" + z + "/" + rpad(x, 3) + "/block_"  + rpad(z, 2) + "_" + rpad(x, 3) + "_" + rpad(y, 3) + "." + this.type; 
	}

	function retrievePOIOutside(POITypes, map) {
		this.POITypes = POITypes;
		var bound = map.getExtent();
		var uri = "/map_hk/markPOI.jsp?lang=" + map.lang + "&minX=" + bound.left + "&minY=" + bound.bottom + "&maxX=" + bound.right + "&maxY=" + bound.top;
		for (var i=0; i<POITypes.length; i++) {
			uri = uri + "&type=" + POITypes[i];
		}
		var results = OpenLayers.loadURL(uri, '', this, this.markPOISuccess, this.markPOIFail);
		//alert("retrievePOIOutside - " + uri + this.currentMapExtent + " - " + map.getExtent()); 
		this.currentMapExtent=map.getExtent();

		return null;
    }
	
	function MouseToolbarAddButtons() {
        OpenLayers.Control.prototype.draw.apply(this, arguments); 
        OpenLayers.Control.MouseDefaults.prototype.draw.apply(this, arguments);
        this.buttons = new Object();
        this.switchModeTo("pan");
        this.map.events.register( "mouseup", this, this.buttonUp );

        return this.div;
    }

    function MouseToolbarDefaultClick(evt) {
		if (this.performedDrag)  {
			this.performedDrag = false;
			return false;
		}
		else
		{
			if (this.map.getZoom() < this.map.getNumZoomLevels() - 3) {
				alert(_zoomin_msg);
			}
			else
				getDetailByCoord(this.map.getLonLatFromViewPortPx( evt.xy ), true);
			return false;
		}
    }
	
    function MouseToolbarButtonUp(evt) {
        if (!OpenLayers.Event.isLeftClick(evt)) {
			if (this.performedDrag)  {
				this.performedDrag = false;
			}
			else
			{
				this.performedDrag = false;
				var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); 
				this.map.setCenter(newCenter, this.map.zoom + 1);
				this.map.events.triggerEvent("dragend");
				OpenLayers.Event.stop(evt);
			}
		}
		return false;
    }
