/*
 *	Functions listed in this page have been written to meet 
 *  the specific needs of this project and does not constitute 
 *  the standard set of ArcIMS HV functions
 * 
 *
 *	Written By T M Govindarajan, 
 *  Tata Consultancy Services
 *
 *  March,2003
 *  Copyrights TCS
 *
 */


var INCOIS_ARGO_URL="http://www.incois.gov.in";


//Convert Degree decimals to DMS
function DD_To_DMS(aValue)
{
	try
	{
		//
		var Deg=parseInt(aValue);
		var dec = aValue-Deg;

		//
		var tmp = dec*60;
		var Mins = parseInt(tmp);

		var Sec = parseInt((dec-Mins/60.0)*3600.0+0.5);
		var myString = new String("o");
		var str = myString.sup();

		//var strvar=document.writeln(Deg + "d<sup>o</sup>" + Mins + "' " + Sec + "\"");
		//var strwrite =parent.SouthLeft.document.writeln(Deg + "d"+ "<sup>o</sup>" + Mins + "' " + Sec + "\"");
		//var strwrite = parent.SouthLeft.document.writeln(Deg + strwrite + Mins + "' " + Sec + "\"");
		return Deg +"d "+ Mins + "m " + Sec + "s ";
		//return strwrite;
	}
	catch(e)
	{
		return "-999.0";
	}
}


//Display Tips
function DisplayTips()
{
		switch(parent.MapFrame.toolMode)
		{
			case 1: strDisplay = " Current Tool is Zoom In";
					break;
			
			case 2: strDisplay = " Current Tool is Zoom Out";
					break;
					
			case 5: strDisplay = " Current Tool is Float Info";
					break;

			case 9: strDisplay = " No Current Tool";
					break;

			case 10:strDisplay = " Current Tool is Box Select";
					break;
					
			case 20:strDisplay = " Current Tool is Measure";
					break;
		}

		parent.SouthRight.document.location="argoDisplay.htm";
					
}


/*
 * Set Map Extents
 */
function setMapExtents()
{
	//Zoom To Layer
	//zoomToEnvelope(30.27065619,-42.59580267,119.74595066,29.095582344);
	zoomToEnvelope(20,-80,140,30);
}

function getMapExtents()
{
	alert(" eLeft " + eLeft + " eBottom " + eBottom + " eRight " + eRight + " eTop " + eTop);
}

//
function isEmpty(s)
{   
	return ((s == null) || (s.length == 0))
}


//
function findArgo()
{
	//
	var aValue=parent.ToolsFrame.document.argoTools.WmoNo.value;
	
	//Check
	if (isEmpty(aValue)==true || isAlphaNumeric(aValue)==false)
	{
		alert("Illegal value supplied for WMO ID.")
		return;
	}

	//Sets the first Layer i.e the Argo Layer as the active Layer
	//setActiveLayer(0);

	//
	var strSQL = " SDE.ARGO.WMO_NO =&apos;"+ aValue.toUpperCase() +"&apos;";
	sendQueryString(strSQL);
}

  //Clear map
  function MapRefresh()
  {
		parent.ToolsFrame.document.argoTools.theMeasTotal.value="";
		parent.ToolsFrame.document.argoTools.WmoNo.value="";
		parent.MapFrame.clickFunction('clearsel');
  }


function ToggleTrajectory()
{
	//If visible set it to INVISIBLE and vice versa
	LayerVisible[fltLTrailIndex]=(LayerVisible[fltLTrailIndex]==1)?0:1;
	LayerVisible[fltPTrailIndex]=(LayerVisible[fltPTrailIndex]==1)?0:1;
	
	
	//Dummy Refresh
	zoomToEnvelope(eLeft,eBottom,eRight,eTop);

	//Update
	UpdateLayers();
}

function UpdateLayers()
{
	//Update Layers
	if(LayerVisible[fltPTrailIndex]==1)
		parent.ToolsFrame.document.argoTools.trail.src="images/webdesign/eye_open.jpg"
	else
		parent.ToolsFrame.document.argoTools.trail.src="images/webdesign/eye_closed.jpg"
}



