// jquery utility
var API_KEY = 'cc5966ad52a753da5191ad4b8dded637';
var CHANNEL_PATH = 'http://www.thehotticket.net/celinedion/dedicate/';
var userInfo;
var friendInfo = {};

FB_RequireFeatures(['Api', 'Connect', 'XFBML', 'Base', 'Common'], function(){
	/*
	*	Fixes the IE, and SF JSON parse bug... Facebook needs to fix this...
	*/
	FB.JSON.parse=function(text,reviver){
		var j;
		function walk(a,c)
		{
			var b,d,e=a[c];
			if(e&&typeof e==='object')
				for(b in e)
					if(Object.hasOwnProperty.call(e,b))
					{
						d=walk(e,b);
						if(d!==undefined){
							e[b]=d;
						}else delete e[b];
					}
				return reviver.call(a,c,e);
		}
		var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
		cx.lastIndex=0;
		if(cx.test(text)){
			text=text.replace(cx,function(a){ return '\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4); });
		}

		var replacedText = text.replace(/\\\'/g, '\'');
		replacedText = replacedText.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,'');
		if(/^[\],:{}\s]*$/.test(replacedText))
		{
			j=eval('('+text+')');
			return typeof reviver==='function'?walk({'':j},''):j;
		}
		throw new SyntaxError('JSON.parse');
	};
});


FB.apiClientExtended = {};
FB.apiClientExtended.loggedIn = false;
/*
*	Gets called by Facebooks init event
*
*	Provides global logout actions with the ability to add a callback function (userLoggedInCallback), so you can build on top of it.
*/
FB.apiClientExtended.userLoggedIn = function () {
	// prevent multiple callbacks... facebooks fault
	if (FB.apiClientExtended.loggedIn) {
		return false;
	} else if ($.cookie('name') != null && $.cookie('pic_square') != null) {
		// add required cached login global event
		if (typeof userLoggedInCallback != 'undefined') userLoggedInCallback(true);
		FB.apiClientExtended.loggedIn = true;
	} else {
		FB_RequireFeatures(['Api', 'Connect', 'XFBML', 'Base', 'Common'], function(){
			try {
			FB.Facebook.apiClient.users_getInfo(FB.Facebook.apiClient.get_session().uid,['uid','affiliations','birthday','current_location','first_name','last_name','locale','name','profile_url','proxied_email','sex','timezone','username','pic_square'],function(result, exception) {
				
				userInfo = {
					birthday: result[0].birthday != null ? result[0].birthday : '',
					city: result[0].current_location != null ? result[0].current_location.city : '',
					country: result[0].current_location != null ? result[0].current_location.country : '',
					state: result[0].current_location != null ? result[0].current_location.state : '',
					zip: result[0].current_location != null ? result[0].current_location.zip : '',
					first_name: result[0].first_name != null ? result[0].first_name : '',
					last_name: result[0].last_name != null ? result[0].last_name : '',
					locale: result[0].locale != null ? result[0].locale : '',
					name: result[0].name != null ? result[0].name : '',
					username: result[0].username != null ? result[0].username : '',
					pic_square: result[0].pic_square != null ? result[0].pic_square : 'images/pic_square.gif',
					profile_url: result[0].profile_url != null ? result[0].profile_url : '',
					proxied_email: result[0].proxied_email != null ? result[0].proxied_email : '',
					sex: result[0].sex != null ? result[0].sex : '',
					timezone: result[0].timezone != null ? result[0].timezone : '',
					userid: result[0].uid != null ? result[0].uid : ''
				};
				
				$.cookie('userid', userInfo.userid);
				$.cookie('name', userInfo.name);
				$.cookie('pic_square', userInfo.pic_square);
				
				FB_RequireFeatures(["Api"], function(){
					FB.XFBML.Host.parseDomTree();
				});
				
				if (typeof userLoggedInCallback != 'undefined') userLoggedInCallback(false);
			});
			FB.apiClientExtended.loggedIn = true;
			} catch ($err) {}
		});
	}
};

/*
*	Gets called by Facebooks logout event
*
*	Provides global logout actions with the ability to add a callback function (userLoggedOutCallback), so you can build on top of it.
*/
FB.apiClientExtended.userLoggedOut = function () {
	// prevent multiple callbacks... facebooks fault
	if (!FB.apiClientExtended.loggedIn) {
		return false;
	} else {
		FB_RequireFeatures(['Api', 'Connect', 'XFBML', 'Base', 'Common'], function(){
			FB.Connect.logout(function(){
				userInfo = {};
				$.cookie('userid', null);
				$.cookie('name', null);
				$.cookie('pic_square', null);
				
				if (typeof userLoggedOutCallback != 'undefined') userLoggedOutCallback();
			});
		});
		FB.apiClientExtended.loggedIn = false;
	}
};


function update_user_is_connected () {
	FB.apiClientExtended.userLoggedIn();
}
function update_user_is_not_connected () {
	FB.apiClientExtended.userLoggedOut();
}



$(document).ready(function(){
	// replacements 
	$('div.facebook-login-button').html('<fb:login-button></fb:login-button>');
	try {
		// facebooks init needs to be here because of a safari 3.2.1 bug with facebook connect...
		// FB Init Function
		FB_RequireFeatures(['Api', 'Connect', 'XFBML', 'Base', 'Common'], function()
		{
			FB.Facebook.init({
				apiKey: API_KEY,
				xdChannelUrl: CHANNEL_PATH + 'xd_receiver.html',
				ifUserNotConnected: update_user_is_not_connected
			});
			 
			// I have no idea why i cant just put this in the init params... It breaks IE7 when i do...
			FB.ensureInit(function(){
				FB.Connect.ifUserConnected(update_user_is_connected);
			});
			
			update_user_is_connected();
		});
	} catch(err) {}

	// binds
	$('a.facebook-logout-button').bind('click', function () {
		FB.apiClientExtended.userLoggedOut();
		return false;
	});
});