/*<!-- version : $Revision: 1.8 $  --> */

var defaultEmptyOK = false
var gDateField;
var vChangesSaved = false;

var vIE;
var LikeNetScape = /Netscape/i;
if (LikeNetScape.exec (navigator.appName) || navigator.userAgent.indexOf('Opera') != -1) {
   vIE = false; // Netscape Browser
} else {
   vIE = true;
}

var vMsgPopup;
var vMsgBody;

if (vIE) {
  vMsgPopup = window.createPopup();
  vMsgBody = vMsgPopup.document.body;
  vMsgBody.style.border='0.2cm groove blue';
}


function doMouseOver()
{
  if (!vIE) { return; }
  var vElem;

  vElem = GetElement(window.event.srcElement);
  if (vElem != null)
  {
    if (vElem.className == 'dim') makeVisible(vElem,0);
    if (vElem.className == 'vibrate') {
      init(vElem);
      rattleImage();
    }
  }
}

function doMouseOut()
{
  if (!vIE) { return; }

  var vElem;
  vElem = GetElement(window.event.srcElement);
  if (vElem != null) {
    if (vElem.className == 'dim') makeVisible(vElem,1);
    if (vElem.className == 'vibrate') stopRattle(vElem);
  }
}

function doMouseUp() {
  if (!vIE) { return; }

  var vDoc
  var vElem;
  vElem = GetElement(window.event.srcElement);
  if (vElem != null && vElem.getAttribute('csFieldName') != undefined && vElem.tagName == 'INPUT') {
    if (vElem.type == 'checkbox') doFieldChange();
  }
}

function doKeyUp(event) {
  //confirm("doKeyUp");
  if (event == undefined || event == null) event = window.event; 
  var elt = null;
  var ci = 0;
  var ri = 0;
  var nbr = 0;
  var eltTBody;
  try {
    if (event.keyCode == 119) {
      clipboardData.setData('Text', document.body.innerHTML);
      alert("copier dans notepad");
      return;
    }
  

     if (event.keyCode == 120) {
       var vRet = showMsg("CannotAccessTable", "");
       return;
    }

    // move up and down in table rows
    if ((event.keyCode == 38) || (event.keyCode == 40)) {
      if (vIE) {
      elt = event.srcElement;
      } else {
        elt = event.target;
      }
      if (elt.tagName == 'INPUT' || (elt.tagName == 'DIV' && elt.getAttribute('csFieldName') != undefined)) {
        var eltTD = elt.parentElement;
        if (eltTD.tagName == "TD") {
          ci = eltTD.cellIndex;
          var eltTR = eltTD.parentElement;
          if (eltTR.tagName == "TR") {
            ri = eltTR.sectionRowIndex;
            eltTBody = eltTR.parentElement;
            nbr = eltTBody.children.length;
            if ((event.keyCode == 40) && (ri < (nbr - 1))) {ri += 1;}
            if ((event.keyCode == 38) && (ri > 0)) {ri -= 1;}
            if (elt.tagName == 'DIV') {
              eltTBody.children[ri].children[ci].children[0].focus();
            } else {
              eltTBody.children[ri].children[ci].children[0].select();
            }
          }
        }
      }
    }
    if(event.keyCode == 13) {
      var st = window.document.body.csTemplate;
      if(window.fRechercher && st == 'SQLQBE') {
        if(event.srcElement.tagName == 'INPUT') {
          fRechercher();
        }// else alert(event.srcElement.tagName);
      }// else alert(window.document.body.csTemplate);
    }
    fOnlineHelp(event); //aide en ligne
  }
  catch (e) { }
}

function doFieldChange() {
  try {
    var ret = this;
    while (ret.tagName != 'BODY') {
      if (ret.getAttribute('csFieldName') != undefined) {
        ret.setAttribute('csChanged', 'true');
      }
      ret = ret.parentElement;
    }
  } catch (e) { }
}

function doKeyPress() {
  if (!vIE) return;
  var ret = event.srcElement;
  while (ret.tagName == 'DIV') {
    if (ret.getAttribute('csFieldName') != undefined) {
      ret.setAttribute('csChanged', 'true');
    }
    ret = ret.parentElement;
  }
}

function doAction(vObj)
{
    var vURL = '';
    var vAction = vObj.getAttribute('csAction');
    var sJSFunc = '';
    if(vAction.substr(0,3) == 'js:')
      sJSFunc = vAction.substr(3);
    else if(vAction.substr(0,11) == 'javascript:')
      sJSFunc = vAction.substr(11);
    if (vAction.substr(0,4) == 'url:') {
      vURL = vAction.substr(4);
      window.open(vURL, vObj.getAttribute('csTarget'));
    } else if (sJSFunc != '') {
      // ici d&eacute;bute la modification
      if (vIE) {
       window.execScript(sJSFunc);
      } else {
       window.eval(sJSFunc);
      }
      // ici se termine la modification
    } else if (vAction == '') {
      window.open('UserMenus?Template=UserMenus&ParentMenu=' + vObj.name, 'sub');
    } else {
      window.open(vAction, vObj.getAttribute('csTarget'));
    }
}


function makeVisible(cur,which)
{
  if (!vIE) { return; }
  if (cur.disabled) return;
  if (which==0)
    cur.filters.alpha.opacity=100;
  else
  {
    if (cur.Selected!=1)
      cur.filters.alpha.opacity=30;
  }
}

var rector=3;
var stopit=0;
var a=1;

function init(which)
{
  stopit=0;
  shake=which;
  shake.style.left=0;
  shake.style.top=0;
}

function rattleImage()
{
  if ((!document.all&&!document.getElementById)||stopit==1)
  return
  if (a==1) {
    shake.style.top=parseInt(shake.style.top)+rector;
  }  else if (a==2) {
    shake.style.left=parseInt(shake.style.left)+rector;
  }  else if (a==3) {
    shake.style.top=parseInt(shake.style.top)-rector;
  }  else {
    shake.style.left=parseInt(shake.style.left)-rector;
  }
  if (a<4) { a++; } else { a = 1;}
  setTimeout("rattleImage()",150);
}

function stopRattle(which)
{
  stopit=1;
  which.style.left=0;
  which.style.top=0;
}


function GetElement(vSrc) {
  var vElem;
  if (vSrc && (vSrc.className == 'dim') || (vSrc.className == 'vibrate')) vElem = vSrc;
  return vElem;
}


//function showOpers() {
////  if (!vIE) { return; }
//
//  var i = 0;
//  var j = 0;
//  var vDoc;
//
//  for (i=0;i<parent.frames.length;i++) {
//    if (parent.frames[i].document.body.getAttribute('cs_docType') == 'qbe')  {
//      vDoc = parent.frames[i].document;
//      for (j=0;j<vDoc.all.length;j++) {
//        if (vDoc.all[j].type == 'select-one')  {
//          if (vDoc.all[j].style.display == 'none')
//          {vDoc.all[j].style.display = '';} else
//          {vDoc.all[j].style.display = 'none';}
//        }
//      }
//    }
//  }
//}

//function switchOpers() {
////  if (!vIE) { return; }
//
//  var i = 0;
//  var j = 0;
//  var vDoc;
//
//  for (i=0;i<parent.frames.length;i++)  {
//    if (parent.frames[i].document.body.getAttribute('cs_docType') == 'qbe') {
//      vDoc = parent.frames[i].document;
//      for (j=0;j<vDoc.all.length;j++) {
//        if (vDoc.all[j].type == 'select-one') {
//          if (vDoc.all[j].value == 'AND') {
//            vDoc.all[j].value = 'OR';
//          } else {
//            vDoc.all[j].value = 'AND';
//          }
//        }
//      }
//    }
//  }
//}


function getSelectedKeys(doc)
{
  var str = '';
  for (var j = 0; j < doc.forms.length; j++) {
    var vForm = doc.forms[j];
    for (var i = 0; i < vForm.elements.length; i++) {
      var elt = vForm.elements[i];
      if (elt.tagName == 'INPUT' && elt.type == 'checkbox' && elt.getAttribute('csAction') == 'select' && elt.checked) {
        if (str != '') { str += ', '; }
        str += elt.value;
      }
    }
  }
  return str;
}

function getUnSelectedKeys(doc)
{
  var str = '';
  for (var j = 0; j < doc.forms.length; j++) {
    var vForm = doc.forms[j];
    for (var i = 0; i < vForm.elements.length; i++) {
      var elt = vForm.elements[i];
      if (elt.tagName == 'INPUT' && elt.type == 'checkbox' && elt.getAttribute('csAction') == 'select' && elt.checked == false ) {
    //alert(elt.checked);
/*    if (elt.checked == true )
      alert(elt.value);
    }*/
        if (str != '') { str += ','; }
        str += elt.value;
      }
    }
  }
  return str;
}


function getSelectedValues(doc,spliter){
  var str = '';
  for (var j = 0; j < doc.forms.length; j++) {
    var vForm = doc.forms[j];
    for (var i = 0; i < vForm.elements.length; i++) {
      var elt = vForm.elements[i];
      if (elt.tagName == 'INPUT' && elt.type == 'checkbox' && elt.getAttribute('csAction') == 'select' && elt.checked) {
        if (str != '') { str += spliter ; }
        str += elt.value;
      }
    }
  }
  return str;
}

function getParentTable(obj)
{
  var ret = obj;
  while (ret.tagName != 'BODY') {
    if (ret.tagName == 'TABLE') {
      return ret;
    } else {
      ret = ret.parentNode;
    }
  }
  return null;
}

function getAncestor(vObj, vTagName) {
  var vElt = vObj.parentNode;
  while (vElt != null) {
    if (vElt.nodeType == 1 && vElt.tagName == vTagName) break;
    vElt = vElt.parentNode;
  }
  return vElt;
}

function getPreviousElement(event) {
  var vObj = getTargetElement(event);
  var vElt = vObj.previousSibling;
  while (vElt != null) {
    if (vElt.nodeType == 1) break;
    vElt = vElt.previousSibling;
  }
  return vElt;
}

function checkAll(obj)
{
  var vChecked = obj.checked;
  var vCol = 0;
  var vTag = obj.parentNode.tagName;
  if (vTag != 'TD' && vTag != 'TH') { return; }
  vCol = obj.parentNode.cellIndex;
  var vTable = getParentTable(obj);
  var tabRows= vTable.rows;
  for (var i = 1; i < tabRows.length; i++) {
    var cell = tabRows[i].cells[vCol];   
    if (cell) {
      var elt = cell.getElementsByTagName('INPUT')[0];
      if (elt && elt.type == 'checkbox' && elt.getAttribute('csAction') == 'select') {
        elt.checked = vChecked;
      }
    }
  }
}


// Returns true if character c is a digit
// (0 .. 9).
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isInteger (s)
{   var i;

    if (s == '') return true;

    if (isEmpty(s))
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);

    // Search through string's characters one by one
    // until we find a non-numeric character.
    // When we do, return false; if we don't, return true.

    for (i = 0; i < s.length; i++)
    {
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}


function isDate (s)
{
    if (s == '') return true;
    var year = '', month = '', day = '';
    var ss;

    ss = s.split('/');
    if (ss.length != 3) return false;

    day = ss[0];
    month = ss[1];
    year = ss[2];

    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);

    if (intDay > 31) return false;
    if (intMonth > 12) return false;

    return true;
}


// Cette fonction &eacute;tait dans un fichier s&eacute;par&eacute; (open.js)
function fOpenForm(vFileHtml, vDateField) {
  var vtop
  var vleft
  var vUrl
//  vtop = window.screenTop + document.activeElement.offsetTop + document.activeElement.offsetHeight  ;
//  vleft = window.screenLeft + document.activeElement.offsetLeft + document.activeElement.offsetWidth  ;
  vDateField.setAttribute('csChanged', 'true');
  vtop = window.screenTop + document.activeElement.offsetTop;
  vleft = window.screenLeft + document.activeElement.offsetLeft;
  if ( vleft + 210 > window.screen.availWidth )
  {
    vleft = window.screen.availWidth - 210;
  }

  if ( vtop + 270 > window.screen.availHeight )
  {
    vtop = window.screen.availHeight - 280;
  }

  try {
    vUrl = 'WIDTH=200,HEIGHT=250 top=' + vtop + ' left=' + vleft ;
    calendar = window.open(vFileHtml + '?field=' + vDateField.sourceIndex,'cal',vUrl);
    calendar.document.getElementById('OpenerDate').value = vDateField.value;
  }
  catch (e) {}

}

// Fonction d'appel du calendrier dans dPortal
function fOpenFormDate(vFileHtml, vDateField) {
  var vtop
  var vleft
  var vUrl
  vDateField.setAttribute('csChanged', 'true');
  if (document.all)
  {
    vtop = window.screenTop + document.activeElement.offsetTop;
    vleft = window.screenLeft + document.activeElement.offsetLeft;
  }
  else
  {
    vtop = (window.screen.height-220) / 2;
    vleft = (window.screen.width-250) / 2;
  }
  if ( vleft + 250 > window.screen.availWidth ){
    vleft = window.screen.availWidth - 250;
  }
  if ( vtop + 220 > window.screen.availHeight ){
    vtop = window.screen.availHeight - 230;
  }

  try {
    vUrl = 'WIDTH=240,HEIGHT=200,top=' + vtop + ',left=' + vleft ;
    calendar = window.open(vFileHtml + '&returnField=' + vDateField.id,'cal',vUrl);
  }
  catch (e) {}
}


//Les fonctions qui suivent &eacute;taient dans le fichier calend.js

