//function checkFields(which)  <-- which=form, uses Required Fields in inputs
//checkdatefields(AForm)
//valdate(xdate)
//datePopulate(myObject)

// stop the enter button from submitting forms
//document.onkeypress = keyPress();
//function keyPress() {
//	if (window.event.keyCode == 13)
//	if (evt.keyCode == 13)
//	{
//	    event.returnValue=false;
//	    event.cancel = true;
//          alert("Enter key stopped!");
//	} else {
//          alert("keyCode =" . evt.keyCode);
//      }
//}
// stop the enter button from submitting forms
document.onkeydown = function(e)
{
    e = e? e : window.event;
    var k = e.keyCode? e.keyCode : e.which? e.which : null;
    var targ;
    if (e.srcElement) targ = e.srcElement;
    if (!targ && e.target) targ = e.target;
    if (targ.nodeType == 3) // defeat Safari bug
       targ = targ.parentNode;

//    alert (targ.type);

    if (k == 13 && targ.type != 'textarea')
    {
        if (e.preventDefault)
        {
            e.preventDefault();
        }
        return false;
    }
    return true;
};



var isNN = (navigator.appName.indexOf("Netscape")!=-1);
function autoTab(input,len, e) {
var keyCode = (isNN) ? e.which : e.keyCode; 
var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
if(input.value.length >= len && !containsElement(filter,keyCode)) {
input.value = input.value.slice(0, len);
input.form[(getIndex(input)+1) % input.form.length].focus();
}

function containsElement(arr, ele) {
var found = false, index = 0;
while(!found && index < arr.length)
if(arr[index] == ele)
found = true;
else
index++;
return found;
}

function getIndex(input) {
var index = -1, i = 0, found = false;
while (i < input.form.length && index == -1)
if (input.form[i] == input)index = i;
else i++;
return index;
}
return true;
}

var win = null;
window.onerror=null;

function MM_findObj(n, d) { //v4.01
  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 && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  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];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 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];}}
}


function submitform(formname) {
  formname.submit();
}


function textCounter(field, maxlimit) {
if (field.value.length > maxlimit) // if too long...trim it!
field.value = field.value.substring(0, maxlimit);
}

function ImageSwap(daImage, daSrc){
 var objStr,obj;
 if(document.images){
  if (typeof(daImage) == 'string') {
   objStr = 'document.' + daImage;
   obj = eval(objStr);
   obj.src = 'http:/images/' + daSrc;
  } else if ((typeof(daImage) == 'object') && daImage && daImage.src) {
   daImage.src = '/images/' + daSrc;
  }
 }
}

function DoButtonSubmit(pSubmitButton) {
  var pass=true;
  var DoOnExists=false;
  var TempJavascript='';
  var TempForm;  
//  eval('TempForm='+pForm);
  TempForm = pSubmitButton.form;

  pSubmitButton.disabled = true;
  pSubmitButton.enabled = false;

  for (i=0;i<TempForm.length;i++)  {
    var tempobj=TempForm.elements[i];
    if (tempobj.type=="hidden"&&tempobj.name=="DoOnSubmit"){ 
      DoOnExists=true;
      break;
    }
  }
  if (DoOnExists){
    TempJavascript=TempForm.DoOnSubmit.value;
    if (TempJavascript.length > 0) {
      TempJavascript = ' if (' + TempJavascript + ') {pass=true;}else{pass=false;}';
      eval(TempJavascript);
    }
  }
  if (pass) {
    TempForm.submit();
  }else{
      pSubmitButton.disabled = false;
      pSubmitButton.enabled = true;
  }
  return pass;
}

function strpos (haystack, needle, offset) {
    // Finds position of first occurrence of a string within another  
    // 
    // version: 1008.1718
    // discuss at: http://phpjs.org/functions/strpos    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Onno Marsman    
    // +   bugfixed by: Daniel Esteban
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);    // *     returns 1: 14
    var i = (haystack+'').indexOf(needle, (offset || 0));
    return i === -1 ? false : i;
}

