function parse(values)
{
  var changes = new Array(2);
  var changedIds = new Array();
  var changedValues = new Array();
  if (values != "")
	{
		var rows = values.split("/");
		for (var i = 0; i < rows.length; i++)
		{
			var listing_fields = rows[i].split("*");
			var listing = listing_fields[0];
			var fields = listing_fields[1].split(";");
			for (var j = 0; j < fields.length; j++)
			{
				var pair = fields[j].split("=");
				var cell_id = "n" + listing + pair[0];
				changedIds.push(cell_id);
        changedValues.push(pair[1]);
			}
		}
	}
  changes[0] = changedIds;
  changes[1] = changedValues;
  return changes;
}

function updateCells(changes) {
  var changedIds = changes[0];
  var changedValues = changes[1];
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = document.getElementById(changedIds[i]);
    if(cellNode != null) {
      cellNode.firstChild.nodeValue = changedValues[i];
      cellNode.parentNode.style.backgroundColor = "#F0E291";
    } else {
      console.log(changedIds[i]);
    }
  }
  window.setTimeout("reset('"+changedIds+"')",1000);
}

function updateCellsWithColor(changes) {
  var colorNeutral = "#E9D561";
  var colorImprove = "#29CB29";
  var colorDecrease = "#DE4D31";
  var changedIds = changes[0];
  var changedValues = changes[1];
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = document.getElementById(changedIds[i]);
    if(cellNode != null) {
      var oldValue = cellNode.firstChild.nodeValue;
      cellNode.firstChild.nodeValue = changedValues[i];
      if(oldValue.indexOf(":")>-1) {
        cellNode.parentNode.style.backgroundColor = colorNeutral;
      } else {
        if(changedValues[i] > oldValue) {
          cellNode.parentNode.style.backgroundColor = colorImprove;
        }
        if(changedValues[i] < oldValue) {
          cellNode.parentNode.style.backgroundColor = colorDecrease;
        }
      }
    }
  }
  window.setTimeout("reset('"+changedIds+"')",1000);
}

function updateCells2(changes) {
  var changedIds = changes[0];
  var changedValues = changes[1];
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = parent.document.getElementById(changedIds[i]);
    cellNode.firstChild.nodeValue = changedValues[i];
    cellNode.parentNode.style.backgroundColor = "#F0E291";

  }
}

function updateCellsHeatmap(changes) {
  var changedIds = changes[0];
  var changedValues = changes[1];
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = document.getElementById(changedIds[i]);
    if(cellNode != null) {
      cellNode.firstChild .nodeValue = changedValues[i];
      cellNode.parentNode.parentNode.parentNode.parentNode.style.backgroundColor = "#F0E291";
    } else {
      //alert(changedIds[i]);
      window.status.text = changedIds[i] + "nicht bekannt!"
    }
  }
  window.setTimeout("resetCellsHeatmap('"+changedIds+"')",1000);
}

function reset(changes) {
  var changedIds = changes.split(",");
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = document.getElementById(changedIds[i]);
    if(cellNode != null) {
      cellNode.parentNode.style.backgroundColor = "";
    }
  }
}

function resetCellsHeatmap(changes) {
  var changedIds = changes.split(",");
  for(var i = 0; i < changedIds.length; i++) {
    var cellNode = document.getElementById(changedIds[i]);
    if(cellNode!=null) {
      cellNode.parentNode.parentNode.parentNode.parentNode.style.backgroundColor = "";
    }
  }
}

function reset2(changes2) {
  var changes = changes2[0];
  for(var i = 0; i < changes.length; i++) {
    var cellNode = document.getElementById(changes[i]);
    cellNode.parentNode.style.backgroundColor = "";
  }
}

function resetHeatmap(changed)
{
  var changes = changed[0];
  for (var i = 0; i < changes.length; i++)
	{
		var cellNode = parent.document.getElementById(changes[i]);
		cellNode.parentNode.parentNode.parentNode.parentNode.style.backgroundColor = "";
	}
}

function timer(changes)
{
  window.setTimeout("reset2(changes)", 1000);
	window.setInterval("document.location.reload()", 5000);
}

function timerHeatmap(changes)
{
  window.setTimeout("resetHeatmap(changes)", 1000);
	window.setInterval("document.location.reload()", 5000);
}

//ajax
var request = null;
try {
  request = new XMLHttpRequest();
} catch(trymicrosoft) {
  try {
    request = new ActiveXObject("Msxml2.XMLHTTP");
  } catch(othermicrosoft) {
    try {
      request = new ActiveXObject("Microsoft.XMLHTTP");
    } catch(failed) {
      request = null;
    }
  }
}
if(request == null) {
    alert("Error creating request object!");
}

function doRequest(cachename) {
   request.open("GET", "utils/includes/txt/pullData.jsp?cachename="+cachename, true);
   request.onreadystatechange = updatePage;
   request.send(null);
}

function doHeatMapRequest(cachename) {
   request.open("GET", "utils/includes/txt/pullData.jsp?cachename="+cachename, true);
   request.onreadystatechange = updateHeatMap;
   request.send(null);
}

function updatePage() {
   if (request.readyState == 4) {
     if (request.status == 200) {
       var updatedValues = request.responseText;
       if(updatedValues != "") {
         var changes = parse(updatedValues);
         updateCells(changes);
       }
    } else
      alert("Error! Request status is " + request.status);
    }
}

function updatePage2(response) {
  if(response != "") {
    var changes = parse(response);
    return changes;
  }
}

function format(newValue, oldValue) {
  if(oldValue.indexOf(".")>-1 || (oldValue.indexOf("---")>-1 && newValue.indexOf(".")>-1)) {
    newValue = parseFloat(newValue).toFixed(2);
    if(oldValue.indexOf("%")>-1) {
      newValue = oldValue.substr(0,1) + newValue + "%";
    }
  }
  return newValue;
}




function updateHeatMap() {
  if (request.readyState == 4) {
    if (request.status == 200) {
      var updatedValues = removeLeading(request.responseText);
      if(updatedValues.length > 8 ) { //if there is no updated values no need to parse and update the cells
        var changes = parse(updatedValues);
        updateCells(changes);
      }
    } else {
      alert("Error! Request status is " + request.status);
    }
  }
}

function a(transport) {
  var updatedValues = request.responseText;
       if(updatedValues != "") {
         var changes = parse(updatedValues);
         updateCells(changes);
       }
}

function removeLeading(response) {
  response = response.replace(/\n/g,"");
  return response.replace(/\r/g,"");
}


