//AUTHOR: ERIC FREIER WEATHERBANK,INC.
//DATE: JUL 2009
//THE GREEN GRID FREE-COOLING PROJECT

var xmlHttp

function getdata(loc, t_max_ineq, t_max, t_min_ineq, t_min, r_ineq, r, d_max_ineq, d_max, d_min_ineq, d_min, w_ineq, w, metricFlag)
{ 

	//alert(loc + "  " + t_max + "  " + t_min + " " + d_max + "  " + d_min + " " + r);

	var url = "scripts/fetch.php";
	var addr = "localhost";
	//var port = 8082;
	var port = 8082; //US
	//var port = 8084; //JP
	
	xmlHttp=GetXmlHttpObject()
	
	//handle input exceptions like %
	r = String(r);
	var checkedString = ""
	for(c=0; c<r.length; c++)
	{
		var ch = r.charAt(c);
		if(ch != "%")
		{
			checkedString = checkedString + ch;
		}
	}
	r=checkedString;
	/////
	//EASY TO ADD ADDITIONAL USER INPUT EXCEPTION STRINGS HERE
	/////
	
	//if input data is metric, convert to F for the request
	if(metricFlag==1)
	{
		if(t_max!=-999){var t_max=CtoF(t_max);}else(t_max=-999);
		if(t_min!=-999){var t_min=CtoF(t_min);}else(t_min=-999);		
		if(d_max!=-999){var d_max=CtoF(d_max);}else(d_max=-999);
		if(d_min!=-999){var d_min=CtoF(d_min);}else(d_min=-999);
		if(w!=-999){var w=CtoF(w);}else(w=-999);
	}
	else if(metricFlag=0)
	{
		var t_max=t_max;
		var t_min=t_min;		
		var d_max=d_max;
		var d_min=d_min;
		var w=w;
	}
	
	if(t_max!=-999){t_max=(Number(t_max)+1);}
	if(t_min!=-999){t_min=(Number(t_min)-1);}
	if(d_max!=-999){d_max=(Number(d_max)+1);}
	if(d_min!=-999){d_min=(Number(d_min)-1);}
	if(r!=-999){r=(Number(r)+1);}
	if(w!=-999){w=(Number(w)+1);}	
	
	//swap the max and min if reversed
	if(t_max<t_min && t_max!="" && t_min!=""){t_hold=t_max;t_max=t_min;t_min=t_hold;}
	if(d_max<d_min && d_max!="" && d_min!=""){d_hold=d_max;d_max=d_min;d_min=d_hold;}
	  
	//create the request string in proper format
	var datString = formatRequest(loc, t_max_ineq, t_max, t_min_ineq, t_min, r_ineq, r, d_max_ineq, d_max, d_min_ineq, d_min, w_ineq, w);
	
	//alert(datString);
	
	//create the url request string
	url = url + "?str=" + datString  + "&" + "addr=" + addr + "&" + "port=" + port;	

	xmlHttp.onreadystatechange = function()
	{
		if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
		{
			var hoursArray = stateChanged();
			
			var FAChours=0;
			var EChours=0;
			
			//data priority output
			/*
			if(hoursArray[12]!="null"){FAChours=hoursArray[12];}	
			else if(hoursArray[6]!="null"){FAChours=hoursArray[6];}															   
			else if(hoursArray[8]!="null"){FAChours=hoursArray[8];}	
			else if(hoursArray[5]!="null"){FAChours=hoursArray[5];}				
			else if(hoursArray[11]!="null"){FAChours=hoursArray[11];}
			else if(hoursArray[4]!="null"){FAChours=hoursArray[4];}	
			else if(hoursArray[9]!="null"){FAChours=hoursArray[9];}	
			else if(hoursArray[1]!="null"){FAChours=hoursArray[1];}				
			else if(hoursArray[10]!="null"){FAChours=hoursArray[10];}				
			else if(hoursArray[2]!="null"){FAChours=hoursArray[2];}	
			else if(hoursArray[3]!="null"){FAChours=hoursArray[3];}	
			*/
			
			if(t_max!=-999 && t_min==-999 && d_max==-999 && d_min==-999 && r==-999){FAChours=hoursArray[1];}
			else if(t_max==-999 && t_min==-999 && d_max!=-999 && d_min==-999 && r==-999){FAChours=hoursArray[2];}
			else if(t_max==-999 && t_min==-999 && d_max==-999 && d_min==-999 && r!=-999){FAChours=hoursArray[3];}
			else if(t_max!=-999 && t_min==-999 && d_max==-999 && d_min==-999 && r!=-999){FAChours=hoursArray[4];}
			else if(t_max!=-999 && t_min==-999 && d_max!=-999 && d_min==-999 && r==-999){FAChours=hoursArray[5];}
			else if(t_max!=-999 && t_min==-999 && d_max!=-999 && d_min==-999 && r!=-999){FAChours=hoursArray[6];}
			else if(t_max!=-999 && t_min!=-999 && d_max!=-999 && d_min!=-999 && r==-999){FAChours=hoursArray[8];}	
			else if(t_max!=-999 && t_min!=-999 && d_max==-999 && d_min==-999 && r==-999){FAChours=hoursArray[9];}
			else if(t_max!=-999 && t_min!=-999 && d_max!=-999 && d_min==-999 && r==-999){FAChours=hoursArray[9];}				
			else if(t_max==-999 && t_min==-999 && d_max!=-999 && d_min!=-999 && r==-999){FAChours=hoursArray[10];}
			else if(t_max!=-999 && t_min==-999 && d_max!=-999 && d_min!=-999 && r==-999){FAChours=hoursArray[10];}			
			else if(t_max!=-999 && t_min!=-999 && d_max==-999 && d_min==-999 && r!=-999){FAChours=hoursArray[11];}
			else if(t_max!=-999 && t_min!=-999 && d_max!=-999 && d_min!=-999 && r!=-999){FAChours=hoursArray[12];}	
			
			if(hoursArray[7]!="null"){EChours=hoursArray[7];}	
			
			
			//due to a couple leap years, number of hours is forced to be only (365*24)=8760
			if(FAChours>8760){FAChours=8760;}
			if(EChours>8760){EChours=8760;}		
			
			var FACsave = airCooledSavings(FAChours, UPScapacity, electricRate, PUE, percITcooling, percChiller, percTower, percITcooling_kw, percChiller_kw, percTower_kw);
			var ECsave = evapCooledSavings(EChours, UPScapacity, electricRate, PUE, percITcooling, percChiller, percTower, percITcooling_kw, percChiller_kw, percTower_kw);
			
			//write to output
			tbox_FACwxhr.value = FAChours;
			tbox_ECwxhr.value = EChours;
			
			//format cost savings
			
			FACsavingsOutput = formatSavings(FACsave);
			ECsavingsOutput = formatSavings(ECsave);
			
			tbox_FACsavings.value = monetarySymbol + " " + FACsavingsOutput;	
			tbox_ECsavings.value = monetarySymbol + " " + ECsavingsOutput;
			
			/*
			tbox_FACsavings.value = monetarySymbol + " " + FACsave.toFixed(0);	
			tbox_ECsavings.value = monetarySymbol + " " + ECsave.toFixed(0);					
			*/
			
		}
	}
	
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
			
}

