function initEditNumber(field, possibleValues, maxNumbers, precision, controlled, signed, initialValue, obligatory)
{
var formName = field.form.name;
var fieldName = field.name;
field.fieldType = NUMERICAL;
field.obligatory = obligatory;
field.thousandSeparator = thousandSeparator;
//field.thousandSeparator = myThousandSeparator;
field.decimalSeparator = decimalSeparator;
field.precision = precision;
field.maxNumbers = maxNumbers;
field.controlled = controlled;
field.signed = signed;
setPossibleValues(field, possibleValues);
if (initialValue != null && initialValue != "")
{
field.value = replaceChar(formatInitialEditNumber(field, initialValue), ".", field.decimalSeparator);
}
field.onfocus = new Function("beginEditNumber('" + fieldName +  "','" + formName + "')");
field.onblur = new Function("relayOnBlur('" + fieldName +  "','" + formName + "')");
field.onchange = new Function("relayOnBlur('" + fieldName +  "','" + formName + "')");
//field.onblur = new Function("commitEditNumber('" + fieldName +  "','" + formName + "')");
}
function beginEditNumber(fieldName, formName)
{
var field = document.forms[formName].elements[fieldName];
var msg = "";
var helpMessage = "";
if (formError == "" || formError == fieldName)
{
helpMessage = createHelpValueList(field);
if (helpMessage != null && helpMessage != "")
{
if (field.error == true)
{
msg = messageFormat(field.errorMsg, field.value, helpMessage);
}
else
{
field.helpMsg = numericalFormat;
msg = messageFormat(field.helpMsg, helpMessage);
}
}
showMessage(field, msg);
field.select();
if (field.signed == true)
field.onkeypress = isSignedNumKeyPress;
else
field.onkeypress = isUnsignedNumKeyPress;
}
}
function commitEditNumber(fieldName, formName)
{
var field = document.forms[formName].elements[fieldName];
if (field.value != ""  && (formError == "" || formError == fieldName))
{
if (field.value == decimalSeparator || field.value == ".")
{
field.value = "";
}
else
{
field.value = formatCapturedEditNumber(field, field.value);
validateEditNumber(field, field.value);
}
}
else
{
formError = "";
field.error = false;
}
}
function validateEditNumber(field, number)
{
if (number != "")
{
if (field.controlled == true)
{
if (!isValueWithinRange(field, number))
{
field.error = true;
field.errorMsg = invalideNumerical;
formError = field.name;
field.focus();
return false;
}
else
{
field.error = false;
formError = "";
return true;
}
}
}
return true;
}
function isValueWithinRange(field, number)
{
var count = 0;
var lowerLimit = "";
var higherLimit = "";
number = replaceChar(number, field.decimalSeparator, ".");
//number = deleteChar(number, thousandSeparator);
while (count < field.rangeList.length)
{
lowerLimit = deleteChar(field.rangeList[count][0], thousandSeparator);
higherLimit = deleteChar(field.rangeList[count][1], thousandSeparator);
if ((parseFloat(number) >= parseFloat(lowerLimit)) && (parseFloat(number) <= parseFloat(higherLimit)))
{
return true;
}
count++;
}
count = 0;
while (count < field.valueList.length)
{
if (parseFloat(number) == parseFloat(deleteChar(field.valueList[count], thousandSeparator)))
{
return true;
}
count++;
}
return false;
}
function setPossibleValues(field, possibleValues)
{
var aPossibleValues = null;
var length = 0;
var helpMessage = "";
var i = 0;
var j = 0;
var k = 0;
field.valueList = new Array();
field.rangeList = new Array();
if (possibleValues == null || possibleValues == "")
{
return;
}
aPossibleValues  = possibleValues.split(",");
length = aPossibleValues.length;
for (i=0; i<length; i++)
{
if (aPossibleValues[i].search(":") >= 0)
{
field.rangeList[j] = aPossibleValues[i].split(":");
field.rangeList[j][0] = formatInitialEditNumber(field, field.rangeList[j][0]);
field.rangeList[j][1] = formatInitialEditNumber(field, field.rangeList[j][1]);
j++;
}
else
{
field.valueList[k] = formatInitialEditNumber(field, aPossibleValues[i]);
k++;
}
}
}
function formatInitialEditNumber(field, number)
{
var formatedNumber = "";
var intergerPart = "";
var decimalPart = "";
var deci = "";
var deciLength = 0;
var i = 0;
number = deleteChar(number, "+");
if (field.precision > 0)
{
integerPart = number.substr(0, number.length - field.precision);
if (number.length < field.precision)
{
deciLength = number.length;
for (i=deciLength; i<field.precision; i++)
deci += "0";
decimalPart = number;
}
else
{
decimalPart = number.substr(number.length - field.precision, field.precision);
}
formatedNumber = integerPart + "." + deci + decimalPart;
//formatedNumber = addThousandSeparator(field, formatedNumber);
formatedNumber = formatedNumber + "." + deci + decimalPart;
}
else
{
//formatedNumber = addThousandSeparator(field, number);
}
if (parseFloat(number) < 0 && field.signed == true)
{

formatedNumber = "-" + formatedNumber;
}
return formatedNumber;
}
function formatCapturedEditNumber(field, number)
{
var i = 0;
var deci = "";
var deciLength = 0;
var tempFormatedNumber = "";
var formatedNumber = replaceChar(number, field.decimalSeparator, ".");
if (String(number).indexOf("-") > 0)
{
formatedNumber = deleteChar(formatedNumber, "-");
}
//formatedNumber = deleteChar(formatedNumber, thousandSeparator);
tempFormatedNumber = formatedNumber;
//formatedNumber = addThousandSeparator(field, formatedNumber);
if (field.precision >= 0)
{
if (tempFormatedNumber.indexOf(".") != -1)
{
deci = tempFormatedNumber.substr(tempFormatedNumber.indexOf(".") + 1, String(tempFormatedNumber).length);
deciLength = deci.length;
//Correctif ELB Prendre seulement la partie entière
formatedNumber = tempFormatedNumber.substr(0, tempFormatedNumber.indexOf("."));
}
if (deciLength > 0)
{
if (deciLength < field.precision)
{
for (i=deciLength; i<field.precision; i++)
deci += "0";
}
else
{
if (deciLength > field.precision)
deci = String(deci).substr(0, field.precision);
}
}
else
{
deci = "";
for (i=0; i<field.precision; i++)
deci += "0";
}
//Correctif ELB
if (field.precision == 0)
{
        formatedNumber = formatedNumber;
}
else
{
        formatedNumber = formatedNumber + field.decimalSeparator + deci; //.substring(0);
        //formatedNumber = partieEntiere + field.decimalSeparator + deci;
}

}
if (parseFloat(number) < 0 && field.signed == true)
{
//Correctif ELB
//formatedNumber = "-" + formatedNumber;
}
formatedNumber = replaceChar(formatedNumber, ".", field.decimalSeparator);
return formatedNumber;
}
function addThousandSeparator(field, number)
{
//var deci = Math.round(Math.pow(10, field.precision) * (parseFloat(number) - Math.floor(parseFloat(number))));
//var num = Math.floor(Math.abs(parseFloat(number)));
//var formatedNumber = "";
//var nb = 0;
//var i = 0;
//var nbThousandSeparator = 0;
//if ((field.precision == 0) || (deci == Math.pow(10, field.precision)))
//{
//num = Math.abs(Math.round(number));
//deci = 0;
//}
//formatedNumber = num + "";
//nb = formatedNumber.length;
//nbThousandSeparator = Math.round(number.length - field.precision);
//for (i=1; i<nbThousandSeparator; i++)
//{
//if (num >= Math.pow(10, (3*i)))
//{
//formatedNumber = formatedNumber.substring(0, nb - (3*i)) + field.thousandSeparator + formatedNumber.substring(nb - (3*i));
//}
//}
//return formatedNumber;
return number
}
function createHelpValueList(field)
{
var i = 0;
var helpMessage = "";
for (i=0; i<field.valueList.length; i++)
{
helpMessage = helpMessage.concat(" | " + replaceChar(field.valueList[i], ".", field.decimalSeparator));
}
for (i=0; i<field.rangeList.length; i++)
{
helpMessage = helpMessage.concat(" | " + replaceChar(field.rangeList[i][0], ".", field.decimalSeparator)
+ " < " + replaceChar(field.rangeList[i][1], ".", field.decimalSeparator));
}
if (helpMessage != "")
helpMessage = helpMessage.substring(3);
return helpMessage;
}
function unformatEditNumber(field, number)
{
var i = 0;
var formatedNumber = "";
var zero = "";
formatedNumber = deleteChar(number, thousandSeparator);
formatedNumber = deleteChar(formatedNumber, decimalSeparator);
if (parseFloat(number) < 0)
formatedNumber = deleteChar(formatedNumber, "-");
for (i=formatedNumber.length; i<field.maxNumbers; i++)
zero += "0";
formatedNumber = zero + formatedNumber;
if (parseFloat(number) < 0)
formatedNumber = "-" + formatedNumber;
return formatedNumber;
}
function isSignedFloat(c)
{
//alert('reg1');
var reg = new RegExp("[0-9]|[\\.\\" + decimalSeparator + "\\-\\b]");
return (c.match(reg));
}
function isUnsignedFloat(c)
{
//alert('reg2');
var reg = new RegExp("[0-9]|[\\.\\" + decimalSeparator + "\\b]");
return (c.match(reg));
}
function isSignedNumKeyPress(e)
{
var keyChar = getChar(e);
if (!isSignedFloat(keyChar))
{
return false;
}
else if ((keyChar == decimalSeparator || keyChar == ".") &&
(this.value.search("\\" + decimalSeparator) != -1 || this.value.search("\\.") != -1))
{
return false;
}
else if (keyChar == "-" && this.value.search("\\-") != -1)
{
return false;
}
return true;
}
function isUnsignedNumKeyPress(e)
{
var keyChar = getChar(e);
if (!isUnsignedFloat(keyChar))
{
return false;
}
else if ((keyChar == decimalSeparator || keyChar == ".") &&
(this.value.search("\\" + decimalSeparator) != -1 || this.value.search("\\.") != -1))
{
return false;
}
return true;
}
function showDisabledNumber(number, precision)
{
var formatedNumber = "";
var field = new Object;
field.fieldType = NUMERICAL;
field.thousandSeparator = thousandSeparator;
field.decimalSeparator = decimalSeparator;
field.precision = precision;
field.signed = true;
formatedNumber = replaceChar(formatInitialEditNumber(field, number), ".", field.decimalSeparator);
document.write(formatedNumber);
return formatedNumber;
}

