/* 
 * Facebook Connect workaround script
 * Copyright 2010, James Zetlen -- Convio
 *
 * Provides Facebook Connect functionality for PC2.
 * No longer dependent on highly brittle template tags.
 * Uses the Facebook Graph API (c. April 2010) whenever possible.
 * Uses one global variable for fbApplicationID; no Facebook API keys are necessary.
 * The rest is done with the Facebook feature loader as God intended.
 */
 
var fbApplicationID = '30034562032'; // Replace this with the App ID of the client's Facebook application! In the new FB model that's all that you need, not API keys.
 
if (typeof YAHOO == 'object' && typeof YAHOO.Convio == 'object' && typeof YAHOO.Convio.PC2 == 'object') { // we're in PC2, so replace the existing PC2 methods
	YAHOO.namespace("Convio.FB.Connect.Utils");
    var proxiedLoadComponents = loadComponents; // proxying old loadComponents
    loadComponents = function() {
        proxiedLoadComponents();
        YAHOO.Convio.PC2.Facebook.Connect.init();
    };
    YAHOO.Convio.PC2.Facebook.Connect.init = function(){
        window.fbAsyncInit = function() {
            
            // Initializing Facebook account.
            FB.init({appId: fbApplicationID, status: true, cookie: true, xfbml: true});
            
            // Subscribing to the login event. This will display the "publish to feed" link once login is complete, without having to force a refresh as in the earlier implementation.
            FB.Event.subscribe('auth.login', function(response) {
              YAHOO.util.Event.onAvailable('fb_new_login',function(){
                document.getElementById('fb_new_login').style.display = 'none';
                FBConnectLoggedInCallback(response); // this is defined in dashboard.js
              });
            });
        };
        
        
        // Asynchronously inserting Facebook featureloader script.
        (function() {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol +
          '//connect.facebook.net/en_US/all.js';
        var r = document.getElementsByTagName('body')[0].appendChild(document.createElement('div'));
        r.id = 'fb-root';
        r.appendChild(e);
        }());            
    }
    
    /*
     * if logged in or not, will wait for FB to be initialized, and then run the associated callback
     */
    YAHOO.Convio.PC2.Facebook.Connect.isLoggedIn = function(isCallback, isNotCallback) {
        var fbWait = setInterval(function () {
            if (typeof FB != 'undefined' && typeof YAHOO.Convio.PC2.Component.Teamraiser.PartFBConnectInfo != 'undefined') {
                clearInterval(fbWait);
                FB.getLoginStatus(function(response) {
                  if (response.session) {
                    isCallback();
                  } else {
                    isNotCallback();
                  }
                });    
            }
        }, 10);
    }
    
    
    /*
     * Renders a facebook connect login button
     */
    YAHOO.Convio.PC2.Facebook.Connect.renderLoginButton = function(domID, callback) {
        var buttonhook = unescape('%3Ca%20id%3D%22fb_new_login%22%20onclick%3D%22try%20%7B%20YAHOO.Convio.FB.Connect.Utils.popupFacebookLogin%28%29%3B%20%7D%20catch%20%28e%29%20%7B%20if%20%28console%29%20%7B%09console.error%28e%29%3B%20%7D%20%7D%20return%20false%3B%22%20href%3D%22%23%22%3E%3Cimg%20border%3D%220%22%20src%3D%22..%2Fimages%2Ffacebook%2Fconnect_light_medium_long.gif%22%20%2F%3E%3C%2Fa%3E');
        document.getElementById(domID).innerHTML = buttonhook;
        if(callback != null) {
            callback();
        }
    }
    
    /*
     * Renders a login popup. You may insert callbacks that manipulate the Facebook session object here.
     */
    YAHOO.Convio.FB.Connect.Utils.popupFacebookLogin = function () {
            FB.login(function(response) {
          if (response.session) {
            // user successfully logged in
           YAHOO.log('User ID ' + response.session.uid + ' logged in to Facebook. TODO: put a logInteraction call here.')
          } else {
            // user cancelled login
          }
        });
    }
    
    /*
     * Renders a Publish To Feed link.
     */
    YAHOO.Convio.PC2.Facebook.Connect.renderPublishFeed = function(domID, callback, userMessagePrompt, oneLineStory, shortStoryTitle, shortStoryBody, actionLinkText, actionLinkUrl, imageSrc, imageHref, linkText) {
            domID = domID || 'fb_connect_publish_feed_event_register_hook';
            actionLinkText = (actionLinkText=='' || actionLinkText.length>25) ? 'Join or Sponsor' : actionLinkText;
            actionLinkUrl = (actionLinkUrl=='') ? document.location.protocol + '//' + document.domain + document.location.pathname.substring(0,document.location.href.indexOf('/')+1) + '/site/TR?pg=entry&fr_id=' + YAHOO.Convio.PC2.Config.Teamraiser.getFrId() : actionLinkUrl;
            
            var fbpost = {
                method: 'stream.publish',
                display: 'popup',
                attachment: {
                    name: oneLineStory,
                    caption: shortStoryTitle,
                    description: shortStoryBody,
                    href: actionLinkUrl
                },
                action_links: [{ text: actionLinkText, href: actionLinkUrl }],
                user_prompt_message: userMessagePrompt
            };
            if (imageSrc&&imageHref) {
                fbpost.attachment.media = [{'type':'image','src':imageSrc,'href':imageHref}]
            }
            var buttonLink = document.getElementById(domID).appendChild(document.createElement('a'));
            buttonLink.id = 'new_fb_publish_link';
            buttonLink.className = 'fb_connect_publish_feed';
            buttonLink.href = 'javascript:void(0);';
            buttonLink.innerHTML = (linkText=='') ? 'Share on Facebook' : linkText;
            YAHOO.util.Event.addListener("new_fb_publish_link","click",function(){YAHOO.Convio.PC2.Facebook.Connect.streamPublish(fbpost)});
    }
    
    /*
     *  Render the publish dialog.
     */
    YAHOO.Convio.PC2.Facebook.Connect.streamPublish = function (fbpost) {
         FB.ui(fbpost,
       function(response) {
         if (response && response.post_id) {
         	// The following code is a demonstration of post-publish interaction tracking. Add a call to logInteraction here to track non-productized Facebook actions with custom interactions.
           YAHOO.log('Post ID ' + response.post_id + ' sent to Facebook. TODO: put a logInteraction call here.')
         }
       }
     );
    }
} else { // NOT in Participant Center 2, so let's replace the existing page-based methods.


if (typeof YAHOO == 'undefined') YAHOO = {};
if (typeof YAHOO.Convio == 'undefined') YAHOO.Convio = {};
if (typeof YAHOO.Convio.FB == 'undefined') YAHOO.Convio.FB = {};
if (typeof YAHOO.Convio.FB.Connect == 'undefined') YAHOO.Convio.FB.Connect = {};
if (typeof YAHOO.Convio.FB.Connect.Utils == 'undefined') YAHOO.Convio.FB.Connect.Utils = {};

	YAHOO.Convio.FB.Connect.Utils.onShareLink = function (url, callback) {
	    var share = {
		   method: 'stream.share',
		   u: url
		 };
		FB.ui(share,function(){void(0)});
	}
	YAHOO.Convio.FB.Connect.Utils.onPublishFeed = function (templateBundleID, callback, userMessagePrompt, oneLineStory, shortStoryTitle, shortStoryBody, actionLinkText, actionLinkUrl, imageSrc, imageHref) {
            var publish = {
                method: 'stream.publish',
                display: 'popup',
                attachment: {
                    caption: shortStoryTitle,
                    description: shortStoryBody,
                    href: actionLinkUrl
                },
                action_links: [{ text: actionLinkText, href: actionLinkUrl }],
                user_prompt_message: userMessagePrompt
            };
            if (imageSrc&&imageHref) {
                publish.attachment.media = [{'type':'image','src':imageSrc,'href':imageHref}]
            }
            if (oneLineStory) {
            	publish.attachment.name = oneLineStory;
            }
	    FB.ui(publish,function(){void(0)});
	}
	YAHOO.Convio.FB.Connect.Utils.logout = function (callback) {
	    FB.logout(callback)
	}
	YAHOO.Convio.FB.Connect.Utils.showPopup = function (url, height, width) {
	    return false;
	}
	YAHOO.Convio.FB.Connect.Utils.refreshWindowPostConnect = function () {
	    return false;
	}
	YAHOO.Convio.FB.Connect.Utils.popupFacebookLogin = function () {
	    FB.login(function(response) {
          if (response.session) {
            // user successfully logged in
          } else {
            // user cancelled login
          }
        });
	}
  
  function hideLogins() {
  	var loginButtons = [];
	findAllOfClass(document.getElementsByTagName('body')[0],'fb_button',loginButtons);
	for (var i = loginButtons.length - 1; i >= 0; i--){
		if (loginButtons[i].innerHTML.indexOf('ogin')!=-1 || loginButtons[i].innerHTML.indexOf('Connect with Facebook')!=-1)loginButtons[i].style.display = 'none';
	};
  }	

  window.fbAsyncInit = function() {
	FB.init({appId: fbApplicationID, status: true, cookie: true, xfbml: true});
	
	FB.getLoginStatus(function(response) { // let's hide those login buttons!
		if (response.session) { 
			hideLogins();
		} else {
			FB.Event.subscribe('auth.sessionChange', function(response) {
				hideLogins();
			});
		}
	});
}
    
  addOnLoadHandler(function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    var r = document.getElementsByTagName('body')[0].appendChild(document.createElement('div'));
    r.id = 'fb-root';
    r.appendChild(e);
  });
    
}
