var g_helpFlag = false;
var g_hookEvents = new Array();
var g_lastEvents = new Array();
var g_hookEnterKey = new Array();
var g_hookArrowKeys = new Array();
var g_columnId = null;
var g_req = null;
var g_cmdFrame = null;
var g_dropDown = null;
var g_dropDownHover = false;
var g_currentDropDownField = null;
var g_currentDropDownValues = null;
var g_selectedDropDownValue = null;
var g_keyPressed = null;
var g_arrowKeysPressed = false;
var g_focusObject = null;
var g_redirectUrl = new Array();
var g_fieldExclude = new Array();
var g_cascade = new Array();
var g_lastCompanySelected = 0;
var g_dateCascade = null;

document.onkeypress = handleOnKeyPress;
document.onmouseup = clearDivs;

if (document.layers) {
  document.captureEvents(Event.KEYPRESS);
}
if (!document.all && document.getElementById) {
  document.addEventListener("keypress",handleOnKeyPress,true);
}

function clearDivs() {
  if (g_dropDown && !g_dropDownHover) {
    g_dropDown.style.display = "none";
  }
}

function getLeftPos(obj) {
  return (obj.offsetParent ?
    obj.offsetLeft + getLeftPos(obj.offsetParent):
    obj.offsetLeft);
}

function getTopPos(obj) {
  return (obj.offsetParent ?
    obj.offsetTop + getTopPos(obj.offsetParent):
    obj.offsetTop);
}

function handleOnKeyPress(e) {
  var keyPressed = document.layers ? e.which:document.all ? event.keyCode:e.keyCode;
  g_keyPressed = keyPressed;
  var notHandled = true;
  switch (keyPressed) {
    case 13:
      notHandled = handleEnterKey();
      break;
    case 38:
    case 40:
      g_arrowKeysPressed = true;
      notHandled = handleArrowKeys();
      break;
    default:
      break;
  }
  return notHandled;
}

function handleArrowKeys() {
  if (g_hookArrowKeys && g_hookArrowKeys.length > 0) {
    for (var i=0; i<g_hookArrowKeys.length; i++) {
      eval(g_hookArrowKeys[i]);
    }
    return false;
  } else {
    return true;
  }
}

function handleEnterKey() {
  if (g_hookEnterKey && g_hookEnterKey.length > 0) {
    for (var i=0; i<g_hookEnterKey.length; i++) {
      eval(g_hookEnterKey[i]);
    }
    return false;
  } else {
    return findDefaultSubmitButton();
  }
}

function findDefaultSubmitButton() {
  if (g_focusObject && g_focusObject.type == "textarea") {
    return true;
  }
  var notHandled = true;
  if (document.forms.length > 0) {
    var tags = document.forms[0].getElementsByTagName("INPUT");
    if (tags) {
      for (var i=0; i<tags.length; i++) {
        if (tags[i].type == "submit") {
          switch (tags[i].value) {
            case "Save":
              tags[i].click();
              notHandled = false;
              i = tags.length;
              break;
            default:
              break;
          }
        }
      }
    }
  }
  return notHandled;
}

function getDocObjById(objId) {
  if (objId) {
    return document.getElementById(objId);
  } else {
    return null;
  }
}

function getDocObjByName(objName,objType) {
  var els;
  if (objType) {
    els = document.getElementsByTagName(objType);
  } else {
    els = document.getElementsByTagName("*");
  }
  if (els) {
    for (var el in els) {
      if (el.name == objName) {
        return el;
      }
    }
  }
  return null;
}

function initPage() {
  if (g_hookEvents) {
    for (var evt in g_hookEvents) {
      eval(g_hookEvents[evt]);
    }
  }
  if (g_lastEvents) {
    for (var evt in g_lastEvents) {
      eval(g_lastEvents[evt]);
    }
  }
}

function tableHighlight() {
  var els = document.getElementsByTagName("TABLE");
  if (els) {
    for (var i=0; i<els.length; i++) {
      var el = els[i];
      if (el.className && el.className == "tdList01") {
        setHighlightRows(el);
      }
    }
  }
}

function setHighlightRows(obj) {
  if (obj) {
    var els = obj.getElementsByTagName("TR");
    for (var r=0; r<els.length; r++) {
      if (els[r].id.indexOf("tr_") != -1) {
        // treat the header row differently
        var cells = els[r].getElementsByTagName("TH");
        if (cells.length > 0) {
          for (var c in cells) {
            if (!isNaN(c)) {
              // do something with the cells
            }
          }
          continue;
        }
        els[r].style.backgroundColor =
          (r%2 ? "#ffffff":"#eeeeee");
        els[r].onmouseover = showHighlight;
        els[r].onmouseout = hideHighlight;
        els[r].origBackColor = els[r].style.backgroundColor;
        els[r].saveBackColor = els[r].style.backgroundColor;
        hookCheckBox(els[r]);
      }
    }
  }
}

function showHighlight() {
  if (this.saveBackColor == "#bfefbb") {
    this.style.backgroundColor = "#a9e5a3";
  } else {
    this.style.backgroundColor = "#ffffd0";
  }
}

function hideHighlight() {
  this.style.backgroundColor = this.saveBackColor;
}

