var isIE = document.all?true:false;

function getTarget(e) {
	// IE5
	if (e.srcElement) {
		return e.srcElement;
	}
	
	// NC5
	if (e.target) {
		return e.target;
	}	
}

function getKeyCode(e) {
	//IE5
	if (e.srcElement) {
 		return e.keyCode
	}
	
	// NC5
	if (e.target) {
		return e.which
	}
}
 
function numericMask(event) {
	// IE only version var KeyTyped = String.fromCharCode(window.event.keyCode);
	// ** IE only var srcObject = window.event.srcElement;
	var sMask = "-0123456789.";
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	var targ = getTarget(event);
	
	keyCount = targ.value.length;

	if (getKeyCode(event) < 15) /* del, backspace and other movement characters are okay */ 
	{
		return true;		
	} 
	else if (sMask.indexOf(KeyTyped.toString()) == -1) 
	{
		return false;
	} 
	else if (KeyTyped.toString() == '.') 
	{
		if (targ.value.indexOf('.') != -1) 
		{
			return false
		}
	}
	return true;
}

function formatToMask(event, sMask) {
	var targ = getTarget(event);
	var sTemp = targ.value;
	
	if (sTemp.length > 0) {	
		var l = sMask.length;
		var index = sMask.indexOf(".");
		var decimalPlaces = (l - index) - 1;
		
		sTemp = getDecimalString(sTemp, decimalPlaces, index, sMask);
		
		targ.value = sTemp;
	}
	
	return true;
}

function getDecimalString(sTemp, decimalPlaces, index, sMask) {	
	var tempIndex = sTemp.indexOf(".");
	
	if (tempIndex == -1) {
		sTemp += sMask.substring(index, sMask.length);
	} else {
		var tempDecimal = (sTemp.length - tempIndex) - 1;
		if (tempDecimal > decimalPlaces) {
			var flt = Math.round(sTemp * Math.pow(10,decimalPlaces)) / Math.pow(10,decimalPlaces);
			sTemp = flt.toString();
			sTemp = getDecimalString(sTemp, decimalPlaces, index, sMask);
		} else if (tempDecimal < decimalPlaces) {
			var incr = decimalPlaces - tempDecimal;
			for(i=0; i<incr; i++) {
				sTemp += "0";
			}
		}
	}
	
	return sTemp;
}
 
function integerMask(event)
{
	// IE only version var KeyTyped = String.fromCharCode(window.event.keyCode);
	// ** IE only var srcObject = window.event.srcElement;
	var sMask = "0123456789";
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	var targ = getTarget(event);
	
	keyCount = targ.value.length;

	if (getKeyCode(event) < 15) /* del, backspace and other movement characters are okay */ {
		return true;		
	} else if (sMask.indexOf(KeyTyped.toString()) == -1) {
		return false;
	}
	return true;
}

