var formName = "reg";
var budgetPrefix = unescape("%A3");
var budgetSuffix = "m";

var xTerminatorOption_l = "<option value=0>------------------------------------------</option>";
var dispPlayerValues_l = [];

var bValidate=false;
var bRecalculate_l = true;
var selectNumber;

function imposeMaxLength(Object, MaxLen)
{
  return (Object.value.length < MaxLen);
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}


function setHiddenField(form, name, value) {

  var hiddenField = form.elements[name];

  if (!isValidObject(hiddenField)) {

    var hiddenField = document.createElement("input");
    hiddenField.type = "hidden";
    hiddenField.name = name;
    form.appendChild(hiddenField);
  }

  hiddenField.value = value;     
}

function isValidObject(objToTest) {

  if (null == objToTest) {
     
    return false;
  }

  if ("undefined" == typeof(objToTest) ) {

    return false;
  }

  return true;
}

function select(form, element, value)
{ 
  if ("money" == element)
  {
    if (value.charAt(value.length - 1) == 'm')
    {
      value = value.substring(1, (value.length - 1));
    }
    else
    {
      value = value;
    }
  }

  var index=0;

  var type=document.forms[form].elements[element].type;

  if ("text" == type)
  {
    document.forms[form].elements[element].value=value;
  }
  else if ("check" == type)
  {
    document.forms[form].elements[element].checked = ("on" == value);
  }
  else if ("radio" == type)
  {
    radios = document.forms[form].elements[element];
    for (loop=0; loop < radios.length && (0 == index); loop++)
    {
      if (value == radios[loop].value)
      {
        index = loop;
      }
    }
    radios[index].checked=true;
  }
  else if ("select-one" == type)
  {
    if (0 != value)
    {
      bRecalculate_l = false;
      options = document.forms[form].elements[element].options;
      for (loop=0; loop < options.length && (0 == index); loop++)
      {
        if (value == options[loop].value)
        {
          index = loop;
        }
      }
      options[index].selected=true;
      bRecalculate_l = true;
    }
  }

  return;
}

function getMatchingIndex(aiSearchArray_p, iSearch_p)
{
  iReturn_l = -1;

  for (z=0; (z<aiSearchArray_p.length) && (iReturn_l < 0); z++)
  {
    if (iSearch_p == aiSearchArray_p[z])
    {
      iReturn_l = z;
    }
  }

  return iReturn_l;
}

function deleteRows(otable, firstRow) {
 
  var deletecount=otable.getElementsByTagName('tr').length - firstRow; 
  for (var i=0; i<deletecount; i++) {
  
    otable.deleteRow(firstRow); 
  }
}

var bReset_l=false;
function resetForm()
{
  var elements = oRegForm.elements;
  for (var i=0; i<elements.length; i++)
  {
    if ("select-one" == elements[i].type)
    {
      elements[i].selectedIndex = 0;
      bValidate = false;
      bReset_l=true;
    }
  }
  
  oRegForm.elements["money"].value = budgetPrefix + dispMoney +budgetSuffix;
}

function isdefined(object, variable) {

  return (typeof(eval(object)[variable]) != 'undefined');
}

function validateForm()
{

  if (bReset_l)
  {
     bSuccess_l = false;  
     bReset_l=false;
  }
  else if (bValidate == false)
  {
    // Check no fields have values of 0
    var oOptions_l = oRegForm.elements;
    var bSuccess_l = true;
    for (var i=0; i<oOptions_l.length && bSuccess_l; i++)
    {
      
      if (oOptions_l[i].name == "smsAlerts" &&
          oOptions_l[i].value == "")
      {
        alert (translate("SPECIFY_SMS_ALERTS"));
        bSuccess_l = false;
      }
      else if (oOptions_l[i].name == "teamName" &&
               oOptions_l[i].value == "")
      {
        alert (translate("SPECIFY_TEAM_NAME"));
        bSuccess_l = false;
      }
      else if (!isdefined(window, "dontCheckAllPlayers") && 
               oOptions_l[i].type == "select-one" &&
               oOptions_l[i].name.indexOf("player") == 0 &&
               oOptions_l[i][oOptions_l[i].selectedIndex].value <= 0)
      {
        alert (translate("SELECT_ALL_PLAYERS"));
        bSuccess_l = false;
      }
    }
  }

  return bSuccess_l;
}

function addCommission() {

  for (var i=0; i<aiPlayerIDs_l.length; i++) {
    
    // Don't add commision for players that are already owned
    if (getMatchingIndex(aiSelectedTeams_l[0], aiPlayerIDs_l[i]) < 0) {

      aiPlayerValues_l[i] = roundNumber(aiPlayerValues_l[i] * commissionRate);
    }
  }
}

