<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>config/config.yml.example</filename>
    </added>
    <added>
      <filename>lib/bar_manitto/helpers.rb</filename>
    </added>
    <added>
      <filename>public/images/banner-coffee.jpg</filename>
    </added>
    <added>
      <filename>public/images/coffee.png</filename>
    </added>
    <added>
      <filename>public/javascripts/effects.js</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1,2 +1,3 @@
 .DS_Store
-db
\ No newline at end of file
+db
+config/config.yml
\ No newline at end of file</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,8 @@ require 'rake'
 require 'rake/testtask'
 require 'rake/rdoctask'
 require 'bar_manitto'
-
 require 'rubygems'
+require 'sinatra'
 require 'twitter'
 
 task :default do
@@ -16,6 +16,7 @@ namespace :bar do
   namespace :manitto do
     desc 'Search for #barmanitto'
     task :crawl do
+      BarManitto.init
       BarManitto::Crawler.new('#barmanitto').crawl   
     end
   end</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -2,14 +2,8 @@ $LOAD_PATH &lt;&lt; File.join(File.dirname(__FILE__), 'lib')
 require 'bar_manitto'
 require 'sinatra'
 
-helpers do
-  def tweet_links(text)
-    text.gsub(/@\w+/) do |match|
-      screen_name = match[1, match.size - 1]
-      %|&lt;a href=&quot;http://twitter.com/#{screen_name}&quot;&gt;@#{screen_name}&lt;/a&gt;|
-    end
-  end
-end
+configure { BarManitto.init }
+helpers   { include BarManitto::Helpers }
 
 get '/' do
   @offset = @params[:offset].to_i &gt; 0 ? params[:offset].to_i : 0</diff>
      <filename>app.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,31 @@
 require 'rubygems'
 require 'dm-core'
-
 gem 'twitter', &quot;0.4.2&quot;
 require 'twitter'
