var oOwner = null;
var oViewer = null;
var oFlash = null;
var isFlashReady = false;
var oEnv;
var oURL;
var oURLParams;
var sDomain = "";
var oUserProfileParams;

//***********************************************************************************************************//	

if(gadgets && gadgets.util)
	gadgets.util.registerOnLoadHandler(osInit);

function osInit() 
{
	oEnv = opensocial.getEnvironment();
	
	if(gadgets)
	{
		if(gadgets.util)
			oURL = gadgets.util.getUrlParameters();
	
		if(gadgets.views)
			oURLParams = gadgets.views.getParams();
	}
	
	OSFlashBridgeInit();
	
	// gadgets.window.adjustHeight();
	
	// opensocial.requestPermission(permissions, reason, opt_callback);
	// opensocial.Enum.Gender
}

//***********************************************************************************************************//	

function OSFlashBridgeInit()
{
	trace("OSFlashBridgeInit");
	
	// SETTINGS
	sDomain = oEnv.getDomain();
	
	oUserProfileParams = {};
	oUserProfileParams[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.GENDER];
	// oUserProfileParams[opensocial.DataRequest.PeopleRequestFields.PROFILE_DETAILS] = [opensocial.Person.Field.EMAILS];
	
	// trace(oEnv.supportsField(opensocial.Environment.ObjectType.PERSON, opensocial.Person.Field.EMAILS)); // false
	// trace(oEnv.supportsField(opensocial.Environment.ObjectType.MESSAGE_TYPE, opensocial.Message.Field.EMAILS)); // false
}

function OSFlashBridgeFlashReady()
{
	trace("OSFlashBridgeFlashReady");
	
	oFlash = swfobject.getObjectById("flash_flash");
	isFlashReady = true;
	
	OSFlashBridgeFlashDispatcher("onInit");
}

function OSFlashBridgeCountry()
{
	trace("OSFlashBridgeCountry is " + gadgets.Prefs.getCountry());
}

function OSFlashBridgeLanguage()
{
	trace("OSFlashBridgeLanguage is " + gadgets.Prefs.getLang());
}

function OSFlashBridgeOwner()
{
	trace("OSFlashBridgeOwner");
	
	OSFlashBridgeGenericUserProfile(opensocial.IdSpec.PersonId.OWNER, function(oUser)
	{
		oOwner = oUser;
		
		OSFlashBridgeFlashDispatcher("onOwner", oUser);
	});
}

function OSFlashBridgeCurrentUser() 
{
	trace("OSFlashBridgeCurrentUser");
	
	OSFlashBridgeGenericUserProfile(opensocial.IdSpec.PersonId.VIEWER, function(oUser)
	{
		oViewer = oUser;

		OSFlashBridgeFlashDispatcher("onCurrentUser", oViewer);
	});
}

function OSFlashBridgeUserProfile(userid) 
{
	trace("OSFlashBridgeUserProfile");
	
	OSFlashBridgeGenericUserProfile(userid, function(oUser)
	{
		OSFlashBridgeFlashDispatcher("onUserProfile", oUser);
	});
}

function OSFlashBridgeGenericUserProfile(userid, callback) 
{
	trace("OSFlashBridgeGenericUserProfile");
	
	var req = opensocial.newDataRequest();
	
	req.add(req.newFetchPersonRequest(userid, oUserProfileParams), "user");
	req.send(function(oResp)
	{
		var oUserResp = oResp.get("user");
		var oUser = oUserResp.getData(); inspect(oUser);

		callback(oUser);
	});
}

function OSFlashBridgeFriends(userid)
{
	trace("OSFlashBridgeFriends for " + userid);
	
  	var oReq = opensocial.newDataRequest();
  	
  	oUserProfileParams[opensocial.DataRequest.PeopleRequestFields.FIRST] = 0;
	oUserProfileParams[opensocial.DataRequest.PeopleRequestFields.MAX] = 200;
  	
  	oReq.add(oReq.newFetchPeopleRequest(opensocial.newIdSpec({"userId": userid, "groupId": "FRIENDS"}), oUserProfileParams), "get_friends");
	oReq.send(function(oResp)
	{
		var arrFriends = oResp.get('get_friends').getData(); 
		
		// inspect(arrFriends);
		
		OSFlashBridgeFlashDispatcher("onFriends", arrFriends.array_);
	});
}

