BRASS online improved

Various tweaks to improve Order of the Hammer's brass (orderofthehammer.com)

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name BRASS online improved
// @namespace tequila_j-script
// @version    0.2.3
// @description  Various tweaks to improve Order of the Hammer's brass (orderofthehammer.com)
// @match      http://brass.orderofthehammer.com/board.php
// @match      https://brass.orderofthehammer.com/board.php*
// @match      http://*.orderofthehammer.com/board.php*
// @match      https://*.orderofthehammer.com/board.php*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require     https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
// @resource   jquery-ui-theme http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/themes/humanity/jquery-ui.min.css
// @resource   condensed-font https://fonts.googleapis.com/css?family=Roboto+Condensed
// @grant    GM_addStyle
// @grant    GM_getResourceText 
// @run-at      document-start
// ==/UserScript==


var condensedFontCSSsrc = GM_getResourceText ("condensed-font");

GM_addStyle (condensedFontCSSsrc);

function urlParam(param) {
	var vars = {};
	window.location.href.replace( location.hash, '' ).replace( 
		/[?&]+([^=&]+)=?([^&]*)?/gi, // regexp
		function( m, key, value ) { // callback
			vars[key] = value !== undefined ? value : '';
		}
	);

	if ( param ) {
		return vars[param] ? vars[param] : null;	
	}
	return vars;
}

function updateCSS() {
  
GM_addStyle(`  
.dropdown {
    position: relative;
    display: inline-block;
    font: 12px 'Roboto Condensed', sans-serif;
}

.dropdown-content {
    display: none;
    position: absolute;
    padding: 4px;
    top: 0px;
    background-color: #f9f9f9;
    min-width: 160px;
    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
    z-index: 250;
    box-shadow: -5px -5px 3px #000000;
}

.dropdown-content li {
    color: black;
    padding: 4px 6px;
    text-decoration: none;
    display: block;
}

.dropdown-content li.title {
  color: black;
    padding: 4px 6px;
    text-decoration: none;
    display: block;
    border-bottom: 1px solid black;
    background-color: #d1d1d1;
}

.dropdown-content li.title:hover {background-color: #d1d1d1}

.dropdown-content li:hover {background-color: #b1b1b1}

.dropdown:hoverA .dropdown-content {
    display: block;
}
    
.sub-menu {
    margin-left: 10px;
    margin-top: 22px;
}
    
.sub-menu-1 {
    
}
    
    
`);

//fix title menu z-index	
GM_addStyle(`
div.play-area {
  position:relative;
}

.card-pointer {
  width: 20px;
  height: 20px;
  border-radius: 5px;
  //background: url(https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/location.png?alt=media&token=78344917-5f7c-4d1f-9f22-8a70f992a006);
  background: url(http://i.imgur.com/wDnJWfH.png);
  background-size: 20px;
  background-repeat: no-repeat;
  z-index: 200;
}

.card-pointer-1 {
}

.card-pointer-2 {
margin-left: 17px;
}

.card-pointer-3 {
margin-left: 34px;
}

.card-pointer-4 {
margin-left: 51px;
}
  
div.board-side {
position: absolute;
    left: 960px;
    top: 0px;
    width: 400px;
}

div.main-board {
  position:relative;
  background-color:peru !important;
}

div.industry-cards {
  position:relative;
  background-color: rgba(159,89,41,0.8);
  padding: 10px 5px;
  z-index: 200;
  display:inline-block;
  border: 1px solid lightgray;
}

div.industry-cards-full {
  top: 0px;
  left: 0px;
}

div.industry-cards-compact {
  top:0px;
  left:150px;
}

div.industry-card {
  display: inline-block;
}

div.industry-card img {
  margin:5px;
  max-width: 25px;
  max-height: 30px;
}
    
div.extra-player-board-container-normal {
  height: 225px;
  width: 362px;
}

div.extra-player-board-container-normal div.scale-wrapper {
  transform: scale(0.75);
  transform-origin: 0 0;
}

div.extra-player-board tr.player-info-money {
  font-size: 24px ;
}

div.extra-player-board table tr {
  font-size: 14px;
}

div.extra-player-board-container-mini {
  display: inline-block;
}

div.extra-player-board-container-mini-3 {
  height: 100px;
  width: 180px;
}

div.extra-player-board-container-mini-4 {
  height: 75px;
  width: 121px;
}

div.extra-player-board-container-miniatures {
  width: 370px;  
}

div.extra-player-board-container-miniatures div.extra-player-board-container-mini table tr {
  display: none;
}

div.extra-player-board-container-miniatures div.extra-player-board-container-mini table tr.player-info-money {
  display: block;
}

div.extra-player-board-container-mini div.scale-wrapper {
  transform-origin: 0 0;
  cursor: pointer;
}

div.extra-player-board-container-mini-2 div.scale-wrapper {
  transform: scale(0.5);
}

div.extra-player-board-container-mini-3 div.scale-wrapper {
  transform: scale(0.375);
}

div.extra-player-board-container-mini-3 table tr.player-info-money {
  font-size: 36px;
}

div.extra-player-board-container-mini-4 div.scale-wrapper {
  transform: scale(0.25);
}

div.extra-player-board-container-mini-4 table tr.player-info-money {
  font-size: 42px;
}

div.extra-player-board-container-mini div.extra-player-board {
}



`);    

GM_addStyle(`

div#game-history {
  margin-top: 15px;
}

table.log-table {
  font-size: x-small;
  border-collapse:collapse;
  font-family: arial, serif;
}


table.log-table tr:hover {
  background-color: lightgrey;
}

table.log-table .colclass0 {
}

table.log-table .colclass1 {
}

table.log-table .colclass2 {
}

table.log-table .log-color-blue .time-column {
}

table.log-table td {
  border-bottom: 1px solid grey;
  padding: 2px 0px 2px 2px;  
}

table.log-table td.time-column {
  width: 5px;
}

table.log-table .log-color-purple td {
  border-color: purple;
}

table.log-table .log-color-purple .time-column {
  background-color: purple;
}

table.log-table .log-color-red td {
  border-color: red;
}

table.log-table .log-color-red .time-column {
  background-color: red;  
}

table.log-table .log-color-yellow td {
  border-color: yellow;
}

table.log-table .log-color-yellow .time-column {
  background-color: yellow;  
}

table.log-table .log-color-green td {
  border-color: green;
}

table.log-table .log-color-green .time-column {
  background-color: green;  
}

table.log-table .log-color-gray td {
  border-color: gray;
}

table.log-table .log-color-gray .time-column {
  background-color: gray;  
}

table.log-table .log-color-start td {
  border-color: black;
}

table.log-table .log-color-start .time-column {
  background-color: black;  
}


`)
  
  
}

