//*********************************************************************
//
// Utility Functions
//
// Copyright (c) 2004, MFM Communication Software, Inc.
//
//*********************************************************************
//
// util.js
// $Id: util.js,v 1.12 2009/04/07 18:38:55 lbettag Exp $
//
// Utility functions used on most web pages
//
//*********************************************************************
//
// Tell jsjam.pl to not change these identifier and function names
//
// jsjam-keep:VTWin
// jsjam-keep:MM_swapImgRestore
// jsjam-keep:MM_preloadImages
// jsjam-keep:MM_findObj
// jsjam-keep:MM_swapImage
// jsjam-keep:MM_showHideLayers
// jsjam-keep:FormChanged
// jsjam-keep:MM_sr
// jsjam-keep:MM_p
// jsjam-keep:layers
// jsjam-keep:getElementById
// jsjam-keep:style
// jsjam-keep:visibility
// jsjam-keep:addCommas
// jsjam-keep: addEvent
// jsjam-keep: test
//
//*********************************************************************

//********************************************************************
// 
// VTWin(url)
//
// Launch a virtual tour in a pop-up window.
// 
//********************************************************************
function VTWin(url) 
{
  window.open(url,'VideoTour','width=535,height=450,scrollbars=yes,status=yes,resizable=yes');
}


//********************************************************************
// 
// MM_swapImgRestore()
//
// Restore swapped images
// 
//********************************************************************
function MM_swapImgRestore() 
{
  var i,x,a = document.MM_sr;

  for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++)
    x.src = x.oSrc;
}


//********************************************************************
// 
// MM_preloadImages()
//
// Load images at page load time
// 
//********************************************************************
function MM_preloadImages() 
{
  var d = document; 

  if (d.images)
  {
    if (!d.MM_p)
      d.MM_p = new Array();

    var i, j = d.MM_p.length, a = MM_preloadImages.arguments;

    for (i = 0; i < a.length; i++)
    {
      if (a[i].indexOf("#") != 0)
      {
        d.MM_p[j] = new Image;
        d.MM_p[j++].src = a[i];
      }
    }
  }
}


//********************************************************************
// 
// MM_findObj(n, d)
//
// Find the given object in the given document
// 
//********************************************************************
function MM_findObj(n, d) 
{
  var p,i,x;

  if (!d)
    d=document;

  if ( (p = n.indexOf("?")) > 0 && parent.frames.length) 
  {
    d = parent.frames[n.substring(p + 1)].document;
    n = n.substring(0, p);
  }

  if (!(x = d[n]) && d.all)
    x = d.all[n];

  for (i = 0; !x && i < d.forms.length; i++)
    x = d.forms[i][n];

  for (i = 0; !x && d.layers && i < d.layers.length; i++)
    x = MM_findObj(n, d.layers[i].document);

  if (!x && document.getElementById)
    x = document.getElementById(n);

  return x;
}


//********************************************************************
// 
// MM_swapImage(n, d)
//
// Swap an image with another image (for rollover buttons)
// 
//********************************************************************
function MM_swapImage() 
{
  var i, j = 0, x, a = MM_swapImage.arguments;

  document.MM_sr = new Array; 

  for (i = 0; i < (a.length - 2); i += 3)
  {
    if ( (x = MM_findObj(a[i])) != null)
    {
      document.MM_sr[j++] = x;

      if (!x.oSrc)
        x.oSrc = x.src;

      x.src = a[i + 2];
    }
  }
}


//********************************************************************
// 
// MM_showHideLayers(n, d)
//
// Swap an image with another image (for rollover buttons)
// 
//********************************************************************
function MM_showHideLayers() 
{
  var i,p,v,obj,args = MM_showHideLayers.arguments;
  
  for (i = 0; i < (args.length - 2); i += 3)
  {
    if ((obj = MM_findObj(args[i])) != null)
    {
      v = args[i + 2];
    
      if (obj.style) 
      {
        obj = obj.style;
        v = (v == 'show') ? 'visible' : ((v = 'hide') ? 'hidden' : v);
      }

      obj.visibility = v; 
    }
  }
}


