GMaps ={
	objMap: null,
	cInfoWindow: new Object(),
        marker: '',
	loc: null,
        defLat: null,
        defLng: null,
        cityIds: new Array(),
	init: function(typeMaps, canvasDivId, zoomMap, defLat, defLng){
                GMaps.defLat = defLat;
                GMaps.defLng = defLng;
                if(typeof mapParams != 'undefined'){
			if(typeMaps == 'rubricator'){
				var centerLatlng = new google.maps.LatLng(defLat, defLng);
			}else if(typeMaps == 'firmpage'){
				for(var firmId in mapParams){
					var centerLatlng = new google.maps.LatLng(mapParams[firmId]['lt'], mapParams[firmId]['lg']);
				}
			}
			var centerOptions = {
				zoom: zoomMap,
				center: centerLatlng,
                                scrollwheel: false,
				mapTypeControl: true,
				mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
				mapTypeId: google.maps.MapTypeId.ROADMAP
			}
			this.objMap = new google.maps.Map(document.getElementById(canvasDivId), centerOptions);
			this.showMarker(typeMaps);
		}
	},
	showMarker: function(typeMaps){
		for(var firmId in mapParams){
			if(mapParams[firmId]['show_point'] == 1){
				var firmLatlng = new google.maps.LatLng(mapParams[firmId]['lt'], mapParams[firmId]['lg']);
				if(typeMaps == 'rubricator'){
					var windowContent = this.generateContentWindow(firmId);
					eval("GMaps.cInfoWindow[" + firmId + "] = new google.maps.InfoWindow({content: '" + windowContent + "', position: firmLatlng })");
					eval("var marker" + firmId + " = new google.maps.Marker({position: firmLatlng, map: GMaps.objMap, icon: '/skins/gtsmap/i/2.0/marker_n" + document.getElementById('f_num_' + firmId).innerHTML + ".png'})");
					eval("google.maps.event.addListener(marker" + firmId + ", 'click', function() { GMaps.cInfoWindow[" + firmId + "].open(GMaps.objMap, marker" + firmId + "); })");
				}else if(typeMaps == 'firmpage'){
					var marker = new google.maps.Marker({
						position: firmLatlng,
						map: GMaps.objMap
					});
				}
			}
		}
	},
	generateContentWindow: function(firmId){
		var firmLink = document.getElementById('f_title_' + firmId);
		var firmName = document.getElementById('f_title_' + firmId).innerHTML;
		var content = document.getElementById('f_num_' + firmId).innerHTML + '. <a href="' + firmLink + '" target="_blank" class="map_firm_name">' + firmName + '</a><br/><br/>' +
						this.getFirmPhoneStr(firmId) +
						'<br/><a href="javascript: void(0);" onclick="GMaps.zoomFirm(' + firmId + ');" class="map_tools">приблизить</a>';
		return content;
	},
	zoomFirm: function(firmId){
		var firmLatlng = new google.maps.LatLng(mapParams[firmId]['lt'], mapParams[firmId]['lg']);
		GMaps.cInfoWindow[firmId].close();
		this.objMap.setCenter(firmLatlng);
		this.objMap.setZoom(16);
	},
	getFirmPhoneStr: function(firmId){
		var content = "";
		var strPhone = document.getElementById('map_phone_' + firmId).value;
		var strPhoneCode = document.getElementById('map_phone_code_' + firmId).value;
		if(strPhone != ""){
			var startPos = strPhone.substring(0, 1);
			if(startPos == '('){
				var endPos = strPhone.search(/\)/i);
				var newPhoneCode = strPhone.substring(0, (endPos + 1));
				var newPhone = strPhone.substring((endPos + 2), strPhone.length);
				content = newPhoneCode + " " + newPhone;
			}else if(startPos != 'w'){
				if(strPhone.length <= 9 && strPhoneCode != ""){
					content = '(' + strPhoneCode + ') ';
				}
				content = content + '<span class="map_phone">' + strPhone + '</span>';
			}
			if(content != ""){
				content = "Тел.: " + content
			}
		}
		return content;
	},
	initMap: function(canvasDivId, zoomMap){

		var centerLatlng = new google.maps.LatLng(GMaps.defLat, GMaps.defLng);
		var centerOptions = {
			zoom: zoomMap,
			center: centerLatlng,
			scrollwheel: false,
			mapTypeControl: true,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}

		this.objMap = new google.maps.Map(document.getElementById(canvasDivId), centerOptions);
		var thisaddress = document.getElementById('addressFirm').value;

		var geocoder = new google.maps.Geocoder();
		if (geocoder) {
			var geocodeOptions = {
				address: thisaddress,
				latLng: centerLatlng
			}
			geocoder.geocode( geocodeOptions, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
					GMaps.objMap.setCenter(results[0].geometry.location);
					GMaps.loc = results[0].geometry.location;
					GMaps.marker = new google.maps.Marker({
					map: GMaps.objMap,
					position: results[0].geometry.location
				});
				new google.maps.event.addListener(GMaps.objMap, 'click', function(event) {
					GMaps.placeMarker(event.latLng);
				});
				GMaps.saveLocation(results[0].geometry.location);
			}else {
				alert("Адрес не найден на карте");
			}
		  });
		}
	},
	initMapText: function(canvasDivId, zoomMap){

		var centerLatlng = new google.maps.LatLng(GMaps.defLat, GMaps.defLng);
		var centerOptions = {
			zoom: zoomMap,
			center: centerLatlng,
			scrollwheel: false,
			mapTypeControl: true,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
			mapTypeId: google.maps.MapTypeId.ROADMAP
		}

		this.objMap = new google.maps.Map(document.getElementById(canvasDivId), centerOptions);
		var thisaddress = document.getElementById('addressFirm').value;

		var geocoder = new google.maps.Geocoder();
		if (geocoder) {
			var geocodeOptions = {
				address: thisaddress,
				latLng: centerLatlng
			}
			geocoder.geocode( geocodeOptions, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
					GMaps.objMap.setCenter(results[0].geometry.location);
					GMaps.loc = results[0].geometry.location;
					GMaps.marker = new google.maps.Marker({
					map: GMaps.objMap,
					position: results[0].geometry.location
				});
				GMaps.saveLocation(results[0].geometry.location);
			}else {
				alert("Адрес не найден на карте");
			}
		  });
		}
	},
	saveLocation: function(location){
            $('latitude').setValue(location.lat());
            $('longitude').setValue(location.lng());
        },
        placeMarker: function(location) {
		GMaps.loc = location;
		GMaps.marker.setMap(null);
		var clickedLocation = new google.maps.LatLng(location);
		GMaps.marker = new google.maps.Marker({
			position: location,
			map: GMaps.objMap
		});
		GMaps.objMap.setCenter(location);
                GMaps.saveLocation(location);
	},
        initialize: function(cityId) {
             GMaps.cityIds.push(cityId);
        },
        showMap: function(){
                var cityId = $F('CurrentAddressCity');

                if (GMaps.checkCity(cityId)){
                    var gorod = $('address_city').value;
                    var street = $('address_street').value;
                    var house = $('address_house').value

                    if (( gorod == '' ) || ( street == '' )){
                        alert('Заполните корректно поля Населенный пункт и Улица');
                    }else{
                        
                        $('gmap').style.display = "inline";
                        $('map_edit_text').style.display = "inline";
                        
                        var location = 'Россия, ' + gorod + ', ' + street + ' ' +house;
                        $('addressFirm').setValue(location);
                        GMaps.initMap('gmap',16);
                    }
                }else{
                    alert('Для данного населенного пункта подробная карта недоступна');
                    $('gmap').style.display = "none";
                    $('map_edit_text').style.display = "none";
                }
	},
	showMapForAddFirm: function(defaultCity){
		var gorod = Filter.trim($('address_city').value);
		var street = Filter.trim($('address_street').value);
		var house = Filter.trim($('address_house').value);

		$('gmap').style.display = "inline";
		$('map_edit_text').style.display = "inline";

		if(gorod == ''){
			var location = 'Россия, ' + defaultCity;
                        
		} else {
			var location = 'Россия, ' + gorod + ', ' + street + ' ' +house;
		}
		$('addressFirm').setValue(location);
		GMaps.initMap('gmap',16);
	},
	checkCity: function(cityId){
            var countCity = GMaps.cityIds.length;
            for (var i = 0; i < countCity ; i++){
                    if (GMaps.cityIds[i] == cityId){
                            return true;
                    }
            }
            return false;
	}
}



