// JavaScript Document

var browser = navigator.userAgent.toLowerCase();
var browserIE = ( browser.indexOf("msie") != -1 );
var browserFirefox = ( browser.indexOf("firefox") != -1 );
if ( browserFirefox )
{
    document.write('<style type="text/css" media="print">'); 
    document.write('div#footer a { margin-left: -0.5em; padding-left: 0; }'); 
    document.write('b { margin-left: -0.5em; padding-left: 0; }</style>'); 
    document.write('</style>'); 
}

var HTMLcode = "";
var homePageTitle = 'McIntosh-McGovern.com';

var topFrames = top.document.getElementsByTagName("frame");
var calledByFrame = ( top.location.href != window.location.href );

/*
 * --------------------------------------------------------------------------------
 */

function f_element( p_index, p_deliminator, p_string ) {
  /* 
   * JavaScript version of OpenVMS DCL F$ELEMENT lexical
   */
  var currIndex = p_string.indexOf(p_deliminator);
  var i = 0;
  var outChar = '';
  var outPoint = 0;
  var outString = p_string;
  var trackIndex = 0;

  if ( currIndex >= 0 ) {
      while ( ( trackIndex != p_index ) && ( currIndex != -1 ) ) {
        outPoint = ++currIndex;
        currIndex = p_string.indexOf(p_deliminator,outPoint);
        trackIndex++;
      } // end while ( ( trackIndex != p_index ) && ( currIndex != -1 ) )
      if ( trackIndex != p_index ) {
        outString = p_deliminator;
      } else {
        outString = '';
        for ( i=outPoint; i<p_string.length; i++ ) { 
          outChar = p_string.charAt(i);
          if ( outChar == p_deliminator ) {
            break;
          } else {
            outString = ( outString + outChar );
          } // end if ( outChar == p_deliminator )
        } // for ( i=outPoint; i<p_string.length; i++ )
      } // end if ( trackIndex != p_index )
    } else if ( p_index >= 1 )
      outString = p_deliminator;
    // end if ( currIndex >= 0 )
  
  return outString;
  } // end f_element function
  
/*
 * --------------------------------------------------------------------------------
 */

function replace(p_string,p_text,p_by) {
// Replaces p_text with p_by in p_string
// From:  http://tech.irt.org/articles/js037/
    var strLength = p_string.length, txtLength = p_text.length;
    if ((strLength == 0) || (txtLength == 0)) return p_string;

    var i = p_string.indexOf(p_text);
    if ((!i) && (p_text != p_string.substring(0,txtLength))) return p_string;
    if (i == -1) return p_string;

    var newstr = p_string.substring(0,i) + p_by;

    if (i+txtLength < strLength)
        newstr += replace(p_string.substring(i+txtLength,strLength),p_text,p_by);

    return newstr;
}  // end replace function

/*
 * --------------------------------------------------------------------------------
 * addLoadEvent will execute a JavaScript command/function when a page is
 * brought up in a browser.  Ordinarily only one such command/function can be
 * performed at that time, but addLoadEvent overrides that limitation.
 * --------------------------------------------------------------------------------
 */