function setBackColor() {
  var color = null;
  if (this.checked) {
    color = this.parentNode.parentNode.saveBackColor = "#bfefbb";
  } else {
    this.parentNode.parentNode.saveBackColor =
      this.parentNode.parentNode.origBackColor;
    color = "#ffffd0";
  }
  this.parentNode.parentNode.style.backgroundColor = color;
}

function hookCheckBox(obj) {
  // checkbox should be in the first cell
  var els = obj.getElementsByTagName("INPUT");
  if (els.length > 0) {
    if (els[0] && els[0].type && els[0].type == "checkbox") {
      els[0].className = "rowCheckbox";
      els[0].onclick = setBackColor;
    }
  }
}

function focusBackground(obj) {
  if (obj) {
    obj.style.backgroundColor = '#D8F9F7';
  }
}

function blurBackground(obj) {
  if (obj) {
    obj.style.backgroundColor = '#ffffff';
  }
}

function setClassName(objName,className) {
  var obj = getDocObjById(objName);
  if (obj && className) {
    if (obj.type == 'select-one') {
      switch (className) {
        case 'required':
          if (obj.options && obj.options.length > 0) {
            obj.options[0].text = '-- Required --';
            obj.options[0].style.color = 'red';
          }
          break;
        case 'duplicate':
          if (obj.parentNode) {
            obj.style.width = "318px";
            obj.parentNode.className = className;
          }
          break;
      }
    } else {
      obj.className = className;
    }
  }
}

function loadXMLDoc(url) {
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest) {
    g_req = new XMLHttpRequest();
    g_req.onreadystatechange = processReqChange;
    g_req.open("GET", url, true);
    g_req.send(null);
  // branch for IE/Windows ActiveX version
  } else if (window.ActiveXObject) {
    g_req = new ActiveXObject("Microsoft.XMLHTTP");
    if (g_req) {
        g_req.onreadystatechange = processReqChange;
        g_req.open("GET", url, true);
        g_req.send();
    }
  }
}

function processReqChange() {
  // only if req shows "complete"
  if (g_req.readyState == 4) {
    // only if "OK"
    if (g_req.status == 200) {
      // ...processing statements go here...
      var response = g_req.responseXML.documentElement;
      var method = response.getElementsByTagName('method')[0].firstChild.data;
      var result = response.getElementsByTagName('result')[0].firstChild.data;
      var param1 = '';
      var cascade = '';
      try {
        param1 = response.getElementsByTagName('param1')[0].firstChild.data;
      } catch(e) {
        param1 = '';
      }
      try {
        cascade = response.getElementsByTagName('cascade')[0].firstChild.data;
      } catch(e) {
        casecade = '';
      }
      eval(method+"('"+result+"','"+param1+"');");
      if (cascade != '') {
        eval(g_cascade[cascade]);
      }
    } else {
      //alert("There was a problem retrieving the XML data:\n" + g_req.statusText);
    }
  }
}

function checkEmail(response,email,fieldId) {
  if (response != '') {
    if (response != '|ok|') {
      alert('Invalid email address format. Example: username@domain.com');
      var fieldObj = getDocObjById(response);
      if (fieldObj) {
        fieldObj.focus();
      }
    }
  } else {
    // Input mode
    var url  = 'common/checkEmail.php?email='+email+'&fieldId='+fieldId;
    loadXMLDoc(url);
  }
}

function populateTextArea(response,listId,sourceId,destId,onchange,cascade) {
  if (response != '') {
    var field = getDocObjById(listId);
    if (field) {
      response = response.replace(/\|\|/g,'\n');
      field.value = response;
    }
  } else {
    var source = getDocObjById(sourceId);
    var dest = getDocObjById(destId);
    var refId = '';
    if (source && dest) {
      if (onchange) {
        source.changed = true;
      }
      switch (source.type) {
        case 'text':
        case 'hidden':
        case 'password':
        case 'textarea':
          refId = source.value;
          break;
        case 'select-one':
          refId = source.options[source.options.selectedIndex].value;
          break;
        case 'radio':
        case 'checkbox':
          refId = source.checked;
          break;
      }
      if (refId == '' || refId == null) {
        return;
      } else {
        var url = 'common/getTextValue.php?listId='+listId+'&destId='+
          destId+'&refId='+refId+"&cascade="+cascade;
        loadXMLDoc(url);
      }
    }
  }
}

function populateDropDownList(response,listId,sourceId,destId,selectId,onchange,cascade,addlParam) {
  if (response != '') {
    // the first set is the drop down list field id and selected item value
    var items = response.split("||");
    if (items.length > 1) {
      var selected = items[0].split("=");
      var fieldObj = getDocObjById(selected[0]);
      if (fieldObj && fieldObj.options) {
        fieldObj.options.length = 0;
        for (i=1;i<items.length;i++) {
          var parts = items[i].split("=");
          if (parts.length == 2) {
            fieldObj.options.length++;
            fieldObj.options[i-1].text = parts[0];
            fieldObj.options[i-1].value = parts[1];
            if (parts[1] == selected[1]) {
              fieldObj.options.selectedIndex = i-1;
            }
          }
        }
      }
    }
  } else {
    var source = getDocObjById(sourceId);
    var dest = getDocObjById(destId);
    var refId = '';
    if (source && dest) {
      if (onchange) {
        source.changed = true;
      }
      switch (source.type) {
        case 'text':
        case 'hidden':
        case 'password':
        case 'textarea':
          refId = source.value;
          break;
        case 'select-one':
          refId = source.options[source.options.selectedIndex].value;
          break;
        case 'radio':
        case 'checkbox':
          refId = source.checked;
          break;
        case 'select-many':
          break;
      }
      if (refId == '' || refId == null) {
        if (dest.options) {
          switch (listId) {
            case 'contactList':
              dest.options.length = 0;
              dest.options.length++;
              dest.options[0].text = '-- None --';
              dest.options[0].value = '0';
              break;
            default:
              break;
          }
        }
      } else {
        var url = 'common/getListValues.php?listId='+listId+'&destId='+
          destId+'&refId='+refId+'&selectId='+selectId+'&cascade='+cascade;
        if (addlParam) {
          url += '&addlParam='+addlParam;
        }
        loadXMLDoc(url);
      }
    }
  }
}