function formatRequest(loc, t_max_ineq, t_max, t_min_ineq, t_min, r_ineq, r, d_max_ineq, d_max, d_min_ineq, d_min, w_ineq, w)
{
	var datString = "";
	

	
	if(t_max==-999){tVal_max="";}else{tVal_max=t_max_ineq + t_max;}
	if(t_min==-999){tVal_min="";}else{tVal_min=t_min_ineq + t_min;}	
	if(r==-999){rVal="";}else{rVal=r_ineq + r;}	
	if(d_max==-999){dVal_max="";}else{dVal_max=d_max_ineq + d_max;}
	if(d_min==-999){dVal_min="";}else{dVal_min=d_min_ineq + d_min;}
	if(w==-999){wVal="";}else{wVal=w_ineq + w;}
	
	var datString = loc + "," + tVal_max + "," + rVal + "," + dVal_max + "," + wVal + "," + "0" + "," + tVal_min + "," + dVal_min + ",";	
	
	//alert(datString);
	
return datString;
}

function stateChanged()
{ 

	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{ 

		var xmlString=xmlHttp.responseText;
		
		//create new blank xml doc
		if(document.implementation && document.implementation.createDocument)
		{
			var doc = document.implementation.createDocument("","",null);
		}
		else
		{		
			var doc = new ActiveXObject("MSXML2.DOMDocument");
		}
		
		//parse return string in xml
		if(typeof DOMParser != "undefined")
		{
			parser = new DOMParser();
			doc = parser.parseFromString(xmlString, "text/xml");
		}
		else if(typeof ActiveXObject != "undefined")
		{	
			doc.loadXML(xmlString);
		}
		
		var nodeList = doc.getElementsByTagName('SUN');
		
		var datArray = new Array(nodeList[0].childNodes.length);
		
		//null array values
		datArray[0] = "null";
		datArray[1] = "null";
		datArray[2] = "null";
		datArray[3] = "null";
		datArray[4] = "null";	
		datArray[5] = "null";
		datArray[6] = "null";
		datArray[7] = "null";	
		datArray[8] = "null";	
		datArray[9] = "null";
		datArray[10] = "null";
		datArray[11] = "null";	
		datArray[12] = "null";			
		
		for(i=0; i<=nodeList[0].childNodes.length-1;i++)
		{		
	
			//obtain the raw tag, attributes, and text
			var childTag = nodeList[0].childNodes[i].tagName;
			var childAttr = nodeList[0].childNodes[i].getAttribute("p");	
				
			if (window.ActiveXObject)		
			{
				var childText = nodeList[0].childNodes[i].text;		
			}
			else
			{
				var childText = nodeList[0].childNodes[i].textContent;				
			}
	
			
			if(childTag=="Location"){datArray[0] = childText;}
			else if(childTag=="T"){datArray[1] = childText;}
			else if(childTag=="D"){datArray[2] = childText;}
			else if(childTag=="R"){datArray[3] = childText;}
			else if(childTag=="TR"){datArray[4] = childText;}		
			else if(childTag=="TD"){datArray[5] = childText;}
			else if(childTag=="TRD"){datArray[6] = childText;}		
			else if(childTag=="W"){datArray[7] = childText;}	
			else if(childTag=="TDrange"){datArray[8] = childText;}		
			else if(childTag=="Trange"){datArray[9] = childText;}
			else if(childTag=="Drange"){datArray[10] = childText;}
			else if(childTag=="TRrange"){datArray[11] = childText;}
			else if(childTag=="TRDrange"){datArray[12] = childText;}
					
		}	
		
		//final request output	
		return datArray;
	} 
}

