// ==UserScript==
// @name TravianFarBeyond
// @description EthereaL ProphetS Travian Script
// @re-fix and personalization Freeky (aka SLY)
// @re-Build from srectch - 09/2009 
// @based on the original script from Victor Garcia (aka Croc)
// @some images and ideias from ms99 in: Travian3 Beyond ML&CN
// @Contributors nicknames are provided in the header or inside of the functions
// @include http://*.travian*.*/*.php*
// @require language.js
// @require buldingsandunits.js
// @require genericfunctions.js
// @require images.js
// @exclude http://*.travian*.*/hilfe.php*
// @exclude http://*.travian*.*/index.php*
// @exclude http://*.travian*.*/anleitung.php*
// @exclude http://*.travian*.*/impressum.php*
// @exclude	http://*.travian*.*/log*.php*
// @exclude http://*.travian*.*/anmelden.php*
// @exclude http://*.travian*.*/gutscheine.php*
// @exclude http://*.travian*.*/spielregeln.php*
// @exclude http://*.travian*.*/links.php*
// @exclude http://*.travian*.*/geschichte.php*
// @exclude http://*.travian*.*/tutorial.php*
// @exclude http://*.travian*.*/manual.php*
// @exclude http://*.travian*.*/ajax.php*
// @exclude http://*.travian*.*/ad/*
// @exclude http://*.travian*.*/chat/*
// @exclude http://forum.travian*.*
// @exclude http://board.travian*.*
// @exclude http://shop.travian*.*
// @exclude http://*.travian*.*/activate.php*
// @exclude http://*.travian*.*/support.php*
// @exclude  http://help.travian*.*
// @exclude *.css
// @exclude *.js
// @version 2.92
// @date    11/11/2009
// ==/UserScript==


