﻿var map;
var ge;
var placemark;
var mode3d = false;
var settingloc = false;
var lang = "ru";

google.load("maps", "2");
google.load("earth", "1");
google.load("dojo", "1");
google.load("prototype", "1");
google.load("scriptaculous", "1");

//порядок en~ru~uk
var s1 = "Find~Найти~Знайти";
var s2 = "2D view~2D вид~2D вигляд";
var s3 = "3D view~3D вид~3D вигляд";
var s4 = "Link to this place~Ссылка на это место~Посилання на це мiсце";
var s5 = " address not found~ адрес не найден~ адресу не знайдено";
var s6 = "Found only street ~" + 
		 "Найдена только улица ~"+
		 "Знайдена тiльки вулиця ~";
var s7 = "Sorry, your browser does not support google maps~" +
		 "Извините, ваш браузер не поддерживает google maps~" +
		 "Вибачте, ваш браузер не пiдтримуе google maps~";
var s8 = "Add a decsription~Добавьте описание~Додайте опис";
var s9 = "and copy the link~и скопируйте ссылку~та скопiюйте посилання";
var s10 = "You are near~Вы рядом с~Ви поряд з";
var s11 = "Loading ~Загрузка ~Завантаження ";
var s12 = "Error while executing request. Error code ~Ошибка выполнения запроса. Код ошибки ~Помилка при виконаннi запиту. Код помилки ";
var s13 = "Too many requests from this IP address~Слишком много запросов с данного IP адреса~Дуже багато запитiв з данноi IP адреси";
var s14 = "Unknown error while executing request~Неизвестная ошибка при выполнении запроса~Невiдома помилка при виконаннi запиту";

function ELS(s) {
 var subs = s.split("~");
 if ((lang == "uk") && (subs.length >= 3)) return subs[2] 
  else 
 if (((lang == "ru") || (lang == "be") || (lang == "mo")) && (subs.length >= 2)) return subs[1]
  else return subs[0];
}

function TranslatePage() {
 lang = navigator.language;
 if (!lang) lang = navigator.browserLanguage;
 document.getElementById("findbutton").value = ELS(s1); 
 document.getElementById("2D").innerHTML = ELS(s2); 
 document.getElementById("3D").innerHTML = ELS(s3); 
 document.getElementById("loclink").innerHTML = ELS(s4); 
 document.getElementById("locwinheader").innerHTML = ELS(s4); 
 document.getElementById("lbllocdescr").innerHTML = ELS(s8); 
 document.getElementById("lblloclink").innerHTML = ELS(s9); 
 document.getElementById("youarenear").innerHTML = ELS(s10); 
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

function getLocationURL(descr){
 var l = location.href;
 var subs = l.split("?");
 l = subs[0] + "?v="; 

 if (mode3d) {
  var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
  l = l + "3D&ll=" + la.getLatitude().toFixed(6) + "," + la.getLongitude().toFixed(6) + 
	  "&a=" + la.getAltitude().toFixed(1) + "&h=" + la.getHeading().toFixed(1) + 
	  "&t=" + la.getTilt().toFixed(1) + "&r=" + la.getRange().toFixed(1);
 } 
 else {
  l = l + "2D&ll=" + map.getCenter().toUrlValue(12) + "&z=" + map.getZoom();
 };

 if (descr != "") l = l + "&d=" + escape(descr);
 return l; 

}

var t;

function set3DLocationURL(s) {

 if (!ge) return;
 //останавливаем таймер
 clearTimeout(t);

 var subs = s.split("?");
 if (subs.length < 2) return;
 subs = subs[1].split("&");

 var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);

 for (var i=0;i<=subs.length - 1;i++){

  var v = subs[i].split("=");

  //alert(v.toString());

  if (v.length > 1) {

   var n = new Number(v[1]);
   switch (v[0].toLowerCase())
   {
	case "ll":
	 var ll = new GLatLng.fromUrlValue(v[1]);
	 la.setLatitude(ll.lat());
	 la.setLongitude(ll.lng());
	 break;
	case "a":
	 la.setAltitude(n.valueOf());
	 break;
	case "h":
	 la.setHeading(n.valueOf());
	 break;
	case "t":
	 la.setTilt(n.valueOf());
	 break;
	case "r":
	 la.setRange(n.valueOf());
	 break;
	case "d":
	 //описание
	 descr = unescape(v[1]);
	 break;
   }
  }
 }

 ge.getView().setAbstractView(la);

 if (descr != "") 
  setTimeout("showBallon('" + descr +"','" + la.getLatitude() + "','" + la.getLongitude() + "')", 2000);
 

}

