CTide.prototype = new CXMLHTTP();
CTide.prototype.constructor = CTide;

/* http://opendap.co-ops.nos.noaa.gov/axis/webservices/predictions/response.jsp?

	stationId=8447930&
	beginDate=20080808&
	endDate=20080809&
	datum=0&				0 MLLW 		1 STND
	unit=1&					0 meters	1 feet
	timeZone=1&				0 GMT		1 LST
	dataInterval=60&
	format=xml

	Sample:	
	http://opendap.co-ops.nos.noaa.gov/axis/webservices/predictions/response.jsp?stationId=8447930&beginDate=20080808&endDate=20080809&datum=0&unit=1&timeZone=1&dataInterval=60&format=xml
	
*/

///////////////////////////////////////////////////////////////
// we pass in the id string of the elem we want
// otherwise, it may not yet exist
//
function CTide( populateElemId, station, name, state )
{
	var m_XMLHTTP = null;
	var m_Response = "";
	var nCode = 0;
	var nMesg = "";
	var elemToPopulateId = populateElemId;
	
	var stationId = station;
	var stationName = name;
	var stationState = state;
	
	var date = new Date();
	var beginDate = "" + date.getFullYear() + pad( 2, date.getMonth()+1 ) + pad( 2, date.getDate() );
	date.setDate( date.getDate() + MAX_PREVIEW_TIDE );
	var endDate = "" + date.getFullYear() + pad( 2, date.getMonth()+1 ) + pad( 2, date.getDate() );;
	var datum = 0;
	var unit = 1;
	var timeZone = 1;
	var dataInterval = 60;
	var format = "xml";
	
	this.m_FormID = "id_tide";
	this.ClassName = "CTide";
	
	this.buildTideDisplay = buildTideDisplay;

	//alert( "station: " + station );

	// this callback does not have access to 'this'.
	// it's as though it were static
	function _onReadyStateChange()
	{
		if( m_XMLHTTP.readyState == 4 )
		{
			var elem;
			m_Response = m_XMLHTTP.responseText;
			//document.getElementById("debugit").innerHTML = m_Response;
		
			elem = document.getElementById( elemToPopulateId );
			if( elem == null )
			{
				alert( "CTide::_onReadyStateChange Failed to find element to populate: " + elemToPopulateId );
				return;	
			}
			nCode = g_GetCode( m_Response );
			nMesg = g_GetMesg( m_Response );
			
			//alert( m_Response );
			
			// IE
			//elem.innerHTML = "asdfa0000fafd"; //m_Response;
			// NS
			buildTideDisplay( elem, m_Response );		
			//elem.textContent = m_Response;
			
			//alert( "CTide _onReadyStateChange Response = " + m_Response );	
		}				
	}			
	
	function buildTideDisplay( elem, xml )
	{
		var doc;
		
		doc = loadDOMFromString( xml );
		
		var now = new Date();
		var tDate;
		var count = 0;
		var html = "<table class=\"tide_list\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n";
		html += "<tr><td class=\"tide_title\" colspan=\"3\" nowrap>" + stationId + "&nbsp;" + stationName + "&nbsp;" + stationState + "</td></tr>";
		html += "<tr><td colspan=\"3\" nowrap><font class=\"tide_color_H\">High</font> and <font class=\"tide_color_L\">Low</font> tides for the next " + MAX_PREVIEW_TIDE + " days</td></tr>\n";
		//html += "<tr><td align=\"right\" colspan=\"3\"><font face=\"verdana\" size=\"1\"><b>Show all</b></font></td></tr>";
		var prevh = 0;
		var nexth = 0;
		var nodes = doc.getElementsByTagName( "item" );
		var HL = "";
		var h = 0;
		var tides = "";
		//alert( "CTide there are " + nodes.length + " nodes" );
		for( i=0; i<nodes.length; i++ )
		{
			HL = "";
			time = nodes[i].getElementsByTagName( "timeStamp" )[0].childNodes[0].nodeValue;
			tDate = Date.parse( time );
			
			// now + how many days?
			if( tDate.valueOf() < now.valueOf() ||
				tDate + 1000*60*60*24*MAX_PREVIEW_TIDE < tDate.valueOf() )
				continue;
							
			/*if( today &&
				dtParts[1] != null &&
				dtParts[1].length > 0 )
			{
				if( dtParts[1].substring( 0, 2 ) < now.getHours() )
					continue;
				today = false;
			}*/			
			
			h = parseFloat( nodes[i].getElementsByTagName( "pred" )[0].childNodes[0].nodeValue );
			// don't go past what we have
			if( i+1 < nodes.length )
				nexth = parseFloat( nodes[i+1].getElementsByTagName( "pred" )[0].childNodes[0].nodeValue )
			else
				nexth = 0;
				
			if( prevh < h &&
				h > nexth &&
				nexth != 0 )
			{
				HL = "H";
			}
			else if( prevh > h &&
				h < nexth &&
				nexth != 0 )
			{
				HL = "L";	
			}
				
			if( HL.length > 0 )
			{
				if( count++ >= MAX_PREVIEW_TIDE * 4 )
					continue;
			
				tides += "<tr><td><font size=\"1\">" + time + "</font></td>" +
						"<td></td>" +
						"<td class=\"tide_color_" + HL + "\">" + h + "</td></tr>\n";
			}
			
			prevh = h;
		}
		
		if( tides.length == 0 )
			html += "<tr><td colspan=\"3\"><br>No tides to report</td></tr>\n";
		else
			html += tides + "</table>";
		
		//alert( "000 " + elem.nodeName );
		//document.getElementById( "id_tides_display").innerHTML = html;
		//document.getElementById( "debugit").innerHTML = html;
		elem.innerHTML = html;
		
		//alert( html );
		//
		//

		//alert( html );
	}
	
	m_XMLHTTP = this.getXMLHTTP();
	//m_XMLHTTP.onreadystatechange = _onReadyStateChange;
	
	this.submit3("http://www.hazmap.net/processor/xmlhttp_proxy.php",
				"request=opendap.co-ops.nos.noaa.gov/axis/webservices/predictions/response.jsp&" +
				"stationId=" + stationId + 
				"&beginDate=" + beginDate +
				"&endDate=" + endDate + 
				"&datum=" + datum + 
				"&unit=" + unit + 
				"&timeZone=" + timeZone + 
				"&dataInterval=" + dataInterval + 
				"&format=" + format,
				_onReadyStateChange);
}
