/* ui: widening and narrowing the map */

function navigation_toggle(obj){
	if (!jq('#portal-column-one').is(':visible')) {
		jq('#navigation_toggle').addClass('visible');
		jq('#portal-column-one').show();
	}
	else {
		jq('#navigation_toggle').removeClass('visible');
		jq('#portal-column-one').hide();
	 }
  }

/* ui functions for the categories list */

function categorieslist_toggle(obj){
	if (!jq('#categories_list').is(':visible')) {
		jq('#categories_list').show();
	}
	else {
		jq('#categories_list').hide();
	 }
}

function allcategories_toggle(obj){
  	var checkboxes=jq('#categories_ul > li > .category-checkbox');
        var allbutton=jq('#categories_select_all_button');
        var isAusblenden=allbutton.html()=='Alle ausblenden'; // needs i18n
  	checkboxes.each(function(i, checkbox){
  			checkbox.checked = !isAusblenden;
  		}
	)
        allbutton.html('Alle '+(isAusblenden?'ein':'aus')+'blenden');
        var from=isAusblenden?mappoints:hiddenmarkers;
        var to=isAusblenden?hiddenmarkers:mappoints;
        jq(from.markers).each(function (i, marker) {
          from.removeMarker(marker);
          to.addMarker(marker);
          })
}

function category_toggle(obj, cat){
  if (obj.checked) {
  jq(hiddenmarkers.markers).each(
    function (i, marker) {
      if (marker.primcategory==cat) {
        hiddenmarkers.removeMarker(marker);
        mappoints.addMarker(marker);
      }
    }
  )
  } else {
    jq(mappoints.markers).each(
      function (i, marker) {
        if (marker.primcategory==cat) {
          mappoints.removeMarker(marker);
          hiddenmarkers.addMarker(marker);
        }
      }
    )
  }
}

/* ui: using ajax to display a helptext or a location description (here: the helptext) */

function display_help() {
	if (!jq('#helptext').is(':visible')) {
		jq('#locations_langtexte').load('helpText');
	}
	else {
		jq('#helptext').hide();
	 }
	 if (clickedmarker) {
		jq(clickedmarker.icon.imageDiv).removeClass("selectedMarker");
		clickedmarker=null;
	}
}

/* ui: the location search box */

function restrict_locations(searchstring) {

	hiddenmarkers.clearMarkers();
	mappoints.clearMarkers();
	jq.getJSON("locations_json?searchstring="+searchstring+"&jsonp=?",
        function(data){
		jq.each(data, function(i,item){
			var size = new OpenLayers.Size(14,14);
			var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));
			addPopupMarker(new OpenLayers.LonLat(item['x'], item['y']),
				item['popupHtml'],
				item['id'],
				item['primaryCategory'],
				item['icon'], size, offset
				);
		});

		// mark the clicked again
		jq(mappoints.markers).each(function (i, marker) {
			if (marker.location_id==clickedmarker.location_id) {
				jq(marker.icon.imageDiv).addClass("selectedMarker");
				clickedmarker=marker;
			};
		});

		// hide the mappoints in hidden categories
		var checkboxes=jq('#categories_ul > li > .category-checkbox');
		checkboxes.each(function(i, checkbox){
			if (!checkbox.checked) {
				//console.log(jq(checkbox).attr('ncategory')+' category to hide');
				jq(mappoints.markers).each(function (i, marker) {
					//console.log(marker.primcategory);
					if (marker.primcategory==jq(checkbox).attr('ncategory')) {
						mappoints.removeMarker(marker);
						hiddenmarkers.addMarker(marker);
					}
				})
			}
		});

	}); //json request

}

/* the map */

var map;
var mappoints;

var currentpopup=null;
var clickedpopup=null;
var clickedmarker=null;
var allpopupsshown=false;

var hiddenmarkers=new OpenLayers.Layer.Markers("hidden");

OpenLayers.Popup.COLOR='transparent';

var mapserver=[
      'http://maps1.muenchen.de/ka-map/tile.php?',
      'http://maps1.muenchen.de/ka-map/tile.php?',
      'http://maps2.muenchen.de/ka-map/tile.php?',
      'http://maps2.muenchen.de/ka-map/tile.php?',
      'http://maps3.muenchen.de/ka-map/tile.php?',
      'http://maps3.muenchen.de/ka-map/tile.php?',
      'http://maps4.muenchen.de/ka-map/tile.php?',
      'http://maps4.muenchen.de/ka-map/tile.php?'
  ];

