//regular expressions
var reKeyboardChars = /[\x00\x03\x08\x0D\x16\x18\x1A]/;

var reNumValidChars = /\d/;
var reNumValidString = /^\d*$/;

var reAlphaValidChars = /\w/;
var reAlphaValidString = /^\w*$/;

var reDateValidString = /^(\d{2})\/(\d{2})\/(\d{4})$/;

//--------------------------------------

function isValid(strValue,reValidString) 
{
	return reValidString.test(strValue) || strValue.length == 0;			
}

function maskKeyPress(objEvent,reValidString,reValidChars) 
{
	var objInput = objEvent.srcElement;
	var iKeyCode = objEvent.keyCode;
	var strKey = String.fromCharCode(iKeyCode);

	if (isValid(objInput.value,reValidString)) {
		objInput.validValue = objInput.value;
		if (!reValidChars.test(strKey) && !reKeyboardChars.test(strKey)) {
			return false;
		}
	} 
	else {
		return false;
	}
}

function maskChange(objEvent,reValidString) 
{
	var objInput = objEvent.srcElement; 

	if (!isValid(objInput.value,reValidString)) {
		objInput.value = objInput.validValue || "";
		objInput.focus();
		objInput.select(); 
	} 
	else {
		objInput.validValue = objInput.value;
	}
}

function maskPaste(objEvent,reValidString) 
{
	var objInput = objEvent.srcElement;
	var strPasteData = clipboardData.getData("Text");

	if (!isValid(strPasteData,reValidString)) {
		objInput.focus();
		return false;
	}
}


function handleDateEntry(objEvent)
{
	var objInput = objEvent.srcElement;
	var iKeyCode = objEvent.keyCode;
	var strKey = String.fromCharCode(iKeyCode);
	
	if (!reNumValidChars.test(strKey) && !reKeyboardChars.test(strKey)) {
		return false;
	}
}

function formatDateEntry(objEvent)
{
	var objInput = objEvent.srcElement;

	if (objInput.value.length == 2) objInput.value += "/";
	if (objInput.value.length == 5 && objInput.value.indexOf("/")==2) objInput.value += "/";
}

function formatSimpleDate(val)
{
	var ans = val;
	if (val.length==8) ans = val.substring(0,2) + "/" + val.substring(2,4) + "/" + val.substring(4);
	return ans;
}

function cleanSimpleDate(val)
{
	return val.replace(/\//g,'');
}

//--------------------------------------
function handleNumericEntry(objEvent)
{
	var iKeyCode = objEvent.keyCode;
	var strKey = String.fromCharCode(iKeyCode);


	if (!reNumValidChars.test(strKey) && !reKeyboardChars.test(strKey)) {
		return false;
	}
}

function handleDecimalEntry(objEvent)
{
	var objInput = objEvent.srcElement;
	var iKeyCode = objEvent.keyCode;
	var strKey = String.fromCharCode(iKeyCode);

	if ((strKey=="." || strKey==",") && objInput.value.indexOf(".")==-1){ 
        if(strKey==","){
          objEvent.keyCode = 46;
        }
		return true;
    }

	if (!reNumValidChars.test(strKey) && !reKeyboardChars.test(strKey)) {
		return false;
	}
}

function formatNumber(numStr,digitCount,decimalCount,useComma) 
{
	if (digitCount==null) digitCount = 0;
	if (decimalCount==null) decimalCount = 0;
	numStr = numStr.toString();
//	numStr = numStr.replace(/\./g,'').replace(/\,/g,'.');
	numStr = numStr.replace(/,/g,'');
	while (numStr.length>0 && numStr.substring(0,1)=="0") numStr = numStr.substring(1,numStr.length);
	if (numStr.length==0 || numStr.substring(0,1)==".") numStr = "0" + numStr;

	var quotStr = numStr;
	var remStr = "0";
	if (numStr.indexOf(".")!=-1) {
		quotStr = numStr.substring(0,numStr.indexOf("."));
		remStr = numStr.substring(numStr.indexOf(".")+1);
		if (remStr.length>decimalCount) remStr = remStr.substring(0,decimalCount);
	}
	while (remStr.length<decimalCount) remStr += "0";

	if (digitCount!=0 && quotStr.length>digitCount) quotStr = quotStr.substring(0,digitCount);
	
	var hasComma=true;
	if(typeof(useComma)!="undefined")
	 hasComma = useComma;
		
	if(hasComma){
		var sepCount = Math.floor((quotStr.length-1)/3);
		for (var i=0; i<sepCount; i++)
			quotStr = quotStr.substring(0,quotStr.length-(4*i+3)) + "," + quotStr.substring(quotStr.length-(4*i+3));
	}

	var newNum = quotStr;
	if (decimalCount!=0) newNum += "." + remStr;
	return newNum;
}

function cleanNumber(numStr,decimal)
{
	numStr = numStr.toString();
	if (decimal==null) decimal = false;
	numStr = numStr.replace(/,/g,'');
	return numStr;
}