// Functions
{
    // Show Script Loading Time
    function funcScriptLoadTime()
    {
        var scriptLoadTime = new Date().getTime() - scriptStartTime;
        var _span = funcElem("span", "<br>TFB: " + scriptLoadTime + " ms, " + funcTranslate('AT') + " " + func2Zero(new Date().getHours()) + ':' + func2Zero(new Date().getMinutes()) + "<br>Refreshing in: ");
        funcFindElem("//div[@id='ltime']", XPFirst).appendChild(_span);
        _span = document.createElement("span");
        _span.setAttribute("id","TFBTimeOut");
        _span.innerHTML = funcSeconds2Time(180);        
        funcFindElem("//div[@id='ltime']", XPFirst).appendChild(_span);
    }
    
    function funcGetAldeiaData()
    {
        var lista_aldeias = funcFindElem("//table[@id='vlist']//tbody//tr", XPList);
        if (lista_aldeias == null) return;
        for (var n=0; n < lista_aldeias.snapshotLength; n++)
        {
            if(lista_aldeias.snapshotItem(n).innerHTML.indexOf('<td class="dot hl">') != -1)
            {
                lista_aldeias.snapshotItem(n).innerHTML.search(/\?newdid=(\d+)/);
                selected_village_data[0] = RegExp.$1;    // newdID
                selected_village_data[1] = lista_aldeias.snapshotItem(n).childNodes[1].textContent;  // Name
                selected_village_data[2] = parseInt(lista_aldeias.snapshotItem(n).childNodes[2].textContent.split("|")[0].split("(")[1]);    // X
                selected_village_data[3] = parseInt(lista_aldeias.snapshotItem(n).childNodes[2].textContent.split("|")[1].split(")")[0]);    // Y
                selected_village_data[4] = funcxy2id(selected_village_data[2], selected_village_data[3]);    // zID
                return;
            }    
        }
    }
    
    function funcGetResourcesData()
    {
        for (var i = 0; i < 4; i++) 
        {
            var a = funcGetElemID('l' + (4-i));
            actual_resources[i] = a.innerHTML.split("/")[0];
            total_resources[i] = a.innerHTML.split("/")[1];
            resources_per_sec[i] = a.title/3600;
        }
    }
    
    function funcLeftMenuLinks()
    {
        var menu = funcFindElem("//div[@id='side_navi']//p", XPFirst);
        if ( menu == null ) return;
        var _deleteNode = false;
        for (var i = 0; i < menu.childNodes.length - 1; i++)
        {
            _deleteNode = false;
            if (menu.childNodes[i].nodeName != "A") i++;
            
            if (menu.childNodes[i].href.indexOf("http://www.travian") != -1) _deleteNode = true;
            else if (menu.childNodes[i].href.indexOf("logout.php") != -1) _deleteNode = true;
            if (_deleteNode)                
            {
                funcRemoveElem(menu.childNodes[i]);
                i--;
                funcRemoveElem(menu.childNodes[i]);                
                i--;
            }
        }
        var menu = funcFindElem("//div[@id='side_navi']//p", XPList);
        funcRemoveElem(menu.snapshotItem(1));
        funcRemoveElem(menu.snapshotItem(2).childNodes[2]);
        funcRemoveElem(menu.snapshotItem(2).childNodes[2]);
        
        var ID_WW = funcReadCookie("ID_WW");
        if (ID_WW != null && ID_WW != "" && ID_WW !=0) {
            var links = [   
                [funcTranslate('LOGIN'), "login.php"],
                0,
                [funcTranslate('SIM'), "warsim.php"],
                [funcTranslate('COMP'), "http://trcomp.sourceforge.net/?lang=" + server_name, "_blank"],
                0,
                ['WW:', "statistiken.php?id=6"],
                ['- ' + funcTranslate('ENV_TROPAS'), "a2b.php?z=" + ID_WW],
                ['- ' + funcTranslate('ENVTTROPAS'), "a2b.php?z=" + ID_WW + "&F=tropatoda"],
                ['- ' + funcTranslate('ENVIAR_PALHA'), "build.php?z=" + ID_WW + "&gid=17&F=palha"],
                0
            ];
        }
        else
        {
            var links = [   
                [funcTranslate('LOGIN'), "login.php"],
                0,
                [funcTranslate('SIMULATOR'), "warsim.php"],
                [funcTranslate('COMP'), "http://trcomp.sourceforge.net/?lang=" + server_name, "_blank"]
            ];              
        };
        for(var i = 0; i < links.length; i++)
        {
            if(links[i])
            {
                var a = funcElem("A", links[i][0]);
                if(links[i][1]) a.href = links[i][1];
                if(links[i][2]) a.setAttribute('target', links[i][2]);
                menu.snapshotItem(0).appendChild(a);
            }
            else menu.snapshotItem(0).appendChild(document.createElement('P'));
        }
        menu.snapshotItem(2).appendChild(document.createElement('P'));
        var a = funcElem("A", "~ " + funcTranslate('VER') + " " + tfb_version + " ~");
        a.setAttribute("href", "javascript:void(0)");
        a.setAttribute("title", funcTranslate('CHECK'));
        a.addEventListener("click", function(){ funcUpdateScript(true); }, 0);
        menu.snapshotItem(2).appendChild(a);        
    }

    function funcMainTopLinks()
    {
        funcGetElemID('ltime').setAttribute('style', 'width:175px; top:35px;');
        var barra = funcGetElemID("mtop");
        funcRemoveElem(barra.childNodes[10]);
        funcRemoveElem(barra.childNodes[10]);
        funcRemoveElem(barra.childNodes[10]);
        funcRemoveElem(barra.childNodes[10]);
        barra.setAttribute('style', 'width:666px; left:180px;');
        var Mapa4 = ["0,0,35,33", "35,0,70,33", "0,33,35,67", "35,33,70,67"];
        var Mapa3 = ["0,0,70,33", "0,33,35,67", "35,33,70,67"];
        barra.innerHTML += '<img id="mercado123" usemap="#mercado" src="' + local_Images["mercado_gs"] + '">';
        barra.innerHTML += '<img id="militar123" usemap="#militar" src="' + local_Images["militar_gs"] + '">';
        barra.innerHTML += '<img id="alianca123" usemap="#alianca" src="' + local_Images["alianca_gs"] + '">';
        barra.innerHTML += '<a href="plus.php"><img id="setup" src="' + local_Images["tbconf_gs"] + '" onmouseover="this.src=\'' + local_Images["tbconf"] + '\';" onmouseout="this.src=\'' + local_Images["tbconf_gs"] + '\';" title="' + funcTranslate('SETUP') + '"></a>';
        barra.innerHTML += '<map name="mercado" onmouseover="mercado123.src=\'' + local_Images["mercado"] + '\';" onmouseout="mercado123.src=\'' + local_Images["mercado_gs"] + '\';"><area shape="rect" coords="'+ Mapa3[0] +'" href="build.php?gid=17" title="' + funcTranslate('MERCADO') + '"><area shape="rect" coords="'+ Mapa3[1] +'" href="build.php?gid=17&t=1" title="' + funcTranslate('COMPRAR') + '"><area shape="rect" coords="'+ Mapa3[2] +'" href="build.php?gid=17&t=2" title="' + funcTranslate('VENDER') + '"></map>';
        barra.innerHTML += '<map name="militar" onmouseover="militar123.src=\'' + local_Images["militar"] + '\';" onmouseout="militar123.src=\'' + local_Images["militar_gs"] + '\';"><area shape="rect" coords="'+ Mapa4[0] +'" href="build.php?gid=16" title="' + funcTranslate('PUNTO') + '"><area shape="rect" coords="'+ Mapa4[1] +'" href="build.php?gid=19" title="' + funcTranslate('CUARTEL') + '"><area shape="rect" coords="'+ Mapa4[2] +'" href="build.php?gid=20" title="' + funcTranslate('CORRAL') + '"><area shape="rect" coords="'+ Mapa4[3] +'" href="build.php?gid=21" title="' + funcTranslate('TALLER') + '"></map>';
        barra.innerHTML += '<map name="alianca" onmouseover="alianca123.src=\'' + local_Images["alianca"] + '\';" onmouseout="alianca123.src=\'' + local_Images["alianca_gs"] + '\';"><area shape="rect" coords="'+ Mapa4[0] +'" href="allianz.php" title="' + funcTranslate('ALIANZAVG') + '"><area shape="rect" coords="'+ Mapa4[1] +'" href="allianz.php?s=2" title="' + funcTranslate('ALIANZAFL') + '"><area shape="rect" coords="'+ Mapa4[2] +'" href="allianz.php?s=3" title="' + funcTranslate('ATAQUES') + '"><area shape="rect" coords="'+ Mapa4[3] +'" href="allianz.php?s=4" title="' + funcTranslate('NOTICIAS') + '"></map>';
    } 
    
    // Set timers and timeouts
    function funcSetTimers()
    {
        
        setInterval(function () 
                    {
                        var relojes = funcFindElem("//*[@id='TFBTimeOutAndRefresh' or @id='TFBTimeOut']", XPList);
                        for (var i = 0; i < relojes.snapshotLength; i++)
                        {
                            var tiempo = funcTime2Seconds(relojes.snapshotItem(i).textContent) - 1;
                            if (tiempo >= 0) relojes.snapshotItem(i).innerHTML = funcSeconds2Time(tiempo);
                            else if (relojes.snapshotItem(i).id == 'TFBTimeOutAndRefresh') document.location.reload();
                        }
                    },1000);
    }
    
    // Calculate and Show fill times for warehouses
    function funcCalculateFillTime()
    {
        for (var i = 0; i < 4; i++)
        {
            if (resources_per_sec[i] < 0)
            {
                var tiempo = Math.round(actual_resources[i] / - resources_per_sec[i]);
            }
            else if (resources_per_sec[i] == 0)
            {
                var tiempo = -1;
            }
            else
            {
                var tiempo = Math.round((total_resources[i] - actual_resources[i]) / resources_per_sec[i]);
            }
            var produccionHora = funcGetElemID('l' + (4-i)).title;
            var tiempoRestante = "<span id='TFBTimeOut' style='font-weight:bold'>" + funcSeconds2Time(tiempo) + "</span>";
            var celda = funcElem("DIV", "<span style='font-size:9px; color:#909090; position: absolute; top:13px; height: 20px; text-align:left;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(" + (produccionHora > 0 ? '+' : '') + produccionHora + ', ' + (produccionHora < 0 ? '<font color="#FF0000">' + tiempoRestante + '</font>' : tiempoRestante) + ')</span>');
            var a = funcGetElemID('l'+(4-i)).previousSibling;
            if (a.nodeName == '#text') a = a.previousSibling;
            a.appendChild(celda);
        }
    }
    
     // Village Links
    function funcVillageLinks()
    {
        var cities = funcFindElem("//table[@id='vlist']//td[@class='link']", XPList);
        if (!cities) return;
        
        var full_tr = funcFindElem("//table[@id='vlist']//tbody//tr", XPList);
        var citiesx = funcFindElem("//table[@id='vlist']//div[@class='cox']", XPList);
        var citiesy = funcFindElem("//table[@id='vlist']//div[@class='coy']", XPList);
        for (var i = 0; i < cities.snapshotLength; i++)
        {
            var id = funcxy2id(citiesx.snapshotItem(i).textContent.split("(")[1], citiesy.snapshotItem(i).textContent.split(")")[0]);
            var novo_td = document.createElement("TD");
            novo_td.setAttribute("class", "link");
            var novo_div = document.createElement("DIV");
            novo_div.style.height = "15px";
            novo_div.innerHTML += "<a href='a2b.php?z=" + id + "'><img class='def1' src='img/x.gif' title='" + funcTranslate('ENV_TROPAS') + "'></a>";
            novo_div.innerHTML += "&nbsp;<a href='build.php?z=" + id + "&gid=17'><img class='r4' src='img/x.gif' title='" + funcTranslate('ENVIAR') + "'></a>";
            novo_div.innerHTML += "&nbsp;<a href='build.php?z=" + id + "&gid=17&F=dist'><img class='r3' src='img/x.gif' title='" + funcTranslate('DISTREC') + "'></a>";
            novo_td.appendChild(novo_div);
            full_tr.snapshotItem(i).appendChild(novo_td);
        }
    }        

    // Addicional information about hero
    function funcHeroStatus()
    {
        if (funcFindElem("//table[@id='distribution']//tr//th[@colspan='5']//a[contains(@href, '&rename')]", XPFirst) == null ) return;
        var _tabela = funcFindElem("//table[@id='distribution']", XPFirst);
		var ttd=_tabela.getElementsByTagName("th");
		var level=parseInt(ttd[0].textContent.match(/\s(\d+)\s\(/).pop());
		ttd=_tabela.getElementsByTagName("td");
		var percent=parseInt(ttd[21].textContent.match(/(\d+)\%/).pop());
		var an=100*(level);
		var an1=100*(level+1);
		var sn=0.5*an*(level+1);
		var sn1=0.5*an1*(level+2);
		var unitpercent=an1*percent/100;
		var kills=sn+unitpercent;
        funcFindElem("//span[@class='info']", XPFirst).innerHTML = funcFindElem("//span[@class='info']", XPFirst).innerHTML + ' - ' + funcTranslate('OBJECTIVO') + ': ' + an1 + ' ' + funcTranslate('MORTES') +'!';
        var _thead = document.createElement("THEAD");
        var _tr = document.createElement("TR");
        var _td = document.createElement("TD");
        _td.innerHTML = funcTranslate('MORTEST') + ':';
        _tr.appendChild(_td);
        var _td = document.createElement("TD");
        _td.innerHTML = kills;
        _tr.appendChild(_td);
        var _td = document.createElement("TD");
        _td.innerHTML = funcTranslate('FALTA') + ':';
        _td.setAttribute("style", "text-align:right;");
        _tr.appendChild(_td);
        var _td = document.createElement("TD");
        _td.setAttribute("style", "text-align:center;");
        _td.colSpan = 2;
        _td.innerHTML = sn1-kills;
        _tr.appendChild(_td);
        _thead.appendChild(_tr);
        _tabela.appendChild(_thead);
    }

    // Get the Capital ID
    function funcGetCapitalID(_xmlHttpRequest)
    {
        var capital_ID = 0;
        var _doc = funcCreateNewDoc(_xmlHttpRequest);
        var _table_villages = _doc[0].evaluate("//table[@id='villages']//tbody//tr", _doc[1], null, XPList, null);
        for ( var _i = 0; _i < _table_villages.snapshotLength; _i++ )
        {
            if (_table_villages.snapshotItem(_i).innerHTML.search('class="none3"') != -1) 
            {
                
                _table_villages.snapshotItem(_i).innerHTML.search(/\karte.php\?d=(\d+)/);
                var tmp_ID = RegExp.$1;
                var lista_aldeias = funcFindElem("//table[@id='vlist']//tbody//tr", XPList);        
                for (var n=0; n < lista_aldeias.snapshotLength; n++)
                {
                    if( funcxy2id(parseInt(lista_aldeias.snapshotItem(n).childNodes[2].textContent.split("|")[0].split("(")[1]), parseInt(lista_aldeias.snapshotItem(n).childNodes[2].textContent.split("|")[1].split(")")[0])) == tmp_ID)
                    {
                        lista_aldeias.snapshotItem(n).innerHTML.search(/\?newdid=(\d+)/);
                        capital_ID = RegExp.$1;    // newdID
                        break;
                    }    
                }
            }
        }
        funcCreateCookie("capital_ID", capital_ID);
    }
    
    function funcCapitalID(_verify)
    {
        var capital_ID = funcReadCookie("capital_ID");
        if (capital_ID == null || _verify == true) 
        {
            var lista_aldeias = funcFindElem("//table[@id='vlist']//tbody//tr", XPList);
            if (lista_aldeias != null)
            {
                ajaxRequest("spieler.php", "GET", null, funcGetCapitalID, funcDummy);
            }
            capital_ID = funcReadCookie("capital_ID");
        }
        return capital_ID;
               
    }

    function funcCalculateResourceTime(necesario)
    {
        var texto_restante = '';
        var tiempo_max = 0;
        var a = null;
        // Calcula y crea una cadena con lo que falta de cada recurso
        for (i = 0; i < 4; i++){
            restante = necesario[i] - actual_resources[i];
            if (restante > 0){
                if ((resources_per_sec[i] > 0) && (total_resources[i] >= necesario[i]))
                    texto_restante += '<img src="img/x.gif" class="r' + (i+1) + '" title="' + funcTranslate('RECURSO' + (i+1)) + '"><span id="TFBTimeOutAndRefresh' + i + '">' + restante.toLocaleString() + '</span> ';
                else
                    texto_restante += '<img src="img/x.gif" class="r' + (i+1) + '" title="' + funcTranslate('RECURSO' + (i+1)) + '">' + restante.toLocaleString() + ' ';
                var tiempo = Math.round(restante / resources_per_sec[i]);
                if (tiempo > tiempo_max) tiempo_max = tiempo;
                if (tiempo < 0) tiempo_max = 'Infinity';
                if (total_resources[i] - actual_resources[i] == 0) tiempo_max = 'Infinity';
                if (necesario[i] - total_resources[i] > 0) tiempo_max = 'Infinity';
            }
        }
        // Calcula y crea una cadena con el tiempo que falta hasta conseguir los recursos
        if (tiempo_max == 'Infinity')
        {
            a = funcTranslate('FALTA') + ' ' + texto_restante + ' <img class="clock" src="img/x.gif" title="' + funcTranslate('TIEMPO') + '"> ' + funcTranslate('NUNCA');
        }
        else if (tiempo_max > 0)
        {
           var tiempo2 = funcSeconds2Time(tiempo_max + 5); // Introduce un margen de 5 segundos para compensar la desviancion de los temporizadores de javascript
           var fecha = new Date();
           fecha.setTime(fecha.getTime() + (tiempo_max * 1000));
           a = '<font color=#666666>' + funcTranslate('FALTA') + ' ' + texto_restante + '<br> <img class="clock" src="img/x.gif" title="' + funcTranslate('TIEMPO') + '"> <span id="TFBTimeOutAndRefresh">' + tiempo2 + '</span><br/> ' + funcTranslate('LISTO') + ' ' + funcCalcularTextoTiempo(fecha);
        }
        return a;
    }
    
    function funcGetTablePosition()
    {
        var position = [0,0]; // [top, with]

        //Verify the existence of village list and how many villages / lines
        if (funcFindElem("//table[@id='vlist']//tbody//tr", XPList) != null) position[1] = funcFindElem("//table[@id='vlist']//tbody//tr", XPList).snapshotLength;
        //# of lines per cookie
        if (!location.href.match(/karte.php($|\?z=)/))
        {
            var _temp = funcReadCookieArray("Links").length;
            if (_temp > 0) position[1] += _temp + 2;
            _temp = funcReadCookieArray("AutoLinks").length;
            if (_temp > 0) position[1] += _temp + 2;
            var _temp = funcReadCookieArray("AutoProd").length;
            if (_temp > 0) position[1] += _temp + 2;
            position[1]++;
        }
        
        position[0] = 16;
        if (location.href.indexOf('dorf1') != -1)
        {
            var _temp = funcFindElem("//table[@id='movements']//tr", XPList).snapshotLength;
            _temp += funcFindElem("//table[@id='troops']//tr", XPList).snapshotLength;
            if ( _temp > 7 ) position[0] += _temp - 7;
        }
        // # of constrotions
        if ( funcFindElem("//table[@id='building_contract']//tr", XPList).snapshotLength > 0 ) position[0] += funcFindElem("//table[@id='building_contract']//tr", XPList).snapshotLength + 1;        
        //Left menu size
        if (position[0] < (funcFindElem("//div[@id='side_navi']//p", XPFirst).childNodes.length + 2)) position[0] = funcFindElem("//div[@id='side_navi']//p", XPFirst).childNodes.length + 2;

        if (position[0] >= position[1]) position[1] = 0;
        var pixelsPorLine = 20;
        position[0] = position[0]*pixelsPorLine + funcGetElemID('header').clientHeight + funcGetElemID('res').clientHeight + 40 + 'px';
        if (position[1] == 0) position[1] = '100%'; else position[1] = funcGetElemID('side_navi').clientWidth + funcGetElemID('content').clientWidth + 'px';
        return position;
        
    }

    // Realiza un resumen de la pagina de produccion
    function funcShowResourcesTable()
    {
        var capital_ID = funcCapitalID(false);
        var _fieldsonmaxlevel = true;
        var maxlvl = 10;
        if (selected_village_data[0] == capital_ID) maxlvl = 25;

        var field_array = new Array(4);
        for(i = 0; i < 4; i ++) {
            field_array[i] = new Array(26);
            for(j = 0; j <= 25; j++) {
                field_array[i][j] = new Array(2);
                field_array[i][j][0] = 0;
                field_array[i][j][1] = 0;
            }
        }
		// there are 12 types of villages ( only 6 for game servers < T3.5)
		var dist = [
			[3, 3, 0, 3, 3, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //9 crop
			[2, 3, 0, 2, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1],
			[0, 3, 0, 2, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //4-4-4-6
			[0, 3, 0, 1, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1],
			[0, 3, 0, 2, 0, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1],
			[3, 3, 0, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3], //15 crop
			[0, 3, 3, 0, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //4-4-3-7
			[2, 3, 3, 0, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //3-4-4-7
			[2, 3, 3, 0, 0, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //4-3-4-7
			[2, 3, 0, 1, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1], //3-5-4-6
			[2, 0, 0, 2, 0, 3, 3, 2, 2, 1, 1, 2, 0, 3, 3, 1, 3, 3], //4-3-5-6
			[0, 3, 0, 0, 1, 1, 2, 3, 3, 2, 2, 3, 3, 0, 3, 1, 0, 1]  //5-4-3-6
		];
        var village_type = parseInt(funcFindElem("//div[@id='village_map']", XPFirst).className.split('f')[1]);
        for (var i = 1; i <= 18; i++){
            var a = funcFindElem("//img[starts-with(@class, 'reslevel rf" + i + " level')]", XPFirst);
            if (a)
            {
                field_array[dist[village_type - 1][i - 1]][a.className.split(' level')[1]][0]++;
                field_array[dist[village_type - 1][i - 1]][a.className.split(' level')[1]][1]=i;
            }
            else
            {
                field_array[dist[village_type - 1][i - 1]][0][0]++;
                field_array[dist[village_type - 1][i - 1]][0][1]=i;
            }
        }
        
//        // Test AutoProd
//        var Ordem = new Array(4);
//        var rec = [0,1,2,3];
//        var run = 0;
//        var ww = new Array; var lvl = new Array;
//        var Alternativa = new Array(4);
//        
//        var ord = obtenerValorCookie("Ordem");
//        if (ord.length!=4){ord = new Array; ord = [3,3,3,1];}
//        for (var k = 0; k < 4; k++) { Ordem[k] = Math.round(produccion[k]*3600)/ord[k]; }
//        
//        for (var k = 0; k < 4; k++)
//        {
//            for (var l = Ordem.length - 1; l > k; l--)
//            {
//                if (Ordem[l] < Ordem[k])
//                {
//                    aux = Ordem[k];
//                    Ordem[k] = Ordem[l];
//                    Ordem[l] = aux;
//                    aux1 = rec[k];
//                    rec[k] = rec[l];
//                    rec[l] = aux1;
//                }
//            }
//        }
//        dia2 = (dayX + 1) * 86400;
//        dia3 = dayX * 86400;
//        // Calcular qual o menor tempo.  
//        var marcadores1 = obtenerValorCookie("AutoLinks");
//        var f = calMinArray (marcadores1, marcadores1.length, 2);
//        if (f != null) 
//        {
//            min = marcadores1[f][2];
//            if (min>dia2){var temp1 = cal_tempo('23:59:59');} 
//            else var temp1 = cal_tempo(marcadores1[f][0]);
//            if (min<dia3) {temp1=-100;}
//        }
//        else var temp1 = 100;
//        var marcadores = obtenerValorCookie("AutoProd");
//        var f = calMinArray (marcadores, marcadores.length, 3);
//        if (f != null) {
//            min1 = marcadores[f][3];
//            if (min1>dia2){var temp = cal_tempo('23:59:59');} 
//            else var temp = cal_tempo(marcadores[f][4]);
//            if (min1<dia3) {temp=-100;}}
//        else var temp1 = 100;
//        
//        var e = '0.0';
//        var Const = find("//div[@id='building_contract']//table[@class='f10']", XPFirst);
//        Campos=0;linha=0;Armazem=0;q=0;
//        if (Const)
//            for (var q = 0; q < Const.childNodes[1].childNodes.length - 1; q++)
//            {
//                Construcao = Const.childNodes[1].childNodes[q].childNodes[1].innerHTML.split(" ")[0];
//                var _const = decodeEntity(funcTranslate('TIPOCONST')).split(",");
//                if      (Construcao == _const[0]) {Campos  = 1; linha = q;}
//                else if (Construcao == _const[1]) {Campos  = 1; linha = q;}
//                else if (Construcao == _const[2]) {Campos  = 1; linha = q;}
//                else if (Construcao == _const[3]) {Campos  = 1; linha = q;}
//                else if (Construcao == _const[4]) {Armazem = 1;}
//                else if (Construcao == _const[5]) {Armazem = 1;}
//            }
//        var aldeia = find("//div[@id='vlist']//table[@class='vlist']//tr[@class='sel']//a", XPFirst);
//        var Naldeia = ' ';
//        if (aldeia) 
//            Naldeia = aldeia.innerHTML;
//        else
//            aldeia = location.href;
//        ver = total[0]-total[3];
//        if (f != null && q-Campos == 0) 
//        {
//            if (marcadores[f][5]== null) marcadores[f][5]= 0;
//            if ((marcadores[f][5]==1 || marcadores[f][5]==3) && Naldeia == marcadores[f][0])
//            {
//                making = 0;
//                for (var i = 0; i < marcadores1.length; i++) { if(marcadores1[i][3] == Naldeia){ making = 1; } }
//                tempos = somar_tempo(timeX,"00:02:00","0.0");
//                if (total[0]-80000 < 0 && ver <=0 && Armazem==0 && making == 0){ 
//                    if (total[0]==800) { bb=10; id= "&id=32"; } else { bb= " "; id="&gid=10"; } 
//                    agregarElementoCookie("AutoLinks", [tempos[0], "http://" + server + "/build.php?newdid=" + id_aldea1 + id, tempos[1], Naldeia, funcTranslate('ARMAZEM'), "00:10:00", bb]);
//                }
//                if (total[3]-80000 < 0 && ver >0 && Armazem==0 && making == 0){
//                    if (total[3]==800){ bb=11; id= "&id=28"; } else { bb= " "; id="&gid=11"; }
//                    agregarElementoCookie("AutoLinks", [tempos[0], "http://" + server + "/build.php?newdid=" + id_aldea1 + id, tempos[1], Naldeia, funcTranslate('CELEIRO'), "00:10:00", bb]);
//                }
//            }
//        }
//        // AutoProd end
        
        var table = document.createElement('TABLE');
        table.setAttribute("id", "resumen");
        table.setAttribute("class", "tbg");
        table.setAttribute("cellpadding", "0");
        table.setAttribute("cellspacing", "1");
        table.setAttribute("border", "0");
        
        var fila1 = document.createElement('TR');
        var fila2 = document.createElement('TR');
        table.appendChild(fila1);
        table.appendChild(fila2);
        for (var i = 0; i < 4; i++)
        {
            var td1 = funcElem('TD', '<img src="img/x.gif" class="r' + (i+1) + '" title="' + funcTranslate('RECURSO' + (i+1)) + '">');
            td1.setAttribute("width", "25%");
            td1.setAttribute("align", "center");
            
            fila1.appendChild(td1);
            var td2 = document.createElement('TD');
            td2.setAttribute("style", "vertical-align:top");
            
            fila2.appendChild(td2);
            var table2 = document.createElement('TABLE');
            table2.setAttribute("cellspacing", "0");
            table2.setAttribute("border", "0");
            
            td2.appendChild(table2);
            for (var j = 0; j < maxlvl; j++)
            {
                if (field_array[i][j][0] > 0 && buildingCost[i+1][j+1] != null)
                {
                    _fieldsonmaxlevel = false;
                    var fila3 = document.createElement('TR');
                    fila3.setAttribute("class", "none");

                    var imagen = '<div style="width: 0%;">'
                    var _left = 0;
                    if ( j > 9 ) _left = 5;
                    if ( i == 0 )
                        imagen += '<span style="color:blue; position:relative; top:39px; left:' + (32 - _left) + 'px;">' + j + '</span>';
                    else if ( i == 3 )
                        imagen += '<span style="color:blue; position:relative; top:39px; left:' + (31 - _left) + 'px;">' + j + '</span>';                    
                    else
                        imagen += '<span style="color:blue; position:relative; top:41px; left:' + (33 - _left) + 'px;">' + j + '</span>';
                    imagen += '<img src="' + local_Images["r" + i] + '" border="0" title="' + funcTranslate('RECURSO' + (i+1)) + '">';
                    imagen += '</div>';
                    var td = funcElem("TD", imagen);
                    fila3.appendChild(td);
                    var restante = funcCalculateResourceTime(buildingCost[i+1][j+1]);
                    var td3 = document.createElement('TD');
                    td3.setAttribute('class', 'c f7');
                    fila3.appendChild(td3);
                    table2.appendChild(fila3);
                    var recursos1= new Array;
                    //for (var z = 0; z < 4; z++){ if (actual_resources[z] - buildingCost[i+1][j+1][z]>0) recursos1[z] = '0'; else recursos1[z] = buildingCost[i+1][j+1][z]-actual_resources[z]; }
                    //if (ww[i]==null && j<maxlvl) ww[i]=recursos1; lvl[i]=j;
                    if (restante != null) 
                    {
                        td3.innerHTML = restante;
                    }
                    else
                    {
                        td3.innerHTML = '<a href="build.php?id=' + field_array[i][j][1] + '><b><font color=green>' + funcTranslate('SUBIR_NIVEL') + '</b></font>' + '</a>';
                       
//                        if (!Alternativa[i] &&  j<maxlvl) { Alternativa[i]= field_array[i][j][1]; }
//                        if (temp < temp1 && marcadores) 
//                        {
//                            if (( tipo == 6 || tipo == 1) && marcadores[f][5]!= 3)
//                            {
//                                if (rec[1]==3) { rec[1]=rec[0]; rec[0]=3; }
//                                if (rec[2]==3) { rec[2]=rec[1]; rec[1]=rec[0]; rec[0]=3; }
//                                if (rec[3]==3) { rec[3]=rec[2]; rec[2]=rec[1]; rec[1]=rec[0]; rec[0]=3; }
//                            }                       
//                            if ( i== rec[0] && run == 0 && temp < 0 && j<maxlvl)
//                            {
//                                if (marcadores[f][1] != location.href) 
//                                {
//                                    setTimeout(function() { document.location.href=marcadores[f][1]; } , (1000));
//                                    return;
//                                }
//                                run++;
//                                add='00:00:00';
//                                if (Campos == 1)
//                                {
//                                    addd = Const.childNodes[1].childNodes[linha].childNodes[2].textContent.split(" ")[0];
//                                    add = addd.split(':')[0]+':'+addd.split(':')[1]+':59';
//                                    var tempos = somar_tempo(timeX, add, e);
//                                }
//                                // Apagar Cookie
//                                var KK = readCookie("AutoProd");
//                                if (KK != null)
//                                {
//                                    KK = KK.split("$$");KK.splice(f, 1);
//                                    createCookie("AutoProd", KK.join("$$"), 365);
//                                }
//                                // Criar Cookie
//                                link= 'build.php?newdid=' + Aldeia_Sel[0] + '&id=' + field_array[i][j][1];
//                                if (add=='00:00:00') 
//                                {
//                                    agregarElementoCookie("AutoProd", [marcadores[f][0], marcadores[f][1], link, marcadores[f][3], marcadores[f][4], marcadores[f][5],marcadores[f][6],marcadores[f][7]]);
//                                    setTimeout(function() { document.location.href=link; } , (1000));
//                                }
//                                else 
//                                {
//                                    agregarElementoCookie("AutoProd", [marcadores[f][0], marcadores[f][1], link, tempos[1], tempos[0], marcadores[f][5],marcadores[f][6],marcadores[f][7]]);
//                                    setTimeout(function() { document.location.reload() } , (1000));
//                                }
//                            }
//                        }
                    }
                }
            }
        }
//        if (run==0 && temp<0 && temp < temp1 && marcadores)
//        {
//            if (marcadores[f][1] != location.href)
//            {
//                setTimeout(function() { document.location.href=marcadores[f][1]; } , (1000));
//                return;
//            }
//            var zz = null;
//            for (var h = 0; h < 4; h++)
//            {
//                z=rec[h];
//                if (Alternativa[z] && run==0)
//                {
//                    run++; zz=z;
//                }
//            }
//            var soma_tempo_merc = false;
//            if (zz!=null) {add='00:00:00'; link= 'build.php?newdid=' + Aldeia_Sel[0] + '&id=' + Alternativa[zz]; }
//            else {
//                link = '-';run==0;add='00:05:00';
//                for (var h = 0; h < 4; h++){z=rec[h]; if (ww[z]!=null && run==0) {zz=z; run++;}}
//                if (Naldeia != " "){
//                    //var tmp = find('//table[@class="vlist"]//tr[@class="sel"]//td[@class="x"]', XPFirst).innerHTML + "|" + find('//table[@class="vlist"]//tr[@class="sel"]//td[@class="y"]', XPFirst).innerHTML;
//                    var tmp = find('//table[@class="vlist"]//tr[@class="sel"]', XPFirst).textContent.split("(")[1].split(")")[0];
//                    coordenadas = tmp.split('|');
//                    tempos = somar_tempo(timeX,"00:00:05","0.0");
//                    gg=marcadores[f][6];
//                    cc=marcadores[f][7];
//                    values2 = new Array;
//                    if (gg!=0){
//                        var merc = obtenerValorCookie("Multimerc");
//                        block=0;                        
//                        for (var dd = 0; dd < merc.length; dd++) if (merc[dd][4] == coordenadas[0] && merc[dd][5] == coordenadas[1]) block=1;
//                        if (block==0 && zz!=null){
//                            if (lvl[zz]<9) {for (var rr = 0; rr < 4; rr++){ww[zz][rr] = total[rr]*0.9-actual_resources[rr]; if (ww[zz][rr]<0) ww[zz][rr]= 1;}}
//                            if (lvl[zz]>8) {for (var rr = 0; rr < 4; rr++){ww[zz][rr] = total[rr]*0.5-actual_resources[rr]; if (ww[zz][rr]<0) ww[zz][rr]= 1;}}
//                            values2 = [ww[zz][0], ww[zz][1], ww[zz][2], ww[zz][3], coordenadas[0], coordenadas[1], 2, gg, tempos[0], tempos[1], cc];
//                            agregarElementoCookie("Multimerc", values2);
//                            soma_tempo_merc = true;
//                        }
//                    }
//                }
//            }
//            if ( soma_tempo_merc == true ) { add = cc.replace(".", ":") + ":59"; }
//            else if (Campos == 1){ add = Const.childNodes[1].childNodes[linha].childNodes[1].textContent.split(" ")[0]; }
//            var tempos = somar_tempo(timeX, add, e);
//            
//            // Apagar Cookie
//            var KK = readCookie("AutoProd");
//            if (KK != null){KK = KK.split("$$");KK.splice(f, 1); createCookie("AutoProd", KK.join("$$"), 365); }
//            // Criar Cookie
//            agregarElementoCookie("AutoProd", [marcadores[f][0] , marcadores[f][1], link, tempos[1], tempos[0], marcadores[f][5],marcadores[f][6],marcadores[f][7]]);
//            if (link != '-') setTimeout(function() { document.location.href=link; } , (1000));
//            else setTimeout(function() { document.location.reload() } , (1000));
//        }
        if (_fieldsonmaxlevel == false)
        {
            var pixel=funcGetTablePosition();
            table.style.position = 'absolute';
            table.style.width = pixel[1];
            table.style.top = pixel[0];
            document.body.appendChild(table);
            funcRemoveElem(funcGetElemID("footer"));
        }
    }

    function funcShowBuildingsTable()
    {
        var edificiosPorFila = funcReadCookie("edificiosPorFila");
        if (edificiosPorFila == null || edificiosPorFila == 0) 
        {
            edificiosPorFila = prompt(funchtml2ascii(funcTranslate('EDIFICIOSF')));
            funcCreateCookie("edificiosPorFila", edificiosPorFila);
        }
        var _showtable = false;
        var buildingsData = new Array(); // [Descs, Links, Images, Level, gID];
        var _tmp1 = funcFindElem('//map[@id="map2"]/area/@title', XPList);
        var _tmp2 = funcFindElem('//map[@id="map2"]/area/@href', XPList);
        var _tmp3 = funcFindElem('//div[@id="village_map"]/img/@class', XPList);
        for ( var i = 0; i < _tmp3.snapshotLength - 1; i++ )
        {
            buildingsData[i] = new Array();
            buildingsData[i][0] = _tmp1.snapshotItem(i).textContent;
            buildingsData[i][1] = _tmp2.snapshotItem(i).textContent;
            buildingsData[i][2] = _tmp3.snapshotItem(i).textContent;
            buildingsData[i][3] = 0;
            buildingsData[i][4] = 0;
            
        }
		switch (user_Tribe) 
		{
			case 0: buildingsData[buildingsData.length - 1][2] = "user tribe g31"; break;
			case 10: buildingsData[buildingsData.length - 1][2] = "user tribe g32"; break;
			case 20: buildingsData[buildingsData.length - 1][2] = "user tribe g33"; break;
		}        
        var table = document.createElement('TABLE');
        table.setAttribute("id", "resumen");
        table.setAttribute("class", "tbg");
        table.setAttribute("cellpadding", "0");
        table.setAttribute("cellspacing", "1");
        table.setAttribute("border", "0");        
        var j = 0;
        for(var i = 0; i < buildingsData.length; i++) 
        {
            if(buildingsData[i][2].split(" ")[2] != 'iso')
            {
                
                // Por cada edificio se recoge su nivel y su codigo en el juego
                buildingsData[i][3] = parseInt(buildingsData[i][0].split(" ")[buildingsData[i][0].split(" ").length - 1]);
                
                if ( isNaN(buildingsData[i][3]) ) buildingsData[i][3] = 0;
                buildingsData[i][4] = parseInt(buildingsData[i][2].split(" g")[1]);
                
                if (buildingCost[buildingsData[i][4]] != null && buildingCost[buildingsData[i][4]][ buildingsData[i][3] + 1 ] != null)
                {
                    if (j % edificiosPorFila == 0)
                    {
                        var fila = document.createElement('TR');
                        table.appendChild(fila);
                    }
                    j++; _showtable = 1;

                    if      (buildingsData[i][4] == 31) buildingsData[i][2] = local_Images["muralla"];
                    else if (buildingsData[i][4] == 32) buildingsData[i][2] = local_Images["empalizada"];
                    else if (buildingsData[i][4] == 33) buildingsData[i][2] = local_Images["terraplen"];

                    var td = document.createElement("TD");
                    fila.appendChild(td);

                    var table2 = document.createElement('TABLE');
                    table2.setAttribute("cellspacing", "0");
                    table2.setAttribute("border", "0");
                    td.appendChild(table2);

                    var fila2 = document.createElement('TR');
                    table2.appendChild(fila2);

                    var td2 = document.createElement("TD");
                    td2.setAttribute('class', 'f10');
                    if ( buildingsData[i][4] == 31 || buildingsData[i][4] == 32 || buildingsData[i][4] == 33 )
                        td2.innerHTML = '<a href="' + buildingsData[i][1] + '">' + buildingsData[i][0] + '<br/><img src="' + buildingsData[i][2]  + '" border="0"></a>';
                    else
                        td2.innerHTML = '<a href="' + buildingsData[i][1] + '">' + buildingsData[i][0] + '<br/><img src="img/x.gif" class="' + buildingsData[i][2]  + '" border="0"></a>';
                    fila2.appendChild(td2);

                    var fila3 = document.createElement('TR');
                    table2.appendChild(fila3);
                    var restante = funcCalculateResourceTime(buildingCost[buildingsData[i][4]][buildingsData[i][3]+1]);
                    var td3 = document.createElement("TD");
                    td3.setAttribute('class', 'c f7');
                    fila3.appendChild(td3);
                    if (restante != null) td3.innerHTML = restante;
                    else td3.innerHTML = '<b><font color=green>' + funcTranslate('SUBIR_NIVEL') + '</b></font>';
                }
            }
        }
        if (_showtable == true)
        {
            while (j % edificiosPorFila != 0) { j++; fila.appendChild(document.createElement("TD")); }
            pixel=funcGetTablePosition();
            table.style.width = pixel[1];
            funcGetElemID("footer").insertBefore(table, funcGetElemID("mfoot"));
        }        
        
    }

    function funcBlinkMap(ev)
    {
        var marker=funcGetElemID('mapmarker');
        var tar=ev.target
        for(var i=0;i<5;i++)
        {
            if(tar.nodeName!='TR')
            {
                tar=tar.parentNode;
            }
            else 
                break;
        }
        funcMoveElement(funcGetElemID('mapmarker'), funcGetElemID(tar.getAttribute('mt')));
        marker.style.display='';
    }

    function funcWait2ShowMapTable()
    {
        if (funcGetElemID('tabla_mapa')) funcRemoveElem(funcGetElemID('tabla_mapa'));
        setTimeout(funcShowMapTable, 500);
    }
    function funcShowMapTable()
    {
        var table = document.createElement('TABLE');
        table.setAttribute("id", "tabla_mapa");
        table.setAttribute("sortCol", -1);
        table.setAttribute("align", "center");
        table.setAttribute("cellspacing", "1");
        table.setAttribute("cellpadding", "0");
        table.setAttribute("border", "0");        
        
        var thead = document.createElement("THEAD"); 
        var tbody = document.createElement("TBODY"); 
        var fila = document.createElement('TR');
        var etiquetas_tabla = ['JUGADOR', 'ALIANZA', 'NALDEA', 'HAB', 'MAT_PRIMAS' , 'COORD', 'ACCION'];
        for (var i = 0; i < 7; i++){
            var td = funcElem('TD', funcTranslate(etiquetas_tabla[i]));
            if (i < 5)
            {
                if ( i == 3 ) td.addEventListener("click", funcSortTable('tabla_mapa', i, 'int'), 0);
                else td.addEventListener("click", funcSortTable('tabla_mapa', i), 0); 
                td.style.cursor = "pointer";
            }
            fila.appendChild(td);
        }
        thead.appendChild(fila); 
        table.appendChild(thead);
        
        var area;
        var f_id_aldea = 0;
        var _village_type = 
        [
            [0],
            [3,3,3,9 ],
            [3,4,5,6 ],
            [4,4,4,6 ],
            [4,5,3,6 ],
            [5,3,4,6 ],
            [1,1,1,15],
            [4,4,3,7 ],
            [3,4,4,7 ],
            [4,3,4,7 ],
            [3,5,6,6 ],
            [4,3,5,6 ],
            [5,4,3,6 ]
        ];
        for(var i = 6; i > -1; i--)
        { 
            for(var j = 0; j < 7; j++) 
            {
                f_id_aldea++;
                area = funcGetElemID('a_'+j+'_'+i).wrappedJSObject;
                var cellinfo=area.details;
                var inforow = document.createElement('TR');
                inforow.setAttribute("align", "center");
                var href=area.href;                
                if (cellinfo && cellinfo.name !=null ) 
                { 
                    inforow.appendChild(funcElem('TD', '<center><font color="blue"><b>' + cellinfo.name + '</b></font></center>'));
                    inforow.appendChild(funcElem('TD', '<center>' + cellinfo.ally + '</center>'));
                    inforow.appendChild(funcElem('TD', '<center><a href="' + href + '">' + cellinfo.dname + '</a></center>'));
                    inforow.appendChild(funcElem('TD', '<center>' + cellinfo.ew + '</center>'));
                }
                else
                {
                    inforow.appendChild(funcElem('TD', '<center>-<center>'));
                    inforow.appendChild(funcElem('TD', '<center>-<center>'));
                    inforow.appendChild(funcElem('TD', '<center>-<center>'));
                    inforow.appendChild(funcElem('TD', '<center>-<center>'));
                }
                if ( href != '' )
                {
                    var _info = '';
                    if (cellinfo.nr == 0)
                    {
                        switch(cellinfo.typ)
                        {
                            case  1:  
                            case  2: _info = '+25% <img src="img/x.gif" class="r1" width="18" height="12" border="0" title="' + funcTranslate('RECURSO1') + '">'; break;
                            case  3: _info = '+25% <img src="img/x.gif" class="r1" width="18" height="12" border="0" title="' + funcTranslate('RECURSO1') + '"> +25% <img src="img/x.gif" class="r4" width="18" height="12" border="0" title="' + funcTranslate('RECURSO4') + '">'; break;
                            case  4: 
                            case  5: _info = '+25% <img src="img/x.gif" class="r2" width="18" height="12" border="0" title="' + funcTranslate('RECURSO2') + '">'; break;
                            case  6: _info = '+25% <img src="img/x.gif" class="r2" width="18" height="12" border="0" title="' + funcTranslate('RECURSO2') + '"> +25% <img src="img/x.gif" class="r4" width="18" height="12" border="0" title="' + funcTranslate('RECURSO4') + '">'; break;
                            case  7: 
                            case  8: _info = '+25% <img src="img/x.gif" class="r3" width="18" height="12" border="0" title="' + funcTranslate('RECURSO3') + '">'; break;
                            case  9: _info = '+25% <img src="img/x.gif" class="r3" width="18" height="12" border="0" title="' + funcTranslate('RECURSO3') + '"> +25% <img src="img/x.gif" class="r4" width="18" height="12" border="0" title="' + funcTranslate('RECURSO4') + '">'; break;
                            case 10: 
                            case 11: _info = '+25% <img src="img/x.gif" class="r4" width="18" height="12" border="0" title="' + funcTranslate('RECURSO4') + '">'; break;
                            case 12: _info = '+50% <img src="img/x.gif" class="r4" width="18" height="12" border="0" title="' + funcTranslate('RECURSO4') + '">'; break;
                            default: _info = '????';
                        };
                    }
                    else
                    {
                        for (var n = 0; n < 4; n++)
                        {
                            _info += _village_type[cellinfo.nr][n] + '<img src="img/x.gif" class="r' + (n+1) + '" title="' + funcTranslate('RECURSO' + (n+1)) + '">';
                            if (n < 3) _info += ',&nbsp;';
                        }
                    }
                    inforow.appendChild(funcElem('TD', '<center>' + _info + '</center>'));
                    inforow.appendChild(funcElem('TD', '<center><a href="' + href + '">' + cellinfo.x + " , " + cellinfo.y + '</a></center>'));
                    inforow.appendChild(funcElem('TD', '<center><a href="' + href.replace("karte.php?d", "a2b.php?z") + '"><img class="att1" src="img/x.gif" title="' + funcTranslate('ATACAR') + '" alt="' + funcTranslate('ATACAR') + '"></a> / <a href="' + href.replace("karte.php?d", "build.php?z") + '&gid=17"><img class="r4" src="img/x.gif" title="' + funcTranslate('ENVIAR') + '"></a></center>'));
                }
                else
                {
                    inforow.appendChild(funcElem('TD', '<center>-</center>'));
                    inforow.appendChild(funcElem('TD', '<center>-</center>'));
                    inforow.appendChild(funcElem('TD', '<center>-</center>'));
                }
                inforow.addEventListener('click',funcBlinkMap,false);
                inforow.style.cursor = "pointer";
                inforow.setAttribute('mt', 'i_' + j + '_' + i);
                tbody.appendChild(inforow);
                

            }
        }
        table.style.position = 'absolute';
        table.style.width = "680px";
        table.style.top = "530px";
        table.style.left = "2px";
        table.appendChild(tbody);
        funcFindElem('//div[@id="map_content"]',XPFirst).appendChild(funcElem('div','<img id="mapmarker" class="mt1" src="' + local_Images["imgmarker"] + '" style="z-index: 100; color: RGB(249, 201, 16); display: none">'));
        document.body.appendChild(table);
        funcRemoveElem(funcGetElemID("footer"));
    }

    function funcDistribuiRecursosMercado()
    {
        return function()
        {
            var maximo = unsafeWindow.carry * unsafeWindow.haendler;
            var por_cada = parseInt(maximo / 3);
            var madeira = por_cada;
            var barro = por_cada;
            var ferro = por_cada;
            if (madeira > actual_resources[0]) madeira = res[0];
            if (barro > actual_resources[1]) barro = actual_resources[1];
            if (ferro > actual_resources[2]) ferro = actual_resources[2];
            
            var sobra = maximo - madeira - barro - ferro;
            if (sobra > 0) 
            {
                var sobra_ferro = actual_resources[2] - ferro;
                if (sobra_ferro > 0)
                {
                    if (sobra_ferro > sobra)
                    {
                        ferro += sobra;
                        sobra = 0;
                    }
                    else
                    {
                        ferro += sobra_ferro;
                        sobra -= sobra_ferro;
                    }
                }
            }
            if (sobra > 0) 
            {
                var sobra_barro = actual_resources[1] - barro;
                if (sobra_barro > 0)
                {
                    if (sobra_barro > sobra)
                    {
                        barro += sobra;
                        sobra = 0;
                    }
                    else
                    {
                        barro += sobra_barro;
                        sobra -= sobra_barro;
                    }
                }
            }
            if (sobra > 0) 
            {
                var sobra_madeira = actual_resources[0] - madeira;
                if (sobra_madeira > 0){
                    if (sobra_madeira > sobra)
                    {
                        madeira += sobra;
                        sobra = 0;
                    }
                    else
                    {
                        madeira += sobra_madeira;
                        sobra -= sobra_madeira;
                    }
                }
            }
            funcGetElemTag('input')[1].value = madeira;
            funcGetElemTag('input')[2].value = barro;
            funcGetElemTag('input')[3].value = ferro;
        }
    }

    function funcCrearEventoRecursosMercado(recurso, cantidad)
    {
        return function()
        {
            var _input_value = funcGetElemID('r' + parseInt(recurso + 1));
            if (_input_value.value == '') var suma = 0; else var suma = parseInt(_input_value.value);
            suma += cantidad;
            if (suma > actual_resources[recurso]) suma = actual_resources[recurso];
            var max_capacidad = parseInt(funcFindElem("//p//b", XPFirst).innerHTML);
            var max_comercian = parseInt(funcFindElem("//table[@id='send_select']", XPFirst).innerHTML.split(' ')[1].split('/')[0]);
            var max_transport = max_capacidad * max_comercian;
            if (suma > max_transport) suma = max_transport;
            _input_value.value = suma;
            
        }
    }

    function funcRecursosMercado()
    {
        if (funcFindElem("//input[@type='text']", XPList).snapshotLength != 7) return;
        var max_capacidad = unsafeWindow.carry;
        var cantidades = [250, 500, 1000];
        var repetido = false;
        for (var i = 0; i < cantidades.length; i++) if (max_capacidad == cantidades[i]){ repetido = true; break; }
        if (!repetido) cantidades = [500, 1000, max_capacidad];
        var tabela_envia_recursos = funcFindElem("//table[@id='send_select']", XPFirst);
        var k = 0;
        var tabela_envia_recursos_child = tabela_envia_recursos.childNodes[tabela_envia_recursos.childNodes.length == 2 ? 1 : 0].childNodes;
        for (var i = 0; i < tabela_envia_recursos_child.length; tabela_envia_recursos_child.length == 8 ? i += 2 : i++)
        {
            tabela_envia_recursos_child[i].removeChild(tabela_envia_recursos_child[i].childNodes[tabela_envia_recursos_child[i].childNodes.length > 4 ? 7 : 5]);
            for(var j = 0; j < cantidades.length; j++)
            {
                var enlace = document.createElement('TD');
                enlace.setAttribute("class", "max");
                enlace.href = "javascript:void(0)";
                enlace.innerHTML = '<a href="#">(' + cantidades[j] + ')</a>';
                enlace.addEventListener('click', funcCrearEventoRecursosMercado(k, cantidades[j]), false);
                tabela_envia_recursos_child[i].appendChild(enlace);
            }
            k++;
        }
        var td = document.createElement('TD');
        td.setAttribute("colspan", "7");
        var enlace = document.createElement('A');
        enlace.href = "javascript:void(0)";
        enlace.innerHTML = funcTranslate('DISTREC');
        enlace.addEventListener('click', funcDistribuiRecursosMercado(), false);
        td.appendChild(enlace);
        tabela_envia_recursos.appendChild(td);
        
        if (location.href.match("&F=dist"))
        {
            var maximo = unsafeWindow.carry * unsafeWindow.haendler;
            var por_cada = parseInt(maximo / 3);
            var madeira = por_cada;
            var barro = por_cada;
            var ferro = por_cada;
            if (madeira > actual_resources[0]) madeira = actual_resources[0];
            if (barro > actual_resources[1]) barro = actual_resources[1];
            if (ferro > actual_resources[2]) ferro = actual_resources[2];
            var sobra = maximo - madeira - barro - ferro;
            if (sobra > 0) {
                var sobra_ferro = actual_resources[2] - ferro;
                if (sobra_ferro > 0){ if (sobra_ferro > sobra){ ferro += sobra; sobra = 0; } else { ferro += sobra_ferro; sobra -= sobra_ferro; }}
            }
            if (sobra > 0) {
                var sobra_barro = actual_resources[1] - barro;
                if (sobra_barro > 0){ if (sobra_barro > sobra) { barro += sobra; sobra = 0; } else{ barro += sobra_barro; sobra -= sobra_barro; }}
            }
            if (sobra > 0) {
                var sobra_madeira = actual_resources[0] - madeira;
                if (sobra_madeira > 0){ if (sobra_madeira > sobra) { madeira += sobra; sobra = 0; } else{ madeira += sobra_madeira; sobra -= sobra_madeira; }}
            }
            funcGetElemTag('input')[1].value = madeira;
            funcGetElemTag('input')[2].value = barro;
            funcGetElemTag('input')[3].value = ferro;
            funcGetElemName('s1')[0].click();
            return;
        }
        else if (location.href.match("&F=palha")) {
            var maximo = unsafeWindow.carry * unsafeWindow.haendler;
            if (actual_resources[3] > maximo){ funcGetElemTag('input')[4].value = maximo; } else { funcGetElemTag('input')[4].value = actual_resources[3]; }
            funcGetElemName('s1')[0].click();
            return;
        };        
//        //automercadores
//        if (Aldeia_Sel[1] != ' '){
//            var tr = document.createElement("TR");
//            var td1 = elem("TD", "<b>" + funcTranslate('ENVIARQV') + "</b> " + '<input name="multi" value="1" size="1" maxlength="3" style="text-align: center;" class="multi">');
//            td1.setAttribute("colspan", "50");
//            tr.appendChild(td1);
//            tabela_envia_recursos.appendChild(tr);
//            var tr2 = document.createElement("TR");
//            var td2 = elem("TD", "<b>" + funcTranslate('ENTREENVIOS') + "?</b> " + '<input name="timex" value="01.00" size="2" maxlength="5" class="timex" title="(hh.mm)">');
//            td2.setAttribute("colspan", "50");
//            tr2.appendChild(td2);
//            tabela_envia_recursos.appendChild(tr2);
//            var dd = find("//input[@type='image' and @name='s1']", XPFirst);
//            dd.addEventListener("click", function()
//            { 
//                var param = ["r1", "r2", "r3", "r4", "x", "y", "multi"];
//                var values = new Array();
//                for(var i = 0; i < param.length; i++) {eval("values[" + i + "] = find(\"//*[@name='" + param[i] + "']\", XPFirst).value");if (!values[i]) values[i]= null;}
//                values[param.length] = Aldeia_Sel[0];
//                velocidade = speedx*32 + 16;
//                speed = parseInt(Math.pow(Math.pow((values[4]-Aldeia_Sel[2]), 2)+Math.pow((values[5]-Aldeia_Sel[3]), 2),0.5)*3600/velocidade*2);
//                add='00:02:00';
//                speed1= parseInt(speed/3600);
//                speed2 = parseInt((speed-speed1*3600)/60);
//                speed3 = speed1 + "." + speed2;
//                if (find("//*[@name='timex']", XPFirst).value != "") speed3 = find("//*[@name='timex']", XPFirst).value;
//                tempos = somar_tempo(timeX,add,speed3);
//                values[param.length+1]=tempos[0];
//                values[param.length+2]=tempos[1];
//                values[param.length+3]=speed3;
//                if (values[6] > 1) agregarElementoCookie("Multimerc", values);
//            }, 0);

            if (funcFindElem("//table[@class='traders']", XPList).snapshotLength > 0 )
            {
                var _rescursos = [0,0,0,0,0];
                var _tabela = funcFindElem("//table[@class='traders']", XPList);
                var _td_tempo;
                var _recursos;
                for (_n = 0; _n < _tabela.snapshotLength; _n++)
                {
                    if ( _tabela.snapshotItem(_n).rows[0].cells[1].textContent.indexOf(funcTranslate('TOTALMERCHEG?')) == 0 )
                    {
                        for (_i = 0; _i < 4; _i++ ) _rescursos[_i] += Number(_tabela.snapshotItem(_n).rows[2].cells[1].textContent.split(' | ')[_i]);
                        _td_tempo = _tabela.snapshotItem(_n).rows[1];
                        _recursos = _tabela.snapshotItem(_n).rows[2].cells[0].textContent;
                    }
                }
                _rescursos[4] = _rescursos[0] + _rescursos[1] + _rescursos[2] + _rescursos[3];
                if ( _rescursos[4] > 0 )
                {
                    var tabela_total_mercadorias = document.createElement("TABLE");
                    tabela_total_mercadorias.setAttribute("id", "Mercadorias_a_chegar");
                    tabela_total_mercadorias.setAttribute("cellpadding", "1");
                    tabela_total_mercadorias.setAttribute("cellspacing", "1");
                    tabela_total_mercadorias.setAttribute("class", "traders");
                    var _thead = document.createElement("thead");
                    var tr = document.createElement("TR");
                    var td_header = document.createElement("TD");
                    td_header.setAttribute("colspan", "3");
                    td_header.innerHTML = "<b>" + funcTranslate('TOTALMERCHEG') + "</b>";
                    tr.appendChild(td_header);
                    _thead.appendChild(tr);
                    tabela_total_mercadorias.appendChild(_thead);
                    var _tbody = document.createElement("tbody");
                    tr = document.createElement("TR");                    
                    var _th = document.createElement("TH");
                    _th.innerHTML = _td_tempo.cells[0].innerHTML;
                    tr.appendChild(_th);
                    var td = document.createElement("TD");
                    var _div = document.createElement("DIV");
                    _div.setAttribute("class", "in");
                    var sp = document.createElement("span");
                    sp.setAttribute("id","TFBTimeOutAndRefresh");
                    sp.textContent = _td_tempo.cells[1].childNodes[1].textContent.split(" ")[0];
                    _div.appendChild(sp);
                    _div.innerHTML += " " + _td_tempo.cells[1].childNodes[1].textContent.split(" ")[1];
                    td.appendChild(_div);
                    _div = document.createElement("DIV");
                    _div.setAttribute("class", "at");
                    _div.innerHTML = _td_tempo.cells[1].childNodes[3].textContent
                    tr.appendChild(td);
                    td.appendChild(_div);
                    _tbody.appendChild(tr);                    
                    tabela_total_mercadorias.appendChild(_tbody);  
                    tr = document.createElement("TR");
                    tr.setAttribute("class", "res");
                    _th = document.createElement("TH");
                    _th.innerHTML = _recursos;
                    tr.appendChild(_th);
                    td = document.createElement("TD");
                    td.setAttribute("colspan", "2");
                    sp = document.createElement("span");
                    sp.setAttribute("class","f10");
                    var _alert = false;
                    for ( var _n = 0; _n < 4; _n++ )
                    {
                        sp.innerHTML += '<img class="r' + (_n + 1) + '" src="img/x.gif" title="' + funcTranslate('RECURSO' + (_n + 1)) + '">';
                        if ( Number(actual_resources[_n]) + Number(_rescursos[_n]) > Number(total_resources[_n])) sp.innerHTML += '<font color="red"> ' +  _rescursos[_n].toLocaleString() + '</font>'
                        else sp.innerHTML += '<font color="navy"> ' +  _rescursos[_n].toLocaleString() + '</font>';
                        if ( _n < 3 ) sp.innerHTML += " + ";
                    }
                    if ( _alert )
                    {
                        td_header.innerHTML += ' = <b><font color="red">' + _rescursos[4].toLocaleString() + '</b></font>';
                    }
                    else
                    {
                        td_header.innerHTML += ' = <b><font color="navy">' + _rescursos[4].toLocaleString() + '</b></font>';
                    }
                    td.appendChild(sp);
                    tr.appendChild(td);
                    tabela_total_mercadorias.appendChild(tr);
                    funcFindElem("//table[@class='traders']", XPFirst).parentNode.insertBefore(tabela_total_mercadorias, funcFindElem("//table[@class='traders']", XPFirst));
                }
            }
//        }
//        // automercadores info
//        var a = find("//form[@name='snd']", XPFirst);
//        var ventas = obtenerValorCookie("Multimerc");
//        if (ventas.length > 0){
//            var tabla = document.createElement("TABLE");
//            tabla.setAttribute("id", "Merc");
//            tabla.setAttribute("class", "tbg");
//            tabla.setAttribute("align", "center");
//            tabla.setAttribute("cellspacing", "1");
//            tabla.setAttribute("cellpadding", "2");
//            var tr = document.createElement("TR");
//            tr.setAttribute("class", "rbg");    
//            var columnas = ['#' , funcTranslate('RECURSO1'), funcTranslate('RECURSO2'), funcTranslate('RECURSO3'), funcTranslate('RECURSO4'), funcTranslate('ORIGEM'), funcTranslate('DESTINO'), funcTranslate('HORA') , funcTranslate('TIEMPO'), ''];
//            for (var i = 0; i < columnas.length; i++) tr.appendChild(elem("TD", columnas[i]));
//            tabla.appendChild(tr);
//
//            for (var i = 0; i < ventas.length; i++){
//                var tr = document.createElement("TR");
//                td = elem("TD", ventas[i][6]); tr.appendChild(td);
//                td = elem("TD", ventas[i][0]); tr.appendChild(td);
//                td = elem("TD", ventas[i][1]); tr.appendChild(td);
//                td = elem("TD", ventas[i][2]); tr.appendChild(td);
//                td = elem("TD", ventas[i][3]); tr.appendChild(td);
//                var Name = find("//a[contains(@href, '" + ventas[i][7] + "')]", XPFirst);
//                td = elem("TD", Name.innerHTML); tr.appendChild(td);
//                td = elem("TD", ventas[i][4] + '|' + ventas[i][5]); tr.appendChild(td);
//                td = elem("TD", ventas[i][8]); tr.appendChild(td);
//                td = elem("TD", ventas[i][10]); tr.appendChild(td);
//                tabla.appendChild(tr);
//                var enlace = elem("A", " <img class='del' src='img/x.gif' title='" + funcTranslate('ELIMINAR') + "'>");
//                enlace.href = "javascript:void(0);";
//                enlace.addEventListener("click", crearEventoEliminarCookie("Multimerc", i, recursosMercado), 0);
//                var td = document.createElement("TD");
//                td.appendChild(enlace);
//                tr.appendChild(td);;
//            }
//            insertAfter(a, tabla);
//        }
    }

    function funcGetUserTribe(_xmlHttpRequest)
    {
        if     (_xmlHttpRequest.responseText.indexOf('img class="unit u1" src="img/x.gif"') > -1)  user_Tribe = 0;
        else if(_xmlHttpRequest.responseText.indexOf('img class="unit u11" src="img/x.gif"') > -1) user_Tribe = 10;
        else if(_xmlHttpRequest.responseText.indexOf('img class="unit u21" src="img/x.gif"') > -1) user_Tribe = 20;
        funcCreateCookie("user_tribe", user_Tribe);
    }
    
    function funcPC2villages(puntos)
    {
        if (speedx) return Math.round(Math.pow((puntos / 100) / 5.45, 1 / 2.2899));
        else return Math.round(Math.pow((puntos / 1000) / 1.6, 1 / 2.3));
    }
    
    function funcVillages2PC(aldeas)
    {
        if (speedx) return Math.round(5.45 * Math.pow(aldeas, 2.2899)) * 100; else return Math.round(1.6 * Math.pow(aldeas, 2.3)) * 1000;
    }
    
    function funcCulturePointsTable()
    {
        var main_page_bold = funcFindElem("//div[@id='build']//b", XPList);
        var pc_prod_total = parseInt(main_page_bold.snapshotItem(1).innerHTML);
        var pc_actual = parseInt(main_page_bold.snapshotItem(2).innerHTML);
        var pc_aldea_prox = parseInt(main_page_bold.snapshotItem(3).innerHTML);
        
        var aldeas_actuales = funcPC2villages(pc_aldea_prox);
        var aldeas_posibles = funcPC2villages(pc_actual);
        
        var texto = '<table align="center" cellspacing="1" cellpadding="2"><THEAD><td>' + funcTranslate('NALDEA') + '</td><td>' + funcTranslate('PC') + "</td></THEAD>";
        texto += '<tr><td style="text-align:center;">' + (aldeas_actuales + 1) + '</td><td style="text-align:center;">';
        if (pc_aldea_prox < pc_actual)
        {
            texto += funcTranslate('FUNDAR');
        }
        else
        {
            var tiempo = ((pc_aldea_prox - pc_actual) / pc_prod_total) * 86400;
            var fecha = new Date();
            fecha.setTime(fecha.getTime() + (tiempo * 1000));
            var texto_tiempo = funcCalcularTextoTiempo(fecha);
            texto += funcTranslate('FALTA') + ' <b>' + (pc_aldea_prox - pc_actual) + '</b> ' + funcTranslate('PC') +'<br/>';
            texto += funcTranslate('LISTO') + " " + texto_tiempo;
        }
        texto += '</td></tr>';
        for (var i = 1; i < 5; i++)
        {
            texto += '<tr><td style="text-align:center;">' + (aldeas_actuales + i + 1) + '</td><td style="text-align:center;">';
            var pc_necesarios = funcVillages2PC(aldeas_actuales + i);
            if (pc_necesarios < pc_actual) texto += Traduz('FUNDAR');
            else{
                var tiempo = ((pc_necesarios - pc_actual) / pc_prod_total) * 86400;
                var fecha = new Date();
                fecha.setTime(fecha.getTime() + (tiempo * 1000));
                var texto_tiempo = funcCalcularTextoTiempo(fecha);
                texto += funcTranslate('FALTA') + ' <b>' + (pc_necesarios - pc_actual) + '</b> ' + funcTranslate('PC') +'<br/>';
                texto += funcTranslate('LISTO') + " " + texto_tiempo;
            }
            texto += '</td></tr>';
        }
        texto += '</table>';
        main_page_bold.snapshotItem(3).parentNode.innerHTML += "<p>" + texto + "</p>";
    }
    
    function funcBattleReport()
    {
        if (!funcFindElem("//table[@id='attacker']", XPFirst)) return;
        
        var botin = null;
        var _tbody_goods = funcFindElem("//tbody[@class='goods']//div[@class='res']", XPFirst);
        var _goods = _tbody_goods;
        if (_goods != null)
        {
            _goods = _goods.textContent.split("|");
            var pillage = new Array();
            pillage[0] = parseInt(_goods[0]);
            pillage[1] = parseInt(_goods[1]);
            pillage[2] = parseInt(_goods[2]);
            pillage[3] = parseInt(_goods[3]);
            botin = funcArraySum(pillage);
            var info_pillage = '';
            for (var i = 0; i < 4; i++){
                info_pillage += '<img src="img/x.gif" class="r' + (i+1) + '" title="' + funcTranslate('RECURSO' + (i+1)) + '"> ';
                info_pillage += pillage[i];
                if (i < 3) info_pillage += ' + '; else info_pillage += ' = ';
            }
            info_pillage += botin.toLocaleString();
            _tbody_goods.innerHTML = info_pillage;
            _tbody_goods.setAttribute("align", "Left");
        }
        var lost = new Array();
        var carry = new Array();
        var survi = new Array();
        var powerA = new Array();
        var powerI = new Array();
        var powerC = new Array();
        
        // For each participante in the battle
        var _report_details = funcFindElem("//table[@id='attacker' or @class='defender']", XPList);
        for(var g = 0; g < _report_details.snapshotLength; g++)
        {
            carry[g] = 0; 
            powerA[g] = 0;  
            powerI[g] = 0;  
            powerC[g] = 0;  
            var tt = _report_details.snapshotItem(g);
            var num_elementos = tt.rows[1].cells.length - 1;
            if (tt.rows.length > 3 )
            {
                var _bodycount = false;
                for(var j = 1; j < 11; j++)
                { 
                    // Recupera la cantidades de tropa de cada tipo que han intervenido
                    var u = unitsCost[tt.rows[1].cells[j].getElementsByTagName('img')[0].className.split('unit u')[1]];
                    var p = tt.rows[3] ? tt.rows[3].cells[j].innerHTML : 0; 
                    // Basandose en el coste por unidad y su capacidad, se calculan las perdidas y la capacidad de carga total
                    var ptu = funcArrayByN(u, p);
                    lost[g] = funcArrayAdd(lost[g], ptu.slice(3, 7));
                    carry[g] += (tt.rows[2] ? tt.rows[2].cells[j].innerHTML - p : 0) * u[8];
                    
                    //Power Ataque / inf / cav
                    if ( g == 0 )
                    {
                        powerA[g] += (tt.rows[2] ? tt.rows[2].cells[j].innerHTML : 0) * u[0];
                    }
                    else
                    {
                        powerI[g] += (tt.rows[2] ? tt.rows[2].cells[j].innerHTML : 0) * u[1];
                        powerC[g] += (tt.rows[2] ? tt.rows[2].cells[j].innerHTML : 0) * u[2];
                    }
                    survi[g, j] = Number(tt.rows[2].cells[j].innerHTML) - Number(tt.rows[3].cells[j].innerHTML);
                    if ( (Number(tt.rows[3].cells[j].innerHTML) != 0) && (Number(tt.rows[2].cells[j].innerHTML) != Number(tt.rows[3].cells[j].innerHTML)) ) _bodycount = true;
                }
                if (tt.rows[1].cells.length > 11)
                {
                    survi[g, 11] = Number(tt.rows[2].cells[11].innerHTML) - Number(tt.rows[3].cells[11].innerHTML);
                    if ( (Number(tt.rows[3].cells[11].innerHTML) != 0) && (Number(tt.rows[2].cells[11].innerHTML) != Number(tt.rows[3].cells[11].innerHTML)) ) _bodycount = true;
                }
                
                // Based on Travian3 Beyond ML&CN
                if ( g == 0 )
                {
                    tt.rows[1].cells[0].innerHTML = '<img style="position:relative; top: 4px;" class="att_all" src="img/x.gif"><font color="blue" size="1px"> - ' + powerA[g].toLocaleString() + '</font>';
                }
                else
                {
                    tt.rows[1].cells[0].innerHTML = '<img style="position:relative; top: 4px;" class="def_i" src="img/x.gif"><font color="red" size="1px"> - ' + powerI[g].toLocaleString() + ' <br><img style="position:relative; top: 4px;" class="def_c" src="img/x.gif"> - ' + powerC[g].toLocaleString() + '</font>';
                }

                //Trops that survive
                if ( _bodycount )
                {
                    var fila = document.createElement("TR");
                    fila.appendChild(funcElem("TH", funcTranslate('SORTUDOS')));
                    for(var j = 1; j < tt.rows[1].cells.length; j++)
                    { 
                        var informe = document.createElement("TD");
                        if ( survi[g, j] == 0 ) informe.className = "none";
                        informe.innerHTML = "<center>" + survi[g, j] + "</center>";
                        fila.appendChild(informe);
                    }
                    if ( g == 0 )
                    {
                        for ( var _j = 4; _j < tt.rows.length; _j++ )
                        {
                            if ( tt.rows[_j].cells[1].getAttribute("colspan") )
                            {
                                tt.rows[_j].parentNode.insertBefore(fila, tt.rows[_j]);
                                break;
                            }
                        }
                    }
                    else
                    {
                        tt.appendChild(fila);    
                    }
                }
                
                // Anyade la nueva informacion como una fila adicional en cada tabla
                var perdidas = funcArraySum(lost[g]);
                if ( perdidas > 0 )
                {
                    var informe = document.createElement("TD");
                    for (var i = 0; i < 4; i++)
                    {
                        informe.innerHTML += '<img src="img/x.gif" class="r' + (i+1) + '" title="' + funcTranslate('RECURSO' + (i+1)) + '"> ';
                        informe.innerHTML += lost[g][i];
                        if (i < 3) informe.innerHTML += ' + '; else informe.innerHTML += ' = ';
                    }                  
                    informe.innerHTML += perdidas.toLocaleString();
                    informe.colSpan = num_elementos;
                    var _tbody = document.createElement("tbody");
                    _tbody.className = "goods";
                    var fila = document.createElement("TR");
                    fila.appendChild(funcElem("TH", funcTranslate('PERDIDAS')));
                    fila.appendChild(informe);
                    _tbody.appendChild(fila);
                    tt.appendChild(_tbody);
                }
            }
            
            // Solo para el atacante se calcula y muestra la rentabilidad y eficiencia del ataque
            if (g == 0 && botin != null)
            {
                var _tbody = document.createElement("tbody");
                _tbody.className = "goods";
                
                // La rentabilidad muestra el botin en comparacion con las perdidas
                if ( perdidas > 0 )
                {
                    var fila_datos = document.createElement("TR");
                    var datos = document.createElement("TD");
                    datos.colSpan = num_elementos;
    
                    var rentabilidad = Math.round((botin - perdidas) * 100 / botin);
                    if (botin == 0) if (perdidas == 0) rentabilidad = 0; else rentabilidad = -100;  
                    datos.innerHTML = rentabilidad + "%";
                    fila_datos.appendChild(funcElem("TH", funcTranslate('RENT')));
                    fila_datos.appendChild(datos);
                    _tbody.appendChild(fila_datos);
                }
                
                // La eficiencia muestra el botin en comparacion con la cantidad de tropas utilizadas
                if ( botin > 0 && carry[g] > 0)
                {
                    var fila_datos = document.createElement("TR");
                    var datos = document.createElement("TD");
                    datos.colSpan = num_elementos;
                    var eficiencia = 100 - Math.round((carry[g] - botin) * 100 / carry[g]);         
                    if (carry[g] == 0) eficiencia = 0;
                    datos.innerHTML = eficiencia + "%";
                    fila_datos.appendChild(funcElem("TH", funcTranslate('EFICIENCIA')));
                    fila_datos.appendChild(datos);
                    _tbody.appendChild(fila_datos);
                }
                
                tt.appendChild(_tbody);
            }
        }
    }    
    
    // Get General Information used by the script and fill up generic variables
    function funcGetGeneralData()
    {
        // Global variables defenition and initialization
        tfb_version = "2.92";       // TravianFarBeyond Script Version
        tfb_lang = "en";            // Server language -> Script language
        user_ID = 0;                // User ID
        server_Time = 0;            // Server Time
        server_Day = 0;             // Server Day
        server_name = '';           // Server Name
        speedx = 0;                 // Is server Speed? 0 - No, 1 - Yes;
        actual_resources = new Array(4);  // Actual Resources
        actual_resources = [0,0,0,0];
        total_resources  = new Array(4);  // Total capacity of warehouse
        total_resources = [0,0,0,0];
        resources_per_sec = new Array(4);  // Produccion per second
        resources_per_sec = [0,0,0,0];
        selected_village_data = new Array(4);  // Selected Village Data!
        selected_village_data[0] = 0;    // ID
        selected_village_data[1] = ' ';  // Name
        selected_village_data[2] = 0;    // X
        selected_village_data[3] = 0;    // Y
        plus = false;
        user_Tribe = '';
        
        // End of Global variables defenition and initialization

        // Info on Resources
        funcGetResourcesData();
            
        // Info on the Selected village
        funcGetAldeiaData();

        funcFindElem("//link[contains(@href, '/lang.css?')]", XPFirst).href.search(/\/lang\/([^\/]+)\//);
        tfb_lang = RegExp.$1;
        
        funcFindElem("//a[contains(@href, 'spieler.php?uid=')]", XPFirst).href.search(/spieler.php\?uid=(\d+)/);
        user_ID = RegExp.$1;
        
        server_Time = funcFindElem("//div[@id='ltime']//span[@id='tp1']", XPFirst).innerHTML;
        server_Day = new Date().getDate();

        location.href.search(/http:\/\/(.*)\//);
        server_name = RegExp.$1;
        
        server_name.search(/(.*).travian/);
        var temp = RegExp.$1;
        if (temp.split("speed").length >1) speedx=1;
        // Plus
        imgPlus = funcGetElemID("logo");
    	if (imgPlus != null)
    	{
    		if (imgPlus.nodeName == "IMG")
    		{
    			if (imgPlus.className && (imgPlus.className == "plus" || imgPlus.className == "logo_plus")) plus = true;
    		}
    		else if (imgPlus.nodeName == "A")
    		{
    			if (imgPlus.firstChild && imgPlus.firstChild.className == "logo_plus") plus = true;
    		}
    	}
    	//Check 1st time on server with this user and ask to delete old unused cookies!
    	funcCheckFirstTimeAndDeleteOldCookies();

        //Get User Tribe ( from cookie if exist)
        user_Tribe = funcReadCookie("user_tribe");
        if (user_Tribe != 0 && user_Tribe != 10 && user_Tribe != 20) ajaxRequest("a2b.php", "GET", null, funcGetUserTribe, funcDummy);

        //Check for version Update
        funcCheckUpdate();
    }
    
    function funcAutoLogin()
    {
        var _span = document.createElement("span");
        var errorLogin = funcFindElem("//span[@class='error']", XPList);
        if ( errorLogin.snapshotItem(0).textContent.length < 2 && errorLogin.snapshotItem(1).textContent.length < 2 )
        {
            _span.innerHTML = "TravianFarBeyond... Auto Login in: ";
            funcGetElemID("content").appendChild(_span);
            _span = document.createElement("span");
            _span.setAttribute("id","TFBTimeOut");
            _span.innerHTML = funcSeconds2Time(10);
            funcGetElemID("content").appendChild(_span);
            funcSetTimers();        
            setTimeout(function() { funcGetElemID("btn_login").click(); } , 10666);
        }
        else
        {
            _span.innerHTML = "TravianFarBeyond... ErroR in login / password";
            funcGetElemID("content").appendChild(_span);            
        }              
    }
    
    function funcSelectAllMsg()
    {
        var _msgTableFooter = funcFindElem("//table[@id='overview']//tfoot//tr//th", XPFirst);
        if ( _msgTableFooter && !plus) _msgTableFooter.innerHTML = '<input style="font-weight:bold; font-size:8pt; height:14pt" id="mtodo_id" name="mtodo" type="checkbox" value="0" onClick="for(var x = 0; x < document.msg.elements.length; x++) document.msg.elements[x].checked = checked;"/>';
    }
    
    function funcCaculateBuildTime()
    {
        // Get building needs paragraf
        var _building = funcGetElemID('contract');
        var recursos = _building.textContent.split(":")[1].split("|").splice(0,4);
        _building.appendChild(funcElem("DIV", funcCalculateResourceTime(recursos)));
    }

    // Based on Travian3 Beyond - ML&CN by ms99 (Nux, Lux, Szabka)
    function funcShowMapTroopDef()
    {
        var _table_rows = funcFindElem("//table[@id='troop_info']//tr", XPList);
        if (_table_rows.snapshotItem(1).cells.length < 2 ) return;
        var _DefPower = [0, 0];
        for ( var _i = 1; _i < _table_rows.snapshotLength; _i++ )
        {
            _DefPower[0] += Number(_table_rows.snapshotItem(_i).cells[1].textContent) * unitsCost[_table_rows.snapshotItem(_i).getElementsByTagName('img')[0].className.split('unit u')[1]][1];
            _DefPower[1] += Number(_table_rows.snapshotItem(_i).cells[1].textContent) * unitsCost[_table_rows.snapshotItem(_i).getElementsByTagName('img')[0].className.split('unit u')[1]][2];
        }
        var _tr = document.createElement("TR");
        var _td = document.createElement("TD");
        _td.colSpan = 3;
        _td.innerHTML = '&nbsp;';
        _tr.appendChild(_td);
        funcFindElem("//table[@id='troop_info']//tbody", XPFirst).appendChild(_tr);
        
        _tr = document.createElement("TR");
        _td = document.createElement("TD");
        _td.className = "ico";
        _td.innerHTML = '<img class="def_c" src="img/x.gif">';
        _tr.appendChild(_td);
        _td = document.createElement("TD");
        _td.className = "val";
        _td.innerHTML = '#';
        _tr.appendChild(_td);
        _td = document.createElement("TD");
        _td.className = "desc";
        _td.innerHTML = '<b><font color="red">' + _DefPower[0].toLocaleString() + '</b></font>';
        _tr.appendChild(_td);
        funcFindElem("//table[@id='troop_info']//tbody", XPFirst).appendChild(_tr);
        
        _tr = document.createElement("TR");
        _td = document.createElement("TD");
        _td.className = "ico";
        _td.innerHTML = '<img class="def_i" src="img/x.gif">';
        _tr.appendChild(_td);
        _td = document.createElement("TD");
        _td.className = "val";
        _td.innerHTML = '#';
        _tr.appendChild(_td);
        _td = document.createElement("TD");
        _td.className = "desc";
        _td.innerHTML = '<b><font color="red">' + _DefPower[1].toLocaleString() + '</b></font>';
        _tr.appendChild(_td);
        funcFindElem("//table[@id='troop_info']//tbody", XPFirst).appendChild(_tr);        
    }

}

// Main function
function funcMain()
{
    if (funcGetElemID("content").className == "login")
    {
        funcAutoLogin();
        return;        
    }
    funcGetGeneralData();
    funcLeftMenuLinks();
    funcMainTopLinks();
    funcCalculateFillTime();
    funcVillageLinks();


    switch (funcGetElemID("content").className)
    {
        case 'village1': // Main page dorf1
            funcShowResourcesTable();
            break;
            
        case 'village2': // Village page dorf2
            funcShowBuildingsTable();
            break;

        case 'map': // Map page
            if (funcGetElemID("map"))
            {
                funcGetElemID("a_6_6").addEventListener('run', function(){alert("OLE")}, false);
                var _directions = funcFindElem("//area[starts-with(@id, 'ma_n')]", XPList);
                for (var _i = 0; _i < _directions.snapshotLength; _i++)
                {
                    //_directions.snapshotItem(_i).removeEventListener('click', funcWait2ShowMapTable, false);
                    _directions.snapshotItem(_i).addEventListener('click', funcWait2ShowMapTable, false);
                }
                //funcGetElemID("btn_ok").removeEventListener('click', funcWait2ShowMapTable, false);
                funcGetElemID("btn_ok").addEventListener('click', funcWait2ShowMapTable, false);
                funcWait2ShowMapTable();
            }
            if (funcGetElemID("troop_info")) funcShowMapTroopDef();
            break;
            
        case 'reports': // Reports page
            if (!funcGetElemID("overview"))
            {
                funcBattleReport();
            }
        case 'messages': // Messages page
            if (funcGetElemID("overview")) funcSelectAllMsg();
            break;

        case 'build': // specific building page
            if ( funcGetElemID("build") )
            {
            	switch (funcGetElemID("build").className)
            	{
                    case 'gid17': // Mercado
                        funcRecursosMercado();
                        break;
                    case 'gid20': // Cavalariça
                        //tiempoExplorarUnidades();
                        break;
                    case 'gid25': // Residencia
                    case 'gid26': // Palacio
                        if (funcGetElemID("build_value")) funcCulturePointsTable();
                        break;
                    case 'gid37': // Heroi
                        funcHeroStatus();
                        break;
            	}
            	if (funcGetElemID('contract')) funcCaculateBuildTime();
            }
            else
            {
                funcShowBuildingsTable();
            }
            break;

        default: alert(funcGetElemID("content").className);
    }
    if (location.href.indexOf('dorf3.php') == -1 && location.href.indexOf('nachrichten.php') == -1) setTimeout(function() { document.location.href='dorf1.php'; } , 180666);
    funcReviewLinks();
    funcSetTimers();
    funcScriptLoadTime();
}
// Begining of script
document.title = "-= " + document.title.split(" ")[document.title.split(" ").length - 1] + ' =- EthereaL ProphetS ScripT for ' + document.title;
var scriptStartTime = new Date().getTime();
if (document.evaluate("//div[@id='header']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null).snapshotLength < 1)
{
    document.body.appendChild(funcElem("span", "TravianFarBeyond... Refreshing in: "));
    var _span = document.createElement("span");
    _span.setAttribute("id","TFBTimeOut");
    _span.innerHTML = funcSeconds2Time(180);
    document.body.appendChild(_span);
    funcSetTimers();
    location.href.search(/(.*)\//);
    var refra = RegExp.$1;
    refra = refra + '/dorf1.php';
    setTimeout(function() {window.location = refra;} , 180666);
}
else
{
    window.addEventListener( 'load', funcMain, false);
    if (document.body.innerHTML.search('att1.gif') != -1) document.getElementById('lmid2').style.backgroundColor = "#faefe4";
}