function countTransfers() {

  var oOptions_l = oRegForm.elements;
  var transferCount = 0;
  for (var i=0; i<oOptions_l.length; i++) {
  
    if (oOptions_l[i].name.charAt(0) == 'p' &&
        oOptions_l[i].type == "select-one") {
        
      var iPlayerID_l = oOptions_l[i][oOptions_l[i].selectedIndex].value;
      if (null != iPlayerID_l &&
          0 != iPlayerID_l) {
          
        var originalPlayer = 0;
        for (var originalIndex=0; originalIndex < aiSelectedTeams_l[0].length; originalIndex++) {
          
          if (iPlayerID_l == aiSelectedTeams_l[0][originalIndex]) {
              
            originalPlayer = 1;
          } 
        }
        
        if (originalPlayer == 0) {
          
          transferCount++;
        }
      }
    }  
  }  
  return transferCount;
}

function formatCurrency(symbol, num, showDecimals) {
  num = num.toString().replace(/\$|\,/g,'');
  if(isNaN(num))
  num = "0";
  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num*100+0.50000000001);
  cents = num%100;
  num = Math.floor(num/100).toString();
  if(cents<10)
  cents = "0" + cents;
  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
  num = num.substring(0,num.length-(4*i+3))+','+
  num.substring(num.length-(4*i+3));

  if (showDecimals) {

    return (((sign)?'':'-') + symbol + num + '.' + cents);
  } else {

    return (((sign)?'':'-') + symbol + num);
  }
}


function roundNumber(rnum) {
  var rlength = 3; // The number of decimal places to round to
  if (rnum > 8191 && rnum < 10485) {
    rnum = rnum-5000;
    var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
    newnumber = newnumber+5000;
  } else {
    var newnumber = Math.round(rnum*Math.pow(10,rlength))/Math.pow(10,rlength);
  }
  
  return newnumber;
}

function validateSelect(thisselect)
{
  var oOptions_l = oRegForm.elements;
  var iPlayerID_l = thisselect.options[thisselect.selectedIndex].value;
  var iPlayerIndex_l = getMatchingIndex(aiPlayerIDs_l, iPlayerID_l);
  var xPlayerName_l = axPlayerNames_l[iPlayerIndex_l];
  var aiSidesSelected_l = [];
  var aiSelectedPlayers_l = [];
  var iRemainingTransfers = 0;
  
  // If this is a transfer form then calculate transfers remaining
  if (eval(document.reg["remainingTransfers"])) {
    
    iRemainingTransfers = aiSelectedRemainingTransfers_l[0] - countTransfers();
  }

  // Determine selected team
  var iCost_l = dispMoney;
  var bSuccess_l = true;
  for (var i=0; i<oOptions_l.length && bSuccess_l && bRecalculate_l; i++)
  {
    if (oOptions_l[i].name.charAt(0) == 'p' &&
        oOptions_l[i].type == "select-one")
    {
      var iPlayerID_l = oOptions_l[i][oOptions_l[i].selectedIndex].value;
      var iIndex_l = getMatchingIndex(aiPlayerIDs_l, iPlayerID_l);

      if (null != iPlayerID_l &&
          0 != iPlayerID_l)
      {
        
        iCost_l -= aiPlayerValues_l[iIndex_l];
        iCost_l = roundNumber(iCost_l);
        var iSideIndex_l = getMatchingIndex(aiSideIDs_l, aiPlayerSides_l[iIndex_l]);
        var iSideID_l = aiSideIDs_l[iSideIndex_l];
        var iSideCount_l = aiSidesSelected_l[iSideID_l];
        if (null == iSideCount_l)
        {
          iSideCount_l = 1;
        }
        aiSidesSelected_l[iSideID_l] = iSideCount_l + 1;

        if (iSideCount_l > maximumPlayersPerSide)
        {
          alert(translate("TOO_MANY_PLAYERS_IN_SIDE") + axSideNames_l[iSideIndex_l]);
          bSuccess_l = false;
        }
        else if (-1 != getMatchingIndex(aiSelectedPlayers_l, iPlayerID_l))
        {
          alert(translate("ALREADY_SELECTED") + xPlayerName_l);
          bSuccess_l = false;
        }
        else if (iCost_l < 0)
        {
          alert(translate("NOT_ENOUGH_MONEY") + xPlayerName_l);
          bSuccess_l = false;
        }
        else if (iRemainingTransfers < 0)
        {
          alert(translate("NO_MORE_TRANSFERS"));
          bSuccess_l = false;
        }
        else
        {
          aiSelectedPlayers_l[aiSelectedPlayers_l.length] = iPlayerID_l;
        }        
      }
    }
  }
  var dispCost_l = iCost_l;
  oRegForm.elements["money"].value = budgetPrefix + dispCost_l +budgetSuffix;
  
  if (eval(document.reg["remainingTransfers"])) {
  
    if (iRemainingTransfers > 250) {
    
      oRegForm.elements["remainingTransfers"].value = translate("UNLIMITED");
    } else {
    
      oRegForm.elements["remainingTransfers"].value = iRemainingTransfers;
    }
  }
    
  if (false == bSuccess_l)
  {

    if (iRemainingTransfers < 0) {
    
      // Find original player for this select
      var index = thisselect.name.substring("player".length) - 1;
      var originalId = aiSelectedTeams_l[0][index];
      //select.selectedIndex = 0;
      //alert(index + ":" + select.name + ":" + originalId);
      select("reg", thisselect.name, originalId);
    } else {
    
      thisselect.selectedIndex = 0;
    }
    validateSelect(thisselect);
  }

  return iReturn_l;
}

