/* /library/javascript/checkbox.js -
    check box javascript cut out of global.js
*/

function subInitCheckboxes() {
/*Purpose  :  Finds all checkboxes and makes sure the state of the image matches the state of the hidden checkbox
  Effects  :  None.
  Inputs  :  None.
  Returns  :  None.
*/
  var objInputTags = document.getElementsByTagName("INPUT");
  var objInput;
  var i;

  // loop through INPUT TYPE=HIDDEN collection
  for(i=0; i<objInputTags.length; i++) {
    objInput = objInputTags[i];
    if(objInput.type=="hidden") {
      if(objInput.ischeckbox=="1") {
        if (objInput.disabled) {
          ftnGetObject('image' + objInput.id).src = (objInput.value=="1") ? gImgPath+"utils/tick_disabled.gif" : gImgPath+"utils/notick_disabled.gif";
        } else {
          ftnGetObject('image' + objInput.id).src = (objInput.value=="1") ? gImgPath+"utils/tick.gif" : gImgPath+"utils/notick.gif";
        }
      }
    }
  }
}


function subCheckboxClick(strID) {
/*Purpose  :  Generic click event handler for checkboxes generated from the "checkbox" 
    global XSLT template. This function is called when you click on such a 
    checkbox.
  Effects  :  Works out whether the checkbox needs to be selected or deselected then 
    delegates to subCheckboxManipulate(), setting the ocjs (onClick) attribute
    for execution if present.
  Inputs  :  strID - String - the id of the checkbox image.
  Returns  :  None.
*/
  var objImage = ftnGetObject('image'+strID);
  var objHidden = ftnGetObject(strID);

  if (objHidden.disabled==false)
    if (objHidden.value == "1")                           // Tick or Un-tick the checkbox
      subCheckboxManipulate(strID,false,true);
    else
      subCheckboxManipulate(strID,true,true);
  
  var intExclusiveGroupNumber = objImage.exclusivegroupnumber;
  // if the group the checkbox belongs to is exclusive from any other groups then clear the ticks from the other groups
  if (intExclusiveGroupNumber != 0) {
    // loop through all checkboxes and clear those not in the group of the ticked checkbox
    var objImages = document.images;
    for(i=0; i<objImages.length; i++) {
      var objImageExc = objImages[i];
      //**OO** Changed to match LR -- if(objImageExc.exclusivegroupnumber != intExclusiveGroupNumber && objImageExc.exclusivegroupnumber != 0) {
      if(objImageExc.exclusivegroupnumber != intExclusiveGroupNumber && objImageExc.exclusivegroupnumber != 0 && objImageExc.exclusivegroupnumber != undefined) {  
        objHiddenExc = ftnGetObject(objImageExc.fieldid);
        if(objHiddenExc.value == "1") {
          objImageExc.src = "'+gImgPath+'utils/notick.gif";
          objHiddenExc.value = "0";
          eval(objImageExc.ocjs);
        }
      }
    }
  }
}


function subCheckboxState(strID,blnDisabled,blnExecOnClick){
/*Purpose  :  Enables or disables checkboxes generated from the "checkbox" global XSLT template.
  Effects  :  Changes the image and sets the associated hidden field according to the state specified.
    Executes the Javascript code in the checkbox image "ocjs" attribute if requested.
  Inputs  :  strID - String - the id of the checkbox image.
    blnDisabled - boolean - desired state of checkbox.
    blnExecOnClick - boolean - if true, executes the checkboxs ocjs (onClick) event.
  Returns  :  None.
*/
  var objImage = ftnGetObject('image'+strID);
  var objHidden = ftnGetObject(strID);

  //set property on the input type=hidden and the image
  objHidden.disabled=blnDisabled;
  objImage.src=(blnDisabled) ? gImgPath+"utils/tick_disabled.gif" : (objHidden.value=="1") ? gImgPath+"utils/tick.gif" : gImgPath+"utils/notick.gif";
  
}


function ftnGetCheckboxes(intSearchType) {
/*Purpose  :  Return an array containing a subset of (or all the) checkboxes on the current page
  Effects  :  None, really. Makes coding a bit easier.
  Inputs  :  intSearchType, one of the following values:
    0 : return all checkboxes          \
    1 : return all ticked checkboxes   |- including disabled checkboxes
    2 : return all unticked checkboxes /
    4 : return all checkboxes          \
    5 : return all ticked checkboxes   |- excluding disabled checkboxes
     6 : return all unticked checkboxes /
  Returns  :  An array continaing the "input type=hidden"'s which contain each checkboxes value.
*/
  var blnChecked = ((intSearchType==1)||(intSearchType==5)||(intSearchType==4)||(intSearchType==0));
  var blnUnChecked = ((intSearchType==2)||(intSearchType==6)||(intSearchType==4)||(intSearchType==0));
  var aCheckboxs = new Array();
  var objInputs = document.body.getElementsByTagName("INPUT");
  var blnAdd;
  
  if (objInputs!=null)
    for (i=0; i<objInputs.length; i++)
      if (objInputs[i].type=='hidden')
        if (ftnGetObject('image'+objInputs[i].id)) {
          blnAdd=false;
          if ((intSearchType<4) || (!(objInputs[i].disabled)))
            blnAdd = (objInputs[i].value=='1') ? blnChecked : blnUnChecked;
          if (blnAdd) aCheckboxs[aCheckboxs.length]=objInputs[i];
        }
  return aCheckboxs;
}


function subCheckboxManipulate(strID,blnChecked,blnExecOnClick) {
/*Purpose  :  Generic click event handler for checkboxes generated from the "checkbox" global XSLT template.
  Effects  :  Changes the image and sets the associated hidden field according to the state specified.
    Executes the Javascript code in the checkbox image "ocjs" attribute if requested.
  Inputs  :  strID - String - the id of the checkbox image.
    blnChecked - boolean - desired state of checkbox.
    blnExecOnClick - boolean - if true, executes the checkboxs ocjs (onClick) event.
  Returns  :  None.
*/
  var objImage = ftnGetObject('image'+strID);
  var objHidden = ftnGetObject(strID);
  var objImageExc;
  var objHiddenExc;
  var state = objHidden.value;
  
  if (blnChecked == false)
    {
    objHidden.value = "0";
    objImage.src = (objHidden.disabled) ? gImgPath+"utils/tick_disabled.gif" : gImgPath+"utils/notick.gif";
    }
  else
    {
    objHidden.value = "1";
    objImage.src = (objHidden.disabled) ? gImgPath+"utils/tick_disabled.gif" : gImgPath+"utils/tick.gif";
    }
    
  // if checkbox group selection is exclusive then reset rest of the group
  if(objImage.exc == 1) {
    var objImages = document.images;
    for(i=0; i<objImages.length; i++) {
      objImageExc = objImages[i];
      if(objImageExc.groupid == objImage.groupid) {
        objHiddenExc = ftnGetObject(objImageExc.fieldid);
        if(objImageExc.id != objImage.id && objHiddenExc.value == "1") {
          objImageExc.src = gImgPath+"utils/notick.gif";
          objHiddenExc.value = "0";
          eval(objImageExc.ocjs);
        }
      }
    }
  }
  if(blnExecOnClick == true && objImage.ocjs != '') eval(objImage.ocjs);
}