function GetXmlHttpObject()
{
	var xmlHttp = null;
	
	try
	{
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		try
		{
		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
		xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	 
return xmlHttp;
} 

function formatSavings(val)
{
	//fix to 2 decimal value
	var stringVal = val.toFixed(2);
	
	//grab the ".00" suffix
	var suffixStr = stringVal.substring(stringVal.length-3,3);
	
	var prefixLength = stringVal.length-3;
	var prefixStr = stringVal.substring(0, prefixLength);
	

	charArray = new Array(prefixLength);
	
	var placeCount = 1;
	var place = 0;
	for(i=0; i<prefixStr.length; i++)
	{
		var char = prefixStr.substring(prefixStr.length-i, prefixStr.length-(i+1));
		//alert(char);
		if(placeCount%3==0)
		{		
			if(placeCount<prefixStr.length-0)
			{
				charArray[place] = char;
				charArray[place+1] = ",";
				place=(place+2);
			}
			else
			{
				charArray[place] = char;	
				place=(place+1);				
			}
		}
		else
		{	
			charArray[place] = char;	
			
			place++;
		}

		placeCount++;
	}
	
	var newStr = "";
	for(q=charArray.length-1; q>=0; q--)
	{
		newStr = newStr+charArray[q];
	}
	
	//alert(newStr);

outString = newStr;
return outString;
}
