// 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();

// Define languages that use NCR encoding
trans["zh"]["ncr.encoded"]=1;
trans["en"]["ncr.encoded"]=1;

trans["en"]["HELLO"]="&#24744;&#26159;&#21542;&#30830;&#23450;&#36873;&#25321;{1}&#29699;&#38431;";

// 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? Active on {2} if confirmed by the first scheduled start of play on that day";
trans["zh"]["CONFIRM_TRANSFERS"] = "&#32487;&#32493;&#36827;&#34892; {1} &#36716;&#20250;?";

trans["en"]["CONFIRM_NO_TRANSFERS"] = "Continue with {1} transfers?";

trans["en"]["CONFIRM_TRANSFER_CAPTAIN_CHANGES"] = "You have made changes:\n\n{1} Transfers\n{2} Captain Change\n\nThese changes will become active on {3}\nClick OK to proceed with these changes";

trans["en"]["CONFIRM_CAPTAIN_CHANGES"] = "Continue with {1} captain change? Active on {2}";

trans["en"]["SELECT_A_CAPTAIN"] = "Please nominate a Captain";

trans["en"]["SELECT_CAPTAINS"] = "Please nominate your Star Players";

trans["en"]["SPECIFY_SMS_ALERTS"] = "Please confirm whether you want SMS alerts for this team";

trans["en"]["NO_TEAMS"] = "Click on the \"ADD NEW TEAM\" button to confirm your selection before proceeding.";
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";

// Define the abbreviations
trans["abbreviation"] = new Array();
trans["abbreviation"]["Manchester United"] = "MNU";
trans["abbreviation"]["Manchester City"] = "MCY";
trans["abbreviation"]["West Ham United"] = "WHU";
trans["abbreviation"]["West Bromwich Albion"] = "WBA";
trans["abbreviation"]["Bristol Rovers"] = "BRV";
trans["abbreviation"]["Chesterfield"] = "CFD";
trans["abbreviation"]["Sheffield Utd"] = "SHU";
trans["abbreviation"]["Sheffield Wed"] = "SWD";
                
// Flash Game Translations                  
trans["fr"]["m"] = "m"; // million        
trans["fr"]["SAVE"] = "french";          
trans["fr"]["FIELD"] = "french";          
trans["fr"]["NOTEBOOK"] = "french";
trans["fr"]["SAVING"] = "french";
trans["fr"]["SAVE TEAM"] = "french";
trans["fr"]["SAVED TEAMS"] = "french";
trans["fr"]["FORMATIONS"] = "french";
trans["fr"]["BUDGET"] = "french";
trans["fr"]["TOTAL BUDGET"] = "french";
trans["fr"]["USED"] = "french";
trans["fr"]["AVAILABLE"] = "french";
trans["fr"]["SCORES"] = "french";
trans["fr"]["TOTAL POINTS"] = "french";
trans["fr"]["OVERALL POSITION"] = "french";
trans["fr"]["ROUND POINTS"] = "french";
trans["fr"]["ROUND POSITION"] = "french";
trans["fr"]["MINI LEAGUE POSITION"] = "french";
trans["fr"]["SEARCH"] = "french";
trans["fr"]["Striker"] = "french";
trans["fr"]["strikers"] = "french";
trans["fr"]["Midfielder"] = "french";
trans["fr"]["midfielders"] = "french";
trans["fr"]["Defender"] = "french";
trans["fr"]["defenders"] = "french";
trans["fr"]["Goalkeeper"] = "french";
trans["fr"]["goalkeepers"] = "french";
trans["fr"]["TRANSFERS"] = "french";
trans["fr"]["EDITING TEAM"] = "french";
trans["fr"]["VIEWING TEAM"] = "french";
trans["fr"]["PICK YOUR PLAYERS"] = "french";
trans["fr"]["NO PLAYERS COULD BE FOUND"] = "french";
trans["fr"]["YOU HAVE NO TRANSFERS LEFT"] = "french";
trans["fr"]["OK"] = "french";
trans["fr"]["CANCEL"] = "french";
trans["fr"]["FORMATIONS"] = "french";
trans["fr"]["SELECT"] = "french";
trans["fr"]["TEAM NAME"] = "french";
trans["fr"]["LOAD"] = "french";
trans["fr"]["SELECT A TEAM"] = "french";
trans["fr"]["Edit Team"] = "french";
trans["fr"]["Current Team"] = "french";
trans["fr"]["player"] = "french";
trans["fr"]["points"] = "french";
trans["fr"]["team"] = "french";
trans["fr"]["value"] = "french";
trans["fr"]["Start Match"] = "french";
trans["fr"]["Substitute"] = "french";
trans["fr"]["Goal"] = "french";
trans["fr"]["Key Goal Contribution"] = "french";
trans["fr"]["Clean Sheet"] = "french";
trans["fr"]["Conceded Goal"] = "french";
trans["fr"]["Yellow Card"] = "french";
trans["fr"]["Red Card"] = "french";
trans["fr"]["{1} IS ALREADY IN YOUR TEAM"] = "french";
trans["fr"]["YOU CANNOT PICK ANY MORE PLAYERS FROM {1}"] = "french";
trans["fr"]["YOU CANNOT AFFORD {1}"] = "french";
trans["fr"]["YOU HAVE ENOUGH {1}"] = "french";
trans["fr"]["YOU NEED A {1}"] = "french";
                                   
// 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 will encode NCR encoded text 
function encodeNCR(text) {

  return convertCP2DecNCR(convertChar2CP(text));
}


// 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 );
}

function convertCP2DecNCR(ts) { 

  var outputString = ""; 
  ts = ts.replace(/^\s+/, ''); 
  if(ts.length == 0) return ""; 
  ts = ts.replace(/\s+/g, ' '); 
  var listArray = ts.split(' '); 
  for(var i = 0; i < listArray.length; i++) { 
  
    var n = parseInt(listArray[i], 16); 
    outputString += ('&#' + 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();
}
