// ==UserScript==
// @name FB Wall Manager
// @namespace MerricksdadWallManager
// @description Manages Wall Posts for Various FB Games
// @include http*://www.facebook.com/pages/FB-Wall-Manager/*
// @license http://creativecommons.org/licenses/by-nc-nd/3.0/us/
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_xmlhttpRequest
// @grant GM_registerMenuCommand
// @grant GM_addStyle
// @grant GM_log
// @grant GM_openInTab
// @grant GM_getResourceURL
// @version 4.0.0.1
// @copyright Charlie Ewing except where noted
// @require https://greasyfork.org/scripts/416-wm-common-library/code/WM%20Common%20Library.user.js
// @require https://greasyfork.org/scripts/417-wm-debug-console/code/WM%20Debug%20Console.user.js
// @require https://greasyfork.org/scripts/418-js-forms-library-b/code/JS%20Forms%20Library%20B.user.js
// @require https://greasyfork.org/scripts/419-wm-config-interface/code/WM%20Config%20Interface.user.js
// @require https://greasyfork.org/scripts/6908-wm-host-object/code/WM%20Host%20Object.js
// @require https://greasyfork.org/scripts/6907-wm-user-console-object/code/WM%20User%20Console%20Object.js
// @require https://greasyfork.org/scripts/6906-wm-sidekick-docking-object/code/WM%20Sidekick%20Docking%20Object.js
// @require https://greasyfork.org/scripts/6905-wm-collector-object/code/WM%20Collector%20Object.js
// @require https://greasyfork.org/scripts/6904-wm-dynamic-grabber-object/code/WM%20Dynamic%20Grabber%20Object.js
// @require https://greasyfork.org/scripts/6899-wm-test-object/code/WM%20Test%20Object.js
// @require https://greasyfork.org/scripts/6898-wm-feed-manager-objects/code/WM%20Feed%20Manager%20Objects.js
// @require https://greasyfork.org/scripts/6897-wm-friend-tracker-objects/code/WM%20Friend%20Tracker%20Objects.js
// @require https://greasyfork.org/scripts/6896-wm-rules-manager-objects/code/WM%20Rules%20Manager%20Objects.js
// @require https://greasyfork.org/scripts/6895-wm-app-object/code/WM%20App%20Object.js
// @require https://greasyfork.org/scripts/6894-wm-post-object/code/WM%20Post%20Object.js
// @resource IconSheet http://i.imgur.com/sLxzUA6.png
// ==/UserScript==
// Based on script built by Joe Simmons in Farmville Wall Manager
(function() {
//***************************************************************************************************************************************
//***** Preload
//***************************************************************************************************************************************
//dont run in iframes
try {
//this does not mean we are using GM's unsafe window
var unsafeWindow = unsafeWindow || window.wrappedJSObject || window;
if (unsafeWindow.frameElement != null) return;
} catch(e) {log("preload: "+e);}
//***************************************************************************************************************************************
//***** Debug Object
//***************************************************************************************************************************************
if (debug) { //from script WM_Debug_Console.user.js
debug.init();
if (debug.initialized) log("Debug Console Initialized");
}
//***************************************************************************************************************************************
//***** Globals
//***************************************************************************************************************************************
//var WM=WallManager; //from script WM_Host_Object.user.js
//returns the current date-time in unix format, not localized
WM.__defineGetter__("currentTime",function(){try{
return timeStamp();
}catch(e){log("WM.currentTime: "+e);}});
//returns the appID of the selected app tab on the collection panel, or 'all' if 'Show All' is selected
WM.__defineGetter__("currentAppTab",function(){try{
var tabCtrl=WM.console.collectTabControl;
if (tabCtrl||null) {
var tab = tabCtrl._selectedTab;
if (tab||null) return tab.appFilter;
}
return "all";
}catch(e){log("WM.currentAppTab: "+e);}});
var sandbox=this;
//allow certain options to be seen outside of the WallManager object
//graph extension is external but still calls on WM options if they exist
opts=WM.opts;
quickOpts=WM.quickOpts;
//***************************************************************************************************************************************
//***** global functions
//***************************************************************************************************************************************
sandbox.isNumber = function(o){return ((typeof o) == "number");};
sandbox.isArray = function(o) {return Object.prototype.toString.call(o) === "[object Array]";};
//***************************************************************************************************************************************
//***** Main Program
//***************************************************************************************************************************************
//*****short text versions for WM.config menu options*****
var checkBox=function(l,d,c,n){return ({type:"checkbox",label:l,"default":d||false,kids:c,newitem:n});}
var hidden=function(l,d,c){return ({type:"hidden",label:l,"default":d,kids:c});}
var optionBlock=function(l,c,hideSelectAll,n){hideSelectAll=hideSelectAll||false;return ({type:"optionblock",label:l,kids:c,hideSelectAll:hideSelectAll,newitem:n});}
var separator=function(l,s,c,hideSelectAll){hideSelectAll=hideSelectAll||false; return ({type:"separator",label:l,section:s,kids:c}); }
var section=function(l,c){return ({type:"section",label:l,kids:c});}
var tabSection=function(l,c){return ({type:"tab",label:l,kids:c});}
var inputBox=function(l,d,n){return ({type:"float",label:l,"default":(d||0),newitem:n});}
var textArea=function(l,d,n){return ({type:"textarea",label:l,"default":(d||0),newitem:n});}
var colorBox=function(l,d,n){return ({type:"colorbox",label:l,"default":(d||"black"),newitem:n});}
var button=function(l,s){return ({type:"button",label:l,script:s});}
var anchor=function(l,u,t){return ({type:"link",label:l,href:u,title:(t||'')});}
//***************************************************************************************************************************************
//***** Immediate
//***************************************************************************************************************************************
log("Script: WM initialized",{level:0});
// section for reclaiming memory and stopping memory leaks
var newIntv=null; //refresh interval
var oldIntv=null; //refresh interval
var procIntv=null; //process interval
var cleanIntv=null; //post removal interval
var hbIntv=null; //global heartbeat interval
var olderLimit=day; //default 1 day
var cleanup=function() {try{
//destroy intervals
if (newIntv) window.clearInterval(newIntv);
if (oldIntv) window.clearInterval(oldIntv);
if (procIntv) window.clearInterval(procIntv);
if (cleanIntv) window.clearInterval(cleanIntv);
if (hbIntv) window.clearInterval(hbIntv);
oldIntv = newIntv = procIntv = cleanIntv = hbIntv = null;
//close the sidekick tabs
WM.collector.closeAll();
//remove this event listener
window.removeEventListener("beforeunload", cleanup, false);
window.removeEventListener("message", WM.receiveSidekickMessage, false);
window.removeEventListener("resize", WM.onWindowResize, false);
//clean up memory
WallManager=null;
Graph=null;
jsForms=null;
olderLimit=null;
opts=null; quickOpts=null;
}catch(e){log("cleanup: "+e);}}
window.addEventListener("beforeunload", cleanup, false);
window.addEventListener("resize", WM.onWindowResize, false);
//start it up
WM.run();
})(); // anonymous function wrapper end
/* recent changes
4.0.0.0:
moved many object's code to their own files
*/