function dateMask(event, sMask)
{
	var KeyTyped = String.fromCharCode(getKeyCode(event));
	var targ = getTarget(event);
	var targValue;
	var nPosition = 0;
	
	keyCount = targ.value.length;

	if (document.getSelection) {
		var str = document.getSelection();
	} else if (document.selection && document.selection.createRange) {
		var range = document.selection.createRange();
		var str = range.text;
	} else {
		var str = "Sorry, this is not possible with your browser.";
	}
	
	if(str.length > 0)
	{
		nPosition = targ.value.indexOf(str);
		if(nPosition >=0)
		{
			targValue = targ.value;
			targ.value = targValue.substring(0,nPosition) + targValue.substring(nPosition + str.length, targValue.length);
			if (targ.createTextRange) {
				var rng = targ.createTextRange();
				rng.move("Character",nPosition)
				rng.select();
			}
			keyCount = targ.value.length;
		}
	}
	
	if (sMask.charAt(keyCount) == '*') {
 	   	return true;
	}
	if (sMask.charAt(keyCount) == KeyTyped) {
		return true;
	}
	if (sMask.charAt(keyCount) == '/' && KeyTyped != '/') {
		targ.value += '/';
		return true;
	}
	if ((sMask.charAt(keyCount) == '#') && isNumeric(KeyTyped)) {
	   return true; 
	}	
	if ((sMask.charAt(keyCount) == 'A') && isAlpha(KeyTyped)) {
         return true; 
    }
    if ((sMask.charAt(keyCount) == '?') && isPunct(KeyTyped)) {
         return true;
    }        
    if (sMask.length >= keyCount) {
		if ((sMask.charAt(keyCount) != '/') && (KeyTyped == '/') && (sMask.charAt(keyCount+1) == '/')) {
			targValue = targ.value.substring(0,targ.value.length);
			targ.value = targValue.substring(0,targValue.length-1) + '0' + targValue.substring(targValue.length-1,targValue.length);
			return true;
		}
		if(sMask.charAt(keyCount+1) == '/') {
			var targValue = targ.value;
			targ.value = targValue + '/';
		}
    }
    if (KeyTyped.charCodeAt(0) < 32) return true;
    
    return false;
}

 function isNumeric(c)
{
	var sNumbers = "01234567890";
	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 checkMaxLength(event, maxLength)
{
	var targ = getTarget(event);
	keyCount = targ.value.length;
	if (keyCount >= maxLength) {
		return false;
	}
	return true;
}

function cutToMaxLength(event, maxLength)
{
	event.returnValue = false;	
	var sString = window.clipboardData.getData("Text");
	var targ = getTarget(event);	
	
	sString = targ.value + sString;
	keyCount = sString.length;
	
	if (keyCount >= maxLength) {
		sString = sString.substring(0,maxLength);
		targ.value = sString;
	}
	else {
		targ.value = sString;
	}
}

function lettersToUpperCase (keyCode, key) {
	var newKey = key.toUpperCase();
	  
	if (newKey != key) {
		return { replaceKey: true, newKeyCode: newKey.charCodeAt(), newKey: newKey };
	}
	else {
		return { cancelKey: false };
	}
}

function changeKey (textControl, evt, keyChecker) {
	var keyCode = evt.keyCode ? evt.keyCode : evt.charCode ? evt.charCode : evt.which ? evt.which : void 0;
	var key;
	  
	if (keyCode) {
		key = String.fromCharCode(keyCode);
	}
	  
	var keyCheck = keyChecker(keyCode, key);
	  
	if (keyCode && window.event && !window.opera) {
		if (keyCheck.cancelKey) {
			return false;
		}
		else if (keyCheck.replaceKey) {
			window.event.keyCode = keyCheck.newKeyCode;
			if (window.event.preventDefault) {
				window.event.preventDefault();
			}
			return true;
		}
		else {
			return true;
		}
	}
	else if (typeof textControl.setSelectionRange != 'undefined') {
		if (keyCheck.cancelKey) {
			if (evt.preventDefault) {
				evt.preventDefault();
			}
			return false;
		}
		else if (keyCheck.replaceKey) {
			// cancel the key event and insert the newKey for the current selection
			if (evt.preventDefault) {
				evt.preventDefault();
			}
			
			var oldSelectionStart = textControl.selectionStart;
			var oldSelectionEnd = textControl.selectionEnd;
			var selectedText = textControl.value.substring(oldSelectionStart, oldSelectionEnd);
			var newText = typeof keyCheck.newKey != 'undefined' ? keyCheck.newKey : String.fromCharCode(keyCheck.newKeyCode);
			textControl.value = textControl.value.substring(0, oldSelectionStart) + newText + textControl.value.substring(oldSelectionEnd);
			textControl.setSelectionRange(oldSelectionStart + newText.length, oldSelectionStart + newText.length);
			
			return false;
		}
		else {
			return true;
		} 
	}
	else if (keyCheck.cancelKey) {
		if (evt.preventDefault) {
			evt.preventDefault();
		}
		return false;
	}
	else {
		return true;
	}
}

