
  /////////////////////////////////////////////////////
  //                                                 //
  //          C-NOOFS Forecast Viewer v0.6           //
  //               Web User Interface                //
  //                                                 //
  /////////////////////////////////////////////////////

/**
 * Create an instance of the response parser
 * @param xmlDoc Document to parse (Type: XMLDocument)
 */
XMLDocumentParser = new Object();

XMLDocumentParser.ParseViewerResponse = function(xmlDoc)
{
	var Root = xmlDoc.getElementsByTagName("ViewerResponse");
	var Tree = new Object();

	var Attributes = new Object();
	Attributes.Record = ["RunDate","FcstDate", "Depth", "RunState"];	
	Attributes.Image = ["ItemID","DataSet", "Source", "Resolution", "FullImage", "ThumbImage"];
	Attributes.Model = ["Name","Resolution"];
	
	if ( Root.length > 0 )
	{
		var VR = Root.item(0);
		Tree.CurrentPage = VR.getAttribute("CurrentPage");
		Tree.AvailablePages = VR.getAttribute("AvailablePages");
		Tree.Language = VR.getAttribute("Language");
		Tree.RecordCount = parseInt(VR.getElementsByTagName("RecordSet").item(0).getAttribute("Quantity"));
		var RecordSet = new Array();		
		if ( Tree.RecordCount > 0 )
		{
			var Records = VR.getElementsByTagName("Record");
			if ( Records.length > 0 )
			{
				for ( var i = 0; i < Records.length; i++ )
				{
					var XMLRecord = Records.item(i);
					var Record = new Object();
					Record.Models = {};
					
					// Add this record's attributes
					var attr = "";
					for ( attr in Attributes.Record )
					{
						Record[Attributes.Record[attr]] = XMLRecord.getAttribute(Attributes.Record[attr]);
					}
					
					// Append an array of images
					var XMLModel = XMLRecord.getElementsByTagName("Model");
					for ( var j = 0; j < XMLModel.length; j++ )
					{
						var item = XMLModel.item(j);
						var Model = new Object();
						Model.Images = [];						
						var attr = "";
						for ( attr in Attributes.Model )
							Model[Attributes.Model[attr]] = item.getAttribute(Attributes.Model[attr]);

						// Append an array of images
	                                        var XMLImage = item.getElementsByTagName("Image");
						for ( var k = 0; k < XMLImage.length; k++ )
	                                        {
							var item = XMLImage.item(k);
							var Image = new Object();
							
							var attr = "";
							for ( attr in Attributes.Image )
							{
								Image[Attributes.Image[attr]] = item.getAttribute(Attributes.Image[attr]);
							}
								
							// Fix the CMC wind dataset attribute
							if ( Image.DataSet == "UV" && Image.Source == "cmc" )
								Image.DataSet = "UVW";
						
							Model.Images.push(Image);
						}
						Record.Models[Model.Name] = Model;
					}
					RecordSet.push(Record);
				}
			}
		}
		else
		{
	 		
		}
	
		Tree.RecordSet = RecordSet;

		return Tree;
	}
}

