// a list of select control names
var eolListSelectControls = new Array();
var eolListSelectUsed = false;

/**
 * Deselects all records in a form
 */
function selectAll(elt, strprefix) {
  curform = document.forms[formname];
  iArrayLength = curform.elements.length;
  preflen = strprefix.length;
  for (i = 0; i < iArrayLength; i++) {
    if (curform.elements[i].type == "checkbox" && 
      curform.elements[i] != null) {
      if (curform.elements[i].name.substr(0, preflen) == strprefix) {
        curform.elements[i].checked = elt.checked;
      }
    }
  }
}

function addSelection(control) {
    //  in the end handled by handleAllCheckBoxControls(), via checkChanges()
    eolListSelectUsed = true;
}

function handleAllCheckBoxControls() {
  var i, length;

  if (!eolListSelectUsed) {
    return;
  }
  length = eolListSelectControls.length;
  for (i = 0; i < length; i++) {
    handleCheckBoxControls(eolListSelectControls[i]);
  }
}

function handleCheckBoxControls(controlid) {
  ids = getSelectedIds(controlid + '_grpchkbox');
  // XXX eolwmsetselection() should have an extra arg for the behaviour
  if (ids == 'all') {
    eolwmsetselection(controlid, 'all', 0)
  } else {
    eolwmsetselection(controlid, 'selectpage', ids.toString())
  }
}

function doSelectAllAction(controlid) {
  selector = document.getElementById(controlid + '_grpchkbox_selector');
  checked = (selector.value != 'none');
  var dopage = false;
  if (selector.value == 'this_page') {
    dopage =true;
  } else if (selector.value == 'all' || selector.value == 'none') {
    eolwmsetselection(controlid, 'select'+selector.value, 0);
  }
  
  if (!checked) {
    selector.value = ""; 
  }
  curform = document.forms[formname];
  iArrayLength = curform.elements.length;
  preflen = controlid.length;
  var pagest = "";
  
  for (i = 0; i < iArrayLength; i++) {
    if (curform.elements[i].type == "checkbox" && 
      curform.elements[i] != null) {
      if (curform.elements[i].name.substr(0, preflen) == controlid) {
        if (pagest != "") {
          pagest += ",";
        }
        pagest += curform.elements[i].value;
        curform.elements[i].checked = checked;
        if (selector.value == 'all') {
          curform.elements[i].disabled = true;
        } else {
          curform.elements[i].disabled = false;
        }
      }
    }
  }
  if (dopage) {
    eolwmsetselection(controlid, 'selectpage', pagest);
  }
}

function eolwmsetselection(controlid, action, id) {
  //alert('setsel: ' + wmid + ' ' + controlid + ' ' + action + ' ' + id);
  wmRequest = initWMRequester(wmRequest);
  var start = new Date();
  var pp = "wm.php";
  var query = "selection=" + wmid + "&controlid=" + controlid +
    "&action=" + action + "&id=" + id + "&ts=" + start.getTime();
  //alert(query);
  wmRequest.open("POST", pp, false);
  wmRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  wmRequest.onreadystatechange = function() { }
  wmRequest.send(query);
  return true;
}

function getSelectedIds(strprefix) {
  selector = document.getElementById(strprefix + '_selector');
  if (selector) {
    if (selector.value == 'all') {
      return 'all';
    }
  }
  var ids = new Array();
  var count = 0;
  curform = document.forms[formname];
  iArrayLength = curform.elements.length;
  preflen = strprefix.length;
  for (i = 0; i < iArrayLength; i++) {
    if (curform.elements[i].type == "checkbox" && 
      curform.elements[i] != null) {
      if (curform.elements[i].name.substr(0, preflen) == strprefix) {
        if (curform.elements[i].checked) {
          ids[count] = curform.elements[i].value;
          count++;
        }
      }
    }
  }
  return ids;
}

function countSelectedItems(strprefix) {
  var ids = getSelectedIds(strprefix);
  if (ids == 'all') {
    return total_item_count;
  } else {
    return ids.length;
  }
}

/**
 * Execute selection action
 */
function doSelectionAction(action, confirmation_message, hiddenctrl, message_vars, usemain) {
  execute = true;
  if (confirmation_message != null) {
    execute = eolconfirm(confirmation_message, message_vars);
  }
  if (execute) {
    var ids = getSelectedIds(hiddenctrl.name);
    hiddenctrl.value = action;
    eolsubmit(document.forms[formname]);
  }
}

function eoldelete(key, hiddenctrl, id) {
  if (id == '+newid+') {
    // get selected id
    id = newid;
  }
  doSelectionAction('sys_delobj_' + id, key, hiddenctrl, null, true)
}

/**
 * alters the css class of element between class1 and class2
 */
function alterStyles(element, class1, class2) {
  if (element.className.replace(/^\s+|\s+$/g, '') == class1) {
    element.className = class2;
  } else if (element.className.replace(/^\s+|\s+$/g, '') == class2) {
    element.className = class1;
  }
}
