// Define the lookup tables - There must be one for every language
trans = new Array();
trans["en"] = new Array();
trans["zh"] = new Array();
trans["fr"] = new Array();
trans["es"] = new Array();
trans["eo"] = new Array();
trans["it"] = new Array();

// Define languages that use NCR encoding
trans["zh"]["ncr.encoded"]=1;

// Define the translations
trans["en"]["SPECIFY_TEAM_NAME"] = "Team name must be specified";
trans["zh"]["SPECIFY_TEAM_NAME"] = "&#25152;&#26377;&#29699;&#21592;&#24517;&#39035;&#36873;&#25321;";

trans["en"]["SELECT_ALL_PLAYERS"] = "All Players must be selected";
trans["zh"]["SELECT_ALL_PLAYERS"] = "&#29699;&#38431;&#21517;&#31216;&#24517;&#39035;&#25351;&#23450;";

trans["en"]["TOO_MANY_PLAYERS_IN_SIDE"] = "Sorry, you cannot pick any more players from ";
trans["zh"]["TOO_MANY_PLAYERS_IN_SIDE"] = "&#24456;&#25265;&#27465;, &#24744;&#19981;&#33021;&#20877;&#36873;&#25321;&#26356;&#22810;&#29699;&#21592;&#20110; ";

trans["en"]["ALREADY_SELECTED"] = "Oops! You have already selected ";
trans["zh"]["ALREADY_SELECTED"] = "&#22114;! &#24744;&#24050;&#32463;&#36873;&#25321;&#20102;&#36825;&#20010; ";

trans["en"]["NOT_ENOUGH_MONEY"] = "Sorry, you do not have enough money left for ";
trans["zh"]["NOT_ENOUGH_MONEY"] = "&#24456;&#25265;&#27465;, &#24744;&#27809;&#26377;&#36275;&#22815;&#37329;&#39069;&#21097;&#19979;&#21435; ";

trans["en"]["NO_MORE_TRANSFERS"] = "Sorry, you do not have any transfers left";
trans["zh"]["NO_MORE_TRANSFERS"] = "&#24456;&#25265;&#27465;, &#24744;&#27809;&#26377;&#20313;&#19979;&#30340;&#36716;&#20250;&#21517;&#39069;";

trans["en"]["UNLIMITED"] = "unlimited";
trans["zh"]["UNLIMITED"] = "&#26080;&#38480;";

trans["en"]["TOO_MANY_TEAMS"] = "Sorry, you now have the maximum number of teams.";
trans["zh"]["TOO_MANY_TEAMS"] = "&#24456;&#25265;&#27465;, &#24744;&#29616;&#22312;&#24050;&#26377;&#21040;&#36798;&#19978;&#38480;&#30340;&#29699;&#38431;";

trans["en"]["CONFIRM_TRANSFERS"] = "Continue with {1} transfers?";
trans["zh"]["CONFIRM_TRANSFERS"] = "&#32487;&#32493;&#36827;&#34892; {1} &#36716;&#20250;?";

trans["en"]["NO_TEAMS"] = "You must first add some teams!";
trans["zh"]["NO_TEAMS"] = "&#24744;&#24517;&#39035;&#20808;&#22686;&#28155;&#29699;&#38431;";

trans["en"]["CONFIRM_TEAM"] = "Are you sure that you would like to continue with {1} team?";
trans["zh"]["CONFIRM_TEAM"] = "&#24744;&#26159;&#21542;&#30830;&#23450;&#36873;&#25321;{1}&#29699;&#38431;";

trans["en"]["CONFIRM_TEAMS"] = "Are you sure that you would like to continue with {1} teams?";
trans["zh"]["CONFIRM_TEAMS"] = "&#24744;&#26159;&#21542;&#30830;&#23450;&#36873;&#25321;{1}&#29699;&#38431;";

trans["en"]["DUPLICATE_RACE_SELECTED"] = "You can not select the same race twice";

trans["en"]["SELECT_COURSE_RACE_TIP"] = "Please select a course, race, and horse for each tip";