function setDate() {
    var p = 0;
    var vLoc = "abcd";
    var vDateField = "abcd";
//    this.dateField   = opener.dateField;
    vLoc = location.search;
    p = vLoc.indexOf("=");
    vDateField = vLoc.substr(p+1);
    this.dateField   = opener.document.getElementById(vDateField);
    this.inDate      = this.dateField.value;

    // SET DAY MONTH AND YEAR TO TODAY'S DATE
    var now   = new Date();
    var day   = now.getDate();
    var month = now.getMonth();
    var year  = now.getYear();
    if (year < 200) {
        year += 1900;
    }
    else {
//        year += 2000;
    }

    // IF A DATE WAS PASSED IN THEN PARSE THAT DATE
    if (inDate.indexOf('/')) {
        var inMonth = inDate.substring(inDate.indexOf("/") + 1, inDate.lastIndexOf("/"));
            if (inMonth.substring(0,1) == "0" && inMonth.length > 1)
                inMonth = inMonth.substring(1,inMonth.length);
            inMonth = parseInt(inMonth);
        var inDay   = inDate.substring(0,inDate.indexOf("/"));
            if (inDay.substring(0,1) == "0" && inDay.length > 1)
                inDay = inDay.substring(1,inDay.length);
            inDay = parseInt(inDay);
        var inYear  = parseInt(inDate.substring(inDate.lastIndexOf("/") + 1, inDate.length));

        if (inDay) {
            day = inDay;
        }
        if (inMonth) {
            month = inMonth-1;
        }
        if (inYear) {
            year = inYear;
        }
    }
    this.focusDay                           = day;
    document.calControl.month.selectedIndex = month;
    document.calControl.year.value          = year;
    displayCalendar(day, month, year);
}

function setToday() {
    // SET DAY MONTH AND YEAR TO TODAY'S DATE
    var now   = new Date();
    var day   = now.getDate();
    var month = now.getMonth();
    var year  = now.getYear();
    if (year < 200) {
        year += 1900;
    }
    else {
//        year += 2000;
    }
    this.focusDay                           = day;
    document.calControl.month.selectedIndex = month;
    document.calControl.year.value          = year;
    displayCalendar(day, month, year);
}


function isFourDigitYear(year) {
    if (year.length != 4) {
        alert ("Le champ année doit contenir quatre chiffres");
        document.calControl.year.select();
        document.calControl.year.focus();
    return false;
  } else {
        return true;
    }
}


function selectDate() {
    var year  = document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var day   = 0;
        var month = document.calControl.month.selectedIndex;
        displayCalendar(day, month, year);
    }
}


function setPreviousYear() {
    var year  = document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var day   = 0;
        var month = document.calControl.month.selectedIndex;
        year--;
        document.calControl.year.value = year;
        displayCalendar(day, month, year);
    }
}


function setPreviousMonth() {
    var year  = document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var day   = 0;
        var month = document.calControl.month.selectedIndex;
        if (month == 0) {
            month = 11;
            if (year > 1000) {
                year--;
                document.calControl.year.value = year;
            }
        }
        else {
            month--;
        }
        document.calControl.month.selectedIndex = month;
        displayCalendar(day, month, year);
    }
}


function setNextMonth() {
    var year  = document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var day   = 0;
        var month = document.calControl.month.selectedIndex;
        if (month == 11) {
            month = 0;
            year++;
            document.calControl.year.value = year;
        }
        else {
            month++;
        }
        document.calControl.month.selectedIndex = month;
        displayCalendar(day, month, year);
    }
}


function setNextYear() {
    var year  = document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var day   = 0;
        var month = document.calControl.month.selectedIndex;
        year++;
        document.calControl.year.value = year;
        displayCalendar(day, month, year);
    }
}


function displayCalendar(day, month, year) {
    day     = parseInt(day);
    month   = parseInt(month);
    year    = parseInt(year);
    var i   = 0;
    var now = new Date();

    var nowDay;
    if (day == 0) {
        nowDay = now.getDate();
    } else {
        nowDay = day;
    }
    var days         = getDaysInMonth(month+1,year);
    var firstOfMonth = new Date (year, month, 1);
    var startingPos  = firstOfMonth.getDay();
    days += startingPos;

    // MAKE BEGINNING NON-DATE BUTTONS BLANK
    for (i = 0; i < startingPos; i++) {
//        document.calButtons.elements[i].value = " "+" "+" "+" "+" ";
  document.getElementById("but" + i ).innerHTML = " ";
    }

    // SET VALUES FOR DAYS OF THE MONTH
    for (i = startingPos; i < days; i++)
    {
       if(( i-startingPos+1) < 10)
       {

  document.getElementById("but" + i ).setAttribute('csDay',i-startingPos+1);
  document.getElementById("but" + i ).innerHTML = i-startingPos+1;
//        document.calButtons.elements[i].value = i-startingPos+1+" "+" ";
//        document.calButtons.elements[i].value = " "+document.calButtons.elements[i].value;
//        document.calButtons.elements[i].onClick = "returnDate"
       }
       else
       {
  document.getElementById("but" + i ).setAttribute('csDay',i-startingPos+1);
  document.getElementById("but" + i ).innerHTML = i-startingPos+1;
//        document.calButtons.elements[i].value = i-startingPos+1;
//        document.calButtons.elements[i].onClick = "returnDate"
       }
    }

    // MAKE REMAINING NON-DATE BUTTONS BLANK
    for (i=days; i<42; i++)  {
//        document.calButtons.elements[i].value = " "+" "+" "+" "+" ";
  document.getElementById("but" + i ).innerHTML = " ";
    }

    // GIVE FOCUS TO CORRECT DAY
//    document.calButtons.elements[focusDay+startingPos-1].focus();
    document.getElementById("but" + (focusDay + startingPos - 1)).innerHTML = "<strong>" + document.getElementById("but" + (focusDay + startingPos - 1)).innerHTML + "</strong>";
}


// GET NUMBER OF DAYS IN MONTH
function getDaysInMonth(month,year)  {
    var days;
    if (month==1 || month==3 || month==5 || month==7 || month==8 ||
        month==10 || month==12)  days=31;
    else if (month==4 || month==6 || month==9 || month==11) days=30;
    else if (month==2)  {
        if (isLeapYear(year)) {
            days=29;
        }
        else {
            days=28;
        }
    }
    return (days);
}


// CHECK TO SEE IF YEAR IS A LEAP YEAR
function isLeapYear (Year) {
    if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
        return (true);
    }
    else {
        return (false);
    }
}


// SET FORM FIELD VALUE TO THE DATE SELECTED
function returnDate(inDay)
{
    var day   = inDay;
    var month = (document.calControl.month.selectedIndex)+1;
    var year  = document.calControl.year.value;

  if (inDay != " ") {

    if ((""+month).length == 1)
    {
        month="0"+month;
    }

    day=parseInt(day);

    if (day != "   ") {
        dateField.value = day + "/" + month + "/" + year;
        window.close()
    }
  }
}

function getControlParam(str, param)
{
  var p1 = 0;
  var p2 = 0;
  var sRet = "";

  if (str)
  {
    p1 = str.indexOf(param);
    if (p1 >= 0) {
      p1 = p1 + param.length + 1;
      p2 = str.indexOf(';', p1);
      if (p2 < 0) {
        sRet = str.substr(p1);
      } else {
        sRet = str.substr(p1, p2 - p1);
      }
    }
  }
  return sRet;
}

function getControlIndexOf(str, param)
{
  var p = -1;
  if (str)
    p = str.indexOf(param);
  return p;
}



function getControlString(obj)
{
  var vControl = obj.getAttribute('csControl');
  var p = vControl.indexOf(':');
  var vCObj  = vControl.substr(p+1);
  return vCObj;
}



function fShowInputHelp(p_Obj)
{
  var sTableName = p_Obj.getAttribute("TableName");
  var sReturnField = p_Obj.getAttribute("ReturnField");
  var sTargetElems = p_Obj.getAttribute("TargetElems");
  var sTemplate = "InputHelp";
  var sCom = "Control";
  sCom += "?TableName="+p_Obj.getAttribute("TableName");
  sCom += "&DBName="+p_Obj.getAttribute("DBName");
  sCom += "&ReturnField="+p_Obj.getAttribute("ReturnField");
  sCom += "&TargetElems="+p_Obj.getAttribute("TargetElems");
  sCom += "&Template=InputHelp";
  window.open(sCom, null, "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=250, top=250");
}

function showHelpPage(obj){
  var vControl = obj.getAttribute('csControl');
  var p = vControl.indexOf(':');
  var vCObj  = vControl.substr(p+1);
  var vCType = vControl.substr(0, 4);
  var vUrl = '';
  var vTmpl = '';
  var vTableName = '';
  var vRetField = '';
  var vDestFields = '';
  var vSearchField = '';
  var vOper = 'Show';
  var vItem = '';
  var vKeyItem = '';
  var vElt = obj.id;
  var vSep = obj.getAttribute('csSep');
 
  if(vSep == null ){vSep ='';}
  
  if (obj.tagName == 'INPUT') {
    vItem = obj.value;
  } else {
    vItem = obj.innerText;
  }
  if (vControl.substr(0, 4) == 'link' || vControl.substr(0, 7) == 'dmsHelp'){
  //if (vControl.substr(0, 4) == 'link'){
    if (vControl.indexOf(':') > 3 && vControl.indexOf(':') != 12){
      var strTmp = obj.id + "_lbl";
      var Obj2 = document.getElementById(strTmp); // pour Link avec clees
      if (Obj2)
      if (Obj2.tagName == 'INPUT') {
        vItem = Obj2.value;
      } else {
        vItem = Obj2.innerText;
      }
      if (obj.tagName == 'INPUT') {
        vKeyItem = obj.value;
      } else {
        vKeyItem = obj.innerText;
      }
      if (vKeyItem == '') {
          vKeyItem = getControlParam(vCObj, 'Item');
      }
    }
  }
  //alert("vKeyItem"+vKeyItem);
  obj.setAttribute('csChanged', 'true');
  
  if (vCType.substr(0, 4) == 'link' || vControl.substr(0, 7) == 'dmsHelp') {
  //if (vCType.substr(0, 4) == 'link') {
    if (obj.getAttribute('csMulti') == 'checked') {
      vTmpl = 'ListControl';
      if (vItem == '')
        vItem = getControlParam(vCObj, 'Item');
    } 
    else if (getControlParam(vCObj, 'SearchField') != "") 
      vTmpl = 'frmSimpleLink';
    else
      vTmpl = 'simpleLink';
    //alert("vItem"+vItem);
    var vDBName = getControlParam(vCObj, 'DBName')
    if (vDBName == "" )
      vDBName = document.body.getAttribute('csDBName');
    vTableName = getControlParam(vCObj, 'TableName');
    vRetField = getControlParam(vCObj, 'ReturnField');
    vSrcFields = getControlParam(vCObj, 'SrcFields');
    vDestFields = getControlParam(vCObj, 'DestFields');
    var vLinkKeys = getControlParam(vCObj, 'LinkKeys').toUpperCase();
    if (vLinkKeys != "YES")
      vViewField = vRetField;
    else 
      vViewField = vSrcFields;
    vSearchField = getControlParam(vCObj, 'SearchField');
    if (vSearchField=="")
      vSearchField = vRetField;
    vOpenerField = getControlParam(vCObj, 'OpenerField');
    if (vOpenerField=="")
      vOpenerField = obj.getAttribute('csFieldName');
    //var arraySearchFields = vSearchField.split(',');
    //vViewField = arraySearchFields[0];
    if (vTmpl == 'simpleLink') 
      vUrl = 'GetRecords?Template=' + vTmpl;
    else
      vUrl = 'ShowPage?UseFM=yes&Template='+ vTmpl;
  
    vUrl += "&DBName=" + vDBName + "&TableName=" + vTableName;
    vUrl += "&SrcFields=" + vSrcFields + "&DestFields=" + vDestFields;
    vUrl += "&ReturnField=" + vRetField;
    vUrl += "&OpenerField=" + vOpenerField;
    vUrl += '&InsertTableName=' + getControlParam(vCObj, 'InsertTableName');
    if (vTmpl == 'ListControl') {
      vUrl += "&SearchField=" + vSearchField;
      vUrl += "&ViewField=" + vViewField; 
      vUrl += '&nElement=' + vElt + '&Item=' + vItem + '&KeyItem=' + vKeyItem;
      vUrl += '&LinkKeys=' + vLinkKeys;  
      vUrl += '&Operation=' + vOper + "&csSep=" + vSep ;
    }
    else {
      var sqlQuery ="";
      var vVal = obj.value;
      if (vVal != "")
//HCL20031028  Ne permet pas de changer la valeur lors des update
//        sqlQuery = vRetField + " like '" + vVal + "'";
        sqlQuery = "";
      else if (vTmpl == "frmSimpleLink")
        sqlQuery = "1=2";  
      vUrl += "&SearchField=" + vSearchField;
      vUrl += "&SqlQuery=" + escape(sqlQuery);
      //alert (vUrl);
    }
  }
  window.open(vUrl,"_blank","resizable=yes, toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=200, top= 200");
}



function setQueries (searchFields, autofunction, obj_userQuery, obj_SqlQuery, obj_Query){
  //Taitement de userQuery
  userQuery = obj_userQuery.value;
  userQuery = userQuery.replace(/^[\s]+/g,"");
  userQuery = userQuery.replace(/[\s]+$/g,"");
  obj_userQuery.value = userQuery ;
  //Traitement de SqlQuery et Query
  var sqlQuery = ""; 
  var Query = "";
  if (searchFields != "" && userQuery != "") {
    var arraySearchFields = searchFields.split(',');
    var nSF = arraySearchFields.length;
    for (i=0; i<nSF; i++) {
      if (i>0) { 
        sqlQuery += " OR ";
        Query += " OR ";
      }
      if(autofunction != "")
        sqlQuery += autofunction + "(" + arraySearchFields[i] + ") like " + autofunction +"('" + userQuery + "%')";
      else
        sqlQuery += arraySearchFields[i] + " like '" + userQuery + "%'";
      Query += arraySearchFields[i] + ":" + userQuery.toLowerCase();
    }
  }
  obj_SqlQuery.value = sqlQuery;
  if (obj_Query)
    obj_Query.value = Query;
}