function setSelectByText(select, text) {
  select.find('option').filter(function() {
            return this.text == text;
        }).prop('selected', true);
  return select;
}

function createSelect(parent) {
    var chooseAction = createMenuFromSelect($(parent),$('#MoveType'));
    if (chooseAction === undefined) return;
    var options = chooseAction.options;
    for (i = 0; i < options.length; i++) {
        $(options[i]).on("click", function() {
            var option = $(this);
            var chooseActionValue = $(this).data("value");
            switch (chooseActionValue) {
                case "0": //Build Industry
                    console.log("Industry for " + $("#dCardX").find("select:first").val());
                    var helper = "#dBuildOpts" + $("#dCardX").find("select:first").val();
                    var select = $(helper).find("select:first");
                    var buildIndustryOptions = createMenuFromSelect($(this),select,1);

                    // Location card
                    console.log(">> " + select.attr("name"));
                    if (select.attr("name").startsWith("Tile")) {
                        var indOptions = buildIndustryOptions.options;
                        for (j = 0 ; j < indOptions.length; j++) {
                            var indOption = $(indOptions[j]);
                            var select2 = $(helper).find("select[name^=IndustrySpace]");
                            indOption.on("click", function() {
                                var nextMenu = createMenuFromSelect($(this),select2,2);
                                nextMenu.options.each(function () {
                                      var coalIsVisible = $("#dCoal select[name^='CoalSource']").is(":visible");
                                      console.log("Coal" + coalIsVisible);
                                      var ironIsVisible = $("#dIron select[name^='IronSource']").is(":visible");
                                      console.log("Iron" + ironIsVisible);
                                      if (coalIsVisible) {
                                        $(this).on('click', function() {
                                            var nextMenu = createMenuFromSelect($(this),$("#dCoal select[name^='CoalSource']"),3, "Coal");
                                            if (ironIsVisible) {
                                              nextMenu.options.each(function() {
                                                $(this).on("click", function () {
                                                  var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                                })
                                              })
                                            }
                                        })
                                      } else {
                                        if (ironIsVisible) {
                                          nextMenu.options.each(function() {
                                                var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                              })
                                        }
                                      }
                                    })

                        })
                    }
                  } 
                  //industry card 
                  else { 
                        if (select.attr("name").startsWith("Industry")) {
                          buildIndustryOptions.options.each( function() {
                              $(this).on("click", function() {
                                        var coalIsVisible = $("#dCoal select[name^='CoalSource']").is(":visible");
                                        console.log("Coal" + coalIsVisible);
                                        var ironIsVisible = $("#dIron select[name^='IronSource']").is(":visible");
                                        console.log("Iron" + ironIsVisible);
                                        if (coalIsVisible) {
                                            console.log("Coal criado");
                                              var nextMenu = createMenuFromSelect($(this),$("#dCoal select[name^='CoalSource']"),3, "Coal");
                                              if (ironIsVisible) {
                                                nextMenu.options.each(function() {
                                                  $(this).on("click", function () {
                                                    var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                                  })
                                                })
                                              }
                                        } else {
                                          if (ironIsVisible) {
                                            nextMenu.options.each(function() {
                                                  var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                                })
                                          }
                                        }
                                      })

                          
                      })
                  } 
                }
                  
                    
                    break;
                case "1": //Double Action
                //select second card
                    var varNextSelectName = "SecondCard";
                    var selectChooseSecondCard = createMenuFromSelect($(this),$("#dCardY").find("select[name=" + varNextSelectName +"]"),1);
                    for (j = 0 ; j < selectChooseSecondCard.options.length; j++) {
                            var srcOption = $(selectChooseSecondCard.options[j]);
                            srcOption.on("click", function() {
                                var nextMenu = createMenuFromSelect($(this),$("#dDoubleBuildOpts select[name^='TileTypeY']"),2);
                                nextMenu.options.each(function () {
                                  $(this).on("click", function() {
                                    var nextMenu = createMenuFromSelect($(this),$("#dDoubleBuildOpts select[name^='IndustrySpaceY']"),3);
                                    nextMenu.options.each(function () {
                                      var coalIsVisible = $("#dCoal select[name^='CoalSource']").is(":visible");
                                      console.log("Coal" + coalIsVisible);
                                      var ironIsVisible = $("#dIron select[name^='IronSource']").is(":visible");
                                      console.log("Iron" + ironIsVisible);
                                      if (coalIsVisible) {
                                        $(this).on('click', function() {
                                            var nextMenu = createMenuFromSelect($(this),$("#dCoal select[name^='CoalSource']"),3, "Coal");
                                            if (ironIsVisible) {
                                              nextMenu.options.each(function() {
                                                $(this).on("click", function () {
                                                  var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                                })
                                              })
                                            }
                                        })
                                      } else {
                                        if (ironIsVisible) {
                                          nextMenu.options.each(function() {
                                                var nextMenu = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),3, "Iron");
                                              })
                                        }
                                      }
                                    })
                                  })
                                  
                                })
                            })
                    }
                break;

                case "2": // Build Link
                    var varSelectName = "LinkToBuild";
                    var buildLinkOptions = createMenuFromSelect($(this),$("select[name=" + varSelectName +"]"),1);
                    buildLinkOptions.options.each(function () {
                            var srcOption = $(this);
                            var coalIsVisible = $("#dCoal select[name^='CoalSource']").is(":visible");
                            if (coalIsVisible) {
                              $(this).on('click', function() {
                                var nextMenu = createMenuFromSelect($(this),$("#dCoal select[name^='CoalSource']"),3, "Coal");
                              })
                            }
                    })

                    break;
                case "3": //Develop
                    var buildLinkOptions = createMenuFromSelect($(this),$("#dTileType select[name^='TileType']"),1);
                    var srcOptions = buildLinkOptions.options;
                    for (j = 0 ; j < srcOptions.length; j++) {
                            var srcOption = $(srcOptions[j]);
                            srcOption.on("click", function() {
                                var chooseOption = createMenuFromSelect($(this),$("#dIron select[name^='IronSource']"),2, "Iron");
                            })
                    }
                    break;
                case "4": // Loan
                    var buildLinkOptions = createMenuFromSelect($(this),$("#dLoan select[name^='LoanAmount']"),1);
                    break;
                case "5": //Sell
                    var srcMenuOptions = createMenuFromSelect($(this),$("#dIndustrySpaceX select[name^='IndustrySpace']"),1);
                    var srcOptions = srcMenuOptions.options;
                    for (j = 0 ; j < srcOptions.length; j++) {
                            var srcOption = $(srcOptions[j]);
                            srcOption.on("click", function() {
                                var portOption = createMenuFromSelect($(this),$("#dIndustrySpaceX select[name^='PortSpace']"),2);
                            })
                    }
                    break;
                    
        }
    })
    }
}


