function calculateFields()
{
  for (var i=0;i<calculatefields.length; i++)
  {
    recalculate(calculatefields[i]["calc"], calculatefields[i]["field"]);
  }
}

function recalculate(calculation, fieldname)
{
  var calc = calculation;
  var calc2 = "";
  var calfields = regExpToArray("([^\/\*\+-]+)", calculation, 1);

  for (var i=0;i<calfields.length;i++)
  {
    if (calfields[i]["value"] != '')
    {
      field = fields[calfields[i]["value"]];
      value = getValue(field, calculation, calfields[i]["index"]);
      calc2 += value + calculation.substr(calfields[i]["index"]+calfields[i]["value"].length,1);
    }
  }
  var total = eval(calc2);
  total = Math.round(total*100)/100;

  
  var obj = document.getElementById('divcalc_' + fieldname);
  obj.innerHTML = total;
}

function regExpToArray(regex, string, index)
{
  var test = new RegExp(regex, "gi");
  var m = test.exec(string);
 
  var result = new Array();
  while (m != null)
  { 
    var i = result.length;
    result[i] = new Array();
    result[i]["value"] = m[index];
    result[i]["index"] = m.index;
    var m = test.exec(string);
  }
  return result;
}

function getValue(field, calculation, index)
{
  var numReg = "^[0-9]*[,.]*[0-9]+$";
	var regex = new RegExp(numReg);
	var objvalue = getObjectValue(field);
	
  if (objvalue != "") 
  {
    if (regex.test(objvalue)) objvalue = objvalue.replace(",", ".");
    else 
    {
      objvalue = 0;
      setObjectValue(field, 0);
    }  
  }  
  else objvalue = 0;
  
  if (calculation.substr(index-1,1) == '/' && objvalue == 0) return 1;
  else return objvalue;
}

function getObjectValue(field)
{
  var types = field.split('.');
  
  switch (types[0])
  {
    case "formtableattribute":
      var obj = document.getElementById('tblGrid_' + types[1]);
      lastrow = obj.rows.length-1;
      lastcell = obj.rows[lastrow].childNodes.length-1;
      value = obj.rows[lastrow].childNodes[lastcell].innerHTML;
      if (value == '&nbsp;') value = 0;
      break;
    case "formcalculationattribute":
      var obj = document.getElementById('divcalc_' + types[1]);
      value = obj.innerHTML;
      break;
    default:
      var obj = eval('document.entryform.' + types[1]);
      value = obj.value;
      break;
  }
  return value;
}

function setObjectValue(field, value)
{
  var types = field.split('.');
  
  switch (types[0])
  {
    case "formcalculationattribute":
      var obj = document.getElementById('divcalc_' + types[1]);
      obj.innerHTML = value;
      break;
    default:
      var obj = eval('document.entryform.' + types[1]);
      obj.value = value;
      break;
  }
}