function populateAddressFields(response,cbId,listId,cascade) {
  var addressFields = ['address1','address2','mailDrop','city','state','zipCode','countryId'];
  if (response != '') {
    var parts = response.split("||");
    if (parts.length > 0) {
      for (var i=0;i<addressFields.length;i++) {
        var fieldObj = getDocObjById(addressFields[i]);
        if (fieldObj) {
          if (fieldObj.type == 'text') {
            fieldObj.value = parts[i];
          } else {
            if (fieldObj.options) {
              for (var j=0;j<fieldObj.options.length;j++) {
                if (fieldObj.options[j].value == parts[i]) {
                  fieldObj.options.selectedIndex = j;
                  break;
                }
              }
            }
          }
        }
      }
    }
  } else {
    var cbObj = getDocObjById(cbId);
    var listObj = getDocObjById(listId);
    if (cbObj && listObj && listObj.options) {
      if (!cbObj.checked) {
        // ask to clear the address fields
        if (confirm("Clear the address fields?")) {
          // clear them
          for (var field in addressFields) {
            var fieldObj = getDocObjById(addressFields[field]);
            if (fieldObj) {
              if (fieldObj.type == 'text') {
                fieldObj.value = '';
              }
            }
          }
        }
      } else if (listObj.options[listObj.options.selectedIndex].value != '') {
        // request the address fields
        var url = 'common/getAddressFields.php?refId='+listObj.options[listObj.options.selectedIndex].value+
          '&cascade='+cascade;
        loadXMLDoc(url);
      } else {
        cbObj.checked = false;
        alert('Select a company first.');
      }
    }
  }
}

function gotoTablePage(response,obj,cur,max,xtp) {
  if (response != '') {
    document.location = "?xtp=" + response;
  } else {
    if (obj && cur && max && xtp) {
      var curPage = getDocObjById(cur);
      if (curPage && curPage.value) {
        curPage = parseInt(curPage.value);
      }
      var page = curPage;
      var maxPage = getDocObjById(max);
      if (maxPage && maxPage.value) {
        maxPage = parseInt(maxPage.value);
      }
      try {
        page = parseInt(obj.value);
      } catch (e) {
        page = curPage;
      }
      if (page != curPage) {
        if (page <= maxPage && page >= 1) {
          var url = 'common/gotoTablePage.php?xtp=' + xtp + '&pg=' + obj.value;
          loadXMLDoc(url);
        } else {
          alert("Invalid page request! Select a page between "+curPage+" and "+maxPage+".");
          obj.value = curPage;
        }
      }
    }
  }
}

function doTableSearch(response,filter,search,opt) {
  if (response != '') {
    document.location = "?xtp=" + response;
  } else {
    var g_xtp = getDocObjById("xtp");
    if (filter && search && opt && g_xtp) {
      filter = getDocObjById(filter);
      search = getDocObjById(search);
      opt = getDocObjById(opt);
      if (filter && search && opt) {
        filter = filter.options[filter.options.selectedIndex].value;
        opt = opt.options[opt.options.selectedIndex].value;
        var url = "common/doTableSearch.php?xtp=" + g_xtp.value + "&pf=" + filter +
          "&ps=" + search.value + "&op=" + opt;
        loadXMLDoc(url);
      }
    }
  }
}

function doResetTableSearch(searchButton,filter,search,opt) {
  if (searchButton && filter && search && opt) {
    searchButton = getDocObjById(searchButton);
    filter = getDocObjById(filter);
    search = getDocObjById(search);
    opt = getDocObjById(opt);
    if (searchButton && filter && search && opt) {
      filter.options.selectedIndex = 0;
      opt.options.selectedIndex = 0;
      search.value = "";
      doTableSearch('',filter.id,search.id,opt.id);
    }
  }
}

function toggleAllCheckboxes(table) {
  if (table) {
    table = getDocObjById(table);
    if (table) {
      var els = table.getElementsByTagName("INPUT");
      for (var i=0; i<els.length; i++) {
        if (els[i].type == 'checkbox') {
          els[i].click();
          var parent = els[i].parentNode.parentNode;
          parent.style.backgroundColor = parent.saveBackColor;
        }
      }
    }
  }
}

function clickDoSearchField() {
  var field = getDocObjById("doSearch");
  if (field) {
    doTableSearch('','pageFilter','pageSearch','pageOpt');
  }
}