function addLoadEvent(func) {
// Multiple onload function created by: Simon Willison
// http://simon.incutio.com/archive/2004/05/26/addLoadEvent
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

/*
 * --------------------------------------------------------------------------------
 */

function getPassedValue(p_id, p_source) {
  /* 
   * +++
   *
   * Function Name: getPassedValue
   *        Author: Alvin Orzechowski MyFirstWebPage.net
   * Creation Date: 15-Aug-2004
   *      Abstract: To return the passed value or the specified portion of it
   *   Description: 
   *    Parameters: p_id - Value found to the left of an equal sign.  If this is
   *                       found, this function will return the value found to 
   *                       the right of the equal sign.  If this parameter is 
   *                       not provided, this function will return the whole 
   *                       value passed.
   *                p_source - Look for passed value in parent window.  
   *                               Only checked when calledByFrame variable is
   *                               true.  One of two values is expected:
   *                                  "parent" - Look for passed value in parent 
   *                                             window
   *                                  "current" - Look for passed value in 
   *                                              current window (default)
   *                               This is useful for a frame where a parameter 
   *                               might be passed from the parent window.
   *                               
   *
   *       History: 20-Jan-2010 - p_source added
   * 
   * ---
   */
   
  // [ getPassedValue Constants ]
  var fromParent = ( p_source === undefined )
                     ? new Boolean(false)
                     : ( calledByFrame )
                       ? ( p_source == "parent" )
                       : new Boolean(false);
  var passedValue = ( fromParent )
                    ? unescape(f_element( 1, "?", window.parent.location.href ))
                    : unescape(location.search.substring(1));

  // [ getPassedValue Variables ]
  var allSubValues = ( fromParent )
                     ? f_element( 1, "?", window.parent.location.href ).split('&')
                     : location.search.substring(1,location.search.length).split('&');
  var idValue = ( passedValue == '?' )
                ? ""
                : passedValue;
  var subValue = "";

  // [ getPassedValue Main Line ]
  if ( p_id != null ) {
    idValue = "";
    for (var i=0; i<allSubValues.length; i++) {
      subValue = allSubValues[i].split('=');
      if ( subValue[0] == p_id ) {
        idValue = unescape(subValue[1]);
        i = allSubValues.length;
        } // end if ( subValue[0] == p_id )  
      } // end for (i=0; i<allSubValues.length; i++)
  } // if ( p_id != null )

  // [ getPassedValue End of Job ]
  return idValue;

} // end getPassedValue function

/*
 * --------------------------------------------------------------------------------
 * The following functions are used to change a class when a page loads
 * --------------------------------------------------------------------------------
 */

function getElementsByClass(searchClass,p_tag) {
  // Source: http://www.dustindiaz.com/getelementsbyclass/
  var classElements = new Array();
  var tag = ( p_tag === undefined )
              ? '*'
              : p_tag;
 var els = document.getElementsByTagName(tag);
 var elsLen = els.length;
 var j = 0;
 var pattern = new RegExp('(^|\\\\s)'+searchClass+'(\\\\s|$)');
 for ( i in els ) {
   if ( pattern.test(els[i].className) ) {
     classElements[j] = els[i];
     j++;
     }
   }
 return classElements;
  } // end function getElementsByClass

/*
 * --------------------------------------------------------------------------------
 */

function takeYear(theDate) {
  // Source: http://www.quirksmode.org/js/introdate.html
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
  }

/*
 * --------------------------------------------------------------------------------
 */

function today_yyyymmdd() {
  /* 
   * ++
   * Name: today_yyyymmdd
   * Author: Alvin Orzechowski, MyFirstWebPage.net
   * Creation Date: 25-Jul-2008
   * Abstract: To return today's date in YYYYMMDD form.
   * Description: 
   * Parameters: None
   * History:
   * --
   */
  // [ today_yyyymmdd Constants ]
  var today = new Date();

  // [ today_yyyymmdd Variables ]
  var dd = ( today.getDate() );
  var mm = ( today.getMonth() + 1 );
  var yyyy = ( takeYear(today) + '' );
  var yyyymmdd = '';

  // [ today_yyyymmdd Main Line ]
  if ( mm <= 9 )
    mm = ( '0' +  mm.toString() );

  if ( dd <= 9 )
    dd = ( '0' +  dd.toString() );

  yyyymmdd = ( yyyy + mm + dd );

  return yyyymmdd;
  } // end today_yyyymmdd function

/*
 * --------------------------------------------------------------------------------
 */

function modifyEventClassClass() {
  /* 
   * ++
   * Name: modifyEventClassClass
   * Author: Alvin Orzechowski, MyFirstWebPage.net
   * Creation Date: 25-Jul-2008
   * Abstract: To change the eventClass class from any HTML div tag whose id
   *           attribute is less than today's yyyymmdd value.
   * Description: 
   * Parameters: None
   * History:
   *           - 
   * --
   */
  // [ modifyEventClassClass Constants ]
  var allDates = getElementsByClass('eventClass', 'div');
  var allExtraText = getElementsByClass('eventsScheduled', 'div');
  var calendarHeader = document.getElementById('calendarHeader');
  var currentDate = today_yyyymmdd();
  var emptySchedule = document.getElementById('emptySchedule');
  var goTopSide = document.getElementById('goTopSide');
  var pastEventsHeader = document.getElementById('pastEventsHeader');
  var selectedDate = getPassedValue('select', 'parent');
  var textArea = document.getElementById('textArea');
  var alldatesValue = getPassedValue('alldates', 'current' );

  // [ modifyEventClassClass Variables ]
  var datesDisplayed = 0;
  var displayAllEvents = ( alldatesValue == 'show' );
  var displayNoEvents = ( alldatesValue == 'hide' );
  var displayPastEvents = ( alldatesValue == 'past' );

  // [ modifyEventClassClass Main Line ]
  for (i=0; i<allDates.length; i++) {
    if ( selectedDate != '' ) {
      if ( allDates[i].id == selectedDate ) {
        datesDisplayed++;
        if ( selectedDate < currentDate ) {
      	  calendarHeader.style.display = 'none';
	      pastEventsHeader.style.display = 'block';
          }
        } else {
          allDates[i].style.display = 'none';
          }
       } else if ( !displayAllEvents )
          if ( !displayNoEvents )
            if ( displayPastEvents ) 
              if ( allDates[i].id < currentDate ) {
                datesDisplayed++;
                } else {
                  allDates[i].style.display = 'none'; }
            else if ( allDates[i].id < currentDate ) {
              allDates[i].style.display = 'none';
              } else { 
                datesDisplayed++;
                }
          else { allDates[i].style.display = 'none'; }
        else { datesDisplayed++; }
    } // end for (i=0; i<allDates.length; i++)
    
  if ( datesDisplayed == 0 ) {
    emptySchedule.style.display = 'inline';
    textArea.className = 'defaultHeight';
    for (i=0; i<allExtraText.length; i++)
        allExtraText[i].style.display = 'none';
	}
	
  if ( displayPastEvents ) {
	  calendarHeader.style.display = 'none';
	  pastEventsHeader.style.display = 'block';
  }
      
   // alert('datesDisplayed: '+datesDisplayed);
    
   if ( datesDisplayed >= 5 )
     goTopSide.style.display = 'block'
     else goTopSide.style.display = 'none';
    
  return;
  } // end modifyEventClassClass function

/*
 * --------------------------------------------------------------------------------
 */

function ckboxDisplay ( p_ckbox, p_topic ) {
	checked = ( getPassedValue('ckbox', 'parent') == p_ckbox )
	          ? ' checked="yes"'
	          : "";
	document.write('<INPUT type="checkbox" name="' + p_ckbox + '" value="Yes"' + checked + '>' + p_topic);
} // end function ckboxDisplay

/*
 * --------------------------------------------------------------------------------
 */

function subjectDisplay() {
	subjectFound = getPassedValue('subject', 'parent');
	inputValue = ( subjectFound != "" )
	               ? ( ' value="' + subjectFound + '" ' )
		       : "";
	document.write('<INPUT type="text" name="subject" size="70"' + inputValue + '>');
} // end function ckboxDisplay

/*
 * --------------------------------------------------------------------------------
 */

function include_rpc(script_filename, p1) {
  /* 
   * +++
   *
   * Function Name: include_rpc
   *        Author: Stoyan Stefanov, phpied.com (original)
   *                Alvin Orzechowski, MyFirstWebPage.net (modifications)
   * Creation Date: 20-Mar-2007
   *      Abstract: To call and execute a server script
   *   Description: 
   *    Parameters: script_filename - the name of the script to be called 
   *                                  (required)
   *                p1 - value to be passed (optional)
   *       History: 
   * 
   * ---
   */

  // [ include_rpc Constants ]
  var html_doc = document.getElementsByTagName('head').item(0);
  var js = document.createElement('script');
  
  // [ include_rpc Main Line ]
  if ( p1 != null )
      script_filename += ( '?' + p1 );
  js.setAttribute('language', 'javascript');
  js.setAttribute('type', 'text/javascript');
  js.setAttribute('src', script_filename);
  html_doc.appendChild(js);
  return;
} // end include_rpc function

/*
 * --------------------------------------------------------------------------------
 */

function get_DOY( p_target ) {
  /* 
   * get_DOY - Get Day of Year
   *           Sometimes called the Julian Day
   * Parameters
   *   p_target: The target date
   *             Only one value is expected - EOY (End of Year)
   *             Otherwise the current date is used
   */
  var Target = new Date();
  var TargetYear = Target.getYear();
  
  if (TargetYear < 2000) 
    TargetYear += 1900;

  var Jan1 = new Date( TargetYear, 0, 1 );
  if ( p_target == 'EOY' ) 
    Target = new Date( TargetYear, 11, 31 );
  var DOY = ( ( Math.floor((Target.getTime()/1000/86400)-(Jan1.getTime()/1000/86400)) ) + 1 );
  if ( ( p_target != 'EOY' ) && ( Target.getHours() == 0 ) )
    DOY = ( DOY + 1 );
  return DOY;
} // end get_DOY function


/*
 * --------------------------------------------------------------------------------
 */

function show_fullToday() {
  var Today = new Date();
  var TodayWeekDay = Today.getDay( );
  var TodayDay = Today.getDate();
  var TodayMonth = Today.getMonth();
  var TodayYear = Today.getYear();
  var fullDate = '';

  var A_all_weekdays = new Array( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" );
  var A_all_months = new Array( "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" );

  if (TodayYear < 2000) TodayYear += 1900;
  fullDate = ( A_all_weekdays[TodayWeekDay] + ",&nbsp;" +
   '<a href="http://en.wikipedia.org/wiki/' + A_all_months[TodayMonth] + '_' + TodayDay + 
   '" title="Wikipedia entry for this day" target="_blank">' +
   A_all_months[TodayMonth] + "&nbsp;" + TodayDay + '</a>' + 
   ",&nbsp;" + TodayYear + "&nbsp;(Day&nbsp;" + get_DOY() + "&nbsp;of&nbsp;" + 
   get_DOY('EOY') + ")" );
  return fullDate;
} // end show_fullToday function

/*
 * --------------------------------------------------------------------------------
 */

/*
 * --------------------------------------------------------------------------------
 * The following functions control the left column menu display
 * --------------------------------------------------------------------------------
 */

function displayOption( pPageId, pOption, pColumn ) {
  optionText = pOption;
  tdClass = ""
  pageName = f_element( 0, '.', pPageId );
  pageType = '.'+f_element( 1, '.', pPageId );
  var targetWindow = ( calledByFrame )
        ? '  target="_parent"'
        : "";
   if ( pageType == '..' )
     pageType = '.html';
  if ( pPageId == 'index' )
    pageFile = homePage 
  else 
    pageFile = ( pageName + pageType );
  /* pageFile = '#' */
  if ( PgID == pageName ) {
    aValue = 'class="URHere" title="You are here"'
    tdClass = ' class="URHere"'
	}
  else {
    aValue = ( 'href="' + pageFile + '" title="View the ' + pOption + ' page"' + targetWindow );
    optionText += '<span class="optionArrow">&nbsp;&nbsp;&#9658;</span>';
    }
  if ( pColumn != null )
     tdClass = ( tdClass + f_element((tdClass==""),"-","- ") + 'width="50%"' );
  if ( pColumn == null )
    HTMLcode += ('<tr><td' + tdClass + '><a ' + aValue + '>' + optionText + '</a></td></tr>\n')
  else if ( pColumn == 1 )
    if ( pPageId == 'empty' )
      HTMLcode += ('<tr><td></td>')
	else
      HTMLcode += ('<tr><td' + tdClass + '><a ' + aValue + '>' + optionText + '</a></td>')
  else
    if ( pPageId == 'empty' )
      HTMLcode += ('<td></td></tr>\n')
	else
      HTMLcode += ('<td' + tdClass + '><a ' + aValue + '>' + optionText + '</a></td></tr>\n');
  return;
}

function displayMenu() {
  var menuArea = document.getElementById('menuArea');
  var browserWindow = ( calledByFrame )
                         ? ' target="_parent"'
			 : "";
  
  HTMLcode = "";
  HTMLcode += ('\n<table id="menu" cellpadding="0" cellspacing="3" border="0" align="center" width="100%">\n');
  HTMLcode += ('<tbody>\n');
  for ( i in menuOptions )
    displayOption( menuOptions[i].ID, menuOptions[i].menuItem );
  HTMLcode += ('</tbody>\n');
  HTMLcode +=  ('</table>\n');
  menuArea.innerHTML=HTMLcode;
  return;
}

/*
 * --------------------------------------------------------------------------------
 */

function homePageLink() {
 /* 
 * ++
 * Name: homePageLink
 * Author: Alvin Orzechowski, MyFirstWebPage.net
 * Creation Date: 20-Jan-2010
 * Abstract: To properly link to the homePage
 * Description: 
 * Parameters: None
 * History:
 * - Created
 * --
 */
 // [ homePageLink Main Line ]
 
 if ( calledByFrame )
   document.write('<a href="'+homePage+'" target="_parent" title="' + homePageTitle + '">') 
   else 
     document.write('<a href="'+homePage+'"  title="' + homePageTitle + '">');
    
 return;
 } // end homePageLink function

/*
 * --------------------------------------------------------------------------------
 */

function ckboxDisplay ( p_ckbox, p_topic ) {
	checked = ( getPassedValue('ckbox', 'parent') == p_ckbox )
	          ? ' checked="yes"'
	          : "";
	document.write('<INPUT type="checkbox" name="' + p_ckbox + '" value="Yes"' + checked + '> ' + p_topic);
} // end function ckboxDisplay

/*
 * --------------------------------------------------------------------------------
 */

function subjectDisplay() {
	subjectFound = getPassedValue('subject', 'parent');
	inputValue = ( subjectFound != "" )
	               ? ( ' value="' + subjectFound + '" ' )
		       : "";
	document.write('<INPUT type="text" name="subject" size="70"' + inputValue + '>');
} // end function ckboxDisplay

/*
 * --------------------------------------------------------------------------------
 */
 
function modifyImgLeft() {
 /* 
  * ++
  * Name: modifyImgLeft
  * Author: Alvin Orzechowski, MyFirstWebPage.net
  * Creation Date: 17-Feb-2010
  * Abstract: To change every other occurance of the imgLeft class to imgRight.
  * Description: 
  * Parameters:  None
  * History:
  * --
  */
 // [ modifyImgLeft Constants ]
 var allImgs = getElementsByClass('imgLeft');

 // [ modifyImgLeft Main Line ]
 if ( allImgs.length >= 1 )
   for (i=1; i<allImgs.length; i++) {
     allImgs[i].className = "imgRight";
     i++;
     } // end for (i=0; i<allImgs.length; i++)

 return;
 } // end modifyImgLeft function
 
function addMenuOption(p_ID, p_menuItem, p_Mode) {
 /* 
 * ++
 * Name: addMenuOption
 * Author: Alvin Orzechowski, MyFirstWebPage.net
 * Creation Date: 8-Aug-2010
 * Abstract: To insert a new penultimate option in the menuOptions array.
 * Description: 
 * Parameters: 
 * History:
 * - Created
 * --
 */
 // [ addMenuOption constants ]
 var addMode = ( typeof p_Mode == 'undefined' )
                    ? 'insert'
                    : ( p_Mode != 'append' )
                        ? 'insert'
                        : p_Mode;
 
 // [ addMenuOption Main Line ]
 if ( addMode == 'insert' ) {
   menuOptions[++nextOption] = new optionSpecs( String(nextOption+1), menuOptions[nextOption-1].ID, menuOptions[nextOption-1].menuItem );
   menuOptions[nextOption-1] = new optionSpecs( String(nextOption), p_ID, p_menuItem );
   } else
     menuOptions[++nextOption] = new optionSpecs( String(nextOption), p_ID, p_menuItem );

 return;
 } // end addMenuOption function
 
/*
 * --------------------------------------------------------------------------------
 */

function showToday(p_displayWeekday) {
 /* 
 * ++
 * Name: showToday
 * Author: Alvin Orzechowski, MyFirstWebPage.net
 * Creation Date: 14-Sep-2010
 * Abstract: To return today's date in mmm dd, yyyy format.
 * Description: 
 * Parameters: p_displayWeekday - Whether or not the date return should include
 *                                the weekday.
 *                                Expected values:
 *                                    No - Do not display the weekday. 
 *                                         (default)
 *                                    Weekday - Also display the weekday.
 * History:
 * - Created
 * --
 */
 // [ showToday Constants ]
 var dayNames = new Array("Sunday","Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday");
 var monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
 var now = new Date();
 var weekdayParameter = ( typeof pValue == 'undefined' )
                        ? 'NO'
                        : p_displayWeekday.toUpperCase();


 // [ showToday Variables ]
 var displayWeekday = ( weekdayParameter == "WEEKDAY" );
 var todaysDate = ""

 // [ showToday Main Line ]
 if ( displayWeekday )
   todaysDate = ( dayNames[now.getDay()] + ", " + monthNames[now.getMonth()] + " " + now.getDate() + ", " + now.getFullYear())
   else
     todaysDate = ( monthNames[now.getMonth()] + " " + now.getDate() + ", " + now.getFullYear());

 return todaysDate;
 } // end showToday function


/*
 * --------------------------------------------------------------------------------
 * MyFirstWebPage.net specific functions
 * Leave this section at the end
 * --------------------------------------------------------------------------------
 */

function get_mfwpnLogo(pTM) {
  var mfwpnLogo = '<span class="MFWPNlogo">' +
  '<span style="color: #000000;">My</span>' +
  '<span style="color: #ff0000;">First</span>' +
  '<span style="color: #00ff00;">Web</span>' +
  '<span style="color: #0000ff;">Page</span>' +
  '<span style="color: #000000;">.net';

  if ( pTM == 'tm' )
    mfwpnLogo = ( mfwpnLogo + '&#153;' );
  mfwpnLogo = ( mfwpnLogo + '</span></span>' );

return mfwpnLogo;
} // end get_mfwpnLogo function