function checkFields(which) {
  var pass=true;
  var TempValue='';
  var TempLen=0;
  var i, j;
  var SelectRequired = false; // there is a group of fields in which one of the values can not be null
  var SelectRequiredNull = true; // out of that group, all values are null
  var selectFieldNames = ''; // the name of select required fields

  if (document.images) {
    for (i=0;i<which.length;i++)  {
      var tempobj=which.elements[i];
      if (tempobj.id=="1")  { // Field is required
        if (((tempobj.type=="text"||tempobj.type=="textarea")&&
        tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&
        tempobj.selectedIndex==0)) { 
          pass=false;
          break;
        }else if(tempobj.type=="radio"){
          eval('TempLen=document.'+which.name+'.'+tempobj.name+'.length;');
          pass=false;
          for (j=0;j<TempLen;j++){
            eval('tempobj = document.'+which.name+'.'+tempobj.name+'['+j+'];')
            if (tempobj.checked){
              pass=true;
              break;
            }
          }
          if (!pass){break;}
        }else if(tempobj.type=="checkbox"){
          if(!tempobj.checked){
          pass=false;
          break;
          }
        }
      }else if(tempobj.id=="2") { // One of these fields is required
        if (SelectRequired == true) { // this isn't the first one
            selectFieldNames = selectFieldNames + ', ';
        }
        SelectRequired = true;    

        shortFieldName=tempobj.name.toUpperCase();

        // if a field has __ in the name, then what follows is not for display so ignore it
        CutOffPos = strpos(shortFieldName, '__', 0);
        if (CutOffPos) {
            shortFieldName = shortFieldName.substring(0,CutOffPos);
        }

        rExp = /_/gi;
        shortFieldName = shortFieldName.replace(rExp, " ");
        rExp = / id$/gi;
        shortFieldName = shortFieldName.replace(rExp, "");
        selectFieldNames = selectFieldNames + shortFieldName;

        if (((tempobj.type=="text"||tempobj.type=="textarea")&&
        tempobj.value!='')||(tempobj.type.toString().charAt(0)=="s"&&
        tempobj.selectedIndex!=0)) { 
          SelectRequiredNull = false;
        }else if(tempobj.type=="radio"){
          eval('TempLen=document.'+which.name+'.'+tempobj.name+'.length;');
          for (j=0;j<TempLen;j++){
            eval('tempobj = document.'+which.name+'.'+tempobj.name+'['+j+'];')
            if (tempobj.checked){
              SelectRequiredNull = false;
            }
          }
        }else if(tempobj.type=="checkbox"){
          if(tempobj.checked){
          SelectRequiredNull = false;
          }
        }
      }
    }
  }
  if (!pass) {
    shortFieldName=tempobj.name.toUpperCase();
    rExp = /_/gi;
    shortFieldName = shortFieldName.replace(rExp, " ");
    rExp = / id$/gi;
    shortFieldName = shortFieldName.replace(rExp, "");
    alert("Please make sure the "+shortFieldName+" field was properly filled out.");
    return false;
  } else if (SelectRequired == true && SelectRequiredNull == true) {
    alert("You must fill out at least one of these values: "+selectFieldNames+".");
    return false;
  } else return true;
}

function NewWindow(mypage,myname,w,h,scroll) {
 LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
 TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
 settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable,menubar,toolbar'
 win = window.open(mypage,myname,settings)
 if(win.window.focus){
  win.window.focus();
	
 }
}

function DoMyAlert1() {
 alert('Link to new windowsss');
}

function firstcap(which){ 
 var l_Char; 
 var l_Rest; 
 if (which.value.length == 1) {
  l_Char = which.value.substring(0,1);
  l_Rest = which.value.substring(1,which.value.length);
  which.value = l_Char.toUpperCase() + l_Rest; 
 }
} 

function confirmclick(message){
 if (confirm(message)) {
  return true;
 } else {
  return false;
 }
}

