﻿var togglingClass = false;
var selectingRow = false;


function applySelected( row )
{
   var tdTags = row.childNodes;   

   for ( var i = 0; i < tdTags.length; ++i )
   {
      var cell = tdTags[i];
      if(cell.tagName != "TD") continue;
      
      cell.className += " selected"; 
   }
}

function removeSelected( row )
{
   var tdTags = row.childNodes;   

   for ( var i = 0; i < tdTags.length; ++i )
   {
      var cell = tdTags[i];
      if(cell.tagName != "TD") continue;
      
      cell.className = cell.className.substring(0, cell.className.length - 9);
   }
}

function onFundClassRowSelected( checkbox )
{
   // Containing <tr> of checkbox
   var row = checkbox.parentNode.parentNode;
   
   // Iterate through TDs and set CSS class
   var tdTags = row.childNodes;
   var cellCount = 0;
   for ( var i = 0; i < tdTags.length; ++i )
   {
      var cell = tdTags[i];
      if(cell.tagName != "TD") continue;
      
      cellCount++;
      if ( checkbox.checked )
      {
         cell.className += " selected"; 
      }
      else
      {
         cell.className = cell.className.substring(0, cell.className.length - 9);
      }
      
      // This TD contains the elements to select fund classes
      
      if ( (cellCount == 3)  && !togglingClass )
      {  
         selectingRow = true;
         if ( checkbox.checked )
         {
            var firstFundClass = cell.getElementsByTagName( "A" )[0];
            firstFundClass.onclick();
         }
         else
         {
            // Deselect all fund classes
            var selectors = cell.getElementsByTagName( "A" );
            for ( var j = 0; j < selectors.length; ++j )
            {
               var selector = selectors[j];
               if ( isFundClassSelected( selector ) )
               {
                  selector.onclick();
               }
            }
         }
         selectingRow = false;
      }
   }
}


// Toggle the state of the A elements representing fund class selection buttons.
function toggleTrackedFundClass(  sourceLink, fundClassID, trackedClasses, transientTrackedClassesFieldName )
{
   var parentCell = sourceLink.parentNode.parentNode.parentNode.parentNode;
   var selectors = parentCell.getElementsByTagName( "A" );

   if ( trackedClasses[fundClassID] )
   {
      // Unselect class
      var cellClassName = sourceLink.parentNode.className
      sourceLink.parentNode.className =  cellClassName.substring(0,  cellClassName.length - 19);
      trackedClasses[fundClassID] = false;
      
      // If all fund classes are deselected, deslect the row
      var allUnselected  = true;
      for ( var j = 0; j < selectors.length; ++j )
      {
         var selector = selectors[j];
         if ( selector != sourceLink  &&  isFundClassSelected(selector) )
         {
            allUnselected = false;
            break;
         }
      }
      
      if ( allUnselected && !selectingRow )
      {
         var checkbox = getCheckboxForRow( sourceLink );
         togglingClass = true;
         checkbox.click();
         togglingClass = false;
      }
   }
   else
   {
      // Select class
      sourceLink.parentNode.className += " selected_fund_class";
      trackedClasses[fundClassID] = true;
      
      // 
      var checkbox = getCheckboxForRow( sourceLink );
      if ( !checkbox.checked )
      {
         togglingClass = true;
         checkbox.click();
         togglingClass = false;
      }
      
      // Deselect other classes
      for ( var j = 0; j < selectors.length; ++j )
      {
         var selector = selectors[j];
         if ( selector != sourceLink  &&  isFundClassSelected(selector) )
         {
            selector.onclick();
         }
      }
   }
   
   updateTrackedFundClassesField(trackedClasses, transientTrackedClassesFieldName)
}


// Updates the hidden field with a value representing the flatted
// table of tracked fund class IDs.
function updateTrackedFundClassesField( trackedClasses, trackedClassesFieldName )
{
   var fundClasses = "";
   for ( var fundClassID in trackedClasses )
   {
      if ( trackedClasses[fundClassID]  )
      {
         fundClasses = fundClasses.concat( fundClassID + "|" );
      }
   }
   
   var trackedClassesField = document.getElementById(trackedClassesFieldName);
   trackedClassesField.value = fundClasses;
}


function isFundClassSelected( selector  )
{
   return (selector.parentNode.className.lastIndexOf("selected_fund_class") > 0);
}


function getCheckboxForRow( elementInRowCell )
{  
   var row = elementInRowCell.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
   var checkboxCell = row.getElementsByTagName("TD")[0];
   return checkboxCell.getElementsByTagName("INPUT")[0];
}