function setLocationURL(s){

 var subs = s.split("?");
 if (subs.length < 2) return;
 subs = subs[1].split("&");

 //вид 2D или 3D
 for (var i=0;i<=subs.length - 1;i++){
  var v = subs[i].split("=");
  //включение режима 2D/3D
  if ((v.length > 1) && (v[0] == "v")) {
   if (v[1].toUpperCase() == "3D") {
	//3D 
	toggleTab(2,3);
	break;
   }
   else {
	//2D 
	toggleTab(1,3);
	break;
   } 
  }
 }
 
 //описание 
 var descr = "";
 for (var i=0;i<=subs.length - 1;i++){
  var v = subs[i].split("=");
  //включение режима 2D/3D
  if ((v.length > 1) && (v[0] == "d")) {
   descr = unescape(v[1]);
   break;
  }
 }

 settingloc = true;

 if (mode3d) {

  //так как инициализация GEPlugin происходит асинхронно, 
  //будем опрашивать через заданный интервал, пока плагин не будет готов
  t = setInterval("set3DLocationURL('" + s + "')", 500);

 } 
 else {
  
  //значения по умолчанию
  var ll = new GLatLng(49.232328, 28.467596);
  var z = 19;

  for (var i=0;i<=subs.length - 1;i++){

   var v = subs[i].split("=");
   if (v.length > 1) {

	switch (v[0].toLowerCase())
	{
	 case "ll":
	  var ll = new GLatLng.fromUrlValue(v[1]);
	  break;
	 case "z":
	  var z = new Number(v[1]);
	  if (z > 20) z = 20;
	  if (z < 14) z = 14;
	  break;
	}
   }
  }

  map.setCenter(ll, z.valueOf(), custommap2D);
  if (descr != "") 
   setTimeout("showBallon('" + descr +"','" + ll.lat() + "','" + ll.lng() + "')", 2000);

 }
}

function CurLocFocus() {
 var d = document.getElementById("locdescr");
 if (!d) return;
 var l = document.getElementById("curloc");
 if (!l) return;
 l.value = getLocationURL(d.value);
}

function toggleTab(num,numelems) {

//возвращаем нормальный стиль кнопке
if (num<3) {
 for (var i=1;i<=numelems;i++){
  var temph = "but"+i;
  var h = document.getElementById(temph);
  if (!h){
   var h = document.getElementById("tabHeaderActive");
   h.id = temph;
  }
 }
} 

//устанавливаем выделенный стиль                }
var h = document.getElementById("but"+num);
if ((h) && (num < 3)) 
 h.id = "tabHeaderActive";
	
switch (num)
{

case 1:
 clearPlacemarks();
 mode3d = false;
 map.setMapType(custommap2D);
 break; 
 
case 2:
 clearPlacemarks();
 mode3d = true;
 map.setMapType(G_SATELLITE_3D_MAP);
 break;
 
case 3:
 setTimeout(ShowLocWindow, 300);
 break;
}
 
}

function CloseLocWindow() {
var w = document.getElementById("locwindow");
if (!w) return;
//w.style.visibility = "hidden";
w.style.display = "none";
}

function SelLocText() {
var l = document.getElementById("curloc"); 
if (!l) return;
l.focus();
l.select();
}

//работает только для IE
function CopyClick(){
var l = document.getElementById("curloc"); 
if (!l) return;
window.clipboardData.setData("Text",l.value);
}

function ShowLocWindow() {
var w = document.getElementById("locwindow");
if (!w) return;
var b = document.getElementById("findbar"); 
if (!b) return;
var l = document.getElementById("curloc"); 
if (!l) return;

//alert("offsetTop=" + b.offsetTop + " " + "offsetHeight=" + b.offsetHeight);

w.style.top = (b.offsetTop + b.offsetHeight + 16) + "px";
//w.style.top = "10px";
//alert("offsetWidth=" + b.offsetWidth + " " + "innerWidth=" + window.innerWidth);
w.style.left = (b.offsetWidth - 355) + "px";
//w.style.display = "block";
w.style.visibility = "visible";
l.value = getLocationURL("");

Effect.SlideDown("locwindow", {"duration" : 0.2});
setTimeout(SelLocText, 500);
}