trans["en"]["SELECT_ALL_TIPS"] = "Please select all tips";
            
// Flash Game Translations                  
trans["eo"]["m"] = "m"; // million        
trans["eo"]["SAVE"] = "SALVE";  
trans["eo"]["FIELD"] = "CAMPO";   
trans["eo"]["NOTEBOOK"] = "NOTAS";
trans["eo"]["SAVING"] = "SALVA";
trans["eo"]["SAVE TEAM"] = "GUARDAR EQUIPO";
trans["eo"]["SAVED TEAMS"] = "EQUIPOS";
trans["eo"]["FORMATIONS"] = "FORMACIONES";
trans["eo"]["BUDGET"] = "PRESUPUESTO";
trans["eo"]["TOTAL BUDGET"] = "TOTAL";
trans["eo"]["USED"] = "UTILIZADO";
trans["eo"]["AVAILABLE"] = "DISPONIBLE";
trans["eo"]["SCORES"] = "RESULTADOs";
trans["eo"]["OVERALL SCORE"] = "TOTALE PUNTOS";
trans["eo"]["OVERALL POSITION"] = "GENERAL POSICION";
trans["eo"]["ROUND SCORE"] = "PUNTOS";
trans["eo"]["ROUND POSITION"] = "POSICION";
trans["eo"]["MINI LEAGUE POSITION"] = "MINI-LIGA POSICION";
trans["eo"]["SEARCH"] = "BUSQUEDA";
trans["eo"]["Striker"] = "Delantero";
trans["eo"]["strikers"] = "delanteros";
trans["eo"]["Midfielder"] = "Centrocampista";
trans["eo"]["midfielders"] = "centrocamps";
trans["eo"]["Defender"] = "Defensa";
trans["eo"]["defenders"] = "defensas";
trans["eo"]["Goalkeeper"] = "Portero";
trans["eo"]["GOALKEEPER"] = "PORTERO";
trans["eo"]["DEFENDER"] = "DEFENSA";
trans["eo"]["MIDFIELDER"] = "CENTROCAMPISTA";
trans["eo"]["STRIKER"] = "DELANTERO";
trans["eo"]["GOALKEEPER,DEFENDER"] = "PORTERO,DEFENSA";
trans["eo"]["GOALKEEPER,DEFENDER,MIDFIELDER"] = "PORTERO,DEFENSA,CENTROCAMPISTA";
trans["eo"]["GOALKEEPER,DEFENDER,MIDFIELDER,STRIKER"] = "PORTERO,DEFENSA,CENTROCAMPISTA,DELANTERO";
trans["eo"]["STRIKER,MIDFIELDER,DEFENDER,GOALKEEPER"] = "DELANTERO,CENTROCAMPISTA,DEFENSA,PORTERO";
trans["eo"]["STRIKER,MIDFIELDER,DEFENDER"] = "DELANTERO,CENTROCAMPISTA,DEFENSA";
trans["eo"]["STRIKER,MIDFIELDER"] = "DELANTERO,CENTROCAMPISTA";
trans["eo"]["STRIKER,DEFENDER,GOALKEEPER"] = "DELANTERO,DEFENSA,PORTERO";
trans["eo"]["STRIKER,DEFENDER"] = "DELANTERO,DEFENSA";
trans["eo"]["STRIKER,GOALKEEPER"] = "DELANTERO,PORTERO";
trans["eo"]["STRIKER,MIDFIELDER,GOALKEEPER"] = "DELANTERO,CENTROCAMPISTA,PORTERO";
trans["eo"]["MIDFIELDER,DEFENDER,GOALKEEPER"] = "CENTROCAMPISTA,DEFENSA,PORTERO";
trans["eo"]["MIDFIELDER,DEFENDER"] = "CENTROCAMPISTA,DEFENSA";
trans["eo"]["MIDFIELDER,GOALKEEPER"] = "CENTROCAMPISTA,PORTERO";
trans["eo"]["DEFENDER,GOALKEEPER"] = "DEFENSA,PORTERO";
trans["eo"]["goalkeepers"] = "porteros";
trans["eo"]["goalkeeper"] = "Portero";
trans["eo"]["defender"] = "Defensa";
trans["eo"]["midfielder"] = "Centrocampo";
trans["eo"]["striker"] = "Delantero";
trans["eo"]["TRANSFERS"] = "FICHAJES";
trans["eo"]["EDITING TEAM"] = "EQUIPO CAMBIO";
trans["eo"]["VIEWING TEAM"] = "VISTA DEL EQUIPO";
trans["eo"]["PICK YOUR PLAYERS"] = "ESCOJA A SUS JUGADORES";
trans["eo"]["Pick your players"] = "ESCOJA A SUS JUGADORES";
trans["eo"]["Pick Your Players"] = "ESCOJA A SUS JUGADORES";
trans["eo"]["NO PLAYERS COULD BE FOUND"] = "NINGUNOS JUGADORES PODRIAN SER ENCONTRADOS";
trans["eo"]["YOU HAVE NO TRANSFERS LEFT"] = "NO LE QUEDA TRANSFERENCIAS";
trans["eo"]["OK"] = "BUENO";
trans["eo"]["CANCEL"] = "CANCELE";
trans["eo"]["FORMATIONS"] = "FORMACIONES";
trans["eo"]["SELECT"] = "SELECCIONA";
trans["eo"]["TEAM NAME"] = "NOMBRE EQUIPO";
trans["eo"]["LOAD"] = "CARGA";
trans["eo"]["SELECT A TEAM"] = "SELECCIONA EQUIPO";
trans["eo"]["Edit Team"] = "Redacte el Equipo";
trans["eo"]["Current Team"] = "Alineacion Actual";
trans["eo"]["player"] = "jugador";
trans["eo"]["PLAYERS"] = "JUGADORES";
trans["eo"]["points"] = "puntos";
trans["eo"]["team"] = "equipo";
trans["eo"]["value"] = "valor";
trans["eo"]["Start Match"] = "Inicia el partido";
trans["eo"]["Substitute"] = "Suplente";
trans["eo"]["Goal"] = "Gol";
trans["eo"]["Key Goal Contribution"] = "Contribucion Clave";
trans["eo"]["Clean Sheet"] = "Valla Invicta";
trans["eo"]["Conceded Goal"] = "Gol Recibido";
trans["eo"]["Yellow Card"] = "Tarjeta Amarilla";
trans["eo"]["Red Card"] = "Tarjeta Roja";
trans["eo"]["{1} IS ALREADY IN YOUR TEAM"] = "{1} YA ESTA EN TU EQUIPO";
trans["eo"]["YOU CANNOT PICK ANY MORE PLAYERS FROM {1}"] = "USTED NO PUEDE ESCOGER CUALQUIERA MAS JUGADORES DE";
trans["eo"]["YOU CANNOT AFFORD {1}"] = "USTED NO PUEDE PROPORCIONAR {1}";
trans["eo"]["YOU HAVE ENOUGH {1}"] = "USTED TIENE BASTANTE {1}";
trans["eo"]["YOU NEED A {1}"] = "NECESITAS UN {1}";
trans["eo"]["HELP"] = "Ayuda";
trans["eo"]["PITCH"] = "CAMPO";
trans["eo"]["UNLIMITED"] = "ilimitado";
trans["eo"]["PLAYER SEARCH"] = "BUSQUEDA DE JUGADOR";
trans["eo"]["PLAYER DETAILS"] = "Datos Jugador";
trans["eo"]["Save team to"] = "Salve el equipo a";
trans["eo"]["SAVE"] = "SALVE";
trans["eo"]["OR"] = "O";
trans["eo"]["MANAGERS NOTEBOOK"] = "CUADERNO DE ENTRENADORES";
trans["eo"]["To save switch to pitch view"] = "Para guardar, selecciona Vista del Campo";
trans["eo"]["VALUE"] = "VALOR";
trans["eo"]["NAME"] = "NOMBRE";
trans["eo"]["BENCH"] = "BANQUILLO";
trans["eo"]["Instructions seved teams."] = "Escoja cual de sus equipos para ver";
trans["eo"]["Instructions Save Team."] = "Escoja cual de sus equipos para ver";
trans["eo"]["Instructions Save Team"] = "Escoja cual de sus equipos para ver";
trans["eo"]["Instructions save team."] = "Escoja cual de sus equipos para ver";
trans["eo"]["Instructions save team"] = "Escoja cual de sus equipos para ver";
trans["eo"]["Instructions register team."] = "Usted debe tomar uno del salva las opciones para confirmar sus cambios";
trans["eo"]["ADD PLAYER"] = "Agregar";
trans["eo"]["REMOVE PLAYER"] = "QUITE";
trans["eo"]["YOUR TEAM HAS ERRORS"] = "TU EQUIPO TIENE ERRORES";
trans["eo"]["Your team is not complete please add a player to every position."] = "TU EQUIPO NO ESTA COMPLETO. POR FAVOR AGREGA UN JUGADOR EN CADA POSICION.";
trans["eo"]["PICK YOUR PLAYERS"] = "ESCOGE TUS JUGADORES";
trans["eo"]["PICK YOUR"] = "ESCOGE TUS";
trans["eo"]["PLAYER ADDED"] = "EL JUGADOR FUE AGREGADO";
trans["eo"]["WEEKLY POINTS"] = "Puntos semanales";
trans["eo"]["WEEKLY POSITION"] = "Posición semanal";
trans["eo"]["MONTHLY POINTS"] = "Puntos mensuales";
trans["eo"]["MONTHLY POSITION"] = "Posición mensual";
trans["eo"]["FIXTURES"] = "CALENDARIO";
trans["eo"]["Next seven days"] = "Próximos siete días";
trans["eo"]["Thank you your team has been saved"] = "Gracias que han ahorrado a su equipo";
trans["eo"]["Sub Player"] = "Jugador substituto";
trans["eo"]["Player Info"] = "Información del jugador";
trans["eo"]["Undo"] = "Cancelación";
trans["eo"]["Transfer Player"] = "Jugador de la transferencia";
trans["eo"]["Option: 1) Save your team for the next deadline freeze."] = "Opción 1) excepto su equipo a la fecha próxima.";
trans["eo"]["Option: 2) Save your team for a future team freeze. Ideal if you are going to be away from your computer for a while. Use the drop down boxes to select a date."] = "Opción 2) excepto su equipo por una fecha futura. Utilice la lista para elegir su fecha.";
trans["eo"]["OR"] = "O";
trans["eo"]["LATEST FIXTURES"] = "CALENDARIO";
trans["eo"]["AUTO SELECT"] = "Auto-Seleccion";
trans["eo"]["FORM GRAPH"] = "Formar Grafico";
trans["eo"]["TOTAL POINTS"] = "Total de Puntos";
trans["eo"]["POINTS"] = "PUNTOS";
                                   
