//   by Vlad Pitaru
//
//   --------------------------------------------------------------------------------------------------|
//  | FUNCTION NAME		| HOW TO USE                                                                   |
//  |--------------------------------------------------------------------------------------------------|
//  | Maiuscolo()			| onkeypress="Maiuscolo(event)"	                                              |
//  |--------------------------------------------------------------------------------------------------|
//  | OnlyDouble()		| onkeypress="OnlyDouble(event)"                                               |
//  |--------------------------------------------------------------------------------------------------|
//  | OnlyInteger()		| onkeypress="OnlyInteger(event)"                                              |
//  |--------------------------------------------------------------------------------------------------|
//  | DateFormat()		| onkeypress="AddSlash(event)" onBlur="DateFormat(event)"                      |
//  |--------------------------------------------------------------------------------------------------|
//  | DoubleToString()	| str = DoubleToString(3100.998)  -- 2 decimals (requires NumberFormat154.js)  |
//  |--------------------------------------------------------------------------------------------------|
//  | DoubleToString3()	| str = DoubleToString3(3100.998) -- 3 decimals  (requires NumberFormat154.js) |
//   --------------------------------------------------------------------------------------------------|
//  | DoubleToStringDec()| str = DoubleToStringDec(nr, nrDecimals)        (requires NumberFormat154.js)|
//   ---------------------------------------------------------------------------------------------------


function StopPropagation(e)
{
	if (!(e.stopPropagation == null))
	{
		e.stopPropagation();
		e.preventDefault();
	}
	else
	{
		e.cancelBubble = true;
		e.returnValue = false;
	}
}

function Maiuscolo(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	if ((keyCode >= 97) && (keyCode <= 122))
	{
		ChangeFiredKeyCode(e, String.fromCharCode(keyCode - 32));
	}
	
	if (keyCode == 13)
		StopPropagation(e);
}

function MaiuscoloEnter(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	if ((keyCode >= 97) && (keyCode <= 122))
	{
		ChangeFiredKeyCode(e, String.fromCharCode(keyCode - 32));
	}
}

function ChangeFiredKeyCode(e, newChar)
{
	// cross-browser compatibility
	if (e.which)
	{ 
		var newEvent = document.createEvent("KeyEvents")
		newEvent.initKeyEvent("keypress", true, true, document.defaultView,
							e.ctrlKey, e.altKey, e.shiftKey,
							e.metaKey, 0, newChar.charCodeAt(0))
						
		e.preventDefault()
		e.target.dispatchEvent(newEvent)
    }
    else
    {
		e.keyCode = newChar.charCodeAt(0);
	}
} 

    function FormatDoubleValue(e)
    {
    	if (!e) var e = window.event;
	    var srcElement = (e.target) ? e.target : e.srcElement;
       srcElement.value = DoubleToString(parseFloat(srcElement.value));
    }

function DoubleToString(importo)
{
	// debugger;
	
	var str = "";
	if (importo.toString() != "NaN")
	{
		var num = new NumberFormat();
		num.setInputDecimal('.');
		num.setNumber(importo); 
		num.setPlaces('2', false);
		num.setCurrencyValue('$');
		num.setCurrency(false);
		num.setCurrencyPosition(num.LEFT_OUTSIDE);
		num.setNegativeFormat(num.LEFT_DASH);
		num.setNegativeRed(false);
		num.setSeparators(false, ',', '.');
		str = num.toFormatted();
	}
	
	return str;							
}

function DoubleToString3(importo)
{
	//debugger;
	
	var str = "";
	if (importo.toString() != "NaN")
	{
		var num = new NumberFormat();
		num.setInputDecimal('.');
		num.setNumber(importo); 
		num.setPlaces('3', false);
		num.setCurrencyValue('$');
		num.setCurrency(false);
		num.setCurrencyPosition(num.LEFT_OUTSIDE);
		num.setNegativeFormat(num.LEFT_DASH);
		num.setNegativeRed(false);
		num.setSeparators(false, '.', ',');
		str = num.toFormatted();
	}
		
	return str;				
}

