var map;
var markerManager;
var markers = new Array();
$(function(){
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("address_map"));
 		map.setCenter(new GLatLng(49.44533495,0.9391729499999999), 8);
 		map.addControl(new GScaleControl());
 		map.addControl(new GLargeMapControl());
		GEvent.addListener(map, "infowindowopen", function() {
			$('.nyroModal').nyroModal();
		});
// 		markerManager = GMarkerManager(map);
	}
//	$('#address_map').jmap('init', {'mapType':'map','mapCenter':[37.4419, -122.1419]});
	GetMapData();
	$('.code_filter').click(function(){
		GetMapData();
	})
});

function GetMapData(){
    var type_value = $('#type_filter').val();
    var code_value = '0';
    var check;
    check = $('#code_filter:checked').length;
    if(check == 1){
    	code_value = '0';
    	check = 0;
    }
    check = $('#code_filter27:checked').length;
    if(check == 1){
    	code_value = '27';
    	check = 0;
    }
    check = $('#code_filter76:checked').length;
    if(check == 1){
    	code_value = '76';
    	check = 0;
    }
	var url = '/maps/index/request/type/'+type_value+'/code/'+code_value;
//		alert(url);
		$('#address_list').html('');
		$.ajax({
			url: url,
			dataType: 'json',
			success: function (data, textStatus) {
				if(typeof(data.error) != 'undefined'){
					if(data.error != ''){
						alert('success: error '+data.error);
					}
				}else{
					FillList(data.res);
				}
		    },
			error: function (data, status, e){
				alert('error: '+e);
			}
		});
}

function FillList(res){
	$ul = $('<ul></ul>');
//	delete markerManager;
	clearMarkers();
//	markerManager = GMarkerManager(map);
	var marker;
	$.each(res, function(){
		$ul.append($('<li><address><span class="name" id="link-'+this.id+'">'
								+ this.zipcode
								+ ' '
								+ this.pij
								+ '</span><br />'
								+ this.name
								+ '<br />'
								+ this.tel
								+ '</address></li>'));
		getGeo(this);
	})

	map.setCenter(new GLatLng(49.44533495,0.9391729499999999), 8);
	$('#address_list').append($ul);
	$('#address_list address').ieHover();
}