function valdate(xdate){
 if (xdate=="") {
  return true;
 }
 var err=0;
 a=xdate;
len= a.length;
 if (len<8 || len>10){ err=1;}
 c = a.indexOf('/');
 if (c > 2) err=1;
 b = a.substring(0, c);// month
 e = a.indexOf('/',c+1);
 d = a.substring(c+1,e);
 f = a.substring(e+1,a.length);
//confirm(err);
// if (c != '/') err = 1;
// if (e != '/') err = 1;
 //basic error checking
 if (b<1 || b>12) err = 1;
 if (d<1 || d>31) err = 1;
 if (f<1790 || f>2199) err = 1;
//advanced error checking
// months with 30 days
 if (b==4 || b==6 || b==9 || b==11){
  if (d==31) err=1;
 }
 // february, leap year
 if (b==2){
  // feb
  var g=parseInt(f/4);
  if (isNaN(g)) {
   err=1;
  }
  if (d>29) err=1;
  if (d==29 && ((f/4)!=parseInt(f/4))) err=1;
 }
 if (err==1){
  alert("Date is not valid or in mm/dd/yyyy format");
  return false;
 } else
  return true;
}

function chkdate() {
 if (document.dates.stdate.value == "") {
  alert("Please enter a Starting Date");
  document.dates.stdate.focus();
  return false;
 }
 if (document.dates.endate.value == "") {
  alert("Please enter an Ending Date");
  document.dates.endate.focus();
  return false;
 }
 var g=valdate(document.dates.stdate.value)
 var h=valdate(document.dates.endate.value)
 if (g == true) {
  if (h==true){
   return true
  }
 }
 alert("Dates are not valid or in mm/dd/yyyy format")
 return false
}

function labelcheck(pObj,pValue){
  var tempobj;
  if (pObj.length > 1) {
    for (i=0;i<pObj.length;i++) {
      tempobj=pObj[i];
      if(tempobj.value==pValue) {
        pObj[i].checked = !pObj[i].checked;
      }
    }
  }else{
    pObj.checked = !pObj.checked;
  }
}

function replace(fullString,text,by) {
// Replaces text with by in string
    var strLength = fullString.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return fullString;

    var i = fullString.indexOf(text);
    if ((!i) && (text != fullString.substring(0,txtLength))) return fullString;
    if (i == -1) return fullString;

    var newstr = fullString.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(fullString.substring(i+txtLength,strLength),text,by);

    return newstr;
}

function removeAllOptions(selectbox)
{
	var i;
	for(i=selectbox.options.length-1;i>=0;i--)
	{
		selectbox.remove(i);
	}
}

