
KEY_BACKSPACE = 8;
KEY_ZERO = 48;
KEY_NINE = 57;
KEY_ENTER = 13;
WHICH_TAB = 0;
KEY_TAB = 9;  
dKEY_ZERO = 96;
dKEY_NINE = 105; 
var LENGTH;
var CHARACTERS = "";
function notSupported(){ alert('your browser is not supported.'); };


function setSel(obj){
   var t=obj;
   var start= getStartPos(t);
   var end = getEndPos(t);
   if(t.setSelectionRange){
      if (CHARACTERS.match(start)){
         end++;
         start++;
         }         
      if((start-end)==0){
         end++;
         }  
      if(start==LENGTH){
         start--;            
         }                
      t.setSelectionRange(start,end);
      t.focus();
      } 
   else if (t.createTextRange){
      sel=document.selection;   
      if(sel){   
         r2=sel.createRange(); 
         if (CHARACTERS.match(start)){
            r2.moveEnd("character", end+1);
            r2.moveStart("character", 1);
            }         
         if((r2.text.length)==0){         
            r2.moveEnd("character", 1);
            }   
         if(start==LENGTH){
            r2.moveStart("character", -1);            
            }             
   	   r2.select();   
         }           
      }
   else {
      //notSupported();
      }
};

function getStartPos(t)
{
   if(t.setSelectionRange){
      return t.selectionStart;
      }
   else if(t.createTextRange) {
      sel=document.selection;   
      if(sel){   
         r2=sel.createRange(); 
         var end = r2.text.length;
         var inprange = t.createTextRange();
         inprange.setEndPoint('EndToStart', r2);
         return inprange.text.length;  
         }
      }
};

function getEndPos(t)
{
   if(t.setSelectionRange) {
      return t.selectionEnd;
      }
   else if(t.createTextRange){
      sel=document.selection;
      if(sel){
         r2=sel.createRange();
         return r2.text.length + getStartPos(t);
         }
      }
};

function moveCurser(obj, dir)
{
   if(dir=="left"){
      if(obj.setSelectionRange){
	      var place = getStartPos(obj);
	      if (CHARACTERS.match(place-1)){
            obj.selectionStart = obj.selectionStart - 2;
            obj.selectionEnd = obj.selectionStart;
            }
         else{
            obj.selectionStart--;
            obj.selectionEnd = obj.selectionStart;
            setSel(obj);
            }
         }
      else if(obj.createTextRange){      
         sel=document.selection;   
         if(sel){ 
            r2=sel.createRange(); 
            var start=getStartPos(obj);
            var end=getEndPos(obj);
            if (CHARACTERS.match(start-1)){
               r2.moveEnd("character", (start-end-1));
               r2.moveStart("character", -1);
               }         
            else{         
               r2.moveEnd("character", (start-end));
               r2.moveStart("character", -1);
               }                
   	      r2.select();   
            }      
         }
      }
   else if(dir=="right"){
      if(obj.setSelectionRange){ 
         setSel(obj);
         }
      else if(obj.createTextRange){      
         sel=document.selection;   
         if(sel){   
            r2=sel.createRange(); 
            var start=getStartPos(obj);
            var end=getEndPos(obj);
            if (CHARACTERS.match(start+1)){
               r2.moveStart("character", 2); 
               r2.moveEnd("character", ((start+1)-end));
               }         
            else{         
               r2.moveStart("character", 1);
               r2.moveEnd("character", ((start+1)-end));
               }          
   	      r2.select();   
            }     
         }
      }
   
};

