// ----------------------------------- LOG IN and INIT functions ---------------------------
var loggedInUser = null;
var userProfileObject = new Object();
userProfileObject.name = null;
userProfileObject.email = null;
userProfileObject.image = null;
userProfileObject.fid = null; // facebook id
userProfileObject.id = null; // rmn id
userProfileObject.idLoadAttempts = 0;
var first_time_user = null;

var session_vars;
var playlistUrl = 'http://dev.recreatemynight.com/v1/resources/music/theconstellations/playlist.php';
function checkOnload(pageType) {
	// load session vars
	if (pageType=='home' || pageType=='friends') {
		if (window.name && window.name != 'null') {
			try { session_vars = JSON.parse('{'+window.name+'}'); }
			catch (err) { session_vars = {} }
		} else session_vars = {};
	}
	
	try {
		FB_RequireFeatures(["Connect"], function() {
			FB.Facebook.init(api_key, channel_path);
			api = FB.Facebook.apiClient;
			if (pageType=='landing') {
				FB.Connect.ifUserConnected(redirectToHomePage, userNotLoggedIn);
				//FB.Connect.ifUserConnected(redirectToHomePageTop, userNotLoggedIn);
			} else if (pageType=='home') {
				// init photo canvas
				photoCanvas.init();
				
				// init jw player for constellations music
				if (location.href.match(/theconstellations.([^\.]+\.)?recreatemynight.com/)/* && location.href.indexOf('&admin=1') != -1*/) {
					document.getElementById('saved_night_videos_title').innerHTML = 'Music and Videos from This Night';
					var mediaId = 'theconstellations_southerngothic';
					var mediaThumb = 'http://dev.recreatemynight.com/v1/view/images/aff/theconstellations/fb_thumb.jpg';
					addToSavedNightStrip(mediaId, mediaThumb, null, playlistUrl);
					initialize(); play(playlistUrl);
					music_playing = 1;
				}
				
				// init page leave event handler
				window.onbeforeunload = saveOnLeave;
				
				setLocalTimezone(1); // preload timezone dropdowns with local timezone
				FB.Connect.ifUserConnected(function() {userIsLoggedIn(pageType)}, checkFeaturedNight);
			} else if (pageType=='profile') {
				FB.Connect.ifUserConnected(function() {userIsLoggedIn(pageType)}, checkFeaturedProfile);
			} else if (pageType=='events' || pageType=='friends') {
				FB.Connect.ifUserConnected(function() {userIsLoggedIn(pageType)}, redirectToLandingPage);
			} else if (pageType=='demo') {
				FB.Connect.ifUserConnected(redirectToHomePage);
			}
		});
	} catch(err) {
		if (pageType != 'landing') redirectToLandingPage();
		var login_div = document.getElementById('login_btn');
		var error_div = document.getElementById('error_msg');
		if (login_div) login_div.style.display = 'none';
		if (error_div) error_div.style.display = 'block';
	}
}

var featured_user, featured_night, user_session_key, user_secret, user_sig;
function authenticate_session(useActualKeys) {
	if (api && !api.get_session() && !lock_offline_auth) {
		if (useActualKeys) api.set_session({'session_key':user_session_key, 'secret':user_secret, 'sig':user_sig, 'expires':'0'});
		else api.set_session({'session_key':'810d51d2c1c6ba333025cd85-100001257451407', 'secret':'36f0a30491ac2407d4bb58e07a2e905c', 'sig':'c3ac6839e0c913ca4944cf959c53b865', 'expires':'0'});
		// use standard account to authenticate offline session
		
		//'uid':'100001185218674', 'base_domain':'recreatemynight.com'
		//setInterval("authenticate_session()", 10);
		//FB.Connect.showPermissionDialog("offline_access");
		
		/*createCookie('fbsetting_'+api_key, '%7B%22connectState%22%3A1%2C%22oneLineStorySetting%22%3A3%2C%22shortStorySetting%22%3A3%2C%22inFacebook%22%3Afalse%7D', 1);
		createCookie('base_domain_'+api_key, 'recreatemynight.com', 1);
		createCookie(api_key, user_sig, 1);
		createCookie(api_key+'_ss', user_secret, 1);
		createCookie(api_key+'_session_key', user_session_key, 1);
		createCookie(api_key+'_user', getFid, 1);
		createCookie(api_key+'_expires', '0', 1);
		authenticate_session();*/
	}
}