function DoubleToStringDec(importo, nrDecimals)
{
	// debugger;
	
	var str = "";
	if (importo.toString() != "NaN")
	{
		var num = new NumberFormat();
		num.setInputDecimal('.');
		num.setNumber(importo); 
		num.setPlaces(nrDecimals.toString(), false);
		num.setCurrencyValue('$');
		num.setCurrency(false);
		num.setCurrencyPosition(num.LEFT_OUTSIDE);
		num.setNegativeFormat(num.LEFT_DASH);
		num.setNegativeRed(false);
		num.setSeparators(false, ',', '.');
		str = num.toFormatted();
	}
		
	return str;				
}


function OnlyDouble(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	if ((e.shiftKey) || (e.altKey))
	{
		StopPropagation(e);
		return;
	}
	
	if (keyCode == 44)
		ChangeFiredKeyCode(e, ".")
	
	if (keyCode == 45) // minus (-)
	{
		var nr = parseFloat(srcElement.value.replace(".", ","));
		
		if (nr > 0)
		{
			nr = (-1) * nr;
			srcElement.value = nr.toString().replace(",", ".");
		}
		
		StopPropagation(e);
		return;
	}

	if (keyCode == 43) // minus (+)
	{
		var nr = parseFloat(srcElement.value.replace(".", ","));
		
		if (nr < 0)
		{
			nr = (-1) * nr;
			srcElement.value = nr.toString().replace(",", ".");
		}
		
		StopPropagation(e);
		return;
	}
	
	if ((keyCode == 44) || (keyCode == 46))				// , or .
	{
		if (srcElement.value.search("\\.") != -1)
		{
			StopPropagation(e);
		}
		
		return;
	}

	if (!(((keyCode >= 48) && (keyCode <= 57)) ||		// number
		(keyCode == 9) || (keyCode == 8) ||				// backspace, tab
		(keyCode == 35) || (keyCode == 40)))			// home or end
	{
		StopPropagation(e);
	}
}

function OnlyInteger(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	if ((e.shiftKey) || (e.altKey))
	{
		StopPropagation(e);
		return;
	}
	
	if (!(((keyCode >= 48) && (keyCode <= 57)) ||	// number
		(keyCode == 8) || (keyCode == 9) ||			// backspace=8 or tab=9
		(keyCode == 35) || (keyCode == 40)))		// home, end, up, down, left, right
	{
		StopPropagation(e);
	}
}


function OnlyDelete(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	if ((e.shiftKey) || (e.altKey))
	{
		StopPropagation(e);
		return false;
	}
	
	if (keyCode != 46)		// home, end, up, down, left, right
	{
		StopPropagation(e);
		return false;
	}
	return true;
}



function AddSlash(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;

	if (!(((keyCode >= 48) && (keyCode <= 57)) ||    // number
		(keyCode == 9) || (keyCode == 8) ||		  	 // backspace, tab
		(srcElement.value.length >= 10)))		
	{
		StopPropagation(e);
		return;
	}
	
	if ((srcElement.value.length == 2) || (srcElement.value.length == 5))
	{
		srcElement.value = srcElement.value + "/";
	}
}

function AddMinus(e)
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;

	if (!(((keyCode >= 48) && (keyCode <= 57)) ||    // number
		(keyCode == 9) || (keyCode == 8) ||		  	 // backspace, tab
		(srcElement.value.length >= 10)))		
	{
		StopPropagation(e);
		return;
	}
	
	if ((srcElement.value.length == 2) || (srcElement.value.length == 5))
	{
		srcElement.value = srcElement.value + "-";
	}
}