function addOption(selectbox,text,value )
{
	var optn = document.createElement("OPTION");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

function DoNumber(pNum) {
	return Number( replace(pNum,',','' ) );
}


/***********************************************************************
                       Masked Input version 1.1
************************************************************************
Author: Kendall Conrad
Home page: http://www.angelwatt.com/coding/masked_input.php
Created:  2008-12-16
Modified: 2010-04-14
Description:
License: This work is licensed under a Creative Commons Attribution-Share Alike
  3.0 United States License http://creativecommons.org/licenses/by-sa/3.0/us/

Argument pieces:
- elm:        [req] text input node to apply the mask on
- format:     [req] string format for the mask
- allowed:    [opt, '0123456789'] string with chars allowed to be typed
- sep:        [opt, '\/:-'] string of char(s) used as separators in mask
- typeon:     [opt, '_YMDhms'] string of chars in mask that can be typed on
- onbadkey:   [opt, null] function to run when user types a unallowed key
- badkeywait: [opt, 0] used with onbadkey. Indicates how long (in ms) to lock
  text input for onbadkey function to run
***********************************************************************/
function MaskedInput(args)
{
  if (args['elm'] === null || args['format'] === null) { return false; }
  var el     = args['elm'],
    format   = args['format'],
    allowed  = args['allowed']    || '0123456789',
    sep      = args['separator']  || '\/:-',
    open     = args['typeon']     || '_YMDhms',
    onbadkey = args['onbadkey']   || function(){},
    badwait  = args['badkeywait'] || 0;
  
  var locked = false, hold = 0;
  el.value = format;
  // Assign events
  el.onkeydown  = KeyHandlerDown;  //
  el.onkeypress = KeyHandlerPress; // add event handlers to element
  el.onkeyup    = KeyHandlerUp;    //

  function GetKey(code)
  {
    code = code || window.event, ch = '';
    var keyCode = code.which, evt = code.type;
    if (keyCode == null) { keyCode = code.keyCode; }
    if (keyCode === null) { return ''; } // no key, no play
    // deal with special keys
    switch (keyCode) {
    case 8:  ch = 'bksp'; break;
    case 46: // handle del and . both being 46
      ch = (evt == 'keydown') ? 'del' : '.'; break;
    case 16: ch = 'shift'; break;//shift
    case 0:/*CRAP*/ case 9:/*TAB*/ case 13:/*ENTER*/
      ch = 'etc'; break;
    case 37: case 38: case 39: case 40: // arrow keys
      ch = (!code.shiftKey &&
           (code.charCode != 39 && code.charCode !== undefined)) ?
        'etc' : String.fromCharCode(keyCode);
      break;
    // default to thinking it's a character or digit
    default: ch = String.fromCharCode(keyCode);
    }
    return ch;
  }
  function KeyHandlerDown(e)
  {
    e = e || event;
    if (locked) { return false; }
    var key = GetKey(e);
    if (el.value == '') { el.value = format; SetTextCursor(el,0); }
    // Only do update for bksp del
    if (key == 'bksp' || key == 'del') { Update(key); return false; }
    else if (key == 'etc' || key == 'shift') { return true; }
    else { return true; }    
  }
  function KeyHandlerPress(e)
  {
    e = e || event;
    if (locked) { return false; }
    var key = GetKey(e);
    // Check if modifier key is being pressed; command
    if (key=='etc' || e.metaKey || e.ctrlKey || e.altKey) { return true; }
    if (key != 'bksp' && key != 'del' && key != 'etc' && key != 'shift') {
      if (!GoodOnes(key)) { return false; }
      return Update(key);
    }
    else { return false; }
  }
  function KeyHandlerUp(e) { hold = 0; }
  function Update(key)
  {
    var p = GetTextCursor(el), c = el.value, val = '';
    // Handle keys now
    switch (true) {
    case (allowed.indexOf(key) != -1):
      if (++p > format.length) { return false; } // if text csor at end
      // Handle cases where user places csor before separator
      while (sep.indexOf(c.charAt(p-1)) != -1 && p <= format.length) { p++; }
      val = c.substr(0, p-1) + key + c.substr(p);
      // Move csor up a spot if next char is a separator char
      if (allowed.indexOf(c.charAt(p)) == -1
          && open.indexOf(c.charAt(p)) == -1) { p++; }
      break;
    case (key=='bksp'): // backspace
      if (--p < 0) return false; // at start of field
      // If previous char is a separator, move a little more
      while (allowed.indexOf(c.charAt(p)) == -1
             && open.indexOf(c.charAt(p)) == -1
             && p > 1) { p--; }
      val = c.substr(0, p) + format.substr(p,1) + c.substr(p+1);
      break;
    case (key=='del'): // forward delete
      if (p >= c.length) { return false; } // at end of field
      // If next char is a separator and not the end of the text field
      while (sep.indexOf(c.charAt(p)) != -1
             && c.charAt(p) != '') { p++; }
      val = c.substr(0, p) + format.substr(p,1) + c.substr(p+1);
      p++; // Move position forward
      break;
    case (key=='etc'): return true; // Catch other allowed chars
    default: return false;   // Ignore the rest
    }
    el.value = '';        // blank it first (Firefox issue)
    el.value = val;       // put updated value back in
    SetTextCursor(el, p); // Set the text cursor
    return false;
  }
  function GetTextCursor(node)
  {
    try {
      if (node.selectionStart >= 0) { return node.selectionStart; }
      else if (document.selection) {// IE
        var ntxt = node.value; // getting starting text
        var rng = document.selection.createRange();
        rng.text = '|%|';
        var start = node.value.indexOf('|%|');
        rng.moveStart('character', -3);
        rng.text = '';
        // put starting text back in,
        // fixes issue if all text was highlighted
        node.value = ntxt;
        return start;
      } return -1;
    } catch(e) { return false; }
  }
  function SetTextCursor(node, pos)
  {
    try {
      if (node.selectionStart) {
        node.focus();
        node.setSelectionRange(pos,pos);
      }
      else if (node.createTextRange) { // IE
        var rng = node.createTextRange();
        rng.move('character', pos);
        rng.select();
      }
    } catch(e) { return false; }
  }
  function GoodOnes(k)
  {
    if (allowed.indexOf(k) == -1 && k!='bksp' && k!='del' && k!='etc') {
      var p = GetTextCursor(el); // Need to ensure cursor position not lost
      locked = true; onbadkey();
      // Hold lock long enough for onbadkey function to run
      setTimeout(function(){locked=false; SetTextCursor(el,p);}, badwait);
      return false;
    } return true;
  }
  function resetField() {
    el.value = format;
  }
  function setAllowed(a) {
    allowed = a;
    resetField();
  }
  function setFormat(f) {
    format = f;
    resetField();
  }
  function setSeparator(s) {
    sep = s;
    resetField();
  }
  function setTypeon(t) {
    open = t;
    resetField();
  }
  return {
    resetField:resetField,
    setAllowed:setAllowed,
    setFormat:setFormat,
    setSeparator:setSeparator,
    setTypeon:setTypeon
  }
}


function appendOnLoad(fx) { 
  try { // For browsers that know DOMContentLoaded (FF, Safari, Opera)
    document.addEventListener("DOMContentLoaded", fx, false);
  } catch(e) {
    var old = window.onload;
    if (typeof old != 'function') { window.onload = fx; }
    else { window.onload = function() { old(); fx(); } }
  }
}

//----------------------------------------------------------------------------------------
// [dFilter] - A Numerical Input Mask for JavaScript
// Written By Dwayne Forehand - March 27th, 2003
// Please reuse & redistribute while keeping this notice.

var dFilterStep;

function dFilterStrip (dFilterTemp, dFilterMask){
  dFilterMask = replace(dFilterMask,'#','');
  for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++){
    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
  }
  return dFilterTemp;
}