function addCategoryOptions(selectname, catidx)
{
  var select = oRegForm.elements[selectname];
  select.length = 1;
  var sideid = 0;
  var sidenameid = 0;
  var catid = aiCatIDs_l[catidx - 1];

  for (i=0; i<(aiPlayerIDs_l.length - 1); i++)
  {
    if (catid == aiPlayerCats_l[i])
    {
      if (sideid != aiPlayerSides_l[i] &&
          showSides == "Y") 
      {
          
        newindex = select.options.length;
        sideid = aiPlayerSides_l[i];
        
        for (j=0; j<(aiSideIDs_l.length - 1); j++)
        {
          if (aiSideIDs_l[j] == sideid)
          {
            sidenameid=j;
          }
        }
        
        select.options[newindex] = new Option("", 0, true, false);      
        newindex++;
        select.options[newindex] = new Option(axSideNames_l[sidenameid], 0, true, false);   
        newindex++;
      }
      newindex = select.options.length;
            
      if (dispMoney > 0) {            
      
        select.options[newindex] = new Option(" " + axPlayerNames_l[i] + " " + dispPlayerValues_l[i], aiPlayerIDs_l[i], true, false);
      } else {
      
        select.options[newindex] = new Option(" " + axPlayerNames_l[i], aiPlayerIDs_l[i], true, false);
      }
    }
  }

  select.options[0].selected = true;

}

function selectRandomPlayer(aiPlayerCategory, aiCurrentSelection)
{
  var iSelectedPlayerIndex = Math.floor((aiPlayerCategory.length) * Math.random());

  if (getMatchingIndex(aiCurrentSelection, aiPlayerCategory[iSelectedPlayerIndex]) != -1)
  {
    iSelectedPlayerIndex = -1;
  }
  return iSelectedPlayerIndex;
}