var hintergrundluftbild=new OpenLayers.Layer.KaMap
  ( 'Luftbild',
    mapserver,
    {
      map: 'luftbild_2008-1',
      i: 'JPG',
      g: 'luftbild',
      units: 'm'//,
    },
    {isBaseLayer: true}
  );

var hintergrundhybrid=new OpenLayers.Layer.KaMap
  ( 'Hybrid',
    mapserver,
    {
      map: 'hybrid_2008-1',
      i: 'JPG',
      g: 'hybrid',
      units: 'm'//,
    },
    {isBaseLayer: true}
  );

var hintergrundkarte=new OpenLayers.Layer.KaMap
  ( 'Karte',
    mapserver,
    {
      map: 'karte_2008-1',
      i: 'GIF',
      g: 'background',
      units: 'm'//,
    },
    {isBaseLayer: true}
  );

var map_centerx=4468750;
var map_centery=5333750;
var map_height=12500;
var map_width=12500;

var map_x_nw=map_centerx-map_width/2;
var map_y_nw=map_centery+map_height/2;
var map_x_se=map_centerx+map_width/2;
var map_y_se=map_centery-map_height/2;

// left, bottom, right, top
var nsdokmapextent = new OpenLayers.Bounds(map_x_nw, map_y_se, map_x_se, map_y_nw);

function create_map() {

    return new OpenLayers.Map
        ( 'map',
          {
              controls:
              [
               new OpenLayers.Control.PanZoomBar(),
               new OpenLayers.Control.MouseDefaults(),
               new OpenLayers.Control.Scale( $('scalediv') )
	       ],
              units:          'm',
              projection:     'epsg:31468',
              maxResolution:  'auto',
              maxExtent:      nsdokmapextent,
              restrictedExtent: nsdokmapextent,
              scales:         [ //default-values are: 200000, 150000,100000,75000,50000,25000,15000,10000,7500,5000,2500,1000
                                60000,25000,15000,10000,7500,5000,2500,1000 ],
              minScale:       60000,
              maxScale:       1000,
              theme:null
          } );
}

function addPopupMarker(lonLat, popupContentHTML, id, primcategory, iconUrl, iconSize, iconOffset) {

            //var marker = feature.createMarker();
            //marker.icon = icon;
            //does not work

           //option: http://openlayers.org/dev/examples/styles-rotation.html, but I will stick to tested markers+icons
  function create_marker() {
      // icon case
      var icon = new OpenLayers.Icon(iconUrl, iconSize, iconOffset);
      // iconSize defaults to (20,20) and iconOffset defaults to (-10,-10)
      return new OpenLayers.Marker(lonLat, icon);
    }

  marker=create_marker();
  marker.location_id=id;
  marker.primcategory=primcategory;

            marker.popup=new OpenLayers.Popup("popup"+id,
                                              lonLat,
                                              new OpenLayers.Size(196,48),
//                                   'autoSize': true, does not work in FF
                                              popupContentHTML,
                                              false);

	    // popup events handling functions
            var markerMouseover=function (evt) {
                if (this.popup != currentpopup) {
                    map.addPopup(this.popup);
                    clickedpopup=null;
                   if(currentpopup != null) {
                     map.removePopup(currentpopup);
                   }
                   currentpopup=this.popup;
                }
                OpenLayers.Event.stop(evt);
            };
            marker.events.register("mouseover", marker, markerMouseover);

            var markerMouseout=function (evt) {
                if (!clickedpopup && this.popup == currentpopup) {
                     map.removePopup(currentpopup);
                   currentpopup=null;
                }
                OpenLayers.Event.stop(evt);
            };
            marker.events.register("mouseout", marker, markerMouseout);

            var markerClick=function (evt) {
                jq('#locations_langtexte').load(this.location_id+'/location_description_view');
				if (jq('#categories_list').is(':visible')) {
					jq('#categories_list').hide();
				}
		if (clickedmarker) {jq(clickedmarker.icon.imageDiv).removeClass("selectedMarker")};
		clickedmarker=this;
		jq(clickedmarker.icon.imageDiv).addClass("selectedMarker");
                //clickedpopup=this.popup;
                OpenLayers.Event.stop(evt);
            };
            marker.events.register("click", marker, markerClick);

            mappoints.addMarker(marker);
}