// This function will allow translating of a message
function translate(message) {
 
  var translated = undefined;

  // If the language isn't set then set it to english
  if (window.languageCode == undefined) {
   
    window.languageCode = "en";
  }

  var languageLookup = trans[window.languageCode];

  // If is a language lookup for this language then try to use it  
  if (languageLookup != undefined) {
    
    translated = languageLookup[message];
  }

  // If we haven't translated yet then translate into english
  if (languageCode != "en" &&
      translated == undefined) {

    languageLookup = trans["en"];
    translated = languageLookup[message];
  }

  // If we still haven't successfully translated then return the original message
  if (translated == undefined) {

    // console.log(message);
    translated = message;
  }

  // If this language is NCR encoded then decode it
  if (languageLookup["ncr.encoded"] == 1) {

    translated = decodeNCR(translated);
  }

  return translated;
}


// This function will replace {1} in the message with the specified variable
function translate1(message, variable) {
  
  var translated = translate(message);
  return translated.replace("{1}", variable);
}


// This function will replace {1} and {2} in the message with the specified variables
function translate2(message, variable1, variable2) {
  
  var translated = translate1(message, variable1);
  return translated.replace("{2}", variable2);
}

// This function will replace {1} and {2} and {3} in the message with the specified variables
function translate3(message, variable1, variable2, variable3) {
  
  var translated = translate2(message, variable1, variable2);
  return translated.replace("{3}", variable3);
}