function TiltCamera() {
 if (!ge) return;
 var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
 la.setTilt(45);
 ge.getView().setAbstractView(la);
}

function Activate3D() {

	if ((!mode3d) || (ge))	{
	 return;
	}
 
	map.getEarthInstance(function(pluginInstance) {
	 ge = pluginInstance;

	 ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);
	 ge.getLayerRoot().enableLayerById(ge.LAYER_BUILDINGS, false);

	 var link = ge.createLink('');
	 var href = 'http://vinmap.net/vinnitsa/main.kmz'
	 link.setHref(href);

	 var networkLink = ge.createNetworkLink('');
	 networkLink.set(link, false, false); 

	 ge.getFeatures().appendChild(networkLink);

	 
	 //kaments-podolskiy
	 var link = ge.createLink('');
	 var href = 'http://vinmap.net/kamenets/main.kmz'
	 link.setHref(href);

	 var networkLink = ge.createNetworkLink('');
	 networkLink.set(link, false, false); 

	 ge.getFeatures().appendChild(networkLink);
	 
	 
	 if (!settingloc) setTimeout(TiltCamera, 1000);

	});
}

function clearPlacemarks() {
 if (mode3d) {
  ge.setBalloon(null);
 }
 else {
  map.clearOverlays();
 }
}

function createPlacemark(s, p) {
 
 //поправочка
 //p.y = p.y + 0.0001;
 
 clearPlacemarks();
 
 if (mode3d) {
  
  if (!ge) return;
  var placemark = ge.createPlacemark('');
  placemark.setName(s);
  ge.getFeatures().appendChild(placemark);

  var icon = ge.createIcon('');
  icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
  var style = ge.createStyle('');
  style.getIconStyle().setIcon(icon);
  placemark.setStyleSelector(style);

  var point = ge.createPoint('');
  point.setLatitude(p.lat());
  point.setLongitude(p.lng());
  
  placemark.setGeometry(point);
  
 }
 
 else {
 
  var marker = new GMarker(p);
  map.addOverlay(marker);
  marker.openInfoWindowHtml(s);
 
 }

}

function showBallon(s, lat, lng) {
  
 if (s == "") return;

 if (mode3d) {
  
  if (!ge) return;

  var placemark = ge.createPlacemark('');
  ge.getFeatures().appendChild(placemark);
  
  //alert(s + " " + lat + " " + lng);

  var icon = ge.createIcon('');
  var style = ge.createStyle('');
  style.getIconStyle().setIcon(icon);
  placemark.setStyleSelector(style);

  var point = ge.createPoint('');
  var n = new Number(lat);
  point.setLatitude(n.valueOf());
  var n = new Number(lng);
  point.setLongitude(n.valueOf());
  
  //alert(point.getLatitude() + " " + point.getLongitude());

  placemark.setGeometry(point);
  
  var balloon = ge.createHtmlStringBalloon('');
  balloon.setFeature(placemark);
  //balloon.setMaxWidth(600);
  balloon.setContentString(s);
  ge.setBalloon(balloon);
  
 }
 
 else {

  p = new GLatLng(lat, lng);
  map.openInfoWindowHtml(p, s);
 
 }
}

/*
function showloading(show) {
 return;
 var d = document.getElementById("loadingperc"); 
 if (!d) return;
 if (show) {
  if (d.style.display == "none") d.style.display = "block"; 
 }
 else {
  if (d.style.display == "block") d.style.display = "none"; 
 }
}
*/

function showloading(show) {
 var d = document.getElementById("loadingperc"); 
 if (!d) return;
 if (!show) d.innerHTML = "";
}

var hidden = false;
function fadeInOut() {

  var d = document.getElementById("loadingperc"); 
  if (d.innerHTML == "") return;

  var animArgs = {
	node: d,
	duration: 500, 
	delay: 10 
  };

  if (hidden) {
	dojo.fadeIn(animArgs).play();
	hidden = false;
  } else {
	dojo.fadeOut(animArgs).play();
	hidden = true;
  }
}

function update3DLoading() {
 if ((!mode3d) || (!ge)) 
 {
  showloading(false);
  return;
 }
 var d = document.getElementById("curaddr"); 
 if ((!d) || (d.style.display == "none")) return; 
 var l = document.getElementById("loadingperc"); 
 if (!l) return;
 var p = ge.getStreamingPercent();

 if (p > 96) {
  showloading(false);
 }
 else {
  showloading(true);
  var s = ELS(s11) + p + "%";
  if (l.innerHTML != s) l.innerHTML = s;
  fadeInOut();
 }

}