function randomTeam()
{
  oRegForm = document.forms[formName];
  //TODO: values for random should be dynamic
  var iMaxBudget = dispMoney ; 
  var iTotalCost = 0;    
  var iMaxPerSide = maximumPlayersPerSide; 
  var iPlayerCount=0;    
  var aiSelectedPlayers = [];
  var aiSelectedPlayersCat = [];
  var iSelectedPlayerIndex = 0;
  var aiSidesSelected = [];
  var aiSelectedPlayerCosts = [];
  var iSideIndex = 0;
  var iPlayerIndex = 0;
  var iSideID = 0;
  var iSideCount = 0;
  var aiNoOfPlayersInCat = [];
  a2iPlayers = new Array(aiCatIDs_l.length-1);
  a2iPlayerCosts = new Array(aiCatIDs_l.length-1);
  var iNoOfPlayersInCat=0;

  for (var i=0; i < (aiCatIDs_l.length-1); i++)
  {
    a2iPlayers[i] = new Array();
    a2iPlayerCosts[i] = new Array();
    aiNoOfPlayersInCat[i]=0;
  }

  for (var i=0; i < (aiCatIDs_l.length-1); i++)
  {
    for (var j=0; j < (aiPlayerCats_l.length-1); j++)
    {
      if (aiCatIDs_l[i] == aiPlayerCats_l[j])
      {
        a2iPlayers[i][aiNoOfPlayersInCat[i]]=aiPlayerIDs_l[j];
        a2iPlayerCosts[i][aiNoOfPlayersInCat[i]]=aiPlayerValues_l[j];
        aiNoOfPlayersInCat[i]++;
      }
    }
  }

  for (var i=0; i < (aiCatIDs_l.length-1); i++)
  {
    iNoOfPlayersInCat=0;
    while (iNoOfPlayersInCat < aiCatMax_l[i])
    {
      iSelectedPlayerIndex = selectRandomPlayer(a2iPlayers[i], aiSelectedPlayers);

      if (iSelectedPlayerIndex != -1)
      {
        aiSelectedPlayers[iPlayerCount] = a2iPlayers[i][iSelectedPlayerIndex];
        aiSelectedPlayersCat[iPlayerCount] = i;
        iPlayerIndex = getMatchingIndex(aiPlayerIDs_l, aiSelectedPlayers[iPlayerCount]);

        aiSelectedPlayerCosts[iPlayerCount] = aiPlayerValues_l[iPlayerIndex];
        iSideIndex = getMatchingIndex(aiSideIDs_l, aiPlayerSides_l[iPlayerIndex]);
        iSideID = aiSideIDs_l[iSideIndex];
        iSideCount = aiSidesSelected[iSideID];
        if ((aiSidesSelected[iSideID] == null) || (aiSidesSelected[iSideID] <= (iMaxPerSide - 1)))
        {
          if (iSideCount == null)
          {
            aiSidesSelected[iSideID] = 1;
          }
          else
          {
            aiSidesSelected[iSideID] = iSideCount + 1;
          }
          iPlayerCount++;
          iNoOfPlayersInCat++;
        }
      }

    }
  }

  
  for (var i=0; i < (aiSelectedPlayerCosts.length); i++)
  {
    iTotalCost += aiSelectedPlayerCosts[i];
  }

  var iPlayer=0;
  aiCost = [];
  var iMostExpensiveIndex = 0;
  var iReplacedPlayerID = 0;
  var iCount=0;
  var iCat=0;

  while (iTotalCost > iMaxBudget)
  {
    iCount = 0;
    aiCost=[];

    if (iPlayer > (aiSelectedPlayerCosts.length-1))
    {
      iPlayer=0;
    }
    aiCostOfCatPlayers = [];
    aiMostExpPlayersCosts = [];

    // find the most expensive player in the selected group
    for (var i = 0; i < (aiSelectedPlayerCosts.length); i++)
    {
      aiMostExpPlayersCosts[i] = aiSelectedPlayerCosts[i];
    }
    aiMostExpPlayersCosts.sort();
    aiMostExpPlayersCosts.reverse();  // most expensive player -> least expensive player
    iMostExpensiveIndex = getMatchingIndex(aiSelectedPlayerCosts, aiMostExpPlayersCosts[iPlayer]);
    iReplacedPlayerID = aiSelectedPlayers[iMostExpensiveIndex];
    iCat = aiSelectedPlayersCat[iMostExpensiveIndex];

    // find the cost of the second most expensive player in this category
    for (var i = 0; i < (aiNoOfPlayersInCat[iCat]); i++)
    {
      aiCostOfCatPlayers[i] = a2iPlayerCosts[iCat][i];
    }
    aiCostOfCatPlayers.reverse();  // most expensive player -> least expensive player
    for (var idx=1; ((idx < (aiCostOfCatPlayers.length-1)) && (aiCostOfCatPlayers[idx] >= aiSelectedPlayerCosts[iMostExpensiveIndex])); idx++);

    // set up array with players of this cost
    for (var i=0, iCount=0; i < (aiCostOfCatPlayers.length); i++)
    {
      if (a2iPlayerCosts[iCat][i] == aiCostOfCatPlayers[idx])
      {
        aiCost[iCount]=a2iPlayers[aiSelectedPlayersCat[iMostExpensiveIndex]][i];
        iCount++;
      }
    }

    var bContinue = true;
    var iLoopCount=0;
    if (iCount != 0)
    {
      while ((bContinue == true) && (iLoopCount < 20))
      {
        iSelectedPlayerIndex = selectRandomPlayer(aiCost, aiSelectedPlayers);
        if (iSelectedPlayerIndex != -1)
        {
          //the side index for the replaced player
          var iOldPlayerIndex = getMatchingIndex(aiPlayerIDs_l,iReplacedPlayerID);
          var iOldSideIndex = getMatchingIndex(aiSideIDs_l, aiPlayerSides_l[iOldPlayerIndex]);
          var iOldSideID = aiSideIDs_l[iOldSideIndex];
          var iOldSideCount = aiSidesSelected[iOldSideID];

          aiSelectedPlayers[iMostExpensiveIndex] = aiCost[iSelectedPlayerIndex];

          //the side index for the new player
          iPlayerIndex = getMatchingIndex(aiPlayerIDs_l, aiCost[iSelectedPlayerIndex]);
          iSideIndex = getMatchingIndex(aiSideIDs_l, aiPlayerSides_l[iPlayerIndex]);
          iSideID = aiSideIDs_l[iSideIndex];
          iSideCount = aiSidesSelected[iSideID];

          if ((iSideCount == null) || (iSideID == iOldSideID) || (iSideCount <= (iMaxPerSide - 1)))
          {
            if (iSideID != iOldSideID)
            {
              // inc new
              if (iSideCount == null)
              {
                aiSidesSelected[iSideID] = 1;
              }
              else
              {
                aiSidesSelected[iSideID] = iSideCount + 1;
              }

              // dec old
              if (iOldSideCount == 1)
              {
                aiSidesSelected[iOldSideID] = null;
              }
              else
              {
                aiSidesSelected[iOldSideID] = iOldSideCount - 1;
              }

            }
            aiSelectedPlayerCosts[iMostExpensiveIndex] = aiPlayerValues_l[iPlayerIndex];
            bContinue = false;
          }

          else if ((iSideID != iOldSideID) && (iSideCount > (iMaxPerSide - 1)))
          {
            aiSelectedPlayers[iMostExpensiveIndex] = iReplacedPlayerID;

          }
        }

        iLoopCount++;
      }
    }
    iPlayer ++;
  
    for (var i=0, iTotalCost=0; i < (aiSelectedPlayerCosts.length); i++)
    {
      iTotalCost += aiSelectedPlayerCosts[i];
    }
  }
  
  // display the selected team
  for (var i=1; i<=iMaxPlayers; i++)
  {
    var optionName = "player" + i;
    var select = oRegForm.elements[optionName];
    
    // Now loop through the random squad to see if any have a player in this list
    var position=-1;
    for (var j=0; j<iMaxPlayers && position < 0; j++) {
    
      position = positionOfItem(select, aiSelectedPlayers[j]);
      if (position >= 0) {
      
        // console.log(optionName + ":" + position + ":" + oRegForm.elements[optionName].length + ":" + aiSelectedPlayers[j]);
        select.options.selectedIndex = position;
        aiSelectedPlayers[j] = "alreadyselected";
        
      }
    }
  }  

  oRegForm.elements["money"].value = budgetPrefix + roundNumber(dispMoney - iTotalCost) + budgetSuffix;
}