function m_keypress(e, obj)
{
   if (obj.setSelectionRange){// DOM2 Browsers: Netscape 6+, Mozilla, FireFox
      var t = obj;
      var k=m_GetKeyCode(e);
	   var place = t.selectionStart;
	   if (e.keyCode != KEY_BACKSPACE && e.keyCode != 37 && e.keyCode != 39 && e.keyCode != 46 && e.which != KEY_ENTER && !(e.which == WHICH_TAB && e.keyCode == KEY_TAB) && (e.which < KEY_ZERO || e.which > KEY_NINE)) {
            t.value = rebuildInput(t, false);
            t.selectionStart = place;
            t.selectionEnd = place+1;
            setSel(t);
            e.preventDefault();
		   }
	   else if(e.keyCode == KEY_ENTER) //Needed for Mozilla 1.0 to accept Enter Key, breaks other browsers left arrow keypress.
	   {
	  		return true;
	   }
	   else if (e.which >= KEY_ZERO && e.which <=KEY_NINE) {
		   t.value = rebuildDate(t, e);
         if (/*ss=="/"*/CHARACTERS.match(place+1)){
            t.selectionStart =place+2;
            t.selectionEnd = place+2;
            setSel(t);
            }
         else{
            t.selectionStart = place+1;
            t.selectionEnd = place+1;
            setSel(t);
            }
         e.preventDefault();
         }
      else if(e.keyCode==KEY_BACKSPACE || e.keyCode==37 || e.keyCode==39 || e.keyCode==46){
         e.returnValue=false;
         if(e.keyCode==KEY_BACKSPACE){
            m_KeyBackspace(obj);
            e.preventDefault();
            }
         else if(e.keyCode==37){
            moveCurser(t,"left"); 
            }
         else if(e.keyCode==39){
            moveCurser(t,"right");   
            }
         else if(e.keyCode==46){
            m_KeyDelete(obj);
            e.preventDefault();
            }
         }
      }
   else if (obj.createTextRange){
      var t = obj;
      if (e.keyCode != KEY_ENTER && (e.keyCode < KEY_ZERO || e.keyCode > KEY_NINE)) {
			e.keyCode = 0; // Cancel the Key Press (Internet Explorer)
         return false;
		   }
	    else if(e.keyCode == KEY_ENTER) //so IE can accept enter keypress in the textbox
	    {
			return true;
	    }
		else {
		   var start = getStartPos(t);   
		   t.value = rebuildDate(t, e); 
		   if (CHARACTERS.match(0)){
		        moveCurser(t, "right");
		      }
         for(var x = 0; x<=start; x++){
            if(!CHARACTERS.match(x))
		         moveCurser(t, "right");
		         }
			e.keyCode = 0; // Cancel the Key Press (Internet Explorer)    
         return false;
		   }
      e.keyCode = 0;
      return false;
      }
}; 

function m_keydown(e, obj)
{  
   if (obj.createTextRange){ // Internet Explorer
      var t = obj;
      var k=m_GetKeyCode(e);
      if(k==KEY_BACKSPACE||k==37||k==39||k==46){
         e.returnValue=false;
         if(k==KEY_BACKSPACE){
            m_KeyBackspace(obj);
            setSel(t);
            return false
            }
         else if(k==37){
            moveCurser(t,"left");  
            setSel(t);
         }
         else if(k==39){
            moveCurser(t,"right");  
            setSel(t);       
            }
         else if(k==46){
            m_KeyDelete(obj);
            setSel(t);
            return false ;
            }
         }
	   }
};  

function m_GetKeyCode(e)
{
   var key=(document.all)?e.keyCode:e.which;
   return key;
};

function rebuildDate(obj, e)
{ 
   var t = obj;
   var place = getStartPos(t);
   var xdate; 
   var ydate = "";
   xdate = t.value;
   for(x=0;x<LENGTH;x++) {
      if(x!= place || CHARACTERS.match(x)/*x==2 || x==5*/){
         ydate += xdate.charAt(x);
         }
      else{         
         var k = m_GetKeyCode(e);
         ydate += String.fromCharCode((k>=96&&k<=105)?(k-48):k);
         }
      }  
   return ydate;
};

function rebuildInput(obj, del)
{  
   var t = obj;
   var place = getStartPos(t);
   var end = getEndPos(t);
   if(end==place){end++;}
   var xdate;
   var ydate = "";
   xdate = t.value;
   for(x=0;x<=LENGTH;x++) {
      if(x < place || x > (end-1) || !del || CHARACTERS.match(x)/*x == 2 || x == 5*/)
         ydate += xdate.charAt(x);
      else{
         ydate += "_";
         }
      }
   return ydate;
};

