	
	/*
	 * Must set facebookAppId
	 */
	if (facebookAppId) {
		window.fbAsyncInit = function() {
			FB.init({appId: facebookAppId, status: true, cookie: true, xfbml: true, oauth: true});
			fbApiInitialized = true; //for fbEnsureInit()
		};
	
		(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);
		}());
		
		function fbEnsureInit(callback, force) {
		    if (!window.fbApiInitialized) {
		        setTimeout(function() { fbEnsureInit(callback); }, 2000);
		    } else {
		        if (callback) { callback(force); }
		    }
		}
	}
	
	
	/*
	 * create modal dialog for facebook login connect
	 * gets around facebook SDK removing its own popup check.
	 */
	document.write('<div id="fbconnect" title="Connect with Facebook to continue..." style="display: none; height: auto;"><p>This site requires that you Connect with Facebook.</p></div>');
	$('#fbconnect').dialog({
		autoOpen: false,
		width: 500,
		modal: true,
		
		buttons: {
			"Connect": function() { 
				$(this).dialog("close");
				FB.login(function(response) {
				  if (response.authResponse) {
					facebookWallPostLogin(false); //user has just logged in so use session cookie if available
				  } else {
				  	//alert('not logged in or cancelled prompts - login/perms chain was not completed');
				    // user is not logged in
				  }
				}, {perms:facebookWallPostPerms});
			}, 
			"Cancel": function() {
				$(this).dialog("close"); 
			} 
		}
	});
	
	var facebookWallPost_imgLink = "";
	var facebookWallPost_caImgLink = "";
	var facebookWallPost_caLink = "";
	var facebookWallPost_defaultInputText = "";
	var facebookWallPost_linkText = "";
	var facebookWallPost_linkCaption = "";
	var facebookWallPost_linkDesc = "";
	var facebookWallPost_inputPromptText = "";
	var facebookWallPost_colTitle = "";
	var facebookWallPost_colNames = "";
	function facebook_publish_feed_story(caLink,caImgLink,imgLink,inputText,inputPromptText,linkText,linkCaption,linkDesc,colTitle,colNames) {
		facebookWallPost_imgLink = imgLink;
		facebookWallPost_caImgLink = caImgLink;
		facebookWallPost_caLink = caLink;
		facebookWallPost_defaultInputText = inputText;
		facebookWallPost_inputPromptText = inputPromptText;
		facebookWallPost_linkText = linkText;
		facebookWallPost_linkCaption = linkCaption;
		facebookWallPost_linkDesc = linkDesc;
		facebookWallPost_colTitle = colTitle;
		facebookWallPost_colNames = colNames;
		fbEnsureInit(facebookWallPostLogin, true); //must also force new session just in case session cookie exists
	}
	
	var facebookWallPostPerms='';
	function facebookWallPostLogin(force) {
		//alert('login check');
		
		FB.getLoginStatus(function(response) {
		  if (response.status === 'connected') {
		    //alert('known user');
		    if (response.perms) {
		      // user is logged in and granted some permissions.
		      // perms is a comma separated list of granted permissions
		      // alert('logged in with granted perms in session: ' + response.perms);
		      if (facebookPermsCheck(response.perms, facebookWallPostPerms)) {
		      	facebookWallPost();
		      }
		    } else {
		      // user is logged in, but did not grant any permissions
		      // alert('logged in without granted perms in session');
		  	  if (facebookPermsCheck('', facebookWallPostPerms)) {
		      	facebookWallPost();
		      }
		    }
		  } else {
		   // alert('unknown user');
		    //present login box
		    $('#fbconnect').dialog("open");
		  }
		}, force);

	}

	function facebookPermsCheck(grantedPerms, requiredPerms)
	{
		var f=true;
		var k;
		grantedArray=grantedPerms.split(',');
		requiredArray=requiredPerms.split(',');
		
		for (k in requiredArray) {
			if (requiredArray[k]!=='') {
				f=false;
				if ( in_array(requiredArray[k], grantedArray) ) {
					f=true;
				} else {
					break;
				}
			}
		}
		
		return f;
	}

	function facebookWallPost() {

		//Attach Properties (Colour Values)
		
		var attachmentProperties = new Object();
		
		var colArray = facebookWallPost_colNames.split(',');
		
		for(a=0;a<colArray.length;a++)
		{
			var titleArray = facebookWallPost_colTitle.split('[--colnum--]');
			attachmentProperties[ titleArray.join(a+1) ] = decodeURIComponent(colArray[a]);
		}
		
		var link = new Object();
		link = {text:facebookWallPost_caLink, href:facebookWallPost_caLink}
		attachmentProperties[facebookWallPost_linkText] = link;

		
		 FB.ui(
		   {
		     method: 'feed',
		     name: facebookWallPost_defaultInputText,
		     link: facebookWallPost_caImgLink,
		     picture: facebookWallPost_imgLink,
		     caption: facebookWallPost_linkCaption,
		     description: facebookWallPost_linkDesc,
		     properties: attachmentProperties
		     //message: facebookWallPost_defaultInputText
		   },

		  
		   function(response) {
		     if (response && response.post_id) {
		       //alert('Post was published.');
		     } else {
		       //alert('Post was not published.');
		     }
		   }
		   
		 );
	}
	
	function in_array (needle, haystack, argStrict) {
	    // http://kevin.vanzonneveld.net
	    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	    // +   improved by: vlado houba
	    // +   input by: Billy
	    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
	    // *     example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
	    // *     returns 1: true
	    // *     example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
	    // *     returns 2: false
	    // *     example 3: in_array(1, ['1', '2', '3']);
	    // *     returns 3: true
	    // *     example 3: in_array(1, ['1', '2', '3'], false);
	    // *     returns 3: true
	    // *     example 4: in_array(1, ['1', '2', '3'], true);
	    // *     returns 4: false
	    var key = '',
	        strict = !! argStrict;
	
	    if (strict) {
	        for (key in haystack) {
	            if (haystack[key] === needle) {
	                return true;
	            }
	        }
	    } else {
	        for (key in haystack) {
	            if (haystack[key] == needle) {
	                return true;
	            }
	        }
	    }
	
	    return false;
	}

