/**
 * @author Alfred Broda
 */
/* Funkcje pomocnicze */

function rand ( n ) {
   		return ( Math.floor ( Math.random ( ) * n + 1 ) );
}
    
function pause(millis) {
        var date = new Date();
        var curDate = null;
        do { curDate = new Date(); }
        while(curDate-date < millis)
}
    
    var map;
   	var geocoder;
	var edit = false;
	var alldesc = new Array();
	var allmarkers = new Array();
	var allpolys = new Array();
	var alllines = new Array();
	var allcats = new Array();
	var bounds;
	var czoom;
	var dragzoomc;
	var controls;
	var drawer;

function checkMap() {
	// Czy istnieje obiekt mapy?
	initAdmin();
	
	//if(typeof(map)!='object') {
	//	initAdmin();
	// Czy div w którym jest to na pewno ten który widzimy?
	//} else 	if (map.getContainer() != $('map')) {
		// Jeżeli nie to restart (optymalne było by przepięcie).
		//initAdmin();
	//}
}

/* Główny konstruktor Mapy */
function init(){
      	map = new GMap2(document.getElementById("map"));
        /* Problemy z zoomem? Czy actz na pewno jest Number()? */
		map.setCenter(new GLatLng(actx,acty), actz);
        map.setMapType(G_NORMAL_MAP);
		map.addMapType(G_SATELLITE_3D_MAP);
    	map.enableScrollWheelZoom();
    	map.enableContinuousZoom();
	
		controls = [
			new GLargeMapControl(), 
			//new GMapTypeControl(),
			new GOverviewMapControl(),
			new GScaleControl()]
		GEvent.addListener(map, 'mouseover', function(){addControls();})
		GEvent.addListener(map, 'mouseout', function(){removeControls();})
		
		/* Moduły dodatkowe */
		setupDragZoom();
    	geocoder = new GClientGeocoder();
		/*
		if (blimit) {
			GEvent.addListener(map, "moveend", function(){
				checkBounds();
			});
		}
		*/
}

function initAdmin(){
  	map = new GMap2(document.getElementById("map"));
    /* Problemy z zoomem? Czy actz na pewno jest Number()? */
	map.setCenter(new GLatLng(actx,acty), actz);
    map.setMapType(G_NORMAL_MAP);
	map.addMapType(G_SATELLITE_3D_MAP);
	map.enableScrollWheelZoom();
	map.enableContinuousZoom();

	controls = [
		new GSmallMapControl(),
		new GMapTypeControl(),
		new GScaleControl()]
	addControls();
	
	/* Moduły dodatkowe */
	//setupDragZoom();
	geocoder = new GClientGeocoder();
	/*
	if (blimit) {
		GEvent.addListener(map, "moveend", function(){
			checkBounds();
		});
	}
	*/
}

function addControls() {
	controls._each(function(control){
		map.addControl(control);
	})
  	if (dragzoomc) map.addControl(dragzoomc);
}

function removeControls() {
	if (dragzoomc) map.removeControl(dragzoomc);
	controls._each(function(control){
		map.removeControl(control);
	})
}

/* Funkcje Mapy */

function mapChange(type) {
    map.setMapType(type);
}
    
/* Funkcje Zoomu i położenia */

function setupDragZoom() {
      /* first set of options is for the visual overlay.*/
      var boxStyleOpts = {
          opacity: .2,
          border: "2px solid red"
      };

      /* second set of options is for everything else */
      var otherOpts = {
          buttonHTML: "<img src='http://gmaps-utility-library.googlecode.com/svn/trunk/dragzoom/release/examples/zoom-button.gif' />",
          buttonZoomingHTML: "<img src='http://gmaps-utility-library.googlecode.com/svn/trunk/dragzoom/release/examples/zoom-button-activated.gif' />",
          buttonStartingStyle: {width: '24px', height: '24px'},
          overlayRemoveTime: 500};
	  dragzoomc = new DragZoomControl(boxStyleOpts, otherOpts, {}),new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(22, 286))
}

/* zoomend, moveend */

function checkBounds() {
	bounds = map.getBounds();
	czoom = map.getZoom();
	var inside = blimit.containsBounds(bounds);
	if (!inside) {
		if (bounds.containsBounds(blimit)) {
			map.setZoom(czoom+1);
			return false;
		} else {
			var ne = bounds.getNorthEast();
			var lne = blimit.getNorthEast();
			var sw = bounds.getSouthWest();
			var lsw = blimit.getSouthWest();
			var dx = 0;
			var dy = 0;
			if (ne.x > lne.x){
				dx = +0.5;
			} else if (sw.x < lsw.x) {
				dx = -0.5;
			};
			if (ne.y > lne.y){
				dy = -0.5;
			} else if (sw.y < lsw.y) {
				dy = +0.5;
			};
			map.panDirection(dx,dy);
			return false;
		}
	} else {
		return true;
	}
}

function wskaz(x,y,z) {
	if (map.getZoom() != Number(z)) {
		map.setZoom(Number(z));
	}
	map.panTo(new GLatLng(x,y));
	// Umieszczenie markera
	if (mark) map.removeOverlay(mark);
	var posn = new GLatLng(	x, y);
	var ico = new GIcon(G_DEFAULT_ICON);
	ico.image = "http://www.google.com/mapfiles/marker_green.png";
 	var opts = { draggable:false, icon: ico };
	mark = new GMarker(posn,opts);
	map.addOverlay(mark, 0, 17);
}

