  var map;

  var layers = new Array();
  var vis = new Array();
  var old_vis = new Array();
  var mark = true;
  var points = new Array();
  var icons = new Array();

  var rand = Math.random(0, 10000);
  var url_kml = "http://" + document.location.host + "/maps/get_points_JSON_main.php?rn=" + rand + "&cat=";
  var claster;


function copy_arr(a){ // из А в В
  b = new Array();
  var i;
  for(i in a){
    b[i] = a[i];
  }
  return b;
}

function create_menu(cats, level){
  var html = '';
  var click = '';
  var img_src = 'http://interesniy.kiev.ua/maps/media/images/icons/gif/';
  var icon;
  var cc;
  var cc2;
  var bb = '';
  var Sicon;
  for(var i = 0; i < cats.length; i++){
	icon = cats[i]['icon'];
	icon = icon.replace(/\.png$/i, '.gif');
	bb = (level == 0) ? ' style="font-weight:bold;"' : '';
	vis[cats[i]['id']] = false;
	if (cats[i]['child'].length > 0){
		cc = ' class="closed submenu" ';
		cc2 = '';
		Sicon = '&nbsp;';
	} else {
		cc = '';
		cc2 = 'background:url(\'' + img_src + icon + '\') no-repeat scroll 0 50%; ';
		Sicon = '<span style="'+cc2+'padding-left:30px;padding-top:3px;padding-bottom:3px;width:32px;">&nbsp;</span>';
	}
	html += '<li '+cc+'><input type="checkbox" value="1" id="' + cats[i]['id'] + '" />' + Sicon + '<span '+bb+'>' + cats[i]['name'] + '</span>';
	if (cats[i]['child'].length > 0){
		html += '<ul>';
	    	html += create_menu(cats[i]['child'], level + 1);
		html += '</ul>';
	}
	html += '</li>';
  }
  return html;
}

function check_box_ch(){
  mark = !mark;
  var inp = $('#treemenu1').find('input:checkbox');
  for (var i = 0; i < inp.length; i++){
      inp[i].checked = mark;
      vis[inp[i].id] = inp[i].checked;
  }
  var t;
  if (mark){
    t = 'Скрыть все';
  } else {
    t = 'Показать все';
  }
  $('#mark').html('<span onclick="check_box_ch();" style="cursor:pointer;">' + t + '</span>');

  mark_on_map();
}

function createMarker(mm, Micon){
	var marker = new GMarker(new GLatLng(mm['lat'], mm['lon']), {icon: Micon, title: mm['name']});
//	var marker = new GMarker(new GLatLng(mm['lat'], mm['lon']), {title: mm['name']});
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(mm['description']);
	});
	return marker;
}

function createLayer(i_l){
  var i;
  var markers = new Array();
  var url = url_kml + i_l;
  GDownloadUrl(url, function(data){
	var data_l = eval("(" + data + ")");
	if (!isset(icons[data_l[i_l]['icon']['name']])){
		var mIcon = new GIcon();
		mIcon.image = data_l[i_l]['icon']['url'];
		mIcon.iconSize = new GSize(32, 32);
		mIcon.iconAnchor = new GPoint(16, 28);
		mIcon.infoWindowAnchor = mIcon.iconAnchor;
		icons[data_l[i_l]['icon']['name']] = mIcon;
	}
	for (i = 0; i < data_l[i_l]['points'].length; i++){
		markers[i] = createMarker(data_l[i_l]['points'][i], icons[data_l[i_l]['icon']['name']]);
		map.addOverlay(markers[i]);
	}
  });

  return markers;
}

function mark_on_map(){
  var i;
  var j;
  var ii;
  var url_kml = "http://interesniy.kiev.ua/maps/i_kiev.php?rn=" + rand + "&cat=";
  var cats_sel = '';

  for (ii in vis){
	i = ii * 1;
    if (vis[i] != old_vis[i]){
      if (!vis[i]){
        if (isset(layers[i])){
//          map.removeOverlay(layers[i]);
		for(j = 0; j < layers[i].length; j++){
			map.removeOverlay(layers[i][j]);
		}
        }
      } else {
        if (!isset(layers[i])){
//          layers[i] = new GGeoXml(url_kml + i);
          layers[i] = createLayer(i);

        } else {
//        map.addOverlay(layers[i]);

	for(j = 0; j < layers[i].length; j++){
		map.addOverlay(layers[i][j]);
	}
	}
      }
    }
    if (vis[i]) cats_sel += ',' + i;
  }
  $('#kmlLink').html('<a href="'+url_kml+cats_sel.substring(1)+'">Получить файл выбранных категорий для просмотра в Google Earth</a>');
  old_vis = copy_arr(vis);
}

function get_checked_box(){
  var inp = $('#treemenu1').find('input:checkbox');
  for (var i = 0; i < inp.length; i++){
      vis[inp[i].id] = inp[i].checked;
  }
  mark_on_map();
}

function isset(  ) {
    var a = arguments, l = a.length, i = 0;
    if (l === 0) {
        throw new Error('Empty isset');
    }
    while (i !== l) {
        if (typeof(a[i]) == 'undefined' || a[i] === null) {
            return false;
        } else {
            i++;
        }
    }
    return true;
}

