var formName = "reg";

var xTerminatorOption_l = "<option value=0>------------------------------------------</option>";
var dispPlayerValues_l = [];

var bValidate=false;
var bRecalculate_l = true;
var currencySymbol;
var selectNumber;

function imposeMaxLength(Object, MaxLen)
{
  return (Object.value.length < MaxLen);
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

function select(form, element, value)
{ 
  if ("money" == element)
  {
    if (value.charAt(value.length - 1) == 'm')
    {
      value = currencySymbol+value.substring(1, (value.length - 1))+"m";
    }
    else
    {
      value = currencySymbol+value+"m";
    }
  }

  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;
}

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 = currencySymbol+dispMoney+"m";
}

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].type == "select-one" &&
          oOptions_l[i][oOptions_l[i].selectedIndex].value <= 0)
      {
        alert (translate("SELECT_ALL_PLAYERS"));
        bSuccess_l = false;
      }
      else if (oOptions_l[i].name == "teamName" &&
               oOptions_l[i].value == "")
      {
        alert (translate("SPECIFY_TEAM_NAME"));
        bSuccess_l = false;
      }
    }
  }

  return bSuccess_l;
}

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 roundNumber(rnum) {
  var rlength = 2; // 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 iSideID_l = aiPlayerSides_l[iPlayerIndex_l];
  var iSideIndex_l = getMatchingIndex(aiSideIDs_l, iSideID_l);
  var xSideName_l = axSideNames_l[iSideIndex_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, 2);
        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;
          change(thisselect.name,xSideName_l);
        }        
      }
    }
  }
  var dispCost_l = iCost_l;
  oRegForm.elements["money"].value = currencySymbol + dispCost_l + "m";
  
  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] + " " + currencySymbol + dispPlayerValues_l[i] +"m", 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";
        
      }

      validateSelect(oRegForm.elements[optionName]);

    }
  }  
    
  oRegForm.elements["money"].value = currencySymbol+(dispMoney - iTotalCost)+"m";
}

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<=iMaxPlayers; 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<iMaxPlayers && 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) {
    
    alert(translate("TOO_MANY_TEAMS"));
    return false;
  } else {
  
    return validateForm();
  }
}

function confirmTransfers() {

  if (false == validateForm()) {
    
    return false;
  } else {
    
    return confirm(translate2("CONFIRM_TRANSFERS", countTransfers(), activationDate));
  }
}

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=\"" + currencySymbol + dispMoney +"m\" size=\"7\" maxlength=\"7\" class=\"normal\" disabled>");
}

function drawMoneySimple()
{
  document.write(currencySymbol+ dispMoney +"m");
}

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;
  }
  
  if (currency == "GBP") {
  
    currencySymbol = "\243";
  } else {
  
    currencySymbol = "$";
  }
}

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 answerElement = document.entryForm["answer(" + questionId + ")"];
  var answer = "";
  
  var oOptions_l = document.entryForm.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 answerElement = document.entryForm["answer(" + questionId + ")"];
  var answers = answerElement.value.split("|");
  var oOptions_l = document.entryForm.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");
    }
  }
}

// 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 popup(url,name,width,height,top,left,resize,scroll,location,toolbar) {
  var temp = "window.open('" + url + "', '" + name + "', '" + "width=" + width + ',height=' + height + ',top=' + top + ',left=' + left + ',resizable=' + resize + ',scrollbars=' + scroll + ',location=' + location + ',toolbar=' + toolbar + "')";
  eval(temp);
}

function static_pop(url,name,width,height,top,left,resize,scroll,location,toolbar) {
  var temp = "window.open('" + url + "', '" + name + "', '" + "width=" + width + ',height=' + height + ',top=' + top + ',left=' + left + ',resizable=' + resize + ',scrollbars=' + scroll + ',location=' + location + ',toolbar=' + toolbar + "')";
  eval(temp);
}

function change(imgID,sideName) {
  if (sideName == null || sideName == "0") {
    var value = 'http://web1.dreamleague.co.uk/CleverTV/clients/Vitalfootball/vital-fantasy-football-08-09/images/unselected.gif';
  }
  else {
    var value = 'http://web1.dreamleague.co.uk/CleverTV/clients/Vitalfootball/vital-fantasy-football-08-09/images/sides/'+sideName+'.gif';
  }
  document.images[imgID].src = value;
}