function doOperatorChange(obj) {
  if (obj && obj.options) {
    var cmd = obj.options[obj.options.selectedIndex].value;
    if (cmd) {
      switch (cmd) {
        case "bl":
        case "nb":
        case "in":
        case "inn":
          doTableSearch('','pageFilter','pageSearch','pageOpt');
          break;
        default:
          break;
      }
    }
  }
}

function setActionCmd(action) {
  var actionCmd = getDocObjById("actionCmd");
  if (actionCmd) {
    actionCmd.value = action;
  }
}

function confirmDialog(obj) {
  var actionCmd = getDocObjById("actionCmd");
  if (actionCmd && actionCmd.value && obj) {
    var selected = false;
    var cbs = obj.getElementsByTagName("INPUT");
    var numItems = 0;
    if (cbs) {
      for (var i=0; i<cbs.length; i++) {
        if (cbs[i] && cbs[i].type && cbs[i].type == "checkbox") {
          if (cbs[i].checked) {
            selected = true;
            numItems++;
            if (actionCmd.value != 'Set Primary') {
              break;
            }
          }
        }
      }
    }
    if (!selected) {
      alert("No items were selected.");
      return false;
    }
    switch (actionCmd.value) {
      case 'Delete':
        return confirm("Delete the selected item(s)?");
      case 'Enable':
      case 'Disable':
      case 'Revoke':
      case 'Lock/Own':
        return true;
      case 'Set Primary':
        if (numItems > 1) {
          alert("Please select only one item.");
          return false;
        } else {
          return true;
        }
      default:
        alert("Unhandled action command!");
        return false;
        break;
    }
  }
}

function addRowId(obj) {
  if (obj && obj.href) {
    var cbs = obj.parentNode.parentNode.parentNode.getElementsByTagName("INPUT");
    if (cbs) {
      for (var i=0; i<cbs.length; i++) {
        if (cbs[i] && cbs[i].type && cbs[i].type == "checkbox") {
          if (cbs[i].checked) {
            var cbid = cbs[i].id.split("_");
            obj.href = obj.href+"&rowId="+cbid[1];
            break;
          }
        }
      }
    }
  }
}

function clickSelectedRow(rowId) {
  if (rowId) {
    var cb = getDocObjById("cb_"+rowId);
    if (cb) {
      cb.click();
    }
  }
}

function highlightErrorField(objName) {
  if (objName) {
    var obj = getDocObjById(objName);
    if (obj) {
      switch (obj.tagName) {
        case "TR":
        case "tr":
          obj.style.backgroundColor = "#F6C8DC";
          obj.origBackColor = obj.saveBackColor = obj.style.backgroundColor;
          break;
        default:
          break;
      }
    }
  }
}

function highlightRow(objName,color) {
  if (objName && color) {
    var obj = getDocObjById(objName);
    if (obj) {
      obj.style.backgroundColor = color;
      obj.origBackColor = obj.saveBackColor = obj.style.backgroundColor;
    }
  }
}

function addXtp(obj) {
  var xtp = getDocObjById("xtp");
  var page = getDocObjById("vcrCurrentPage");
  if (xtp && obj && obj.href) {
    var newHref = obj.href+"&xtp="+xtp.value;
    if (page) {
      newHref += "&pageId="+page.value;
    }
    obj.href = newHref;
  }
}

function hookupFieldEvents() {
  var tables = document.getElementsByTagName("TABLE");
  if (tables) {
    for (var i=0; i<tables.length; i++) {
      var els = tables[i].getElementsByTagName("*");
      for (var j=0; j<els.length; j++) {
        if (els[j].type) {
          switch (els[j].type) {
            case "text":
            case "password":
            case "checkbox":
            case "radio":
            case "textarea":
              if (!els[j].readOnly) {
                els[j].onfocus = focusBG;
                els[j].onblur = blurBG;
                if (!g_fieldExclude[els[j].id]) {
                  els[j].onchange = changeBG;
                }
              } else {
                els[j].className = "readOnly";
                els[j].parentNode.style.backgroundColor = "#dddddd";
              }
              break;
            case "select-one":
            case "select-multiple":
              if (els[j].options) {
                if (els[j].options[els[j].length-1].value != "Edit") {
                  els[j].onfocus = focusBG;
                  els[j].onblur = blurBG;
                  if (!g_fieldExclude[els[j].id]) {
                    els[j].onchange = changeBG;
                  }
                }
              }
              break;
          }
        }
      }
    }
  }
}

function focusBG() {
  this.style.backgroundColor = "#D8F9F7";
  this.parentNode.style.backgroundColor = "#D8F9F7";
  this.saveClassName = this.className;
  this.className = null;
  g_focusObject = this;
}

function blurBG() {
  if (this.changed) {
    this.style.backgroundColor = "#ffff90";
    this.parentNode.style.backgroundColor = "#ffff90";
  } else {
    this.style.backgroundColor = "#ffffff";
    this.parentNode.style.backgroundColor = "#ffffff";
  }
  if (this.value == "" && (!this.saveClassName || this.saveClassName != "")) {
    this.className = this.saveClassName;
  }
  g_focusObject = null;
}

function changeBG() {
  this.changed = true;
}

function navigateToNewPage(page) {
  if (page) {
    var xtp = getDocObjById("xtp");
    var pageId = getDocObjById("vcrCurrentPage");
    if (xtp && pageId) {
      var location = page+"&xtp="+xtp.value+"&pageId="+pageId.value;
      document.location = location;
    }
  }
}

