var horizontal_offset="9px" //horizontal offset of hint box from anchor link

var vertical_offset="0" //horizontal offset of hint box from anchor link. No need to change.
var ie=document.all
var ns6=document.getElementById&&!document.all

function getposOffset(what, offsettype){
  var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
  var parentEl=what.offsetParent;
  while (parentEl!=null){
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
  }
  return totaloffset;
}

function iecompattest(){
  return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge){
  var edgeoffset=(whichedge=="rightedge")? parseInt(horizontal_offset)*-1 : parseInt(vertical_offset)*-1
  if (whichedge=="rightedge"){
    var windowedge=ie && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-30 : window.pageXOffset+window.innerWidth-40
    dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
    if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
      edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth+parseInt(horizontal_offset)
  }else{
    var windowedge=ie && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
    dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
    if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
      edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight
  }
  return edgeoffset
}

function showhint(menucontents, obj, e, tipwidth){
  if ((ie||ns6) && document.getElementById("hintbox")){
    dropmenuobj=document.getElementById("hintbox")
    dropmenuobj.innerHTML=menucontents
    dropmenuobj.style.left=dropmenuobj.style.top=-500
    if (tipwidth!=""){
      dropmenuobj.widthobj=dropmenuobj.style
      dropmenuobj.widthobj.width=tipwidth
    }
    dropmenuobj.x=getposOffset(obj, "left")
    dropmenuobj.y=getposOffset(obj, "top")
    dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+"px"
    dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
    dropmenuobj.style.visibility="visible"
    obj.onmouseout=hidetip
  }
}

function hidetip(e){
  dropmenuobj.style.visibility="hidden"
  dropmenuobj.style.left="-500px"
}

function createhintbox(){
  var divblock=document.createElement("div")
  divblock.setAttribute("id", "hintbox")
  document.body.appendChild(divblock)
}

if (window.addEventListener)
  window.addEventListener("load", createhintbox, false)
else if (window.attachEvent)
  window.attachEvent("onload", createhintbox)
else if (document.getElementById)
  window.onload=createhintbox


function calculateTotal(elementName){
  try{
    var totalLabel = document.getElementById(elementName);
    if(totalLabel != null){
      var dynTotal = 0;
      var boxes = document.paymentForm.elements;
      for(i = 0; i < boxes.length; i++) {
        var itemToAdd = boxes[i];
        if (itemToAdd.name.indexOf('RADIO_') != -1
            && itemToAdd.value != null
            && itemToAdd.value != ''
            && !isNaN(parseFloat(itemToAdd.value))) {
            if (startsWith(itemToAdd.name, 'RADIO_') || startsWith(itemToAdd.name, elementName.substring(0, elementName.indexOf('_')))) {
              if (endsWith(itemToAdd.name, '1')) {
                // dollars
                dynTotal = dynTotal + parseFloat(itemToAdd.value) * 100;
              } else {
                // cents
                dynTotal = dynTotal + parseFloat(itemToAdd.value);
              }
            }
        }
      }
      totalLabel.innerHTML = "<B>" + formatCurrency(dynTotal) + "</B>";
    }
  }
  catch(e){
  }
  try{
    var totalCheckAmount = document.getElementById('totalCheckAmount');
    var checkAmountRemainingLabel = document.getElementById('checkAmountRemaining');
    if (totalCheckAmount != null && checkAmountRemainingLabel != null) {
      var dynTotal = 1 * totalCheckAmount.value;
      var boxes = document.paymentForm.elements;
      for(i = 0; i < boxes.length; i++) {
        var itemToAdd = boxes[i];
        if((itemToAdd.name.indexOf('RADIO_') != -1 || itemToAdd.name.indexOf('amount1') != -1 || itemToAdd.name.indexOf('amount2') != -1)
           && itemToAdd.value != null
           && itemToAdd.value != ''
           && !isNaN(parseFloat(itemToAdd.value))) {
          if (endsWith(itemToAdd.name, '1')) {
            // dollars
            dynTotal = dynTotal - parseFloat(itemToAdd.value) * 100;
          } else {
            // cents
            dynTotal = dynTotal - parseFloat(itemToAdd.value);
          }
        }
      }
      checkAmountRemainingLabel.innerHTML = "<B>" + formatCurrency(dynTotal) + "</B>";
    }
  }
  catch(e){
  }
}

