soulmate

Checks which towns you shared with the other soul

// ==UserScript==
// @name        soulmate
// @description Checks which towns you shared with the other soul
// @include     http://www.die2nite.com/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require     https://greasyfork.org/scripts/5392-waitforkeyelements/code/WaitForKeyElements.js?version=115012
// @grant       GM_addStyle
// @version     0.0.4.
// @namespace   https://greasyfork.org/users/64956
// ==/UserScript==

var twobj, uidtarget, cidade, sessao, extrato,ac,relink,ownId,season;
var prelink = "me?id=";
var poslink = ";sk=";
var colessaumlinks = [];

if(!('contains' in String.prototype)){String.prototype.contains = function(str, startIndex){return -1 !== String.prototype.indexOf.call(this, str, startIndex);};}

function alma () // changes soul page adding animated soul icon that will redirect to my town history (copying the uid of the target)
{
    if (!(document.URL).contains("uid")){}
    else{
        $("div.score").append($('<a href="http://www.die2nite.com/#ghost/city?go=ghost/ingame;" id="test"><img src="http://data.die2nite.com/gfx/icons/item_soul_blue.gif"></a>'));
        document.getElementById("test").onclick = function (){
            uidtarget = ((document.URL).substring((document.URL.indexOf("d=")+2),document.URL.indexOf(";s")));
            twobj = $(".tid_user")[0];
        }
    }
}

function historia () // changes my previous towns page and does prior town filtering based on season difference between target and own soul
{
    if (twobj === undefined || uidtarget === "ttp://www.die2nite.com/#ghost/city?go=ghost/user" ||
        uidtarget === ownId){}
    else{
        $(".side").width(470);
        $(".side > strong:nth-child(1)").append("'s towns shared with ");
        $(".side > strong:nth-child(1)").append(twobj);
        $(".side > strong:nth-child(1)").append("' soul");
        $(".side > strong:nth-child(1)").append($('<a class="button" id="botalma"><img src="http://data.twinoid.com/proxy/www.die2nite.com/img/icons/r_jsham.gif" alt=""> Analyse!</a>'));
        $("#botalma").click (analisarcidades);
        var tabela = document.getElementsByClassName("table")[0];
        sessao = document.URL.substring(document.URL.indexOf(";sk=")+4);

        ownId = $("a.tid_user:nth-child(2)").attr("href");
        ownId = ownId.substring((ownId.indexOf("d=")+2),ownId.indexOf(poslink));

        for (var i = 1, row; i<tabela.rows.length; i++) {
            row = tabela.rows[i];
            var colunazero = row.cells[0];
            if (parseFloat(colunazero.innerHTML) < knowseason(uidtarget)){
                $("tr:nth-child("+ (i+1) +")").hide();
            }
            else{
                var colunaum = row.cells[1];
                cidade = (colunaum.innerHTML).substring(colunaum.innerHTML.indexOf(prelink)+6,colunaum.innerHTML.indexOf(poslink));
                colessaumlinks.push(cidade);
            }
        }
    }
    window.addEventListener('loadend', function(event){
        ownID = undefined;twobj = undefined; uidtarget = undefined;
    });
}

function analisarcidades() // server request + more deleting
{
    $('#botalma').removeClass('button');
    $('#botalma').addClass('button off');
    $('#botalma').off();

    alert("Our Shamans will work on your towns, please wait!");

    for (ac =0;ac<colessaumlinks.length;ac++){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://www.die2nite.com/ghost/ingame?id='+
                 colessaumlinks[ac]+';sk='+sessao+'' , false);
        xhr.setRequestHeader('X-Handler', 'js.XmlHttp');  
        xhr.send();
        extrato = xhr.response;
        if (extrato.contains("uid="+uidtarget+";") === true){ //adding soul icon and opeing on new tab function
            relink = "http://www.die2nite.com/#ghost/ingame?id="+colessaumlinks[ac]+";sk="+sessao;
            $("tr:nth-child("+ (ac+2) +") > td:nth-child(2) > a:nth-child(1)").replaceWith($('<a href="" target="_blank"><img src="http://data.die2nite.com/gfx/icons/item_soul_blue.gif" alt=""></a>'));
            $("tr:nth-child("+ (ac+2) +") > td:nth-child(2) > a:nth-child(1)").attr("href", relink);
        }
        else{
            $("tr:nth-child("+ (ac+2) +")").hide();
        }
    }
    colessaumlinks = []; uidtarget ="";cidade="";sessao=""; //flushing some stuff
}

function knowseason (uidtarget) // function to detect which season the uid belongs
{
    if (parseFloat(uidtarget) < 37355){season= 0;}
    else if (parseFloat(uidtarget)<119425 && parseFloat(uidtarget)>37354){season =1;}
    else if (parseFloat(uidtarget)<156595 && parseFloat(uidtarget)>119425){season =2;}
    else if (parseFloat(uidtarget)<188375 && parseFloat(uidtarget)>156595){season =3;}
    else if (parseFloat(uidtarget)<221253 && parseFloat(uidtarget)>188375){season =4;}
    else if (parseFloat(uidtarget)<258960 && parseFloat(uidtarget)>221253){season =5;}
    else if (parseFloat(uidtarget)<278890 && parseFloat(uidtarget)>258960){season =6;}
    else if (parseFloat(uidtarget)<298610 && parseFloat(uidtarget)>278890){season =7;}
    else if (parseFloat(uidtarget)<322000 && parseFloat(uidtarget)>298610){season =8;}
    else if (parseFloat(uidtarget)<341302 && parseFloat(uidtarget)>322000){season =9;}
    else if (parseFloat(uidtarget)<356599 && parseFloat(uidtarget)>341302){season =10;}
    else if (parseFloat(uidtarget)<373535 && parseFloat(uidtarget)>356599){season =11;}
    else if (parseFloat(uidtarget)<381483 && parseFloat(uidtarget)>373535){season =12;}
    else {season=13;}
    return season;
}

waitForKeyElements (".tinyAction > form:nth-child(1) > select:nth-child(3)", alma); //detect soulpage
waitForKeyElements (".help:contains(This section displays a list of all your previous games.)", historia); //detect history page