function confirmLogout() {
  return confirm("Are you sure you want to logout?");
}

function focusField(fieldId) {
  if (fieldId) {
    fieldId = getDocObjById(fieldId);
    if (fieldId) {
      fieldId.focus();
    }
  }
}

function setCmdFrameSrc(source,display) {
  if (g_cmdFrame == null) {
    g_cmdFrame = document.createElement("iframe");
  }
  if (g_cmdFrame && source) {
    g_cmdFrame.style.position = "absolute";
    g_cmdFrame.setAttribute("frameBorder","0");
    g_cmdFrame.setAttribute("scrollObj","no");
    g_cmdFrame.id = "cmdFrame";
    g_cmdFrame.width = "300px";
    g_cmdFrame.height = "60px";
    g_cmdFrame.style.top = ((document.body.clientHeight - 60)/2)+"px";
    g_cmdFrame.style.left = ((document.body.clientWidth - 300)/2)+"px";
    g_cmdFrame.src = source;
    if (display) {
      g_cmdFrame.style.display = "block";
    } else {
      g_cmdFrame.style.display = "none";
    }
    if (!getDocObjById("cmdFrame")) {
      document.body.appendChild(g_cmdFrame);
    }
  }
}

function openHelp(source) {
  if (source) {
    var helpWindow = window.open(source,"helpWindow",
      "width=400,height=500,menubar=1");
    helpWindow.focus();
  }
}

function setHoverOn() {
  g_dropDownHover = true;
}

function setHoverOff() {
  g_dropDownHover = false;
}

function showDropDown(fieldId) {
  if (fieldId) {
    var fld = getDocObjById(fieldId);
    if (fld) {
      g_currentDropDownField = fld;
      if (g_dropDown == null) {
        g_dropDown = document.createElement("div");
      }
      if (g_dropDown && g_dropDown.style.display != "block") {
        g_dropDown.id = "cbxDropDown";
        g_dropDown.style.top = (getTopPos(fld)+19)+"px";
        g_dropDown.style.left = getLeftPos(fld)+"px";
        var width = fld.offsetWidth;
        g_dropDown.style.width = (width+21)+"px";
        g_dropDown.style.display = "block";
        g_dropDown.onmouseover = setHoverOn;
        g_dropDown.onmouseout = setHoverOff;
        g_dropDown.innerHTML = getDropDownValues(fieldId);
        hookDropDownEvents(g_dropDown);
        if (!getDocObjById("cbxDropDown")) {
          document.body.appendChild(g_dropDown);
        }
      }
    }
  }
}

function toggleDropDown(field) {
  if (g_dropDown && g_dropDown.hide) {
    g_dropDown.hide = false;
  }
  else if (field) {
    if (field.value.length == 0) {
      if (g_dropDown) {
        g_dropDown.style.display = "none";
      }
    } else {
      showDropDown(field.id);
    }
  }
}

function setDropDownFieldValue() {
  if (g_currentDropDownField) {
    g_currentDropDownField.value = this.innerHTML;
    setDropDownHiddenValue(this.title);
    if (g_dropDown) {
      g_dropDown.style.display = "none";
    }
  }
}

function hookDropDownEvents(obj) {
  if (obj) {
    var anchors = obj.getElementsByTagName("A");
    if (anchors && anchors.length > 0) {
      g_currentDropDownValues = new Array();
      for (var i=0; i<anchors.length-1; i++) {
        anchors[i].onclick = setDropDownFieldValue;
        g_currentDropDownValues[g_currentDropDownValues.length] = anchors[i];
      }
    }
  }
}

function setDropDownHiddenValue(title) {
  var hidden = getDocObjById("h_"+g_currentDropDownField.id);
  if (hidden) {
    if (title) {
      hidden.value = title;
    } else {
      hidden.value = g_selectedDropDownValue.title;
    }
  }
}

function setSelectedDropDown() {
  if (g_currentDropDownField) {
    if (g_dropDown) {
      if (g_selectedDropDownValue) {
        g_currentDropDownField.value = g_selectedDropDownValue.innerHTML;
        setDropDownHiddenValue();
        g_selectedDropDownValue = null;
      } else {
        setDropDownHiddenValue(g_currentDropDownField.value);
      }
      g_dropDown.style.display = "none";
      g_dropDown.hide = true;
    }
  }
}

function selectAllText(obj) {
  if (obj) {
    obj.select();
  }
}

function getDropDownValues(fieldId) {
  var html = "<ul>"+eval("get_"+fieldId+"_values()");
  html += "</ul><span><a href=#>more &raquo;</a></span>";
  return html;
}

function flagDropDownItem(index) {
  for (var j=0; j<g_currentDropDownValues.length; j++) {
    if (j == index) {
      g_currentDropDownValues[index].className = "selected";
    } else {
      g_currentDropDownValues[j].className = "";
    }
  }
  /*
  if (g_currentDropDownField) {
    var temp = g_currentDropDownField.value;
    g_currentDropDownField.value = g_currentDropDownValues[index].innerHTML;
    var rng = g_currentDropDownField.createTextRange();
    rng.moveStart("character",temp.length);
    rng.select();
  }
  */
}

function clearDropDownItem(index) {
  g_currentDropDownValues[index].className = "";
}

