text: //  *********************************************************************************
  //  File:	fsAtomConvert.js
  //  Notes:	You must run this file with cscript.exe (i.e. not wscript.exe)
  //
  //  Copyright (c) Microsoft Corporation.  All Rights Reserved.
  //  *********************************************************************************
  
  
  //  -------------------------- MAIN (BEGIN) --------------------------
  
  //  Validate arguments
  var g_Arguments = WScript.Arguments;
  if (g_Arguments.length < 1)
  	{
  	DisplayUsage();
  	WScript.Quit();
  	}
  
  //  Get required parameters
  var g_SourcePath = g_Arguments(0);
  
  var g_pIOutputXmlDOMDocument = null;
  
  //  Load source Atom document	
  var g_pISourceAtomXmlDOMDocument = LoadXmlDocument(g_SourcePath);
  if (g_pISourceAtomXmlDOMDocument == null)
  	{
  	WScript.Echo("Exception while loading '" + g_SourcePath + "': " + e.message);
  	WScript.Quit(0);
  	}
  
  //  We will use incrementing counter for ids
  var g_Counter = 100;
  	
  //  Get source "feed" element
  var g_pISourceAtomXmlDOMElement = g_pISourceAtomXmlDOMDocument.documentElement;
  
  //  Set FeedSync namespace
  g_pISourceAtomXmlDOMElement.setAttribute("xmlns:sx", "http://feedsync.org/2007/feedsync");
  	
  //  Get the current timedate and format it as RFC 3339
  var g_CurrentDateTime = new Date();
  var g_Year = g_CurrentDateTime.getYear();
  if (g_Year < 70)
      g_Year += 2000;
  else if (g_Year < 1900)
      g_Year += 1900;
  
  var g_Month = g_CurrentDateTime.getMonth() + 1;
  if (g_Month <= 9)
      g_Month = "0" + g_Month;
  
  var g_Day = g_CurrentDateTime.getDate();
  if (g_Day <= 9)
      g_Day = "0" + g_Day;
  
  var g_HourUTC = g_CurrentDateTime.getUTCHours();
  if (g_HourUTC <= 9)
      g_HourUTC = "0" + g_HourUTC;
  
  var g_MinuteUTC = g_CurrentDateTime.getUTCMinutes();
  if (g_MinuteUTC <= 9)
      g_MinuteUTC = "0" + g_MinuteUTC;
      
  var g_Second = g_CurrentDateTime.getSeconds();
  if (g_Second <= 9)
      g_Second = "0" + g_Second;
  
  var g_RFC3339DateTime = g_Year + "-" + g_Month + "-" + g_Day + "T" + g_HourUTC + ":" + g_MinuteUTC + ":" + g_Second + "Z";
  	
  //  Process all child "item" elements
  CreateItemElements(g_pISourceAtomXmlDOMElement, g_RFC3339DateTime);
  
  //  Save modified contents to standand output stream
  WScript.StdOut.Write(g_pISourceAtomXmlDOMDocument.xml);
  
  //  -------------------------- MAIN (END) --------------------------
  
  
  function CreateItemElements(i_pIParentXmlDOMElement, i_RFC3339DateTime)
  	{
  	//  Get "entry" elements
  	var pIEntryXmlDOMElements = i_pIParentXmlDOMElement.selectNodes("entry");
  
  	//  Iterate "entry" elements
  	for (var Index = 0; Index < pIEntryXmlDOMElements.length; ++Index)
  		{
  		//  Get next "entry" element
  		var pIItemXmlDOMElement = pIEntryXmlDOMElements(Index);
  
  		//  Create "sx:sync" element
  		var pISyncXmlDOMElement = g_pISourceAtomXmlDOMDocument.createElement("sx:sync");
  
  		//  Set "id" attribute for "sx:sync" element
  		
  		//  *********************************************************************************
  		//  BIG HONKING NOTE:  The "id" attribute should be a globally unique value - this
  		//                     sample does not attempt to do this.
  			
  			pISyncXmlDOMElement.setAttribute("id", ++g_Counter);
  
  		//  *********************************************************************************
  		
  		//  Set "updates" attribute for "sx:sync" element
  		pISyncXmlDOMElement.setAttribute("updates", "1");
  
  		//  Set "deleted" attribute for "sx:sync" element
  		pISyncXmlDOMElement.setAttribute("deleted", "false");
  
  		//  Set "noconflicts" attribute for "sx:sync" element
  		pISyncXmlDOMElement.setAttribute("noconflicts", "false");
  
  		//  Create "sx:history: element
  		var pIHistoryXmlDOMElement = g_pISourceAtomXmlDOMDocument.createElement("sx:history");
  
  		//  Set "sequence" attribute for "sx:history" element
  		pIHistoryXmlDOMElement.setAttribute("sequence", "1");
  
  		//  Set "when" attribute for "sx:history" element
  		pIHistoryXmlDOMElement.setAttribute("when", i_RFC3339DateTime);
  
  		//  *********************************************************************************
  		//  BIG HONKING NOTE:  The "by" value should be a unique value per user/endpoint -
  		//                     this sample does not attempt to do this.
  
  			//  Set "by" attribute for "sx:history" element (use name of utility as value)
  			pIHistoryXmlDOMElement.setAttribute("by", "fsAtomConvert.js");
  				
  		//  *********************************************************************************
  				
  		//  Append "sx:history" element to "sx:sync" element
  		pISyncXmlDOMElement.appendChild(pIHistoryXmlDOMElement);
  		
  		//  Insert/append "sx:sync" element to "item" element
  		if (pIItemXmlDOMElement.childNodes.length > 0)
  			pIItemXmlDOMElement.insertBefore(pISyncXmlDOMElement, pIItemXmlDOMElement.childNodes[0]);
  		else
  			pIItemXmlDOMElement.appendChild(pISyncXmlDOMElement);
  		}
  	}
  
  function LoadXmlDocument(i_Path)
  	{
  	var pIXmlDOMDocument = null;
  	
  	try
  		{
  		//  Create instance of XML DOM
  		pIXmlDOMDocument = new ActiveXObject("Microsoft.XMLDOM");
  		pIXmlDOMDocument.async = false;
  
  		//  Load source document	
  		var Success = pIXmlDOMDocument.load(i_Path);
  		if (Success)
  			return pIXmlDOMDocument;
  		}
  	catch (e)
  		{
  		//  Swallow all exceptions
  		}
  		
  	return null;
  	}
  	
  function DisplayUsage(i_Text)
  	{
  	var Text = "Usage:\r\nfsAtomConvert.js [SourcePath]\r\n\r\nParameters:\r\n  SourcePath=fully qualified filename of original Atom document\r\n";
  
  	//  If text was provided, prepend it to default usage text
  	if ((i_Text != null) && (i_Text != ""))
  		Text = i_Text + "\r\n\r\n" + Text;
  	
  	WScript.Echo(Text);
  	}	