var AttractionsMenu = function($wrapper, dmap, $controller)
{
	var that = this;
	var isStyled = false;
	this.isActive = false;
	var attrContent = $wrapper.find('#all-attractions').text();
	var hasAttractions = !BT.util.stringIsEmpty(attrContent);

	if (!hasAttractions)
	{
		$controller.hide();
		return false;
	}
	
	// Massage HTML
	$wrapper.find('li').each(function(i){
		$(this).find('.attraction').before('<input type="checkbox" class="item-num-' + (i + 1) + '"/><span class="item-id">'+ (i + 1)+'</span>');
	});

	$wrapper.find('#major-attractions input').each(function(i){
		$(this).attr('checked', true);
	});

	// Add event handlers
	$controller.toggle(
		function(){
			show();
			this.isActive = true ;
		},
		function(){
			hide();
			this.isActive = false;
		}
	);

	$wrapper.find('.close').click(function (event){
		$controller.click();
	});

	$wrapper.find('input').click(function(event) {
		var $checkbox = $(this);
		selectItem($checkbox);
	});

	// private functions
	var show = function()
	{
		$wrapper.addClass('active').removeClass('inactive');
		$controller.addClass('selected');

		$wrapper.find(':checked').each(function(i){
			selectItem($(this));
		});

		if (!isStyled)
		{
			curvyCorners({
				tl: { radius: 10 },
				tr: { radius: 10 },
				bl: { radius: 10 },
				br: { radius: 10 }
			} , '#map-attractions');

			isStyled = true;
		}

		that.isActive = true;
	}

	var hide = function()
	{
		$wrapper.removeClass('active').addClass('inactive');
		$controller.removeClass('selected');

		dmap.hideAllAttractions();
		that.isActive = false;
	}

	var selectItem = function($checkbox)
	{
		var attraction = $checkbox.siblings('.attraction').text();
		var attractionNumber = parseInt($checkbox.siblings('.item-id').text());

		if ($checkbox.is(':checked'))
		{
			var latlong = AttractionsMenu.getLatLongFromComment($checkbox);
			dmap.addAttraction(attraction, attractionNumber, latlong, attraction);
		}
		else
		{
			dmap.hideAttraction(attractionNumber);
		}
	}

	// privileged functions
	this.isItemSelected = function(attractionNumber)
	{
		return $wrapper.find('input.item-num-' + attractionNumber).is(':checked');
	}
}

AttractionsMenu.getLatLongFromComment = function($checkbox)
{
	var comment = $checkbox.parent().html().match(/<!--(.+?)-->/);

	if (typeof(comment) != 'undefined' && comment != null)
	{
		var latlongArray = comment[1].split(',');
		return new GLatLng(latlongArray[0], latlongArray[1]);
	}
}

