function flyingByCell(elt1) {
    if(Ext.isIE7) return;
  elt1.style.background = 'lightgray';
}
function flyingAwayCell(elt1) {
    if(Ext.isIE7) return;
  elt1.style.background = '#F6F8C9';
}
function toggleFold(id,previousTD) {
  var elt =  document.getElementById(id);
  //console.log("Found element " + elt);
  if(elt != undefined) {
    var displayStyle = elt.style.display;  
    if(displayStyle =='block') {
      elt.style.display = 'none';
      if (previousTD != undefined){
        previousTD.className = "collapsed";
      }
    }
    if(displayStyle =='none'){
      elt.style.display = 'block';
      if (previousTD!= undefined){
        previousTD.className = "expanded";
      }
    }
  }
}


function zapSectionAnswers(elt_to_make_collapsed, elt_to_make_invisible_id) {
  var tableToClear = document.getElementById(elt_to_make_invisible_id);
  if(typeof tableToClear == "HTMLCollection")
    tableToClear = tableToClear[0];
  if (tableToClear!= undefined){
    // get input-elements contained in this table
    var inputElementsInTable = tableToClear.getElementsByTagName("input");
    // uncheck radio button if necessary
    // naive implementation just to see that it works
    // as radiobuttons have the same name and exactly one can be checked
    // we can skip to the next radiobutton-family as soon as we've found a 
    // checked radiobutton
    for (var x=0; x!= inputElementsInTable.length;x++){
        //console.log("value = \""+inputElementsInTable[x].value + "\" of length.");

      if(typeof(inputElementsInTable[x].value)!="undefined" && inputElementsInTable[x].value.length>0) {
        inputElementsInTable[x].checked=false;//        console.log("disabled that one.");
      } else {
        inputElementsInTable[x].checked=true;//          console.log("enabled the one");
      }
    }//end of for loop
    tableToClear.style.display = 'none';
    
    var tableToSearchForTD = document.getElementById(elt_to_make_collapsed);
    if(typeof(tableToSearchForTD)!="undefined") {
      var tds = tableToSearchForTD.getElementsByTagName("td");
      if(typeof("tds")!=undefined && tds.length>0) {
          tds[0].setAttribute("class","collapsed");
      }
    }
    computeOverallRank();
  }//end if
}//end of zapSectionAnswers function

function computeMean(sectionHeadId,questionsTableId){
  // compute mean of current given answers
  if(typeof(console)!="undefined") console.log("computing mean " + sectionHeadId);
  var tableToProcess = document.getElementById(questionsTableId);
  var mean = 0;
  if (tableToProcess != undefined){
    var rows = tableToProcess.getElementsByTagName("tr");
    var rowCount = 0;
    for (var y = 0 ; y != rows.length; y++){
      var sthChecked = false;
      var counter = 0;
      var rowInputs = rows[y].getElementsByTagName("input");
      while (counter != rowInputs.length && !sthChecked){
        if (rowInputs[counter].checked){
          rowCount++
          sthChecked=true;
        }
        counter++;
      }
    }// end of for loop
    
    var sum = 0, count = 0;
    var inputs = tableToProcess.getElementsByTagName("input");
    for (var x = 0; x!= inputs.length; x++){
      if (inputs[x].checked){
        var val = parseInt(inputs[x].value);
        if(!isNaN(val)) {
          sum = sum + val;
          count++;
        }
      }
    }//end of for loop
    if(typeof(console)!="undefined") console.log("sum is " + sum + " and count is " + count);
    if (count!= 0 && sum !=0){
      mean = Math.round(sum/count);
      if (mean==0) {
        mean=1;
      }
    }
  }
    //console.log("mean is " + mean + " and count is " + count);
  if (mean != 0 && count >0){
    var tdWithId = document.getElementById(sectionHeadId);
    // only proceed if we found something
    if (tdWithId != undefined){
      // get the tr that holds the td
      var tableRow = tdWithId.parentNode;
      // get all input elements
      if (tableRow != undefined) {
        var tableRowInputs = tableRow.getElementsByTagName("input");
        if (tableRowInputs.length!=0){
          tableRowInputs[mean-1].checked = true;
        }
        
      } 
    }
    computeOverallRank();
  }
  
}// end of computeMean function