function setMarker(point, obj){
	var tinyIcon = new GIcon();
	tinyIcon.image = "/img/gmaps_pin1.png"; // путь к иконке
	tinyIcon.iconSize = new GSize(22, 44); //размеры иконки
	tinyIcon.iconAnchor = new GPoint(11,44); // "центр" иконки
	tinyIcon.shadow = "/img/gmaps_pin1_shadow.png";
	tinyIcon.shadowSize = new GSize(54, 49);
	tinyIcon.infoWindowAnchor = new GPoint(11, 15); // точка привязки инфоокна
	markerOptions = { icon:tinyIcon };
	var marker = new GMarker(point, markerOptions);
	var html;
//	markerManager.AddMarker(marker);
	map.addOverlay(marker);
	markers.push(marker);
	html = '<div class="vcard gm-proxi-container">'
		+ '<span class="fn org">' + obj.pij + '</span>'
		+ '<span class="fn org">' + obj.name + '</span>'
		+ '<div class="adr">'
		+ '<span class="title">Adresse du lieu d\'accueil :</span>'
		+ '<span class="type">Work</span>'
		+ '<span class="street-address">'+obj.address1+ '</span>'
		if(obj.address2 != ''){
			html = html + '<span class="extended-address">'+obj.address2+ '</span>'
		}
		html = html + '<span class="postal-code">' + obj.zipcode + '</span>';
		html = html + ' <span class="locality">' + obj.city + '</span>';
		if(obj.tel != ''){
			html = html + '<div class="tel" title="Tél">'
				+ '<span class="type">Work</span>'
				+ '<span class="num">'
				+ obj.tel
				+ '</span></div>';
		}
		if(obj.fax != ''){
			html = html + '<div class="tel fax" title="Fax">'
				+ '<span class="type">Fax</span>'
				+ '<span class="num">'
				+ obj.fax
				+ '</span></div>';
		}
		if(obj.email != '') {
			html = html + '<a class="email external-link" href="mailto:' + obj.email + '">' + obj.email + '</a><br />';
		}
		if(obj.web != '') {
			html = html + '<a class="url external-link" href="http://' + obj.web + '" target="_blank">' + obj.web + '</a><br />'	;
		}
	html = html + '</div>';

//	html = html+'Adresse postale:<br />'
	if(obj.p_address1+obj.p_address2+obj.p_zipcode+obj.p_city+obj.p_box+obj.p_tel+obj.p_email != ''){
		html = html+ '<div class="adr">'
		    + '<span class="title">Adresse postale :</span>'
			+ '<span class="type">Work</span>'
		if(obj.p_address1 != ''){
			html = html + '<span class="street-address">'+obj.p_address1+ '</span>'
		}
		if(obj.p_address2 != ''){
			html = html + '<span class="extended-address">'+obj.p_address2+ '</span>'
		}
		if(obj.p_zipcode != ''){
			html = html + '<span class="postal-code">' + obj.p_zipcode + '</span>';
		}
		if(obj.p_city != ''){
			html = html + '&nbsp;<span class="locality">' + obj.p_city + '</span>';
		}
		if(obj.p_box != ''){
			html = html+'&nbsp;<span class="postal-box">'+obj.p_box+'</span>';
		}
		if(obj.p_tel != ''){
			html = html + '<div class="tel" title="Tél">'
				+ '<span class="type">Work</span>'
				+ '<span class="num">'
				+ obj.p_tel
				+ '</span></div>';
		}
		if(obj.p_email != '') {
			html = html + '<a class="email external-link" href="mailto:' + obj.p_email + '">' + obj.p_email + '</a>';
		}
		html = html + '</div>';
	}
	if(obj.comment != ''){
		html = html+obj.comment+'<br />';
	}
	html+=renderTimeForDay('Lundi ',obj.time_1);
	html+=renderTimeForDay('Mardi ',obj.time_2);
	html+=renderTimeForDay('Mercredi ',obj.time_3);
	html+=renderTimeForDay('Jeudi ',obj.time_4);
	html+=renderTimeForDay('Vendredi ',obj.time_5);
	html+=renderTimeForDay('Samedi ',obj.time_6);

	if(obj.manager != ''){
		html = html + '<span class="fn"><span class="title name-manager">Nom du responsable : </span>'+ obj.manager + '</span>';
	}
	if(obj.president != ''){
		html = html + '<span class="fn"><span class="title name-president">Nom du Maire ou du Président : </span>'+ obj.president + '</span>';
	}

	if(obj.photo != ''){
		html = html + '<span class="photo"><a href="'+ obj.photo + '" class="nyroModal"><img src="'+ obj.photo_list + '" border="0" /></a></span><br />';
	}
	if(obj.video != ''){
		html = html + '<span class="video"><a class="video external-link" target="_blank" href="/maps/index/video/id/' + obj.id + '">Voir la vidéo</a></span><br />';
	}
	html = html + '<span class="imprimer"><a class="imprimer external-link" target="_blank" href="/maps/index/print/id/' + obj.id + '">Imprimer</a></span>';

	html = html+'</div>';

	marker.bindInfoWindowHtml(html);
	// Element in left list
	var listElem = $('#link-'+obj.id).parents('li').eq(0);
	// scrolls the left list to the selected pin
  GEvent.addListener(marker, "click", function() {
  	// Remove selected class from current element
  	$('#address_list li.selected').removeClass("selected");
  	// Add class and scrolls the list to the element
  	$('#address_list').scrollTo(listElem.addClass("selected"),1000,{offset: {top: -2}});
	});
	listElem.click(function(){
  	$('#address_list li.selected').removeClass("selected");
  	$(this).addClass("selected");
		marker.openInfoWindowHtml(html);
		return false;
	})
}

function renderTimeForDay(day, time){
	return '<div class="time" title="'+day+'">'+day+': <span>'+time+'</span></div>';
}
function clearMarkers(){
	var marker;
	while(markers.length>0){
		marker = markers.shift();
		map.removeOverlay(marker);
	}
	countMarkers = 0;
    centerLat = 0;
    centerLng = 0;
	adresses = new Array();
	index=-1;
}

function getGeo(obj) {
	adresses[adresses.length]=obj;
	if (index == -1) {
		index++;
		getGeoNext();
	}
}

var adresses = new Array();
var index=-1;
function getGeoNext(){
	if(index<adresses.length){
		getRealGeo(adresses[index++]);
	}
	else{
		map.setCenter(new GLatLng(bounds[0]+(bounds[1]-bounds[0])/2,bounds[2]+(bounds[3]-bounds[2])/2));
		adresses = new Array();
		index=-1;
	}
}
var bounds = new Array(null,null,null,null);
function getRealGeo(obj) {
        addIndicator(obj.id);
        $.getJSON('/utils/geo/index/', obj, function(data){
            if (data) {
                var point = new GLatLng(data.latitude,data.longtitude);
   				bounds[0]=minimum(point.lat(),bounds[0]);
   				bounds[1]=maximum(point.lat(),bounds[1]);
   				bounds[2]=minimum(point.lng(),bounds[2]);
   				bounds[3]=maximum(point.lng(),bounds[3]);
   				retValue = setMarker(point, obj);
                removeIndicator(obj.id);
            }
   			getGeoNext();
        });
}
function maximum(x,y){
	if(x===null) return y;
	if(y===null) return x;
	return Math.max(x,y);
}
function minimum(x,y){
	if(x===null) return y;
	if(y===null) return x;
	return Math.min(x,y);
}
function addIndicator(id)
{
    removeIndicator(id);
    $img = $('<img src="/img/indicator.gif" class="indicator">');
    $('#link-'+id).parent('address').append($img);
}
function removeIndicator(id)
{
   $('#link-'+id).parent('address').children('img.indicator').remove();
}