//********************************************************************
// 
// FormChanged(frm)
//
// Check the given form to see if it has changed
// 
//********************************************************************
function FormChanged(frm)
{
  var result = false;
  var output = '';

  for (var i=0, j=frm.elements.length; i < j; i++)
  {
    eType = frm.elements[i].type;

//    output += frm.elements[i].name + ' is a ' + eType  + '\n';

    if (eType == 'checkbox' || eType == 'radio')
    {
      if (frm.elements[i].checked && !frm.elements[i].defaultChecked)
      {
        output += frm.elements[i].name + ' is now checked' + '\n';
        result = true;
      }
      else if (!frm.elements[i].checked && frm.elements[i].defaultChecked)
      {
        output += frm.elements[i].name + ' is now unchecked' + '\n';
        result = true;
      }
    }

    if (eType == 'hidden' || eType == 'password' || eType == 'text'
      || eType == 'textarea')
    {
      if (frm.elements[i].value != frm.elements[i].defaultValue)
      {
        output += frm.elements[i].name + ' does not equal "' + frm.elements[i].defaultValue + '"' + '\n';
        result = true;
      }
    }

    if (eType == 'select-one' || eType == 'select-multiple')
    {
      for (var k=0, l=frm.elements[i].options.length; k<l; k++)
      {
        if (frm.elements[i].options[k].selected
          && !frm.elements[i].options[k].defaultSelected)
        {
          output += frm.elements[i].name + ' option ' + k + ' is now selected' + '\n';
          result = true;
        }
      }
    }
  }
  
//  if (output != '')
//    alert(output);
//
//  alert ('result = ' + result);

  return result;
}


//*********************************************************************
//
// GetByID(elemID)
//
// elemID - string
// ID of the element to find
//
// returns - element
// The element we are looking for
//
// Essentially a wrapper around getElementById() with a fallback
//
//*********************************************************************
function GetByID(elemID)
{
  var doc = window.document;

  if (doc.getElementById)
    return doc.getElementById(elemID);
  else if (doc.all)
    return doc.all[elem];
}


//*********************************************************************
//
// addCommas(nStr)
//
// nStr = number string
//
// returns formatted string
//
// Format numbers with commas
//
//*********************************************************************
function addCommas(nStr)
{
  nStr += '';
  var x = nStr.split('.');
  x1 = x[0];
  var x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1)) {
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  }
  return x1 + x2;
}

//*********************************************************************
//
// addEvent(obj, evType, fn, useCapture)
//
// from http://www.scottandrew.com/weblog/articles/cbs-events
//
// obj - DOM object 
// evType - type of event we adding a listener for
// fn - function to call
// useCapture - if the event should be fired during the
// capture or bubbling phase
// (see http://www.quirksmode.org/js/events_advanced.html)
//
// Add events (useful for extending onLoad)
//
// Example: addEvent(window, 'load', foo);
//
//*********************************************************************
function addEvent(obj, evType, fn, useCapture)
{
  if (obj.addEventListener)
  {
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent)
  {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else 
  {
    alert("Handler could not be attached");
  }
}

//*********************************************************************
//
// CHANGE HISTORY
//
// $Log: util.js,v $
// Revision 1.12  2009/04/07 18:38:55  lbettag
// remove debug code
//
// Revision 1.11  2009/04/07 18:36:33  lbettag
// add debug code
//
// Revision 1.10  2009/04/07 13:43:33  lbettag
// add addEvent & tweak for jsjam
//
// Revision 1.9  2009/04/03 20:52:51  lbettag
// add addCommas
//
// Revision 1.8  2009/02/19 22:05:01  mdame
// Moved GetByID() to util.js
//
// Revision 1.7  2006/10/04 15:11:33  mdame
// Updated jsjam-keep settings; fixed some formatting
//
// Revision 1.6  2006/10/03 20:32:49  mdame
// Updated jsjam-keep settings
//
// Revision 1.5  2006/10/02 19:06:41  mdame
// Fixed jsjam-keep lines
//
// Revision 1.4  2006/10/02 18:54:45  mdame
// Add standard header and change log
//
// Revision 1.3  2004/09/30 20:45:57  mdame
// Added FormChanged()
//
// Revision 1.2  2004/07/19 14:18:18  dsteinbrunner
// formatted code
//
// Revision 1.1  2004/02/06 15:58:49  dsteinbrunner
// moved js scripts from re/common to general
//
// 2002-09-12 -- mtd
// Script started
//
//*********************************************************************

