var map,markers,icon,marker;

$(document).ready(function(){
  
  $('#searchtmblr_menu').click(function(){
    $('#searchbox').slideToggle(100);
  });
  
  $('#top').click(function(){
    $('#top_text').slideToggle(200);
  });

$('#streetselect').hide();
$('#houseselect').hide();
$('#cityselect').load('/search2.php');

$('select#cityselect').change(function()
        { $('#streetselect').load('/search2.php?city='+encodeURI($('#cityselect').val() ) );
	$('#addr_link').html('');
        $('#streetselect').show();
	$('#houseselect').hide();
	$('#searchbox').animate({height:'32px'});
	});

$('select#streetselect').change(function()
        { $('#houseselect').load('/search2.php?city='+encodeURI($('#cityselect').val() )+'&street='+encodeURI($('#streetselect').val() ) );
        $('#houseselect').show();
	$('#searchbox').animate({height:'32px'});	
	});

$('select#houseselect').change(function()
        {
	$.get('/search2.php?city='+encodeURI($('#cityselect').val() )+'&street='+encodeURI($('#streetselect').val() )+'&house='+encodeURI($('#houseselect').val() ), function(data) {
	      $('#searchbox').animate({height:'56px'},100);
	      addMarkerToMap(data);
	      mapToHouse(data);
	      $('#addr_link').html("<a href=\"" + UrlToAddr(data) + "\">ссылка на этот адрес</a>");
	      });
        });

});


function osmu_getTileURL(bounds)
    {
      var res = this.map.getResolution();
      var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
      var y = Math.round((this.maxExtent.top - bounds.top) / (res * this.tileSize.h));
      var z = this.map.getZoom();
      var limit = Math.pow(2, z);

      if (y < 0 || y >= limit)
      {
        return OpenLayers.Util.getImagesLocation() + "404.png";
      }
      else
      {
        x = ((x % limit) + limit) % limit;
	a = new Date().getTime();
        return this.url + z + "/" + x + "/" + y+".png?"+a;
      }
    }

        function style_osm_feature(feature) {
            feature.style = OpenLayers.Util.extend(
{   strokeColor: "#006600",
    strokeWidth: 2,
    strokeOpacity: 1,
    graphicZIndex: 1,
    fillColor: "white",
    fillOpacity: .4,
    strokeDashstyle: "solid",
    fontSize: "18px",
    fontColor: "#000",
    fontWeight: "bold",
    labelAlign: "c",
    fontFamily: "PT Sans, Sans, Arial, Times New Roman"
},null);
	      feature.style.label = feature.attributes.name.replace("микрорайон","");
}

function on_feature_hover(feature) {
            var text ="";
            for (var key in feature.attributes) {
		if( key == 'name' ){
		  text += "<h3>" + feature.attributes[key] + "</h3><br/>";
		} else if( key == 'cladr:suffix' ){
		  text += "статус: " + feature.attributes[key] + "<br/>";
		} else if( key == 'alt_name' ){
		  text += "альтернативное название: <i>" + feature.attributes[key] + "</i><br/>";
		} else if( key == 'description' ) {
		  text += "прим.: <i>" + feature.attributes[key] + "</i><br/>"
		}
            }
           // text += "<br />";
           document.getElementById("description").style.visibility = "visible";
           document.getElementById("description").innerHTML = text;
        } 
        
function off_feature_hover(feature) {
            var text ="";
           document.getElementById("description").style.visibility = "hidden";
           document.getElementById("description").innerHTML = text;
        }   

function init() {
  map = new OpenLayers.Map('map',
    {
      projection: new OpenLayers.Projection("EPSG:900913"),
      displayProjection: new OpenLayers.Projection("EPSG:4326"),
      units: "m",
      numZoomLevels: 19,
      maxResolution: 156543.0339,
      maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508, 20037508.34),

      controls: [
	new OpenLayers.Control.Navigation(),
        new OpenLayers.Control.TouchNavigation({dragPanOptions: {enableKinetic: true}}),
	new OpenLayers.Control.PanZoomBar(),
	new OpenLayers.Control.LayerSwitcher({roundedCornerColor: '#073d7a'}),
	new OpenLayers.Control.Permalink('permalink'),
	new OpenLayers.Control.Attribution(), 
	new OpenLayers.Control.ScaleLine(), 
	new OpenLayers.Control.MousePosition(),
	new OpenLayers.Control.KeyboardDefaults()


      ]
    }
  );

  layer = new OpenLayers.Layer.XYZ(
    "карта",
    "/tiles/${z}/${x}/${y}.png", {
	isBaseLayer: true,
	type: 'png',
	transitionEffect: "resize",
	attribution: '<img src="/img/100.png">',
	visibility: true,
	keyid: "chepetsk",
        displayOutsideMaxExtent: true,
        wrapDateLine: true,
        layerCode: "M"
      }
  );
  
  var layerTileSize = new OpenLayers.Size(1024,1024);
  layer.setTileSize(layerTileSize);

  layer.events.register("loadstart", null, function() { document.getElementById("description").innerHTML = "минуточку..."; document.getElementById("description").style.visibility = "visible"; })
  layer.events.register("loadend", null, function() { document.getElementById("description").innerHTML = ""; document.getElementById("description").style.visibility = "hidden"; })

  bldng = new OpenLayers.Layer.XYZ(
    "3D-здания",
    "/btiles/${z}/${x}/${y}.png", {
	isBaseLayer: false,
	type: 'png',
	transitionEffect: "resize",
	keyid: "3d",
        displayOutsideMaxExtent: true,
        layerCode: "D",
	visibility: false
      }
  );
  
  bldng.setTileSize(layerTileSize);
  map.addLayers([layer,bldng]);

