//---------------------------------------------------------------------------
/*
   SampleWriteAlarmsToFile.js

   This JScript demonstrates the powerful capabilities available
   when controlling Alarm++ through automation.

   It prompts you to select an alarm file and then writes all of the
   information about the alarms to the file you specify.
*/
//---------------------------------------------------------------------------
/*
   (c) 2002-2003, All Rights Reserved.
   12noon, Stefan K. S. Tucker.
   (c) 1998-2002, All Rights Reserved.
   Perpetual Motion Software, Stefan K. S. Tucker.

   You have a royalty-free right to use, modify, reproduce and distribute
   the Sample Application Files (and/or any modified version) in any way you
   find useful, provided that you agree that 12noon has no warranty,
   obligations or liability for any Sample Application Files.
*/
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// Constants
//
// for WSHShell.Popup()
var vbOK          = 0;
var vbYesNo       = 4;
var vbExclamation = 48;
var vbInformation = 64;

var vbNo          = 7;

//---------------------------------------------------------------------------
// Frequently used global objects
//
var WSHShell = new ActiveXObject("WScript.Shell");
var fs = new ActiveXObject("Scripting.FileSystemObject");

//---------------------------------------------------------------------------

var intDoIt;
intDoIt = WSHShell.Popup("This script opens an Alarm++ file and outputs the alarms' information to the specified output file.  Do you want to continue?",
                         0, "12noon",
                         vbYesNo + vbExclamation);
if (intDoIt == vbNo)
{
   WScript.Quit();
}

main();

/////////////////////////////////////////////////////////////////////////////

function main()
{
   var objArgs = WScript.Arguments;
   if (objArgs.length != 2)
   {
      WSHShell.Popup("This script requires two command line arguments: the path to an alarm file and the path to an output file.\n\nFor example: \"wscript ToFile.js c:\Test.alm c:\List.txt\".",
                     0, "12noon",
                     vbOK + vbExclamation);
      WScript.Quit();
   }

   //---------------------------------
   // make sure the input file exists
   //---------------------------------
   var strIn = objArgs(0);
   if (!fs.FileExists(strIn))
   {
      WSHShell.Popup("The specified alarm file \"" + strIn + "\" does not exist.",
                     0, "12noon",
                     vbOK + vbExclamation);
      WScript.Quit();
   }

   //--------------------
   // create output file
   //--------------------
   var strOut = objArgs(1);
   var streamOut = fs.CreateTextFile(strOut, true /*overwrite*/);

   //---------------------
   // open the alarm file
   //---------------------
   var objDoc = WScript.CreateObject("12noon.Alarm.Document")
   var objApp = objDoc.Application
   var objAlarms = objDoc.Alarms

   objApp.Open(strIn, "");

   //------------------------------------------------------
   // loop through all alarms and output their information
   //------------------------------------------------------
   streamOut.WriteLine(objAlarms.Count + " alarms");
   for (var i = 0; i < objAlarms.Count; ++i)
   {
      streamOut.WriteBlankLines(1);

      OutputAlarm(streamOut, objAlarms.Item(i));
   }

   streamOut.WriteBlankLines(1);

   objApp.Quit();

   streamOut.Close();

   WSHShell.Popup("The script has completed successfully.",
                  0, "12noon",
                  vbOK + vbInformation);
}


function OutputAlarm(streamOut, objAlarm)
{
   streamOut.WriteLine("Name: " + objAlarm.Name);
   streamOut.WriteLine("Message: " + objAlarm.Message);
   streamOut.WriteLine("Event date/time: " + objAlarm.Date);

   if (objAlarm.RepeatDisabled)
      streamOut.WriteLine("No events remaining.");
   else if (objAlarm.RepeatForever)
      streamOut.WriteLine("Repeat forever");
   else if (objAlarm.NumberOfEvents == 0)
      streamOut.WriteLine("Repeat until " + objAlarm.RepeatUntil);
   else if (objAlarm.NumberOfEvents == 1)
      streamOut.WriteLine(objAlarm.NumberOfEvents + " event left.");
   else
      streamOut.WriteLine(objAlarm.NumberOfEvents + " events left.");

   DisplayRepeatInterval(streamOut, objAlarm);

   DisplaySnoozeInterval(streamOut, objAlarm);

   if (objAlarm.DeleteAfterLastEvent)
      streamOut.WriteLine("Will be deleted after the last event.");
}


//---------------------------------------------------------------
/*
   DisplayRepeatInterval

   This routine is used to display information about the passed
   alarm's repeat interval.
*/
//---------------------------------------------------------------
function DisplayRepeatInterval(streamOut, objAlarm)
{
   if (objAlarm.RepeatIntervalMinutes)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " minutes");
   else if (objAlarm.RepeatIntervalHours)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " hours");
   else if (objAlarm.RepeatIntervalDays)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " days");
   else if (objAlarm.RepeatIntervalWeeks)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " weeks");
   else if (objAlarm.RepeatIntervalMonths)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " months");
   else if (objAlarm.RepeatIntervalYears)
      streamOut.WriteLine("Repeat interval: every " + objAlarm.RepeatIntervalNumber + " years");
   else
      streamOut.WriteLine("Repeat interval: unknown");

   //------------------------------------------
   // This function should display information
   // about any specified weekdays or months.
   //------------------------------------------
}


//---------------------------------------------------------------
/*
   DisplaySnoozeInterval

   This routine is used to display information about the passed
   alarm's snooze interval.
*/
//---------------------------------------------------------------
function DisplaySnoozeInterval(streamOut, objAlarm)
{
   if (objAlarm.SnoozeIntervalMinutes)
      streamOut.WriteLine("Snooze interval: every " + objAlarm.SnoozeIntervalNumber + " minutes");
   else if (objAlarm.SnoozeIntervalHours)
      streamOut.WriteLine("Snooze interval: every " + objAlarm.SnoozeIntervalNumber + " hours");
   else if (objAlarm.SnoozeIntervalDays)
      streamOut.WriteLine("Snooze interval: every " + objAlarm.SnoozeIntervalNumber + " days");
   else
      streamOut.WriteLine("Snooze interval: unknown");
}