function getCards() {

  var cardArea = $("body > p:eq(3)").text();
  var cardsTextArray = cardArea.split(":");
  if (cardsTextArray.length < 2) {
      return [];
  }
  var cards = cardsTextArray[1].trim().replace(/\.$/,"").split(/\s*,\s*/);

    //var cardOptions = $("#dCardX > select:first").find("option");
    //var cards = [];
    //if (cardOptions !== undefined) {
    //    for (i = 0; i < cardOptions.length; i++) {
    //        var cardOption = $(cardOptions[i]);
    //        if (cardOption.val().startsWith("NoCardSelect")) continue;
    //        cards.push(cardOption.html());
    //    };        
   // }
    return cards;
    
}


function createMenuFromSelect(srcClick, select, level, title) {
  if ($(srcClick).hasClass("dropdown"))
    return {element:srcClick, parent: $(srcClick), options: $(srcClick).children("li")};
  
  $(srcClick).addClass("dropdown");
  
  
  var parent = $('<ul/>').addClass('dropdown-content');
  if (level !== undefined) parent.addClass("sub-menu").addClass("sub-menu-" + level);

  if (title !== undefined) {
    var titleEntry = $("<li/>").addClass("title").append(title);
    parent.append(titleEntry);
  }
  
  $(select).children('option').each(function() {
    var option = $(this);
    var menuOption = $('<li/>');
    var optionTitle = $('<div/>');
    menuOption.append(optionTitle);
    optionTitle.html(option.html());
    menuOption.data("value",option.val());
    menuOption.on('click', function(event) {
      event.stopPropagation();
      //link to build 
      $(select).val(option.val())
      
      $(select).change();
      //AlterForm();
    });
    parent.append(menuOption);
  });

  srcClick.append(parent);

  srcClick.on('click', function(){
    parent.slideToggle("fast");
  });

  parent.mouseleave(function(){
    $(parent).toggle("fast");
    $(parent).find("ul").hide();
  });
  
  srcClick.click();
  
  return {element:srcClick, parent: $(parent), options: $(parent).children("li")};
  
}