var layebm = new OpenLayers.Layer.GML("микрорайоны", "/osm/1335316.osm", {
        projection: new OpenLayers.Projection("EPSG:4326"),
        styleMap: StyleBounarySuburb,
        visibility: false,
	keyid: "suburb",
        displayOutsideMaxExtent: true,
        wrapDateLine: true,
        layerCode: "S",
        rendererOptions: {zIndexing: true},
        format: OpenLayers.Format.OSM,
        formatOptions: {extractStyles: false}
   }

);
    
 layebm.events.register("loadstart", null, function() { document.getElementById("description").innerHTML = "минуточку..."; document.getElementById("description").style.visibility = "visible"; })
 layebm.events.register("loadend", null, function() { document.getElementById("description").innerHTML = ""; document.getElementById("description").style.visibility = "hidden"; })
    
  map.addLayers([layebm]);
  
  layebm.preFeatureInsert = style_osm_feature;
  
var select = new OpenLayers.Control.SelectFeature(layebm, {
  'hover':true,
  'onSelect': on_feature_hover,
  'onUnselect': off_feature_hover
})
map.addControl(select);
select.activate();

var layerele = new OpenLayers.Layer.XYZ(
    "высоты",
    "http://xn--e1aaps0bc.net/tiles-elev/${z}/${x}/${y}.png", {
	isBaseLayer: false,
	type: 'png',
	transitionEffect: "resize",
	visibility: false,
	keyid: "ele",
        displayOutsideMaxExtent: true,
        wrapDateLine: true,
        layerCode: "E"      }
  );

layerele.setTileSize(layerTileSize);
  
layerele.events.register("loadstart", null, function() { document.getElementById("description").innerHTML = "минуточку..."; document.getElementById("description").style.visibility = "visible"; })
layerele.events.register("loadend", null, function() { document.getElementById("description").innerHTML = ""; document.getElementById("description").style.visibility = "hidden"; })

map.addLayers([layerele]);
  

markers = new OpenLayers.Layer.Markers( "Markers", {
    projection: new OpenLayers.Projection("EPSG:900913"),
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    numZoomLevels: 19,
    maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508),
    maxResolution: 156543,
    units: "m",
    displayInLayerSwitcher: false,
  }

);

  
map.addLayer(markers);

var size = new OpenLayers.Size(48,48);
var offset = new OpenLayers.Pixel(-5,-45);
icon = new OpenLayers.Icon('/img/flag-yellow-48.png',size,offset);


  if (!map.getCenter()) {
    var lonlat = new OpenLayers.LonLat(50.03685,58.54242);
    var zoom = 14;
    lonlat.transform(map.displayProjection, map.projection);
    map.setCenter(lonlat, zoom);
  }

var tmp = new Array();      // два вспомагательных
var tmp2 = new Array();     // массива
var param = new Array();
 
var get = location.search;  // строка GET запроса
if(get != '') {
tmp = (get.substr(1)).split('&');   // разделяем переменные
for(var i=0; i < tmp.length; i++) {
tmp2 = tmp[i].split('=');       // массив param будет содержать
param[tmp2[0]] = tmp2[1];       // пары ключ(имя переменной)->значение
}

  if (param["marker"] == 'c') {
    var xxyy = param["lat"] + "," + param["lon"];
    addMarkerToMap(xxyy);
  } 
}


}

function addMarkerToMap(xym) {

  var xy = xym.split(',');

  var marker = new OpenLayers.Marker(new OpenLayers.LonLat(xy[1],xy[0]).transform(map.displayProjection, map.projection),icon);
  markers.addMarker(marker);
 
}

function mapToHouse (xym) {
  var xy = xym.split(',');
  map.setCenter(new OpenLayers.LonLat(xy[1],xy[0]).transform(map.displayProjection, map.projection), 16, true);
}

function UrlToAddr (xym) {
  var xy = xym.split(',');
  return "/?marker=c&zoom=17&lat=" + xy[0] + "&lon=" + xy[1];
}
