
var CompareNShare = new Class({
	
	Implements: [Options, Events],
	
	options: 
	{
		container: 'favorites',
		listContainer: 'results',
		mapContainer: 'canvas',
		
		
		getPrefredListUrl: 	"public/compareandsharecontroller/getPreferedList",
		setPreferedUrl:		"public/compareandsharecontroller/setPrefered",
		unsetPreferedUrl:	"public/compareandsharecontroller/unsetPrefered",
	},
	
	initialize: function(options)
	{
		this.setOptions(options)
		this.bus = new SearchBus();
		this.registerEvents();
		this.setUp();
	
	
	},
	
	setUp: function()
	{
		this.setLinks();
		this.preferedApartmentsPanel = new ApartmentsPanel(this.options.container);
		this.getPreferedList()
		this.hide();
		$('compareNShareLink').setStyles({'display':'none'})
	},
	
	registerEvents: function()
	{
		this.bus.registerCallback(this.addFavorite.bind(this)			, "addFavoriteApartment");
		this.bus.registerCallback(this.removeFavorite.bind(this)		, "favoriteRemoved");
		this.bus.registerCallback(this.hide.bind(this)					, "returnToList");
		this.bus.registerCallback(this.show.bind(this)					, "showFavorites");
	},
	
	setLinks: function()
	{
		var compareNShareLink = new Element('a',{'href':'#', 'html':'Compara y comparte', 'id':'compareNShareLink'});
		compareNShareLink.inject($(this.options.container),'before');
		$('compareNShareLink').addEvent('click', function(event)
		{
			event.preventDefault()
			this.bus.trigger("showFavorites");
		}.bind(this))
		
		var backToListLink = new Element('a',{'href':'#', 'html':'Volver a la lista', 'id':'backToList'});
		backToListLink.inject($(this.options.container),'before')
		$('backToList').setStyles({'display':'none'})
		$('backToList').addEvent('click', function(event)
		{
			event.preventDefault();
			this.bus.trigger("returnToList");
		}.bind(this))
		
	},
	
	show: function()
	{
		var thereAreFavoriteApartments = this.checkIfFavorites()
		if(!thereAreFavoriteApartments)
		{
			this.getBlankState()
		}
		$(this.options.container).setStyles({'display':'block'})
		$('backToList').setStyles({'display':'inline'})
		$('compareNShareLink').setStyles({'display':'none'})
		this.preferedApartmentsPanel.show()
		
	},
	
	getBlankState: function()
	{
		
	},
	
	checkIfFavorites: function()
	{
		var numberOfFavorites = $H(this.preferedApartmentsPanel.apartments).getLength()
		if(numberOfFavorites > 0)
		{
			return true
		}
		
		return false
	},
	
	getPreferedList: function()
	{
		new Request.JSON({url: this.options.getPrefredListUrl , onComplete:function(response){
			this.preferedApartmentsList = response.ANSWER.result.collection
			this.addApartments();
		}.bind(this)}).send();
	},
	
	addApartments: function()
	{
		var preferedApartmentsList = $H(this.preferedApartmentsList)
		preferedApartmentsList.each(function(element)
		{
			var oneApartment = new Apartment(element);
			oneApartment.markFavorite();
			this.preferedApartmentsPanel.addApartment(oneApartment);
		}.bind(this))
	},
	
	hide: function()
	{
		$(this.options.container).setStyles({'display':'none'})
		$('backToList').setStyles({'display':'none'})
		$('compareNShareLink').setStyles({'display':'inline'})
		this.preferedApartmentsPanel.hide()
	},
	
	addFavorite: function(apartment)
	{
		var apartmentData = apartment.getData();
		var preferedApartment = new Apartment(apartmentData);
		preferedApartment.markFavorite();
		this.preferedApartmentsPanel.addApartment(preferedApartment);
		var data 	= {};
		data[apartment.ajaxProperties.AJAX_KEY_APARTMENT_ID]	= apartment.id.remoteId;
		data[apartment.ajaxProperties.AJAX_KEY_CRS_ID]	= apartment.id.CRS;
		new Request.JSON({url: this.options.setPreferedUrl , data: {"QUERY":JSON.encode(data)}}).send();
	},
	
	removeFavorite: function(apartment)
	{
		var data 	= {};
		data[apartment.ajaxProperties.AJAX_KEY_APARTMENT_ID]	= apartment.id.remoteId;
		data[apartment.ajaxProperties.AJAX_KEY_CRS_ID]	= apartment.id.CRS;
		new Request.JSON({url: this.options.unsetPreferedUrl , data: {"QUERY":JSON.encode(data)}}).send();
		this.preferedApartmentsPanel.removeApartment(apartment);
		
	},
	checkFavorite: function(apartment)
	{
		var apartmentId = apartment.getId()
		if($defined(this.preferedApartmentsPanel.apartments[apartmentId]))
		{
			return true;
		}
		return false;
	}
})