//************************************************************
//* JavaLib.js
//* ----------
//* Librairie de fonctions javascript utilisées dans
//* l'ensemble de l'application.
//*
//* Dernieres modifications :
//*   - 24/03/2005 / RD
//*       + Creation de la librairie
//*
//* Copyright - Ewapps S.A. - 2003
//************************************************************

// Fonction remplacant les éventuelles "," dans un string par
// des "." afin d'éviter les problèmes de "localization".
function removeDash(elem) {
    var re = /,/g;
    if (elem.value.match(re)) {
        elem.value = elem.value.replace(re,".");
    }
}

function removeDot(elem) {
    var re = /\./g;
    if (elem.value.match(re)) {
        elem.value = elem.value.replace(re,",");
    }
}

// Fonction supprimant tout ce qui n'est pas un chiffre dans un textbox
function limitToNumbers(inputName) {
    var strInput = inputName.value;
    var strOnlyNumbers = "";
    var currentChar;

    for (i = 0; i < strInput.length; i++) {
        currentChar = strInput.charAt(i);
        //allow only digits 
        var regex = /^\d$/;
        if (regex.test(currentChar)) {
            strOnlyNumbers += currentChar;
        }
    }
    inputName.value = strOnlyNumbers;
}

// Fonction déterminant si la valeur de l'objet "elem" passe
// en parametre est un nombre ou pas.
function isNumber(elem) {
    var str = elem.value;
    var re = /^[+-]?\d*\.?\d*$/;
    
    if (str != "") {
        removeDash(elem);
        str = str.toString( );
        if (!str.match(re)) {
            return false;
        }
        return true;
    }
    else {
        return false;
    }
}

function limitMulti(objTextBox, maxLength, labelName) {
    var strLen = objTextBox.value.length;
    var objName = labelName;
    var biasSize = 0;
    
    while (strLen > maxLength) {
        objTextBox.value = objTextBox.value.substring (0, maxLength - biasSize);
        strLen = objTextBox.value.length;
        biasSize += 1;
    }
 
    document.getElementById(objName).value = (maxLength - strLen) + ' caracteres restants';
}

function resetRadio(formName, questionsList) {
  if (confirm("Do you really want to clear all checked radio button values?\n\nIf you click 'Yes', you'll have to reanswer to the following questions:\n\n" + questionsList)) {
    var f = document.forms[formName];

    for (var i = 0; i < f.length; i++) {
      tempObj = f.elements[i];
    
      if (tempObj.type == 'radio') {
        tempObj.checked = false;
      }
    }
  }
}

// ******************************************************
// Checks if the given string (DateString) is a well
// formatted date string or not
// ******************************************************
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
  var i;

  for (i = 0; i < s.length; i++){   
    // Check that current character is number.
    var c = s.charAt(i);
    if (((c < "0") || (c > "9"))) return false;
  }

  // All characters are numbers.
  return true;
}

function stripCharsInBag(s, bag){
  var i;
  var returnString = "";

  // Search through string's characters one by one.
  // If character is not in bag, append to returnString.
  for (i = 0; i < s.length; i++){   
    var c = s.charAt(i);
    if (bag.indexOf(c) == -1) returnString += c;
  }
  return returnString;
}

function daysInFebruary (year){
  // February has 29 days in any year evenly divisible by four,
  // EXCEPT for centurial years which are not also divisible by 400.
  return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
  for (var i = 1; i <= n; i++) {
    this[i] = 31
    if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
    if (i==2) {this[i] = 29}
  } 

  return this
}

function CheckDate(dtStr){
  if (dtStr != "") {
    var daysInMonth = DaysArray(12)
    var pos1=dtStr.indexOf(dtCh)
    var pos2=dtStr.indexOf(dtCh,pos1+1)
    var strDay=dtStr.substring(0,pos1)
    var strMonth=dtStr.substring(pos1+1,pos2)
    var strYear=dtStr.substring(pos2+1)
    strYr=strYear

    if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
    if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)

    for (var i = 1; i <= 3; i++) {
      if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
    }

    now=new Date();
    month=parseInt(strMonth);
    day=parseInt(strDay);
    year=parseInt(strYr);

    if (pos1==-1 || pos2==-1){
      return false
    }
    if (strMonth.length<1 || month<1 || month>12){
      return false
    }
    if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
      return false
    }
    if (strYear.length == 2){
      if ((2000 + year) > now.getYear ()) {
        strYear = "19" + strYear;
        year = 1900 + year;
      }
      else {
        strYear = "20" + strYear;
        year = 2000 + year;
      }
    }
    if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
      return false
    }
    if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
      return false
    }
  }
  return true
}

// Hide the help layer
function HideHelp () {
  nd();
}

// Change the background color of an input text if its value is above the given value
function SetBG (LowerTarget, UpperTarget, FormObj) {
  TempValue = FormObj.value.replace (/,/gi, ".");
  if (isFinite (TempValue)) {
    if (TempValue != "") {
      if ((parseFloat (TempValue) < LowerTarget) || (parseFloat (TempValue) > UpperTarget)) {
        FormObj.style.background = "#FFCCCC";
      }
      else {
        FormObj.style.background = "#FFFFFF";
      }
    }
    else {
      FormObj.style.background = "#FFFFFF";
    }
  }
  else {
      FormObj.style.background = "#FFFFFF";
  }
}

// Corrects the bug due to javascript float conversion
function FixFloat (FormObj) {
  TempValue = FormObj.value.replace (/,/gi, ".");

  TempValue = Math.round (TempValue * 100);
  TempValue = TempValue.toString ();
  TempValue = TempValue.substring (0, TempValue.length - 2) + "." + TempValue.substring (TempValue.length - 2, TempValue.length);

  FormObj.value = TempValue;
}
