// JavaScript Document
// FACEBOOK CONNECT INTERFACE
// swfbook § 0.0.1

//function swfbook () {

	var __flashMovie;
	var __appKey = "bf94730697282a3688c308e26b823889"; // AND CO / DEAR JOHN
	var __appUrl = "xd_receiver.htm";
	var __sessionVerified = false;
	var __useTimeout = true;
	var __timeoutWait = 5000;
	var __permissionsRequestString = "publish_stream";
	var __apiClient;
	
	function setFlashMovie(name) {
		__flashMovie = name;	
	}
	
	function thisMovie(movieName) {
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	}
	
	function setAppKey(v) {
		//alert(v);
		__appKey = v;
	}
	
	function setAppURL(v) {
		//alert(v);
		__appUrl = v;	
	}
	
	function setPermissionsRequest(v) {
		__permissionsRequestString = v;	
	}
	
	function useTimeout(v) {
		__useTimeout = v;	
	}
	
	function setTimeoutWait(v) {
		__timeoutWait = v;	
	}
	
	function init() {
		//alert("INIT");
		FB.init(__appKey, __appUrl);
		dispatchEvent("initialized");
	}
	
	function login() {
		FB.Connect.get_status().waitUntilReady(checkStatus);
		return false;
	}
	
	function checkStatus(status) {
		switch(status) {
			case FB.ConnectState.connected:
				// Make Sure Session is up-to-date and valid
				if(__useTimeout) {
					FB.Facebook.get_sessionWaitable().waitUntilReady(checkSession);
				} else {
					FB.Connect.logout(grabSession);	
				}
			break;
			case FB.ConnectState.appNotAuthorized:
				//FB.Connect.logout(grabSession);
				if(__useTimeout) {
					FB.Facebook.get_sessionWaitable().waitUntilReady(checkSession);
				} else {
					FB.Connect.logout(grabSession);	
				}
				//alert("WARNING:\nAPPLICATION NOT AUTHORIZED");
			break;
			case FB.ConnectState.userNotLoggedIn:
				// Grab Required Session
				grabSession();
			break;
	   }
	}
	
	function checkSession(status) {
		//var statusText = "";
		//for ( var prop in status ) {
			//statusText += " " + status[prop] + " " + prop + "\n";
		//}
		//alert("session\n" + statusText + " " + status);
		FB.Connect.forceSessionRefresh(checkRefresh);
		__sessionVerified = false;
		setTimeout(sessionXCheck, __timeoutWait);
	}
	
	function sessionXCheck() {
		if(__sessionVerified) {
		} else {
			FB.Connect.get_status().waitUntilReady(checkStatus);
		}
	}
	
	function grabSession() {
		__sessionVerified = true;
		FB.Connect.requireSession(facebook_onlogin, loginFailed, true);
	}
	
	function checkRefresh(status) {
		if(!__sessionVerified) {
			grabSession();
		}
	}
	
	function facebook_onlogin() {
		__apiClient = FB.Facebook.apiClient;
		FB.Connect.showPermissionDialog(__permissionsRequestString, permissionHandler, true);
	}
	
	function permissionHandler(perms) {
		if(!perms) {
			//alert("permission handler activated" + FB.Connect.get_loggedInUser());
		} else {
			dispatchEvent("loggedIn", "true");
			//alert("returned true");
		}
	}
		
	function publishNoteToStream(__title, __name, __url, __description) {
		FB.Connect.streamPublish("", {'name':__name,'href':__url,'description':__description}, null, null, __title, tellPublished);
	}
	
	function tellLoggedOut(info) {
		//alert("NOT LOGGED IN : \n" + info);
	}
	
	function loginFailed() {
		//alert("LOGIN TO FACEBOOK FAILED");
	}
	
//	function doTellLoggedIn() {
//		thisMovie(__flashMovie).tellLoggedIn();
//	}
		
	function tellPublished(result) {
		var traceStr = "RESULT :\n";
		for ( var props in result ) {
			traceStr += props + " : " + result[props] + "\n";
			for ( var prop in result[props] ) {
				traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			}
		}
		alert(traceStr);
		
		if(result) {
			dispatchEvent("PublishedToStream", result);
			//thisMovie(__flashMovie).tellSubmitted();
		}
	}
	
	function doGrabCurrentUserPhotos() {
		//alert("GRABBING PHOTOS " + FB.Connect.get_loggedInUser() + " API : " + __apiClient );
		__apiClient.photos_getAlbums(FB.Connect.get_loggedInUser(), "", traceAlbums);
	}
	
	function doGrabPhotos(uid) {
		//alert("GRABBING PHOTOS " + FB.Connect.get_loggedInUser() + " API : " + __apiClient );
		__apiClient.photos_getAlbums(uid, "", traceAlbums);
	}
	
	function traceAlbums(result) {
		//alert("result : " + result);
		//var traceStr = "RESULT :\n";
		var pCount = 0;
		for ( var props in result ) {
			//traceStr += props + " : " + result[props].aid + "\n";
			//for ( var prop in result[props] ) {
				//traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			//}
			if(pCount < 1) {
				getAlbumPhotos(result[props].aid);
				pCount++;
			}
		}
		//alert(traceStr);
	}
	
	function getAlbumPhotos(albumId) {
		//alert("api : " + __apiClient + " albumId: " + albumId);
		__apiClient.photos_get(null, albumId, null, dispatchAlbumPhotos);	
	}
	
	function dispatchAlbumPhotos(result) {
		var traceStr = "RESULT :\n";
		for ( var props in result ) {
			traceStr += props + " : " + result[props] + "\n";
			traceStr += props + " : " + result[props].pid + "\n";
			traceStr += props + " : " + result[props].src + "\n";
			traceStr += props + " : " + result[props].src_big + "\n";
			traceStr += props + " : " + result[props].src_small + "\n";
			//for ( var prop in result[props] ) {
				//traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			//}
		}
		//alert(traceStr);
		dispatchEvent("gotPhotos", result);
	}
	
	function getFriends() {
		__apiClient.friends_get(null, checkFriends);
	}
	
	function checkFriends(result) {
		var traceStr = "RESULT :\n";
		for ( var props in result ) {
			traceStr += props + " : " + result[props] + "\n";
			for ( var prop in result[props] ) {
				traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			}
		}
		//alert(traceStr);
		dispatchEvent("FriendsCollected", result);
	}
	
	function getInfo(uids) {
		// 'uid,first_name,last_name,name,locale,current_location,affiliations,pic_square,profile_url,sex'
		__apiClient.users_getInfo(uids, 'uid,first_name,last_name,name,pic_square', checkFriendInfo);
	}
	
	function getLoggedInUserName() {
		__apiClient.users_getInfo(FB.Connect.get_loggedInUser(), 'name', echoUserName);
	}
	
	function echoUserName(result) {
		var traceStr = "RESULT USER NAME :\n";
		for ( var props in result ) {
			traceStr += props + " : " + result[props] + "\n";
			for ( var prop in result[props] ) {
				traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			}
		}
		//alert(traceStr);
		dispatchEvent("UserName", result);
	}
	
	function checkFriendInfo(result) {
		var traceStr = "RESULT :\n";
		for ( var props in result ) {
			traceStr += props + " : " + result[props] + "\n";
			for ( var prop in result[props] ) {
				traceStr += "\t" + prop + " : " + result[props][prop] +"\n"; 
			}
		}
		//alert(traceStr);
		dispatchEvent("FriendData", result);
	}
	
	function dispatchEvent(evt, arg) {
		thisMovie(__flashMovie).swfbookCallback(evt, arg);
	}
//}