function abbreviate(message, length) {

  var abbreviation = undefined;
  
  var languageLookup = trans["abbreviation"];
  if (languageLookup != undefined) {
    
    abbreviation = languageLookup[message];
  }

  // If we didn't find an abbreviation then use the original message
  if (abbreviation == undefined) {

    // console.log(message);
    abbreviation = message;
  }
  
  // Truncate the abbreviation
  if (abbreviation.length > length) {
    
    abbreviation = abbreviation.substring(0, length);
  }

  return abbreviation;
}

// This function will decode NCR encoded text 
function decodeNCR(encodedText) {

  return convertCP2Char(convertDecNCR2CP(encodedText));
}


// This function converts from a code point to a character
function convertCP2Char ( textString ) {

  var outputString = '';
  textString = textString.replace(/^\s+/, '');
  if (textString.length == 0) { return ""; }
    textString = textString.replace(/\s+/g, ' ');
  var listArray = textString.split(' ');
  for ( var i = 0; i < listArray.length; i++ ) {
    var n = parseInt(listArray[i], 16);
    if (n <= 0xFFFF) {
      outputString += String.fromCharCode(n);
    } else if (n <= 0x10FFFF) {
      n -= 0x10000
      outputString += String.fromCharCode(0xD800 | (n >> 10)) + String.fromCharCode(0xDC00 | (n & 0x3FF));
    } else {
      outputString += '!erreur ' + dec2hex(n) +'!';
    }
  }
  return( outputString );
}

