
function Map() {

	//=====================================================
	// Variables                                   ========
	//=====================================================

	// Targets
	var target = "map";
	var targetDirections = "";
	var targetLocator = "locator";

	// Map
	var map;
	var zoomLevel = 14;
	var centerLon = 52.0801555;
	var centerLat = 4.3125026;
	var that = this;
	var infow;

	// Directions
	var direction;
	var directionsHtml;

	// Route
	var route;
	var route_color= "#d50057";
	var route_weight = 4;
	var route_opacity = 0.8;

	// Arrays
	var areas = [];
	var markers = [];

	// GDirections
	var travelMode = G_TRAVEL_MODE_DRIVING;
	var avoidHighways = false;

	//=====================================================
	// Setters                                     ========
	//=====================================================

	/**
	 * @param target string;
	 * @return void;
	 */
	this.setTarget = function(tar){
		target = tar;
	}

	/**
	 * @param targetDirections string;
	 * @return void;
	 */
	this.setTargetDirections = function(tDirections){
		targetDirections = tDirections;
	}


	/**
	 * @param travelMode string;
	 * @return void;
	 */
	this.setTravelMode = function(tMode){
		travelMode = tMode == 'walking'
			? G_TRAVEL_MODE_WALKING
			: G_TRAVEL_MODE_DRIVING
		;
	}

	/**
	 * @param avoidHighway boolean;
	 * @return void;
	 */
	this.setTravelMode = function(aHighways){
		avoidHighWays = aHighways;
	}

	/**
	 * @param color string;
	 * @return void;
	 */
	this.setRouteColor = function(color){
		route_color = color;
	}

	/**
	 * @param weight number;
	 * @return void;
	 */
	this.setRouteWeight = function(weight){
		route_weight = weight;
	}

	/**
	 * @param weight number;
	 * @return void;
	 */
	this.setRouteWeight = function(weight){
		route_weight = weight;
	}

	/**
	 * @param opacity number;
	 * @return void;
	 */
	this.setRouteWeight = function(opacity){
		route_opacity = opacity;
	}
	//=====================================================
	// Getters                                     ========
	//=====================================================

	/**
	 * @param void;
	 * @return map Object;
	 */
	this.getMap = function(){
		return map;
	}

	/**
	 * @param void;
	 * @return directionsHtml HTML;
	 */
	this.getDirectionsHtml = function(){
		return directionsHtml;
	}


	//=====================================================
	// Public functions                            ========
	//=====================================================

	this.init = function() {
		map = new GMap(document.getElementById(target));
		map.setCenter(new GLatLng(centerLon,centerLat), zoomLevel);
		map.addMapType(G_PHYSICAL_MAP);

		infow = new KegaInfoWindow(map);
      	map.addOverlay(infow);


		//document.getElementById(target).style.backgroundImage = "url(http://maps.google.com/staticmap?center="+centerLon+","+centerLat+"&zoom="+zoomLevel+"&size=600x600&key=ABQIAAAAe1_1F11hJI72f7AeVHt2dhTYDFUCrjNtoGxZn-FxKkIQx8MitRQuandJKNDQAzviZ8hs1MZZS7R6EQ)";


	}

	//add controls to the map
	this.addControl = function(sort, type){

		if (sort == 'show'){
			if (type == "small"){
				map.addControl(new GSmallMapControl());
			}else if(type == "smallZoom"){
				map.addControl(new GSmallZoomControl());
			}else if(type == "large"){
				map.addControl(new GLargeMapControl());
			}
		}else if(sort == 'type'){
			if (type == "normal"){
				map.addControl(new GMapTypeControl());
			}else if(type == "menu"){
				map.addControl(new GMenuMapTypeControl());
			}else if(type == "hierarchiecal"){
				map.addControl(new GHierarchicalMapTypeControl());
			}
		}

	}

	// Add markers to the map

	this.addMarker = function(arr) {

		var latlng = arr['latlng'].split(',');

		if (arr['type'] == 'marker'){
			var icon = new GIcon();
	     	icon.image = arr['markerIcone'];
	      	icon.iconSize = new GSize(10, 11);
	      	icon.iconAnchor = new GPoint(5, 5);
	      	icon.infoWindowAnchor = new GPoint(5, -12);
		}else if (arr['type'] == 'routeMarker'){
			var icon = new GIcon();
	     	icon.image = arr['markerIcone'];
	      	icon.iconSize = new GSize(24, 25);
	      	icon.iconAnchor = new GPoint(12, 12.5);
	      	icon.infoWindowAnchor = new GPoint(9, 2);
		}

		var point = new GLatLng(latlng[0],latlng[1]);

	    var marker = new GMarker(point, icon);

	    marker.latlng = latlng;
	    marker.lat = latlng[0];
	    marker.lng = latlng[1];

		var id = arr['id'];
		marker.id = id;

		var name = arr['name'];
		marker.name = name;

		var type = arr['type'];
		marker.type = type;

		var prop = arr['prop'];
		marker.property = prop;

		var place = arr['place'];
		marker.place = place;

		var postcode = arr['postcode'];
		marker.postcode = postcode;

		var housenumber = arr['housenumber'];
		marker.housenumber = housenumber;

		var url = arr['url'];
		marker.url = url;

		var markerHTML = arr['markerHTML'];
		marker.markerHTML = markerHTML;

		// pure denhaag
        var areaId = pointInArea(latlng[0],latlng[1]);
        if (areaId >= 0){
			marker.area = areas[areaId].name;
		}

		GEvent.addListener(marker, "click", function() {
            infow.open(marker, markerHTML);
        });

        markers.push(marker);
	    map.addOverlay(marker);
	}

	this.removeMarkers = function() {
		for(var i=0, il=markers.length; i<il; i++){
			map.removeOverlay(markers[i]);
		}
	}

	this.openInfo = function(marker_id){
		for(var i=0, il=markers.length; i<il; i++){
			if (markers[i].id == marker_id){
				infow.open(markers[i], markers[i].markerHTML);
				map.setCenter(new GLatLng(markers[i].lat,markers[i].lng));
			}
		}
	}

	this.center = function(lat, lon, zoom){
		map.setCenter(new GLatLng(lat, lon), zoom);
	}

	this.findStores = function(adr, radius){

		geocoder = new GClientGeocoder();
	 	geocoder.getLatLng(adr, function(point) {
	      if (!point) {
	        alert(adr + " niet gevonden");
	      } else {

	      	// home marker
	   		var marker = new GMarker(point);
	     	map.addOverlay(marker);

	      	var ul = document.createElement("ul");
	      	ul.style.width = '100%';
	      	for(var i=0, il=markers.length; i<il; i++){
	      		var distance = calcDist(point.y, point.x, markers[i].y, markers[i].x);

	      		if (distance <= radius){

	      			markers[i].setImage('img/kaart/markerk.gif');

		      		var li = document.createElement("li");
		      		li.style.cursor = 'pointer';
		      		li.style.cssFloat = 'left';
		      		li.style.width = '70%';
		      		li.rel = i;
		      		li.appendChild(document.createTextNode(markers[i].name+ "\n"+markers[i].place));
					ul.appendChild(li);

					li = document.createElement("li");
		      		li.style.cursor = 'pointer';
		      		li.style.cssFloat = 'left';
		      		li.style.width = '15%';
		      		li.rel = i;
		      		li.appendChild(document.createTextNode('route'));
					ul.appendChild(li);

					var li = document.createElement("li");
		      		li.style.cursor = 'pointer';
		      		li.style.cssFloat = 'left';
		      		li.style.width = '15%';
		      		li.rel = i;
					var a = document.createElement('a');
					a.innerHTML = 'link';
 					a.setAttribute('href', 'http://www.tweakers.net');
		      		li.appendChild(a);
					ul.appendChild(li);

					//markers[i].show();
	      		}else{
	      			markers[i].setImage('img/kaart/markerg.gif');
	      			//markers[i].hide();
	      		}
	      	}

			GEvent.addDomListener(ul,"click",function(e){
	      		var marker_id = e.target.rel;

	      		//that.center(markers[marker_id].x, markers[marker_id].y, 12);
	      		that.initRoute();

	      		var steps = [];
	      		steps.push(point.y +',' + point.x);
	      		steps.push(markers[marker_id].y + ',' + markers[marker_id].x);
	      		that.addRoute(steps);

	      	});

	      	var node = document.getElementById(targetLocator);
	      	while (node.hasChildNodes()){
			  node.removeChild(node.firstChild);
			}
	      	document.getElementById(targetLocator).appendChild(ul);
	      }
	    }
	  );
	}

	this.toggelId = function(id, type){
		for(var i=0, il=markers.length; i<il; i++){
			if (markers[i].id == id){
				this.toggleMarker(i, type);
			}
		}
	}

	this.toggelProperties = function(prop, type){
		for(var i=0, il=markers.length; i<il; i++){
			if (!prop){
				this.toggleMarker(i, type);
			}else if (markers[i].property.match(":" +prop+ ":")){
				this.toggleMarker(i, type);
			}
		}
	}

	this.toggleMarker = function(i, type){
		if (type == 'hide'){
			markers[i].hide();
		}else{
			if (typeof markers[i].area != "undefined"){
				if (invArea(markers[i].area)){
					markers[i].show();
				}
			}else{
				markers[i].show();
			}
		}
	}

	this.hideAllMarkers = function(){
		for(var i=0, il=markers.length; i<il; i++){
			this.toggleMarker(i, 'hide');
		}
	}

//	this.toggleMarker = function(i, type){
//		if (type == 'hide'){
//			markers[i].hide();
//		}else{
//			if (invArea(markers[i].area)){
//				markers[i].show();
//			}
//		}
//	}


	// Route

	this.initRoute = function(){

		direction = new GDirections(null, document.getElementById("route"));

		GEvent.addListener(direction, "error", function() {

			if (direction.getStatus().code == G_GEO_UNKNOWN_ADDRESS) {
				alert("De locatie van het opgegeven vertrekadres kon niet worden bepaald. \nFoutcode: " + direction.getStatus().code);
			}else if (direction.getStatus().code == G_GEO_SERVER_ERROR) {
				alert("Er is iets misgegaan. Maar het is onduidelijk WAT \n Foutcode: " + direction.getStatus().code);
			}else if (direction.getStatus().code == G_GEO_MISSING_QUERY) {
				alert("Een parameter ontbreekt. Misschien was er geen vertrekpunt ingevoerd. \n Foutcode: " + direction.getStatus().code);
			}else if (direction.getStatus().code == G_GEO_BAD_KEY) {
				alert("De Google Maps sleutel is ongeldig of de gebruikte sleutel is niet geldig voor dit domein.\n Foutcode: " + direction.getStatus().code);
			}else if (direction.getStatus().code == G_GEO_BAD_REQUEST) {
				alert("De aanvraag voor het plannen van een route is mislukt. \n Foutcode: " + direction.getStatus().code);
			}else {
				alert("Er is iets misgegaan. Maar het is volstrekt onduidelijk WAT de oorzaak is!");
			}
		});

		GEvent.addListener(direction, "load", function() {

			if (targetDirections){direction.setDirections();}

			if (route){map.removeOverlay(route);}

			route = direction.getPolyline();
			route.setStrokeStyle({color:route_color,weight:route_weight,opacity:route_opacity});

			map.addOverlay(route);

			var bounds = direction.getBounds();
            map.setCenter( bounds.getCenter(),map.getBoundsZoomLevel(bounds) );

		});

	}

	this.addRoute = function(steps, name) {
		direction.loadFromWaypoints(steps,{getPolyline:true, getSteps:true, travelMode:G_TRAVEL_MODE_WALKING, avoidHighways:avoidHighways});
	}

	GDirections.prototype.setDirections = function(){
		var numRoutes = this.getNumRoutes();
		var distance = this.getDistance().html;
		var duration = this.getDuration().html;

		var tbl = document.createElement("table");
		var tbody = document.createElement("tbody");
		tbl.setAttribute("border", "0");
		tbl.setAttribute("cellpadding", "0");
		tbl.setAttribute("cellspacing", "0");
		tbl.setAttribute("width", "100%");

		for(var i=0, il=numRoutes; i<il; i++){
			var dir = this.getRoute(i);
			var numSteps = dir.getNumSteps();

			var row = document.createElement("tr");
			var cell = document.createElement("td");
			cell.setAttribute("colSpan", "3");
			cell.setAttribute("class", "point");
			cell.innerHTML = dir.getStartGeocode().address + ' ' + dir.getDistance().html + ' (' + dir.getDuration().html  + ')';

            row.appendChild(cell);
			tbody.appendChild(row);

			for(var n=0, nl=numSteps; n<nl; n++){
				var row = document.createElement("tr");
				row.style.cursor = 'pointer';

				var cell = document.createElement("td");
				cell.rel = n;
				cell.innerHTML =(n+1) + ':';
				cell.setAttribute("class", "nr");
           		row.appendChild(cell);

           		var cell = document.createElement("td");
           		cell.innerHTML = dir.getStep(n).getDescriptionHtml();
           		cell.rel = n;
           		row.appendChild(cell);

           		var cell = document.createElement("td");
           		cell.rel = n;
           		cell.innerHTML = dir.getStep(n).getDistance().html; //dir.getStep(n).getDuration().html
           		row.appendChild(cell);
           		tbody.appendChild(row);

			}

			if (i == (numRoutes-1)){
				var row = document.createElement("tr");

				var cell = document.createElement("td");
				cell.rel = n;
				cell.setAttribute("colSpan", "3");
				cell.innerHTML = dir.getEndGeocode().address;
            	cell.setAttribute("class", "point");

           		row.appendChild(cell);
				tbody.appendChild(row);

			}
		}
		tbl.appendChild(tbody);

//		GEvent.addDomListener(tbl,"click",function(e){
//			var td = e.target;
//			while (td.nodeName.toLowerCase() != 'td' && td.parentNode){
//				td = td.parentNode;
//			}
//
//			alert(td.rel);
//			//alert(dir.getStep(e.target.rel).getLatLng());
//		});

		document.getElementById(targetDirections).innerHTML = "";
		document.getElementById(targetDirections).appendChild(tbl);

	}

	//=====================================================
	// Kega info window      					   ========
	//=====================================================


	function KegaInfoWindow(map){
		this.map=map;
		this.visible = false;
		this.prototype = new GOverlay();
	}



	KegaInfoWindow.prototype.initialize = function(){

		var infowCont = document.createElement("div");
	    infowCont.style.position = "absolute";

	    var kiwContainer = document.createElement("div");
	    kiwContainer.id = 'kiwContainer';

	    var kiwLeftTop = document.createElement("div");
	    kiwLeftTop.className = 'kiwLeftTop';
	    kiwContainer.appendChild(kiwLeftTop);

	    var kiwTop = document.createElement("div");
	    kiwTop.className = 'kiwTop';
	    kiwContainer.appendChild(kiwTop)

	   	var kiwRightTop = document.createElement("div");
	    kiwRightTop.className = 'kiwRightTop';
	    kiwContainer.appendChild(kiwRightTop);

	    var kiwLeftBottom = document.createElement("div");
	    kiwLeftBottom.className = 'kiwLeftBottom';
	    kiwContainer.appendChild(kiwLeftBottom);

	    var kiwLeft = document.createElement("div");
	    kiwLeft.className = 'kiwLeft';
	    kiwContainer.appendChild(kiwLeft);

	    var kiwRightBottom = document.createElement("div");
	    kiwRightBottom.className = 'kiwRightBottom';
	    kiwContainer.appendChild(kiwRightBottom);

	    var kiwRight = document.createElement("div");
	    kiwRight.className = 'kiwRight';
	    kiwContainer.appendChild(kiwRight);

	   	var kiwBottom = document.createElement("div");
	    kiwBottom.className = 'kiwBottom';
	    kiwContainer.appendChild(kiwBottom);

	    var kiwHtml = document.createElement("div");
	    kiwHtml.className = 'kiwHtml';
	    this.kiwHtml = kiwHtml;
	    kiwContainer.appendChild(kiwHtml);

	    infowCont.appendChild(kiwContainer);

	    map.getPane(G_MAP_FLOAT_PANE).appendChild(infowCont);
	    this.infowCont = infowCont;

	    this.hide();

	};

	KegaInfoWindow.prototype.open = function(marker, markerHTML){

		var vx = (marker.getIcon().iconAnchor.x - marker.getIcon().infoWindowAnchor.x-60);
        var vy = (marker.getIcon().iconAnchor.y - marker.getIcon().infoWindowAnchor.y-22);

        this.kiwHtml.innerHTML = markerHTML;

        this.offset = new GPoint(vx,vy)||new GPoint(0,0);
        this.point = marker.getPoint();
      	this.visible = true;
      	this.show();
      	this.redraw(true);
      	this.repositionMap();
	}

	KegaInfoWindow.prototype.redraw = function(c){
		if (!this.visible) {return;}

		var p = this.map.fromLatLngToDivPixel(this.point);
	    this.infowCont.style.left   = (p.x + this.offset.x) + "px";
	    this.infowCont.style.bottom = (-p.y + this.offset.y) + "px";

	    GEvent.addListener(map, "click", function(overlay,point) {
	    	if (!overlay) {
	          infow.hide();
	        }
	    });

	};

	KegaInfoWindow.prototype.show = function() {
		this.infowCont.style.display="";
		this.visible = true;
	}

	KegaInfoWindow.prototype.hide = function() {
		this.infowCont.style.display="none";
		this.visible = false;
	}

	KegaInfoWindow.prototype.repositionMap = function(){

		var mapNE = map.fromLatLngToDivPixel(map.getBounds().getNorthEast());
		var mapSW = map.fromLatLngToDivPixel(map.getBounds().getSouthWest());

		var kiwWidth = this.infowCont.offsetWidth;
		var kiwHeight = this.infowCont.offsetHeight;

		var markerPosition = map.fromLatLngToDivPixel(this.point);

		var difW = ((markerPosition.x + kiwWidth)-60);

		if (mapNE.x < difW){
			var panX = -(difW - mapNE.x);
		}else{
		    if(mapSW.x > (markerPosition.x - 60)){
		    	var panX = mapSW.x - (markerPosition.x - 60);
		    }else{
		    	var panX = 0;
		    }
		}

		var difH = (markerPosition.y - (-kiwHeight )+ 70);

		if (mapSW.y > difH){
			var panY = mapSW.y - difH;
		}else{
			var panY = 0;
		}

		map.panBy(new GSize(panX,panY));

	};

	GMarker.prototype.closeExtInfoWindow = function(map) {
		alert('test');
	};
	//=====================================================
	// Puur denhaag functions                      ========
	//=====================================================


	this.addAreas = function(name, pts, lvl, color) {

		var polygon = new GPolyline.fromEncoded({
		  color: color,
		  weight: 0,
		  opacity: 0.0,
		  points:pts,
		  levels:lvl,
		  zoomFactor: 32,
		  numLevels: 4
		});

		polygon.name = name;
		polygon.visible = 'true';

		areas.push(polygon);

		map.addOverlay(polygon);

		GEvent.addListener(map, "mousemove", function (p) {
//			var areaId = pointInArea(p.lng(), p.lat());
//			if (areaId >= 0){
//				document.getElementById("message").innerHTML = "--> " + areas[areaId].name;
//			}
		});
	}

	this.toggelAreas = function(area, type){
		for(var q=0, ql=areas.length; q<ql; q++){
			if (areas[q].name == area && type == 'hide'){
				areas[q].visible = 'false';
			}else if (areas[q].name == area && type == 'show'){
				areas[q].visible = 'true';
			}
		}

		for(var i=0, il=markers.length; i<il; i++){
			if (!area){
				this.toggleMarker(i, type);
			}else if (markers[i].area == area){
				this.toggleMarker(i, type);
			}else if (area == 'out' && !markers[i].area){
				this.toggleMarker(i, type);
			}
		}
	}

	function invArea(area){
		for(var q=0, ql=areas.length; q<ql; q++){
			if (areas[q].visible == 'false'){
				return false;
			}else if (areas[q].visible == 'true'){
				return true;
			}
		}
	}

	//=====================================================
	// Private functions                           ========
	//=====================================================


	function pointInArea(y, x){
		for(var q=0, ql=areas.length; q<ql; q++){
			var j=0;
			var oddNodes = false;
			for(var i=0, il=areas[q].getVertexCount(); i<il; i++){

				j++;
				if (j == areas[q].getVertexCount()) {
					j = 0;
				}
				if (((areas[q].getVertex(i).lat() < y) && (areas[q].getVertex(j).lat() >= y)) || ((areas[q].getVertex(j).lat() < y) && (areas[q].getVertex(i).lat() >= y))) {
					if ( areas[q].getVertex(i).lng() + (y - areas[q].getVertex(i).lat()) / (areas[q].getVertex(j).lat()-areas[q].getVertex(i).lat()) *  (areas[q].getVertex(j).lng() - areas[q].getVertex(i).lng())<x ) {
					  oddNodes = !oddNodes
					}
				}
			}
			if (oddNodes){return q;}
		}
	}

	// Calculate dictance

	function toRad(x) {  // convert degrees to radians
		return x * Math.PI / 180;
	}


	function calcDist(lat1, lon1, lat2, lon2) {
		var R = 6371; // earth's mean radius in km
		var dLat = toRad(lat2-lat1);
		var dLon = toRad(lon2-lon1);
		lat1 = toRad(lat1), lat2 = toRad(lat2);

		var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
		      Math.cos(lat1) * Math.cos(lat2) *
		      Math.sin(dLon/2) * Math.sin(dLon/2);
		var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
		var d = R * c;
		return d;
	}

	//=====================================================
	// Custom navigation                           ========
	//=====================================================

	this.addKegaMove = function(){

		function KegaMoveControl(){}

		KegaMoveControl.prototype = new GControl();

		KegaMoveControl.prototype.initialize = function(m){

			//Container
			var container = document.createElement("div");
			container.id = 'move';

			//Bg
			var m_bg = document.createElement("div");
			m_bg.className = 'm-bg';
			container.appendChild(m_bg);

			//Up
			var btn_up = document.createElement("div");
			btn_up.className = 'btn-up';
			GEvent.addDomListener(btn_up,"click",function(){m.panDirection(0,1)});
			container.appendChild(btn_up);

			//Down
			var btn_down = document.createElement("div");
			btn_down.className = 'btn-down';
			GEvent.addDomListener(btn_down,"click",function(){m.panDirection(0,-1)});
			container.appendChild(btn_down);

			//Left
			var btn_left = document.createElement("div");
			btn_left.className = 'btn-left';
			GEvent.addDomListener(btn_left,"click",function(){m.panDirection(1,0)});
			container.appendChild(btn_left);

			//Right
			var btn_right = document.createElement("div");
			btn_right.className = 'btn-right';
			GEvent.addDomListener(btn_right,"click",function(){m.panDirection(-1,0)});
			container.appendChild(btn_right);

			//Right
			var btn_center = document.createElement("div");
			btn_center.className = 'btn-center';
			GEvent.addDomListener(btn_center,"click",function(){m.returnToSavedPosition()});
			container.appendChild(btn_center);

			m.getContainer().appendChild(container);
			return container;
		};

		KegaMoveControl.prototype.getDefaultPosition=function(){
			return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(5,5));
		};

		map.addControl(new KegaMoveControl());
	}

	this.addKegaZoom = function(){

		var maxzoomLevel = 17
		var minzoomLevel = 6
		var sliderLength = 74;
		var zm_slider;
		var slider;


		function KegaZoomControl(){}

		KegaZoomControl.prototype = new GControl();

		function pixToZoom(pix) {
			var aPix = sliderLength / (minzoomLevel - maxzoomLevel);
			var zl = Math.round(pix / aPix) + maxzoomLevel;
			return zl;
		};

		function zoomToPix(zl){
			var aPix = sliderLength / (minzoomLevel - maxzoomLevel);
			var pix = Math.round((zl-maxzoomLevel) * aPix);
			return pix;
		};

		function setSlider(zl){
			var pix = zoomToPix(zl);
			if (zl <= maxzoomLevel && zl >= minzoomLevel){
				slider.top = pix;
				zm_slider.style.top=pix + 'px';
			}
		}

		function initSlider(m){

			var zl = m.getZoom();
			var pix = zoomToPix(zl);
			if (zl <= maxzoomLevel && zl >= minzoomLevel){
				slider.top = pix;
				zm_slider.style.top=pix + 'px';
			}
		}

		function zoomIn(m){
			var zl = m.getZoom();
			if (zl <= maxzoomLevel){
				m.zoomIn()
			}

		}

		function zoomOut(m){
			var zl = m.getZoom();
			if (zl >= minzoomLevel){
				m.zoomOut()
			}

		}

		function checkMap(m){
			if (maxzoomLevel > m.getCurrentMapType().getMaximumResolution()){
				maxzoomLevel = m.getCurrentMapType().getMaximumResolution();
				alert('max: ' + maxzoomLevel);
			}
			if (minzoomLevel < m.getCurrentMapType().getMinimumResolution()){
				minzoomLevel = m.getCurrentMapType().getMinimumResolution();
				alert('min: ' + minzoomLevel)
			}
		}

		KegaZoomControl.prototype.initialize = function(m){

			checkMap(m);

			//Container
			var container = document.createElement("div");
			container.id = 'zoomLarge';

			//Bg
			var zm_bg = document.createElement("div");
			zm_bg.className = 'zm-bg';
			container.appendChild(zm_bg);

			//Zoom in
			var btn_in = document.createElement("div");
			btn_in.className = 'zm-i';
			GEvent.addDomListener(btn_in,"click",function(){zoomIn(m)});
			container.appendChild(btn_in);

			//Zoom out
			var btn_zout = document.createElement("div");
			btn_zout.className = 'zm-o';
			GEvent.addDomListener(btn_zout,"click",function(){zoomOut(m)});
			container.appendChild(btn_zout);

			//Scroll bg
			var zm_scroll = document.createElement("div");
			zm_scroll.className = 'zm-scroll';
			container.appendChild(zm_scroll);

			//Slider
			zm_slider = document.createElement("div");
			zm_slider.className = 'zm-slider';
			zm_scroll.appendChild(zm_slider);
			slider = new GDraggableObject(zm_slider,{container:zm_scroll});

			initSlider(m);

			GEvent.addListener(m, "zoomend", function(a,b) {setSlider(b)});
	        GEvent.addListener(slider, "dragend", function() {m.setZoom(pixToZoom(slider.top))});
			GEvent.addListener(m,"maptypechanged",function(){checkMap(m); initSlider(m);});

			m.getContainer().appendChild(container);
			return container;
		};

		KegaZoomControl.prototype.getDefaultPosition=function(){
			return new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(24,70));
		};

		map.addControl(new KegaZoomControl());
	}


}


(function() {
	if (document.getElementById('map')){

		var map = document.getElementById('map');

		var patt = new RegExp(/mapoptions\[([^\]]*)\]/);
		var result = patt.exec(map.className);
		if (result){
			var options = result[1].split(',');

			for (i = 0, el = options.length; i < el; i++) {
				//alert(options[i].split(':'));
			}
		}

		gmap = new Map();
		gmap.init();

		//gmap.addControl('show','large');
		gmap.addControl('type','menu');
		gmap.addKegaMove();
		gmap.addKegaZoom();
		gmap.initRoute();
	}
}());






//
//	this.addJSheader = function (api){
//		var headID = document.getElementsByTagName("head")[0];
//		var newScript = document.createElement('script');
//		newScript.type = 'text/javascript';
//		newScript.src = "http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAe1_1F11hJI72f7AeVHt2dhTYDFUCrjNtoGxZn-FxKkIQx8MitRQuandJKNDQAzviZ8hs1MZZS7R6EQ";
//		headID.appendChild(newScript);
//	}

