var FavoritesPanel = new Class({
	
	apartments : {},
	
	initialize: function(container)
	{
		this.container 	= $(container);
		this.container = this.container.dispose();
		this.wrapper	= new Element("div").inject(this.container);
		this.apartments = new Hash(this.apartments); 
		this.bus 		= new SearchBus();
		this.registerEvents();
		this.createButtons();
		this.form = new FormSendToFriend();
		this.form.addEvent("onSend", this.formSend.bind(this));
	},
	
	formSend: function(values)
	{
		this.bus.trigger("formFriendSent", values);
	},
	
	registerEvents: function()
	{
		this.bus.registerCallback(this.addApartment.bind(this)		, "addFavoriteApartment");
		this.bus.registerCallback(this.removeApartment.bind(this)	, "favoriteRemoved");
		this.bus.registerCallback(this.showList.bind(this)			, "returnToApartmentList");
	},
	
	createButtons: function()
	{
		this.buttons 		= new Element("div", {"class":"buttons"});
		this.compareButton	= new Element("a", {"href":"#", html:"Comparar selección &gt;&gt;"}).inject(this.buttons);
		this.compareButton.addEvent("click", function(event){event.stop();});
		this.compareButton.addEvent("click", this.compare.bind(this));
	},
	
	showForm: function()
	{
		this.bus.trigger("showFormFriend", this.form);
	},
	
	showList: function()
	{
		this.form.dispose();
		this.wrapper.inject(this.container);
	},
	
	compare: function()
	{
		this.showForm();
		this.bus.trigger("compareFavoriteApartments", this.apartments);
	},
	
	removeApartment: function(apartment)
	{
		var apartment = this.apartments[apartment.getId()];
		this.apartments.erase(apartment.getId());
		apartment.destroy();
		if(this.apartments.getLength() == 0)
		{
			this.buttons = this.buttons.dispose();
			this.container.setStyle("display","none");
		}
	},
	
	addApartment: function(apart)
	{
		var apartment = new FavoriteApartment(apart.getData());
		
		if($defined(this.apartments[apartment.getId()]))
		{
			return false;
		}
		
		this.apartments[apartment.getId()] = apartment;
		if(this.apartments.getLength() == 1)
		{
			this.buttons.inject(this.wrapper);
			this.container.setStyle("display","block");
		}
		
		apartment.inject(this.buttons, "before");
		this.bus.trigger("apartmentAddedToFavorites", apartment);
	},
	
	show: function()
	{
		if(this.apartments.getLength() > 0)
		{
			this.container.setStyle("display","block");
		}
	},
	
	formFriendFeedback: function(response)
	{
		
		if(response.ANSWER.result == true)
		{
			this.form.showSendFeedback();
			this.form.resetMailField();
		}
	}
	
});