var fbconnect2 = {
	appId : '',
    _onStart : [],
    token : '',
	init : function(appId, token) {
		this.setAppId(appId);
        this.token = token;
		window.fbAsyncInit = function() {
			FB.init({appId: fbconnect2.appId, status: true, cookie: true, xfbml: true, oauth: true});
			fbconnect2._debug('FB started');
            for(var i = 0; i < fbconnect2._onStart.length; i++) {
                var f = fbconnect2._onStart[i];
                f.call();
            }
		};
		(function() {
			var e = document.createElement("script"); 
			e.async = true;
			e.src = document.location.protocol + "//connect.facebook.net/en_US/all.js";
			document.getElementById("fb-root").appendChild(e);
	  }());
	},
    onStart : function (f) {
        fbconnect2._onStart.push(f);
    },
	setAppId : function(appId) {
		this.appId = appId;
	},
	login : function(handler, scope) {
		if (window.FB === undefined) {
			fbconnect2._debug('FB connection not initialized');
			return;
		}
		handlerID = 'facebook_login';
		switch (handler) {
			case 'charity':
				handlerID = 'facebook_charityLogin';
				break;
			case 'event':
				handlerID = 'facebook_eventLogin';
				break;
            case 'linkAccountCharity':
                handlerID = 'facebook_linkAccountCharity'
                break;
		}
		fbconnect2._debug('login attempt');
		FB.login(function (response) {
                if (response.authResponse) {
                    window.location = 'includes/frontResult.php?handlerID='+handlerID;
                }
            }, {scope : scope});
	},
    publish : function(msg, targetId) {
        if (window.FB === undefined) {
			fbconnect2._debug('FB connection not initialized');
            fbconnect2.onStart(function() {
                fbconnect2.publish(msg);
            });
			return;
		}
        fbconnect2._debug('Publishing');
        var targetFeed = targetId ? '/' + targetId + '/feed' : '/me/feed';
        FB.getLoginStatus(function (response) {
            if ('connected' == response.status) {
                var rHandler = function(response) {
                    if (!response || response.error) {
                        fbconnect2._debug('FB publish error:' + (response ? response.error : 'unknown'));
                        if (response) {
                            fbconnect2._debug(response);
                        }
                    }                    
                };
                if (msg.constructor === String) {
                    fbconnect2._debug('a');
                    FB.api(targetFeed, 'post', {
                            message : msg
                        }, rHandler
                    );
                } else if (msg.message && msg.message.constructor === String) {
                    fbconnect2._debug('b');
                    FB.api(targetFeed, 'post', msg, rHandler);
                } else {
                    fbconnect2._debug('Publish: bad publish data?');
                    fbconnect2._debug(msg);
                }
            }
        });
    },
    publishUI : function (msg, targetId, token) {
//        console.log('Initializing UI');
        if (window.FB === undefined) {
			fbconnect2._debug('FB connection not initialized');
            fbconnect2.onStart(function() {
                fbconnect2.publishUI(msg);
            });
			return;
		}
//        console.log('Library initialized');
        var msg2;
        if (msg.constructor === String) {
            msg2 = {
                method : 'feed',
                display : 'popup',
                message : msg,
                access_token : fbconnect2.token
            };
        } else if (msg.message && msg.message.constructor === String) {
            msg2 = msg;
            msg2.method = 'feed';
            msg2.display = 'popup';
            msg2.access_token = fbconnect2.token;
        }
        if (targetId) {
            msg2.from = targetId;
            msg2.to = targetId;
            if (token) {
                //msg2.access_token = token;
            }
        }
//        console.log('Initializing handler');
        var rHandler = function(response) {
            if (response && response.post_id) {
                alert('Post was published.');
            } else {
                alert('Post was not published.');
            }
        }
//        console.log('Checking status...');
        var x = FB.getLoginStatus(function (response) {
//            console.log(response);
            if ('connected' == response.status) {
                FB.ui(msg, rHandler);
            } else {
                FB.login(function (r) {
                    if ('connected' == r.status) {
                        FB.ui(msg, rHandler);
                    }
                })
            }
        });
//        console.log('Result:');
//        console.log(x);
    },
    requestPermissionUI : function(scope) {
        if (window.FB === undefined) {
			fbconnect2._debug('FB connection not initialized');
            fbconnect2.onStart(function() {
                fbconnect2.requestPermissionUI(scope);
            });
			return;
		}
        var loc = window.location;
        loc = loc.toString().replace(loc.pathname + loc.search, '/fb_close.reload.html');
        FB.ui({
            method : 'oauth',
            display: 'popup',
            scope : scope,
            client_id : fbconnect2.appId,
            redirect_uri : loc
        }, function() {
            window.location.reload(true);
        });
    },
	_debug : function (msg) {
        try {
            console.log(msg);
        } catch (e) {
            // die in silence....
        }
	}
}