function showCurAdrBar(show) {
 var d = document.getElementById("curaddr"); 
 if (!d) return;
 if (show) {
  if (d.style.display == "none") d.style.display = "block"; 
 }
 else {
  if (d.style.display == "block") d.style.display = "none"; 
 }
}

function setAdrByResponse(response) {
 if (!response || (response.Status.code != 200)) return;
 var place = response.Placemark[0];
 var ss = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
 var th = place.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare;
 if (th) s = place.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
 if (s == "") return;
 var l = document.getElementById("curaddrlink"); 
 if (!l) return;
 //показываем div в текущим адресом
 showCurAdrBar(true);
 if (l.innerHTML != s) l.innerHTML = s;
}

function updateLocationAdr() {
 
  //координаты центра
  if (mode3d) {
	if (!ge) return;
	var la = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	//alert("1");
	var p = new GLatLng(la.getLatitude(),la.getLongitude());
	//alert(p);
	//слишком высоко для вывода текущего адреса
	if (la.getRange()>1000){
	 showCurAdrBar(false); 
	 return;
	}
   }
   else 
   {
	//слишком высоко для вывода текущего адреса
	if (map.getZoom()<18) {
	 showCurAdrBar(false); 
	 return;
	}
	var p = map.getCenter();
   }

 var geocoder = new google.maps.ClientGeocoder();
 geocoder.getLocations(p, setAdrByResponse);

}


function MoveToPlace(hint, lat, lng){
	var point = new GLatLng(lat, lng);
	if (mode3d) {
		if (!ge) return;
		var lookAt = ge.createLookAt('');
		lookAt.set(point.lat(), point.lng(), 10, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 60, 100);
		ge.getView().setAbstractView(lookAt);
	}
	else 
		map.setCenter(point, 19);
	
	if (hint !== '') createPlacemark(hint, point);
}

//преобразование POINT(lat lng) в GLatLong
function SFPointToLatLng(pnt){
	var s = pnt.toUpperCase();
	s = s.replace('POINT','');  
	s = s.replace('(','');
	s = s.replace(')','');
    var subs = s.split(' ');
    if (subs.length !== 2) return;
	return new GLatLng(subs[0], subs[1]);
}	

function FndObj(stID, sttype, stname, geom, bldnum, bldcorp, bldcenter){
	this.stID = stID;
	this.sttype = sttype;
	this.stname = stname;
	this.geom = geom;
	this.bldnum = bldnum;
	this.bldcorp = bldcorp;
	this.bldcenter = bldcenter;
}

function IsStreetType(s){
	var i = s.search(/(бульв|вул|пл|пров|просп|туп|ул|пер|st|sq)/i);
	return i >= 0;
}

function IsBldNumber(s){
	var i = s.search(/[0-9]/g);
	return i >= 0;
}

function ParseInputAddr(s){
		
	//пустая строка
	if (s.length = 0) return;
	//сначала заменяем все точки и запятые на пробелы
	var a = s.replace(/[.,]/g, ' ');
	//делим по пробелам
	var subs = a.split(' ');
	if (subs.length == 0) return;
	
	//удаляем пустые элементы массива
    for (var i = subs.length - 1; i >=0; i--) {
		if (subs[i] == '') subs.splice(i, 1);
	}
	
	//индекс типа проезда и номера дома
	var sttypepos = -1; var bldnbpos = -1;
    if (IsStreetType(subs[0])) sttypepos = 0;
	
	if (IsBldNumber(subs[subs.length - 1])) bldnbpos = subs.length - 1;
	var sttype = ''; var stname = '';
	var bldnum = ''; var bldcorp = '';
	
	//выделяем корпус из номера дома 
	//корпус от номера должен отделяться 
	//прямым или обратным слешем
	if (bldnbpos >= 0){
    	a = subs[bldnbpos].replace(/[\x2F\x5C]/g, ' ');
		var subs2 = a.split(' ');
		if (subs2.length > 1) bldcorp = subs2[1];
		bldnum = subs2[0];
		if (bldnum <= 0) bldnum = '';
        
		//удаляем буквы из номера здания
		i = bldnum.search(/[\D]/g);
		if (i >= 0) {
			if (bldcorp == '') bldcorp = bldnum.slice(i);   
			bldnum = bldnum.replace(/[\D]/g, '');
            
		}
	}

	//задан тип проезда
	if (sttypepos >= 0) {
	    sttype = subs[sttypepos];
	}
	
	//собираем имя улицы из оставшихся фрагментов
	if (bldnbpos < 0) bldnbpos = subs.length;
    for (i = sttypepos + 1; i < bldnbpos; i++) {
		if (stname == '') stname = stname + subs[i]
		  else stname = stname + ' ' + subs[i];

	}
	 
    resObj = new FndObj('', sttype, stname, '', bldnum, bldcorp, '');
   	return resObj;  
}

