var initializeLargeMap = function(map) {

	var delta = 3600;
	var end = map_show_start + 86400 * 4 - delta;
	var layers = {};
	var is_querying = false;
	var current_time = map_show_start + 86400;
	var scales = {};
	var currentScaleTypeId = 0;

	var changeType = function() {
		var measure_type_id = parseInt( jQuery('input.measure-type:checked',type).val() );
		var interval_time = parseInt( jQuery('.measure-interval:checked').val() );
		if ( measure_type_id == atmo_type_id ) {
			jQuery('#interval_hour').attr('disabled','disabled');
		}
		else {
			jQuery('#interval_hour').removeAttr('disabled');
		}
		if ( measure_type_id == atmo_type_id || interval_time == 86400 ) {
			delta = 86400;
			var d = new Date(current_time * 1000);
			current_time = ( d.getTime() - d.getMilliseconds() ) / 1000;
			current_time -= d.getSeconds();
			current_time -= d.getMinutes() * 60;
			current_time -= d.getHours() * 3600;
		}
		else {
			delta = 3600;
		}
		end = map_show_start + 86400 * 4 - delta;
		time_slider.slider({
			animate: true,
			step: delta,
			min: map_show_start,
			value: current_time,
			max: end,
			slide: function(event, ui) {
				current_time = parseInt( time_slider.slider('value') );
				var d = new Date( current_time * 1000 );
				date_display.html( 'Le '+d.getDate()+'/'+( d.getMonth() + 1 )+'/'+d.getFullYear()+' à '+d.getHours()+'h' );
			},
			stop: function(event, ui) {
				refreshMap();
			}
		});
		
		refreshMap();
	};
	var refreshMap = function(callback) {
		var data = {
			time: parseInt( time_slider.slider('value') ),
			type_id: parseInt( jQuery('input.measure-type:checked',type).val() )
		};
		var interval_time = parseInt( jQuery('.measure-interval:checked').val() );
		if ( interval_time == 86400 ) {
			data.interval = interval_time;
		}
		if ( ! layers[data.type_id+'-'+data.time] && ! is_querying ) {
			is_querying = true;
			jQuery.post(map_refresh_url, data, function(data) { updateMap(data); if ( callback ) { callback(); } }, 'json');
		}
		else {
			showCurrentLayer();
			if ( callback ) {
				callback();
			}
		}
	};
	var updateMap = function(data) {
		var time = parseInt( time_slider.slider('value') );
		var type_id = parseInt( jQuery('input:checked',type).val() );
		var key = type_id+' '+time;
		var interval_time;
		for( type_id in data ) {
			var data_per_type = data[type_id];
			type_id = parseInt( type_id );
			if ( typeof data_per_type.maxValue != 'undefined' ) {
				scales[type_id] = {
					minValue:data_per_type.minValue,
					maxValue:data_per_type.maxValue,
					minColor:data_per_type.minColor,
					maxColor:data_per_type.maxColor,
					scale_values:data_per_type.scale
				};
				delete data_per_type.scale;
				delete data_per_type.minValue;
				delete data_per_type.maxValue;
				delete data_per_type.minColor;
				delete data_per_type.maxColor;
			}
			interval_time = data_per_type.interval;
			delete data_per_type.interval;
			for( time in data_per_type ) {
				var data_per_time_and_type = data_per_type[time];
				time = parseInt( time );
				var current_key = type_id+'-'+time+'-'+interval_time;
				if ( ! layers[current_key] ) {
					layers[current_key] = [];
					for ( var i = 0; i < data_per_time_and_type.length ; i++ ) {
						var polygon_data = data_per_time_and_type[i];
						var polygon = addMapPolygon(
							map,
							polygon_data.paths,
							polygon_data.fill,
							polygon_data.stroke,
							polygon_data.strokeWidth,
							polygon_data.fillOpacity,
							polygon_data.strokeOpacity,
							polygon_data.label,
							null,
							1,
							( ( current_key == key ) ? false: true ) 
						);
						layers[current_key].push(polygon);
					}
				}
			}
		}
		showCurrentLayer();
		is_querying = false;
	};
	var showCurrentScale = function() {
		var type_id = parseInt( jQuery('input:checked',type).val() );
		if ( currentScaleTypeId != type_id ) {
			currentScaleTypeId = type_id;
			if ( scales[type_id] ) {
				var scale_values = scales[type_id].scale_values;
				var minValue = scales[type_id].minValue;
				var maxValue = scales[type_id].maxValue;
				var minColor = jQuery.xcolor.test( scales[type_id].minColor ).getHSV();
				var maxColor = jQuery.xcolor.test( scales[type_id].maxColor ).getHSV();
				var gradient = '';
				var absoluteMin = minValue;
				var absoluteMax = maxValue;
				for ( var key in scale_values ) {
					absoluteMin = Math.min(absoluteMin, scale_values[key]);
					absoluteMax = Math.max(absoluteMax, scale_values[key]);
				}
				var startPercent = 100 * ( minValue - absoluteMin ) / ( absoluteMax - absoluteMin );
				var endPercent = 100 * ( maxValue - absoluteMin ) / ( absoluteMax - absoluteMin );
				var previousColor = null;
				for ( var i = 0 ; i <= map_scale_num_step ; i++ ) {
					var percent = Math.round( ( (map_scale_num_step - i) * startPercent + i * endPercent ) / map_scale_num_step );
					var currentHue = Math.round( ( maxColor.h * i + minColor.h * ( map_scale_num_step - i ) ) / map_scale_num_step );
					var currentColor = jQuery.xcolor.test('hsl('+currentHue+',100,50)');
					if ( type_id == atmo_type_id && previousColor ) {
						if ( jQuery.browser.webkit ) {
							gradient += ( gradient.length > 0 ? ', ':'' ) +'color-stop('+ +','+ previousColor + ' '+ ( percent / 100 ) + ')' ;
						}
						else {
							gradient += ( gradient.length > 0 ? ', ':'' ) + previousColor + ' '+ percent + '%' ;
						}
					}
					if ( jQuery.browser.webkit ) {
						gradient += ( gradient.length > 0 ? ', ':'' ) +'color-stop('+ +','+ currentColor + ' '+ ( percent / 100 ) + ')' ;
					}
					else {
						gradient += ( gradient.length > 0 ? ', ':'' ) + currentColor + ' '+ percent + '%' ;
					}
					previousColor = currentColor;
				}
				if ( jQuery.browser.webkit ) {
					gradient = '-webkit-gradient(linear, left bottom, left top, '+gradient+')';
				}
				else if ( jQuery.browser.mozilla ) {
					gradient = '-moz-linear-gradient(center bottom,'+gradient+')';
				}
				else {
					gradient = 'linear-gradient(center bottom,'+gradient+')';
				}
				if ( ! jQuery.browser.msie ) {
					scale.css('background',gradient);
				}
				else {
					scale.css('-pie-background',gradient);
				}
				var steps_html = '';
				var scale_height = scale.height() - 13;
				if ( maxValue > minValue ) {
					if ( type_id == atmo_type_id ) {
						absoluteMax = 10.25;
						absoluteMin = 0.75;
					}
					for ( var key in scale_values ) {
						var top = ( 1 - ( scale_values[key] - absoluteMin ) / ( absoluteMax - absoluteMin ) ) * scale_height ;
						steps_html += '<div class="map-scale-step" style="top: '+top+'px;">'+key+'</div>';
					}
				}
				if ( steps_html.length ) {
					scale.html(steps_html);
				}
				else {
					scale.html('<div class="map-scale-max">'+maxValue+'</div><div class="map-scale-min">'+minValue+'</div>');
				}
				scale.show();
			}
			else {
				scale.hide();
			}
		}
	};
	var showCurrentLayer = function() {
		showCurrentScale();
		var d = new Date();
		var time = parseInt( time_slider.slider('value') )-d.getTimezoneOffset()*60;
		var interval_time = parseInt( jQuery('.measure-interval:checked').val() );
		var type_id = parseInt( jQuery('input:checked',type).val() );
		var key = type_id+'-'+time+'-'+interval_time;
		for ( var layer_key in layers ) {
			var layer = layers[layer_key];
			for ( var j = 0; j < layer.length ; j++ ) {
				var polygon = layer[j];
				if ( ( key == layer_key ) && ! polygon.getMap() ) {
					polygon.setMap( map );
				}
				else if ( ( key != layer_key ) && polygon.getMap() ) {
					polygon.setMap(null);
				}
			}
		}
		//map_mask.setMap(null);
		//map_mask.setMap( map );
		var d = new Date( time * 1000 );
		date_display.html( 'Le '+d.getDate()+'/'+( d.getMonth() + 1 )+'/'+d.getFullYear()+' à '+d.getHours()+'h' );
	};
	var nextInterval = function() {
		if ( ! animate.attr('checked') ) {
			animated_thread = 0; 
			return;
		}
		if ( ! is_querying ) {
			var next_value = current_time + delta;
			if ( next_value > end) {
				next_value = map_show_start;
			}
			current_time = next_value;
			time_slider.slider('value', current_time );
			refreshMap(animated_thread?function() {
				animated_thread = setTimeout( nextInterval, 1000 );
			}:null);
		}
	};
	var startStopAnimation = function() {
		if ( animate.attr('checked') ) {
			animated_thread = setTimeout( nextInterval, 100 );
		}
		else {
			clearInterval(animated_thread);
			animated_thread = 0; 
		}
	};
	
	var animated_thread;
	var type = jQuery('#map-controls-type-id');
	var interval = jQuery('.measure-interval');
	var animate = jQuery('#map-controls-animate');
	var time_slider = jQuery('#map-controls-slider');
	var date_display = jQuery('#map-controls-date-display');
	var scale = jQuery('.map-scale');
	animate.bind('click', startStopAnimation );
	jQuery('input',type).bind('click', changeType );
	interval.bind('click', changeType );

	changeType();
	startStopAnimation();
};

