/*
 * This code by Derek Keevil
 * Careful, it is very specific to the needs of www.achonline.com
 * but there are some good ideas in it worth looking at.
 */
 
var handled = 0;
var iMax = 3;

// NN4 cannot use onKeyUp 
// have to capture all KeyUp events and filter out the fields to tab
// IE4 has difficulties, so check there too.

TabNames = new Array;
TabLengths = new Array;
TabNextField = new Array;
TabPartialName = new Array;
TabMoveAlong = new Array;
TabFirstElement = new Array;

TabNames[0] = 'ssn1';
TabLengths[0] = 3;
TabNextField[0] = 'ssn2'
TabPartialName[0] = false;
TabMoveAlong[0] = true;
TabFirstElement[0] = true;

TabNames[1] = 'ssn2';
TabLengths[1] = 2;
TabNextField[1] = 'ssn3'
TabPartialName[1] = false;
TabMoveAlong[1] = true;
TabFirstElement[1] = false;

TabNames[2] = 'MonthTab';
TabLengths[2] = 2;
TabNextField[2] = 'DayTab'
TabPartialName[2] = true;
TabMoveAlong[2] = true;
TabFirstElement[2] = true;

TabNames[3] = 'DayTab';
TabLengths[3] = 2;
TabNextField[3] = 'YearTab'
TabPartialName[3] = true;
TabMoveAlong[3] = true;
TabFirstElement[3] = false;

TabNames[4] = 'Phone1';
TabLengths[4] = 3;
TabNextField[4] = 'Phone2'
TabPartialName[4] = true;
TabMoveAlong[4] = true;
TabFirstElement[4] = true;

TabNames[5] = 'Phone2';
TabLengths[5] = 3;
TabNextField[5] = 'Phone3'
TabPartialName[5] = true;
TabMoveAlong[5] = true;
TabFirstElement[5] = false;

TabNames[6] = 'ssn3';
TabLengths[6] = 4;
TabNextField[6] = ''
TabPartialName[6] = false;
TabMoveAlong[6] = false;
TabFirstElement[6] = false;

TabNames[7] = 'YearTab';
TabLengths[7] = 4;
TabNextField[7] = ''
TabPartialName[7] = true;
TabMoveAlong[7] = false;
TabFirstElement[7] = false;

TabNames[8] = 'Phone3';
TabLengths[8] = 4;
TabNextField[8] = ''
TabPartialName[8] = true;
TabMoveAlong[8] = false;
TabFirstElement[8] = false;

//added by andy-----2007-07-10
TabNames[14] = 'group_nb';
TabLengths[14] = 5;
TabNextField[14] = 'ee_nb'
TabPartialName[14] = false;
TabMoveAlong[14] = true;
TabFirstElement[14] = false;

TabNames[15] = 'ee_nb';
TabLengths[15] = 5;
TabNextField[15] = 'ee_nb'
TabPartialName[15] = false;
TabMoveAlong[15] = true;
TabFirstElement[15] = false;

TabNames[9] = 'memberID_1';
TabLengths[9] = 4;
TabNextField[9] = 'memberID_2'
TabPartialName[9] = false;
TabMoveAlong[9] = true;
TabFirstElement[9] = false;

TabNames[10] = 'memberID_2';
TabLengths[10] = 5;
TabNextField[10] = 'month_a'
TabPartialName[10] = false;
TabMoveAlong[10] = true;
TabFirstElement[10] = false;

TabNames[11] = 'month_a';
TabLengths[11] = 2;
TabNextField[11] = 'day_a'
TabPartialName[11] = false;
TabMoveAlong[11] = true;
TabFirstElement[11] = false;

TabNames[12] = 'day_a';
TabLengths[12] = 2;
TabNextField[12] = 'year_a'
TabPartialName[12] = false;
TabMoveAlong[12] = true;
TabFirstElement[12] = false;

TabNames[13] = 'year_a';
TabLengths[13] = 4;
TabNextField[13] = 'year_a'
TabPartialName[13] = false;
TabMoveAlong[13] = true;
TabFirstElement[13] = false;

//added by andy-----2007-07-10
MaxTabs = 15

window.onKeyUp = HandleKey;	
window.onKeyDown = KeyFilter;	

if (document.layers) {
        window.captureEvents(Event.KEYUP);
        window.captureEvents(Event.KEYDOWN);
}

//Cancels hyphens, spaces and dashes
function KeyFilter(evnt) {
	if (document.layers) {
		return (evnt.which != 45 && evnt.which != 32)
	}
	if (document.all) {
		return (event.keyCode != 109 && event.keyCode != 32)
	}
}


// Replaces text with by in string
function replace(string,text,by) {
    var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength)
        newstr += replace(string.substring(i+txtLength,strLength),text,by);
    return newstr;
}


