
var elementType = new Array("PHONE","GW","ST","PT","SRSTT","IPSLAT");
var refBW = new Array(246,246,52,52,52,52);
var baseBW = 246;
var slopeArray = new Array();
var interceptArray = new Array();
var recommendedBW = 0;



function extrapolate(newLoad)
{
	recommendedBW = baseBW;
	for (var i=0;i<newLoad.length;i++)
	{
		var forecastValue = interceptArray[i] + slopeArray[i]*newLoad[i];
		//document.write("forecastValue" + forecastValue);
		if(forecastValue <= refBW[i])
			forecastValue = 0;
		else
			forecastValue -= refBW[i];
		
		recommendedBW += forecastValue;
	}
	//document.write("Recommended Bandwidth" + Math.round(recommendedBW));
}

function loadRef()
{
	if( ! loadXmlDocument("BWRef.xml", linearReg) )
	{
      	document.write("Browser doesn't support external XML loading");
	}
}
function linearReg(xdoc)
{

      for(var i = 0; i < elementType.length; i++)
	{
	  var sumX = 0.0;
	  var sumY = 0.0;
	  var sumXX = 0.0;
	  var sumXY = 0.0;
	  var valx = 0.0;
	  var valy = 0.0;	
	  var n = 2; // total samples	

	    for(var k=0; k < n;k++)
                {
		var x=xdoc.getElementsByTagName(elementType[i])[k].childNodes;
		var y=xdoc.getElementsByTagName(elementType[i])[k].firstChild;
		for(var j=0; j < x.length; j++)
		{
			if (y.nodeType==1)
  			{
				if(y.nodeName == "Elements")
				{
					valx = parseFloat(y.childNodes[0].nodeValue);
					sumX += valx;
					sumXX += valx*valx;
				}

				else if(y.nodeName == "BW")
				{
					valy = parseFloat(y.childNodes[0].nodeValue);
					sumY += valy;
					sumXY += valx*valy;
				}

  			}
			y=y.nextSibling;
		}
		
	   }	
	   var xMean = sumX / n;

	   var yMean = sumY / n;

	   slopeArray[i] = (n*sumXY - sumX*sumY) / (n*sumXX - sumX*sumX);
	   interceptArray[i] = yMean - slopeArray[i]*xMean;
	   //document.write("y="+interceptArray[i]+"+"+slopeArray[i]+ "<br />");
	}
	//extrapolate();
}

function loadXmlDocument(xmlFile, cbFun)
{
   var xdoc;

   if( window.ActiveXObject && /Win/.test(navigator.userAgent) )
   {
      xdoc = new ActiveXObject("Microsoft.XMLDOM");

      xdoc.async = false;
      xdoc.load(xmlFile);

      cbFun(xdoc);

      return true;
   }
   else if( document.implementation && document.implementation.createDocument )
   {
      xdoc = document.implementation.createDocument("", "", null);
      xdoc.load(xmlFile);

      xdoc.onload = function()
      {
         cbFun(xdoc);
      }

      return true;
   }
   else
   {
      return false;
   }
}