function calculateSavings(){
	var users = document.getElementById('users');    
	var numUsers = (users.value <= 0 && users.value != '' ? 3 : users.value);
		users.value = numUsers;
		
    var urlString = 'users=' + numUsers; 
    
    var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	
	var fnWhenDone = function (oXML){	
       	var xml = oXML.responseXML;
			
			// Server
			var server_yr1 = document.getElementById('server_yr1');
			var server_yr2 = document.getElementById('server_yr2');
			var server_yr3 = document.getElementById('server_yr3');
			
			server_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/server/year_1/text()").nodeValue : '&nbsp;');
			//server_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/server/year_2/text()").nodeValue : '&nbsp;');
			//server_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/server/year_3/text()").nodeValue : '&nbsp;');
			
			// Microsoft Licensing
			var mslicensing_yr1 = document.getElementById('mslicensing_yr1');
			var mslicensing_yr2 = document.getElementById('mslicensing_yr2');
			var mslicensing_yr3 = document.getElementById('mslicensing_yr3');
			
			mslicensing_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/msLicensing/year_1/text()").nodeValue : '&nbsp;');
			//mslicensing_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/msLicensing/year_2/text()").nodeValue : '&nbsp;');
			//mslicensing_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/msLicensing/year_3/text()").nodeValue : '&nbsp;');
			
			// Backup Hardware / Software
			var backuphwsw_yr1 = document.getElementById('backuphwsw_yr1');
			var backuphwsw_yr2 = document.getElementById('backuphwsw_yr2');
			var backuphwsw_yr3 = document.getElementById('backuphwsw_yr3');
			
			backuphwsw_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/backupHwSw/year_1/text()").nodeValue : '&nbsp;');
			backuphwsw_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/backupHwSw/year_2/text()").nodeValue : '&nbsp;');
			backuphwsw_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/backupHwSw/year_3/text()").nodeValue : '&nbsp;');
			
			// Administration
			var admin_yr1 = document.getElementById('admin_yr1');
			var admin_yr2 = document.getElementById('admin_yr2');
			var admin_yr3 = document.getElementById('admin_yr3');
			
			admin_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/admin/year_1/text()").nodeValue : '&nbsp;');
			admin_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/admin/year_2/text()").nodeValue : '&nbsp;');
			admin_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/admin/year_3/text()").nodeValue : '&nbsp;');
			
			// Initial Setup
			var initsetup_yr1 = document.getElementById('initsetup_yr1');
			var initsetup_yr2 = document.getElementById('initsetup_yr2');
			var initsetup_yr3 = document.getElementById('initsetup_yr3');
			
			initsetup_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/initialSetup/year_1/text()").nodeValue : '&nbsp;');
			//initsetup_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/initialSetup/year_2/text()").nodeValue : '&nbsp;');
			//initsetup_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/initialSetup/year_3/text()").nodeValue : '&nbsp;');
			
			// Annual In-House Costs
			var annualinhouse_yr1 = document.getElementById('annualinhouse_yr1');
			var annualinhouse_yr2 = document.getElementById('annualinhouse_yr2');
			var annualinhouse_yr3 = document.getElementById('annualinhouse_yr3');
			
			annualinhouse_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/annualInHouse/year_1/text()").nodeValue : '&nbsp;');
			annualinhouse_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/annualInHouse/year_2/text()").nodeValue : '&nbsp;');
			annualinhouse_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/annualInHouse/year_3/text()").nodeValue : '&nbsp;');
			
			// 3 Yr In House Cost
			var threeyrinhouse_yr1 = document.getElementById('threeyrinhouse_yr1');
			var threeyrinhouse_yr2 = document.getElementById('threeyrinhouse_yr2');
			var threeyrinhouse_yr3 = document.getElementById('threeyrinhouse_yr3');
			
			threeyrinhouse_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/threeYrInHouse/year_1/text()").nodeValue : '&nbsp;');
			//threeyrinhouse_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/threeYrInHouse/year_2/text()").nodeValue : '&nbsp;');
			//threeyrinhouse_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/threeYrInHouse/year_3/text()").nodeValue : '&nbsp;');
			
			// Per User
			var peruser_yr1 = document.getElementById('peruser_yr1');
			var peruser_yr2 = document.getElementById('peruser_yr2');
			var peruser_yr3 = document.getElementById('peruser_yr3');
			
			peruser_yr1.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/perUser/year_1/text()").nodeValue : '&nbsp;');
			//peruser_yr2.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/perUser/year_2/text()").nodeValue : '&nbsp;');
			//peruser_yr3.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/perUser/year_3/text()").nodeValue : '&nbsp;');
			
			// Overall Totals
			
			// Monthly Costs
			var monthlycosts = document.getElementById('monthlycosts');
				monthlycosts.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/monthlyCost/text()").nodeValue : '&nbsp;');
				
			// 3 Yr Cost
			var threeyrcost = document.getElementById('threeyrcost');
				threeyrcost.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/threeYrCost/text()").nodeValue : '&nbsp;');
				
			// Per User Sum
			var perusersum = document.getElementById('perusersum');
				perusersum.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/perUserSum/text()").nodeValue : '&nbsp;');
				
			// First Year Savings
			var firstyrsavings = document.getElementById('firstyrsavings');
				firstyrsavings.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/firstYrSavings/text()").nodeValue : '&nbsp;');
				
			// 3 Year Savings
			var threeyrsavings = document.getElementById('threeyrsavings');
				threeyrsavings.innerHTML = (numUsers > 0 ? '$' + xml.selectSingleNode("savingsResult/threeYrSavings/text()").nodeValue : '&nbsp;');
	};
	
	myConn.connect("inc.savingsCalculator.php", "GET", urlString, fnWhenDone);	
}

function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

// mozXPath [http://km0ti0n.blunted.co.uk/mozxpath/] km0ti0n@gmail.com
// Code licensed under Creative Commons Attribution-ShareAlike License 
// http://creativecommons.org/licenses/by-sa/2.5/
if( document.implementation.hasFeature("XPath", "3.0") ){
	if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
	
  	XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
    	if( !xNode ) { xNode = this; } 
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);	}
		return aResult;
	}
	
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; } 
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){return xItems[0];	}
		else{return null;	}
	}
	
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){	return this.ownerDocument.selectNodes(cXPathString, this);}
		else{throw "For XML Elements Only";}
	}
	
	Element.prototype.selectSingleNode = function(cXPathString){	
		if(this.ownerDocument.selectSingleNode){return this.ownerDocument.selectSingleNode(cXPathString, this);	}
		else{throw "For XML Elements Only";}
	}
}