function checkFeaturedProfile() {
	if (getFid) {
		readFromDB("getRmnUserInfoByFacebookId", [getFid.toString()], function(data) {
			var result = JSON.parse(data);
			result = result['result'];
			if (result) {
				var user_id = result['user_id'];
				var user_privacy = result['privacy']; // public
				if (user_privacy == 'public') {
					user_session_key = result['sessionKey']; // 77c904f1628f15c4d597132a-100001066004827
					user_secret = result['secret']; // 83bd96796ab22499c4018c9fc4120848
					user_sig = result['sig']; // 9cddbaa2c249dc288b9253152101c274
					userProfileObject.id = user_id;
					loggedInUser = getFid;
					
					featured_user = 1; // flag featured user
					var logged_in_view_div = document.getElementById('logged_in_view');
					if (logged_in_view_div) logged_in_view_div.style.display = 'block';
					loadUserProfileData(); loadRmnUserSavedNights();
					
					// hide and turn elements into login buttons if header exists
					var logout_link = document.getElementById('logout_link');
					if (logout_link) {
						highlightHeaderLink('friends');
						document.getElementById('home_link').onclick = loginAndShowDashboard;
						document.getElementById('recreate_link').onclick = loginAndShowDashboard;
						document.getElementById('friends_link').onclick = function() { return false; }
						document.getElementById('friends_link').style.cursor = 'default';
						logout_link.onclick = loginAndShowDashboard;
						logout_link.innerHTML = 'login';
					}
				} else redirectToLandingPage();
			} else redirectToLandingPage();
		});
	} else redirectToLandingPage();
}

function checkFeaturedNight(landing_page) {
	if (getFid && getSts) {
		readFromDB("getRmnUserInfoByFacebookId", [getFid.toString()], function(data) {
			var result = JSON.parse(data);
			result = result['result'];
			if (result) {
				var user_id = result['user_id'];
				var user_privacy = result['privacy']; // public
				if (user_privacy == 'public') {
					user_session_key = result['sessionKey']; // 77c904f1628f15c4d597132a-100001066004827
					user_secret = result['secret']; // 83bd96796ab22499c4018c9fc4120848
					user_sig = result['sig']; // 9cddbaa2c249dc288b9253152101c274
					userProfileObject.id = user_id;
					loggedInUser = getFid;
					
					if (!landing_page) {
						featured_night = 1; // flag featured night
						var logged_in_view_div = document.getElementById('logged_in_view');
						if (logged_in_view_div) logged_in_view_div.style.display = 'block';
						loadLogEntries(); toggleViewNight(); // show view night tab
						
						// hide and turn elements into login buttons
						document.getElementById('share_link').style.display = 'none';
						document.getElementById('night_log_login').style.display = 'block';
						document.getElementById('whoWereYouWith').onclick = function () { loginAndShowTab('friends') };
						document.getElementById('addMorePhotos').onclick = function () { loginAndShowTab('photo') };
						document.getElementById('addMoreVideos').onclick = function () { loginAndShowTab('video') };
						document.getElementById('addToLog').onclick = function () { loginAndShowTab('log') };
						var logout_link = document.getElementById('logout_link');
						if (logout_link) {
							document.getElementById('home_link').onclick = loginAndShowDashboard;
							document.getElementById('recreate_link').onclick = loginAndShowDashboard;
							document.getElementById('friends_link').onclick = loginAndShowDashboard;
							logout_link.onclick = loginAndShowDashboard;
							logout_link.innerHTML = 'login';
						}
					} else redirectToHomePage();
				} else if (!landing_page) redirectToLandingPage();
			} else if (!landing_page) redirectToLandingPage();
		});
	} else if (!landing_page) redirectToLandingPage();
}

var lock_offline_auth;
function expireSession() {
	lock_offline_auth = 1;
	api.set_session(); // expire session
}

function loginToFacebook() {
	expireSession();
	FB.Connect.requireSession(redirectToHomePage);
	return false;
}

function loginAndShowTab(tab_name) {
	expireSession();
	FB.Connect.requireSession(function () {location.href = getNewPageUrlWithParams('h')+'&tab='+tab_name});
	return false;
}

function loginAndOptIn() {
	expireSession();
	FB.Connect.requireSession(function () {location.href = getNewPageUrlWithParams('h')+'&optin=1'});
	return false;
}

function loginAndShowDashboard() {
	expireSession();
	FB.Connect.requireSession(redirectToDashboardHome);
	return false;
}

function redirectToDashboardHome() {
	location.href = '?p=h';
}