function moveDropDownSelection() {
  var index = 0;
  if (g_selectedDropDownValue && g_currentDropDownValues) {
    if (g_selectedDropDownValue.dropDownIndex) {
      index = g_selectedDropDownValue.dropDownIndex;
    }
    if (g_keyPressed == 38) {
      if (index != 0) {
        index--;
      }
    } else if (g_keyPressed == 40) {
      if (index != g_currentDropDownValues.length) {
        index++;
      }
    }
    g_selectedDropDownValue = g_currentDropDownValues[index];
    g_selectedDropDownValue.dropDownIndex = index;
    flagDropDownItem(index);
  }
}

function highlightDropDownItem() {
  /*
  if (g_hookArrowKeys && g_hookArrowKeys.length > 0 &&
    g_arrowKeysPressed) {
    g_arrowKeysPressed = false;
    return;
  }
  */
  // if the list or field is blank, return
  if (!g_currentDropDownField || !g_currentDropDownValues ||
    g_currentDropDownField.value.length == 0) {
    if (g_selectedDropDownValue) {
      clearDropDownItem(g_selectedDropDownValue.dropDownIndex);
    }
    g_selectedDropDownValue = null;
    return;
  }
  var min = 0;
  var max = g_currentDropDownValues.length-1;
  var mid = Math.round((max-min)/2);
  var searchSize = g_currentDropDownField.value.length;
  var compare = g_currentDropDownField.value.toLowerCase();
  var sqrRoot = Math.pow(g_currentDropDownValues.length,1/2)+1;
  var source = null;
  var firstIndex = null;
  if (max >= 0) {
    for (var i=0; i<sqrRoot; i++) {
      source = g_currentDropDownValues[mid].innerHTML.slice(0,searchSize).toLowerCase();
      if (source == compare) {
        // get first occurrence of found string
        firstIndex = mid;
        while (compare == g_currentDropDownValues[firstIndex].innerHTML.slice(0,searchSize).toLowerCase() &&
          firstIndex) {
          firstIndex--;
        }
        if (!(compare == g_currentDropDownValues[firstIndex].innerHTML.slice(0,searchSize).toLowerCase() &&
          !firstIndex)) {
          firstIndex++;
        }
        // select the dropdown value
        g_selectedDropDownValue = g_currentDropDownValues[firstIndex];
        g_selectedDropDownValue.dropDownIndex = firstIndex;
        flagDropDownItem(firstIndex);
        return;
      } else if (source < compare) {
        min = mid;
      } else {
        max = mid;
      }
      // check if it's the first or last element in the list
      if (max == min+1) {
        if (mid == max) {
          mid = min;
        } else if (max == g_currentDropDownValues.length-1) {
          mid = max;
        } else {
          max = min;
        }
      } else {
        mid = Math.round(((max-min)/2)+min);
      }
    }
  }
  if (g_selectedDropDownValue) {
    clearDropDownItem(g_selectedDropDownValue.dropDownIndex);
  }
  g_selectedDropDownValue = null;
}

/*
function toggleLockField(cb,fieldName) {
  if (cb && fieldName) {
    var field = getDocObjById(fieldName);
    if (cb.checked) {
      field.className = null;
      field.readOnly = false;
      field.onfocus = focusBG;
      field.onblur = blurBG;
      field.onchange = changeBG;
      field.focus();
    } else {
      field.className = "readOnly";
      field.parentNode.style.backgroundColor = "#dddddd";
      field.readOnly = true;
      field.blur();
      field.onfocus = null;
      field.onblur = null;
      field.onchange = null;
    }
  }
}
*/

function unlockField(type,link,fieldName,size,max) {
  if (type && link && fieldName) {
    var replace = document.getElementById(link);
    var field = document.createElement("input");
    if (replace && field) {
      field.type = type;
      field.name = fieldName;
      field.id = fieldName;
      field.size = size;
      field.maxLength = max;
      field.onfocus = focusBG;
      field.onblur = blurBG;
      field.onchange = changeBG;
      var parent = replace.parentNode;
      parent.className = null;
      parent.replaceChild(field,replace);
      field.focus();
    }
  }
}

function saveChangedFields() {
  var changedFields = getDocObjById("changedFields");
  if (changedFields) {
    var fields = "";
    var tables = document.getElementsByTagName("TABLE");
    if (tables) {
      for (var i=0; i<tables.length; i++) {
        var els = tables[i].getElementsByTagName("*");
        for (var j=0; j<els.length; j++) {
          if (els[j].type) {
            switch (els[j].type) {
              case "text":
              case "password":
              case "checkbox":
              case "radio":
              case "textarea":
              case "select-one":
              case "select-multiple":
                if (els[j].changed) {
                  fields += els[j].id+",";
                }
                break;
            }
          }
        }
      }
    }
    changedFields.value = fields;
  }
}

function markChangedFields() {
  var changedFields = getDocObjById("changedFields");
  if (changedFields && changedFields.value.length > 0) {
    var fields = changedFields.value.split(",");
    var el;
    for (var i=0;i<fields.length;i++) {
      if (fields[i].length > 0) {
        el = getDocObjById(fields[i]);
        if (el) {
          el.changed = true;
          el.style.backgroundColor = "#ffff90";
          el.parentNode.style.backgroundColor = "#ffff90";
        }
      }
    }
  }
}

