//AUTHOR: ERIC FREIER WEATHERBANK,INC.
//DATE: JUL 2009
//WEATHERBANK CRITERIA CALCULATOR
function makeRequest(loc, sdate, edate, tMin, tMax, rhMin, rhMax, ccMin, ccMax, wsMin, wsMax, wdMin, wdMax, pcpMin, pcpMax, snowMin, snowMax, maxtMin, maxtMax, mintMin, mintMax, avgtMin, avgtMax, avgccMin, avgccMax, avgwsMin, avgwsMax, maxgstMin, maxgstMax, avgwdMin, avgwdMax, totpcpMin, totpcpMax, totsnowMin, totsnowMax)
{
	//count numParams
	if(c1==1){numParams=numParams+1;}
	if(c2==1){numParams=numParams+1;}
	if(c3==1){numParams=numParams+1;}	

	//create the request string in proper format
	var url = "scripts/fetch.php";
	var addr = "archive.weatherbank.com";
	var port = 8087;

	var datString = "";
	if(HDtype == "h")//CASE: HOURLY DATA
	{
		//create the datString
		datString = h_formatRequest(loc, sdate, edate, tMin, tMax, rhMin, rhMax, ccMin, ccMax, wsMin, wsMax, wdMin, wdMax, pcpMin, pcpMax, snowMin, snowMax);	
		//alert(datString);
		//alert(loc+" "+sdate+" "+edate+" "+tMin+" "+tMax+" "+rhMin+" "+rhMax+" "+ccMin+" "+ccMax+" "+wsMin+" "+wsMax+" "+wdMin+" "+wdMax+" "+pcpMin+" "+pcpMax+" "+snowMin+" "+snowMax);

	}
	else if(HDtype == "d")//CASE: DAILY DATA
	{	
		//create the datString		
		datString = d_formatRequest(loc, sdate, edate, maxtMin, maxtMax, mintMin, mintMax, avgtMin, avgtMax, avgccMin, avgccMax, avgwsMin, avgwsMax, maxgstMin, maxgstMax, avgwdMin, avgwdMax, totpcpMin, totpcpMax, totsnowMin, totsnowMax);
		//alert(datString);		
		//alert(loc+" "+sdate+" "+edate+" "+maxtMin+" "+maxtMax+" "+mintMin+" "+mintMax+" "+avgtMin+" "+avgtMax+" "+avgccMin+" "+avgccMax+" "+avgwsMin+" "+avgwsMax+" "+maxgstMin+" "+maxgstMax+" "+avgwdMin+" "+avgwdMax+" "+totpcpMin+" "+totpcpMax+" "+totsnowMin+" "+totsnowMax);		
	}

	//create the url request string
	url = url + "?str=" + datString  + "&" + "addr=" + addr + "&" + "port=" + port;		
	//alert(url);
	
	//create XmlHttpObject
	xmlHttp=GetXmlHttpObject();	
	
	//upon readystatechange
	xmlHttp.onreadystatechange = function()
	{
		
		if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
		{
			//receive XML doc from data receiver
			var XMLData = recvData();
			
			var nodeList = XMLData.getElementsByTagName('Data');
		
			datArray = new Array(nodeList[0].childNodes.length);
		
			//null array values
			datArray[0] = "null";//station
			datArray[1] = "null";//lat
			datArray[2] = "null";//lon
			datArray[3] = "null";//InPeriod
			datArray[4] = "null";//PerPeriod

			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=="Station")
				{
					datArray[0] = childText;
				}
				else if(childTag=="Lat")
				{
					datArray[1] = childText;					
				}
				else if(childTag=="Lon")
				{
					datArray[2] = childText;					
				}		
				else if(childTag=="COUNT_InPeriod")
				{
					datArray[3] = childText;
				}
				else if(childTag=="COUNT_PerPeriod")
				{
					datArray[4] = childText;					
				}			
		
			}
			
		//call the display update
		displayOutput();				
			
		}
		
	}			
	
	//initiate the GET
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
	
}

function recvData()
{
	if(xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
		//get the response
		var rawReturnString=xmlHttp.responseText;	
		//alert(rawReturnString);

		//parse the response string into an XML doc
		var XMLData = XMLparser(rawReturnString);
	}
	
return XMLData;
}

