﻿/*
 * The facebook_onload statement is printed out in the PHP. If the user's logged in
 * status has changed since the last page load, then refresh the page to pick up
 * the change.
 *
 * This helps enforce the concept of "single sign on", so that if a user is signed into
 * Facebook when they visit your site, they will be automatically logged in -
 * without any need to click the login button.
 *
 * @param already_logged_into_facebook  reports whether the server thinks the user
 * is logged in, based on their cookies
 *
 */
function facebook_onload(already_logged_into_facebook) {
  // user state is either: has a session, or does not.
  // if the state has changed, detect that and reload.
  FB.ensureInit(function() {
      FB.Facebook.get_sessionState().waitUntilReady(function(session) {
          var is_now_logged_into_facebook = session ? true : false;
//trace.value+='\ris_now_logged_into_facebook='+ (is_now_logged_into_facebook ? 'true' : 'false' ) ;
          // if the new state is the same as the old (i.e., nothing changed)
          // then do nothing
          if (is_now_logged_into_facebook == already_logged_into_facebook) {
            return;
          }

          // otherwise, refresh to pick up the state change
//          refresh_page();
        });
    });
}

/*
 * Our <fb:login-button> specifies this function in its onlogin attribute,
 * which is triggered after the user authenticates the app in the Connect
 * dialog and the Facebook session has been set in the cookies.
 */
function facebook_onlogin_ready() {
  // In this app, we redirect the user back to index.php. The server will read
  // the cookie and see that the user is logged in, and will deliver a new page
  // with content appropriate for a logged-in user.
  //
  // However, a more complex app could use this function to do AJAX calls
  // and/or in-place replacement of page contents to avoid a full page refresh.
//  refresh_page();
}

/*
 * Do a page refresh after login state changes.
 * This is the easiest but not the only way to pick up changes.
 * If you have a small amount of Facebook-specific content on a large page,
 * then you could change it in Javascript without refresh.
 */
function refresh_page() {
  window.location = 'index.php';
}

/*
 * Prompts the user to grant a permission to the application.
 */
function facebook_prompt_permission(permission) {
  FB.ensureInit(function() {
    FB.Connect.showPermissionDialog(permission);
  });
}

/*
 * Show the feed form. This would be typically called in response to the
 * onclick handler of a "Publish" button, or in the onload event after
 * the user submits a form with info that should be published.
 *

/* Prompts the user to grant a permission to the application after checking for the permission. */
function fbPromptPermission(permission, callbackFunc) {
//available options: publish_stream, read_stream, read_mailbox, status_update, email, offline_access, 
//create_event, rsvp_event, sms, create_note, share_item, photo_upload
    FB.ensureInit(function() {
    //check is user already granted for this permission or not
	    FB.Facebook.apiClient.users_hasAppPermission(permission, function(result) {
	        // prompt offline permission
	        if (result == 0) {
	            // render the permission dialog
	            FB.Connect.showPermissionDialog(permission, callbackFunc);
	        } else {
	            // permission already granted.
	            callbackFunc(true);
	        }  //ENDIF 
	    });  //END [result Function]
	});  //END [users_hasAppPermission]
}  //ENDFUNCTION [fbPromptPermission]

function sendfbStreamMessage(messageToSend, attachment, action_links, fbUID) {
//start by verifying permission granted.  If not, ask for permission.
	fbPromptPermission('publish_stream', function(granted) {
	//publish_stream enables content, comments and likes posting.
	//It also includes permissions for status_update, photo_upload, video_upload, create_note, and share_item.
        if(!granted) {  //IF [permission NOT granted]
/*
			ShowOverlay('#5B7CBD');  //fbLightBlue overlay
			showByID('PermissionBox');  //show the MessageBox with user options to pick from
			$('#PermissionBox').slideUp(.01);  //takes it away super fast
			$('#PermissionBox').slideDown(1350);  //brings it back slowly
*/
		} else {  //ELSEIF [permission IS granted]
			
			FB.ensureInit(function() {
//alert('permission IS granted.  href=|'+attachment.href+ '|\n\n fbUID=' +fbUID+ ' attachment.name='+attachment.name);  ///debug///
				var rtnCode=FB.Connect.streamPublish(messageToSend, attachment, action_links, fbUID ); //raises dialog box 
			});  //END [FB.Facebook.get_sessionState().waitUntilReady] 
		}  //ENDIF [permission granted]
	});  //ENDFUNCTION [anon (passed into fbPromptPermission]
}  //ENDFUNCTION [sendfbStreamMessage]

function facebook_publish_feed_story(messageToSend, attachment, action_links, fbUID) {
	FB.ensureInit(function() {
		sendfbStreamMessage(messageToSend, attachment, action_links, fbUID)
      // hide the "Loading feed story ..." div
//      ge('feed_loading').style.visibility = "hidden";
	});
}

/*
 * If a user is not connected, then the checkbox that says "Publish To Facebook"
 * is hidden in the "add run" form.
 *
 * This function detects whether the user is logged into facebook but just
 * not connected, and shows the checkbox if that's true.
 */
function facebook_show_feed_checkbox() {
  FB.ensureInit(function() {
      FB.Connect.get_status().waitUntilReady(function(status) {
          if (status != FB.ConnectState.userNotLoggedIn) {
            // If the user is currently logged into Facebook, but has not
            // authorized the app, then go ahead and show them the feed dialog + upsell
            checkbox = ge('publish_fb_checkbox');
            if (checkbox) {
              checkbox.style.visibility = "visible";
            }
          }
        });
    });
}

function populate_date(month, day, year) {
  ge('date_month').value = month;
  ge('date_day').value = day;
  ge('date_year').value = year;
}

function ge(elem) {
  return document.getElementById(elem);
}

/*
 * Simple Ajax call method.
 *
 * From http://en.wikipedia.org/wiki/XMLHttpRequest
 */
function ajax(url, vars, callbackFunction) {
  var request =  new XMLHttpRequest();
  request.open("POST", url, true);
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  request.onreadystatechange = function() {
    if (request.readyState == 4 && request.status == 200) {
      if (request.responseText) {
        callbackFunction(request.responseText);
      }
    }
  };
  request.send(vars);
}