function determineEditList(obj,listType,noList) {
  if (noList || (obj && obj.options)) {
    if (noList || obj.options[obj.options.selectedIndex].value == "Edit") {
      saveChangedFields();
      var redirectUrl = getDocObjById("redirectUrl");
      var submitButton = getDocObjById("submitButton");
      if (redirectUrl && submitButton) {
        var theForm = document.forms[0];
        theForm.action = "common/redirect.php";
        redirectUrl.value = g_redirectUrl[listType];
        if (g_redirectUrl[listType]) {
          submitButton.value = "Edit";
          submitButton.click();
        } else {
          alert("Unhandled list type: "+listType);
        }
      }
    }
  }
}

function doRedirection(listType) {
  saveChangedFields();
  var redirectUrl = getDocObjById("redirectUrl");
  var submitButton = getDocObjById("submitButton");
  if (redirectUrl && submitButton) {
    var theForm = document.forms[0];
    theForm.action = "common/redirect.php";
    redirectUrl.value = g_redirectUrl[listType];
    if (g_redirectUrl[listType]) {
      submitButton.value = "Edit";
      submitButton.click();
    } else {
      alert("Unhandled list type: "+listType);
    }
  }
}

function setItemAmountByFeeType(listObj,fieldId) {
  var field = getDocObjById(fieldId);
  if (listObj && listObj.options && field) {
    var selected = listObj.options[listObj.options.selectedIndex].text;
    var feeType = selected.substring(selected.length-1);
    var parts = selected.split("[");
    var basis = '0.00';
    if (parts.length > 1) {
      var parts2 = parts[1].split("]");
      if (parts2.length > 1) {
        basis = parts2[0];
      }
    }
    if (isNaN(basis)) {
      basis = '0.00';
    }
    switch (feeType) {
      case 'F':
      case 'M':
        if (parseInt(basis) > 1) {
          field.value = basis;
        }
        break;
      case 'P':
      case 'H':
      default:
        break;
    }
  }
}

function setItemDescByFeeType(listObj,fieldId) {
  setItemAmountByFeeType(listObj,'itemAmount');
  var field = getDocObjById(fieldId);
  if (listObj && listObj.options && field) {
    var selected = listObj.options[listObj.options.selectedIndex].text;
    field.value = selected.split(" [")[0];
  }
}

function addAttachmentField(objId) {
  var obj = getDocObjById(objId);
  var attachIndexObj = getDocObjById('attachIndex');
  var attachCountObj = getDocObjById('attachCount');
  if (obj && attachIndexObj && attachCountObj) {
    var attachCount = parseInt(attachCountObj.value)+1;
    // limit the number of attachments
    if (attachCount > 10) {
      alert('You have reached the limit of 10 attachments.');
      return;
    }
    attachCountObj.value = attachCount;
    var attachIndex = parseInt(attachIndexObj.value)+1;
    attachIndexObj.value = attachIndex;
    var newRow = document.createElement("tr");
    var labelCol = document.createElement("td");
    labelCol.className = 'labelCol';
    labelCol.innerHTML = 'Attachment';
    var dataCol = document.createElement("td");
    var deleteCol = document.createElement("td");
    deleteCol.className = 'editButton';
    var anchor = document.createElement("a");
    anchor.innerHTML = 'Delete';
    anchor.href = "javascript:deleteAttachmentField('attachment_"+attachIndex+"');";
    deleteCol.appendChild(anchor);
    var inputField = document.createElement("input");
    inputField.type = 'file';
    inputField.id = 'attachment_'+attachIndex;
    inputField.name = 'attachment_'+attachIndex;
    inputField.size = 58;
    dataCol.appendChild(inputField);
    newRow.appendChild(labelCol);
    newRow.appendChild(dataCol);
    newRow.appendChild(deleteCol);
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.insertBefore(newRow,theRow);
    }
  }
}

function deleteAttachmentField(objId) {
  var obj = getDocObjById(objId);
  var attachCountObj = getDocObjById('attachCount');
  if (obj && attachCountObj) {
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.removeChild(theRow);
      attachCountObj.value = parseInt(attachCountObj.value)-1;
    }
  }
}

function addRecipientField(objId) {
  var obj = getDocObjById(objId);
  var recipientIndexObj = getDocObjById('recipientIndex');
  var recipientCountObj = getDocObjById('recipientCount');
  if (obj && recipientIndexObj && recipientCountObj) {
    var recipientIndex = parseInt(recipientIndexObj.value)+1;
    recipientIndexObj.value = recipientIndex;
    recipientCountObj.value = parseInt(recipientCountObj.value)+1;
    var newRow = document.createElement("tr");
    var labelCol = document.createElement("td");
    labelCol.className = 'labelCol';
    labelCol.innerHTML = 'CC:';
    var dataCol = document.createElement("td");
    var deleteCol = document.createElement("td");
    deleteCol.className = 'editButton';
    var anchor = document.createElement("a");
    anchor.innerHTML = 'Delete';
    anchor.href = "javascript:deleteRecipientField('ccRecipient_"+recipientIndex+"');";
    deleteCol.appendChild(anchor);
    var inputField = document.createElement("input");
    inputField.type = 'text';
    inputField.id = 'ccRecipient_'+recipientIndex;
    inputField.name = 'ccRecipient_'+recipientIndex;
    inputField.size = 60;
    inputField.maxlength = 255;
    dataCol.appendChild(inputField);
    newRow.appendChild(labelCol);
    newRow.appendChild(dataCol);
    newRow.appendChild(deleteCol);
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.insertBefore(newRow,theRow);
      inputField.focus();
    }
  }
}