//
function displayJSPWindow(theReply)
{

	//
	setLayerFields(ActiveLayerIndex);
	var theError = getXMLErrorMessage(theReply);

	var fCount = justGetFeatureCount(theReply);
	var spos = 0;
	var epos=0;

	var selectedData="";

	var arrX=new Array();
	var arrY=new Array();
	var arrStrIDS = new Array();

	//Selection Extents
	var MINX_JSP=-1;
	var MINY_JSP=-1;
	var MAXX_JSP=-1;
	var MAXY_JSP=-1;

	var strArgoIDs="|";		
	//alert(theReply);

	spos = theReply.indexOf('<FIELDS ');
	if(spos==-1)
		return;
		
	epos = theReply.indexOf('/>',spos);
	selectedData=theReply.substring(spos+7,epos-2);
	//alert(selectedData);

	var counter=0;

		//
		for (var i=0;i<fCount;i++) 
		{
				var fName1 = getFieldNames(selectedData);
				var fValue1 = getFieldValues(selectedData);

				//
				for(var f=0;f<fValue1.length;f++) 
				{	
					//
					if(fName1[f].indexOf("WMO_NO")!=-1) 
					{
						arrStrIDS[counter]=fValue1[f];	
						//alert("ID " + arrStrIDS[counter]);
					}
					
					//Longitude
					if(fName1[f].indexOf("LONGITUDE")!=-1) 
					{
						arrX[counter]=parseFloat(fValue1[f]);	
						//alert("LONG " + arrX[counter]);
					}
					
					//Latitude
					if(fName1[f].indexOf("LATITUDE")!=-1)
					{
						arrY[counter]=parseFloat(fValue1[f]);
						//alert("LAT " +arrY[counter]);
					}

				}

				//
				spos = theReply.indexOf('<FIELDS ',epos);
				if(spos!=-1)
				{						
						epos = theReply.indexOf('/>',spos);
						selectedData=theReply.substring(spos+7,epos-2);
						
						//alert(selectedData);
						counter=counter+1;
				}
				else
				{
						break;
				}
		}

				
					//Minimum X adn Y
					MINX_JSP =minValue(arrX);
					MINY_JSP=minValue(arrY);
					
					//Maximum X and Y
					MAXX_JSP=maxValue(arrX);
					MAXY_JSP=maxValue(arrY);				
				
				//
				if(arrStrIDS.length > 1)
	 			{	
						for(i=0;i<arrStrIDS.length-1;i++)
						{
							strArgoIDs= strArgoIDs + arrStrIDS[i] + "|";
						}

						strArgoIDs = strArgoIDs + arrStrIDS[arrStrIDS.length-1] +"|";
	 			}
	 			else
				{
					strArgoIDs = strArgoIDs + arrStrIDS[0] +"|";
				}

		//
		fName1 = null;
		fValue1 = null;

		arrX=null;
		arrY=null;

		spos=0;epos=0;

		//Open JSP Page With Selected Values			
		var strURL= INCOIS_ARGO_URL + "/argo/GetSelArgos.jsp?ARGO_IDS=" +strArgoIDs+"&MINX="+MINX_JSP+"&MINY="+MINY_JSP+"&MAXX="+MAXX_JSP+"&MAXY="+MAXY_JSP;			

		var winJSP ; 
		winJSP = window.open(strURL,'Floats' ,'toolbar=yes,menubar=no,address=no,top=0,left=0,width='+ (screen.width*0.8) +', height=' + (screen.height * 0.8) +', screenX=100%, screenY=100%,scrollbars=yes,resizable=yes');
		winJSP.focus();

}


//Find Minimum value in a Array
function minValue(arrMin)
{
	if(arrMin.length==0){
		return 0.0;
	}
	else
	{
		//Set First Value to Minimum
		var aValue= arrMin[0];
		//alert("First Value " +  aValue + " arrMin length " + arrMin.length );
		
		//For..Loop
		for(i=1;i<arrMin.length;i++)
			{
				if(aValue>arrMin[i]){
					aValue=arrMin[i];
				}
			}
		//alert(" Min " +aValue);
		return aValue;
	}
}

//Find Maximum Value in a Array
function maxValue(arrMax)
{
	if(arrMax.length ==0){
		return 0.0;
	}
	else
	{
		//Set First Value to Maximum
		var	aValue= arrMax[0];
		
		//For..Loop
		for(i=1;i< arrMax.length;i++)
			{
				if(aValue< arrMax[i]){
					aValue=arrMax[i];
				}
			}
		return aValue;
	}
}


//Modified by Govindarajan
//To be used only for Rectangle Select of Argo Floats
//in Argo Layer
function processRectangleSelectResponse(theReply) {

	setLayerFields(ActiveLayerIndex);
	var theError = getXMLErrorMessage(theReply);
	var fList="";
	var lpos1 = 1;
	var lpos2 = 1;
	var epos = 1;
	var spos = 1;
	var morePoints=true;
	var moreFeatures=true;
	var featureCount = justGetFeatureCount(theReply);
	//alert(featureCount);
	var pos = 0;
	var startpos = 0;
	var endpos = xmlEndPos;
	var stillMore = false
	pos = theReply.indexOf('hasmore="true"',endpos);
	if (pos!=-1) stillMore = true;
	pos=0;
	var tempCount = 0;
	var selectedData="";
	var inData="";
	var xStr="";
	var yStr="";
	var tempString = "";
	var fCount = featureCount;
	selectCount = 0;
	var tempString="";
	
			//
			if (featureCount > 0) 
			{
					endpos = 1;
						
					for (var i=0;i<fCount;i++) 
					{
						var theXYs = getEnvelopeXYs(theReply, endpos);

						selectLeft[selectCount] = theXYs[0];
						selectBottom[selectCount] = theXYs[1];
						selectRight[selectCount] = theXYs[2];
						selectTop[selectCount] = theXYs[3];
						endpos = xmlEndPos;

						//alert("Left " + theXYs[0] + " Bottom " + theXYs[1] + " Right  " + theXYs[2] + " Top  " + theXYs[3]);

						//alert(endpos);
						inData = parseRecordString(theReply, endpos);
						endpos = xmlEndPos;
						selectedData = inData;
								
						epos = theReply.indexOf("</FEATURE",endpos);
								
						var fName1 = getFieldNames(selectedData);
						var fValue1 = getFieldValues(selectedData);

						/*
						for(k=0;k<fName1.length;k++)
						{
							alert("Name:value pair  " + fName1[k] + "  " + fValue1[k]);
						}
						*/

						fName1 = null;
						fValue1 = null;

						selectCount += 1;		//Important
					}

					sendMapXML();	
					
		}
		else
		{
			alert("No Floats Selected ");
		}

					
		hideRetrieveData();
}



