	var ge = null;
	var route = null;
	var route_placemark = null;
	var look_lat = 48.02103805541992;//48.003623962402344;
	var look_lon = 37.81015396118164;//37.804378509521484;
	var map = null;
	
	var usr = null;
	var mode = 0;
	var route_point = 1;
	var route_points_json = '';
	
	var obj_id = null;
	
	var kml_point = 1;
	var kmlString = '';
	
	var delete3Dobject = false;
	var delete3DobjectLastId = null;
	
	var panoramio_obj = null;
	var wiki_obj = null;
	
	var placemarks = new Array();
	var objects_3d = new Array();
	
	var searchWindow = null;
	
	var current_tour = null;

	google.load("earth", "1");
	google.load("maps", "2.xx", {"language" : "ru"});
	
	function showHideStreets(){
		var show = $("#show_streets").attr("checked");
		ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, show);
		ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, show);	
	}

	function setGMapsSize(){
		if(document.getElementById('gmaps')){
			$("#gmaps").attr("style", "width:"+sizes[0]+"px; height:"+sizes[1]+"px;");
		}
		else{
			window.setTimeout(function(){setGMapsSize();}, 50);
		}
	}
	setGMapsSize();
	
	function init(){
		if(google && document.getElementById('gmaps') && google.earth && google.maps){
			window.setTimeout(function(){google.earth.createInstance("gmaps", initSuccessCallback, initFailureCallback);  }, 250);
		}
		else{
			window.setTimeout(function(){ init(); }, 250);
		}
	}

	function initSuccessCallback(object){
		ge = object;
		ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
		if(is_show_3d == 1){
			ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, true);
		}
		ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
		ge.getLayerRoot().enableLayerById(ge.LAYER_TERRAIN, true);

		ge.getOptions().setAtmosphereVisibility(true);
		ge.getOptions().setStatusBarVisibility(true);
		ge.getWindow().setVisibility(true);
		ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);

  		google.earth.addEventListener(ge.getWindow(), 'click', function(event) {
			if(mode == 1){
				$("#object_lat").val(event.getLatitude());
				$("#object_lon").val(event.getLongitude());			
			}
			else if(mode == 4){
				if(route_point == 1){
					$("#point1_route_lat").val(event.getLatitude());
					$("#point1_route_lon").val(event.getLongitude());
					route_point = 2;
					$("#usr_info").text('Для автоопределения координаты конца маршрута сделайте клик на карте.');
				}
				else if(route_point == 2){
					$("#point2_route_lat").val(event.getLatitude());
					$("#point2_route_lon").val(event.getLongitude());
					route_point = 1;
					$("#usr_info").text('Для автоопределения координаты начала маршрута сделайте клик на карте.');
				}
			}
			else if(mode == 8){
				if(kml_point == 1){
					$("#3d_object_lat1").val(event.getLatitude());
					$("#3d_object_lon1").val(event.getLongitude());
					kml_point = 2;
					$("#usr_info").text('Для автоопределения 2-й точки сделайте клик на карте.');
				}
				else if(kml_point == 2){
					$("#3d_object_lat2").val(event.getLatitude());
					$("#3d_object_lon2").val(event.getLongitude());
					kml_point = 3;
					$("#usr_info").text('Для автоопределения 3-й точки сделайте клик на карте.');
				}
				else if(kml_point == 3){
					$("#3d_object_lat3").val(event.getLatitude());
					$("#3d_object_lon3").val(event.getLongitude());
					kml_point = 4;
					$("#usr_info").text('Для автоопределения 4-й точки сделайте клик на карте.');
				}
				else if(kml_point == 4){
					$("#3d_object_lat4").val(event.getLatitude());
					$("#3d_object_lon4").val(event.getLongitude());
					kml_point = 1;
					$("#usr_info").text('Для автоопределения 1-й точки сделайте клик на карте.');
				}				
			}			
  		});
			
		load_objects(null,null,true,false);		
		//look_at(look_lat, look_lon);
		
		load3Dobjects();
		
		show_hide_panoramio();
		show_hide_wiki();
		
		map = new GMap2();
		map.setCenter(new GLatLng(look_lat, look_lon));
	}
	
	function initFailureCallback(errorCode){
		alert("Ошибка инициализации Google Earth Plugin.\nКод ошибки: "+errorCode);
	}
	
	function look_at(lat, lon){
		var lookAt = ge.createLookAt('');
		lookAt.setLatitude(lat);
		lookAt.setLongitude(lon);
		lookAt.setAltitude(0);
		lookAt.setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);
		lookAt.setRange(200*2);
		lookAt.setTilt(24);
		lookAt.setHeading(0);
		ge.getView().setAbstractView(lookAt);		
	}

	function removeAllPlacemarks(){
 		/*var children = ge.getFeatures().getChildNodes();
      	for(var i = 0; i < children.getLength(); ++i){
    		var placemark = children.item(i);
			if()
     		ge.getFeatures().removeChild(placemark); 
		}*/
		for(var i = 0; i < placemarks.length; ++i){
     		ge.getFeatures().removeChild(placemarks[i]); 
		}
		placemarks = new Array();
	}

	function removePlacemark(id){
 		var children = ge.getFeatures().getChildNodes();
      	for(var i = 0; i < children.getLength(); ++i){
    		var placemark = children.item(i);
			if(placemark.getSnippet() == id){
     			ge.getFeatures().removeChild(placemark); 
				break;
			}
		}
	}
	
	function loadSingle3DModel(file){
		var href = window.location.href.replace(/gmaps/, "")+'gmaps/upload/kml/'+file;
		//alert("href="+href);
		google.earth.fetchKml(ge, href, function(kmlObject) {
     		if (kmlObject){
				ge.getFeatures().appendChild(kmlObject);
				alert('Объект добавлен на карту');
			}
  		});	
	}

	function show_hide_panoramio(){
		var show = $("#show_panoramio").attr("checked");
		if(show && panoramio_obj==null){
			var href = 'http://www.panoramio.com/kml/?all';
			google.earth.fetchKml(ge, href, function(kmlObject) {
				if (kmlObject){
					ge.getFeatures().appendChild(kmlObject);
					panoramio_obj = kmlObject;
				}
			});	
		}
		else if(panoramio_obj!=null){
			ge.getFeatures().removeChild(panoramio_obj);
			panoramio_obj = null;
		}
	}
	
	function show_hide_wiki(){
		var show = $("#show_wiki").attr("checked");
		if(show && wiki_obj==null){
			var href = 'http://tools.wikimedia.de/~kolossos/world-link.php?lang=ru';
			google.earth.fetchKml(ge, href, function(kmlObject) {
				if (kmlObject){
					ge.getFeatures().appendChild(kmlObject);
					wiki_obj = kmlObject;
				}
			});	
		}
		else if(wiki_obj!=null){
			ge.getFeatures().removeChild(wiki_obj);
			wiki_obj = null;
		}
	}

	function show_hide_objects(){
		var show = $("#show_objects").attr("checked");
		if(show){
			load_objects(null,null,false,true);	
		}
		else{
			for(var i=0;i<placemarks.length;i++){
				ge.getFeatures().removeChild(placemarks[i]);
			}
			placemarks = new Array();
		}
	}
	
	function show_hide_3d(){
		var show = $("#show_3d").attr("checked");
		if(show){
			load3Dobjects();	
		}
		else{
			for(var i=0;i<objects_3d.length;i++){
				ge.getFeatures().removeChild(objects_3d[i]);
			}
			objects_3d = new Array();
		}
	}	
	
	function load3Dobjects(){
		$.ajax({
			type: "GET",
			url: "/gmaps/api/api.php?act=kml",
			success: function(msg){
				var retObj = eval("("+msg+")");
				var flag = true;
				if(retObj.error==""){
					for (object in retObj.objects){
						if(retObj.objects[object].kml){
						var href = window.location.href.replace(/gmaps/, "")+'gmaps/upload/kml/'+retObj.objects[object].kml;
						//alert("href="+href);
						//var id = retObj.objects[object].id;
						google.earth.fetchKml(ge, href, function(kmlObject) {
     						if (kmlObject){
								//alert(id+"-"+retObj.objects[object].kml);
								//kmlObject.setSnippet(''+id);
								ge.getFeatures().appendChild(kmlObject);
								objects_3d.push(kmlObject);
								//set listeners
  								/*google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
									if(delete3Dobject && event.getTarget().getType() == 'KmlPlacemark' && delete3DobjectLastId!=event.getTarget().getSnippet()){
										delete3DobjectLastId = event.getTarget().getSnippet();
										event.preventDefault(); 
										$.ajax({
											type: "POST",
   											url: "/gmaps/api/api.php",
   											data: "act=del3d&id="+delete3DobjectLastId,
   											success: function(msg){
												if(msg.search(/ERROR/)!=-1){
													alert("Не удалось удалить объект. Ошибка сервера.");
												}
												else{
													ge.getFeatures().removeChild(event.getTarget());
													delete3Dobject = false;
     												alert("Объект удален!");
												}
   											},
											failure: function(msg){
												alert( "Не удалось удалить объект. Ошибка: "+msg);
											}
 										});
									}									
  								});*/
							}
  						});
						}
  					}						
				}
				else{
					alert( "Не удалось загрузить объект(ы). Ошибка: " + retObj.error );
				}
			},
			failure: function(msg){
				alert("Не удалось загрузить объект(ы). Ошибка: "+msg);
			}
		});					
	}
	
	function load_objects(filter, value, start, nonscale){
		var str_filter = '';
		if(filter){
			if(filter=='usr_filter_gui'){
				if($("#usr_filter_gui_value").val()=="найти..." || $("#usr_filter_gui_value").val().indexOf(" ")==0){
					alert("Строка поиска пуста");
					return;				
				}
				str_filter+="&filter="+$("#usr_filter_gui_filter").val()+"&value="+$("#usr_filter_gui_value").val()+"&type="+filter;
			}
			else if(filter=='usr_filter_work'){
				if($("#mod_search_searchword").val()=="найти..." || $("#mod_search_searchword").val().indexOf(" ")==0){
					alert("Строка поиска пуста");
					return;				
				}			
				str_filter+="&filter="+$(":radio[name=select_sw]").filter(":checked").val()+"&value="+$("#mod_search_searchword").val()+"&type="+filter;
			}
			else{
				str_filter+="&filter="+filter+"&value="+value+"&type=-1";
			}
		}
		
		$.ajax({
			type: "GET",
			url: "/gmaps/api/api.php?act=load"+str_filter,
			success: function(msg){
				var retObj = eval("("+msg+")");
				var flag = true;
				var count = 0;
				if(retObj.error==""){
					for (object in retObj.objects){
  						if(retObj.objects[object].id){ count++; }
  					}
					for (object in retObj.search){
  						if(retObj.search[object].page_id){ count++; }
  					}
					if(count>0){
						removeAllPlacemarks();
					}
					count = 0;
					
					for (object in retObj.objects){
  						if(retObj.objects[object].id){ add_placemark(retObj.objects[object].id, retObj.objects[object].name, retObj.objects[object].lat, retObj.objects[object].lon); count++; }
  					}
					
					if(count>0){
						//alert(1);
						if(start){
							//alert(2);
							look_at(look_lat, look_lon);
							//alert(2.1);
						}
						else if(!nonscale){
							//alert(3);
							showRangeRadius(retObj.objects);
							//alert(3.1);
						}
						//alert(4);
					}
					
					if(filter){						
						var searchString = '<h2>Результаты поиска:</h2>';
						var found_id = new Array();
						for (object in retObj.search){
							if(retObj.search[object].page_id){
								found_id.push(retObj.search[object].page_obj_id);
								searchString+= '<a href="/gmaps/pages.php?id='+retObj.search[object].page_obj_id+'&page_id='+retObj.search[object].page_id+'&type='+retObj.search[object].page_type+'&show_page=1&hide_back=1" target="_blank" onclick="window.opener.window.look_at('+retObj.search[object].page_obj_lat+','+retObj.search[object].page_obj_lon+')"><b>'+retObj.search[object].page_obj_name+'</b></a><br />';
								searchString+= '<span style="width:100%;height:100px;overflow:hidden;"><label>'+retObj.search[object].page_text+'</label></span><br />';
								searchString+= '<br />';
							}
						}
					
						for (object in retObj.objects){
							var not_found = true;
							for(var i=0;i<found_id.length;i++){
								//alert(retObj.objects[object].id+" - "+found_id[i]);
								if(retObj.objects[object].id == found_id[i]){
									not_found = false;
									break;
								}
							}
						
							if(retObj.objects[object].id && not_found){ 
								searchString+= '<a href="#" onclick="window.opener.window.look_at('+retObj.objects[object].lat+','+retObj.objects[object].lon+')"><b>'+retObj.objects[object].name+'</b></a><br />';
								searchString+= '<br />';							
							}
						}
						
						if(searchString == '<h2>Результаты поиска:</h2>'){
							searchString+= 'В объектах информация не найдена.';
						}					
						
						var leftvar = (screen.width-700)/2;
						var topvar = (screen.height-500)/2;
					
						if(searchWindow){
							searchWindow.close();
						}
					
						searchWindow = window.open('/gmaps/search.html', "Panel", "menubar=no,width=700,height=500,left="+leftvar+",top="+topvar+",toolbar=no,scrollbars=yes");
						window.setTimeout(function(){fill_search_window(searchWindow, searchString);}, 250);
					}	

				}
				else{
					alert( "Не удалось загрузить объект(ы). Ошибка: " + retObj.error );
				}
			},
			failure: function(msg){
				alert("Не удалось загрузить объект(ы). Ошибка: "+msg);
			}
		});	
	}

	function showRangeRadius(objects){	
		//detect all points mass center
		var x = 0;
		var y = 0;
		var counter = 0;
		for (object in objects){
			if(objects[object].id){ 
				x+=objects[object].lat*1;
				y+=objects[object].lon*1;
				counter++;
			}
  		}		
		x=x/counter;
		y=y/counter;

		//find radius
		var radius = 0;
		
		for (object in objects){
			if(objects[object].id){ 
				var tempDistance = calcGEODistance(x,y,objects[object].lat*1,objects[object].lon*1);
				if(radius<tempDistance){
					radius = tempDistance;
				}			
			}
  		}
		
		//alert("radius="+radius+", counter="+counter);
		if(radius == 0 || counter==1){
			radius = 200;
		}

		var lookAt = ge.createLookAt('');
		lookAt.setLatitude(x);
		lookAt.setLongitude(y);
		lookAt.setAltitude(0);
		lookAt.setRange(radius*3);
		lookAt.setTilt(24);
		lookAt.setHeading(0);
		ge.getView().setAbstractView(lookAt);
	};
	
	function calcGEODistance(x1, y1, x2, y2){
		var pi = 3.14159265358979;
		var rad = 6372795;

		var lat1 = y1*pi/180;
		var lat2 = y2*pi/180;
		var long1 = x1*pi/180;
		var long2 = x2*pi/180;

		var cl1 = Math.cos(lat1);
		var cl2 = Math.cos(lat2);
		var sl1 = Math.sin(lat1);
		var sl2 = Math.sin(lat2);
		var delta = long2 - long1;
		var cdelta = Math.cos(delta);
		var sdelta = Math.sin(delta);

		var p1 = Math.pow((cl2*sdelta),2);
		var p2 = Math.pow(((cl1*sl2) - (sl1*cl2*cdelta)),2);
		var p3 = Math.pow((p1 + p2),0.5);
		var p4 = sl1*sl2;
		var p5 = cl1*cl2*cdelta;
		var p6 = p4 + p5;
		var p7 = p3/p6;
		var anglerad = Math.atan(p7);
		var dist = anglerad*rad;

		return dist;
	};	
	
	function fill_search_window(wind, html){
		if(wind.document.getElementById('main_body')){
			wind.document.getElementById('main_body').innerHTML = html;			
		}
		else{
			window.setTimeout(function(){fill_search_window(wind,html);}, 250);
		}
	}

	function add_object(){
		if($("#object_name").val()=="" || $("#object_lat").val()=="" || $("#object_lon").val()==""){
			alert("Заполните данные объекта!");
			return;
		}
		
		var name = $("#object_name").val();
		var lat = $("#object_lat").val();
		var lon = $("#object_lon").val();
		
		$.ajax({
   			type: "POST",
   			url: "/gmaps/api/api.php",
   			data: "act=new&name="+name+"&lat="+lat+"&lon="+lon,
   			success: function(msg){
				if(msg.search(/ERROR/)!=-1){
					alert("Не удалось добавить объект. Ошибка сервера.");
				}
				else{
					var retObj = eval("("+msg+")");
					add_placemark(retObj.id, name, lat, lon);
     				alert("Объект добавлен!");
				}
   			},
			failure: function(msg){
				alert( "Не удалось добавить объект. Ошибка: "+msg);
			}
 		});						
	}

	function add_placemark(id, name, lat, lon){
		// Create the placemark.
		var placemark = ge.createPlacemark('');
		placemark.setName(name);
		placemark.setSnippet(''+id);
		
		//set listeners
  		google.earth.addEventListener(placemark, 'click', function(event) {
			//ge.setBalloon(null);

			event.preventDefault(); 
			var div = document.createElement('DIV');
			
			obj_id = event.getTarget().getSnippet();
			
			if(mode == 0){
				//var content = '<table style="text-align:center;width:320px;height:240px" border="0"><tr><td>';
				/*var content = '<span id="placemark_menu" style="text-align:center">';
				content += '<object width="320" height="240">';
content += '</span>';

				//content += '</td></tr></table>';
				content += '<script type="text/javascript">';
				content += "	alert(1);";
				content += 'if (swfobject.hasFlashPlayerVersion("10.0.0")) {';
				//content += "	alert(2)";
				content += "	var fn = function() {";
				//content += "	alert(3)";
				content += '		var att = { data:"/gmaps/swf/galery_sd.swf", width:"320", height:"240" };';
				content += "		var par = {";
				content += '			menu:"true",';
				content += '			quality:"high",';
				content += '			wmode:"opaque"';
				content += "		};";
				content += '		var id = "placemark_menu";';
				content += "		var myObject = swfobject.createSWF(att, par, id);";
				content += "	};";
				//content += "	alert(4)";
				content += "	swfobject.addDomLoadEvent(fn);";
				//content += "	alert(5);";
				content += "}";
				content += "</script>";
					
				div.innerHTML = content;

				balloon = ge.createHtmlDivBalloon('');
				//balloon = ge.createHtmlStringBalloon('');

				balloon.setMaxWidth(350);
				balloon.setBackgroundColor('#333333');
				balloon.setFeature(event.getTarget());
				balloon.setContentDiv(div);
				//balloon.setContentString(content);

				ge.setBalloon(balloon);	*/
				
   var balloon = ge.createHtmlStringBalloon('');
   balloon.setFeature(event.getTarget());
   balloon.setBackgroundColor('#333333');
   balloon.setMaxWidth(350);

   balloon.setContentString(
      ' <object width="320" height="240"><param name="movie" '
      + 'value="/gmaps/swf/galery_sd.swf"/>'
      + '<param name="allowFullScreen" value="true"/>'
      + '<embed src="/gmaps/swf/galery_sd.swf" '
      + 'type="application/x-shockwave-flash" allowfullscreen="false" '
      + 'width="320" height="240"></embed></object>');

   ge.setBalloon(balloon);
				

				//setSWFMenu();
			}
			else if(mode == 2){				
				$("#edit_obj").attr("src", "/gmaps/edit.php?id="+obj_id);
				$("#edit_cell").attr("style", "display: block;");
			}
			else if(mode == 3){
				$("#upl_photo").attr("src", "/gmaps/forms/photo.php?id="+obj_id);
				$("#upl_icon").attr("src", "/gmaps/forms/icon.php?id="+obj_id);
				$("#upl_data").attr("src", "/gmaps/forms/tour.php?id="+obj_id);
				$("#upl_file").attr("src", "/gmaps/forms/file.php?id="+obj_id);
				$("#upload_cell").attr("style", "display: block;");
			}
			else if(mode == 9){
				$("#pages_obj").attr("src", "/gmaps/pages.php?id="+obj_id);
				$("#pages_cell").attr("style", "display: block;");
			}			
  		});			

		// Define a custom icon.
		var icon = ge.createIcon('');
		icon.setHref(window.location.href.replace(/gmaps/, "")+'/gmaps/icon.php?id='+id+'&showonlyicon=1');
		
		var style = ge.createStyle(''); //create a new style
		style.getIconStyle().setIcon(icon); //apply the icon to the style
		style.getIconStyle().setScale(1.0);
		placemark.setStyleSelector(style); //apply the style to the placemark

		//alert("id="+id+", lat="+lat+", lon="+lon);
		// Set the placemark's location.  
		var point = ge.createPoint('');
		point.setLatitude(1*lat);
		point.setLongitude(1*lon);
		placemark.setGeometry(point);

		// Add the placemark to Earth.
		ge.getFeatures().appendChild(placemark);

		placemarks.push(placemark);
	}
	
	//depricated
	function setSWFMenu(){
		if (swfobject.hasFlashPlayerVersion("10.0.0") && document.getElementById('placemark_menu')) {
				 	var fn = function() {
				 		var att = { data:"/gmaps/swf/galery_sd.swf", width:"320", height:"240" };
				 		var par = {
				 			menu:"true",
				 			quality:"high",
				 			wmode:"opaque"
				 		};
				 		var id = "placemark_menu";
				 		var myObject = swfobject.createSWF(att, par, id);
				 	};
				 	swfobject.addDomLoadEvent(fn);
		}
		else{
			window.setTimeout(function(){ setSWFMenu(); }, 200);
		}
	}
	
    function sendToJavaScript(value) {
		var fileName = '';
		var sizes = null;
		var url = '';
		if(value == 1){ //3D анимация
			fileName = 'view.php';
			sizes = sizes_3d;
		}
		else if(value == 2){//Фотографи
			fileName = 'photo.php';
			sizes = sizes_foto;
		}
		else if(value == 3){//Общая информация
			fileName = 'pages.php';
			sizes = sizes_gi;
			url = '/gmaps/'+fileName+"?id="+obj_id+"&show=1";
		}
		else if(value == 4){//Виртуальные туры
			fileName = 'tour.php';
			sizes = sizes_vt;
		}		
		
		//alert("/gmaps/forms/"+fileName+"?view=ok&id="+obj_id);
		if(value != 3){
			do_popup('/gmaps/forms/'+fileName+"?view=ok&id="+obj_id, sizes);		
		}
		else{
			do_popup(url, sizes);
		}
	}
	 
	function do_popup(file, sizeArr){
		window.open(file, "Panel", "menubar=no,width="+sizeArr[0]+",height="+sizeArr[0]+",toolbar=no");
	}
	 
	function switch_mode(id, usr_mode){
		$("#view_obj_img").attr("style", "border: 0px solid red;");
		$("#search_obj_img").attr("style", "border: 0px solid red;");
		
		if(usr == null){
			var css = 'border: 0px solid red; display:none';
		}
		else{
			var css = 'border: 0px solid red; display:block';
		}
		
		$("#add_obj_img").attr("style", css);
		$("#edit_obj_img").attr("style", css);
		$("#load_obj_img").attr("style", css);
		$("#route_obj_img").attr("style", css);
		$("#kml_obj_img").attr("style", css);
		$("#kml_3d_img").attr("style", css);
		$("#pages_obj_img").attr("style", css);
		$("#tweak_obj_img").attr("style", css);		
		
		$("#add_cell").attr("style", "display: none;");
		$("#edit_cell").attr("style", "display: none;");
		$("#upload_cell").attr("style", "display: none;");
		$("#route_cell").attr("style", "display: none;");
		$("#kml_cell").attr("style", "display: none;");
		$("#kml3d_cell").attr("style", "display: none;");
		$("#pages_cell").attr("style", "display: none;");
		$("#tweak_cell").attr("style", "display: none;");
		$("#search_cell").attr("style", "display: none;");
		
		$("#"+id).attr("style", "border: 1px solid red;");
		
		mode = usr_mode;
		
		if(mode == 0){
			$("#usr_info").text('');
			load_objects();
			load3Dobjects();
		}
		else if(mode == 1){
			$("#usr_info").text('Для автоопределения координат объекта сделайте клик на карте.');
			$("#add_cell").attr("style", "display: block;");
		}
		else if(mode == 2){
			$("#usr_info").text('Выбирите объект для редактирования.');
		}
		else if(mode == 3){
			$("#usr_info").text('Выбирите объект для загрузки файлов.');
		}
		else if(mode == 4){
			route_point = 1;
			$("#usr_info").text('Для автоопределения координаты начала маршрута сделайте клик на карте.');
			$("#route_cell").attr("style", "display: block;");
		}
		else if(mode == 5){
			$("#usr_info").text('');
			$("#tweak_obj").attr("src", $("#tweak_obj").attr("src"));			
			$("#tweak_cell").attr("style", "display: block;");
		}
		else if(mode == 6){
			$("#usr_info").text('Задайте критерии поиска.');
			$("#search_cell").attr("style", "display: block;");
		}
		else if(mode == 7){
			$("#usr_info").text('');
			$("#load_kml").attr("src", $("#load_kml").attr("src"));
			$("#kml_cell").attr("style", "display: block;");
		}	
		else if(mode == 8){
			$("#usr_info").text('Для автоопределения 1-й координаты объекта сделайте клик на карте.');
			$("#load_kml3d").attr("src", $("#load_kml3d").attr("src"));
			$("#kml3d_cell").attr("style", "display: block;");
		}	
		else if(mode == 9){
			$("#usr_info").text('Выбирите объект для редактирования.');
			//$("#pages_obj").attr("src", $("#pages_obj").attr("src"));
			//$("#pages_cell").attr("style", "display: block;");
		}		
	}
	
	function show_route(mode){
		if(mode==undefined){
			mode = $(":radio[name=route_type]").filter(":checked").val();
		}

		if(route_placemark!=null){
			ge.getFeatures().removeChild(route_placemark);
		}

		route = new GDirections();

		GEvent.addListener(route, "load", function() {
			route_points_json = '[';
			var routePolyline = route.getPolyline();
			
			// Create the placemark
			var lineStringPlacemark = ge.createPlacemark('');

			// Create the LineString
			var lineString = ge.createLineString('');
			lineStringPlacemark.setGeometry(lineString);
	
			// Add LineString points
			var pointFactor = Math.round(routePolyline.getVertexCount()/25)+1;
			//alert("routePolyline.getVertexCount()="+routePolyline.getVertexCount()+", pointFactor="+pointFactor);
			for(var i=0;i<routePolyline.getVertexCount();i++){
				var point = routePolyline.getVertex(i);
				lineString.getCoordinates().pushLatLngAlt(point.lat(), point.lng(), 0);
				if(i == 0){
					var distance = 20;
					var angle = 0;
				}
				else{
					var distance = distanceBetween2Points(routePolyline.getVertex(i-1).lat(), routePolyline.getVertex(i-1).lng(), point.lat(), point.lng());
					var geMapAngle = angleBy2Points(routePolyline.getVertex(i-1).lat()*Math.PI/180, routePolyline.getVertex(i-1).lng()*Math.PI/180, point.lat()*Math.PI/180, point.lng()*Math.PI/180)*180/Math.PI;
					var angle = -geMapAngle;
					if(geMapAngle >  180){ angle = 360 - geMapAngle; }
					//angle = Math.round( angle /*+ offsetAnngleFromNorth*/);
					if(Math.abs(angle) > 180){
						if(angle > 0) { angle = -(360 - angle); } else { angle = 360 + angle; }
					}
				}
				var speed = 3.5;//distance*100000/route_speed;
				
				if(i%pointFactor==0){
					route_points_json += '{"lat":'+point.lat()+',"lon":'+point.lng()+',"speed":'+speed+',"angle":'+angle+'}';
				}
				if(i!=routePolyline.getVertexCount()-1){
					route_points_json += ',';	
				}
				else{
					//alert(distance+" --- "+speed+" --- "+angle+" --- "+geMapAngle);
				}
			}

			// Create a style and set width and color of line
			lineStringPlacemark.setStyleSelector(ge.createStyle(''));
			var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
			lineStyle.setWidth(7);
			lineStyle.getColor().set('9900ff00');  // aabbggrr format

			route_placemark = lineStringPlacemark;
			// Add the feature to Earth
			ge.getFeatures().appendChild(lineStringPlacemark);

			route_points_json+= ']';

			$.ajax({
   				type: "POST",
   				url: "/gmaps/kml.php",
   				data: "json_data="+route_points_json,
   				success: function(msg){
					//alert(msg);
					if(msg.search(/ERROR/)!=-1){
						alert("Ошибка сервера.");
					}
					else{
						var href = window.location.href.replace(/gmaps/, "")+'gmaps/routes/route.kml';

						//alert(href);
   						google.earth.fetchKml(ge, href, function(object){
         					// alert if no KML was found at the specified URL
         					if (!object) {
            					window.setTimeout(function() { alert('Bad or null KML-file!'); }, 0); return;
         					}
         					// add the fetched KML into this Earth instance
         					ge.getFeatures().appendChild(object);

         					// walk through the KML to find the tour object; assign to variable 'tour'
         					walkKmlDom(object, function() {								
            					if (this.getType() == 'KmlTour') {
									ge.getTourPlayer().setTour(null);
	   								ge.getTourPlayer().setTour(this);
									ge.getTourPlayer().play();
									$("#save_route_button").attr("style", "display:block");
               						return false;
            					}
         					});
						});
					}
   				},
				failure: function(msg){
					alert( "Не удалось загрузить тур. Ошибка: "+msg);
				}
 			});	
		});

		GEvent.addListener(route, "error", function() {
			var objStatus = route.getStatus();
			if(objStatus.code == 604){
				alert("Невозможно проложить маршрут мужду этими точками!");
			}
			else if(objStatus.code == 602){
				alert("Не удалось найти географическое положение для указанного адреса. Причиной может быть то, что адрес относительно новый или неправильный.");
			}
			else{
				alert("Ошибка: "+objStatus.code+", "+objStatus.request);
			}
		});
		
		if(mode == 'coord'){
			var point1_route_lat = $("#point1_route_lat").val();
			var point1_route_lon = $("#point1_route_lon").val();
		
			var point2_route_lat = $("#point2_route_lat").val();
			var point2_route_lon = $("#point2_route_lon").val();		

			route.load("from: "+point1_route_lat+","+point1_route_lon+" to: "+point2_route_lat+","+point2_route_lon, {getPolyline:true});
		}
		else if(mode == 'addr'){
			var point1_route_addr = $("#point1_route_addr").val();
			var point2_route_addr = $("#point2_route_addr").val();		

			route.load("from: "+point1_route_addr+" to: "+point2_route_addr, {getPolyline:true});			
		}
	}
	
	function load_route(){
		//$("#load_route").find("#load_route_form").submit();
		$("#load_route").find("#route_file").select();
	}
	
	function show_loaded_route(load_select){		
		if(load_select){
			var file = window.location.href.replace(/gmaps/, "")+'gmaps/routes/'+$('#route_list').val();
		}
		else{
			var file = window.location.href.replace(/gmaps/, "")+'gmaps/routes/route.kml';
		}
		
			var request = GXmlHttp.create();
			request.open("GET", file, true);
			request.onreadystatechange = function() {
				if (request.readyState == 4) {
					if(route_placemark!=null){
						ge.getFeatures().removeChild(route_placemark);
					}
					var xmlDoc = GXml.parse(request.responseText);
					var longitudes = xmlDoc.documentElement.getElementsByTagName("longitude");
					var latitudes = xmlDoc.documentElement.getElementsByTagName("latitude");
					
					var lineStringPlacemark = ge.createPlacemark('');

					// Create the LineString
					var lineString = ge.createLineString('');
					lineStringPlacemark.setGeometry(lineString);
	
					// Add LineString points
					var pointFactor = Math.round(longitudes.length/25)+1;
					//alert("longitudes.length="+longitudes.length+", pointFactor="+pointFactor);
					var points = new Array();
					for (var i=0; i < longitudes.length; i++ ) {				
						var lat = parseFloat(latitudes[i].firstChild.data);
						var lng = parseFloat(longitudes[i].firstChild.data);
						var point = new GLatLng(lat,lng);
		
						if(i%pointFactor==0){
							points.push(point);
						}
						
						lineString.getCoordinates().pushLatLngAlt(lat, lng, 0);
					}			

					// Create a style and set width and color of line
					lineStringPlacemark.setStyleSelector(ge.createStyle(''));
					var lineStyle = lineStringPlacemark.getStyleSelector().getLineStyle();
					lineStyle.setWidth(7);
					lineStyle.getColor().set('9900ff00');  // aabbggrr format

					route_placemark = lineStringPlacemark;
					// Add the feature to Earth
					ge.getFeatures().appendChild(lineStringPlacemark);					

								
					var route = new GDirections();
					//alert("-1 - "+file);
					GEvent.addListener(route, "load", function() {
						//alert("0 - "+file);
   						google.earth.fetchKml(ge, file, function(object){
						//alert(1);
         					// alert if no KML was found at the specified URL
         					if (!object) {
            					window.setTimeout(function() { alert('Bad or null KML-file!'); }, 0); return;
         					}
         					// add the fetched KML into this Earth instance
         					ge.getFeatures().appendChild(object);
         					// walk through the KML to find the tour object; assign to variable 'tour'
         					walkKmlDom(object, function() {								
            					if (this.getType() == 'KmlTour') {
									ge.getTourPlayer().setTour(null);
	   								ge.getTourPlayer().setTour(this);
									ge.getTourPlayer().play();
									$("#save_route_button").attr("style", "display:block");
               						return false;
            					}
         					});
						});
					});
					GEvent.addListener(route, "error", function() {
						var errorObj = route.getStatus();
						if(errorObj.code==400){//too many points
						
						}
						//alert("Ошибка загрузки маршрута: "+errorObj.code+", "+errorObj.request);
					});
					route.loadFromWaypoints(points,{getPolyline:true});
				}
			}
			request.send(null);	
	}

	function angleBy2Points(lat1, lon1, lat2, lon2){
		var ang = 0.0;
		eps = 0.00001;
		if(Math.cos(lat1) < eps){
			if(lat1 > 0){
				return Math.PI;
			}
			else{
				return 2*Math.PI;
			}
		}
		var d = distanceBetween2Points(lat1, lon1, lat2, lon2);

		var der = Math.sin(d)*Math.cos(lat1);
		if(der != 0){
			if(Math.sin(lon2-lon1) < 0){
				ang = Math.acos((Math.sin(lat2)-Math.sin(lat1)*Math.cos(d))/der);
			}
			else{
				ang = 2*Math.PI-Math.acos((Math.sin(lat2)-Math.sin(lat1)*Math.cos(d))/der);
			}
			
			if(!isNaN(ang*1)){
				return ang;
			}
			else{
				return 0;
			}
		}
		else{
			return 0;
		}
	}	

	function distanceBetween2Points(lat1, lon1, lat2, lon2){
		return 2*Math.asin(Math.sqrt( Math.sin((lat1-lat2)/2)*Math.sin((lat1-lat2)/2) +
				Math.cos(lat1)*Math.cos(lat2)*( Math.sin((lon1-lon2)/2)*Math.sin((lon1-lon2)/2))));
	}	
	
	function login(){
		if($("#usr_log").val()=="" || $("#usr_pass").val()==""){
			alert("Заполните все поля!");
			return;
		}
		
		var usr_log = $("#usr_log").val();
		var usr_pass = $("#usr_pass").val();
		
		$.ajax({
   			type: "POST",
   			url: "/gmaps/api/api.php",
   			data: "act=login&login="+usr_log+"&pass="+usr_pass,
   			success: function(msg){
				if(msg.search(/ERROR/)!=-1){
					alert("Ошибка сервера.");
				}
				else{
					usr = parseInt(msg, 10);
					//$("#usr_menu").attr("style", "visibility:visible");
					$("#usr_login").attr("style", "display: none;");
					
					$("#view_obj_img").attr("style", "border: 1px solid red; display:block;");
					$("#add_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#edit_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#load_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#pages_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#route_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#kml_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#kml_3d_img").attr("style", "border: 0px solid red; display:block;");
					$("#tweak_obj_img").attr("style", "border: 0px solid red; display:block;");
					$("#search_obj_img").attr("style", "border: 0px solid red; display:block;");	
					$("#exit_obj_img").attr("style", "border: 0px solid red; display:block;");					
				}
   			},
			failure: function(msg){
				alert( "Не удалось войти. Ошибка: "+msg);
			}
 		});						
	}	
	
	function logout(){
		usr = null;
		//$("#usr_menu").attr("style", "visibility:hidden");
		$("#usr_login").attr("style", "display: block;");
		$("#add_cell").attr("style", "display: none;");
		$("#edit_cell").attr("style", "display: none;");
		$("#upload_cell").attr("style", "display: none;");
		$("#pages_cell").attr("style", "display: none;");
		$("#route_cell").attr("style", "display: none;");
		$("#kml_cell").attr("style", "display: none;");
		$("#kml3d_cell").attr("style", "display: none;");
		$("#tweak_cell").attr("style", "display: none;");
		$("#search_cell").attr("style", "display: none;");	
		
		var css_hide = "border: 0px solid red; display:none;";

		$("#view_obj_img").attr("style", "border: 1px solid red; display:block;");
		$("#add_obj_img").attr("style", css_hide);
		$("#edit_obj_img").attr("style", css_hide);
		$("#load_obj_img").attr("style", css_hide);
		$("#pages_obj_img").attr("style", css_hide);
		$("#route_obj_img").attr("style", css_hide);
		$("#kml_obj_img").attr("style", css_hide);
		$("#kml_3d_img").attr("style", css_hide);
		$("#tweak_obj_img").attr("style", css_hide);
		$("#search_obj_img").attr("style", "border: 0px solid red; display:block;");	
		$("#exit_obj_img").attr("style", css_hide);
	}	
	
	function reloadEdit(type, id){
		if(type == 'object'){
			removePlacemark(id);
			window.setTimeout(function(){ $("#edit_obj").attr("src", "edit.php"); }, 200);
			switch_mode('view_obj_img', 0);
		}
		else{
			window.setTimeout(function(){ $("#edit_obj").attr("src", $("#edit_obj").attr("src")); }, 200);
		}
	}
	
	function save_route(download){
		if(download){
			window.location = $("#download_route").attr('href');
		}
		else{
			if($("#route_name").val()==""){ alert("Введите название маршрута!"); return; }
			$.ajax({
				type: "POST",
				url: "/gmaps/api/api.php",
				data: "act=sroute&rname="+escape($("#route_name").val()),
				success: function(msg){
					if(msg.search(/ERROR/)!=-1){
						alert("Ошибка сервера.");
					}
					else{
						alert("Маршрут сохранен.");					
					}
				},
				failure: function(msg){
					alert( "Не удалось сохранить. Ошибка: "+msg);
				}
			});	
		}
	}

	function delete_route(){
			if($("#route_list").val()==""){ alert("Выбирите маршрут!"); return; }
			$.ajax({
				type: "POST",
				url: "/gmaps/api/api.php",
				data: "act=droute&rfile="+$("#route_list").val(),
				success: function(msg){
					if(msg.search(/ERROR/)!=-1){
						alert("Ошибка сервера.");
					}
					else{
						alert("Маршрут удален.");					
					}
				},
				failure: function(msg){
					alert( "Не удалось удалить. Ошибка: "+msg);
				}
			});	
	}
	
	function create_3d_box(){
		if($("#3d_object_name").val()=='' || $("#3d_object_lat1").val()=='' || $("#3d_object_lon1").val()=='' || $("#3d_object_lat2").val()=='' || $("#3d_object_lon2").val()=='' || $("#3d_object_lat3").val()=='' || $("#3d_object_lon3").val()=='' || $("#3d_object_lat4").val()=='' || $("#3d_object_lon4").val()=='' || $("#3d_object_hight").val()==''){
			alert("Заполните все поля!");
			return;
		}

		var color_dhtml = $("#color_1").val();
		var color_kml = color_dhtml.substring(5,7)+color_dhtml.substring(3,5)+color_dhtml.substring(1,3);// rrggbb->bbggrr
		kmlString = kmlStringHeader +
  		'<kml xmlns="http://www.opengis.net/kml/2.2">' +
		'<Document>' +
		'<Style id="boxStyle">' +
		'	<LineStyle>' +
        '		<width>1</width>' +
		'	</LineStyle>' +
		'	<PolyStyle>' +
        '		<color>ff'+color_kml+'</color>' + //aabbggrr
		'	</PolyStyle>' +
		'</Style>' +		
  		'  <Placemark>' +
  		'    <name>'+$("#3d_object_name").val()+'</name>' +
		'	 <styleUrl>#boxStyle</styleUrl>' +
        '	 <description>' +
        '  		<![CDATA[' + $("#3d_object_desc").val() +']]>' +        
        '	 </description>' +
    	'	 <Point>' +
     	' 		<coordinates>'+$("#3d_object_lon1").val()+','+$("#3d_object_lat1").val()+',0</coordinates>' +
    	'	 </Point>' +
  		'    <Polygon>' +
  		'      <extrude>1</extrude>' +
  		'      <altitudeMode>relativeToGround</altitudeMode>' +
  		'      <outerBoundaryIs>' +
  		'        <LinearRing>' +
  		'          <coordinates>' +
  		'            '+$("#3d_object_lon1").val()+','+$("#3d_object_lat1").val()+','+$("#3d_object_hight").val()+' ' +
  		'            '+$("#3d_object_lon2").val()+','+$("#3d_object_lat2").val()+','+$("#3d_object_hight").val()+' ' +
  		'            '+$("#3d_object_lon3").val()+','+$("#3d_object_lat3").val()+','+$("#3d_object_hight").val()+' ' +
  		'            '+$("#3d_object_lon4").val()+','+$("#3d_object_lat4").val()+','+$("#3d_object_hight").val()+' ' +
  		'            '+$("#3d_object_lon1").val()+','+$("#3d_object_lat1").val()+','+$("#3d_object_hight").val()+' ' +
  		'          </coordinates>' +
  		'        </LinearRing>' +
  		'      </outerBoundaryIs>' +
  		'    </Polygon>' +
  		'  </Placemark>' +
		'</Document>' +
  		'</kml>';
		
		var building = ge.parseKml(kmlString);

		ge.getFeatures().appendChild(building);
	}
	
	function save_3d_object(){
		$.ajax({
   			type: "POST",
   			url: "/gmaps/api/api.php",
   			data: "act=s3d&kml="+kmlString,
   			success: function(msg){
				if(msg.search(/ERROR/)!=-1){
					alert("Ошибка сервера.");
				}
				else{
					alert("3D-объект сохранен.");					
				}
   			},
			failure: function(msg){
				alert( "Не удалось сохранить. Ошибка: "+msg);
			}
 		});	
	}	
	
	function reloadPages(){
		window.setTimeout(function(){ $("#pages_obj").attr("src", $("#pages_obj").attr("src")); }, 250);
	}

	function reloadKML(){
		window.setTimeout(function(){ $("#load_kml").attr("src", $("#load_kml").attr("src")); }, 250);
	}