function positionOfItem(select, item) {

  var options = select.options;
  for (idx=0; idx<options.length && options[idx].value != item; idx++) {} 
  
  if (idx >= options.length) {
  
    return -1;
  } else {
    
    return idx;
  }
}

function copyTeam(iTeamIndex)
{
  // display the selected team
  if (eval(document.reg["smsAlerts"])) {select("reg", "smsAlerts", aiSelectedSmsAlerts_l[iTeamIndex - 1]);}
  if (eval(document.reg["unlimitedTransfers"])) {select("reg", "unlimitedTransfers", aiSelectedUnlimitedTransfers_l[iTeamIndex - 1]);}
  
  // loop through selected player rebind any the team.
  var playerList = aiSelectedTeams_l[iTeamIndex - 1].slice(0);
  for (var i=1; i<=30; i++)
  {
    if (eval(document.reg["player" + i])) {

      var optionName = "player" + i;
      var dropDown = oRegForm.elements[optionName];

      // Now loop through the squad to see if any have a player in this list
      var position=-1;
      for (var j=0; j<30 && position < 0; j++) {

        position = positionOfItem(dropDown, playerList[j]);
        if (position >= 0) {

          select("reg", optionName, playerList[j]);
          playerList[j] = "alreadyselected";        
        }
      }
    }
  }    
  validateSelect(oRegForm.elements["player1"]);
  
  if (eval(document.reg["addTeam"])) {oRegForm.elements["addTeam"].value = "Add Team";}  
  if(eval(document.getElementById("addTeamImageButton"))) {document.getElementById("addTeamImageButton").src=addImage;}
  
  oRegForm.elements["editTeamIndex"].value = -1;    
}

function editTeam(iTeamIndex)
{

  copyTeam(iTeamIndex);
  
  // Set the player name and index 
  oRegForm.elements["teamName"].value = aiSelectedTeamNames_l[iTeamIndex - 1];
  if (eval(document.reg["addTeam"])) {oRegForm.elements["addTeam"].value = "Update Team";}
  if(eval(document.getElementById("addTeamImageButton"))) {document.getElementById("addTeamImageButton").src=updateImage;}
  oRegForm.elements["editTeamIndex"].value = iTeamIndex - 1;
}

function addThisTeam() {

  if (oRegForm.elements["editTeamIndex"].value < 0 &&
      (aiSelectedTeams_l.length >= oRegForm.elements["maxTeams"].value ||
       aiSelectedTeams_l.length >= iActualMaxTeams_l)) {
    
    alert(translate("TOO_MANY_TEAMS"));
    return false;
  } else {
  
    return validateForm();
  }
}