function dFilterMax (dFilterMask){
  dFilterTemp = dFilterMask;
  for (dFilterStep = 0; dFilterStep < (dFilterMask.length+1); dFilterStep++){
    if (dFilterMask.charAt(dFilterStep)!='#')	{
      dFilterTemp = replace(dFilterTemp,dFilterMask.charAt(dFilterStep),'');
    }
  }
  return dFilterTemp.length;
}

function dFilter (e, textbox, dFilterMask){
  var key = window.event ? e.keyCode : e.which;
  CurLen =  textbox.value.length;
  dFilterNum = dFilterStrip(textbox.value, dFilterMask);
  if (key==9)	{
    return true;
  }else if (key==8&&dFilterNum.length!=0){
    dFilterNum = dFilterNum.substring(0,dFilterNum.length-1);
    CurLen = CurLen - 1;
  }else if ( ((key>47&&key<58)||(key>95&&key<106)) && dFilterNum.length<dFilterMax(dFilterMask) ){
    if (key>95){key = key - 48}
    dFilterNum=dFilterNum+String.fromCharCode(key);
  }
  var dFilterFinal='';
  for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++){
    if (dFilterMask.charAt(dFilterStep)=='#'){
					  if (dFilterNum.length!=0) {
				        dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
					      dFilterNum = dFilterNum.substring(1,dFilterNum.length);
					  } else  {
				        dFilterFinal = dFilterFinal + "";
				    }
				}
		 		else if ((dFilterMask.charAt(dFilterStep)!='#')&&(dFilterStep == CurLen)&&(CurLen==0)){
				    dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep); 	
                            CurLen = CurLen + 1;		
				}
		 		else if ((dFilterMask.charAt(dFilterStep)!='#')&&(dFilterStep < CurLen)&&(CurLen>1)){
				    dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep); 	
                            CurLen = CurLen + 1;		
				}
//		    dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
		}
		textbox.value = dFilterFinal;
    return false;
}

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