function userIsLoggedIn(pageType) {
	// handle expired sessions
	if (!api.get_session()) {setTimeout('location.href = location.href',3000); return;}
	// FB.Connect.logout(function() {location.href = location.href});
	loggedInUser = api.get_session().uid;
	userProfileObject.fid = loggedInUser;
	
	if (pageType=='home') {
		//prepWelcomeScreen();
		
		// make admin add friend tools visible
		if (!editNight && location.href.indexOf('&admin=1') != -1) {
			document.getElementById('you_were_with_add_more').style.display = 'block';
			document.getElementById('you_were_with_friend_lists').style.display = 'block';
			loadUserGroups();
		}
		
		// show recreate frame automatically for p=r
		if (location.href.match(/\bp=r\b/)) showFrame('recreate', 'date');
		else highlightHeaderLink();
		
		// handle first time user case (when the first_time flag exists in the query string)
		if (first_time_user) {
			first_time_user = null; // reset flag
			handleFirstTimeUser();
		}
		
		// load widgets
		if (!getSts) loadDashboardWidgets();
	} else if (pageType=='profile') { if (!getFid || getFid == loggedInUser) highlightHeaderLink('friends'); loadUserProfileData(); } else if (pageType=='friends') renderFriendPicker(null, 1);
	else if (pageType=='events') loadUserEvents();
	
	var logged_in_view_div = document.getElementById('logged_in_view');
	if (logged_in_view_div) logged_in_view_div.style.display = 'block';
	
	// update "you were with" text if needed
	/*if (editNight && getFid != loggedInUser) {
		var you_were_with_label = document.getElementById('you_were_with_label');
		you_were_with_label.innerHTML = '<fb:name uid='+getFid+' firstnameonly="true" linked="false"></fb:name> was with:';
		loadFBML(you_were_with_label);
	}*/
	
	// retrieve info from RMN db about user
	getRmnUserInfoByFacebookId();

	// determine whether user has granted read stream permission
	if (pageType=='home'/* && !editNight*/) api.users_hasAppPermission("read_stream", readPermHandler);
	/*FB.Connect.showConnectDialog(
		FBIntern.Intl._tx("Request for Special Permissions"),
		'connect/prompt_permissions.php',
		{ext_perm:'read_stream'},
		0, 480, readPermHandler
	);*/
	
	//api.notifications_get(loadRecommendations);
}

function prepWelcomeScreen() {
	//show welcome screen
	var f = function() {
		// animate in
		fadeDiv("in","msgDisplay",1250,null);
	}
	
	// prep to animate in
	if (!editNight) {
		fadeDiv("out","msgDisplay",300,null);
		fadeDiv("out","userDisplay",300,f);
	}
}

function userNotLoggedIn() {
	//document.getElementById('logged_in_view').style.display = 'none';
	FB_RequireFeatures(["Api"], function() {
		FB.Facebook.init(api_key, channel_path);
	});
	
	if (getFid && getSts) checkFeaturedNight(1);
}

function redirectToHomePage() {
	//url = location.href;
	//baseurl = url.split("?")[0];
	//location.href = getBaseUrl()+"?p=h";
	location.href = getNewPageUrlWithParams('h');
}

function redirectToHomePageTop() {
	top.location.href = getNewPageUrlWithParams('h').replace('&login=1','');
}

function startIframeRefresh() {
	if (location.href.indexOf('&login=1') == -1) setInterval('document.getElementById("fb_session_detect").src = "'+getNewPageUrlWithParams('l')+'&login=1"', 3000); // *** hack to get around old fb js api auth
}

function redirectToRecreate() {
	location.href = removeFid(getNewPageUrlWithParams('h'))+'&newcreator=1';
}

function redirectToLandingPage() {
	//url = location.href;
	//baseurl = url.split("?")[0];
	//location.href = getBaseUrl()+"?p=l";
	clearSessionVars(); // flush js session vars
	location.href = getNewPageUrlWithParams('l');
}	

function logout() {
	// check unsaved progress
	var save_night_btn = document.getElementById('save_night_btn');
	if (save_night_btn) {
		if (!save_night_btn.disabled && !confirm("Discard changes and log out?")) return false;
		else save_night_btn.disabled = true;
	}
	
	clearSessionVars(); // flush js session vars
	FB.Connect.logout(function() {location.href = '.'});
	return false;
}

function loadProfileData(user) {
	if (user) {
		userProfileObject.name = user[0]['first_name'];
		userProfileObject.image = user[0]['pic_square'];
		userProfileObject.email = user[0]['email'];
		//userProfileObject.tzOffset = user[0]['timezone'];
	}
	
	// load night after rmn id and fb data is retrieved
	if (editNight) {
		loadLogEntries();
		
		// determine whether user has pre-selected a tab
		var tab_param = extractGetParam('tab');
		if (tab_param == 'friends') toggleFriendSelector(1);
		else if (tab_param == 'photo') togglePhotoSelector(1);
		else if (tab_param == 'video') toggleVideoSelector(1);
		else if (tab_param == 'log') toggleAddLogs(1);
		else toggleViewNight(); // show view night tab
		
		var night_owner_div = document.getElementById('night_owner_div');
		if (loggedInUser == getFid) {
			var dateString = getFormattedDate(getSts);
			if (night_owner_div) night_owner_div.innerHTML = '<div style="padding-bottom:13px"></div><center>You are viewing your night: '+dateString+'</center>';
		}
	} // load rmn data even if only time is provided
	else if (getSts && location.href.match(/\bp=[hr]\b/)) loadLogEntries();
	
	// show user profile
	welcomeLoggedInUser();
}

