Calls everyone in your contact list
// ==UserScript==
// @name SpeedCalling for Popmundo
// @namespace http://popmundo.psicofrenia.com/
// @description Calls everyone in your contact list
// @include http://*.popmundo.com/World/Popmundo.aspx/Character/AddressBook
// @include http://*.popmundo.com/World/Popmundo.aspx/Interact/Phone/*
// @require https://greasyfork.org/scripts/3355-popmundo-lib/code/popmundo_lib.js?version=10024
// @require https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// @grant GM_info
// @version 3.2
// ==/UserScript==
var gexQuery = jQuery.noConflict();
// ------------------------------------------------------------------------
// ----------- DEFINITIONS AREA
var _locVersion_SpeedCalling = '3.1';
// External script with SpeedCalling functions
var _jsFile = 'http://resources.psicofrenia.com/popmundo.js';
// Logical variable to detect if the script should use Portuguese or English
var _isPortuguese = 0;
// Current URL
var _urlCurrent = window.location.pathname;
// Url to make the calls
var _urlToCall = '/World/Popmundo.aspx/Interact/Phone/';
// Url to mark the page as usable by this script
var _urlToCall_Token = '#toCall';
var _urlToContact_Token = '#toContact';
// Id of the char logged in
var _idMainChar = 0;
// Id of the char currently being interacted with
var _idCurrentChar = 0;
// Id to be used to store values on local storage
var _idStorage = '_GEX_MAIN_ID_';
// Array with runtimes values
var _valuesRunTime = {};
// Array with stored values
var _valuesStorage = {};
// Default value for callings
var _valueDefault = 24;
// All possible values for calling
var _valueCalls = Array(9999,121,24,61,58,26,25,73,74);
// ------------------------------------------------------------------------
// ----------- GLOBAL CODE
appendJsFile(_jsFile);
detectLanguage();
getIdMain();
checkVersion();
if( _urlCurrent.match(/\/World\/Popmundo.aspx\/Character\/AddressBook/g)){
executeOnPage_Book();
}
if( _urlCurrent.match(/\/World\/Popmundo.aspx\/Interact\/Phone/g)){
executeOnPage_Contact();
}
// ------------------------------------------------------------------------
// ----------- FUNCTIONS AREA
//Adds any external JS Script to the Popmundo page
function appendJsFile(jsUrl){
var scriptTag = '<script type="text/javascript" src="' + _jsFile + '"></script>';
gexQuery(scriptTag).appendTo('head');
}
// Detects if Popmundo is being used in one of the Portuguese translations
function detectLanguage(){
var langIdentifier = 'notícias';
if (gexQuery('#ctl00_ucMenu_lnkStart').text().toLowerCase() == langIdentifier)
_isPortuguese = 1;
}
//Gets the correct label for the language
function getLabel(label){
var translations = new Array();
translations.call_everyone = 'Call everyone#Ligar para todos';
translations.bug_report = 'Report a bug#Reportar um bug';
translations.update = 'Theres a new Version avaiable. Click here to update SpeedCalling.#Há uma nova versão disponível. Clique aqui para atualizá-la.';
translations.i9999 = 'Dont Call#Não telefonar';
translations.i121 = 'Gossip on the phone#Fofocar ao telefone';
translations.i24 = 'Wazzup call#Ligar para papear';
translations.i61 = 'SMS friendly text#Mandar mensagem no celular';
translations.i58 = 'SMS funny pic#Mandar foto engraçada por MMS';
translations.i26 = 'Prank call#Passar trote';
translations.i25 = 'Lover call#Ligar para namorar';
translations.i73 = 'Flirty Phone call#Ligar para flertar';
translations.i74 = 'Flirty SMS#Flertar por SMS';
if(translations[label] == undefined) return 'OOps!!!';
return translations[label].split("#")[_isPortuguese];
}
//Gets the ID of the logged char and sets the storage ID
function getIdMain(){
_idMainChar = gexQuery('.idHolder').first().html();
_idStorage += _idMainChar;
}
//Gets the ID of the logged char and sets the storage ID
function getIdCurrent(){
_idMainChar = gexQuery('.idHolder').first().html();
}
//Returns the button to make the calls
function getCallButton(){
var callButton = "<tr><td colspan=\"8\">"
callButton += checkVersion();
callButton += "<input type=\"button\" onclick=\"CallEveryone('" + _idStorage + "')\" value=\"" + getLabel('call_everyone') + "\" />";
callButton += "<input type=\"button\" onclick=\"contactAuthor();\" value=\"" + getLabel('bug_report') + "\" />";
callButton += "</td></tr>";
gexQuery(callButton).insertAfter('thead');
}
//Returns the character ID based on the link URI
function getIdFromUrl(value)
{
var urlItems = value.split('/');
return urlItems[urlItems.length -1];
}
//Loads all contact entries values into memory and updates localStorage
function loadValues(){
//Loads all current contacts (existant in the links)
gexQuery("a[id^='ctl00_cphLeftColumn_ctl00_repAddressBook_ctl'][id$=_lnkCharacter]")
.each(function()
{
var key = getIdFromUrl(gexQuery(this).attr('href'));
_valuesRunTime[key] = _valueDefault;
});
//Updates the localStorage if not present
if(window.localStorage.getItem(_idStorage) === null)
{
window.localStorage.setItem(_idStorage,JSON.stringify(_valuesRunTime));
_valuesStorage = _valuesRunTime;
} else { _valuesStorage = JSON.parse(window.localStorage.getItem(_idStorage)); }
//Loads stored values into runtime values
for(var key in _valuesRunTime)
{
if(typeof(_valuesStorage[key]) != 'undefined')
{ _valuesRunTime[key] = _valuesStorage[key]; }
}
//Saves the localStorage
window.localStorage.setItem(_idStorage,JSON.stringify(_valuesRunTime));
}
//Returns the combobox ID based on contact ID
function getSelect()
{
//The combobox Id
var tmpSelId = 'gex_CharId_' + _idMainChar + '_ContId_' + _idCurrentChar;
//The script that will be used to store the changings in the combobox
var tmpScript = " onchange=\"storeValue('" + _idStorage + "', '" + _idCurrentChar + "', '" + tmpSelId + "')\" "
//The combobox itself
var tmpSelect = "<br/><select " + tmpScript + " name=\"" + tmpSelId + "\" id=\"" + tmpSelId + "\" >";
var tmpOptions = '';
for (var i=0; i < _valueCalls.length; i++)
{
var selected = (_valuesRunTime[_idCurrentChar] == _valueCalls[i]) ? 'selected="selected"' : ' ';
tmpOptions += "<option " + selected + " value=\"" + _valueCalls[i] + "\">" + getLabel('i'+_valueCalls[i]) + "</option>";
}
tmpSelect += tmpOptions + "</select>";
return tmpSelect;
}
//Creates the selects to be used with the contacts
function getsCallSelects(){
gexQuery("a[id^='ctl00_cphLeftColumn_ctl00_repAddressBook_ctl'][id$=_lnkCharacter]")
.each(function()
{
var objId = gexQuery(this).attr('id');
_idCurrentChar = getIdFromUrl(gexQuery(this).attr('href'));
gexQuery(this).attr('href',_urlToCall + _idCurrentChar + _urlToCall_Token + _idMainChar);
gexQuery(this).attr('target','_BLANK');
var gexSelect = getSelect();
gexQuery(gexSelect).insertAfter("a[id^='" + objId + "']");
});
}
//Executes on Phonebook page
function executeOnPage_Book(){
getCallButton();
loadValues();
getsCallSelects();
}
function executeOnPage_Contact(){
//Exits if not to be used by this script
var tmpLocation = window.location.href;
if(tmpLocation.indexOf("#toCall") < 5) exit;
//Gets current char Id
tmpIdCurrentChar = gexQuery('.idHolder').eq(1).html();
//Calls current char if activated
var tmpAction = 9999;
gexQuery("select[id='ctl00_cphTopColumn_ctl00_ddlInteractionTypes']")
.each(function()
{
_valuesStorage = JSON.parse(window.localStorage.getItem(_idStorage));
tmpAction = _valuesStorage[tmpIdCurrentChar];
});
//Don't call if set to not to call
if(tmpAction == 9999) exit;
//Changes the select to the right value
gexQuery("select option:selected").attr("selected", false);
gexQuery("select option[value='" + tmpAction + "']").attr("selected", true);
gexQuery("#ctl00_cphTopColumn_ctl00_btnInteract").click();
}
//Checks if the script is updated and adds a links to update if it's not
function checkVersion(){
if (_locVersion_SpeedCalling == GM_info.script.version) return '';
return '<p><a href="https://userscripts.org/scripts/show/135489" target="_blank" style="color:red">' + getLabel('update') + '</a></p>';
}