function startsWith (string1, string2) {
  return string1.substring(0, string2.length) == string2;
}

function endsWith (string1, string2) {
  var start = string1.length - string2.length;
  return string1.substring(start) == string2;
}

function formatCurrency(num) {
  num = num.toString().replace(/\$|\,/g,'');
  if(isNaN(num))
    num = "0";
  sign = (num == (num = Math.abs(num)));
  num = Math.floor(num + 0.50000000001);
  cents = num % 100;
  num = Math.floor(num / 100).toString();
  if(cents < 10)
    cents = "0" + cents;
  for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
    num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
  return (((sign) ? '' : '-') + '$' + num + '.' + cents);
}


// load the "clicked" buttons into cache
var leftCache = new Image();
leftCache.src = "/images/button_left_clicked_25.gif";

var centerCache = new Image();
centerCache.src = "/images/button_center_clicked_25.gif";

var rightCache = new Image();
rightCache.src = "/images/button_right_clicked_25.gif";

function submitForm(formName) {
  var leftButton = document.getElementById("leftButton_" + formName);
  var centerButton = document.getElementById("centerButton_" + formName);
  var rightButton = document.getElementById("rightButton_" + formName);

  // change the button text and images
  centerButton.innerHTML = "<span style='font-family: Trebuchet MS; font-size: 14px; color: #FFFFFF; font-weight: normal;'>Please Wait</span>";
  leftButton.style.backgroundImage = "url(/images/button_left_clicked_25.gif)";
  centerButton.style.backgroundImage = "url(/images/button_center_clicked_25.gif)";
  rightButton.style.backgroundImage = "url(/images/button_right_clicked_25.gif)";

  // disable the onClick and change the pointers
  leftButton.onclick = function() { return; };
  centerButton.onclick = function() { return; };
  rightButton.onclick = function() { return; };
  leftButton.style.cursor = "default";
  centerButton.style.cursor = "default";
  rightButton.style.cursor = "default";

  // submit the form
  for (var index = 0; index < document.forms.length; index++) {
    var form = document.forms[index];
    if ((form.id != null && form.id == formName) || (form.name != null && form.name == formName)) {
      form.submit();
      break;
    }
  }
}

// these 3 methods are used on the custom report
function up(current) {
  move(current, current - 1);
}
function down(current) {
  move(current, current + 1);
}
function move(current, target) {
  // swap hidden field values
  var currentField = document.getElementById('sortField' + current).value;
  var targetField = document.getElementById('sortField' + target).value;
  document.getElementById('sortField' + current).value = targetField;
  document.getElementById('sortField' + target).value = currentField;

  // swap labels
  var currentLabel = document.getElementById('label_' + current).innerHTML;
  var targetLabel = document.getElementById('label_' + target).innerHTML;
  document.getElementById('label_' + current).innerHTML = targetLabel;
  document.getElementById('label_' + target).innerHTML = currentLabel;

  // swap the dropdown values
  var currentAscending = document.getElementById('sortOrder' + current).options[0].selected
  var targetAscending = document.getElementById('sortOrder' + target).options[0].selected
  document.getElementById('sortOrder' + current).options[0].selected = targetAscending;
  document.getElementById('sortOrder' + current).options[1].selected = !targetAscending;
  document.getElementById('sortOrder' + target).options[0].selected = currentAscending;
  document.getElementById('sortOrder' + target).options[1].selected = !currentAscending;

  // swap the remove field names
  var currentRemove = document.getElementById('removeField' + current);
  var targetRemove = document.getElementById('removeField' + target);
  var removeUrl = currentRemove.href.substring(0, currentRemove.href.lastIndexOf('=') + 1);
  currentRemove.href = removeUrl + targetField;
  targetRemove.href = removeUrl + currentField;
}