function h_formatRequest(loc, sdate, edate, tMin, tMax, rhMin, rhMax, ccMin, ccMax, wsMin, wsMax, wdMin, wdMax, pcpMin, pcpMax, snowMin, snowMax)
{
	var requestString = "";
	
	if(dataType == "1")
	{
		if(tMin==-999 & tMax==999){tString = ",";}
		else
		{
			if(tMax<tMin)
			{
				swapArray = invertNumberValues(tMin, tMax); //swap the values
				tMin = swapArray[0];
				tMax = swapArray[1];
			}
			tString = tMin + "," + tMax;
		}
		if(rhMin==-999 & rhMax==999){rhString = ",";}
		else
		{
			if(rhMax<rhMin)
			{
				swapArray = invertNumberValues(rhMin, rhMax); //swap the values
				rhMin = swapArray[0];
				rhMax = swapArray[1];
			}			
			rhString = rhMin + "," + rhMax;
		}
		if(ccMin==-999 & ccMax==999){ccString = ",";}
		else
		{
			if(ccMax<ccMin)
			{
				swapArray = invertNumberValues(ccMin, ccMax); //swap the values
				ccMin = swapArray[0];
				ccMax = swapArray[1];
			}				
			ccString = ccMin + "," + ccMax;
		}
		if(wsMin==-999 & wsMax==999){wsString = ",";}
		else
		{
			if(wsMax<wsMin)
			{
				swapArray = invertNumberValues(wsMin, wsMax); //swap the values
				wsMin = swapArray[0];
				wsMax = swapArray[1];
			}				
			wsString = wsMin + "," + wsMax;
		}		
		if(wdMin==-999 & wdMax==999){wdString = ",";}
		else
		{
			if(wdMax<wdMin)
			{
				swapArray = invertNumberValues(wdMin, wdMax); //swap the values
				wdMin = swapArray[0];
				wdMax = swapArray[1];
			}				
			wdString = wdMin + "," + wdMax;
		}			
		if(pcpMin==-999 & pcpMax==999){pcpString = ",";}
		else
		{
			if(pcpMax<pcpMin)
			{
				swapArray = invertNumberValues(pcpMin, pcpMax); //swap the values
				pcpMin = swapArray[0];
				pcpMax = swapArray[1];
			}				

			//convert pcp values to 100th's
			pcpMin = (pcpMin*100);
			pcpMax = (pcpMax*100);
			
			pcpString = pcpMin + "," + pcpMax;
		}	
		if(snowMin==-999 & snowMax==999){snowString = ",";}
		else
		{
			if(snowMax<snowMin)
			{
				swapArray = invertNumberValues(snowMin, snowMax); //swap the values
				snowMin = swapArray[0];
				snowMax = swapArray[1];
			}				
			snowString = snowMin + "," + snowMax;
		}			

	}
	else if(dataType == "2" || dataType == "3")
	{
		p=param1;
		if(p=="tmp"){tString = "avg" + "," + "avg";}else{tString = ",";}
		if(p=="hum"){rhString = "avg" + "," + "avg";}else{rhString = ",";}
		if(p=="clc"){ccString = "avg" + "," + "avg";}else{ccString = ",";}
		if(p=="wsp"){wsString = "avg" + "," + "avg";}else{wsString = ",";}
		if(p=="wdr"){wdString = "avg" + "," + "avg";}else{wdString = ",";}
		if(p=="pcp"){pcpString = "avg" + "," + "avg";}else{pcpString = ",";}
		if(p=="sno"){snowString = "avg" + "," + "avg";}else{snowString = ",";}
	}
	else if(dataType == "4")
	{	
		//TODO
	}
	
	requestString = "H" + loc +","+ sdate +","+ edate +","+ tString +","+ rhString +","+ ccString +","+ wsString +","+ wdString +","+ pcpString +","+ snowString + " ";

return requestString;
}