function getNumberOfPlayers() {
  return $(document).data('number-of-players-started');
}

function getNumberOfCurrentPlayers() {
  return $(document).data('number-of-players-current');
}
  
function getBoardType() {
  return $(document).data('board-type');
}

function getCityClassName(cityName) {
    var sname = cityName.split(" ")[0].toLowerCase();
    return "city-" + sname;
}

function getLoggedUser() {
    var u = $(document).data("logged-user");
    return u;
}


function getCoordinates(players, boardType) {
  
  var coord = new Map();
  
  if (players == 2) {
    if (boardType == "full") {
      coord.set("Barrow – In – Furness",{y:145, x:15, pos: 'bottom'});
      coord.set("Birkenhead",{y:663, x:7, pos: 'top'});
      coord.set("Blackburn",{y:302, x:420, pos: 'top'});
      coord.set("Bolton",{y:450, x:404, pos: 'top'});
      coord.set("Burnley",{y:288, x:636, pos: 'bottom'});
      coord.set("Bury",{y:445, x:554, pos: 'top'});
      coord.set("Colne",{y:187, x:683, pos: 'top'});
      coord.set("Ellesmere Port",{y:803, x:141, pos: 'top'});
      coord.set("Fleetwood",{y:215, x:38, pos: 'top'});
      coord.set("Lancaster",{y:155, x:340, pos: 'top'});
      coord.set("Liverpool",{y:492, x:32, pos: 'top'});
      coord.set("Macclesfield",{y:827,x:507, pos: 'top'});
      coord.set("Manchester",{y:676, x:653, pos: 'bottom'});
      coord.set("Oldham",{y:551, x:671, pos: 'bottom'});
      coord.set("Preston",{y:287, x:317, pos: 'top'});
      coord.set("Rochdale",{y:521, x:775, pos: 'bottom'});
      coord.set("Stockport",{y:754, x:157, pos: 'top'});
      coord.set("Warrington & Runcorn",{y:698, x:380, pos: 'bottom'});
      coord.set("Wigan",{y:550, x:341, pos: 'bottom'});
      return coord;
    }
    if (boardType == "compact") {
      coord.set("Barrow – In – Furness",{y:87, x:432, pos: 'bottom'}); 
      coord.set("Birkenhead",{y:663, x:7, pos: 'top'});//
      coord.set("Blackburn",{y:257, x:578, pos: 'top'});
      coord.set("Bolton",{y:401, x:384, pos: 'top'});
      coord.set("Burnley",{y:10, x:600, pos: 'bottom'});
      coord.set("Bury",{y:335, x:726, pos: 'top'});
      coord.set("Colne",{y:163, x:721, pos: 'top'});
      coord.set("Ellesmere Port",{y:803, x:141, pos: 'top'});
      coord.set("Fleetwood",{y:16, x:51, pos: 'top'});
      coord.set("Lancaster",{y:179, x:242, pos: 'top'});
      coord.set("Liverpool",{y:496, x:93, pos: 'top'});
      coord.set("Macclesfield",{y:827,x:507, pos: 'top'});//
      coord.set("Manchester",{y:593, x:440, pos: 'bottom'});
      coord.set("Oldham",{y:551, x:671, pos: 'bottom'});//
      coord.set("Preston",{y:255, x:47, pos: 'top'});
      coord.set("Rochdale",{y:521, x:775, pos: 'bottom'});//
      coord.set("Stockport",{y:754, x:157, pos: 'top'});//
      coord.set("Warrington & Runcorn",{y:476, x:338, pos: 'bottom'});
      coord.set("Wigan",{y:336, x:294, pos: 'bottom'});//
      return coord;
    }
  }
  
  if (players == 4 || players == 3 ) {
    if (boardType == "full") {
      coord.set("Barrow – In – Furness",{y:145, x:15, pos: 'bottom'});
      coord.set("Birkenhead",{y:663, x:7, pos: 'top'});
      coord.set("Blackburn",{y:302, x:420, pos: 'top'});
      coord.set("Bolton",{y:450, x:404, pos: 'top'});
      coord.set("Burnley",{y:288, x:636, pos: 'bottom'});
      coord.set("Bury",{y:445, x:554, pos: 'top'});
      coord.set("Colne",{y:187, x:683, pos: 'top'});
      coord.set("Ellesmere Port",{y:803, x:141, pos: 'top'});
      coord.set("Fleetwood",{y:215, x:38, pos: 'top'});
      coord.set("Lancaster",{y:155, x:340, pos: 'top'});
      coord.set("Liverpool",{y:492, x:32, pos: 'top'});
      coord.set("Macclesfield",{y:827,x:507, pos: 'top'});
      coord.set("Manchester",{y:676, x:653, pos: 'bottom'});
      coord.set("Oldham",{y:548, x:760, pos: 'bottom'});
      coord.set("Preston",{y:287, x:317, pos: 'top'});
      coord.set("Rochdale",{y:521, x:775, pos: 'bottom'});
      coord.set("Stockport",{y:754, x:515, pos: 'top'});
      coord.set("Warrington & Runcorn",{y:698, x:380, pos: 'bottom'});
      coord.set("Wigan",{y:550, x:341, pos: 'bottom'});
      return coord;
    }
    if (boardType == "compact") {
      coord.set("Barrow – In – Furness",{y:86, x:430, pos: 'bottom'});
      coord.set("Birkenhead",{y:740, x:3, pos: 'bottom'});
      coord.set("Blackburn",{y:260, x:576, pos: 'bottom'});
      coord.set("Bolton",{y:400, x:384, pos: 'bottom'});
      coord.set("Burnley",{y:7, x:602, pos: 'top'});
      coord.set("Bury",{y:335, x:722, pos: 'top'});
      coord.set("Colne",{y:162, x:722, pos: 'bottom'});
      coord.set("Ellesmere Port",{y:738, x:157, pos: 'top'});
      coord.set("Fleetwood",{y:16, x:50, pos: 'bottom'});
      coord.set("Lancaster",{y:176, x:244, pos: 'top'});
      coord.set("Liverpool",{y:493, x:98, pos: 'top'});
      coord.set("Macclesfield",{y:737,x:770, pos: 'bottom'});
      coord.set("Manchester",{y:595, x:438, pos: 'bottom'});
      coord.set("Oldham",{y:497, x:835, pos: 'bottom'});
      coord.set("Preston",{y:257, x:46, pos: 'bottom'});
      coord.set("Rochdale",{y:205, x:774, pos: 'top'});
      coord.set("Stockport",{y:539, x:825, pos: 'top'});
      coord.set("Warrington & Runcorn",{y:476, x:338, pos: 'top'});
      coord.set("Wigan",{y:321, x:341, pos: 'right'});
      return coord;
    }
  }
  
  return false;
  
}