// This function converts from a character to a code point
function convertChar2CP ( textString ) {

  var outputString = "";
  var haut = 0;
  var n = 0;
  for (var i = 0; i < textString.length; i++) {
    var b = textString.charCodeAt(i);  // alert('b:'+dec2hex(b));
    if (b < 0 || b > 0xFFFF) {
      outputString += '!erreur ' + dec2hex(b) + '!';
    }
    if (haut != 0) {
      if (0xDC00 <= b && b <= 0xDFFF) {
        outputString += dec2hex(0x10000 + ((haut - 0xD800) << 10) + (b - 0xDC00)) + ' ';
        haut = 0;
        continue;
      } else {
        outputString += '!erreur ' + dec2hex(haut) + '!';
        haut = 0;
      }
    }
    if (0xD800 <= b && b <= 0xDBFF) {
      haut = b;
    } else {
      outputString += dec2hex(b) + ' ';
    }
  }
  return( outputString.replace(/ $/, '') );
}

// This function converts from NCR to a code point
function convertDecNCR2CP ( textString ) {

  outputString = '';
  inNCR = false;
  tempString = '';
  for (var i=0; i<textString.length; i++) {   
    if (textString.charAt(i) == '&') { // &
      inNCR = true;
      if (tempString != '') { outputString += convertChar2CP( tempString )+' '; }
      tempString = ''; 
      }
    else if ( inNCR && textString.charAt(i) == ';' ) { // ;
      inNCR = false;
      outputString += dec2hex(parseInt(tempString.substring(1, tempString.length), 10))+' ';
      tempString = '';
      }
    else {
      tempString += textString.charAt(i);
      }
    }
  outputString = outputString.substring(0, outputString.length-1);
  if (tempString != '') { outputString += ' '+convertChar2CP( tempString ); }
  return( outputString );
}

// This function converts from decimal to hex
function dec2hex ( textString ) {

   return (textString+0).toString(16).toUpperCase();
}