var maps = new Array();
var markers = new Array();
var infoWindows = new Array();
var mappingCounter = 0;
var markerCounter = 0;

jQuery(document).ready(function($) {
	initializeMaps();
});

function initializeMaps()
{
	var mappings = jQuery('.mapping');
	mappings.each(function()
	{
		 initializeMap(this, mappings.length);
		 mappingCounter++;
	});
}

function initializeMap(mapping, totalMaps)
{
	var ids = jQuery(mapping).attr('id').split('_');
	var mapIndex = ids[ids.length - 1];
	
	var latlng = new google.maps.LatLng(0, 0);
    var myOptions = {
    	zoom: 8,
    	center: latlng,
    	mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    maps[mappingCounter] = new google.maps.Map(document.getElementById("mapping_viewer_" + mapIndex), myOptions);
	
	var mappingLatitudes = jQuery(mapping).find("input[name='mapping_latitude_" + mapIndex + "']");
	var mappingLongitudes = jQuery(mapping).find("input[name='mapping_longitude_" + mapIndex + "']");
	var mappingZooms = jQuery(mapping).find("input[name='mapping_zoom_" + mapIndex + "']");
	var mappingTitles = jQuery(mapping).find("input[name='mapping_name_" + mapIndex + "']");
	var mappingDetails = jQuery(mapping).find("input[name='mapping_details_" + mapIndex + "']");

	var i = 0;
	var total_markers = jQuery(mappingLatitudes).length;
	
	while(i < total_markers)
	{
		var markerScopeWrapper = function(mapIndex, i, counter) {
			var latLng = new google.maps.LatLng(jQuery(mappingLatitudes[i]).val(), jQuery(mappingLongitudes[i]).val());
			var marker = new google.maps.Marker({
				position: latLng,
				map: maps[mappingCounter]
			});
			marker.setTitle(jQuery(mappingTitles[i]).val());
			infoWindows[counter] = new google.maps.InfoWindow({
		        content: jQuery(mappingDetails[i]).val()
		    });
			google.maps.event.addListener(marker, 'click', function() {
				var j = 0;
				var total_info_windows = infoWindows.length;
				while(j < total_info_windows)
				{
					infoWindows[j].close();
					j++;
				}
				infoWindows[counter].open(maps[mapIndex], marker);
				
				var zoom = parseInt(jQuery(mappingZooms[i]).val());
				if(zoom > 0)
				{
					maps[mapIndex].setZoom(zoom);
				}
				
				opts = {'axis':'y'}
				jQuery('#mapping_listing_' + mapIndex).scrollTo('#mapping_listing_item_' + mapIndex + '_' + counter, 500, opts);
				
				var selecter = jQuery("#mapping_selecter_" + mapIndex);
				jQuery("#mapping_selecter_" + mapIndex).val(counter);
			});
			
			markers[counter] = marker;
			
			if(i == 0)
			{
				maps[mappingCounter].setCenter(latLng);
			}
		}
		markerScopeWrapper(mappingCounter, i, markerCounter);
		
		i++;
		markerCounter++;
	}
	
	jQuery("a.mapping_listing_item_name").bind('click', mappingListingItemClick);
	jQuery("a.mapping_listing_item_show").bind('click', mappingListingItemClick);
	jQuery("select.mapping_selecter").bind('change', mappingSelectorChange);
}

function mappingListingItemClick()
{
	var ids = jQuery(this).attr('id').split('_');
	var mapIndex = parseInt(ids[ids.length - 3]);
	var markerCounter = parseInt(ids[ids.length - 2]);
	var markerId = parseInt(ids[ids.length - 1]);
	
	var marker = markers[markerCounter];
	var map = maps[mapIndex];
	
	var j = 0;
	var total_info_windows = infoWindows.length;
	while(j < total_info_windows)
	{
		infoWindows[j].close();
		j++;
	}
	
	infoWindows[markerCounter].open(map, marker);
	
	/*
	$(this).parents('.mapping_listing_item:first').siblings('.mapping_listing_item').removeClass('selected');
	$(this).parents('.mapping_listing_item:first').addClass('selected');
	*/
	
	var selecter = jQuery("#mapping_selecter_" + mapIndex);
	jQuery("#mapping_selecter_" + mapIndex).val(markerCounter);
	
	opts = {'axis':'y'}
	jQuery('#mapping_listing_' + mapIndex).scrollTo('#mapping_listing_item_' + mapIndex + '_' + markerCounter, 500, opts);
	
	return false;
}

function mappingSelectorChange()
{
	var ids = jQuery(this).attr('id').split('_');
	var mapIndex = parseInt(ids[ids.length - 1]);

	var markerCounter = parseInt(jQuery(this).val());
	
	var marker = markers[markerCounter];
	var map = maps[mapIndex];
	
	var j = 0;
	var total_info_windows = infoWindows.length;
	while(j < total_info_windows)
	{
		infoWindows[j].close();
		j++;
	}
	
	infoWindows[markerCounter].open(map, marker);
	
	/*
	$(this).parents('.mapping_listing_item:first').siblings('.mapping_listing_item').removeClass('selected');
	$(this).parents('.mapping_listing_item:first').addClass('selected');
	*/
	
	opts = {'axis':'y'}
	jQuery('#mapping_listing_' + mapIndex).scrollTo('#mapping_listing_item_' + mapIndex + '_' + markerCounter, 500, opts);

}