﻿var permissions = 'email,user_about_me,friends_about_me,user_activities,friends_events,user_likes,friends_likes,create_event,publish_stream,offline_access,rsvp_event';
var fbresponse;
var appId;
var confirmUrl;
var webServiceUrl;

function init(fbAppId, fbConfirmUrl, fbWebservice) {
	if (typeof FB  != "undefined")
		FB.XFBML.parse(document.getElementById('FacebookShowLike'));
	appId = fbAppId;
	confirmUrl = fbConfirmUrl;
	webServiceUrl = fbWebservice;
	FacebookInit();
	//fbEnsureInit();
}

function FacebookInit() {
	FB.init({
		appId: this.appId,
		status: true, // check login status
		cookie: true, // enable cookies to allow the server to access the session
		xfbml: true,  // parse XFBML
		oauth: true
	});
}

function fbEnsureInit(callback) {
	if(!window.fbApiInit) 
	{
		setTimeout(function() { FacebookInit(); fbEnsureInit(callback);}, 50);
	}
	else 
	{
		//get response
		GetResponse();
		if(callback) 
		{
			callback();
		}
	}
}

function RequestAccess() {
	var path = 'https://www.facebook.com/dialog/oauth?';
	// !!!! use offline_access to keep token alive - EXPIRES IF USER CHANGES PASSWORD
	var queryParams = ['scope=' + permissions,
						'client_id=' + appId, 'response_type=token', 'redirect_uri=' + confirmUrl];
	var query = queryParams.join('&');
	var url = path + query;
	window.open(url,"Access Request","location=100,status=1,scrollbars=1, width=1034,height=738");
}

function AddLike(showId, languageId, response) {
	//call handler to insert values
	var webMethod = webServiceUrl +'/InsertShowLike';
	var parameters =
			"{\'facebookId\':" + response.authResponse.userID +
			",\'token\':\'" + response.authResponse.accessToken + 
			"',\'showId\': " + showId + 
			", \'languageId\' : " +  languageId + "}";

	$.ajax({
		type: "POST",
		url: webMethod,
		data: parameters,
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function (msg) {
			if (typeof FB != "undefined")
				FB.XFBML.parse(document.getElementById('FacebookShowLike'));
		},
		error: function (e) {
		}
	});
}

function RemoveLike(showId, languageId) {
	//call handler to delete values
	var webMethod = webServiceUrl + '/RemoveShowLike';
	var parameters =
			"{\'facebookId\':" + response.authResponse.userID +
			",\'showId\': " + showId + 
			", \'languageId\' : " +  languageId + "}";

	$.ajax({
		type: "POST",
		url: webMethod,
		data: parameters,
		contentType: "application/json; charset=utf-8",
		dataType: "json",
		success: function (msg) {
		},
		error: function (e) {
		}
	});
}

function SubscribeLikeEvent(showId, languageId, likeBtnId) {
	document.getElementById(likeBtnId)._element.subscribe('edge.create', function (href, widget) {
		if (fbresponse == null || fbresponse.session == null || response.authResponse.accessToken == null) RequestAccess();
		else {
			if (fbresponse.session != null) // user is logged in
			{
				if (fbresponse.perms)// user has granted permissions
				//insert like 
					AddLike(showId, languageId, fbresponse);
				else // request permissions
					RequestAccess();
			}
		}
	});
}

function SubscribeUnLikeEvent(showId, languageId, likeBtnId) {
	document.getElementById(likeBtnId)._element.subscribe('edge.remove', function (href, widget) {
		if (fbresponse.session != null) {
			RemoveLike(showId, languageId);
		}
	});
}


//call init first from page
function HandleLikeButton(showId, languageId, response, likeBtnId) {
	fbresponse = response;
	SubscribeLikeEvent(showId, languageId, likeBtnId);
	SubscribeUnLikeEvent(showId, languageId, likeBtnId);
}