function welcomeLoggedInUser() {
	var userName = document.getElementById('userName');
	if (userName) {
		if (userProfileObject.name) {
			document.getElementById('userImage').innerHTML = '<a href="?p=f"><img src="' +userProfileObject.image+ '" border="0" id="userImageObj" /></a>';
			userName.innerHTML = "Welcome, "+userProfileObject.name+ "!";
		} else userName.innerHTML = "[ session expired ]&nbsp;&nbsp;";
	}
}

// ---------------------------------------------------------- END INIT / LOG IN Functions -
// DB Function wrappers.  Convention -- use same name as the call in the DB
function getRmnUserInfoByFacebookId() {
	var functionName = "getRmnUserInfoByFacebookId";
	var functionArgs = new Array();
	functionArgs[0] = loggedInUser.toString(); // fb_user_id
	userProfileObject.idLoadAttempts++;
	readFromDB(functionName, functionArgs, loadRmnUserData);
}

function addRmnUserByFacebookId(fid) {
	var functionName = "addRmnUserByFacebookId";
	var functionArgs = new Array();
	writeToDebug("in addRmnUserByFacebookId("+fid+")");
	functionArgs[0] = fid.toString(); // fb_user_id
	userProfileObject.idLoadAttempts++;
	writeToDB(functionName,functionArgs,loadRmnUserData);
	
	// set first time user flag and show recreate frame
	handleFirstTimeUser();
}

function handleFirstTimeUser() {
	// don't run again if first_time_user flag has already been set, or if it's a saved night
	if (!first_time_user && !getSts) {
		first_time_user = 1;
		document.getElementById('first_time_tooltip').style.display = 'block';
		document.getElementById('first_time_arrows').style.display = 'block';
		document.getElementById('nav_tabs').style.display = 'none';
		document.getElementById('night_log').style.display = 'none';
		showFrame('recreate', 'date');
	}
}

// DB response processors
var _result;
function loadRmnUserData(userData) {
	var response = JSON.parse(userData);
	if (response["status"] == "ok") {
		if (response["result"] != null) {
			processRmnUserData(response["result"]);
		} else if (userProfileObject.idLoadAttempts < 2) {
			addRmnUserByFacebookId(userProfileObject.fid);
		}
	} else {
		alert("Failed to retrieve data from DB: "+userData);
	}
}

function error(msg) {
	writeToDebug("Got error message from ajax: "+msg);
}

function processRmnUserData(userData) {
	if(userData["user_id"]) {
		userProfileObject.id = userData["user_id"];
	} else {
		data = JSON.parse(userData);
		if (data["id"]) userProfileObject.id = data["id"];
	} writeToDebug("rmn id: "+userProfileObject.id);
	
	// load saved nights widget
	var savedNightsWidget = document.getElementById('saved_night_widget_date');
	var profileNightsDiv = document.getElementById('profile_upcoming_saved_nights');
	if (savedNightsWidget) loadUserSavedNights();
	else if (profileNightsDiv) loadRmnUserSavedNights();
	
	// load user fb data
	api.users_getInfo(loggedInUser, ['first_name', 'last_name', 'pic_square', 'email'], loadProfileData); // , 'timezone'
}

function loadRmnUserSavedNights() {
	readFromDB("getRmnUserIdByFacebookId", [getFid.toString()], function(data) {
		var saved_nights_div = document.getElementById('profile_upcoming_saved_nights');
		var rmnId = JSON.parse(data); rmnId = rmnId['result'];
		if (rmnId) loadUserSavedNights(saved_nights_div, rmnId);
		else saved_nights_div.innerHTML = 'No saved nights.';
	});
}

function loadDashboardWidgets() {
	loadUserFriendSample(); // friend widget
	loadLatestUploads(); // latest uploads
	loadLatestEvents();
	//loadRecentStream(); // status updates
}

function saveOnLeave() {
	var save_night_btn = document.getElementById('save_night_btn');
	if (save_night_btn && !save_night_btn.disabled)
		return "You will lose any unsaved changes.";
}