function prepare() {
    
    var actionForm = $("form[action='gameaction.php']");
    actionForm.addClass("user-action");
    var mainActionForm = actionForm.find('div:first')
    if (mainActionForm.find("input").length > 0) {
      mainActionForm.addClass('game-action-box');
    }
  
    //var board = $("body div:eq(2)");
    var board = $("form[action='gameaction.php']").prev("div");
    board.addClass("main-board");
    
    var playArea = $("<div/>").addClass("play-area");
    board.prev().after(playArea);
    
    var boardSwitch = board.find("div > a").first();
    boardSwitch.addClass("board-switch");
    
    //Store user name
    var loginBox = $("#loginbox");
    if (loginBox.find("form").length == 0) {//user is logged in 
        var userNameLine = loginBox.find("p:first").text().split(" ");
        username = userNameLine[userNameLine.length - 1].slice(0,-1);
        $(document).data("logged-user",username);
        console.log("Logged in as " + username);
    } else {
        console.log("User is not logged in");
    }

    //Store number of players
    var gameInfoBlock = $("form[action='gameaction.php'] > p");
    var gameInfoText = gameInfoBlock.text().split("\.")[0];
    var numberInText = gameInfoText.match(/\d+/g);
  
    $(document).data('number-of-players-started',numberInText[0]);
    $(document).data('number-of-players-current',numberInText[1]);

    //Store type of board
    var boardImageType = $(".main-board > img:first");
    if (boardImageType.attr("src").indexOf("0.png") >= 0) {
      $(document).data('board-type',"full");
    } else {
      $(document).data('board-type',"compact");
    }

    //assign class to player boards    
    var playerBoardsTitle = board.find("div > div > b:contains('Game status')");
    playerBoardsTitle.each(function() {
        var pbt = $(this);
        var mainDiv = pbt.parent().parent();
        mainDiv.addClass("player-board");
        var regExp = /\(([^)]+)\)/;
        var matches = regExp.exec($(pbt).children("a").text());
        mainDiv.data("player-nick",matches[1]);
        mainDiv.find('table tr').find('td:first').addClass('info-name');
        mainDiv.find('table tr').find('td:nth-child(2)').addClass('info-value');
        mainDiv.find('table tr:first').addClass('player-info-money');
        var tiles = mainDiv.find('div').filter(function() {
            var $this = $(this);
            return $this.css("width") == "48px" 
            && $this.css("height") == "48px";
        })
        tiles.addClass('tiles');

    });

    var gameInfo = actionForm.children("p:first");
    gameInfo.addClass("game-info");
    gameInfo.nextAll("p").addClass("game-info");

}