function getActivationDate() {
  
  var returnVal = "?";
  $.ajax({

    dataType: "json",
    url: "statusajax.do",
    async: false, 
    data: {timestamp: new Date().getMilliseconds()},
    type: "get",
    success: function(data) {

      if (data.nextActivationDate.length > 10) {
        
        returnVal = data.nextActivationDate.substring(0, 10);
      } else {
        
        returnVal = data.nextActivationDate;
      }
    }
  });

  return returnVal;
}

function confirmTransfers() {

  if (false == validateForm()) {
    
    return false;
  } else {
    
    return confirm(translate2("CONFIRM_TRANSFERS", countTransfers(), getActivationDate()));
  }
}

function countTeams() {

  if (aiSelectedTeams_l.length == 0) {
    
    alert(translate("NO_TEAMS"));
    return false;
  } else if (aiSelectedTeams_l.length == 1) {
  
    return confirm(translate1("CONFIRM_TEAM", aiSelectedTeams_l.length));
  } else {
  
    return confirm(translate1("CONFIRM_TEAMS", aiSelectedTeams_l.length));
  }
}


function resetTeam() {

  var oOptions_l = oRegForm.elements;
  for (var i=0; i<oOptions_l.length; i++)
  {
    if (oOptions_l[i].name.charAt(0) == 'p' &&
        oOptions_l[i].type == "select-one")
    {
      oOptions_l[i].selectedIndex = 0;
    }
  }
  validateSelect(oRegForm.elements["player1"]);
}

function drawSelect(selectCategory, selectTitle, xi)
{
  
  selectNumber++;
  var catIndex = getMatchingIndex(axCatNames_l, selectCategory);
  var optionName = "player" + selectNumber;
  var xi = (xi == null) ? "Y" : xi;
  var xiName = "xi" + selectNumber;

  document.write("<!-- " + selectTitle + " -->");
  document.write("<select name='"+optionName+"' onChange='validateSelect(this);' class=\"teamsml\"><option value=0>"+selectTitle+"</option></select>");
  document.write("<input type=hidden name='"+xiName+"' value='"+xi+"' />");
  oRegForm = document.forms[formName];
  addCategoryOptions(optionName, getMatchingIndex(axCatNames_l, selectCategory) + 1);
  
  aiCatMax_l[catIndex] ++;
}

function drawMoney()
{
  document.write("<input type=\"text\" name=\"money\" value=\"" + budgetPrefix + dispMoney + budgetSuffix + "\" size=\"10\" maxlength=\"8\" class=\"normal\" disabled=\"disabled\" id=\"teambudget\" />");
}

function drawRating()
{
  document.write("<input type=\"text\" name=\"money\" value=\"" + dispMoney +"\" size=\"3\" maxlength=\"3\" class=\"normal\" disabled>");
}

function drawMoneySimple()
{
  document.write(dispMoney);
}

function drawRemainingTransfers()
{
  document.write("<input type=\"text\" name=\"remainingTransfers\" value=\"" + dispRemainingTransfers + "\" size=\"7\" maxlength=\"7\" class=\"normal\" disabled>");
}

function initialise() 
{

  for (var i=0; i<aiPlayerValues_l.length; i++)
  {
    dispPlayerValues_l[i] = aiPlayerValues_l[i];
  }
  
  selectNumber = 0;
  
  for (i=0; i<aiCatMax_l.length; i++) {
  
    aiCatMax_l[i] = 0;
  }
}

function repopulate() {

  // If there was a last post bound then loop through and re-populate the players - This
  // will happen in the case where there was an error with the selection (e.g no team name)
  for (var index=0; index < aiPostPlayers_l.length; index++)
  {
    select("reg", "player" + (index + 1), aiPostPlayers_l[index]);
  }
  validateSelect(oRegForm.elements["player1"]);
}

function compareText (option1, option2) {
  return option1.text < option2.text ? -1 :
    option1.text > option2.text ? 1 : 0;
}

function compareValue (option1, option2) {
  return option1.value < option2.value ? -1 :
    option1.value > option2.value ? 1 : 0;
}

function compareTextAsFloat (option1, option2) {
  var value1 = parseFloat(option1.text);
  var value2 = parseFloat(option2.text);
  return value1 < value2 ? -1 :
    value1 > value2 ? 1 : 0;
}

function compareValueAsFloat (option1, option2) {
  var value1 = parseFloat(option1.value);
  var value2 = parseFloat(option2.value);
  return value1 < value2 ? -1 :
    value1 > value2 ? 1 : 0;
}

