/**
 * @author shonoru (shonoru@gmail.com)
 */

var main =  {
	map: {},
	markers: {}, // hash of markers
	polyOptions: {			
		strokeColor : "#FF0000",
		strokeOpacity : 1.0,
		strokeWeight : 0
	},
	init: function () {
		var latlng = new google.maps.LatLng(55.756486, 37.622681); // center
	    var myOptions = {
	      zoom: zoom,
	      center: latlng,
	      mapTypeId: google.maps.MapTypeId.ROADMAP
	    };
	    main.map = new google.maps.Map(document.getElementById("map_canvas"),
	        myOptions);
	    main.poly = new google.maps.Polyline(main.polyOptions);
	    main.poly.setMap(main.map);
	    for (var i = 0, length = points.length; i < length; i++) {
			main.markers[points[i].place] = main.createMarker(points[i]);
			var handler = main.clickHandler(main.markers[points[i].place], points[i].place);
			google.maps.event.addListener(main.markers[points[i].place], 'click', handler);
			$('#' + points[i].place).click(handler);
			
			if (points[i].place.length < 2 || points[i].place === 'moscow') {
				var path = main.poly.getPath();
				path.push(main.markers[points[i].place].getPosition());
			}
		}		
		
		google.maps.event.addListener(main.map, 'zoom_changed', function() {
			
			var zoomLevel = main.map.getZoom();
			//TODO short
			if (zoomLevel > 14) {
				main.markers['1'].setVisible(true);
				main.markers['2'].setVisible(true);
				main.markers['1'].setClickable(false);
				main.markers['2'].setClickable(false);
				var image = new google.maps.MarkerImage(
					'http://gadgets.sterno.ru/test_gears/img/sterno.png',
					new google.maps.Size(20, 34),
					new google.maps.Point(0, 0),
					new google.maps.Point(2, 34));
			
				main.markers['moscow'].setIcon(image);
				main.markers['moscow'].setClickable(false);
				main.polyOptions.strokeWeight = 1;
				main.poly.setOptions(main.polyOptions);
			} else {
				main.markers['1'].setVisible(false);
				main.markers['2'].setVisible(false);
				var image = new google.maps.MarkerImage(
					'http://gadgets.sterno.ru/test_gears/img/moscow.png',
					new google.maps.Size(20, 34),
					new google.maps.Point(0, 0),
					new google.maps.Point(2, 34));
				main.markers['moscow'].setIcon(image);
				main.markers['moscow'].setClickable(true);
				main.polyOptions.strokeWeight = 0;
				main.poly.setOptions(main.polyOptions);
			}
			
		});
	},
	createMarker: function (point) {
		var bool = (function () {
			return point.place.length < 2 ? false : true;
		})();
		
		var image = new google.maps.MarkerImage(
			'http://gadgets.sterno.ru/test_gears/img/' + point.place + '.png',
			new google.maps.Size(20, 34),
			new google.maps.Point(0, 0),
			new google.maps.Point(2, 34));
		      
		return new google.maps.Marker({
	      position: new google.maps.LatLng(point.latlng.split(',')[0],point.latlng.split(',')[1]), 
	      map: main.map, 
	      title: point.title,
	      icon: image,
//	      shadow: shadow, TODO shadow
	      visible: bool
	  	})
	},
	clickHandler: function (marker, place){
		return function () {
			$('.item').each(function(i){
		  		if ($(this).hasClass('act')){
		  			$(this).removeClass('act')
		  		}
		  	});
		  	$('#map_canvas').css('width', '430px');
		  	var pparent = $('#' + place).parent().parent();
		  	$(pparent).addClass('act');
		  	
		  	google.maps.event.trigger(main.map, 'resize');		  	
		    main.map.setCenter(marker.getPosition());
		    main.map.setZoom(zoom_in);
		    
		    if (place === 'moscow') {
		    	main.map.panBy(100, -100);
		    }
		    $('.office-descr').hide();
		    $('#effect_' + place).toggle('slide', {direction: 'right', mode: 'hide' });
		    
		    return false;
		}
	}
}