var UID = null;
var templates = {};

// Observers
document.observe("dom:loaded", function() {
	setFacebookConnectParams();
	if ($("fb_connect_log"))
		$("fb_connect_log").observe("click", fbConnect);
	$("fb_connect").observe("click", fbConnect);
	$("fb_connect_close").observe("click", function(){
		showFacebookBar();
		$('fb_connect_confirm_box').setStyle({display:'block'});
	});
	$("fb_connect_cancel_unlog").observe("click", function(){
		$('fb_connect_confirm_box').setStyle({display:'none'});
	});
	$("fb_connect_confirm_unlog").observe("click", fbDeconnect);
	$("wall_share").observe("click", fbDisplayWall);
	$("friend_share").observe("click", fbDisplayFriendSelector);
	// $("fb_connect_hide_content").observe("click", function(){
	// 	fbHideContent();
	// 	upFacebookBar();
	// });
	$("fb_connect_hide").observe("click", showFacebookBar);
	$("fb_connect_arrow_button").observe("click", function(){
		upFacebookBar();
		Effect.Fade($('fb_connect_arrow_button'), {duration : 0.2});
	});
});

//Facebook Connect
var fbConnect = function(e){
	Event.stop(e);
	var el = Event.element(e); // source de l'evenement
	loginFacebookConnectUser();
}

var fbDeconnect = function(e){
	Event.stop(e);
	var el = Event.element(e); // source de l'evenement
	$('fb_connect_confirm_box').setStyle({display:'none'});
	hideFacebookBar();
	logoutFacebookConnectUser();
	Effect.Appear($("fb_connect"));
}
var fbShowWall = function(){
	$("fb_connect_bar").setStyle({height:"auto"});
	$("fb_connect_content").morph('height:276px');
}
var fbShowFriends = function(){
	$("fb_connect_bar").setStyle({height:"auto"});
	$("fb_connect_content").morph('height:405px');
}
var fbDisplayWall = function(){
	fbShowWall();
	fbmlRenderer(templates.wall, "fb_connect_content");
}
var fbDisplayFriendSelector = function(){
	fbShowFriends();
	fbmlRenderer(templates.friendSelector, "fb_connect_content");
}
var fbHideContent = function(){
	$("fb_connect_content").update();
	$("fb_connect_content").morph('height:0px');
}
var upFacebookBar = function(){
	$("fb_connect_toolbar").morph('bottom:-11px');
	$("fb_connect_confirm_box").setStyle({display:'none'});
}

var showFacebookBar = function(){
	fbHideContent();	
	$("fb_connect_wrapper").setStyle({display:"block"});
	$("fb_connect_toolbar").morph('bottom:-50px');
	Effect.Appear($('fb_connect_arrow_button'), {duration : 0.1});
}

var hideFacebookBar = function(){
	Effect.Fade($('fb_connect_arrow_button'));
	$("fb_connect_toolbar").morph('bottom:-60px');	
	setTimeout("$('fb_connect_wrapper').setStyle({display:'none'})", 800)
	unloadFacebookBar();
	return true;
}

var loadFacebookBar = function(callback){
	$("fb_connect_wrapper").setStyle({display:"block"});
	fbmlRenderer(templates.userName, "user_name");
	fbmlRenderer(templates.userStatus, "user_status");
	fbmlRenderer(templates.userPicture, "profile_image");
	if(callback)
		callback.call();
}

var unloadFacebookBar = function(){
	$("user_name").update();
	$("user_status").update();
	$("profile_image").update();
	templates={};
	UID=null;
}

function fbmlRenderer(fbml, container){
	//$(container).update(fbml);
	$(container).innerHTML = fbml;
	FB.XFBML.Host.parseDomTree();
}

function loginFacebookConnectUser(){
	//setFacebookConnectParams();
	FB.ensureInit(function(){
		FB.Connect.requireSession(function(){
			loadFacebookBar(upFacebookBar);
			console.log('first request');
			Effect.Fade($("fb_connect"));
			if(!UID){
				requireSession();
			}
			if(UID == ""){
				requireSession();
			}		
		});
	});
	return false;
}
function logoutFacebookConnectUser(){
	FB.ensureInit(function(){
		fbHideContent();
		FB.Connect.logout(hideFacebookBar);
		requireLogout();
	});
	return false;
}
var requireSession = function(){
		new Ajax.Request('/session', {
			method: 'post', 
			onFailure: function(error){ hideFacebookBar() },
			onSuccess: function(response){ if (response.responseText){ $("user-bar-action").insert({before: response.responseText}) }},
			parameters: {uid: UID}
		});
}
function requireLogout(){
	new Ajax.Request('/session', {
		method: 'delete', 
		onSuccess: function(response){	
			$('admin_control').remove();
			console.log(response);
		}
	});
}

function setFacebookConnectParams(){
	FB_RequireFeatures(["XFBML"], function(){
		FB.Facebook.init($F("fb_secret_key"), "xd_receiver.html");
		FB.Facebook.get_sessionState().waitUntilReady(function(){
			UID = FB.Facebook.apiClient.get_session().uid;
			if (UID){
				if (!$('admin_control')){
					requireSession();
				}
				templates = {
					wall : '<fb:comments xid="sociabliz_comments" publish_feed="false"  quiet="true"  canpost="true" candelete="true" simple="true" returnurl="http://www.sociabliz.com/"> <fb:title></fb:title> </fb:comments>',
					friendSelector : '<fb:serverfbml style="overflow:hidden; margin:auto">\
						<script type="text/fbml">\
							<fb:fbml>\
								<fb:request-form action="http://www.sociabliz.com"\
												 method="POST"\
												 invite="true"\
												 type="Sociabliz"\
												 content="Viens découvrir Sociabliz<fb:req-choice url=\'http://www.sociabliz.com\' label=\'Visiter\' />" >\
									<fb:multi-friend-selector showborder="false"\
												actiontext="Faire découvrir Sociabliz à mes amis"\
												rows="3"\
												cols="4" />\
								</fb:request-form>\
							</fb:fbml>\
						</script>\
						</fb:serverfbml>',
					userName : "<fb:name uid=\"" + UID + "\" useyou=\"false\" linked=\"true\"></fb:name>",
					userPicture : "<fb:profile-pic uid=\"" + UID + "\" linked=\"false\" width=\"30\" height=\"30\"></fb:profile-pic>",
					userStatus : "<fb:user-status uid=\"" + UID +"\" linked=\"true\"/>"
				}
				loadFacebookBar(upFacebookBar);
			}
		});
		if(!UID){ Effect.Appear($('fb_connect')); }
	});
}