// Netscape KeyUp handler
function HandleKey(evnt)
{
	goForAutotab = false

	//alert('1. ' + evnt.which)

	var MoveAlong = false;
	for(i=0;i<=MaxTabs;i++) {
		//alert(evnt.target.name + ' ' + TabNames[i])
		if (evnt.target.name.indexOf(TabNames[i]) > -1) {
		iMax = TabLengths[i];
		MoveAlong = TabMoveAlong[i];
			if(TabPartialName[i]) {
				DateFieldName = evnt.target.name.substring(0,evnt.target.name.indexOf(TabNames[i]));
				actualLength = eval('evnt.target.form.' + DateFieldName + 'DayTab.value.length')
			} else {
				actualLength = eval('evnt.target.form.' + TabNames[i] + '.value.length')
			}
			//alert(actualLength + '<=' + iMax);
			if (actualLength <= iMax) {
				goForAutotab = true;
			}
		}
	}

	if (evnt.which == 47 && evnt.target.value != '/' && MoveAlong == true) {
	  evnt.target.value = replace(evnt.target.value,'/','');
	  nextElement = getNextElement(evnt.target);
	  if (nextElement) {
			nextElement.select();
			nextElement.focus();
	  }
	} 
	if (evnt.which == 47 && evnt.target.value == '/') {
		goForAutotab = false;
		evnt.target.value = replace(evnt.target.value,'/','');
	}
	
	//alert(goForAutotab + ' - ' + MoveAlong)
	if (evnt.target.value && goForAutotab == true && MoveAlong == true) {
		if (evnt.target.value.length==iMax) {
		nextElement = getNextElement(evnt.target);
		  if (nextElement) {
	        nextElement.select();
	        nextElement.focus();
	        }
		  }
		}
    handled = 1;
    return true;
    
}


function getNextElement(iElement) {
var parentForm = iElement.form;

for (i=0; i<parentForm.length; i++) {
  if (parentForm.elements[i]==iElement)
  if (parentForm.elements[i+1])
    return parentForm.elements[i+1];
}
return null;
}

function getPreviousElement(iElement) {
var parentForm = iElement.form;

for (i=0; i<parentForm.length; i++) {
  if (parentForm.elements[i]==iElement)
  if (parentForm.elements[i-1])
    return parentForm.elements[i-1];
}
return null;
}

function autotab(iCtl, iMax) {
var nextElement, textValue = iCtl.value;

	//alert(event.keyCode);
	

	var goForAutotab = false;
	var FirstElement = false;
	var MoveAlong = false;
	for(i=0;i<=MaxTabs;i++) {
		if (iCtl.name.indexOf(TabNames[i]) > -1) {
			iMax = TabLengths[i];
			MoveAlong = TabMoveAlong[i];
			FirstElement = TabFirstElement[i];
				if(TabPartialName[i] == true) {
					FieldName = null;
					FieldName = iCtl.name.substring(0,iCtl.name.indexOf(TabNames[i]));
					if (MoveAlong == true) {
						if (eval('iCtl.form.' + FieldName + TabNextField[i]) != null || MoveAlong == false) {
							actualLength = eval('iCtl.form.' + FieldName + 'DayTab.value.length')
						}
					} else {
						actualLength = eval('iCtl.form.' + FieldName + 'DayTab.value.length')
					}
				} else {
					if (MoveAlong == true) {
						if (eval('iCtl.form.' + TabNextField[i]) != null) {
							actualLength = eval('iCtl.form.' + TabNames[i] + '.value.length')
						}
					} else {
						actualLength = eval('iCtl.form.' + TabNames[i] + '.value.length')
					}
				}
				
				if (actualLength <= iMax) {
					goForAutotab = true;
				}
			}
	}

	if ((event.keyCode == 109 || event.keyCode == 189 || event.keyCode == 32) && goForAutotab == true) {
		goForAutotab = false;
		iCtl.value = replace(iCtl.value,'-','');
		iCtl.value = replace(iCtl.value,' ','');
	}
	if ((event.keyCode == 111 || event.keyCode == 191) && iCtl.value != '/' && MoveAlong == true) {
	  iCtl.value = replace(iCtl.value,'/','');
	  nextElement = getNextElement(iCtl);
	  if (nextElement) {
			nextElement.select();
			nextElement.focus();
	  }
	} 
	if ((event.keyCode == 111 || event.keyCode == 191) && iCtl.value == '/') {
		goForAutotab = false;
		iCtl.value = replace(iCtl.value,'/','');
	}
	if (event.keyCode == 8 && iCtl.value == '' && FirstElement == false) {
	  iCtl.value = replace(iCtl.value,'/','');
	  nextElement = getPreviousElement(iCtl);
	  if (nextElement) {
			nextElement.select();
			nextElement.focus();
			nextElement.caretPos = nextElement.length - 1;
	  }
	  
	} 



	if (iCtl.value.length==iMax && goForAutotab == true && MoveAlong == true) {
	  nextElement = getNextElement(iCtl);

	  if (nextElement) {
			nextElement.select();
			nextElement.focus();
	  }
	}
	handled = 0;
}

