/*
	Key Handler Functions
	
	best if used as follows:
	onkeydown="return(tabOnEnter(this, event));"
	
	Provides intercept of Enter and Up and Down keys for form fields.
	
	TabArray is an optional array with the tabindexes for all the fields to loop through.
*/


var TabArray;
function getNextElement(field) {
  var fieldFound = false;
  var form = field.form;
  if(isArray(TabArray) && field.tabIndex != "")
  {
  	var found = false;
  	for(var i=0; i < TabArray.length; i++)
  	{
  		if(TabArray[i] == field.tabIndex)
  		{
  			found = TabArray[i+1];
  			break;
  		}
  	}
	  for (var e = 0; e < form.elements.length; e++) {
	  	if(form.elements[e].tabIndex == found)
	  	{
	  		return(form.elements[e]);
	  	}
	  }

  }
	else
	{
	  for (var e = 0; e < form.elements.length; e++) {
	    if (fieldFound && form.elements[e].type != 'hidden')
	      break;
	    if (field == form.elements[e])
	      fieldFound = true;
	  }
	  return form.elements[e % form.elements.length];
	}
}
function getPrevElement(field) {
  var fieldFound = false;
  var form = field.form;
  if(isArray(TabArray) && field.tabIndex != "")
  {
  	var found = false;
  	for(var i=0; i < TabArray.length; i++)
  	{
  		if(TabArray[i] == field.tabIndex)
  		{
  			found = TabArray[i-1];
  			break;
  		}
  	}
	  for (var e = 0; e < form.elements.length; e++) {
	  	if(form.elements[e].tabIndex == found)
	  	{
	  		return(form.elements[e]);
	  	}
	  }

  }
	else
	{
	  for (var e = 0; e < form.elements.length; e++) {
	    if (fieldFound && form.elements[e].type != 'hidden')
	      break;
	    if (field == form.elements[e])
	      fieldFound = true;
	  }
	  return form.elements[e % form.elements.length - 1];
	}
}
function tabOnEnter (field, evt) {
  var keyCode = document.layers ? evt.which : document.all ? 
evt.keyCode : evt.keyCode;
	var elem;
	switch(keyCode)
	{
	default:
    return true;
    break;
  case 13:
  case 40:
   	elem = field
  	while(true)
  	{
    	elem = getNextElement(elem)
    	if(elem)
    	{
    		if(elem.focus || elem.select)
    		{
    			if(elem.clientWidth != 0 || elem.clientHeight != 0)
	    			break;
    		}
    	}
    	else
    		break;
    	
    }
    if(elem)
    {
			if(elem.focus)
	    	elem.focus();
	    if(elem.select)
		    elem.select();
  	}
    return false;
    break;
	case 38:
   	elem = field
  	while(true)
  	{
    	elem = getPrevElement(elem)
    	if(elem)
    	{
    		if(elem.focus || elem.select)
    		{
    			if(elem.clientWidth != 0 || elem.clientHeight != 0)
	    			break;
    		}
    	}
    	else
    		break;
    	
    }
    if(elem)
    {
			if(elem.focus)
	    	elem.focus();
	    if(elem.select)
		    elem.select();
  	}
    return false;
    break;
  }
}