function DS_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=DS_findObj(n,d.layers[i].document); return x;
}
function DS_swapImage() { 
  var i,j=0,x,a=DS_swapImage.arguments; document.DS_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=DS_findObj(a[i]))!=null){document.DS_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function DS_swapImgRestore() { 
  var i,x,a=document.DS_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function DS_preloadImages() {
 var d=document; if(d.images){ if(!d.DS_p) d.DS_p=new Array();
   var i,j=d.DS_p.length,a=DS_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.DS_p[j]=new Image; d.DS_p[j++].src=a[i];}}
}

function jLTrim(strIn)
{
  var str = new String(strIn);
	
  while (1)
  {
    if (str.substring(0, 1) != " ") break;
    str = str.substring(1, str.length);
  }

  return str;
}

function jRTrim(strIn)
{
  var str = new String(strIn);
 
  while (1)
  {
    if (str.substring(str.length - 1, str.length) != " ") break;
    str = str.substring(0, str.length - 1);
  }

  return str;
}

function jTrim(strIn)
{
  return jLTrim(jRTrim(strIn));
}

function isWhitespace(s)
{  
  if (isEmpty(s)) return true;

  var whitespace = " \t\n\r";

  for (var i = 0; i < s.length; i++)
  {   
    if (whitespace.indexOf(s.charAt(i)) == -1) return false;
  }

  return true;
}

function isEmpty(s)
{
  return ((s == null) || (s.length == 0));
}

function isUpper(iCode)
{
  if ((iCode >= 65) && (iCode <= 90)) {
    return true;
  }
  else {
    return false;
  }
}

function isLower(iCode)
{
  if ((iCode >= 97) && (iCode <= 122)) {
    return true;
  }
  else {
    return false;
  }
}

function isNumber(iCode)
{
  if ((iCode >= 48) && (iCode <= 57)) {
    return true;
  }
  else {
    return false;
  }
}

function fnOKP(e, type)
{
  var charCode = e.keyCode || e.which;
  var k = e.keyCode || e.which;
  var bAllowIt = false;

  if (type == 'email')	// allow only upper case, lower case, numbers, @ sign, dash, underscore, and dot
  {
    if (isUpper(k) || isLower(k) || isNumber(k) || (k == 64 || k == 45 || k == 95 || k == 46)) bAllowIt = true;
  }
  else if (type == 'name')     // allow only upper case and lower case letters, and - and ~ and ` and ' and space
  {
    if (isUpper(k) || isLower(k) || (k == 32 || k == 39 || k == 45 || k == 96 || k == 126)) bAllowIt = true;
  }
  else if ((type == 'date') || (type == 'SSN') || (type == 'postalcode') || (type == 'phone'))     // allow only 0123456789-
  {
    if (charCode == 45 || (charCode >= 48 && charCode <= 57)) bAllowIt = true;
  }
  else if (type == 'letter')     // allow only upper case and lower case letters
  {
    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122)) bAllowIt = true;
  }
  else if (type == 'alphanumeric')     // allow only upper case and lower case letters and digits and space
  {
    if ((charCode >= 65 && charCode <= 90) || (charCode >= 97 && charCode <= 122) || (charCode >= 48 && charCode <= 57) || (charCode == 32)) bAllowIt = true;
  }
  else if (type == 'number')     // allow only digits
  {
    if (charCode >= 48 && charCode <= 57) bAllowIt = true;
  }
  else if (type == 'decimal')     // allow only 0123456789.
  {
    if (charCode == 46 || (charCode >= 48 && charCode <= 57)) bAllowIt = true;
  }
  else if (type == 'noenter')     // don't allow ENTER.
  {
    if (charCode != 13) bAllowIt = true;
  }
  else if (type == 'upperalphanumericnospace')     // allow only upper case letters and digits
  {
    if ((charCode >= 65 && charCode <= 90) || (charCode >= 48 && charCode <= 57))
    {
       bAllowIt = true;
    }
    else if ((charCode >= 97) && (charCode <= 122))
    {
      if (navigator.appName == "Netscape")
      {
        e.which = parseInt(e.which) - 32;	//does not work
      }
      else
      {
        e.keyCode = parseInt(e.keyCode) - 32;
      }
      bAllowIt = true;
    }
  }

  if (!bAllowIt)
  {
    e.keyCode = 0;                               //for IE
    if(e.preventDefault) e.preventDefault();     //for NS6
    return false;                                //for NS4
  }
}

function fnIsFirstDecimalPoint(s)
{
  if (isEmpty(s)) return true;
  
  var decimal = '.';
  
  for (var i = 0; i < s.length; i++)
  {
    if (decimal.indexOf(s.charAt(i)) != -1) return false;
  }

  return true;
}  

function fnIsMoney(s)
{
  if (isEmpty(s)) return true;

  var decimal = '.';
  var pos = 0;
    
  for (var i = 0; i < s.length; i++)
  {
    if (decimal.indexOf(s.charAt(i)) != -1)
    {
      pos = i;
      break;
    }
  }

  if ((s.length - pos - 1) > 2 && (pos != 0)) return false;
  else return true;  
}