function m_KeyDelete(obj)
{
   var t = obj;
   if(t.setSelectionRange){
      var place = t.selectionStart;
      t.selectionEnd--;
      t.value = rebuildInput(t, true);
      t.selectionStart = place;
      t.selectionEnd = place;
      setSel(t);
   }
   else if(t.createTextRange){
      var start = getStartPos(t);
      t.value=rebuildInput(t, true);
		if (CHARACTERS.match(0)){
		     start++;
		   }   
      for(var x = 0; x<start; x++){
         if(!CHARACTERS.match(x)){
		      moveCurser(t, "right");
		      }
		   }
      }
};

function m_KeyBackspace(obj)
{ 
   var t = obj;
   if(t.setSelectionRange){
      var s = t.value[t.selectionStart-1];
      var place = t.selectionStart;
      if (/*s=="/"*/CHARACTERS.match(t.selectionStart-1)){
         t.value = rebuildInput(t, true);
         t.selectionStart = place - 2;
         t.selectionEnd = place - 2;
         setSel(t);
         }
      else{
         t.value = rebuildInput(t, true);
         t.selectionStart = place - 1;
         t.selectionEnd = place - 1;
         setSel(t);
         } 
      }
   else if(t.createTextRange){
      var start = getStartPos(t);
      var date = t.value;
      t.value=rebuildInput(t, true);
		if (CHARACTERS.match(0)){
		   start++;
		   }
      for(var x = 0; x<(start-1); x++){
         if(!CHARACTERS.match(x)){
            if(!(CHARACTERS.match(start-1)&&x==(start-2))&&!(CHARACTERS.match(start-1)&&x==(start-2))){
		         moveCurser(t, "right");
		         }
		      }
		   }
      
      }
};

function load()
{
   var f=document.f;
   var t=f.t;
   var s=f.s;
   var d=f.d;
   t.value = "(___)___-____";
   s.value="___-__-____";
   d.value="__/__/____";
   /*LENGTH=t.value.length;
   var j = 0;
   var validchars = "/()-.$, ";
   var mask = t.value;
   for (var i=0; i < mask.length; i++) {
      var letter = mask.charAt(i);
      if (validchars.indexOf(letter) != -1){
         CHARACTERS += i;
         j++;
         }
      }  */
};

function init(obj)
{
   var t = obj;
   CHARACTERS="";
   LENGTH=t.value.length;
   var j = 0;
   var validchars = "/()-.$, ";
   var mask = t.value;
   for (var i=0; i < mask.length; i++) {
      var letter = mask.charAt(i);
      if (validchars.indexOf(letter) != -1){
         CHARACTERS += i;
         j++;
         }
      }  
}

function checkDate(obj)
{
   if (obj.setSelectionRange || obj.createTextRange)
   {
      if (obj.value.length != 10)
      {
         obj.value = "__/__/____";
      }   
      
      var char1 = obj.value.charAt(2);      
      var char2 = obj.value.charAt(5);
      if (char1 != "/" || char2 != "/")
      {
         obj.value = "__/__/____";
      }
   }
}

function Phone(obj)
{
   if (obj.setSelectionRange || obj.createTextRange)
   {
      if (obj.value.length != 13)
      {
         obj.value = "(___)___-____";
      }   
      
      var char1 = obj.value.charAt(0);      
      var char2 = obj.value.charAt(4);    
      var char3 = obj.value.charAt(8);
      if (char1 != "(" || char2 != ")" || char3 != "-")
      {
         obj.value = "(___)___-____";
      }
   }
}

function SSN(obj)
{
   if (obj.setSelectionRange || obj.createTextRange)
   {
      if (obj.value.length != 11)
      {
         obj.value = "___-__-____";
      }   
      
      var char1 = obj.value.charAt(3);      
      var char2 = obj.value.charAt(6);  
      if (char1 != "-" || char2 != "-")
      {
         obj.value = "___-__-____";
      }
   }
}