function MyDateFormat(e) 
{
    //debugger;
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	srcElement.value = MyValidateDate(srcElement.value);
	//debugger;
	
}
function MyValidateDate(strDate) 
{

	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intDay;
	var intMonth;
	var intYear;

	if (strDate.length < 1) 
		return "";

	strDateArray = strDate.split("-");

	if (strDateArray.length != 3) 
	{
		return "";
	}
	else
	{
		strDay = strDateArray[0];
		strMonth = strDateArray[1];
		strYear = strDateArray[2];
	}

	if (strYear.length == 1) 
		strYear = "200" + strYear;

	if (strYear.length == 2) 
	{
		if (strYear > "80")
			strYear = "19" + strYear;
		else
			strYear = "20" + strYear;
	}

	if (strYear.length == 3) 
		strYear = "1" + strYear;

	intDay = parseInt(strDay, 10);
	if (isNaN(intDay)) 
		return "";

	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) 
		return "";

	intYear = parseInt(strYear, 10);
	if (isNaN(intYear))
		return "";
		
	if ((intYear < 1800) || (intYear > 2200))
		return "";

	if (intMonth>12 || intMonth<1) 
		return "";

	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31 || intDay < 1)) 
		return "";

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30 || intDay < 1)) 
		return "";

	if (intMonth == 2) 
	{
		if (intDay < 1) 
			return "";
	
		if (LeapYear(intYear) == true) 
		{
			if (intDay > 29) 
				return "";
		}
		else 
		{
			if (intDay > 28) 
				return "";
		}
	}
	
	if (strDay.length == 1) strDay = "0" + strDay;
	if (strMonth.length == 1) strMonth = "0" + strMonth;
	
	return strDay + "-" + strMonth + "-" + strYear;
}

function DateFormat(e) 
{
	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	
	srcElement.value = MyValidateDate(srcElement.value);
}

function ValidateDate(strDate) 
{

	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intDay;
	var intMonth;
	var intYear;

	if (strDate.length < 1) 
		return "";

	strDateArray = strDate.split("/");

	if (strDateArray.length != 3) 
	{
		return "";
	}
	else
	{
		strDay = strDateArray[0];
		strMonth = strDateArray[1];
		strYear = strDateArray[2];
	}

	if (strYear.length == 1) 
		strYear = "200" + strYear;

	if (strYear.length == 2) 
	{
		if (strYear > "80")
			strYear = "19" + strYear;
		else
			strYear = "20" + strYear;
	}

	if (strYear.length == 3) 
		strYear = "1" + strYear;

	intDay = parseInt(strDay, 10);
	if (isNaN(intDay)) 
		return "";

	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) 
		return "";

	intYear = parseInt(strYear, 10);
	if (isNaN(intYear))
		return "";
		
	if ((intYear < 1800) || (intYear > 2200))
		return "";

	if (intMonth>12 || intMonth<1) 
		return "";

	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31 || intDay < 1)) 
		return "";

	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30 || intDay < 1)) 
		return "";

	if (intMonth == 2) 
	{
		if (intDay < 1) 
			return "";
	
		if (LeapYear(intYear) == true) 
		{
			if (intDay > 29) 
				return "";
		}
		else 
		{
			if (intDay > 28) 
				return "";
		}
	}
	
	if (strDay.length == 1) strDay = "0" + strDay;
	if (strMonth.length == 1) strMonth = "0" + strMonth;
	
	return strDay + "/" + strMonth + "/" + strYear;
}

function LeapYear(intYear) 
{
	if (intYear % 100 == 0) 
	{
		if (intYear % 400 == 0) 
			return true;
	}
	else 
	{
		if ((intYear % 4) == 0) 
			return true;
	}
	
	return false;
}

function OnlyLetters(e)
{

	// cross-browser compatibility
	if (!e) var e = window.event;
	var srcElement = (e.target) ? e.target : e.srcElement;
	var keyCode = (e.which) ? e.which : e.keyCode;
	//debugger;
	if (((keyCode >= 97) && (keyCode <= 122)) || ((keyCode >= 65) && (keyCode <= 90)) || (keyCode==45) || (keyCode==32) || keyCode==8)
	{}
	else{
		StopPropagation(e);
	}

}
