﻿function TGGFacebook() {
	TGGFacebook.divSignIns = null;
	TGGFacebook.divSignOuts = null;
	TGGFacebook.Events = new Object();
	TGGFacebook.Events.SignInEvent = new Array();
	TGGFacebook.Events.SignOutEvent = new Array();
	
	// Init facebook script
	TGGFacebook.Init = function() {
		var divFBRoot = document.createElement("DIV");
		divFBRoot.setAttribute("id", "fb-root");
		document.body.appendChild(divFBRoot);
		var e = document.createElement('script');
		e.type = 'text/javascript';
		e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
		e.async = true;
		divFBRoot.appendChild(e);
	};

	// Async Init of facebook api
	TGGFacebook.fbAsyncInit = function() {
	    if (!facebookApplicationID)
	        setTimeout(TGGFacebook.fbAsyncInit, 10000);
	    FB.init({ appId: facebookApplicationID, status: true, cookie: true, xfbml: true });
	    /* All the events registered */
	    FB.Event.subscribe('auth.login', function(response) {
	        TGGFacebook.SignIn();
	    });
	    FB.Event.subscribe('auth.logout', function(response) {
	        TGGFacebook.SignOut();
	    });
	    TGGFacebook.GetLoginStatus();
	};

	// Validate login status
	TGGFacebook.GetLoginStatus = function (callBackFnc) {
		FB.getLoginStatus(function (response) {
			if (response.session) {
				TGGFacebook.SignIn();
				try {
					if (callBackFnc)
						eval(callBackFnc + "();");
				}
				catch (e) {}
			}
			else
				TGGFacebook.SignOut();
		});
	};

	// Toggle facebook signin elements
	TGGFacebook.SignIn = function () {
		TGGFacebook.divSignIns = document.getElementsByName("divSignIn");
		TGGFacebook.divSignOuts = document.getElementsByName("divSignOut");
		TGGFacebook.ToggleCheckboxes(false);
		TGGFacebook.ToggleFacebookSignIn(false);
		TGGFacebook.ToggleFacebookSignOut(true);
	};

	// Toggle facebook signout elements
	TGGFacebook.SignOut = function() {
		TGGFacebook.divSignIns = document.getElementsByName("divSignIn");
		TGGFacebook.divSignOuts = document.getElementsByName("divSignOut");
		TGGFacebook.ToggleCheckboxes(true);
		TGGFacebook.ToggleFacebookSignIn(true);
		TGGFacebook.ToggleFacebookSignOut(false);
		TGGFacebook.Events.SignOut.Invoke();
	};

	// Toggles facebook signin elements
	TGGFacebook.ToggleFacebookSignIn = function (isVisible) {
		if (TGGFacebook.divSignIns) {
			for (var idx = 0; idx < TGGFacebook.divSignIns.length; idx++) {
				TGGFacebook.divSignIns[idx].style.display = isVisible ? "" : "none";
			}
		}
	};

	// Toggles facebook signout elements
	TGGFacebook.ToggleFacebookSignOut = function (isVisible) {
		if (TGGFacebook.divSignOuts) {
			for (var idx = 0; idx < TGGFacebook.divSignOuts.length; idx++) {
				TGGFacebook.divSignOuts[idx].style.display = isVisible ? "" : "none";
			}
		}
	};

	TGGFacebook.ToggleCheckboxes = function (isDisabled) {
		var checkboxes = document.getElementsByTagName("input");
		if (checkboxes && checkboxes.length > 0) {
			for (var idx = 0; idx < checkboxes.length; idx++) {
				if (checkboxes[idx].type == "checkbox" && checkboxes[idx].id.indexOf("chkFacebookShare") != -1)
					checkboxes[idx].disabled = isDisabled;
			}
		}
	};

	TGGFacebook.Events.SignIn = function(functionName) {
		TGGFacebook.Events.SignInEvent.push(functionName);
	};

	TGGFacebook.Events.SignOut = function(functionName) {
		TGGFacebook.Events.SignOutEvent.push(functionName);
	};

	TGGFacebook.Events.SignIn.Invoke = function () {
		for (var idx = 0; idx < TGGFacebook.Events.SignInEvent.length; idx++) {
			eval(TGGFacebook.Events.SignInEvent[idx] + "()");
		}
	};

	TGGFacebook.Events.SignOut.Invoke = function () {
		for (var idx = 0; idx < TGGFacebook.Events.SignOutEvent.length; idx++) {
			eval(TGGFacebook.Events.SignOutEvent[idx] + "()");
		}
	};
};

new TGGFacebook();
window.fbAsyncInit = TGGFacebook.fbAsyncInit;
TGGFacebook.Init();