function d_formatRequest(loc, sdate, edate, maxtMin, maxtMax, mintMin, mintMax, avgtMin, avgtMax, avgccMin, avgccMax, avgwsMin, avgwsMax, maxgstMin, maxgstMax, avgwdMin, avgwdMax, totpcpMin, totpcpMax, totsnowMin, totsnowMax)
{
	var requestString = "";
	if(dataType == "1")
	{
		
		if(maxtMin==-999 & maxtMax==999){maxtString = ",";}
		else
		{
			if(maxtMax<maxtMin)
			{
				swapArray = invertNumberValues(maxtMin, maxtMax); //swap the values
				maxtMin = swapArray[0];
				maxtMax = swapArray[1];
			}
			maxtString = maxtMin + "," + maxtMax;
		}		
		if(mintMin==-999 & mintMax==999){mintString = ",";}
		else
		{
			if(mintMax<mintMin)
			{
				swapArray = invertNumberValues(mintMin, mintMax); //swap the values
				mintMin = swapArray[0];
				mintMax = swapArray[1];
			}
			mintString = mintMin + "," + mintMax;
		}			
		if(avgtMin==-999 & avgtMax==999){avgtString = ",";}
		else
		{
			if(avgtMax<avgtMin)
			{
				swapArray = invertNumberValues(avgtMin, avgtMax); //swap the values
				avgtMin = swapArray[0];
				avgtMax = swapArray[1];
			}
			avgtString = avgtMin + "," + avgtMax;
		}			
		if(avgccMin==-999 & avgccMax==999){avgccString = ",";}
		else
		{
			if(avgccMax<avgccMin)
			{
				swapArray = invertNumberValues(avgccMin, avgccMax); //swap the values
				avgccMin = swapArray[0];
				avgccMax = swapArray[1];
			}
			avgccString = avgccMin + "," + avgccMax;
		}			
		if(avgwsMin==-999 & avgwsMax==999){avgwsString = ",";}
		else
		{
			if(avgwsMax<avgwsMin)
			{
				swapArray = invertNumberValues(avgwsMin, avgwsMax); //swap the values
				avgwsMin = swapArray[0];
				avgwsMax = swapArray[1];
			}
			avgwsString = avgwsMin + "," + avgwsMax;
		}			
		if(maxgstMin==-999 & maxgstMax==999){maxgstString = ",";}
		else
		{
			if(maxgstMax<maxgstMin)
			{
				swapArray = invertNumberValues(maxgstMin, maxgstMax); //swap the values
				maxgstMin = swapArray[0];
				maxgstMax = swapArray[1];
			}
			maxgstString = maxgstMin + "," + maxgstMax;
		}		
		if(avgwdMin==-999 & avgwdMax==999){avgwdString = ",";}
		else
		{
			if(avgwdMax<avgwdMin)
			{
				swapArray = invertNumberValues(avgwdMin, avgwdMax); //swap the values
				avgwdMin = swapArray[0];
				avgwdMax = swapArray[1];
			}
			avgwdString = avgwdMin + "," + avgwdMax;
		}			
		if(totpcpMin==-999 & totpcpMax==999){totpcpString = ",";}
		else
		{
			if(totpcpMax<totpcpMin)
			{
				swapArray = invertNumberValues(totpcpMin, totpcpMax); //swap the values
				totpcpMin = swapArray[0];
				totpcpMax = swapArray[1];
			}
			
			//convert pcp values to 100th's
			totpcpMin = (totpcpMin*100);
			totpcpMax = (totpcpMax*100);			
			
			totpcpString = totpcpMin + "," + totpcpMax;
		}
		if(totsnowMin==-999 & totsnowMax==999){totsnowString = ",";}
		else
		{
			if(totsnowMax<totsnowMin)
			{
				swapArray = invertNumberValues(totsnowMin, totsnowMax); //swap the values
				totsnowMin = swapArray[0];
				totsnowMax = swapArray[1];
			}
			totsnowString = totsnowMin + "," + totsnowMax;
		}
		
	}
	else if(dataType == "2" || dataType == "3")
	{
		p=param1;
		if(p=="maxt"){maxtString = "avg" + "," + "avg";}else{maxtString = ",";}
		if(p=="mint"){mintString = "avg" + "," + "avg";}else{mintString = ",";}
		if(p=="avgt"){avgtString = "avg" + "," + "avg";}else{avgtString = ",";}
		if(p=="acc"){avgccString = "avg" + "," + "avg";}else{avgccString = ",";}
		if(p=="aws"){avgwsString = "avg" + "," + "avg";}else{avgwsString = ",";}
		if(p=="maxg"){maxgstString = "avg" + "," + "avg";}else{maxgstString = ",";}
		if(p=="awd"){avgwdString = "avg" + "," + "avg";}else{avgwdString = ",";}
		if(p=="totpcp"){totpcpString = "avg" + "," + "avg";}else{totpcpString = ",";}
		if(p=="totsno"){totsnowString = "avg" + "," + "avg";}else{totsnowString = ",";}	
	}
	else if(dataType == "4")
	{
		//TODO
	}	
	
	requestString = "D" + loc +","+ sdate +","+ edate +","+ maxtString +","+ mintString +","+ avgtString +","+ avgccString +","+ avgwsString +","+ maxgstString +","+ avgwdString +","+ totpcpString +","+ totsnowString + " ";
	
	return requestString;	
}

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 XMLparser(inString)
{
	//create new blank xml doc
	if(document.implementation && document.implementation.createDocument)
	{
		var xmlDoc = document.implementation.createDocument("","",null);
	}
	else
	{		
		var xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
	}
	
	//parse return string in xml
	if(typeof DOMParser != "undefined")
	{
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(inString, "text/xml");
	}
	else if(typeof ActiveXObject != "undefined")
	{	
		xmlDoc.loadXML(inString);
	}
	
return xmlDoc
}