function deleteRecipientField(objId) {
  var obj = getDocObjById(objId);
  var recipientCountObj = getDocObjById('recipientCount');
  if (obj && recipientCountObj) {
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.removeChild(theRow);
      recipientCountObj.value = parseInt(recipientCountObj.value)-1;
    }
  }
}

function addInsertionDateField(objId) {
  var obj = getDocObjById(objId);
  var insertDateIndexObj = getDocObjById('insertDateIndex');
  var insertDateCountObj = getDocObjById('insertDateCount');
  if (obj && insertDateIndexObj && insertDateCountObj) {
    var insertDateIndex = parseInt(insertDateIndexObj.value)+1;
    insertDateIndexObj.value = insertDateIndex;
    insertDateCountObj.value = parseInt(insertDateCountObj.value)+1;
    var newRow = document.createElement("tr");
    var labelCol = document.createElement("td");
    labelCol.className = 'labelCol';
    labelCol.innerHTML = 'Addtl Insert Date';
    var dataCol = document.createElement("td");
    var deleteCol = document.createElement("td");
    deleteCol.className = 'editButton';
    var anchor = document.createElement("a");
    anchor.innerHTML = 'Delete';
    anchor.href = "javascript:deleteInsertionDateField('addInsertDate_"+insertDateIndex+"');";
    deleteCol.appendChild(anchor);
    var inputField = document.createElement("input");
    inputField.type = 'text';
    inputField.id = 'addInsertDate_'+insertDateIndex;
    inputField.name = 'addInsertDate_'+insertDateIndex;
    inputField.size = 56;
    inputField.maxlength = 12;
    dataCol.appendChild(inputField);
    var datePicker = document.createElement("a");
    datePicker.title = 'Click for calendar.';
    datePicker.href = "javascript:renderCal('addInsertDate_"+insertDateIndex+"',false);";
    var dateImg = document.createElement("img");
    dateImg.id = 'cal_addInsertDate_'+insertDateIndex;
    dateImg.src = 'images/date_gadget.gif';
    datePicker.appendChild(dateImg);
    dataCol.appendChild(datePicker);
    newRow.appendChild(labelCol);
    newRow.appendChild(dataCol);
    newRow.appendChild(deleteCol);
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.insertBefore(newRow,theRow);
      inputField.focus();
    }
  }
}

function deleteInsertionDateField(objId) {
  var obj = getDocObjById(objId);
  var insertDateCountObj = getDocObjById('insertDateCount');
  if (obj && insertDateCountObj) {
    var theRow = obj.parentNode.parentNode;
    if (theRow) {
      theRow.parentNode.removeChild(theRow);
      insertDateCountObj.value = parseInt(insertDateCountObj.value)-1;
    }
  }
}

function validateEmail(email) {
  var matches = email.match(/^www\.|http:\/\/|https:\/\/|ftp:\/\/|file:\/\/|mailto:/i);
  if (matches && matches.length > 0) {
    return false;
  }
  matches = email.match(/^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/);
  if (matches && matches.length > 0) {
    return true;
  }
  return false;
}

function showUploadStatusMessage() {
  var attachCountObj = getDocObjById('attachCount');
  if (parseInt(attachCountObj.value) > 0) {
    if (g_cmdFrame) {
      g_cmdFrame.style.display = "block";
    }
  }
}

function toggleCompanySelected(cbId,objId) {
  var cb = getDocObjById(cbId);
  var obj = getDocObjById(objId);
  if (cb && obj && obj.options) {
    if (cb.checked) {
      g_lastCompanySelected = obj.options.selectedIndex;
      obj.options.selectedIndex = 0;
    } else {
      obj.options.selectedIndex = g_lastCompanySelected;
    }
  }
}

function displayLoadingMessage(itemId) {
  if (itemId) {
    var itemObj = getDocObjById(itemId);
    if (itemObj) {
      switch (itemObj.type) {
        case 'text':
          break;
        case 'select-one':
          break;
        case 'textarea':
          break;
        case 'div':
          break;
      }
    }
  }
}

function doPageRefresh() {
  saveChangedFields();
  var submitButton = getDocObjById("submitButton");
  if (submitButton) {
    submitButton.value = "Refresh";
    submitButton.click();
  }
}

function autoFormatPhone(obj) {
  if (obj) {
    if (!obj.value.match(/-+/)) {
      if (obj.value.length == 7) {
        obj.value = obj.value.substring(0,3) + "-" + obj.value.substring(3,7);
      }
      else if (obj.value.length == 10) {
        obj.value = obj.value.substring(0,3) + "-" + obj.value.substring(3,6) + "-" +
          obj.value.substring(6);
      }
    }
  }
}

function createNewFile() {
  var newButton = document.getElementById('newButton');
  if (newButton) {
    newButton.click();
  }
}

function generateReport(reportId,itemId,pdfGenKey) {
  window.open("reports/pdfGen.php?reportId="+reportId+"&itemId="+itemId+"&pdfGenKey="+pdfGenKey);
}