function getTagValue(tag, tagName){
	var itm = tag.getElementsByTagName(tagName)[0].firstChild;
	if (itm) {
		return itm.nodeValue
	}
	else {
		return '';
	}	
} 

//парсинг результатов из xml для языка lng 
function ParseFindResultForLang(xml, lng){
	
	if (!xml) return null;
    var lst = xml.documentElement;
    if (!lst) return null;
	
	//ищем заданный язык
	var lngItm = null;
	var lngVal = lng.substring(0, 2).toUpperCase();
    for (i = 0; i < lst.childNodes.length; i++) {
		var itm = lst.childNodes[i];
		if (itm.tagName  == 'CONTANER' && itm.getAttribute('lng') == lngVal) {
			lngItm = itm;
			break;
		}
	}
    
    if (!lngItm || lngItm.childNodes.length == 0)  return null;
	
    var resArr = new Array(); var n = 0;
    for (i = 0; i < lngItm.childNodes.length; i++) {
		var itm = lngItm.childNodes[i];
		if (itm.tagName == 'item') {
			resObj = new FndObj(getTagValue(itm, 'stID'), 
			                    getTagValue(itm, 'sttype'), 
								getTagValue(itm, 'stname'), 
								getTagValue(itm, 'geom'), 
								getTagValue(itm, 'bldnum'), 
								getTagValue(itm, 'bldcorp'), 
								getTagValue(itm, 'bldcenter'));
			resArr[n] = resObj;
			n++;
		}
		
    }
    return resArr; 
}

//парсинг результата для ru/uk/en языков
function ParseFindResult(xml){
	res = ParseFindResultForLang(xml, lang);
	if (res) return res;
	if (lang !== 'ru') res = ParseFindResultForLang(xml, 'ru');
	if (res) return res;
	if (lang !== 'uk') res = ParseFindResultForLang(xml, 'uk');
	if (res) return res;
	if (lang !== 'en') res = ParseFindResultForLang(xml, 'en');
	return res;
}

function FindAddrNative(s){
	var xmlhttp;
	
	if (window.XMLHttpRequest) {
		xmlhttp = new XMLHttpRequest();
	}
	else {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	
	
    var resObj = ParseInputAddr(s);
	
    if (!resObj) {
        FindAddrGoogle(s);
        return;
    }
	
	//параметры запроса
    var params = 'action=findbld' + '&sttype=' + encodeURI(resObj.sttype) + '&stname=' + encodeURI(resObj.stname) +
	             '&bldnum=' + resObj.bldnum + '&bldcorp=' + encodeURI(resObj.bldcorp) + '&poiname=';
	//url php скрипта, обрабатывающего запрос			 
    //var url = 'http://www.geosystema.net/digitals/vinnitsa/find.php';	
    var url = 'mapapi.php';	

	//убрать
	//alert(decodeURI(params));
	
    xmlhttp.open('POST', url, true);
	xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
	xmlhttp.setRequestHeader('Content-length', params.length);
	xmlhttp.setRequestHeader('Connection', 'close');
    xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
    xmlhttp.send(params);
    
	//обработка ответа
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
            
                //есть результат
                //alert(xmlhttp.responseText);
                var resArr = ParseFindResult(xmlhttp.responseXML);
                if (!resArr || resArr.length == 0) {
                    FindAddrGoogle(s);
                    return;
                }
                
                //переходим к первому в списке найденному объекту
                var resObj = resArr[0];
                var bldCntr = SFPointToLatLng(resObj.bldcenter);
                if (!bldCntr) {
                    FindAddrGoogle(s);
                    return;
                }
                
                //переходим к центру здания
                //MoveToPlace(resObj.sttype + ' ' + resObj.stname + ', ' + resObj.bldnum + resObj.bldcorp + ' (our base)', bldCntr.lat(), bldCntr.lng());
                MoveToPlace(resObj.sttype + ' ' + resObj.stname + ', ' + resObj.bldnum + resObj.bldcorp, bldCntr.lat(), bldCntr.lng());
                
            }
            else 
                FindAddrGoogle(s);
        }
    }

}  
  
