/**
 * @author ugur bozkaya
 * Samsun Anadolu Lisesi 97
 */

var fbcUserId = -1;
var fbcFlashReady = -1;
var fbcERRORRESPONSE = "<xml><response result=\"ERROR\"/></xml>";
var fbcErrorAlert = -1;
var fbcUserIdRequestCount = 0;

function fbcSwitchAlertMode()
{
	if(fbcErrorAlert>0)
		fbcErrorAlert = 0;
	else
		fbcErrorAlert = 1;
}

function myAlert(strIn)
{
	if(fbcErrorAlert>0)
		alert(strIn);
}

function getFlashMovie(movieName){
	var isIE = navigator.appName.indexOf("Microsoft") != -1;
	return (isIE) ? window[movieName] : window.document[movieName];
}

function isArray(obj) {
	if(obj==null || obj == undefined)
		return false;
		
   if (obj.constructor.toString().indexOf("bject") == -1 && obj.constructor.toString().indexOf("rray") == -1)
      return false;
   else
      return true;
}

function CallFlash(strFunctionName, strFunctionArg){
	if (fbcFlashReady < 1) {
		myAlert("fbcFlashReady is not ready!");
		return;
	}
		
	myAlert(strFunctionName +'\n' +strFunctionArg);
	
	try {
		getFlashMovie(fbcHtmlFlashObjectId)[strFunctionName](strFunctionArg);
	}
	catch(err) {
		myAlert("CallFlash failed:" +strFunctionName +'\n' +strFunctionArg +'\n' +err.description);
	}
}

function fbcOnConnected(user_id) {
		
	fbcFlashReady = 1;	
	fbcUserId = user_id;
	if (user_id == null || user_id == undefined) {
		
		if (fbcUserIdRequestCount < 6) {
			setTimeout(function(){
				FB.Connect.ifUserConnected(fbcOnConnected, fbcOnNotConnected)
			}, 500);
			fbcUserIdRequestCount++;
		}
		else{
			alert("Please refresh the page, something went wrong with facebook connect!");	
		}
	}
	else {
		CallFlash("fbcSetConnectState", fbcUserId);
	}
}

function fbcOnNotConnected() {
	fbcFlashReady = 1;
	fbcUserId = 0;
	CallFlash("fbcSetConnectState", fbcUserId);
}


function fbcGetLoggedInUser() {
	FB.ensureInit (  function () {
		FB.Facebook.apiClient.users_getLoggedInUser(function(result, ex) { 
			myAlert(result);
		});
	 });
}

function fbcLogin() {	
	FB.ensureInit (  function () {
		FB.Connect.requireSession(true);
	 });	 
}

function fbcLogout() {
	FB.ensureInit (  function () {
		FB.Connect.logout(null);
	});
}

function fbcGetConnectState(user_id) {
	
		if(fbcUserId == null || fbcFlashReady<1) {		
			FB_RequireFeatures(["Api"], function(){
	  			FB.Facebook.init(fbcApplicationKey, fbcXdReceiverLocation, {"ifUserConnected":fbcOnConnected, "ifUserNotConnected":fbcOnNotConnected});
	  		});
		}
		else {	
			CallFlash("fbcSetConnectState", fbcUserId);
		}
}

function fbcArrayToXML(inputArray)	{

	var retVal = "";
	var key ="";
	
	try {
		for (key in inputArray)	{		
			if(isArray(inputArray[key])) {
				retVal = retVal + "<" +key +">";
				retVal = retVal + fbcArrayToXML(inputArray[key]);
				retVal = retVal + "</" +key +">\n"
			}
			else {				
			   retVal = retVal + "<" +key +">";
			   var strTempVal = inputArray[key];
			   if (inputArray[key] != null && inputArray[key] != undefined) {
			   		//retVal = retVal + inputArray[key];
			   		
			   		strTempVal = strTempVal + '';
			   		strTempVal = strTempVal.replace(/</g, " ");
			   		strTempVal = strTempVal.replace(/>/g, " ");
			   		retVal = retVal + strTempVal;			   		
			   }
			   retVal = retVal + "</" +key +">\n";
	   		}
		}
	}
	catch(err) {
		myAlert("fbcArrayToXML failed!\n" +key +"\n" +inputArray[key] +"\n" +err.name +"\n" +err.message +"\n" +err.description);		
	}
	
	return retVal;
}

function fbcGetUserInfo() {
	FB.ensureInit (  function () {
		FB.Facebook.apiClient.users_getInfo(fbcUserId, "uid, name, pic_square, pic_big, current_location, sex", function(result, ex) { 
			var retVal = fbcERRORRESPONSE;
			if(result!=null && result[0]!= undefined)
			{					
				retVal = "<xml><response result=\"OK\">";			
				retVal = retVal + fbcArrayToXML(result);
				retVal = retVal + "</response></xml>";			
			}
			CallFlash("fbcSetUserInfo", retVal);
		});
	 });
}

function fbcGetFriendsInfo(bIncludeYourSelf, nNumberOfFriends) {
			
	var strQueryLimit = '';
	if(nNumberOfFriends!=undefined)
		strQueryLimit = ' LIMIT ' +nNumberOfFriends;

	var strFQL = 'SELECT uid, name, pic_square, pic_big, current_location FROM user WHERE uid IN ';
	strFQL += ' ( SELECT uid2 FROM friend WHERE uid1=\'' +fbcUserId +'\' )';
	if(bIncludeYourSelf!=undefined && bIncludeYourSelf==true)
		strFQL += ' OR uid=\'' +fbcUserId +'\'';
	
	strFQL += ' AND strlen(pic_square)>7 ';
	strFQL += ' ORDER BY name DESC ' +strQueryLimit;
	
	
	FB.ensureInit (  function () {
		FB.Facebook.apiClient.fql_query(strFQL, function(result, ex) {  
			var retVal = fbcERRORRESPONSE;
			if(result!=null && result[0]!= undefined)
			{
				retVal = "<xml><response result=\"OK\">";   
				retVal = retVal + fbcArrayToXML(result);
				retVal = retVal + "</response></xml>"; 
			}
			CallFlash("fbcSetFriendsInfo", retVal);	
		});
	 }); 
}


function fbcGetUserPictures(nNumberOfPictures, nCallNumber) {
	
	var strQueryLimit = '';
	if(nNumberOfPictures!=undefined)
		strQueryLimit = 'LIMIT ' +nNumberOfPictures;
		
	var strFQL = 'SELECT pid, src, src_big, src_small, created FROM photo WHERE pid IN ';
	strFQL += ' ( SELECT pid FROM photo_tag WHERE subject=\'' +fbcUserId +'\' ) ';
	strFQL += ' AND strlen(src_big)>7 ';	
	strFQL += ' ORDER BY created DESC ' +strQueryLimit;
	
	FB.ensureInit (  function () {
		FB.Facebook.apiClient.fql_query(strFQL, function(result, ex) {  
			var retVal = fbcERRORRESPONSE;
			if(result!=null && result[0]!= undefined)
			{
				retVal = "<xml><response result=\"OK\">";   
				retVal = retVal + fbcArrayToXML(result);
				retVal = retVal + "</response></xml>"; 

				CallFlash("fbcSetUserPictures", retVal);
			}
			else if(nCallNumber!=1) 
			{
				fbcGetUserPictures(1, nNumberOfPictures);
			}
			else
			{
				CallFlash("fbcSetUserPictures", retVal);
			}
		});
	 });
}