function rebuildInterface() {

  if (username !== undefined) {
    console.log("I can get the username");
    return;//do nothing
  }
  
  var actionForm = $("form.user-action");

  var boardSide = $("<div/>").addClass("board-side");
  boardSide.append(actionForm);
  
  var board = $(".main-board");
  
  var playArea = $("div.play-area");
  
  // box stuff
  playArea.append(board);
  playArea.append(boardSide);

  //box its own block
  var gameInfoBox = $("<div/>").addClass("form-info");
  var gameInfoP = $("p.game-info:first");
  //gameInfoP.after(gameInfoBox);
  gameInfoBox.append($("p.game-info"));
  
  //Add player board information below the form
  var username = getLoggedUser();  
  var playerboard = $("<div/>").addClass("extra-player-board-container-normal");
  var otherPlayerBoards = $("<div/>").addClass("extra-player-board-container-miniatures");

  //add game log
  var gameHistory = $("<div/>").addClass("game-history").attr("id","game-history");

  //set mini sizes, according number of players
  var currentPlayers = getNumberOfCurrentPlayers();

  //alocate the mini player boards
  if (username !== undefined) {
    var playerInfo = $("div.player-board");
    for (i = 0; i < playerInfo.length; i++) {
      var cloned = $(playerInfo[i]).clone();
      cloned.css({ position: '', left: '', top: ''});
      cloned.addClass("extra-player-board");
      cloned.find("a").each(function(event) {
          var el = $(this);
          el.attr("disabled", true);
          var originalOnClick = el.prop('onclick');
          el.on('click', function (evt) {
            if (! $(this).attr("disabled")) {
              originalOnClick.call(this,event)
              evt.preventDefault();
            } else {
              evt.preventDefault();
            }
          })
          el.prop("onclick",null);
        });

      var wrapbox = $("<div/>").addClass("scale-wrapper").append(cloned); //this wrapper is here because I was having problems
      //with height and scale, which left an empty space in screen
      if ($(playerInfo[i]).data("player-nick") == username) {
        playerboard.append(wrapbox);
        playerboard.find("a").attr("disabled", false);
      } else {
        var wrapper1 = $("<div/>").addClass("extra-player-board-container-mini")
        .addClass("extra-player-board-container-mini-"+ currentPlayers).append(wrapbox);
        wrapper1.on('click', function() {
          var bbc = $("div.extra-player-board-container-normal > div.scale-wrapper")
          var bboard = $(bbc).children("div.extra-player-board");
          var mbc = $(this).children("div.scale-wrapper");
          var mboard = $(mbc).children("div.extra-player-board");
          mbc.append(bboard);
          $(bboard).find("a").attr('disabled', true);
          bbc.append(mboard);
          $(mboard).find("a").attr('disabled', false);
        })
        otherPlayerBoards.append(wrapper1);
        
      }
    }
  }

  actionForm.append($(".game-action-board"));
  actionForm.append(playerboard);
  actionForm.append(otherPlayerBoards);
  
  actionForm.append(gameHistory);
  $("body").append($("<div id='gameHistoryHelper' style='display:none'/>"));

  actionForm.append(gameInfoBox);

  
  
  
  var boardType = getBoardType();
  var numberOfPlayers = getNumberOfPlayers();
  
  var coord = getCoordinates(numberOfPlayers,boardType);
  
  var cards = getCards();
  
  console.log("Using " + boardType + " board for " + numberOfPlayers + " players");
  if (coord == false) {
      console.log("I do not have coordinates for " + boardType + " board with " + numberOfPlayers + " players");
      return;
  }

  var industryCardContainer = $("<div/>").addClass("industry-cards-" + boardType).addClass("industry-cards");
  board.append(industryCardContainer);
  
  var indu = new Map();
  //indu.set('Coal Mine',{url:"https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/coal.png?alt=media&token=37a392d7-c2a6-44f3-bf7d-fc36da40d59c"});
  //indu.set('Cotton Mill',{url:"https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/cotton.png?alt=media&token=58270f82-d144-41af-a29e-e6abbf499e28"});
  //indu.set('Iron Works',{url:"https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/iron.png?alt=media&token=6dc1e5ce-a016-41d1-9be5-f0a967c80dfa"});
  //indu.set('Port',{url:"https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/port.png?alt=media&token=3b6b6fb0-261f-4dee-a0bd-14b0b15a05d2"});
  //indu.set('Shipyard',{url:"https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/shipyard.png?alt=media&token=cc8dc963-5ab0-4949-8889-db3de824db93"});

  //var locationImg = "https://firebasestorage.googleapis.com/v0/b/brass-8ba1c.appspot.com/o/location.png?alt=media&token=7c5b4284-174b-49b6-8de3-852574b67ff9";
  
  indu.set('Coal Mine',{url:"http://i.imgur.com/lhMbgOH.png"});
  indu.set('Cotton Mill',{url:"http://i.imgur.com/cb1RTT2.png"});
  indu.set('Iron Works',{url:"http://i.imgur.com/9iuGri6.png"});
  indu.set('Port',{url:"http://i.imgur.com/4lEGb99.png"});
  indu.set('Shipyard',{url:"http://i.imgur.com/kDdQ2Vm.png"});
  
  var visualCardContainer = $("<div/>");
  $(".main-board").append(visualCardContainer);

  var cardcounter = [];
  var industryCardPos = 0;
  for (i=0; i<cards.length; i++) {
    var currcard = cards[i];
    console.log("Assembling card:" + currcard);
    var c = coord.get(currcard);
    if (c !== undefined ) {
      //var card = $("<img src='https://cdnjs.cloudflare.com/ajax/libs/emojione/2.2.7/assets/png/0023-20e3.png'></img>");
      var cardU = $("<div></div>");
      cardU.css({position: "absolute",
                top: c.y,
                left: c.x});
      
      cardU.data("im",currcard);
      
      var card = $("<div></div>");
      cardU.addClass("card-pointer");
      cardU.addClass(getCityClassName(currcard));
      cardU.append(card);
      
      visualCardContainer.append(cardU);
      if (cardcounter[currcard] == undefined) cardcounter[currcard] = 1;
      else cardcounter[currcard]++;
      cardU.addClass("card-pointer-" + cardcounter[currcard]);
      
      cardU.on('click', function() {
        var cardName = $(this).data("im");
        var selectBox = $("#dCardX").find("select:first");
        var sbox = setSelectByText(selectBox,cardName);
        sbox.change();
        console.log(sbox.html());
        createSelect($(this));
      });
    } else {
      var ic = indu.get(currcard);
      if (ic !== undefined) {
        var cardUContainer = $("<div/>").addClass('industry-card');
        cardUContainer.data("im",currcard);
        
        var cardContainer = $("<img/>").attr("src",ic.url);
        cardContainer.addClass("industry-card-" + industryCardPos);
        
        cardUContainer.append(cardContainer);
        
        industryCardContainer.append(cardUContainer);
        industryCardPos++;
        cardUContainer.on('click', function() {
          var cardName = $(this).data("im");
          var selectBox = $("#dCardX").find("select:first");
          var sbox = setSelectByText(selectBox,cardName);
          sbox.change();
          createSelect($(this));
        });
      }
    }
    
    
  }
  
};