function getCounterValue(obj)
{
  var vCtrName = getControlParam(obj.getAttribute('csControl'), 'CounterName');
  var vAttr = getControlParam(obj.getAttribute('csControl'), 'Attribute');
  var vRetField = obj.id;
  obj.setAttribute('csChanged', 'true');
  var vUrl = '';

  vUrl = 'DynCounter?Template=counter&DBName=' + document.body.getAttribute('csDBName')
       + '&TableName=' + document.body.getAttribute('csTableName') + '&ReturnField=' + vRetField
       + '&CounterName=' + vCtrName + '&Attribute=' + vAttr;
  window.open(vUrl, null, "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, width=100, height=100, left=0, top=0");
}


function showThes(obj) {
  var vControl = obj.getAttribute('csControl');
  var vCType = vControl.substr(0, 4);
  var p = vControl.indexOf(':');
  var vCObj  = vControl.substr(p+1);
//  var vCType = vControl.substr(0, 4);
//  var vCObj  = vControl.substr(5);
  var vUrl = '';
  var vTmpl = '';
  var vTableName = '';
  var vRetField = '';
  var vDestFields = '';
  var vLang = '';
  var vOper = 'Show';
  var vItem = '';
//  var vKeyItem = '';
  var vElt = obj.id;
  var vSep = obj.getAttribute('csSep');
  
  if(vSep == null ){vSep ='';}
  if (obj.tagName == 'INPUT') {
    vItem = obj.value;
  } else {
    vItem = obj.innerText;
  }

  obj.setAttribute('csChanged', 'true');
  if (vCType == 'thes') {
      vTmpl = 'thesaurus';

      vTableName = getControlParam(vCObj, 'TableName');
      vRetField = getControlParam(vCObj, 'ReturnField');
    vLang = getControlParam(vCObj, 'Lang');
    vDestFields = getControlParam(vCObj, 'DestFields');

      vUrl = 'GetRecords?Template=' + vTmpl + '&DBName=dPortal'
          + '&TableName=' + vTableName + '&ReturnField=' + vRetField
      + '&OpenerFields=' + obj.getAttribute('csFieldName') + '&nElement=' + vElt
      + '&Item=' + vItem
      + '&Operation=' + vOper + '&Lang=' + vLang;
      vUrl += "&" + vCObj.replace(/;/g, "&");
    vUrl += "&csSep=" + vSep ;
  }
//  alert(vUrl);
  var vWind = window.open(vUrl,"_blank","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=700, height=500, left=100, top= 100");
}


//HCL D 03-09-2002
//Appel Fenêtre TopicMap
function showTM(obj) {
  try {
    var vControl = obj.getAttribute('csControl');
    var vCType = vControl.substr(0, 2);
    var p = vControl.indexOf(':');
    var vCObj  = vControl.substr(p+1);
    var vUrl = '';
    var vTmpl = '';
    var vDBName = '';
    var vTableName = '';
    var vRetField = '';
    var vDestFields = '';
    var vLang = '';
    var vOper = 'Show';
    var vItem = '';
    var vKeyItem = '';
    var vElt = obj.id;
    var vSep = obj.getAttribute('csSep');
  
    vCallMode = document.body.getAttribute('csCallMode');
  
    if(vSep == null ){vSep ='';}
    vRetField = getControlParam(vCObj, 'ReturnField');
    vOpenerField = getControlParam(vCObj, 'OpenerField');
    vSrcFields = getControlParam(vCObj, 'SrcFields');
    vDestFields = getControlParam(vCObj, 'DestFields');
    var Obj2 = document.getElementById(vDestFields)
    if (Obj2.tagName == 'INPUT') {
      vItem = Obj2.value;
    } else {
      vItem = Obj2.innerText;
    }
  
    if (obj.tagName == 'INPUT') {
      vKeyItem = obj.value;
    } else {
      vKeyItem = obj.innerText;
    }
    if (vKeyItem == '') {
        vKeyItem = getControlParam(vCObj, 'Item');
    }
  /*
  alert("vOpenerField: " + vOpenerField);
  alert("vDestFields: " + vDestFields);
  alert("obj2: " + Obj2.value);
  alert("obj: " + obj.value);
  */
  
    var vMulti;
    if (obj.getAttribute('csMulti') == 'checked') {
      vMulti = "YES";
    }else{
      vMulti = "NO";
    }
  
    obj.setAttribute('csChanged', 'true');
    if (vCType == 'tm') {
        vTmpl = 'topicmap/tm';
        vTableName = getControlParam(vCObj, 'TableName');
        vDBName = getControlParam(vCObj, 'DBName');
        var vInsertTableName = getControlParam(vCObj, 'InsertTableName');
        var vMicroTM = getControlParam(vCObj, 'MicroTM');
        var vDefaultSearchMode = getControlParam(vCObj, 'DefaultSearchMode');
        var vSearchModeAllowUpdate = getControlParam(vCObj, 'SearchModeAllowUpdate');
        vUrl = 'GetRecords?Template=' + vTmpl + '&DBName=' + vDBName + '&Multi=' + vMulti
            + '&ReturnField=' + vRetField + '&OpenerField=' + vOpenerField 
            + '&SrcFields=' + vSrcFields + '&DestFields=' + vDestFields 
            + '&nElement=' + vElt + '&Item=' + vItem + '&KeyItem=' + vKeyItem 
            + '&Operation=' + vOper + '&Lang=' + vLang
            + '&InsertTableName=' + vInsertTableName
            + '&MicroTM=' + vMicroTM;
  // a ce point, on a récupéré tout les éléments permettant
  // d'ouvrir la fenêtre topicMap : il ne faut pas rajouter
  // tout le contenu du controle (qui vient d'être analyse) au petit bonheur !!!
  // CAR sinon on se retrouve avec des paramètre en double : DBName, ....
  // ce qui provoque une erreur coté Tomcat.
  //  la ligne suivante est donc mise en commentaire
  //      vUrl += "&" + vCObj.replace(/;/g, "&"); 
  // DCH 17/02/2004
        vUrl += "&csSep=" + vSep ;
        vUrl += "&CallMode=" + vCallMode ;
        vUrl += "&DefaultSearchMode=" + vDefaultSearchMode ;
        vUrl += "&SearchModeAllowUpdate=" + vSearchModeAllowUpdate ;
    }
  //alert(vUrl);
    var vWind = window.open(vUrl,"_blank","toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=700, height=500, left=100, top= 100");
  } catch (e) {
    alert('showTM: ' + e.description);
  }
}
//HCL F 03-09-2002