-
-DataMapper.setup(:default, &quot;sqlite3://#{Dir.pwd}/db/barmanitto.sqlite3&quot;)
-
 require 'bar_manitto/crawler'
 require 'bar_manitto/tweet'
+require 'bar_manitto/helpers'
 
-
-
+module BarManitto  
+  class &lt;&lt; self
+    attr_accessor :config
+  end
+  
+  def self.root
+    File.expand_path(File.dirname(__FILE__) + '/..')
+  end
+  
+  def self.init(config = nil)
+    self.config = config.nil? ? YAML.load_file(File.join(Sinatra::Application.root, 'config', 'config.yml')) : config
+    self.init_database
+  end
+  
+  def self.init_database    
+    init_database_connection
+  end
+  
+  def self.init_database_connection
+    DataMapper.setup(:default, self.config['database'])
+    DataMapper.auto_upgrade!
+  end  
+end
\ No newline at end of file</diff>
      <filename>lib/bar_manitto.rb</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,4 @@ module BarManitto
     property :original_created_at,  DateTime
     property :created_at,           DateTime
   end
-  
-  DataMapper.auto_upgrade!
 end
\ No newline at end of file</diff>
      <filename>lib/bar_manitto/tweet.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,73 @@
-$(document).ready(function() {
-	$('#more-tweets a').click(function() {
-		var offset = parseInt($('#tweets .tweet:last').attr('id').match(/tweet\-([0-9]+)/)[1]) + 1;
-		$.ajax({ url: &quot;/?offset=&quot; + offset, cache: false, 
-			beforeSend: function() { $('#more-tweets a').hide(); $('#more-tweets img').show(); },
-			success:    function(html) { $('#tweets').append(html); $('#more-tweets img').hide(); $('#more-tweets a').show();}
+var BarManitto = Class.create({
+	initialize: function(api_key, template_bundle_id) {
+		BarManitto.instance 		= this;
+		this.api_key 						= api_key;
+		this.template_bundle_id = template_bundle_id;
+		this.button_coffee 			= $('button-coffee');
+		this.button_more_tweets = $('more-tweets');
+		this.setup();
+	},
+	
+	setup: function() {
+		this.setupFacebook();
+		this.setupHandlers();	
+		this.setupTemplates();	
+	},
+	
+	setupFacebook: function() {
+		FB_RequireFeatures([&quot;Api&quot;,&quot;XFBML&quot;], function() {
+			FB.Facebook.init(this.api_key, '/xd_receiver.htm');					
+			this.api = FB.Facebook.apiClient;
+		}.bind(this));
+	},
+	
+	setupHandlers: function() {
+		this.button_coffee.observe('click', this.buttonCoffeeClickHandler.bind(this));
+		this.button_more_tweets.observe('click', this.buttonMoreTweetsClickHandler.bind(this));
+	},
+	
+	setupTemplates: function() {
+		var html = '&lt;li&gt;&lt;a href=&quot;#&quot; onclick=&quot;BarManitto.instance.sendCoffee(#{uid}); return false;&quot;&gt;&lt;span class=&quot;picture&quot; style=&quot;background-image: url(\'#{pic_square}\')&quot;&gt;&lt;/span&gt;&lt;strong&gt;#{first_name} #{last_name}&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;';
+		this.friendTpl = new Template(html);
+	},
+	
+	buttonCoffeeClickHandler: function(event) {
+		event.stop();
+		if (!this.friends) FB.Connect.requireSession(this.loadFriends.bind(this));
+		Effect.toggle('friend-selector', 'blind', { duration: 0.4 });
+	},
+	
+	buttonMoreTweetsClickHandler: function(event) {
+		event.stop();
+		var offset = parseInt($$('#tweets .tweet:last-child')[0].id.match(/tweet\-([0-9]+)/)[1]) + 1;
+		new Ajax.Updater('tweets', '/', {
+			method: 'get',
+			parameters: { offset: offset },
+			insertion: 'bottom',
+			onLoading: function() { $('more-tweets').down('a').hide();   $('more-tweets').down('img').show(); },
+			onSuccess: function() { $('more-tweets').down('img').hide(); $('more-tweets').down('a').show(); },
 		});
-		return false;
-	});
-});
-
-FB_RequireFeatures([&quot;XFBML&quot;], function(){
-	FB.Facebook.init(&quot;228c1d88b5b2121289e88adde9447d3c&quot;, &quot;/xd_receiver.htm&quot;);	
+	},
+	
+	loadFriends: function() {	
+		var user_id = this.api.get_session().uid;
+		var query = 'SELECT uid, first_name, last_name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ' + user_id + ') order by first_name';
+		FB.ensureInit(function(){
+			this.api.fql_query(query, this.handleFriendsLoad.bind(this));
+		}.bind(this));		
+	},
+	
+	handleFriendsLoad: function(result, ex) {
+		this.friends = result;
+		$('friend-selector').removeClassName('loading');
+		this.friends.each(function(friend) {
+			$('friend-selector').down('ul').insert(this.friendTpl.evaluate(friend));
+		}.bind(this));
+	},
+	
+	sendCoffee: function(friend_id) {
+		var data = {&quot;images&quot;:[{&quot;href&quot;:&quot;http://barmanitto.com&quot;, &quot;src&quot;:&quot;http://barmanitto.com/images/coffee.png&quot;}]};
+		new FB.Connect.showFeedDialog(this.template_bundle_id, data, [friend_id], &quot;&quot;, null, FB.RequireConnect.promptConnect, function(result, exception) {},
+		&quot;BarManitto&quot;, {value: &quot;Ti offro un caff&#232; direttamente dal bar manitto!!&quot;});
+	}
 });
\ No newline at end of file</diff>
      <filename>public/javascripts/application.js</filename>
    </modified>
    <modified>
      <diff>@@ -101,4 +101,60 @@ a img {
 	display: block;
 	height: 100%;
 	line-height: 30px;
+}
+
+#friend-selector {
+	height: 300px;
+}
+
+#friend-selector .friends {
+	height: 250px;
+	overflow: auto;
+}
+
+#friend-selector ul {
+	list-style-type: none;	
+	margin: 0;
+	padding: 0;
+}
+
+#friend-selector ul li {
+	float: left;
+	height: 64px;
+	margin: 3px;
+	overflow: hidden;
+	width: 134px;
+}
+
+#friend-selector ul li a {
+	display: block;
+	height: 56px;
+	padding: 4px;
+}
+
+#friend-selector ul li .picture {
+	background-color: #FFF;
+	background-position: 2px 2px;
+	background-repeat: no-repeat;
+	border: 1px solid #E0E0E0;
+	display: block;
+	float: left;
+	height: 50px;
+	margin-right: 5px;
+	padding: 2px;
+	position: relative;
+	width: 50px;
+	z-index: 1;
+}
+
+#friend-selector ul li strong {
+	color: #222222;
+	font-size: 11px;
+	font-weight: normal;
+	margin-top: 2px;
+	width: 65px;
+}
+
+.loading {
+	background: transparent url('/images/spinner.gif') no-repeat center;
 }
\ No newline at end of file</diff>
      <filename>public/stylesheets/style.css</filename>
    </modified>
    <modified>
      <diff>@@ -35,6 +35,13 @@
 			&lt;div id=&quot;right&quot;&gt;
 				&lt;div id=&quot;banner&quot;&gt;
 					&lt;img src=&quot;/images/banner.jpg&quot; /&gt;
+					&lt;a href=&quot;#&quot; id=&quot;button-coffee&quot;&gt;&lt;img src=&quot;/images/banner-coffee.jpg&quot; /&gt;&lt;/a&gt;
+				&lt;/div&gt;
+				&lt;div id=&quot;friend-selector&quot; class=&quot;loading&quot; style=&quot;display: none;&quot;&gt;
+					&lt;h3&gt;Scegli un amico a cui offrire un caff&amp;egrave;:&lt;/h3&gt;
+					&lt;div class=&quot;friends&quot;&gt;
+						&lt;ul&gt;&lt;/ul&gt;
+					&lt;/div&gt;					
 				&lt;/div&gt;
 				&lt;fb:comments xid=&quot;barmanitto&quot;&gt;&lt;/fb:comments&gt;				
 			&lt;/div&gt;
@@ -44,10 +51,13 @@
 			&lt;/div&gt;
 		&lt;/div&gt;				
 	&lt;/div&gt;	
-	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;/javascripts/jquery.js&quot;&gt;&lt;/script&gt;
+	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;/javascripts/prototype.js&quot;&gt;&lt;/script&gt;
+	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot; src=&quot;/javascripts/effects.js&quot;&gt;&lt;/script&gt;
 	&lt;script src=&quot;http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 	&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/application.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
-
+	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
+		new	BarManitto('&lt;%= config['global']['facebook_api_key'] %&gt;', &lt;%= config['global']['template_bundle_id'] %&gt;);
+	&lt;/script&gt;	
 	&lt;script type=&quot;text/javascript&quot;&gt;
 	var gaJsHost = ((&quot;https:&quot; == document.location.protocol) ? &quot;https://ssl.&quot; : &quot;http://www.&quot;);
 	document.write(unescape(&quot;%3Cscript src='&quot; + gaJsHost + &quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;));</diff>
      <filename>views/layout.erb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>public/images/coffee-1.jpg</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>e12e0f7fbe5e4249320516be4b444727bcd1cd02</id>
    </parent>
  </parents>
  <author>
    <name>Andrea Franz</name>
    <email>andrea@gravityblast.com</email>
  </author>
  <url>http://github.com/mikamai/barmanitto/commit/5a24a1cab1991d5a34232e902a1f700247bd5abe</url>
  <id>5a24a1cab1991d5a34232e902a1f700247bd5abe</id>
  <committed-date>2009-05-08T16:16:33-07:00</committed-date>
  <authored-date>2009-05-08T16:16:33-07:00</authored-date>
  <message>added configuration and send coffee button</message>
  <tree>af008f17866de702447e6e72b2fb494b5e12848a</tree>
  <committer>
    <name>Andrea Franz</name>
    <email>andrea@gravityblast.com</email>
  </committer>
</commit>