function loadLog() {
  var gameID = urlParam("GameID");
  var iframeSource = "viewticker.php?GameID=" + gameID;
  $historyLog = $("<iframe />").css({display:"none"}).attr('src',iframeSource);
  $("body").append($historyLog);
  $historyLog.load(function() {
    logEntries = $historyLog.contents().find("table[cellpadding='4']:last > tbody");
    var lastEvents = $(logEntries).slice(-(2*getNumberOfCurrentPlayers() -1));
    var logTable = $("<table/>").addClass("log-table");
    
    //revert the events body
    logTable.append(lastEvents.get().reverse());

    //revert the events inside each body
    lastEvents.each(function(elem,index){
      var arr = $.makeArray($("tr",this).detach());
      arr.reverse();
        $(this).append(arr);
    });

    logTable.find("tbody").find("tr:last").find("td:nth-child(2)").each(function(){
      var $this = $(this);
      $this.addClass("desc-column");
      var pcolorText = $(this).html().split(" ",2)
      if (pcolorText.length > 1) {
        var infoColor = "log-color-" + pcolorText[0].toLowerCase();
        $this.parents("tbody").addClass(infoColor);
      }
    });
    //remove date
    logTable.find("tbody").find("tr").find("td:first").each(function(){
      var $this = $(this);
      var date = $this.html().replace("<br>"," ");
      var localDate = new Date(date);
      $this.html("");
      $this.addClass("time-column");

      if (! isNaN(localDate.getTime())) {
        $this.parents("tr").attr("alt",localDate.toLocaleString());
        $this.parents("tr").attr("title",localDate.toLocaleString());
      }
    });


    $("#game-history").append(logTable);

  })

}


updateCSS();
//$( window ).load(function() {
$(document).ready(function() {
    prepare();
    rebuildInterface();
    loadLog();
});
  
 console.log("run");