function showList(obj, vDoc){
  var vControl = obj.getAttribute('csControl');
  var vCType = vControl.substr(0, 4);
  var vCObj  = vControl.substr(5);
  var vUrl = '';
  var vTmpl = '';
  var vListName = '';
  var vMulti = '';

  obj.setAttribute('csChanged', 'true');

  if (obj.tagName == 'INPUT') {
    vItem = obj.value;
  } else {
    vItem = obj.innerText;
  }

  if (vCType == 'list') {
    vTmpl = 'MultiList';
    if (obj.getAttribute('csMulti') == 'checked') {
      vMulti = 'yes';
    } else {
      vMulti = 'no';
    }

    vListName = getControlParam(vCObj, 'ListName');
    if (vListName.substr(0, 2) == '@@' && vDoc != null) {
        vListName = obj.getAttribute('csFieldName') + "-" + vDoc.getElementById(vListName.substr(2)).value;
    }else if (vListName.substr(0, 1) == '@' && vDoc != null) {
        vListName = vDoc.getElementById(vListName.substr(1)).value;
    }
    var vSep = obj.getAttribute('csSep');
    
    vUrl = 'GetRecords?Template=' + vTmpl + '&ListName=' + vListName + '&OpenerFields=' + obj.getAttribute('csFieldName') + '&Multi=' + vMulti;
    vUrl += '&Item=' + vItem ;
    if (vSep)
      vUrl += '&Sep=' + vSep;

    var vValues = obj.value;
    vUrl += '&values=' + vValues;
    var vVal = obj.value;
    if (vVal.indexOf('%') == -1) { vVal += '%'; }
    vUrl += '&value=' + escape(vVal);
  }
  window.open(vUrl,null,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=200, top= 200");
}


function showDir(obj)
{
  var vUrl = '';
  var params = '';
  var ctrl = obj.getAttribute('csControl');
  if (ctrl != null && ctrl.length > 0) {
    var p = ctrl.indexOf(':');
    if (p > -1) {
      params = ctrl.substr(p + 1);
    } else {
      params = ctrl;
    }
  }
  obj.setAttribute('csChanged', 'true');
    vUrl = 'ShowPage?Template=FileSel&UseFM=yes&Path=&View=list&AccessMode=open&OpenerField=' + obj.id ;
  if (params.length > 0) {
    vUrl += '&' + params;
  }
  window.open(vUrl,null,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=700, height=500, left=100, top= 100");

}

    function getXmlPrcFooter2(vMode, vTableName, vDBName, NbUKValues)
  {
    var xml = '';

    xml += '</' + vTableName + '>\n'

    xml += ']]></string></value>\n';
    xml += '       </member>\n';
    xml += '       <member>\n';
    xml += '         <name>TableName</name>\n';
    xml += '         <value><string>' + vTableName + '</string></value>\n';
    xml += '       </member>\n';
    if((NbUKValues != undefined) && (NbUKValues != '')){
    xml += '       <member>\n';
    xml += '         <name>setNbUKValues</name>\n';
    xml += '         <value><string>' + NbUKValues + '</string></value>\n';
    xml += '       </member>\n';
  }
    if ((vDBName != undefined) && (vDBName != '')) {
      xml += '       <member>\n';
      xml += '         <name>DBName</name>\n';
      xml += '         <value><string>' + vDBName + '</string></value>\n';
      xml += '       </member>\n';
    }
    xml += '           </struct>\n';
    xml += '  </value>\n';
    xml += '      </param>\n';
    xml += '   </params>\n';
    xml += '</methodCall>';

    return xml;
  } // function


  function getFields(vDoc)
  {
    var xml = '';
    var obj = '';
    var rec = '';
    var vUAF = vDoc.body.getAttribute('csUseAllFields');

    for (i=1; i < vDoc.all.length; i++) {
      obj = vDoc.all[i];

      if ((obj.getAttribute('csFieldName') != undefined) && (obj.getAttribute('csChanged') == 'true' || vUAF == 'yes') && (obj.getAttribute('csDone') != 'yes')) {
        if (obj.getAttribute('csType') == 'XML') {
          var vXml = getXMLFields(obj);
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + vXml + '</' + obj.getAttribute('csFieldName') + '>\n';
        } else if (obj.tagName == 'DIV') {
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.innerHTML + '</' + obj.getAttribute('csFieldName') + '>\n';
        } else if (obj.tagName == 'TEXTAREA') {
          if (obj.getAttribute('csControl').indexOf('xml:') != -1 || obj.getAttribute('csControl').indexOf('html:') != -1) {
            rec += '    <' + obj.getAttribute('csFieldName') + '>[[[[[[' + obj.innerText + ']]]]]]</' + obj.getAttribute('csFieldName') + '>\n';
          } else {
            rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.innerText + '</' + obj.getAttribute('csFieldName') + '>\n';
          }
        } else if (obj.tagName == 'IMG') {
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.src + '</' + obj.getAttribute('csFieldName') + '>\n';
        } else {
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.value + '</' + obj.getAttribute('csFieldName') + '>\n';
        }
      }
    } // for (i...)

    if (rec != '') {
      xml += rec;
    }

    return xml;
  }

  function checkFields(vForm)
  {
    for (var i = 0; i < vForm.elements.length; i++) {
      var vElt = vForm.elements[i];
      if (vElt.getAttribute('csFieldName') != undefined && vElt.getAttribute('csMandatory') == 'checked' && vElt.value == '') {
        alert("Veuillez saisir tous les champs obligatoires");
        return false;
      }
    }
    
    return true;
  }

  function sendDataIE(vMode, vDocument, vCallMode)
  {
    var xml = '';
    var obj = '';
    var rec = '';
    if (vDocument == undefined) {
      vDoc = document;
    } else {
      vDoc = vDocument;
    }

    if (!checkFields(vDoc.forms.work)) { return false; }
    try {
      if (!appCheckFields(vDoc)) { return false; }
    } 
    catch (e) {
    }

    var vTableName = vDoc.body.getAttribute('csTableName');

    /*
    if (vTableName && vTableName!='' && vDoc.forms.save!= undefined)
      fCopyAll(vDoc.forms.work, vDoc.forms.save, vTableName + '_Restoration');
    */
    
    xml = getXmlPrcHeader(vMode, vTableName);
    var vUAF = vDoc.body.getAttribute('csUseAllFields');

    for (i=1; i < vDoc.all.length; i++) {
      obj = vDoc.all[i];
      if (obj.getAttribute('csUKValue') != undefined && obj.tagName != 'FORM') {
        if (rec != '') {
          xml += rec;
          xml += '  </record>';
        }
        var vUKValue = obj.getAttribute('csUKValue').replace(/\'/g, "");
        rec = '  <record UniqueKeyValue="' + vUKValue + '">\n';
      }

      var vFName = obj.getAttribute('csFieldName');
    // dch 5 Mars 2004 verrue : des input contenant les libellé des champs liés
    // ont AUSSI l'attribut csFieldName !!!!!!!!! ==> il ne faut pas les envoyer
    // pour la saisie ou la modif
      if (vFName != undefined) {
          if (isLabel(obj)) {
              vFName = undefined;
          }
      }

      var vCtrl = obj.getAttribute('csControl');
      if ((vFName != undefined) && (obj.getAttribute('csChanged') == 'true' || vUAF == 'yes') && (obj.getAttribute('csDone') != 'yes')) {
        if (obj.getAttribute('csType') == 'XML') {
          var vXml = getXMLFields(obj);
          rec += '    <' + vFName + '>\n[[[[[[' + vXml + ']]]]]]</' + vFName + '>\n';
        } else if (obj.tagName == 'DIV') {
          rec += '    <' + vFName + '>[[[[[[' + obj.innerHTML + ']]]]]]</' + vFName + '>\n';  
        } else if (obj.tagName == 'INPUT' && obj.type == 'checkbox') {
          var vTrueVal = getControlParam(vCtrl, 'checked');
          var vFalseVal = getControlParam(vCtrl, 'unchecked');
          var vCBValue = vFalseVal;
          if (obj.checked) vCBValue = vTrueVal;
          rec += '    <' + vFName + '>' + vCBValue + '</' + vFName + '>\n';
        } else if (obj.tagName == 'TEXTAREA') {
            if (getControlIndexOf(vCtrl, 'xml:') != -1 || getControlIndexOf(vCtrl, 'html:') != -1) {
              rec += '    <' + vFName + '>[[[[[[' + obj.innerText + ']]]]]]</' + vFName + '>\n';
            } else {
              rec += '    <' + vFName + '>' + obj.innerText + '</' + vFName + '>\n';
          }
        } else if (obj.tagName == 'IMG') {
          rec += '    <' + vFName + '>' + obj.src + '</' + vFName + '>\n';
//HCL 03/05/2002 D
        } else if (obj.tagName == 'SELECT' && obj.getAttribute('csMulti') == 'checked') {
          rec += '    <' + vFName + '>';
      var strValues = '' ;

      var vSep = obj.getAttribute('csSep');
      if(vSep == null ){vSep =';';}

      for (var k = 0; k < obj.options.length; k++){
        if (obj.options[k].selected == true){
          strValues += obj.options[k].value + vSep;
        }
      }
      strValues = strValues.substring(0,strValues.length - vSep.length);
            rec += strValues;
            rec += '</' + vFName + '>\n';
//HCL 03/05/2002 F

        } else {
          rec += '    <' + vFName + '>' + obj.value + '</' + vFName + '>\n';
        }
      }
    } // for (i...)

    
    
    
    if (rec != '') {
      xml += rec;
      xml += '  </record>\n';
    }


    xml += getXmlPrcFooter(vMode, vDoc.body.getAttribute('csTableName'), vDoc.body.getAttribute('csDBName'));
    vDoc.forms.send.xmldata.value = xml;
//alert (xml);
    if (vCallMode == null || vCallMode.toLowerCase() != 'xmlhttp') {
      vDoc.forms.send.submit();
    }
    return true;
  } // function
 
  
  function sendData(vMode, vDocument, vCallMode)  {
//    vChangesSaved = true;
    try {
      if (editor && vTextArea != '') {
        var vElt = document.getElementById(vTextArea);
        vElt.value = editor.getHTML();
        vElt.setAttribute('csChanged','true');
      }
    }
    catch (e) { }
    if (vIE) {
      return sendDataIE(vMode, vDocument, vCallMode);            
    }

    var xml = '';
    var obj = '';
    var rec = '';
    if (vDocument == undefined) {
      vDoc = document;
    } else {
      vDoc = vDocument;
    }

    if (!checkFields(vDoc.forms.work)) { return false; }
    
    var vTableName = vDoc.body.getAttribute('csTableName');
    if (vTableName && vTableName!='' && vDoc.forms.save!= undefined)
      fCopyAll(vDoc.forms.work, vDoc.forms.save, vTableName + '_Restoration');

    xml = getXmlPrcHeader(vMode, vTableName);
    var vUAF = vDoc.body.getAttribute('csUseAllFields');

    for (i=0; i < vDoc.forms.work.elements.length; i++) {
      obj = vDoc.forms.work.elements[i];

      if (obj.getAttribute('csUKValue') != undefined && obj.tagName != 'FORM') {
        if (rec != '') {
          xml += rec;
          xml += '  </record>';
        }
        var vUKValue = obj.getAttribute('csUKValue').replace(/\'/g, "");
        rec = '  <record UniqueKeyValue="' + vUKValue + '">\n';
      }
      var vFName = obj.getAttribute('csFieldName');
    // dch 5 Mars 2004 verrue : des input contenant les libellé des champs liés
    // ont AUSSI l'attribut csFieldName !!!!!!!!! ==> il ne faut pas les envoyer
    // pour la saisie ou la modif
      if (vFName != undefined) {
          if (isLabel(obj)) {
              vFName = undefined;
          }
      }
      
      if ((vFName != undefined) && (obj.getAttribute('csChanged') == 'true' || vUAF == 'yes') && (obj.getAttribute('csDone') != 'yes')) {
        var vCtrl = obj.getAttribute('csControl');
        if (obj.getAttribute('csType') == 'XML') {
          var vXml = getXMLFields(obj);
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + vXml + '</' + obj.getAttribute('csFieldName') + '>\n';
        } else if (obj.tagName == 'INPUT' && obj.type == 'checkbox') {
          var vTrueVal = getControlParam(vCtrl, 'checked');
          var vFalseVal = getControlParam(vCtrl, 'unchecked');
          var vCBValue = vFalseVal;
          if (obj.checked) vCBValue = vTrueVal;
          rec += '    <' + vFName + '>' + vCBValue + '</' + vFName + '>\n';
        } else if (obj.tagName == 'TEXTAREA') {
          if (getControlIndexOf(vCtrl, 'xml:') != -1 || getControlIndexOf(vCtrl, 'html:') != -1) {
            rec += '    <' + obj.getAttribute('csFieldName') + '>[[[[[[' + obj.value + ']]]]]]</' + obj.getAttribute('csFieldName') + '>\n';
          } else {
            rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.value + '</' + obj.getAttribute('csFieldName') + '>\n';
          }

//HCL 03/05/2002 D
        } else if (obj.tagName == 'SELECT' && obj.getAttribute('csMulti') == 'checked') {
          rec += '    <' + vFName + '>';
      var strValues = '' ;

      var vSep = obj.getAttribute('csSep');
      if(vSep == null ){vSep =';';}

      for (var k = 0; k < obj.options.length; k++){
        if (obj.options[k].selected == true){
          strValues += obj.options[k].value + vSep;
        }
      }
      strValues = strValues.substring(0,strValues.length - vSep.length);
            rec += strValues;
            rec += '</' + vFName + '>\n';
//HCL 03/05/2002 F

        } else {
          rec += '    <' + obj.getAttribute('csFieldName') + '>' + obj.value + '</' + obj.getAttribute('csFieldName') + '>\n';
        }
      }
    } // for (i...)

    if (rec != '') {
      xml += rec;
      xml += '  </record>\n';
    }


    xml += getXmlPrcFooter(vMode, vDoc.body.getAttribute('csTableName'), vDoc.body.getAttribute('csDBName'));
//    alert(xml);
    vDoc.forms.send.xmldata.value = xml;
    if (vCallMode == null || vCallMode.toLowerCase() != 'xmlhttp') {
      vDoc.forms.send.submit();
    }
//    vDoc.forms.send.submit();
    return true;
  } // function


function getXMLFields(obj) {
  if (!vIE) return;
  var xml = '';

//  try 
    for (var i = 0; i < obj.all.length; i++) {
      var elt = obj.all[i];
      if ((elt.getAttribute('csDone') != "yes") && (elt.getAttribute('csFieldName') != undefined)) {
        if (elt.getAttribute('csType') == "XML") {
          var vXml = getXMLFields(elt);
          if (vXml != '') {
            xml +=  '<' + elt.getAttribute('csFieldName') + '>\n' + vXml +  '</' + elt.getAttribute('csFieldName') + '>\n';
          }
        } else if (elt.tagName == 'DIV' && elt.innerHTML != '') {
          xml += '    <' + elt.getAttribute('csFieldName') + '>[[[[[[' + elt.innerHTML + ']]]]]]' + '</' + elt.getAttribute('csFieldName') + '>\n';
        } else if (elt.tagName == 'TEXTAREA' && elt.innerText != '') {
          xml += '    <' + elt.getAttribute('csFieldName') + '>[[[[[[' + elt.innerText + ']]]]]]' + '</' + elt.getAttribute('csFieldName') + '>\n';
        } else if (obj.tagName == 'INPUT' && obj.type == 'checkbox') {
          var vCtrl = obj.getAttribute('csControl');
          var vTrueVal = getControlParam(vCtrl, 'checked');
          var vFalseVal = getControlParam(vCtrl, 'unchecked');
          var vCBValue = vFalseVal;
          if (obj.checked) vCBValue = vTrueVal;
          rec += '    <' + vFName + '>' + vCBValue + '</' + vFName + '>\n';
        } else {
          if (elt.value != '') {
            xml += '    <' + elt.getAttribute('csFieldName') + '>' + elt.value + '</' + elt.getAttribute('csFieldName') + '>\n';
          }
        }
        elt.setAttribute('csDone', 'yes');
      }
    }
//  catch (e)  return; 
  return xml;
}

/**
* This function can be used by other functions which prepare the XML-RPC string
* to send to the Modify servlet. It prepares the XML element for on field whose
* object is passed in the unique parameter  
*/
function getFieldString(obj) {
  var rec = '';
  var vFName = obj.getAttribute('csFieldName');
  var vCtrl = obj.getAttribute('csControl');
  if ((vFName != undefined) && (obj.getAttribute('csChanged') == 'true' || vUAF == 'yes') && (obj.getAttribute('csDone') != 'yes')) {
    if (obj.getAttribute('csType') == 'XML') {
      var vXml = getXMLFields(obj);
      rec += '    <' + vFName + '>\n[[[[[[' + vXml + ']]]]]]</' + vFName + '>\n';
    } else if (obj.tagName == 'DIV') {
      rec += '    <' + vFName + '>' + obj.innerHTML + '</' + vFName + '>\n';
    } else if (obj.tagName == 'INPUT' && obj.type == 'checkbox') {
      var vTrueVal = getControlParam(vCtrl, 'checked');
      var vFalseVal = getControlParam(vCtrl, 'unchecked');
      var vCBValue = vFalseVal;
      if (obj.checked) vCBValue = vTrueVal;
      rec += '    <' + vFName + '>' + vCBValue + '</' + vFName + '>\n';
    } else if (obj.tagName == 'TEXTAREA') {
        if (getControlIndexOf(vCtrl, 'xml:') != -1 || getControlIndexOf(vCtrl, 'html:') != -1) {
          rec += '    <' + vFName + '>[[[[[[' + obj.innerText + ']]]]]]</' + vFName + '>\n';
        } else {
          rec += '    <' + vFName + '>' + obj.innerText + '</' + vFName + '>\n';
      }
    } else if (obj.tagName == 'IMG') {
      rec += '    <' + vFName + '>' + obj.src + '</' + vFName + '>\n';
    } else if (obj.tagName == 'SELECT' && obj.getAttribute('csMulti') == 'checked') {
      rec += '    <' + vFName + '>';
      var strValues = '' ;

      var vSep = obj.getAttribute('csSep');
      if(vSep == null ){vSep =';';}

      for (var k = 0; k < obj.options.length; k++){
        if (obj.options[k].selected == true){
          strValues += obj.options[k].value + vSep;
        }
      }
      strValues = strValues.substring(0,strValues.length - vSep.length);
      rec += strValues;
      rec += '</' + vFName + '>\n';
    } else {
      rec += '    <' + vFName + '>' + obj.value + '</' + vFName + '>\n';
    }
  }
  return rec;
}


function fBuildValue(p_sVal, p_sType)
{
  sRet='';
  if(null!=p_sVal && null!=p_sType) {
    if('Numeric'==p_sType) {
      sRet=p_sVal;
    } else {
      sVal=fTrim(p_sVal);
      iLng=sVal.length;
      if("'"==sVal.substring(0, 1) && "'"==sVal.substring(iLng-1, iLng))
        sRet=sVal;
      else
        sRet="'"+sVal+"'";
    }
  }
  return sRet;
}

function fBeginsWithOper(p_vElt)
{
  sRet=null;
  sVal=(null==p_vElt)?(null):(p_vElt.value);
  if(null!=sVal) {
    sOp = sVal.substring(0, 2);
    sTmp = sVal.substring(2, sVal.length);
    if('< '==sOp || '> '==sOp || '= '==sOp) {
      sRet = sOp + fBuildValue(sTmp, p_vElt.getAttribute('csType'));
    } else {
      sOp = sVal.substring(0, 3);
      sTmp = sVal.substring(3, sVal.length);
      if('<= '==sOp || '>= '==sOp || '!= '==sOp || '<> '==sOp)
        sRet = sOp + fBuildValue(sTmp, p_vElt.getAttribute('csType'));
    }
  }
  return sRet;
}

function fWhere(vDoc, p_sSep)
{
  var vWhere = '';
  var vOper = '';
  var sSep=' ';
  var sQM=vDoc.body.getAttribute('csQueryMode');
  var sFunc=vDoc.body.getAttribute('csAutoFunc');

  if(!(sQM))
    sQM='';
  if(p_sSep)
    sSep=p_sSep;
  if(!(sFunc))
    sFunc='';
  for(var j=0; j<vDoc.forms.length; j++) {
    var vFo = vDoc.forms[j];
    //for (var i = 0; i < vDoc.all.length; i++)
    for (var i = 0; i < vFo.elements.length; i++) {
      //var vElt = vDoc.all[i];
      var vElt = vFo.elements[i];
    if (vElt.getAttribute('csType') == 'oper') {
      var sOpVal = vElt.getAttribute('value');
        if(!sOpVal || '' == sOpVal) sOpVal = 'AND';
        if (vOper == '')  vOper = sSep + sOpVal + sSep;
        if('FullText' == sQM) vOper=vOper.toUpperCase();
    } else {
      if (vElt.getAttribute('csFieldName') != undefined && vElt.value && vElt.value!="") {
        if (vWhere != '') vWhere += vOper;
        sVal=null;
        if(null!=(sVal=fBeginsWithOper(vElt))) {
          vWhere += vElt.getAttribute('csFieldName') + sVal;
        } else {
          if('FullText'!=sQM) {
            if (vElt.getAttribute('csType') == 'Numeric') {
              vWhere += vElt.getAttribute('csFieldName') + sSep+'='+sSep + vElt.value;
            } else {
              if(' '==sSep)
                vWhere += sFunc+'('+vElt.getAttribute('csFieldName')+')'+sSep+"Like"+sSep+sFunc+"('"+vElt.value+"%')";
              else    
                vWhere += vElt.getAttribute('csFieldName') + sSep+"Like"+sSep + vElt.value;
            }
          } else {
            if(' '==sSep) {
              vWhere += '('+vElt.getAttribute('csFieldName')+':'+addExpBalises(vElt.value, null, vElt.getAttribute('csControl'))+')';
            } else {
              vWhere += vElt.getAttribute('csFieldName')+sSep+':'+sSep+addExpBalises(vElt.value, null, vElt.getAttribute('csControl'));
            }
          }
        }
        vOper = '';
      } // if csFieldName
    } // if oper
  } // for
  }
  return vWhere;
}


function putQuery(vForm, vDBName, vTableName)
{
  var str = getXmlPrcHeader(vMode, vTableName);

  for (var i = 0; i < vForm.elements.length; i++) {
    var elt = vForm.elements[i];
    if (elt.getAttribute('csFieldName') != undefined && elt.value != '') {
      str += elt.getAttribute('csFieldName') + '=' + elt.value;
    }
  }
  str += getXmlPrcFooter(vMode, vTableName, vDBName);
}

document.onmouseover = doMouseOver;
document.onmouseout = doMouseOut;
document.onmouseup = doMouseUp;
document.onkeypress = doKeyPress;
fPrepFieldChanges();

function fPrepFieldChanges() {
  for (var j = 0; j < document.forms.length; j++) {
    var vForm = document.forms[j];
    for (var i=0; i < vForm.elements.length; i++) {
      var vElt = vForm.elements[i];
      if (vElt.getAttribute('csFieldName') != undefined && vElt.onchange == null) {
        vElt.onchange = doFieldChange;
      }
    }
  }
}

// Special es-photos (IE uniquement)
function fSelection(NumBegin, NumEnd){
  if (!vIE) { return; }
  var i = 0;
  // automatic selection of image group  
  if ((NumBegin*1) <= (NumEnd*1)){
    for (i = 0; i < document.all.length; i++) {
      if (document.all[i].className != undefined) {
      if(document.all[i].className=='imgNoSel'){
          if(document.all[i-1].csNum >= (NumBegin*1) ){
          document.all[i].className='imgSel';
            document.all[i+1].value = document.all[i+1].csValue;
        }
          if(NumEnd == document.all[i-1].csNum) break;
      }
      }
    }
  }else{
    var vTempo = 0;
    vTempo = NumBegin;
    NumBegin = NumEnd;
    NumEnd = vTempo;
    for (i = 0; i < document.all.length; i++) {
      if (document.all[i].className != undefined) {
      if(document.all[i].className=='imgNoSel'){
          if(document.all[i-1].csNum >= (NumBegin*1) && document.all[i-1].csNum <= (NumEnd*1) ){
          document.all[i].className='imgSel';
            document.all[i+1].value = document.all[i+1].csValue;
        }
          if(NumEnd == document.all[i-1].csNum) break;
        }
      }
      }
    }
}

// Special es-photos
var csNumBegin = 0
var csNumEnd = 0

// Special es-photos (IE uniquement)
function fSelectImage(vCtr){
  if (!vIE) { return; }

  var i = vCtr.sourceIndex - 1;

  if(event.ctrlKey == true){
    //alert("CTRL");
    if(vCtr.className=='imgSel'){ //d&eacute;-s&eacute;lection
      vCtr.className='imgNoSel';
      document.all[i].value = '';
    }else{ //s&eacute;lection
      vCtr.className='imgSel';
       document.all[i].value = document.all[i].csValue;
    }
  }else if(event.shiftKey){
    //alert("SHIFT");
    csNumEnd = document.all[i].csNum;
    if (csNumBegin != null || csNumBegin != 0){
      csNumEnd = document.all[i].csNum.valueOf();
      fSelection (csNumBegin,csNumEnd);
    }
  }else{
    var csPrevSelect = csNumBegin;
    var vcEtatPrec = vCtr.className

    csNumBegin = document.all[i].csNum.valueOf();
    //D&eacute;-s&eacute;lection des autres images
    // EFR: Remplacement de i par j
    for (var j=0; j < document.all.length; j++) {
      if (document.all[j].className != undefined) {
        if(document.all[j].className=='imgSel') {
          document.all[j].className='imgNoSel';
          document.all[j+1].value = '';
      }
      }
    }
    // EFR: Fin

    //EFR: Remplacement de i-2 par i
    //d&eacute;-s&eacute;lection si même s&eacute;l&eacute;ction
    if(csNumBegin == csPrevSelect && vcEtatPrec == 'imgSel'){
      vCtr.className='imgNoSel';
      document.all[i].value = '';
    }else{
    //S&eacute;lection
      vCtr.className='imgSel';
       document.all[i].value = document.all[i].csValue;
    }
    // EFR: Fin

  }
}
// HCL 31/10/2001 F 12/11/2001


//Determine if HTML elt is a label Field or not   
function isLabel(elt) {
  var isALabel = false;
  if (elt) {
    var id  = elt.id;
    if (id) {
      var idLength = id.length;
      if (idLength >4)
        if (id.substr(idLength-4, 4) == "_lbl" )
          isALabel = true;
    }
  }
  return isALabel;
}

function getAssociatedLabelField( doc, elt) {
   var lid  = elt.id + "_lbl";

   var ellabel = doc.getElementById(lid);

  return ellabel;
}

function getAssociatedKeyField( doc, elt) {
   var kid  = getNameFromLabel(elt.id);

   var elkey = doc.getElementById(kid);

  return elkey;
}

function getNameFromLabel(namelabel) {
  var name = '';
  if (namelabel) {
      var nLength = namelabel.length;
      if (nLength >4) {
          name = namelabel.substr(0,nLength-4);
      }
  }
  return name;
}



function fCopyAll(vForm, vSaveForm, vType)
{
  if (vSaveForm == undefined) {
    alert("Il n'y a pas de formulaire à copier");
  } else {
    var vStr = '';
    for (var i = 0; i < vForm.elements.length; i++) {
      vElt = vForm.elements[i];
      var vFName = vElt.getAttribute('csFieldName');
      var vCopy = vElt.getAttribute('csCopy');
      if (isLabel(vElt))
        vStr += vElt.id + ':' + escape(vElt.value) + '¤';
    //HCL    if (vElt.csFieldName != undefined && vElt.csFieldName != '' && vElt.csCopy != 'unchecked' && vElt.value != '') 
      if (vFName != undefined && vFName != '') {
        if ((( vCopy == 'yes' || vCopy == 'ifNotEmpty' ) && vElt.value != '') || 
            ((vCopy != 'unchecked' || vCopy == 'yes' ) && vElt.value == '') ||
            (vCopy == undefined) ) {
                vStr += vFName + ':' + escape(vElt.value) + '¤';
        }
      }
    }
    vSaveForm.AttName.value = vType;
    vSaveForm.AttValue.value = vStr;
    vSaveForm.submit();
  }
}

function fPasteAll(vForm, vType, vSaveForm)
{
  var vUrl = 'GetAttribute?Template=Paste&Name=' + vType + '&Split=yes';
/* modifié le 10/04/2003: compatibilité Mozilla (incompatible avec précédente version) */
  var xmlHttp = XmlHttp.create();
  var bAsync = false;
  var vVals = new Array();

  xmlHttp.open('POST', vUrl, bAsync);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.setRequestHeader('charset', 'UTF-8');
  xmlHttp.setRequestHeader('RequestType', 'XmlHttpStream');
  xmlHttp.send('');
  var vStr = xmlHttp.responseText;
  var i=0, pos = 0, idx = 0;
  while((idx = vStr.indexOf('¤',pos)) != -1)
  {
    var vSub = vStr.substring(pos,idx);
    vVals[i++] = vSub;
    pos = idx+1;
  }
//  var vVals = window.showModalDialog(vUrl);

  for (var i = 0; i < vVals.length; i++) {
    var vStr = vVals[i];
    var p = vStr.indexOf(':');
    if (p != -1) {
      var vName = vStr.substr(0, p);
      var vValue = unescape(vStr.substr(p+1));
      
      try {
          var vElt = vForm.elements[vName];
          var vPaste = vForm.elements[vName].getAttribute('csPaste');
          var isALabel = isLabel(vElt);
          if (vPaste != 'no' || vPaste == undefined  ) {
              if (( vPaste == undefined ) || (vPaste == 'yes' ) ||
                  (vPaste == 'ifEmpty' && vElt.value == '' ) ||
                  (vPaste == 'ifNotEmpty' && vElt.value != '' )) {
                      vElt.value = vValue;
                      if (!isALabel)
                        vElt.setAttribute('csChanged', 'true');
              }
              else if (vPaste == 'add' ) {
                vElt.value += vValue;
                if (!isALabel)
                  vElt.setAttribute('csChanged', 'true');
                if (vElt.getAttribute("type") == "checkbox") {
                   if (vElt.value == "1") {
                      vElt.checked = true;
                   }
                   else {
                      vElt.checked = false;
                   }
                }                  
              }
          }
      }
      catch (e) {}
    }
  }
}

function fCopyKW(vForm, vSaveForm, vType)
{
  if (vSaveForm == undefined) {
    alert("Il n'y a pas de formulaire à copier");
  } else {
    var vStr = '';
//    var vMCNum = 0;
// g&eacute;n&eacute;ration de la chaîne "T1:valeur1¤T2:valeur2¤..."
    for (var i = 0; i < vForm.elements.length; i++) {
      vElt = vForm.elements[i];
      var vNbr = i+1;
      var vID = 'T' + vNbr;
          if (vElt.tagName == 'INPUT' && vElt.type=='text') {
            vStr += vID + ':' + vElt.value + '¤';
          }
//      vMCNum++;
    }
    vSaveForm.AttName.value = vType;
    vSaveForm.AttValue.value = vStr;
    vSaveForm.submit();
  }
}

function fPasteKW(vDoc, vType, vSaveForm) {
  var i = 0;
  var vForm = vDoc.forms.work;
  var vUrl = 'GetAttribute?Template=Paste&Name=' + vType + '&Split=yes';
  var vVals = window.showModalDialog(vUrl);

  var vNbVals = vVals.length;
  var vNbCells = 0;
  var vNbNewCols;

// calcul du nombre cases existantes
  var vAll = document.getElementsByTagName('INPUT');
  for (i = 0; i < vAll.length; i++) {
    if (vAll[i].type == 'text') {
      vNbCells++;
    }
  }
// calcul du nombre de colonnes &agrave; ajouter (une colonne = 14 cellules)
  vNbNewCols = (vNbVals - vNbCells) / 14;

// cr&eacute;ation des nouvelles colonnes (pour ins&eacute;rer les nouvelles valeurs)
  if (vNbNewCols > 0){
    for (i = 0; i < vNbNewCols; i++) {

      var obj = vDoc.getElementById('mctr');
      var vCell = obj.insertCell();
      vCell.onkeydown = obj.cells[0].onkeydown;
      vCell.onkeyup = obj.cells[0].onkeyup;
      vCell.onmouseup = obj.cells[0].onmouseup;
      vCell.setAttribute('csFieldName',obj.cells[0].getAttribute('csFieldName'));
      vCell.setAttribute('csType',obj.cells[0].getAttribute('csType'));
      vCell.setAttribute('csMulti',obj.cells[0].getAttribute('csMulti'));
      vCell.setAttribute('csControl',obj.cells[0].getAttribute('csControl'));
      vCell.innerHTML = obj.cells[0].innerHTML;
    }
  }

// r&eacute;g&eacute;n&eacute;ration compl&egrave;te des IDs de toutes les cellules (existantes + nouvelles)
    var vCtr = 0;
    var vElt;
    vAll = document.getElementsByTagName('INPUT');
    for (i = 0; i < vAll.length; i++) {
      vElt = vAll[i];
      if (vElt.tagName == 'INPUT' && vElt.getAttribute('csFieldName') != undefined) {
        vCtr++;
        vElt.id = 'T' + vCtr;
      }
    }

// coller les valeurs dans les bonnes cellules
  for (i = 0; i < vVals.length; i++) {
    var vStr = vVals[i];
    var p = vStr.indexOf(':');
    if (p != -1) {
      var vID = vStr.substr(0, p);
      var vValue = vStr.substr(p+1);
      try {
          vElt = vDoc.getElementById(vID);
              var vPaste = vElt.getAttribute('csPaste');
          if (vPaste != 'no' || vPaste == undefined  ) {
          if ( vPaste == undefined ){
                vElt.value = vValue;
                vElt.setAttribute('csChanged', 'true');
          }

              if (vPaste == 'yes' ) {
                vElt.value = vValue;
                vElt.setAttribute('csChanged', 'true');
              }
              if (vPaste == 'ifEmpty' && vElt.value == '' ) {
                vElt.value = vValue;
                vElt.setAttribute('csChanged', 'true');
              }
              if (vPaste == 'ifNotEmpty' && vElt.value != '' ) {
                vElt.value = vValue;
                vElt.setAttribute('csChanged', 'true');
              }
              if (vPaste == 'add' ) {
                vElt.value += vValue;
                vElt.setAttribute('csChanged', 'true');
              }
        }
      }
      catch (e) {}
    }
  }
}



//HCL 24/01/2002
// Fonction TRIM efface les espaces avant et apr&egrave;s la chaine
function fTrim(arg){
  arg=arg.replace(/^[\s]+/g,"");
  arg=arg.replace(/[\s]+$/g,"");
  return arg;
}

// Fonction LTRIM efface les espaces avant la chaine
function fLTrim(arg){
  arg=arg.replace(/^[\s]+/g,"");
  return arg;
}

// Fonction RTRIM efface les espaces apr&egrave;s la chaine
function fRTrim(arg){
  arg=arg.replace(/[\s]+$/g,"");
  return arg;
}

// Fonction f1To2Quotes double les simple quotes d'une expression.
// ??? ne fonctionne pas dans TTfunctions mais dans les templates ?
/*
function f1To2Quotes(arg){
  var argOut = arg.replace(/[']+/g,"''");
//  .replace(/[\']+/g,'\'\'');
  return argOut;
}
*/

//sisi
function fDuplikot(p_sVal, p_cQuot) {
  var sRet="", ix, c, lnVal;
  if(p_sVal && p_cQuot) {
    for(ix=0, lnVal=p_sVal.length; ix<lnVal; ix++) {
      sRet+=(c=p_sVal.charAt(ix));
      if(p_cQuot==c)
        sRet+=p_cQuot;
    }
  }
  return sRet;
}

//HCL 30/05/2002
//
function fnExecScr(obj){
  var vControl = obj.getAttribute('csControl');
  var vCType = vControl.substr(0, 2);
  var vCObj  = vControl.substr(3);
  var vScript = vControl.substr(3);;
  var vElt = obj.id;
  window.execScript(vScript);

}
function fSaisieExt(obj){
  var vValue = obj.getAttribute('value');
  vValue = vValue.replace(/[\+]+/g,"~");
  vValue = vValue.replace(/[\&]+/g,"¤");
  var vReturnField = obj.getAttribute('csFname');
  var vName = obj.Name;
  var vId = obj.id;
    vUrl = 'ShowPage?UseFM=yes&Template=SaisieControl'  + '&returnField=' + vReturnField
         + '&value=' + vValue;
  window.open(vUrl,null,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=200, top= 200");
}

//HCL 03/06/2002
function fMultiOptionUpdate(){
  try {
    var str = "";
  var vForm = document.forms.work;
  for (var i = 0; i < vForm.elements.length; i++) {
    var elt = vForm.elements[i];
    if (elt.tagName == "SELECT") {
      if (elt.getAttribute('csMulti') == "checked" && elt.getAttribute('csSep') != '' && elt.getAttribute('csValue') != '') {
        vSep = elt.getAttribute('csSep');
        vValues = elt.getAttribute('csValue');
          tabl = vValues.split(vSep);
        for (var j = 0; j < tabl.length; j++){
          for (var k = 0; k < elt.options.length; k++){
            if (elt.options[k].value == tabl[j]){
              elt.options[k].selected = true;
            }
          }
        }
      }
    }
  }
  }
  catch (e) {
  }
}

//HCL 13/06/2002
function fSimpleOptionUpdate(){
  try {
    var str = "";
  var vForm = document.forms.work;
  for (var i = 0; i < vForm.elements.length; i++) {
    var elt = vForm.elements[i];
    if (elt.tagName == "SELECT") {
      if (elt.getAttribute('csMulti') == "unchecked" && elt.getAttribute('csSep') == '' && elt.getAttribute('csValue') != '') {
        vSep = elt.getAttribute('csSep');
        vValues = elt.getAttribute('csValue');
        for (var k = 0; k < elt.options.length; k++){
          if (elt.options[k].value == vValues){
            elt.options[k].selected = true;
          }
        }
      }
    }
  }
  }
  catch (e) {
  }
}

function fInitCheckBoxFields(){
    var str = "";
    var vForm = document.forms[0];
    for (var i = 0; i < vForm.elements.length; i++) {
      var elt = vForm.elements[i];
      if (elt.tagName == 'INPUT' && elt.type == 'checkbox' && elt.value != 'ON') {
        if (elt.value == '1' || elt.value == 'checked' || elt.value == 'true' || elt.value == 'yes') {
          elt.checked = true;
        } else {
          elt.checked = false;
        }
      }
    }
}


//HCL 13/06/2002
function fInitFields(){
  fInitCheckBoxFields();
  fMultiOptionUpdate();
  fSimpleOptionUpdate();
  vChangesSaved = false;
}

function fRelInsert(obj)
{
  var vCtrl = getControlString(obj);
//  vCtrl = vCtrl.replace(/;/g, "&");
  window.open('SetAttribute?Name=RecKey&Value=' + document.getElementById('csUKValue').value
        + '&redirect=GetForm?Template=RelInsert;' + vCtrl + ';OpenerField='
        + obj.getAttribute('csFieldName'), '_blank');
}

function fRelIdents(obj)
{
  var vCtrl = getControlString(obj);
//  vCtrl = vCtrl.replace(/;/g, "&");
  window.open('SetAttribute?Name=RecKey&Value=' + document.getElementById('csUKValue').value
        + '&redirect=/GetRecords?Template=RelIdents;' + vCtrl + ';OpenerField='
        + obj.getAttribute('csFieldName'), '_blank');
}


function fGetEltOfACell (obj, nRow, pName) {
    var eRet=null;
    if (obj != null){
      var nbc = obj.rows[nRow].cells.length;
      for (var j = 0; j < nbc; j++) {
        var vCell = obj.rows[nRow].cells[j];
      var vAll = vCell.getElementsByTagName('INPUT');
      for (var k = 0; k < vAll.length; k++) {
        var elt = vAll[k];
        if (elt.type == 'text' && elt.name == pName) eRet=elt;
        }
      }
    }
    return eRet;
  }


  function SetCtrl(vText, vReturnField, rowIndex) {
    var controlObj = null;
    var openerdocument = window.parent.opener.document;
    if (rowIndex)
       controlObj = openerdocument.getElementById("control_" + rowIndex);
    else {
      var obj = openerdocument.getElementById('fields');
      if (obj) {
        var nbr = obj.rows.length;
        var nbc = obj.rows[1].cells.length;
        for (var i = 0; i < nbr; i++) {
          var vCell = obj.rows[i].cells[nbc-2];
          var vAll = vCell.getElementsByTagName('INPUT');
          for (var k = 0; k < vAll.length; k++) {
            var elt = vAll[k];
            if (elt.getAttribute('csFname') == vReturnField) {
              controlObj = elt;
              break;
            }
          }
        }
      }
    }
    if (controlObj) {
      controlObj.value = vText;
      window.parent.close()
    }
  }

  function fAddOption(obj, pLabel, pName, pSelectValue)
  {
    var nbOptions = obj.options.length;
    var vSelected = false;
    if (pName == pSelectValue)
      vSelected = true;
    var vNewOption = new Option( pLabel,pName, false, vSelected);
    obj.options[nbOptions] = vNewOption;
  }


  function fDeleteOptions(obj)
  {
    var sRet=obj.value;
    for (var i=obj.options.length-1; i>=0; i--)
      obj.options[i]=null;
    return sRet;
  }


  function fmodifyRowBG (obj, className) {
    if (obj!= null  && className!=null) {
      obj.className = className;
      var nbr = obj.cells.length;
      for (var i = 0; i < nbr; i++) {
        var vCell = obj.cells[i];
        var vAll = vCell.getElementsByTagName('INPUT');
        for (var j = 0; j < vAll.length; j++) {
          var elt = vAll[j];
              elt.className = className;
        }
      }
    }
  }
//aide en ligne D
function fOnLoad() {
  //confirm("fOnLoad");
  if(vIE) {
    if(null!=document)
      if(null==document.onkeyup)
        document.onkeyup=doKeyUp;
  } else {
    if(null!=document) {
      if(null==document.onkeyup)
        document.onkeyup=fOnKeyUpNS;
      for(var ixF=0; ixF<document.forms.length; ixF++) {
        var vFrm = document.forms[ixF];
        if(null!=vFrm) {
          for(var ixE=0; ixE<vFrm.elements.length; ixE++) {
            var vElt = vFrm.elements[ixE];
            if(null!=vElt)
              if(null==vElt.onkeyup)
                vElt.onkeyup=fOnKeyUpNS;
          } //for ixE
        }
      } //for ixF
    }
  }
}
function fOnKeyUpNS(p_event) {
  //confirm("fOnKeyUpNS");
  return fOnlineHelp(p_event);
}
function fOnlineHelp(p_event) {
  //confirm("fOnlineHelp");
  var vRet=false;
  if(p_event.altKey) { //la touche 'Alt' est enfonc&eacute;e
    elSrc = ((vIE)?(p_event.srcElement):(p_event.target)) ;
    if(72==p_event.keyCode) { //'h'
      fOnlineHelpOnField(elSrc);
      vRet=true;
    } else if(80==p_event.keyCode) { //'p'
      fOnlineHelpOnPage(elSrc);
      vRet=true;
    } else if(84==p_event.keyCode) { //'t'
      fOnlineHelpOnPage(elSrc, 'table');
      vRet=true;
    }
  }
  if(!vRet) {
    fOnKeyUpAssistant(p_event);
    vRet=true;
  }
  return vRet;
}
function fOnlineHelpOnField(p_elSrc) {
  //confirm("fOnlineHelpOnField : "+p_elSrc.tagName+" : "+p_elSrc.value);
  var elBody=document.body;
  if(null!=p_elSrc && null!=elBody) {
    if('INPUT'==p_elSrc.tagName || 'TEXTAREA'==p_elSrc.tagName) {
      var sDBName=elBody.getAttribute('csDBName');
      var sTableName=elBody.getAttribute('csTableName');
      var sFieldName=p_elSrc.getAttribute('csFieldName');
      var sLang=p_elSrc.getAttribute('csLang');
      if(null==sLang || ""==sLang)
        sLang=elBody.getAttribute('csLang');
      if(null==sLang || ""==sLang)
        sLang="FR";
      var sCom="";
      sCom+="GetRecords?Template=OnlineHelp";
      sCom+="&DBName="+sDBName;
      sCom+="&ObjName="+sTableName;
      sCom+="&EltName="+sFieldName;
      sCom+="&ObjType=field";
      sCom+="&Lang="+sLang;
      //if(confirm(sCom))
      window.open(sCom, null, "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=250, top=250");
    }
  }
}
function fOnlineHelpOnPage(p_elSrc, vTable) {
  //confirm("fOnlineHelpOnPage");
  var elBody=document.body;
  if(null!=p_elSrc && null!=elBody) {
    var sDBName=elBody.getAttribute('csDBName');
    var sTemplate=elBody.getAttribute('csTemplate');
    var vTableName = elBody.getAttribute('csTableName');
    var sLang=elBody.getAttribute('csLang');
    if(null==sLang || ""==sLang)  sLang="FR";
    var sCom="";
    sCom+="GetRecords?Template=OnlineHelp";
    sCom += "&ObjType=page";
    sCom += "&ObjName=" + sTemplate;
    if (vTable == "table") {
      sCom += "&EltName=" + vTableName;
    } else {
      sCom += "&EltName=-";
    }
    sCom+="&Lang="+sLang;
    //if(confirm(sCom))
    window.open(sCom, null, "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=250, top=250");
  }
}
//aide en ligne F

function fControl(vFName, vAction, vParams)
{
  var vForm = document.forms.control;
  vForm.innerHTML = '';
  vForm.action = vAction;
  var vWork = document.forms.work;
  var vTab = vParams.split(';');
  for (var i = 0; i < vTab.length; i++) {
    var vPar = vTab[i];
    var vPos = vPar.indexOf('=');
    if (vPos > -1) {
      var vPName = vPar.substr(0, vPos);
      var vPVal = vPar.substr(vPos + 1);
      var vNew = document.createElement('<input name="' + vPName + '" type="hidden" />');
      if (vPVal.substr(0, 1) == '@') {
        vNew.value = vWork.elements(vPVal.substr(1)).value;
      } else {
        vNew.value = vPVal;
      }
      vForm.appendChild(vNew);
    }
  }
//  alert(vForm.outerHTML);
  vForm.submit(); 
}


function fSendCtrlSelection(obj)
{
  var vFormSend = document.forms.send;
  var vFormWork = document.forms.work;
  
  var vTableName = vFormWork.TableName.value;
  var vDBName = vFormWork.DBName.value;
  vFormSend.DBName.value= vDBName;
  if (obj.name == "TableName")
    vFormSend.SrcTableName.value= vTableName;
  vFormSend.submit();
}


function AskConfirmToQuit(vMode, vDocument) {
  var vElt;  
  var vAreFieldsChanges = false;
  //alert ("AskConfirmToQuit");
  //la m&eacute;thode doFieldChange n'est appel&eacute;e que lorsque l'&eacute;l&eacute;ment perd le focus.
  document.forms.work.resetCmd.focus();
  var j = 0; 
  if (!vChangesSaved) {
    for (j = 0; j < document.forms.length; j++) {
      var vForm = document.forms[j];
      for (var i=0; i < vForm.elements.length; i++) {
        vElt = vForm.elements[i];
        if (vElt.getAttribute('csFieldName') != undefined) {
          if (vElt.getAttribute('csChanged')== 'true') {
            vAreFieldsChanges = true;
            break;
          }
        }
      }
    }
    var vDivs = document.getElementsByTagName('DIV');
    for (j = 0; j < vDivs.length; j++) {
      vElt = vDivs[j];
      if (vElt.getAttribute('csFieldName') != undefined && vElt.getAttribute('csChanged')== 'true') {
        vAreFieldsChanges = true;
        break;
      }
    }
  }

  if (vAreFieldsChanges) {
    var vMess = "Voulez-vous sauvegarder vos modifications ?\n \n";
    vMess += "Cliquez sur OK ou appuyez sur la touche [Entrée] pour enregistrer.\n"
    vMess += "Sinon cliquez sur Annuler ou [Echap]."
    var vQuery = confirm (vMess);
    if (vQuery == true ) sendData(vMode, vDocument)    
  }
  vChangesSaved = false;
  
  // free locked record  
  var vEltKey = document.getElementById('csUKValue');
  if (vEltKey != null && vEltKey.value != '') {
    var vUrl = 'admin/locks/free.dfl?DBName=' + document.body.getAttribute('csDBName')
             + '&TableName=' + document.body.getAttribute('csDBTable') + '&RecordKey=' + vEltKey.value
             + '&Return=none';
    //window.open(vUrl, 'hframe');
    sendRequest(vUrl, nope);
  }
  
}

function fOnKeyUpAssistant(p_event) {
//  try {
    //confirm("fOnKeyUpAssistant");
    var sCom = "";
    var sQM        = document.body.getAttribute('csQueryMode');
    var sTC        = document.body.getAttribute('csTermCount');
    var sWork      = document.body.getAttribute('csWork');
    var sDBName    = document.body.getAttribute('csDBName');
    var sDBTable   = document.body.getAttribute('csDBTable');
    var sTableName = document.body.getAttribute('csTableName');
    var sTmpl      = document.body.getAttribute('csTemplate');

    var vEltSrc=null;
    if (vIE) vEltSrc = p_event.srcElement;
    else     vEltSrc = p_event.target;
    var sFld  = vEltSrc.getAttribute('csFieldName');
    var sFlds = vEltSrc.getAttribute('csFields');
    var sTyp  = vEltSrc.getAttribute('csType');
    var sMulti= vEltSrc.getAttribute('csMulti');
    var sSep  = vEltSrc.getAttribute('csSep');
    var sInt  = vEltSrc.getAttribute('csInterval');
    var sVal  = fGetLastVal(vEltSrc.value, sMulti, sSep); //vEltSrc.value;

    var sProp=null;
    if(document.forms[sWork])
      sProp=document.forms[sWork].uid;
    if((!sProp) || sProp=='')
      sProp="csFieldName";

    if(!sTC) sTC='10';

    if(sQM == "FullText") {
      sCom ="GetIndexContent?Template=InputAssistantFT";
      //sCom+="&TableName="+document.body.csTableName;
      sCom+="&TableName="+sDBTable;
      if(sFlds)
        sCom+="&Fields="+sFlds;
      //sCom+="&WhereClause="+sVal;
      sCom+="&Term="+sVal;
      sCom+="&TermCount="+sTC;
      sCom+="&IxFrom=0";
      sCom+="&IxTo="+sTC;
      sCom+="&Interval=" + (sInt ? sInt : "");
      //sCom+="&GICMode=new";
    } else {
      sCom ="GetRecords?Template=InputAssistant";
      //sCom+="&TableName="+document.body.csTableName;
      if((!sDBTable) || (sDBTable==''))
        sCom+="&TableName="+sTableName;
      else
        sCom+="&TableName="+sDBTable;
      //sCom+="&Mode="+sTmpl;
      if(sVal && sVal!='')
        //sCom+="&WhereClause='"+sVal+"%25'";
        sCom+="&WhereClause="+sVal;
      else
        ;//sCom+="&WhereClause='%25'";
      sCom+="&MaxRows="+sTC;
      sCom+="&Count="+sTC;
    }
    sCom+="&DBName="+sDBName;
    sCom+="&FieldName="+sFld;
    sCom+="&Uid="+sProp;
    sCom+="&Target="+sWork+"."+vEltSrc.getAttribute(sProp);
    sCom+="&Sep="+sSep;
    sCom+="&Multi="+sMulti;
    if(sFld && sFld!='')
      if(fGetKeyCode(document.body.getAttribute('csKeyCode'))==p_event.keyCode)
        //if(confirm(sCom)) //-debug
        window.open(sCom, null, "toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=500, height=400, left=250, top=250");
          vEltSrc.setAttribute('csChanged', 'true');

  /*
  } catch(ex) {
    confirm("fOnKeyUpAssistant : "+ex.description);
  }
  */
}

function fGetKeyCode(p_sKeyCode) {
  iRet=0;
  if("F1"==p_sKeyCode) iRet=112;
  if("F2"==p_sKeyCode) iRet=113;
  if("F3"==p_sKeyCode) iRet=114;
  if("F4"==p_sKeyCode) iRet=115;
  if("F5"==p_sKeyCode) iRet=116;
  if("F6"==p_sKeyCode) iRet=117;
  if("F7"==p_sKeyCode) iRet=118;
  if("F8"==p_sKeyCode) iRet=119;
  if("F9"==p_sKeyCode) iRet=120;
  if("F10"==p_sKeyCode) iRet=121;
  if("F11"==p_sKeyCode) iRet=122;
  if("F12"==p_sKeyCode) iRet=123;
  if(iRet<=0) iRet=113; //touche F2 par d&eacute;faut
  return iRet;
}

// Appeler une servlet avec les param&egrave;tres :
// Template=nom_de_template&DBName=nom_de_base&TableName=nom_de_table&ReturnField=cl&eacute;_unique
// SearchField=nom_de_champ&SrcFields=nom_d'un_seul_champ&Lang=code_langue
//
// Param&egrave;tres optionnels :
// InsertTableName=nom_de_table
//
// la fonction ajoute les param&egrave;tres suivants
//
// &OpenerField=id_du_champ_cl&eacute;&nElement=id_du_champ_cl&eacute;&Item=id_du_champ_cl&eacute;&LinkKeys=YES
// &DestFields=id_du_champ_valeur&KeyItem=contenu_de_csKeys&csSep=/
// &ViewField=1er_SearchField&Multi=YES_ou_NO
//
// nom_de_template peut être = topicmap/tm , ListControl , frmSimpleLink,
// simpleLink ou thesaurus 
function assist(vKeyFld, vValFld) {
  try {
    var vKeyObj = document.getElementById(vKeyFld);
    if (vKeyObj == null) alert("ElementNotFound" + vKeyFld);
    var vValObj = document.getElementById(vValFld);
    if (vValObj == null) alert("ElementNotFound" + vValFld);
  
    var vControl = vKeyObj.getAttribute('csControl');
    var p = vControl.indexOf(':');
    var vCObj  = vControl.substr(p+1);

    var vMulti = vKeyObj.getAttribute('csMulti');
    var csSep  = vKeyObj.getAttribute('csSep');
    if (!csSep || csSep=="") {
       csSep="/";
    }
    
    vMulti = (vMulti == 'checked')?'YES':'NO';
    var vSearchField = getControlParam(vCObj, 'SearchField');
    var vTSearch = vSearchField.split(',');
    var vViewField = vTSearch[0];
    
    var vCtrlText  = vCObj.replace(/;/g, "&");
    
    var reKeyObj  = new RegExp(csSep,"g");   
    var vArr      = vKeyObj.value.split(csSep);
    vKeyObj.value = vArr.join(",");    
    
    var vUrl = 'GetRecords?' + vCtrlText + '&OpenerField=' + vKeyObj.id 
        + '&nElement=' + vKeyObj.id + '&Item=' + vValObj.value + '&Multi=' + vMulti 
        + '&KeyItem=' + vKeyObj.value + '&csSep=' + csSep + '&LinkKeys=YES&Operation=Show'
        + 'Where=&ViewField=' + vViewField;

//    vSelAssist = vSel;
    var vWind = window.open(vUrl,null,"toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, width=700, height=500, left=100, top= 100");
    vWndOpen = 'true';
//    vWind.onunload = doAssistUnload;
  } catch (e) {
    alert('assist: ' + e.description);
  }
}

function fGetNextElem(p_El, p_Arr) {
  var vEl=p_El;
  if(p_Arr)
    if(!(p_Arr[0]))
      p_Arr[0]=0;
  if(vEl && p_Arr) {
    if(vEl.firstChild && 'TEXTAREA'!=vEl.tagName) {
      vEl=vEl.firstChild; (p_Arr[0])++;
    } else if(vEl.nextSibling) {
      vEl=vEl.nextSibling;
    } else {
      for(vEl=vEl.parentNode, (p_Arr[0])--; (!vEl)?(false):(!vEl.nextSibling); vEl=vEl.parentNode, (p_Arr[0])--) ;
      if(vEl)
        vEl=vEl.nextSibling;
    }
  }
  if(p_Arr[0]<=0)
    vEl=null;
  return vEl;
}

function showMsg(vMsgCode, vVarString, vMsgType) {
  var vVars = vVarString.split('/');
  var vUrl = 'ShowMessage?MsgCode=' + vMsgCode;
  var vRet = ""
  for (var i = 0; i < vVars.length; i++) {
    vUrl += '&Var=' + vVars[i]; 
  }
  if (vMsgType != null) {
    vUrl += '&MsgType=' + vMsgType;
  }
  if ( !document.all )
    vRet = window.open(vUrl, '', 'dialog');
  if ( document.all )
    vRet = window.showModalDialog(vUrl, '', 'dialogHeight:300 px; dialogWidth:600 px; ');
  return vRet;  
}


// JGO: 06/12/2002
// même comportement que "alert(vMsg);" (mais en plus joli :) )
var alertWindow = null;
function alertES(vMsg,vTemplate)
{
  var vURL;
  var vTmpl = "alertMessage";

  if (vTemplate!=undefined) vTmpl = vTemplate;
  vURL = "ShowPage?Template="+vTmpl+"&Message="+vMsg+"&UseFM=yes";
  if ((alertWindow!=null)&&(alertWindow.closed==false))
  {
    alertWindow.location = vURL;
    alertWindow.focus();
  }
  else alertWindow = window.open(vURL,'_blank','fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=no,resizable=no,directories=no,location=no,width=200,height=100,left=350,top=250');
}

function tlbMouseOver() {
  if (!vIE) return;
  try {
    if (event.srcElement.tagName == 'IMG') {
      event.srcElement.style.border = '1px solid silver';
    }
  } catch (e) {} 
}

function tlbMouseOut() {
  if (!vIE) return;
  try {
    if (event.srcElement.tagName == 'IMG') {
      event.srcElement.style.border = '1px solid #F0F0F0';
    } 
  } catch (e) {} 
}

function tlbMouseDown() {
  if (!vIE) return;
  try {
    if (event.srcElement.tagName == 'IMG') {
      event.srcElement.style.border = '1px solid black';
    } 
  } catch (e) {} 
}

function tlbMouseUp() {
  if (!vIE) return;
  try {
    if (event.srcElement.tagName == 'IMG') {
      event.srcElement.style.border = '1px solid silver';
    } 
  } catch (e) {} 
}
function fIsLinkedToThesaurus(p_sControl) {
  var bRet=false;
  //confirm("p_sControl="+p_sControl); //-debug
  if(p_sControl) {
    var ix = p_sControl.indexOf("link");
    if(ix<0)
      ix = p_sControl.indexOf("tm:");
    if(0<=ix) {
      var ix2 = p_sControl.indexOf("TableName=", ix+1);
      if(0<=ix2) {
        var ix3 = p_sControl.indexOf(";", ix2+10);
        if(ix3<0)
          ix3 = p_sControl.length;
        var sTab = p_sControl.substring(ix2+10, ix3);
        if("CSTM_T"==sTab)
          bRet=true;
      }
    }
  }
  return bRet;
}
//fonction auxiliaire pr formuler des requêtes "expandables"
function addExpBalises(p_sVal, p_sMode, p_sControl, pfloue) {
  var sRet=null, sTmp='';
  var el=null;
  var cnt=1;

  while((el=document.getElementById("TM_Expansion_"+cnt)) != null) {
      if(el.checked) {
          if(sTmp != '')
              sTmp += ',';
          sTmp += el.value;
      }
      cnt++;
  }
  if (sTmp == '') {
      // pas d'expansion
      sRet = p_sVal;
      if (pfloue == true) {
          sRet += "~";
      }
  }
  else {
      if("sqlSimple"==p_sMode) {
          var ss = p_sVal.split(' ');
          var ix=0, flag=0;
          sRet='';
          for( ix=0; ix<ss.length; ix++) {
              if (ss[ix].length > 0) {
                  if (sRet.length > 0) {
                      sRet += ' OR ';
                  }
                  if (pfloue && pfloue == true) {
                      sRet += "<exp lnk='"+sTmp+"'>"+ss[ix]+"~</exp>";
                  }
                  else {
                      sRet += "<exp lnk='"+sTmp+"'>"+ss[ix]+"</exp>";
                  }
              }
          }//for
      } 
      else {
          if(""!=sTmp && fIsLinkedToThesaurus(p_sControl))
              sRet = "<exp lnk='"+sTmp+"'>"+p_sVal+"</exp>";
          else
              sRet = p_sVal;
      }
  }
//  if (!confirm("sRet="+sRet+' - '+sTmp+' - '+p_sControl)) sRet = ''; //-debug
  return sRet;
}

function sendXmlHttpWKF(xmlrpc, formRedirect) {
  var response = execXmlHttpWKF(xmlrpc);
  verifyresponseXmlHttpWKF(response, formRedirect);
}

function execXmlHttpWKF(xmlrpc) {
  var xmlHttp = XmlHttp.create();
  var bAsync = false;
   xmlHttp.open('POST', 'Wkf?TemplateError=Akazi/TplError', bAsync);
  //xmlHttp.open('POST', 'Wkf', bAsync);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.setRequestHeader('charset', 'UTF-8');
  xmlHttp.setRequestHeader('RequestType', 'XmlHttpStream');
  xmlHttp.send(xmlrpc);
  var vStr = xmlHttp.responseText;
  return vStr;
}


function verifyresponseXmlHttpWKF(vStr, formRedirect) {
  var vMsgDiv = document.getElementById('msg');
  vMsgDiv.innerHTML = '';
  var processOK = false;
  if (vStr.substr(0, 5) == '<?xml') {
    var xmldoc;
    if (document.implementation && document.implementation.createDocument) {
      xmldoc = document.implementation.createDocument("", "", null);
      xmldoc.loadXML(vStr);
    }  
    else if (window.ActiveXObject) { 
      xmldoc = new ActiveXObject("Microsoft.XMLDOM");
      xmldoc.loadXML(vStr);
    }
    if (xmldoc.documentElement) {
      if (xmldoc.documentElement.nodeName.toUpperCase() != "ERROR") {
        if (formRedirect!=null){
          formRedirect.submit();
        }
        processOK = true;
      }
    }
  }
  
  if (processOK == false) {
  
      vMsgDiv.innerHTML = vStr;
      if (winList['WndDiv'])
        winList['WndDiv'].open();
  }
}
  
  

  function getXmlRpcFooterWKF()
  {
    var xml = '';

    xml += '           </INPUT>\n'
    xml += '           ]]></string></value>\n';
    xml += '           </member>\n';
    xml += '           </struct>\n';
    xml += '         </value>\n';
    xml += '      </param>\n';
    xml += '   </params>\n';
    xml += '</methodCall>';

    return xml;
  }
  
  function showHideDetails(butDetails, ShowLabel, HideLabel) {
    var detailsDiv = document.getElementById("details");  
    if (detailsDiv.style.display == "none"){
      var details = document.getElementById("container").value;
      var newDetails = details.replace(/\r\n/g, "<BR>");
      newDetails = newDetails.replace(/\n/g, "<BR>");
      detailsDiv.innerHTML = newDetails;   
      detailsDiv.style.display = ""; 
      butDetails.value = HideLabel;
    }
    else {
      detailsDiv.style.display = "none"
      butDetails.value = ShowLabel;
    }
  }
  

function sendRequest(vUrl, vFunc) {
  var xmlHttp = XmlHttp.create();
  var bAsync = true;
  if (vFunc == null) bAsync = false;
  xmlHttp.open('POST', vUrl, bAsync);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.setRequestHeader('charset', 'UTF-8');
  if (bAsync) {
    xmlHttp.onreadystatechange = function () {
      if (xmlHttp.readyState == 4) vFunc();
    }
  }
  xmlHttp.send(null);
  return xmlHttp;
}

function nope() {
  return;
}

function getTargetElement(event) {
  if (vIE) {
    return window.event.srcElement;
  } else {
    return event.target;
  }
}

// Renvoie la date du moment au format specifie
// @param p_sFormat Le format souhaité, ex: "dd/MM/yyyy" ou "yyyyMMdd HHmmss"
// @return La date au format demande
function fGetDateTime(p_sFormat) {
  var sFormat = p_sFormat;
  if(!sFormat || sFormat=='')
    sFormat = 'yyyy-MM-dd HH:mm:ss';
  var xmlHttp = XmlHttp.create();
  xmlHttp.open('POST', 'Control', false);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.send('Action=getDateTime&Format='+sFormat);
  var sRet = xmlHttp.responseText;
  //confirm(sRet);
  return sRet;
}
// Renvoie la date au format specifie par le parametre p_sFmt ou par le triplet DB-Tab-Fld.
// Si le controle _date_ ou _time_ est specifie pour ce champ, et si le controle VisibleDate
// est present, ce controle est pris en compte en priorite, sinon params.xml.
// Si le parametre p_sDate n_est pas renseigne, la date du jour est renvoyee.
// @param p_sDB La base de donnees.
// @param p_sTab Le nom de la table.
// @param p_sFld Le nom du champ.
// @param p_sFmt Le format souhaite.
// @param p_sDate La date a formater.
// @return Le date formatee.
function fGetFormattedVisibleDate(p_sDB, p_sTab, p_sFld, p_sFmt, p_sDate) {
  var xmlHttp = XmlHttp.create();
  xmlHttp.open('POST', 'Date.dfl', false);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  var sPar = "";
  if(p_sDB) sPar += "&DBName=" + p_sDB;
  if(p_sTab) sPar += "&TableName=" + p_sTab;
  if(p_sFld) sPar += "&FieldName=" + p_sFld;
  if(p_sFmt) sPar += "&Format=" + p_sFmt;
  if(p_sDate) sPar += "&Date=" + p_sDate;
  xmlHttp.send(sPar);
  var sRet = xmlHttp.responseText;
//  confirm(sRet); //!debug!
  return sRet;  
}
function fXmlHttp(p_sUrl, p_sCmd, p_sRet) {
  var xmlHttp = XmlHttp.create();
  xmlHttp.open('POST', p_sUrl, false);
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.setRequestHeader('charset', 'UTF-8');
  xmlHttp.send(p_sCmd);
  if(p_sRet == 'text')
    return xmlHttp.responseText;
  else if(p_sRet == 'xml')
    return xmlHttp.responseXML;
  else
    return null;
}
function fExists(p_sDB, p_sTable, p_sFld, p_sReq) {
  var bRet = false;
  var sUrl = "GetRecords";
  var sCmd="DBName="+p_sDB+"&TableName="+p_sTable+"&command="+p_sReq;
  //confirm(sCmd); //!debug!
  var el = fXmlHttp(sUrl, sCmd, 'xml');
  var arr = new Array();
  while(!bRet && (el=fGetNextElem(el, arr)) != null) {
    //if(!confirm(el.tagName)) break; //!debug!
    if(el.tagName == p_sFld)
      bRet=true;
  }
  return bRet;
}
function fGetOssOpCode(p_sTxt) {
  var iTarCode = 0;
  if(p_sTxt == "activate_partition") {
    iTarCode = 11;
  } else if(p_sTxt == "desactivate_partition") {
    iTarCode = 12;
  } else if(p_sTxt == "insert_partition") {
    iTarCode = 13;
  } else if(p_sTxt == "modify_partition") {
    iTarCode = 14;
  } else if(p_sTxt == "delete_partition") {
    iTarCode = 15;
  } else
  if(p_sTxt == "cloture_medium") {
    iTarCode = 20;
  } else if(p_sTxt == "activate_medium") {
    iTarCode = 21;
  } else if(p_sTxt == "desactivate_medium") {
    iTarCode = 22;
  } else if(p_sTxt == "insert_medium") {
    iTarCode = 23;
  } else if(p_sTxt == "modify_medium") {
    iTarCode = 24;
  } else if(p_sTxt == "delete_medium") {
    iTarCode = 25;
  } else if(p_sTxt == "connect_medium") {
    iTarCode = 26;
  } else if(p_sTxt == "disconnect_medium") {
    iTarCode = 27;
  } else if(p_sTxt == "attach_medium") {
    iTarCode = 28;
  } else if(p_sTxt == "detach_medium") {
    iTarCode = 29;
  } else
  if(p_sTxt == "insert_site") {
    iTarCode = 31;
  } else if(p_sTxt == "modify_site") {
    iTarCode = 32;
  } else if(p_sTxt == "delete_site") {
    iTarCode = 33;
  }
  return iTarCode;
}

function fAddOrReplace(p_sOldVal, p_sVal, p_sMulti, p_sSep) {
  var sRet=null;
  if(p_sMulti == 'checked') {
    if(p_sOldVal == '')
      sRet = p_sVal + p_sSep;
    else {
      var ssVal = p_sOldVal.split(p_sSep);
      for(sRet="", ix=0; ix<ssVal.length-1; ix++)
        sRet += ssVal[ix] + p_sSep;
      sRet += p_sVal + p_sSep;
    }
  } else
    sRet = p_sVal;
  return sRet;
}
function fGetLastVal(p_sVal, p_sMulti, p_sSep) {
  var sRet=null;
  if(p_sMulti == 'checked') {
    var ssVal = p_sVal.split(p_sSep);
    if(1 < ssVal.length)
      sRet = ssVal[ssVal.length - 1];
    else
      sRet = p_sVal;
  } else
    sRet= p_sVal;
  return sRet;
}


function fComposeVal(p_sFld, p_sFlds, p_sOp1, p_sVal, p_sType, p_sFTType, p_sMulti, p_sSep,
  p_sMultiOper, p_sFunc, p_sControl, p_sQM, fieldIsKey)
{
  var sRet = '';
  var ix = 0;
  var ssVal = null;
/* TRACE *
var msgtrc = "fComposeVal :";
msgtrc += "\r\n p_sFld : " + p_sFld;
msgtrc += "\r\n p_sFlds : " + p_sFlds;
msgtrc += "\r\n p_sOp1 : " + p_sOp1;
msgtrc += "\r\n p_sVal : " + p_sVal;
msgtrc += "\r\n p_sType : " + p_sType;
msgtrc += "\r\n p_sFTType : " + p_sFTType;
msgtrc += "\r\n p_sMulti: " + p_sMulti;
msgtrc += "\r\n p_sSep: " + p_sSep;
msgtrc += "\r\n p_sMultiOper: " + p_sMultiOper;
msgtrc += "\r\n p_sFunc: " + p_sFunc;
msgtrc += "\r\n p_sControl: " + p_sControl;
msgtrc += "\r\n p_sQM: " + p_sQM;
//msgtrc += "\r\n sLabelFieldUsedWith: " + sLabelFieldUsedWith;
//msgtrc += "\r\n sKeyFieldUsedWith: " + sKeyFieldUsedWith;
* TRACE */

  if(p_sQM == 'FullText') {
    var sGM = '';
    p_sOp1 = ":";
    // en full text on ne doit pas interroger avec la valeur reelle du lien mais avec le libelle
        if(p_sFTType && 0 <= p_sFTType.indexOf('k'))
            sGM = '"';
        if(p_sFlds && p_sFlds != '') {
            ssFlds = p_sFlds.split(',');
            sRet='(';
            for( ix = 0; ix < ssFlds.length; ix++) {
                if(0 < ix) sRet += ' OR ';
                sRet += ssFlds[ix] + p_sOp1 + sGM + p_sVal + sGM;
            }
            sRet += ')';
            // TODO cas a traiter
        } 
        else {
            if(p_sMulti == 'checked')
                ssVal = p_sVal.split(p_sSep);
            else
                ssVal = p_sVal.split('\n');

            sRet='('+p_sFld+p_sOp1+'(';
            for( ix=0; ix<ssVal.length; ix++) {
                if(ssVal[ix] != '') {
                    if(0 < ix) sRet += ' ' + p_sMultiOper + ' ';
                    sRet += sGM + addExpBalises(encodeForFT(ssVal[ix]), null, p_sControl) + sGM;
                }
            }
            sRet += '))';
        }
  } else {
    // non full text ==> SQL
        var sQT = '', sFunc1 = '', sFunc2 = '', sPC = '';
        if(p_sOp1 && p_sOp1 == 'LIKE') sPC = '%';
        //if(p_sType == 'String' || p_sType == 'Date' || p_sType == 'Date/Time' || p_sType == 'Time' || p_sOp1 == 'LIKE') sQT = "'";
        //if(p_sType != 'Numeric' || p_sOp1 == 'LIKE') sQT = "'";
        sQT = "'";
        if(p_sFunc && p_sFunc != '') {
            sFunc1 = p_sFunc + '(';
            sFunc2 = ')';
        }
        if(p_sMulti == 'checked')
            ssVal = p_sVal.split(p_sSep);
        else
            ssVal = p_sVal.split('\n');
        if(p_sOp1 == 'IN') {
            for(sRet='('+sFunc1+p_sFld+sFunc2+' IN (', ix=0; ix<ssVal.length; ix++) {
                if(ssVal[ix] != '') {
                    if(0 < ix) sRet += ', ';
                    sRet += sFunc1 + sQT + fDuplikot(ssVal[ix], "'") + sQT + sFunc2;
                }
            }
            sRet += '))';
        } 
        else if(p_sOp1 == 'IS NULL' || p_sOp1 == 'IS NOT NULL') {
            sRet = '(' + p_sFld + ' ' + p_sOp1 + ')';
        } 
        else {
            // cas du LIKE et du '='
            // si on est sur un champ lien contenant les cles
            if (fieldIsKey) {
                if(p_sMulti == 'checked') {
                    sRet='';
                    for( ix=0; ix<ssVal.length; ix++) {
                        if(ssVal[ix] != '') {
                            var oneField = sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + fDuplikot(ssVal[ix], "'") + p_sSep + sPC + sQT + sFunc2;
                            oneField += ' OR ' + sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + sPC + p_sSep + fDuplikot(ssVal[ix], "'") + p_sSep + sPC + sQT + sFunc2;
                            oneField += ' OR ' + sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + sPC + p_sSep + fDuplikot(ssVal[ix], "'") + sQT + sFunc2;
                            oneField += ' OR ' + sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + fDuplikot(ssVal[ix], "'") + sQT + sFunc2;
                            if (oneField.length > 0) {
                                if (sRet.length > 0) {
                                    sRet = sRet + ' ' + p_sMultiOper + ' (' + oneField + ')';
                                }
                                else {
                                    sRet = '(' + oneField + ')';
                                }
                            }
                        }
                    }
                    sRet = '(' + sRet + ')';
                }
                else {
                    sRet = '(' + sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + fDuplikot(p_sVal, "'") + sPC + sQT + sFunc2 + ')';
                }
            }
            else {
                sRet='(';
                for( ix=0; ix<ssVal.length; ix++) {
                    if(ssVal[ix] != '') {
                        if(0 < ix) 
                        	sRet += ' ' + p_sMultiOper + ' ';
                        if(p_sMulti == 'checked') {
                            sRet += sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + sPC + fDuplikot(ssVal[ix], "'") + sPC +  sQT + sFunc2;
                        }
                        else
                        	sRet += sFunc1 + p_sFld + sFunc2 + ' ' + p_sOp1 + ' ' + sFunc1 + sQT + fDuplikot(ssVal[ix], "'") + sPC + sQT + sFunc2;
                    }
                }
                sRet += ')';
            }
        }
  }

/* TRACE *
msgtrc += "\r\n\r\n RESULT  : " + sRet;
alert( msgtrc);

* TRACE */
  return sRet;
}

function fDesactivateExpansion(p_doc, p_sCtrl, p_sSep, p_sId) {
  var ssCtrl = p_sCtrl.split(p_sSep);
  var bIsTezo=false;
  for(ix=0; !bIsTezo && ix<ssCtrl.length; ix++) {
    bIsTezo = fIsLinkedToThesaurus(ssCtrl[ix]);
  }
  if(!bIsTezo) {
    var elTMExt = p_doc.getElementById(p_sId);
    if(elTMExt)
      elTMExt.style.display = "none";
  }
}
function fLastQuery(p_sTarget) {
  var fra = window.top.frames["sub"];
  var foMemo = fra.document.forms.Memo;
  var sUrl = foMemo.LastUrl.value;
  var sTarget = p_sTarget;
  if(!sTarget || sTarget == '')
    sTarget = foMemo.LastTarget.value;
  if(sUrl != '')
    window.open(sUrl, sTarget);
  //else
  //  alert('NoPreviousQuery');
}
function fEnableDisableTable(p_el, p_bVal) {
  var el = p_el;
  if(el) {
    el.disabled = p_bVal;
    var arr=new Array();
    while(null!=(el=fGetNextElem(el, arr))) {
      if(el.tagName=="INPUT" || el.tagName=="SELECT")
        el.disabled = p_bVal;
    }
  }
}
function encodeForFT(p_sTxt) {
  return p_sTxt;
//  if(p_sTxt) {
//    return p_sTxt.replace(/ /g, '\1');
//  }
//  return null;
}


