function autoMask(field, event, sMask) {
//only tested on windows XP, so bow out for other OS's
var agt=navigator.userAgent.toLowerCase();
var winXP = (agt.indexOf("windows nt 5.1")!=-1);
if(!winXP)return true;
    
    var uniCode;
    if(event.keyCode)uniCode = event.keyCode;
    else uniCode = event.which;
    
    var KeyTyped = String.fromCharCode(uniCode); 
    
    var targ = getTarget(event);
    keyCount = targ.value.length;

    if(keyCount == sMask.length) {
        if (isNumeric(KeyTyped) || uniCode == 9) {
            return true;
         } else {
	 targ.value = '';
	 return false;
         }
	 }

	 switch (sMask.charAt(keyCount))
	 {
	 case '*':
            if ((sMask.charAt(keyCount+1) != '#') && (sMask.charAt(keyCount+1) != 'A' ) )
                  {
                     field.value = field.value + KeyTyped + sMask.charAt(keyCount+1);
                     return false;
                  }
            return true;
	    break;

	    case '#':
            if (isNumeric(KeyTyped))
            {
                 if ((sMask.charAt(keyCount+1) != '#') && (sMask.charAt(keyCount+1) != 'A' ) )
                      {
		       insertAtCursor(field, KeyTyped);
                         //field.value = field.value + KeyTyped + sMask.charAt(keyCount+1);
                         field.value = field.value + sMask.charAt(keyCount+1);
                         return false;
                      }
                return true;
            } else {
                if (isAlpha(KeyTyped)){
                    return false;
                   } else {
                    return true;
                }
            }
	        break;

		case 'A':
            if (isAlpha(KeyTyped))
            {
                 if ((sMask.charAt(keyCount+1) != '#') && (sMask.charAt(keyCount+1) != 'A' ) )
                      {
                         field.value = field.value + KeyTyped + sMask.charAt(keyCount+1);
                         return false;
                      }
                return true;
            } else {
                return false;
            }
            break;

	    default:
	        if (KeyTyped.charCodeAt(0) < 32) return true;
		    break;
    }

    if (KeyTyped.charCodeAt(0) < 32) return true;
    return false;
}

 function getTarget(e) {
  // IE5
   if (e.srcElement) {
        return e.srcElement;
   }
    if (e.target) {
        return e.target;
   }
 }

  function getKeyCode(e) {
 //IE5
 if (e.srcElement) {
        return e.keyCode
 }
  // NC5
  if (e.target) {
   return e.which
  }
 }

function isNumeric(c)
{
        var sNumbers = "0123456789";
        if (sNumbers.indexOf(c) == -1)
                return false;
        else return true;

}

function isAlpha(c)
{
        var lCode = c.charCodeAt(0);
        if (lCode >= 65 && lCode <= 122 )
          {
                return true;
         }
        else
        return false;
}

function isPunct(c)
{
        var lCode = c.charCodeAt(0);
        if (lCode >= 32 && lCode <= 47 )
          {
                return true;
         }
        else
        return false;
}

function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
    + myValue
    + myField.value.substring(endPos, myField.value.length);
  } else {
    myField.value += myValue;
  }
}


//END AUTOMASK FUNCTIONS

function isBlank(s){
  for(var i = 0; i < s.length; i++){
    var c = s.charAt(i);
    if ((c != ' ') && (c != '\n') && (c != '\t')) return false;
  }
  return true;
}