//Used by Serach Argo HTML
function selectFloatsbyWMONo(arrFloatIDs)
{
	
	var strArgoIds="|";

	try
	{
		   //	
		   if(arrFloatIDs==null || arrFloatIDs.length==0)
		   {  
			 alert("Unable to Select floats");
			 return;
		   }  

		   	//alert(arrFloatIDs.length);
		   
		   for(i=0;i<arrFloatIDs.length;i++)
		   {
				strArgoIds = strArgoIds + arrFloatIDs[i]  +"|";	
		   }
			
			//Check
			if(strArgoIds=="|")
			{
				alert("Select one or more Argo Floats and click the Search Button");
				return;
			}
			
			var arrIds =  strArgoIds.split("|");	 	
			var finalIds = new Array();
			
			var counter=0;
			for(i=0;i<arrIds.length;i++)
			{
				if(arrIds[i]!=="")
				 {
					finalIds[counter++]= arrIds[i];
				 }
			}
			
			
			var strSQLWhere = "";

			//Final Ids
			if(finalIds.length > 1)
			{
				
				for(i=0;i<finalIds.length-1;i++)
				{
				   strSQLWhere= strSQLWhere + " SDE.ARGO.WMO_NO=&apos;" + finalIds[i] + "&apos; OR ";
				}

				strSQLWhere = strSQLWhere + " SDE.ARGO.WMO_NO=&apos;" + finalIds[finalIds.length-1] +"&apos;";
			}
			else
			{
				strSQLWhere = " SDE.ARGO.WMO_NO=&apos;" + finalIds[finalIds.length-1] +"&apos;";
			}

			//Send Where Clause to Server
			sendQueryString(strSQLWhere);

		}
		catch(e)
		{
			alert("Unable to select floats");
		}
}



	//Distance Units in KMS and Nautical Miles
	var DIST_NMS = 1;
	var DIST_KMS = 2;

	var DIST_STATE= DIST_KMS;
	
	function ApplyDistUnits()
	{
		var selUnit = parent.ToolsFrame.document.argoTools.distUnits.options[parent.ToolsFrame.document.argoTools.distUnits.selectedIndex].value;
			selUnit = selUnit.toUpperCase();

		var distValue=0.0;

		//Distance Value
		try
		{
			distValue=parseFloat(parent.ToolsFrame.document.argoTools.theMeasTotal.value);
		}
		catch(e)
		{
			distValue=0.0;
		}


		//
		if(DIST_STATE==DIST_KMS && selUnit=='M')
		{
			//Kms to Miles
			DIST_STATE=DIST_NMS;
			parent.ToolsFrame.document.argoTools.theMeasTotal.value=FormatNumericValue(distValue/1.852);
		}
		
		if(DIST_STATE==DIST_NMS && selUnit=='K')
		{	
			//Miles to Kms
			DIST_STATE=DIST_KMS;
			parent.ToolsFrame.document.argoTools.theMeasTotal.value=FormatNumericValue(distValue*1.852);
		}

	}

	//Distance Value
	function FormatNumericValue(dValue)
	{
		
		if(isEmpty(dValue)==true)
		{
			alert("Illegal values supplied for formatting");
			return;
		}

		//
		var strDistValue = ''+dValue+'';
		
		try
		{
			strDistValue = strDistValue.substring(0,strDistValue.indexOf('.')+3);
		}
		catch(e)
		{
			strDistValue ='0.0';
		}

		return strDistValue;
	}

/**
* The function isAlphaNumeric checks for the validity of the entered fields
* which should alphanumeric only. Other wise it alerts for proper valid data.
*/
function isAlphaNumeric(aValue)
{
	var len,str,str1,i
	len=aValue.length
	str=aValue

    str1="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
	
	for(i=0;i<len;i++)
	{
		if((str1.indexOf(str.charAt(i)))==-1)
		{
    	        	return false
		}
	}
	return true
}
