var FavoriteLink = Class.create(); Object.extend(FavoriteLink.prototype, { not_favorite_text: 'Save Listing', new_favorite_text: 'A new listing has been added to My Saved Homes', favorite_text: 'Un-Save Listing', removed_favorite_text: 'This listing has been removed from My Saved Homes', favorite_login: 'Login to save a favorite', initialize: function(element) { this.element = element; this.registerEvents(); }, registerEvents: function() { Event.observe(this.element, 'click', this.toggle.bindAsEventListener(this)); }, toggle: function(event) { Event.stop(event); if( this.element.innerHTML.indexOf(this.favorite_login) != -1 ) { location.href = '/user/login.php?new_favorite='+this.fmls(); return; } var saving = this.element.innerHTML.indexOf(this.favorite_text) == -1; this.element.innerHTML = saving ? this.element.innerHTML.replace(this.not_favorite_text, this.favorite_text) : this.element.innerHTML.replace(this.favorite_text, this.not_favorite_text); new Ajax.Request('/controllers/user/toggle_favorite.php', { parameters: $H({fmls: this.fmls()}).toQueryString(), onSuccess: (function(transport, json) { alert(saving ? this.new_favorite_text : this.removed_favorite_text); }).bind(this) }); }, fmls: function() { return this.element.id.gsub(/\D/, ''); } }); Event.observe(window, 'load', function() { document.getElementsByClassName('favorite-link').each(function(e) { new FavoriteLink(e); }); });