function FindAddrGoogle(s) {

  var geocoder = new google.maps.ClientGeocoder();
  
  geocoder.getLocations('Винница, ' + s, function(response) {
   if (!response) {
	 alert(s + ELS(s14))
	 return;   
   }
	
   if (response.Status.code != 200) {
	if (response.Status.code == 620) {
	 alert(ELS(s13))
	} else {
	 alert(ELS(s12)+response.Status.code)
	}
	return;   
   }
   
   else {

	var place = response.Placemark[0];
	var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
	var ss = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
	var th = place.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare;
	var sss = '';
	if (th) sss = place.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName;
	
	if (sss == '') return;

	if ((sss.indexOf(',') < 0) && (s.indexOf(',') > -1))
	{
 	 alert(ELS(s6) + sss);
	}
	
    //MoveToPlace(sss + ' (Google base)', point.lat(), point.lng())
    MoveToPlace(sss, point.lat(), point.lng())
			
   }
   
  });
}
 
function FindClick() {
  var s = document.getElementById('location').value;
  FindAddrNative(s);
}

function GotoAddr(){
  var s = document.getElementById('curaddrlink').innerHTML;
  FindAddr(s);
}

function ResizeMap() {
  var div = document.getElementById("map_canvas"); 
  var bar = document.getElementById("findbar"); 
  div.style.height = (getClientHeight() - (bar.offsetTop + bar.offsetHeight) - 24) + "px";
}

function initialize() {

  window.onresize = ResizeMap;
  ResizeMap();
  CloseLocWindow();
  TranslatePage();

  if (GBrowserIsCompatible()) {
	
	var tilelayers = [new GTileLayer(GCopyrightCollection("Geosystema/Analytica &copy; 2010"), 12, 20),
					  new GTileLayer(GCopyrightCollection(""), 12, 20)];
					  
	tilelayers[0].getCopyright = function(a,b) {
		return {prefix:"Geosystema/Analytica", copyrightTexts:[" &copy; 2010"]};
	}	
		
	tilelayers[0].getTileUrl = function(tile,zoom) {
	 return "http://vinmap.net/vinnitsa/Photos-GM/"+tile.x+"-"+tile.y+"-"+zoom+".jpg"	
	}

	tilelayers[0].isPng = function() { return false;};
	tilelayers[0].getOpacity = function() { return 1.0; }

	
	tilelayers[1].getCopyright = function(a,b) {
		return {prefix:"Geosystema/Analytica", copyrightTexts:[" &copy; 2010"]};
	}	
	
	tilelayers[1].getTileUrl = function(tile,zoom) {
	 return "http://mt1.google.com/vt/lyrs=h@127&hl=ru&x="+tile.x+"&y="+tile.y+"&z="+zoom+"&s=Galileo"	
	}

	tilelayers[1].isPng = function() { return true;};
	tilelayers[1].getOpacity = function() { return 1; }
	
	custommap2D = new GMapType(tilelayers, new GMercatorProjection(21), "2D",{ errorMessage:"<font color=#a9a9a9>Изображение отсутствует</font>"});
	 
	var div = document.getElementById("map_canvas"); 
	map = new GMap2(div);
	div.style.backgroundColor = "white";

	map.addMapType(custommap2D);
	map.addMapType(G_SATELLITE_3D_MAP);
  
	map.setCenter(new GLatLng(49.232328,  28.467596), 14, custommap2D);
	map.addControl(new GLargeMapControl3D(), new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10)));
	map.enableScrollWheelZoom();
	map.enableDoubleClickZoom();
	map.enableContinuousZoom();

	var mapui = map.getDefaultUI();
	map.removeControl(mapui);
	GEvent.addListener(map, 'maptypechanged', Activate3D);  
	toggleTab(1,3);
	
	setLocationURL(location.href);

	setInterval(updateLocationAdr, 3000);
	setInterval(update3DLoading, 1000);

  }
  else
   alert(ELS(s7)) ;
}