function sortSelect (select, compareFunction) {
  if (!compareFunction)
    compareFunction = compareText;
  var options = new Array (select.options.length);
  for (var i = 0; i < options.length; i++)
    options[i] =
      new Option (
        select.options[i].text,
        select.options[i].value,
        select.options[i].defaultSelected,
        select.options[i].selected
      );
  options.sort(compareFunction);
  select.options.length = 0;
  for (var i = 0; i < options.length; i++)
    select.options[i] = options[i];
}

// Ticker startup
function startTicker()
{
  // Define run time values
  theCurrentStory     = -1;
  theCurrentLength    = 0;
  // Locate base objects
  if (document.getElementById) {  
        theAnchorObject     = document.getElementById("tickerAnchor");
      runTheTicker();     
     }
  else {
            document.write("<style>.ticki{display:none;}.ticko{border:0px; padding:0px;}<\/style>");
            return true;
  }
}
// Ticker main run loop
function runTheTicker()
{
  var myTimeout; 
  // Are there any stories?
  if (!theSummaries.length) return;
  // Go for the next story data block
  if(theCurrentLength == 0)
  {
    theCurrentStory++;
    theCurrentStory      = theCurrentStory % theSummaries.length;
    theStorySummary      = theSummaries[theCurrentStory].replace(/&quot;/g,'"');    
    theTargetLink        = theSiteLinks[theCurrentStory];
    theAnchorObject.href = theTargetLink;
    thePrefix        = "<span class=\"tickls\">" + theLeadString + "<\/span>";
  }
  // Stuff the current ticker text into the anchor
  theAnchorObject.innerHTML = thePrefix + 
  theStorySummary.substring(0,theCurrentLength) + whatWidget();
  // Modify the length for the substring and define the timer
  if(theCurrentLength != theStorySummary.length)
  {
    theCurrentLength++;
    myTimeout = theCharacterTimeout;
  }
  else
  {
    theCurrentLength = 0;
    myTimeout = theStoryTimeout;
  }
  // Call up the next cycle of the ticker
  setTimeout("runTheTicker()", myTimeout);
}
// Widget generator
function whatWidget()
{
  if(theCurrentLength == theStorySummary.length) return theWidgetNone;
  if((theCurrentLength % 2) == 1) return theWidgetOne;
  return theWidgetTwo;
}
// globals
var theCharacterTimeout = 50;
var theStoryTimeout     = 5000;
var theWidgetOne        = "_";
var theWidgetTwo        = "-";
var theWidgetNone       = "";
var theLeadString       = "";
var theSummaries    = new Array();
var theSiteLinks    = new Array();

function storecheck(questionId) {
  
  // The answer is stored in a hidden field
  var infoForm = document.getElementById("selectinfo");
  if (infoForm) {

    var answerElement = infoForm["answer(" + questionId + ")"];
    var answer = "";
  
    var oOptions_l = infoForm.elements;
    for (var i=0; i<oOptions_l.length; i++) {
  
      if ((oOptions_l[i].name == "check-" + questionId) &&
           oOptions_l[i].checked) {
   
       if (answer != "") {
      
          answer += "|";
       }
       answer += oOptions_l[i].value;
      }
    } 
  
    answerElement.value = answer;
  }
}

function check(questionId) {
  
  
  // The answer is stored in a hidden field
  var infoForm = document.getElementById("selectinfo");
  if (infoForm) {

    var answerElement = infoForm["answer(" + questionId + ")"];
    var answers = answerElement.value.split("|");
    var oOptions_l = infoForm.elements;
  
    for (var i=0; i<answers.length; i++) {
  
      for (var j=0; j<oOptions_l.length; j++) {
    
        if ((oOptions_l[j].name == "check-" + questionId) &&
             oOptions_l[j].value == answers[i]) {
     
         oOptions_l[j].checked = true;
        }
      }   
    }
  }
}

function populateCourses(formName, tipId, fixtureName) {
  
  if (fixtureName != "") {

    var tokenizer = new StringTokenizer (fixtureName, "|");
    while (tokenizer.hasMoreTokens()) {
    
      var courseName = tokenizer.nextToken();
      document.forms[formName].elements["course" + tipId].options[tokenizer.tokensReturned] = new Option(courseName.replace("_"," "), courseName, true, false);
    } 
  }
}

function findElement(form, elementName) {
  
  for (var i=0; i < form.elements.length; i++) {
    
    if (form.elements[i].name == elementName) {
    
      return form.elements[i];
    }
  }
  
  return null;
}

function trim(str) {

  return str.replace(/^\s*|\s*$/g,"");
}