// supposes a family of inputs is below element of id overallRanking
// and variable sectionHeadNames is defined as an array of strings
//  which are the ids of the elements containing the family of radio buttons
function computeOverallRank() {
  if(typeof(console)!="undefined") console.log("Computng overall rank.");
  var overallRankingElt = document.getElementById("overallRanking");
  if(typeof(overallRankingElt)!="undefined"  && typeof(sectionHeadNames)!="undefined") {
     // compute means
     var sum = 0, count = 0;
     for(var i=0; i<sectionHeadNames.length; i++) {
       var x = sectionHeadNames[i];
       if(typeof("x")=="function") continue;
       //console.log("Evaluating " + x + " of type " + typeof(x));
       var c = document.getElementById(x);
       if(c!=undefined) {
         var elts = c.getElementsByTagName("input");
         if(typeof(elts)!="undefined") {
           //console.log("input elements found.of size " + elts.length);
           var val = -1;
           for(var j=0; j<elts.length; j++) {
             var input = elts[j];
             //console.log("Input " + input + " of value " + input.value + " is checked? " + input.checked);
             if(input.checked) {
               val = parseInt(input.value); break;
             }
           }
           if(val!=-1 && !isNaN(val)) {
             sum+=val;
             count++;
             //console.log("Value " + val);
           }
         }
       }
     }
     if(typeof(console) == "obect") console.log("count " + count + " sum " + sum);
     if(count>0) {
       var overall = Math.round(sum/count);
       var inputs = overallRankingElt.getElementsByTagName('input');
       if(typeof(console) == "obect") console.log("Setting mean to " + overall);
       if(inputs!=undefined && inputs.length>=overall) {
         inputs[overall-1].checked = true;
       }
     }
  }
  //console.log("compute overall rank finished.");
}

function disableORButtons(){
  var overallRankingSpan = document.getElementById('overallRanking');
  if (!!overallRankingSpan){
    var rankingSpanButton = overallRankingSpan.getElementsByTagName('input');
    if (rankingSpanButton.length!=0){
      for(var u=0; u!= rankingSpanButton.length ;u++){
        if (rankingSpanButton[u].getAttribute('type')!="hidden"){
          rankingSpanButton[u].setAttribute("disabled","disabled");
        }
      }
    }
  }
}// end of disableORButtons

function expandWhenNeeded(){
  //get all tables in the page
  var tables = document.getElementsByTagName('table');
  if (tables.length != 0) {
    // for each table with an id(except rankingOverall) check whether one of the radiobuttons contained 
    // in the nextTable is checked
    for (var i=0; i!= tables.length; i++){
      var tableIId = tables[i].getAttribute('id');
      if (tableIId!="" && tableIId!=undefined && tableIId!="rankingOverall"){
        var inputs = tables[i].getElementsByTagName('input');
        var counter = 0;
        var isChecked = false;
        while (counter != inputs.length && !isChecked){
          if (inputs[counter].checked){
            isChecked=true;
          }
          counter++;
        }
        if (isChecked) {
          // if yes call toggleFold
          //alert("opening"+ tableIId);
          var tds = tables[i-1].getElementsByTagName('td');
          if (tds.length!=0){
            toggleFold(tableIId,tds[0]);
          }
        }
      }
    }
  }// end of for loop
}

function hide(elt) {
  //console.log("hiding " + elt);// can't get it to work!
  if(elt == null || elt == undefined || !!(elt.style)) return;
  elt.style.display = 'none';
  /*var list = elt.childNodes;
  console.log("list is " + list + " of size " + list.length);
  for(i=0; i<list.length;i++) hide(list[i]); */
}


/* Used by the in-page script to locate the head TD whose class needs to be changed*/
function getFirstTDOf(elt){
  if  (!!elt){
    var eltTDs = elt.getElementsByTagName('td');
    if (eltTDs.length!=0){
      return eltTDs[0];
    }
  }
}




