/**
 * Javascript for Facebook features
 */
var fbParams;
/**
 * Facebook permission popup for page accounts
 * @return
 */
function showPagePopup() {
	if (fbPageId) {
		FB.ui({
	        method: 'permissions.request',
	        enable_profile_selector: 1,
	        profile_selector_ids: fbPageId,
	        perms: 'publish_stream'
	    },  function() { window.location.reload(true); })
	}

}

/**
 * Javascript redirect that will take fb_page_id into account
 *  
 * @param	url		URL (path) to navigate to, e.g. "/job"
 */
function fbgo(url){
	if (self !== top) {
		baseUrl = fbBaseUrl;
	}
	
	if (fbPageId == "") {
		top.location.href = baseUrl + url;
	} else {
		var separator = '?';
		if (url.indexOf('?') != -1) {
			separator = '&';
		}
		top.location.href = baseUrl + url + separator + "fb_page_id=" + fbPageId;
	}
}


/**
 * Returns a URL encoded string containing all fb_sig_* parameters and their values
 */
function getFbParams(){
	/*
	 * Collect current fb_sig_* parameters based on the URL of current document
	 */
	var params = document.location.search.substring(1).split("&");
	fbParams = "";
	var separator = "";
	for (var i = 0; i < params.length; i++) {
		if ((params[i].substring(0,7) == "session") || (params[i].substring(0,3) == "fb_"))
		{
			fbParams += separator;
			fbParams += params[i];
			separator = "&";
		}
	}
	
	if (fbParams == "") {
		//also check for zend formatted parameters in url
		params = document.location.href.split("/");
		for (var i = 0; i < (params.length - 1); i++) {
			if ((params[i].substring(0,7) == "session") || (params[i].substring(0,3) == "fb_"))
			{
				fbParams += separator;
				fbParams += params[i] + "=" + params[i + 1];
				separator = "&";
				i++;
			}
		}
	}

	return fbParams;
}

/*
 * This script fixes links and forms in IFrame Facebook applications in order to
 * pass fb_sig_* parameters in subsequent HTTP requests.
 * 
 */
$(document).ready(function(){
	
	//Only run these functions inside the iframe
	if ($('body.inIframe').length > 0 || self !== top) {
		//resize iframe
		FB.Canvas.setAutoResize();
		
		//get fb params
		var fbParams = getFbParams();

		/*
		 *Option #1: Modify href locations of all links (A elements) to include
		 * fb_sig_* parametets
		 *  
		 */
		/* 
		var ar = document.getElementsByTagName("A");
		for (var i = 0; i < ar.length; i++) {
			var href = ar[i].href;
			if (href != null) {
				if (href.indexOf("?") == -1) {
					ar[i].href = href + "?" + fbParams;
				} else {
					ar[i].href = href + "&" + fbParams;
				}
			}
		}
		*/
		
		/*
		 * Option #2: Modify target of all links (A elements) to navigate the top frame.
		 * Facebook then injects fb_sig_* parameters again in the new IFrame
		 * 
		 */
		

		$('a').each(function(index) {
			
			// Exclude links that already target "_top"
			if ($(this).attr("target") == "_top") {
				return;
			}
				
			// Also exclude JavaScript links
			if ($(this).attr("protocol") == "javascript:") {
				return;
			}
			
			// Also exclude links marked as external
			if ($(this).hasClass('fbLinkExternal')) {
				$(this).attr("target","_blank");
				return;
			}
			
			if (($(this).attr("href")) || ($(this).attr("pathname") != "") || ($(this).attr("search") != "")) 
			{
			
				var pathName = $(this).attr("pathname");
				if (pathName.charAt(0) == '/')
				{
					pathName = pathName.substring(1);
				}
				
				var search = $(this).attr("search");
				
				if (fbPageId != "") {
					if (search == "") {
						search = "?fb_page_id=" + fbPageId;
					} else {
						search = $(this).attr("search") + "&fb_page_id=" + fbPageId;
					}
				}
				
				$(this).attr("href", fbBaseUrl + '/' + pathName + search);
				$(this).attr("target","_top");
			}
			
		  });
		
		/*
		 * Fix FORM elements by adding fb_sig_* parameters to the action (URL) of the form.
		 * This is similar to Option #1 with links.
		 * 
		 */
		var ar = document.getElementsByTagName("FORM");
		for (var i = 0; i < ar.length; i++) {
			ar[i].action = ar[i].action + "?" + fbParams; 
		}
	}
	
	if ($('#fbConnectTooltip').length > 0) {
		$('#fbConnectTooltip').tooltip({ 
		    track: true,
		    delay: 0, 
		    showURL: false, 
		    showBody: ":", 
		    extraClass: "box", 
		    fixPNG: true, 
		    opacity: 1, 
		    left: -120 
		});
	}

});