// this function sets a cookie
function setCookie(name, value, expires)  {
  // set time, it's in milliseconds
  var today = new Date();
  today.setTime( today.getTime() );

  if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; }
  var expires_date = new Date( today.getTime() + (expires) );

  document.cookie = name + "=" +escape( value ) +
  ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" );
}

// this function gets a cookie, if it exists
function getCookie( name ) {
  
  var start = document.cookie.indexOf( name + "=" );
  var len = start + name.length + 1;
  if ((!start) && (name != document.cookie.substring(0, name.length))) {
  
    return null;
  }
  if (start == -1 ) return null;
  var end = document.cookie.indexOf(";", len);
  if (end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring(len, end));
}

// this deletes the cookie 
function deleteCookie(name) {

  if ( getCookie( name ) ) document.cookie = name + "=" +
  ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

// This function will remember a login if the 'rememberLogin' checbox
// of the specified form is checked
function rememberThisLogin(thisform) {

  if (eval(thisform["rememberLogin"])) {
  
    if (thisform.elements["rememberLogin"].checked) {
    
      setCookie("email", thisform.elements["email"].value, 180);
      setCookie("password", thisform.elements["password"].value, 180);
    } else {
    
      deleteCookie("email");
      deleteCookie("password");
    }
  }
}

function getElementsByClassName(oElm, strTagName, strClassName){

  var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
  var arrReturnElements = new Array();
  strClassName = strClassName.replace(/\-/g, "\\-");
  var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
  var oElement;
  for(var i=0; i<arrElements.length; i++){
      oElement = arrElements[i];
      if(oRegExp.test(oElement.className)){
          arrReturnElements.push(oElement);
      }
  }
  return (arrReturnElements)
}

function removeChildrenRecursively(node) {

  if (!node) return;
  while (node.hasChildNodes()) {
  
    removeChildrenRecursively(node.firstChild);
    node.removeChild(node.firstChild);
  }
}


// This function will populate the login box
function populateLogin(formName) {

  // populate the login for any form with a rememberLogin checkbox
  for (var i=0; i<document.forms.length; i++) {
    
    loginForm = document.forms[i];
    if (eval(loginForm.elements["rememberLogin"])) {
          
      if (getCookie("password") != null) {

        loginForm.elements["email"].value = getCookie("email");
        loginForm.elements["password"].value = getCookie("password");
        loginForm.elements["rememberLogin"].checked = true;
      }   
    }
  }
} 

function capitalise(str) {

  var letter = str.substr(0,1);
  return letter.toUpperCase() + str.substr(1);
} 

<!-- Original:  Tomleung (lok_2000_tom@hotmail.com) This tag should not be removed-->
<!--Server time ticking clock v2.0 Updated by js-x.com-->
function MakeArrayday(size)
{
  this.length = size;
  for(var i = 1; i <= size; i++)
    this[i] = "";
  return this;
}
function MakeArraymonth(size)
{
  this.length = size;
  for(var i = 1; i <= size; i++)
    this[i] = "";
  return this;
}

var hours;
var minutes;
var seconds;
var timer=null;
var diff=0;

function sClock(serverdate, serveroffset)
{

 
  var currenttimems = new Date().getTime();
  var localoffset = new Date().getTimezoneOffset() * 60000;
  diff = currenttimems - localoffset - serverdate + serveroffset;
  setDateBits(); 
}

function setDateBits() {

  var currenttimems = new Date().getTime();
  var servertimems = currenttimems + diff;
  var serverdate = new Date(servertimems);
  hours=serverdate.getHours();
  minutes=serverdate.getMinutes();
  seconds=serverdate.getSeconds();
  if(timer){clearInterval(timer);timer=null;}
  timer=setInterval("work();",1000);
}

function twoDigit(_v)
{
  if(_v<10)_v="0"+_v;
  return _v;
}

function work()
{
  setDateBits(); 
  if (!document.layers && !document.all && !document.getElementById) return;
  var shours = hours;
  var sminutes = minutes;
  var sseconds = seconds;
  if (shours >= 24)
  {
    shours=0;
  }
  if (!shours) shours = 12;
  sminutes=twoDigit(sminutes);
  sseconds=twoDigit(sseconds);
  shours  =twoDigit(shours  );
  movingtime = ""+ shours + ":" + sminutes +":"+sseconds;
  if (document.getElementById)
    document.getElementById("clock").innerHTML=movingtime;
  else if (document.layers)
  {
    document.layers.clock.document.open();
    document.layers.clock.document.write(movingtime);
    document.layers.clock.document.close();
  }
  else if (document.all)
    clock.innerHTML = movingtime;
}


    
