/*
	GetKeyPressed
	returns the last key code pressed 
*/
function __GetKeyCode(evt)
{
	return __GetEvent(evt).keyCode;
}

function OnEnterIgnore(evt)
{
    var pEvent = __GetEvent(evt);
	if ((pEvent.which && pEvent.which == 13) || (pEvent.keyCode && pEvent.keyCode == 13))
	{
	    event.keyCode = null;
		return false;
	}
	else
	{
		return true;
	}
}

/*
	OnEnterDoButtonClick
	When an enter key is pressed, fire the click event of a specified button
*/
function OnEnterDoButtonClick(btn, evt)
{
    var pEvent = __GetEvent(evt);
	var pButton = null;
	if (btn != null)
	{
		pButton = __GetObject(btn);
	}
	
    if (document.all)
    {
        if (pEvent.keyCode == 13)
        {
            pEvent.returnValue = false;
			pEvent.cancel = true;
			if (pButton != null)
			{
				pButton.click();
			}
		}
	}
}

/*
	OnKeyNumericOnly
	Allow only 0-9 to be entered in the control
*/
function OnKeyNumericOnly(pItem, bAllowDecimal, evt)
{
	var pControl = __GetObject(pItem);
	var keyCode = __GetKeyCode(evt);
	if (keyCode == 46)
	{
		if (bAllowDecimal == true)
		{
			if (pControl.value.indexOf(".") != -1)
			{
			    event.keyCode = null;
				return false;
			}
		}
		else
		{
		    event.keyCode = null;
			return false;
		}
	}

	if ( (keyCode==8)  //backspace
		|| (keyCode==0)  //tab
		|| (keyCode==13)) //return key
	{
		return true;
	}
	if ((keyCode < 48 || keyCode > 57) && (keyCode != 46))
	{
		// Allow only integers and decimals if set
		event.keyCode = null;
		return false;
	}
	return true;
}

/*
	OnKeyNumericOnlyOnEnterDoButtonClick
	Allow only 0-9 to be entered in the control and trap the enter key
*/

function OnKeyNumericOnlyOnEnterDoButtonClick(pControl, bAllowDecimal, pBtn, evt)
{ 
	return (__GetKeyCode(evt) != 13 && 
	        OnKeyNumericOnly(pControl, bAllowDecimal,evt)) ||
	       (__GetKeyCode(evt) == 13 && 
	        OnEnterDoButtonClick(pBtn,evt));
}

/*
	OnKeyMaxLength
	Suppress characters after a certain length has been entered in the specified control
*/
function OnKeyMaxLength(pItem, iMax, evt)
{
	var pControl = __GetObject(pItem);
	var keyCode = __GetKeyCode(evt);
	
	if ( (keyCode==8)  //backspace
		|| (keyCode==0)  //tab
		|| (keyCode==13)) //return key
	{
		return true;
	}
	if (pControl.value.length >= iMax)
	{
	    event.keyCode = null;
		return false;
	}
	return true;
}

/*
	OnKeyConvertUpperCase
	Change any lowercase characters to uppercase	
*/
function OnKeyConvertUpperCase(pItem, evt)
{
	var pControl = __GetObject(pItem);
	var keyCode = __GetKeyCode(evt);
	if ( (keyCode==8)  //backspace
		|| (keyCode==0)  //tab
		|| (keyCode==32)  //space
		|| (keyCode==13)) //return key
	{
		return true;
	}
	if ((keyCode >= 48) && (keyCode <= 57))
	{
		return true;
	}
	if ((keyCode >= 65) && (keyCode <= 90))
	{
		return true;
	}
	if ((keyCode >= 97) && (keyCode <= 122))
	{
		event.keyCode = keyCode - 32;
		return true;
	}
	event.keyCode = null;
	return false;
}

/*
	OnKeyConvertUpperCase
	Change any lowercase characters to uppercase and trap the enter key
*/
function OnKeyConvertUpperCaseOnEnterDoButtonClick(pControl, pBtn, evt)
{ 
	return (__GetKeyCode(evt) != 13 && 
	        OnKeyConvertUpperCase(pControl,evt)) ||
	       (__GetKeyCode(evt) == 13 && 
	        OnEnterDoButtonClick(pBtn,evt));
}

/*
	OnKeyConvertLowerCase
	Change any uppercase characters to lowercase	
*/
function OnKeyConvertLowerCase(pItem, evt)
{
	var pControl = __GetObject(pItem);
	var keyCode = __GetKeyCode(evt);
	if ( (keyCode==8)  //backspace
		|| (keyCode==0)  //tab
		|| (keyCode==32)  //space
		|| (keyCode==13)) //return key
	{
		return true;
	}
	if ((keyCode >= 48) && (keyCode <= 57))
	{
		return true;
	}
	if ((keyCode >= 97) && (keyCode <= 122))
	{
		return true;
	}
	if ((keyCode >= 65) && (keyCode <= 90))
	{
		event.keyCode = keyCode + 32;
		return true;
	}
	event.keyCode = null;
	return false;
}

/*
	OnKeyConvertLowerCase
	Change any uppercase characters to lowercase and trap the enter key
*/
function OnKeyConvertLowerCaseOnEnterDoButtonClick(pControl, pBtn, evt)
{ 
	return (__GetKeyCode(evt) != 13 && 
	        OnKeyConvertLowerCase(pControl,evt)) ||
	       (__GetKeyCode(evt) == 13 && 
	        OnEnterDoButtonClick(pBtn,evt));
}


/*
	GotoNextControlFocusControl
	When enter is pressed, focus will move to a specific control
*/	
function GotoNextControlFocusControl(nextcontrol, evt)
{
	var pControl = __GetObject(nextcontrol);
    if (pControl)
    {
	    var keyCode = __GetKeyCode(evt);
        if (keyCode == 13)
        {
            pControl.focus();
            keyCode = null;
            //return false;
        }
    }
    return true;
}

function OnKeySortDropDown(pDropDown, caseSensitive,evt)
{
	var pControl = __GetObject(pDropDown);
	// check the keypressBuffer attribute is defined on the dropdownlist
	var undefined;
	if (pControl.keypressBuffer == undefined)
	{
		pControl.keypressBuffer = '';
	}

	var keyCode = __GetKeyCode(evt);
	// get the key that was pressed
	var key = String.fromCharCode(keyCode);
	pControl.keypressBuffer += key;
	if (!caseSensitive)
	{
		// convert buffer to lowercase
		pControl.keypressBuffer = pControl.keypressBuffer.toLowerCase();
	}

	// find if it is the start of any of the options
	var optionsLength = pControl.options.length;
	for (var n=0; n < optionsLength; n++)
	{
		var optionText = pControl.options[n].text;
		if (!caseSensitive)
		{
			optionText = optionText.toLowerCase();
		}
		if (optionText.indexOf(pControl.keypressBuffer,0) == 0)
		{
			pControl.selectedIndex = n;
			return false; // cancel the default behavior since
						// we have selected our own value
		}
	}
	// reset initial key to be inline with default behavior
	pControl.keypressBuffer = key;
	return true; // give default behavior
}