var ApartmentsPanel = new Class({
	
	apartments 			: {},
	cachedApartments	: undefined,
	
	titleText			: "",
	
	initialize: function(container)
	{
		this.container 	= $(container);
		this.apartments = new Hash(this.apartments); 
		this.bus 		= new SearchBus();
		this.registerEvents();
	},
	
	registerEvents: function()
	{
		//this.bus.registerCallback(this.removedFromFavorite.bind(this)	, "favoriteRemoved");
	},
	
	reset: function()
	{
		this.container.set("html", "");
		this.apartments.each(function(apartment){apartment.destroy()});
		this.apartments = new Hash({}); 
	},
	
	removeApartment: function(apartment)
	{
		var id = apartment.getId()
		if($defined(this.apartments[id]))
		{
			this.apartments[id].destroy()
			this.apartments.erase(id);
		}
	},
	
	removedFromFavorite: function(apartment)
	{
		var apartmentId = apartment.getId();
		
		if(!$defined(this.apartments[apartmentId]))
		{
			return false;
		}
		
		apartment = this.apartments[apartmentId];
		apartment.removedFromFavorites()
	},
	
	returnToApartmentsList: function()
	{
		if($defined(this.cachedApartments))
		{
			this.bus.trigger("returnToApartmentList");
			this.reset();
			this.cachedApartments.each(this.recoverCachedApartment.bind(this));
			this.cachedApartments = undefined;
		}
	},
	
	recoverCachedApartment: function(apartment)
	{
		this.addApartment(apartment);
		apartment.loaded();
	},
	
	addFavorite: function(favorite)
	{
		var apartment = new Apartment(favorite.getData(), true);
		this.addApartment(apartment);
	},
	
	addApartment: function(apartment, beforeId)
	{
		if($defined(this.apartments[apartment.getId()]))
		{
			return false;
		}
		
		this.apartments[apartment.getId()] = apartment;
		
		if (!$defined(beforeId) || ($defined(beforeId) && !$defined(this.apartments[beforeId]))) {
			apartment.inject(this.container);
		}
		else{
			apartment.inject(this.apartments[beforeId].wrapper, "before");
		}
	},
	
	highlightApartment: function(id)
	{
		this.apartments[id].highlight();
	},
	
	unHighlightApartment: function(id)
	{
		this.apartments[id].unHighlight();
	},
	
	viewingFavorites: function()
	{
		return $defined(this.cachedApartments);
	},
	
	hide: function()
	{
		this.apartments.each(function(apartment)
		{
			apartment.wrapper.setStyle("display","none");
		})
			
	},
	
	show: function()
	{
		this.apartments.each(function(apartment)
		{
			apartment.wrapper.setStyle("display","block");
		})
	},
	
	loading: function()
	{
		this.container.addClass("loading");
	},
	
	loaded: function()
	{
		this.container.removeClass("loading");
	}
	
});