function create_marker(pp, picon){
  var html_info = '<h3>' + pp['name'] + '</h3>' + pp['html'];
  var marker = new GMarker(new GLatLng(pp['lat'], pp['lon']), {icon:picon, title:pp['name']});
    GEvent.addListener(marker, "click", function() {
      marker.openInfoWindowHtml(html_info);
    });
  $('#s_'+pp['id']).click(function(){  	map.panTo(new GLatLng(pp['lat'], pp['lon']));    marker.openInfoWindowHtml(html_info);
  });
  return marker;
}

// позавыем или скрываем маркер
function s_ch(el){
  if (el.checked){
    map.addOverlay(points[el.id]);
  } else {
    map.removeOverlay(points[el.id]);
  }
}

function marker_result(pp){
  var i;
  for (i in points){
    map.removeOverlay(points[i]);
  }

  var img_src = 'http://interesniy.kiev.ua/maps/media/images/icons/32/';
  points = new Array();
  var icons = new Array();
  var mIcon = new GIcon();
  mIcon.iconSize = new GSize(48, 48);
  mIcon.iconAnchor = new GPoint(24, 43);
  mIcon.infoWindowAnchor = mIcon.iconAnchor;

  for (i = 0; i < pp.length; i++){
    if (!isset(icons[pp[i]['icon']])){
      mIcon = new GIcon(mIcon);
      mIcon.image = img_src + pp[i]['icon'];
      icons[pp[i]['icon']] = mIcon;
    }

    points[pp[i]['id']] = create_marker(pp[i], icons[pp[i]['icon']]);
    map.addOverlay(points[pp[i]['id']]);
  }
}

function print_result(pp){
  var res = '';
  var img_src = 'http://interesniy.kiev.ua/maps/media/images/icons/32/';
  for (var i = 0; i < pp.length; i++){
    res += '<div><input type="checkbox" checked="checked" id="' + pp[i]['id'] + '" onclick="s_ch(this);" /><span style="background:url(\'' + img_src + pp[i]['icon'] + '\') no-repeat scroll 0 50%;padding-left:30px;padding-top:3px;padding-bottom:3px;cursor:pointer;" id="s_'+pp[i]['id']+'">' + pp[i]['name'] + '</span></div>';
  }
  return res;
}

function backToCats(){	map.clearOverlays();	var html = '<div id="mark"><span style="cursor: pointer;" onclick="check_box_ch();">Показать все</span></div>';
	html += '<div id="cats"></div>';
	$('#left-column').html(html);
	create_menu_cat();}

function create_menu_cat(){  var url = 'http://' + document.location.host + '/maps/get_cats_JSON.php?rn=' + rand;
  $.getJSON(url, function (d_cats){
//	  var d_cats = eval("(" + data + ")");
	  var html = '<ul id="treemenu1" class="treeview-famfamfam">';
	  html += create_menu(d_cats, 0);
	  html += '</ul>';
	  old_vis = copy_arr(vis);
	  $('#cats').html(html + '<div id="kmlLink"></div>');

	$('#treemenu1').treeview();
	$('#treemenu1 li.submenu input:checkbox').click(function(){
	  var el = $(this).parent('li').find('input:checkbox');
	  el.attr('checked', $(this).is(':checked'));
	});
	$('#treemenu1 input:checkbox').click(function(){
	  get_checked_box();
	});

  });
}

$(function(){
  var size = getMapSizeForScreen();
  $('#map_overlayed').css({width: size['width']+'px', height: size['height']+'px'});
  w = size['width'] + 4;
  h = size['height'] + 4;
  $('#map_container').css({width: w+'px', height: h+'px'});
  $('#left-column').css('height', size['height']+'px');

  $('#formSearch').submit(function(){
	map.clearOverlays();
	var html = '';
	var url = 'http://' + document.location.host + '/maps/search_points.php?rn=' + rand + '&q=' + $('#query').val();
	var log = $('#left-column').empty().addClass('loading');
	GDownloadUrl(url, function (data){
//alert('ok');
	log.removeClass('loading');
	if (data == -1){$('#left-column').html('<div class="bold">Ни чего не найдено</div>'); marker_result(eval("([])"));} else {
		var search_points = eval("(" + data + ")");
//		var search_points = data;
		html += '<div><span style="cursor:pointer;" onclick="backToCats();">Вернуться к разделам</span></div><div class="bold" style="font-syze:12px;">Нашлось: ' + search_points.length + '</div>';
		html += print_result(search_points);
		$('#left-column').html(html);
		marker_result(search_points);
	}
	});

	return false;
  });

  var i;

  create_menu_cat();

  if (GBrowserIsCompatible()) {
  	map = new GMap2(document.getElementById("map_overlayed"));
  	map.setCenter(new GLatLng(50.453629,30.503828), 13);
  	map.setUIToDefault();


	var publisher_id = 'pub-2102527190568684';
	var adsManagerOptions = {
	  maxAdsOnMap : 2,
	  style: 'adunit',
	  // The channel field is optional - replace this field with a channel number
	  // for Google AdSense tracking
	  channel: '9002002117'
	};
	adsManager = new GAdsManager(map, publisher_id, adsManagerOptions);
	adsManager.enable();

  }

  check_box_ch();
});

function r_win(){
  resizeMapForScreen();
  map.checkResize();
}
$(window).unload( function () {GUnload(); });
$(window).resize(r_win);