var initializeSmallMap = function(map) {
	var n = new Date();
	if ( n.getUTCHours() > 16 ) {
		n.setTime(n.getTime() + 86400000 );
	}
	jQuery('#complete_time').html( n.getUTCDate()+'/'+( n.getUTCMonth() + 1)+'/'+n.getUTCFullYear());
	
	var index = jQuery('#map-tab-index');
	var pollution = jQuery('#map-tab-pollution');
	var content_index = jQuery('#content_indice');
	var content_pollution = jQuery('#content_pollution');
	var scale = jQuery('.map-scale');
	
	var showIndex = function() {
		index.addClass('selected');
		pollution.removeClass('selected');
		content_index.show();
		content_pollution.hide();
		scale.hide();
		for ( var i = 0; i < map_index_markers.length ; i++ ) {
			map_index_markers[i].setVisible(true);
		}
                marker_location_tours.setVisible(false);
                marker_location_orleans.setVisible(false);
		for ( var i = 0; i < map_polygon_list.length ; i++ ) {
			map_polygon_list[i].setMap( null );
		}
	};
	var showPollution = function() {
		index.removeClass('selected');
		pollution.addClass('selected');
		content_index.hide();
		content_pollution.show();
		scale.show();
		for ( var i = 0; i < map_index_markers.length ; i++ ) {
			map_index_markers[i].setVisible(false);
		}
                marker_location_tours.setVisible(true);
                marker_location_orleans.setVisible(true);
		for ( var i = 0; i < map_polygon_list.length ; i++ ) {
			map_polygon_list[i].setMap( map );
		}
		//map_mask.setMap(null);
		//map_mask.setMap( map );
	};

	index.bind('click', showIndex );
	pollution.bind('click', showPollution );

	showIndex();
}