function OSFlashBridgePostActivity(actname, keys, title, message)
{
	trace("OSFlashBridgePostActivity (" + actname + ")");
	
	var oParams = {};
	
	message = actname.length > 0 ? new gadgets.Prefs().getMsg(actname) : message;

	// oParams[opensocial.Activity.Field.TITLE_ID] = actname;
	// oParams[opensocial.Activity.Field.TEMPLATE_PARAMS] = keys;

	for(var i in keys)
		message = message.split("${" + i + "}").join(keys[i]);

	oParams[opensocial.Activity.Field.TITLE] = title;
	oParams[opensocial.Activity.Field.BODY] = message;
	
	var oActivity = opensocial.newActivity(oParams); inspect(oActivity);

	opensocial.requestCreateActivity(oActivity, opensocial.CreateActivityPriority.HIGH, function()
  	{
  		trace("OSFlashBridgePostActivity Posted");
  		
  		OSFlashBridgeFlashDispatcher("onActivityPosted");
  	});
}

function OSFlashBridgeSendMessage(title, body, recipients, messagetype, params)
{
	trace("OSFlashBridgeSendMessage");
	
	var oParams = {};

	oParams[opensocial.Message.Field.TYPE] = opensocial.Message.Type.NOTIFICATION; // messagetype
	oParams[opensocial.Message.Field.TITLE] = title;
	oParams[Netlog.Message.Field.PARAMS] = params;
             
	var oMessage = opensocial.newMessage(body, oParams); inspect(oMessage);
	
	opensocial.requestSendMessage(recipients, oMessage, function(oResp)
  	{  		
  		if(oResp.hadError())
  		{ 
  			trace(oResp.getErrorMessage()); 
  			
  			OSFlashBridgeFlashDispatcher("onMessageSentFailed");
  		} 
  		else
  		{
  			trace("OSFlashBridgeSendMessage Sent");
  			  		
	  		OSFlashBridgeFlashDispatcher("onMessageSent");
	  	}
  	});
}

function OSFlashBridgeAddData(userid, key, value)
{
	trace("OSFlashBridgeAddData"); 
	
	var oReq = opensocial.newDataRequest();
	
  	oReq.add(oReq.newUpdatePersonAppDataRequest(userid, key, value));
  	oReq.send(function(oResp)
  	{
		if(oResp.hadError()) 
		{
			trace("OSFlashBridgeAddData Error : " + oResp.getError());
		
			OSFlashBridgeFlashDispatcher("onAppDataSaveFailed");
		}
		else
		{
			trace("OSFlashBridgeAddData Saved");
		
			OSFlashBridgeFlashDispatcher("onAppDataSave");
		}
  	});
}

function OSFlashBridgeGetData(userid, keys)
{
	trace("OSFlashBridgeGetData");
	
	var oReq = opensocial.newDataRequest();
	
  	oReq.add(oReq.newFetchPersonAppDataRequest(userid, keys), "app_data"); inspect(oReq);
  	oReq.send(function(oResp)
  	{  		
		var oData = oResp.get("app_data");
		
		if(oData.hadError()) 
		{
			trace("OSFlashBridgeGetData Error : " + oData.getError());
		
			OSFlashBridgeFlashDispatcher("onAppDataFetchFailed");
		}
		else
		{
			trace("OSFlashBridgeGetData Fetched");
		
			OSFlashBridgeFlashDispatcher("onAppDataFetch", oData.getData());
		}
  	});
}

function OSFlashBridgeGetParam(param)
{
	trace("OSFlashBridgeGetParam " + oURLParams[param]);
	
	var sData = oURLParams[param] == undefined ? "" : oURLParams[param];
	
	OSFlashBridgeFlashDispatcher("onParamFetch", sData);
}

//***********************************************************************************************************//	