function fnIsDate(sDate, sFormat)
{
  var arrDays = new Array();
  var temp = sDate;
  var year;
  var month;
  var day;

  if (isWhitespace(temp)) return true;

  arrDays[1] = 31;
  arrDays[2] = 0;   // temporarily
  arrDays[3] = 31;
  arrDays[4] = 30;
  arrDays[5] = 31;
  arrDays[6] = 30;
  arrDays[7] = 31;
  arrDays[8] = 31;
  arrDays[9] = 30;
  arrDays[10] = 31;
  arrDays[11] = 30;
  arrDays[12] = 31;

  if (temp.length != 10) return false;
  
  // parse date
  if (sFormat == 'yyyy-mm-dd')
  {
    year = temp.substring(0,4);
    month = temp.substring(5,7);
    day = temp.substring(8,10);
  }
  else if ((sFormat == 'mm/dd/yyyy') || (sFormat == 'mm-dd-yyyy'))
  {
    month = temp.substring(0,2);
    day = temp.substring(3,5);
    year = temp.substring(6,10);
  }
  
  // February has 29 days in any year evenly divisible by four,
  // EXCEPT for centurial years which are not also divisible by 400.
  arrDays[2] = ((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28;

  // convert to integers
  var intYear = parseInt(year, 10);
  var intMonth = parseInt(month, 10);
  var intDay = parseInt(day, 10);

  // easy validation
  if (intYear < 1900) return false;
  if ((intMonth < 1) || (intMonth > 12)) return false;
  if ((intDay < 1) || (intDay > 31)) return false;

  // catch invalid days, except for February
  if (intDay > arrDays[intMonth]) return false; 
  
  return true;
}

function fnIsZip(me)
{
  var str = new String(me);

  if ((str.length != 5) && (str.length != 9)) return false;

  return true;
}

function fnIsPhone(me)
{
  var str = new String(me);

  if ((str.length != 7) && (str.length != 10)) return false;

  return true;
}

function fnMax(sType, sName, sValue, sMax)
{
  if (sType == 'okp')    //onKeyPress
 {
    if ((parseInt(sValue.length, 10)) > (parseInt(sMax, 10) - 1)) return false;
  }
  else if (sType == 'ob')    //onBlur
  {
    if ((parseInt(sValue.length, 10)) > (parseInt(sMax, 10)))
    {
      var sMessage = 'ERROR: ' + sValue.length + ' characters were pasted into a field that only allows ' + sMax + ' characters.\nOnly the first ' + sMax + ' characters will be submitted.';
      alert (sMessage); 
      var sCtrl = eval('document.forms[0].' + sName); 
      sCtrl.value = sCtrl.value.substring(0, sMax); 
    }
  }
  return true;
} 

function isEmail(sText)
{
  //test for a@b.c formatted email address
  var sFrom = new String();
  var iAtSignPos;
  var iDotPos;
  var iAtSignCounter;
  var sCurChar;
      
  sFrom = sText;
  iAtSignCounter = 0;

  if (sFrom.indexOf('@') == -1) return false;			//must have a @ somewhere
  if (sFrom.indexOf('.') == -1) return false;			//must have a . somewhere
  if (sFrom.indexOf('@') == 0) return false;			//@ can't be first character
  if (sFrom.indexOf('.') == 0) return false;			//. can't be first character
  if (sFrom.indexOf('.') == sFrom.length - 1) return false;	//. can't be last character
  if (sFrom.indexOf('@.') > -1) return false;			//can't have @. anywhere
  
  for (var i = 0; i < sFrom.length; i++)
  {
    sCurChar = sFrom.charAt(i);

    if (sCurChar == '@')
    {
      iAtSignPos = i;
      iAtSignCounter = iAtSignCounter + 1;
    }
    else if (sCurChar == '.')
    {
      iDotPos = i;
    }
  }

  if (iAtSignCounter != 1) return false;	//can't have more than one @
  if (iDotPos < iAtSignPos) return false;	//rightmost . can't be before @

  return true;
}


function fnOpenWindow(sURL, sScroll, sHeight, sWidth, sLeft, sTop)
{

  //set defaults
  if (sURL == '')    { sURL = 'xyz.htm'; }
  if (sScroll == '') { sScroll = 'yes'; }
  if (sHeight == '') { sHeight = '175'; }
  if (sWidth == '')  { sWidth = '300'; }
  if (sLeft == '')   { sLeft = '200'; }
  if (sTop == '')    { sTop = '200'; }

  var isMS = false;
  var x;
  var y;

  if (navigator.appName.indexOf('Microsoft') >= 0) { isMS = true; }

  var sOptions = "toolbar=no,status=no,location=no,menubar=no,resizable=no,dependent=yes";
  sOptions += ",height=" + sHeight;
  sOptions += ",width=" + sWidth;
  sOptions += ",scrollbars=" + sScroll;

  if (sLeft == 'dock')
  {
    if (isMS)
    {
      x = window.screenLeft;
    }
    else
    {
      x = window.screenX;
    }
  }
  else
  {
    x = sLeft;
  }

  if (sTop == 'dock')
  {
    if (isMS)
    {
      if (parseInt(parent.frames.length) > 0)
      {
        y = parent.frames[0].window.screenTop;
      }
      else
      {
        y = window.screenTop;
      }
    }
    else
    {
      y = window.screenY;
    }
  }
  else
  {
    y = sTop;
  }

  if (isMS)
  {
    sOptions += ',left=' + x + ',top=' + y
  }
  else
  {
    sOptions += ',screenX=' + x + ',screenY=' + y
  }

//  if (navigator.appName.indexOf('Microsoft') >= 0)
//  {
//    sOptions += ',left=20,top=200'
//  }
//  else
//  {
//    sOptions += ',screenX=20,screenY=200'
//  }

  var oNewWin = window.open (sURL, '', sOptions);
}
