var nbChange = 0
var ModeForm = ''  //Recherche...

function TransfoChamp(O) {
	var NomCtl, S, R, V, p, C
	var MsgNum = "Ce champ doit contenir une valeur numérique"
	if (!O)  return;  //alert(Lout(O))
  if (O.tagName=="INPUT")  O.value = Trim(O.value)
  //if (!O.value)  return  // le + dans Form
	NomCtl = O.name;
	InfoCtl = ObjsCtl(O);  //alert(InfoCtl.Lib)
	V = LVal(O);
	if (typeof(V)=="string") { C = V.substr(0,1);	if (C=="=")  V = O.value = V.substr(1) }

  switch (LX(O,"Typ")) {
    case "N":
			V = Replace(V,",",".");  S = parseFloat(V);
			if (S!=V) { if (isNaN(S)) S='';  if (V) alert(V + " n'est pas un nombre. Conversion automatique en '" + S + "'");  V=S }
    	O.value = V
    	break
  }
  switch (LX(O,"TypAff")) {
    case "D":  O.value = ConvDate(V);  break
    case "DT":
      p = V.length;  S=V.substr(0,2)
      if (!isNaN(S) && V.indexOf("/")>=0)  V = ConvDate(V);  else if (!isNaN(V) && !(p==4 && S>31))  V = ConvDate(V)
    	O.value = V
    	break
    case "Minus":  if (C!="=")  O.value = V.toLowerCase();  break
    case "Majus":  if (C!="=")  O.value = V.toUpperCase();  break
    case "Minus2":  O.value = Minus(V);  break
    case "Majus2":  O.value = Majus(V);  break
    case "NP":  	 if (C!="=")  O.value = NomPropre(V);  		break
    case "Tel":
	    O.value = V = ClearText (V, "!isNaN(Car) || Car=='.'")
      if (V.length!=10)  return
      O.value = V.substr(0,2) + "." + V.substr(2,2) + "." + V.substr(4,2) + "." + V.substr(6,2) + "." + V.substr(8,2)
      break
    case "Num":
      if (!V)  V="0";  else  V = Replace(V,",",".")
      if (isNaN(V)) {  alert(MsgNum);  O.value = ""; }
      break
    case "NZ":
      if (V) {
      	V = Replace(V,",",".")
      	if (isNaN(V)) {  alert(MsgNum);  O.value = ""; }
      }
      if (parseFloat(V)==0) {  alert("Ce champ ne peut contenir la valeur 0");  O.value = ""; }
      break
		case "eMail":
			if (!V) break
			var Test = new RegExp("^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$");
			if (!Test.exec(V))  alert("Adresse non valide (format : nom@domaine.dom)")
		  break
  }
  if (S=LX(O,'meta')) {
    MajMeta(S, NomCtl, V)
  }
  Cascade_Maj(O)
}

function MajMeta(Ctl, Nom, V) {
	//Ctl : Champ contenant le JS d'origine, Nom : Nom de la variable dans le JS
	var JS1, Meta, O, S
	O = LID(Ctl);  if (O.name) Meta=O.name;  else  Meta=O.id
	if ((S=LVal(Ctl)))	JS1 = eval('('+S+')');  else  JS1 = {}
	//if (V && typeof(V)=='string')  V = eval('('+V+')')  ??
	JS1[Nom] = V
	PVal(Meta, JSON(JS1,{'nonVide':1}));
}

function FiltreCar(Ctl, TypFiltre, DestID) {
	var Filtre, Dest, Msg, S, V
	nbChange++
	if (!TypFiltre)  TypFiltre = LX(Ctl,"TypFiltre")
	Dest = LID(DestID);  if (!Dest)  Dest = Ctl
	V = Ctl.value
	switch(TypFiltre) {
		case 'Tel':			Filtre = /[^0-9\-\.\+(),; ]+/;		Msg = "Vous ne pouvez utiliser que les caractères suivant comme séparateur : espace .- ";  break
		case 'Date':		Filtre = /[^0-9\-]+/;						Msg = "Vous devez mettre la date sous la forme : JJ-MM-AAAA, ex: 01-06-2004";  break;
	  case 'Texte':		Filtre = /[\\+:*?<>|\/\'\"]+/;	Msg = 'Vous ne devez pas utiliser les caractères suivants : \\/+:*?<>|\'\"';  break;
	  case 'Texte2':  Filtre = /[\\+:*?<>|\"]+/;			Msg = 'Vous ne devez pas utiliser les caractères suivants : \\+:*?<>|\"';  break;
	  case 'Nombre':	Filtre = /[^0-9]+/;			Msg = 'Vous ne pouvez rentrer que des chiffres de 0 à 9';  break;
	  case 'Code':  Filtre = /[^0-9\.]+/;				Msg = "Vous ne pouvez rentrer que des chiffres de 0 à 9 ou des points";  break
	  case 'Html':  Filtre = /[éèêëÉÈÊËîïìíÎÏÌÍçÇÀÂÄÅÁàâäåáôöòóÔÖÒÓûùüúÛÙÜÚñÑ\\+:*<>|\/\'\" ]+/;  Msg = 'Vous ne pouvez pas rentrer de caractères accentués ni les caractères suivants : \\/+:*?<>|\'\"'
	}
	if (Filtre && Filtre.test(V)) {
	  alert(Msg);  PVal(Dest, V.replace(Filtre, ""))
	}
	return true;
}

function Cascade_Maj(OS) {
	var OD, Aj, S, Sql, action, n, V  //OS=Source, OD=Dest
	V = OS.value;  if ((S=LX(OS,"ChampVal")))  PVal(S,V)
  if (!(OD=LID(LX(OS,"Cascade"))))  return
	if (OD.tagName=="SELECT")  Pgm="ListBox"
	OD.innerHTML=''
	if (V) {
		//V = Replace(V,"*","%")
		OD.style.display='inline'
		Sql = LX(OD,"Sql");  if (Sql.indexOf(" ")<0)  Sql = "SELECT Code, Titre, Rang FROM " + Sql + " WHERE Lien=$V"
		Sql = Replace(Sql, "$V", V);  //alert(Sql)
  	if (!(Aj=LX(OD,"AjUrl")))  Aj = AjUrl
  	if ((S=LX(OD,"LibNb")))  Aj+= '&LibNb=' + S
 		if ((S=LX(OD,'Ajout')))  SetComboBox(OD, S)
		Mess = XmlPost("Pgm=" + Pgm + "&Sql=" + escape(Sql) + Aj, "", "");		//alert(Mess)
		if (Mess) {
			SetComboBox(OD, Mess)
			if ((V0=LX(OD,"Val0",true))!=undefined) {  OD.value = V0;  OD.removeAttribute("Val0")  }
		}
	}
	S = "Div_" + OD.id;  //alert("|" + Mess + "| " + Lout(OD))
	if ((n=OD.options.length))  Aff(S);  else  Hide(S)
	if (n==1)  V = OD.value
  if ((S=LX(OD,"ChampVal")))  PVal(S,V)
  if ((S=LX(OD,"ChampVal_NonVide")) && V)  PVal(S,V)
	//if (n<=1)
	Cascade_Maj(OD)
}

function Ctrl_Select(O) {
	var CtlI, Ifm, Aj, S, Sql, V
	if (O.tagName=="SELECT") {
		if (O.value=="(?)") {
			S = LX(O,"input");  Aff(S + "T");  Hide(S + "CB")
			if (LID(S))  Focus(S)
			O.value = ""
		}
	}else{
		Pret = false
		if (!(V=O.value))  return
		V = Replace(V,"*","%")
		CtlS = LID(LX(O,"select"))
		Sql = LX(O,"Sql");  if (!Sql)  Sql = LX(CtlS,"Sql");  Sql = Replace(Sql, "$V", V);  //alert(Sql)
    Ifm = LID(LX(CtlS,"ifm"))
    Aj = LX(CtlS,"AjUrl");  if (!Aj)  Aj = AjUrl
    S = "/sites/i2g/pgm/Litdata.aspx?Action=ListBox&NomObj=" + CtlS.id + "&Sql=" + escape(Sql) + Aj
		Ifm.contentWindow.location = S
		//window.open(S)
		S = LX(O,"input");  Aff(S + "T");  Hide(S + "CB")
	}
}

function AffVide(Ctl, Tag) {
	var O, Aff
	if (typeof(Ctl)=="string")  Ctl = LID(Ctl);  if (!Ctl)  return
	if (!Tag)  Tag="TD"
	//alert(Tag + ", " + Lout(O) + ", " + Lout(ElemPTag(O,Tag)))
	if (!(O=ElemPTag(Ctl,Tag)))  return
	Aff = "block"
	switch(Ctl.tagName) {
		case "SELECT":  if (Ctl.options.length==0)  Aff = "none";  break
		case "INPUT": case "TEXTAREA":  if (Ctl.value=="")  Aff = "none";  break
		default:  return
	}
	O.style.display = Aff
}

function ParamForm(F) {
	var Ctl, V, S, Li='', i
	F = LID(F)
  for (i=0; i<F.length; i++) {
		Ctl = F.elements[i];  //alert(Ctl.outerHTML)
		V = LVal(Ctl)
		if (V && (Nom=Ctl.name))  	Li += '&' + Nom + '=' + escape(V)   //escape(encodeURI(LVal(Ctl)))
  }
	return Li
}

function VerifChamps(F) {
	var Ctl, V, S, Msg="", i
	if (F.tagName=="FORM") {
	  for (i=0; i<F.length; i++) {
			Ctl = F.elements[i];  //alert(Ctl.outerHTML)
	  	Msg += VerifChamp(Ctl)
	  }
	}else{
	  Os = LTags(F, "LABEL")
	  for (i=0; i<Os.length; i++) {
	  	Ctl = Os[i].firstChild;  if (!Ctl)  continue
	  	Msg += VerifChamp(Ctl)
	  }
	}
	return Msg
}

function VerifChamp(Ctl) {
	var Ctl, V, S, Msg="", Termin="", i, j, p, l, Err, Lib, T, O2

	Lib = LX(Ctl,"title");  if (!Lib)  Lib = LX(Ctl,"Lib");
	if (!Lib) { O2 = Elem(Ctl, "O.tagName=='LABEL'", true);	 if (O2)  Lib = LText(O2); }
	if (!Lib)  Lib = Ctl.name
	V = LVal(Ctl)
	S = LX(Ctl,"Verif") + ""
	T = S.split(",")
	for (j=0; j<T.length; j++) {
		//alert(T[j])
  	switch (T[j]) {
  	  case "NonVide":
	  		Err = false
	  		switch (Ctl.type) {
	  			case "radio":
						var doc_ctl
	  			  if (ie)  doc_ctl = Ctl.document;  else  doc_ctl = document
						if (Ctl==doc_ctl.getElementsByName(Ctl.name)[0] && !LitRadio(Ctl))  Err=true;  break
	  			case "checkbox":  if (!Ctl.checked)  Err=true;  break
	  			default:  if (!Ctl.value)  Err=true
			  }
			  if (Err) {
			  	if (Ctl.type=="checkbox") { Msg = "La case à cocher ";  Termin="e" }
			  	Msg += Lib + " doit être renseigné"
			  	Msg += Termin
			  }
			  break
			case "IP":
				var regexp = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ ;
				//\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b
				if (V.match(regexp))  Msg = "L'adresse ip " + Lib + " n'est pas valide"
				break
			case "eMail":
				if (!V) break
				var Test = new RegExp("^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$");
				if (!Test.exec(V))  Msg = V + " n'est pas une e-mail valide\n\nVous devez entrer un mail de la forme : nom@domaine.dom"
				break
  	}
  }
  if (Msg)  Msg+="\n"
  return Msg
}

function ObjsCtl (Ctl) {
	// Retourne l'étiq et l'élem Info de Ctl
	var O, i, Obj, Li, S
	Obj = new Object()
	O = Ctl.previousSibling
  while (O) {
  	Li = O.nodeName
  	if ("INPUT,SELECT,TEXTAREA".indexOf(Li)>=0)  break
  	if (Li=="LABEL") {  Obj.Etiq=O;  Obj.Lib=O.innerText;  break  }
	  O = O.previousSibling
	}
	O = Ctl.nextSibling
  while (O) {
  	Li = O.nodeName;  //alert(Li + ", " + Lout(O))
  	if ("INPUT,SELECT,TEXTAREA".indexOf(Li)>=0)  break
  	if (O.className=="CtlInfo")  {  Obj.Info=O;  break  }
	  O = O.nextSibling
	}
	return Obj
}


// --------------  CONTROLES ---------------
function SelectOpt(Ctl) {
	Ctl = LID(Ctl);  if (!Ctl)  return
	if (!Ctl.options || Ctl.selectedIndex<0)  return null
  return Ctl.options[Ctl.selectedIndex];
}

function LitLibSelect(Ch, Cod) {
  cOpts = Ch.options
  for (i=0; i<cOpts.length; i++) {
    if (cOpts[i].value==Cod)  return cOpts[i].text
  }
}

function SetComboBox(CB, Liste, Clear, Separ) {
  var TC, TL, TCh, I, j, O, S1, S2, Sep1, Sep2
	CB = LID(CB);  if (!CB)  return
  if (!Separ) {  Sep1=",";  Sep2=";" }  else if (Separ=="|") { Sep1=";";  Sep2=Separ }
  if (Clear)  CB.innerHTML=""
  if (typeof(Liste)=="object" && Liste.tagName!="TABLE") {
    if ((S=LX(Liste,"ListCh")))  TCh = S.split(",");
		Liste = LText(Liste)
  }
  if ((S=LX(CB,"Data")))  TCh = S.split(",");
  switch (typeof(Liste)) {
    case "string":
		  TL = Liste.split(Sep2)
		  for (I=0; I<TL.length; I++) {
		    TC = TL[I].split(Sep1)
		    S1 = Trim(TC[0]);  if (TC.length>1)  S2 = Trim(TC[1]);  else  S2 = S1
		    O = document.createElement("OPTION")
		    O.value = S1;  O.text = S2
		    for (j=2; j<TC.length; j++) {
		      if (TCh)  S1=TCh[j+1];  else  S1="Param"+j
					O.setAttribute(S1, TC[j])
				}
				if (document.all)  CB.add(O);  else  CB.add(O,null)
		  }
		  break
		case "object":  //tableau de 2 colonnes
			for (i=0; i<Liste.rows.length; i++) {
				TR = Liste.rows[i];  if (TR.cells.length<2)  return
		    O = document.createElement("OPTION")
		    O.value = TR.cells(0).innerText;  O.text = TR.cells(1).innerText
		    CB.add(O)
		 	}
	}
  //alert(Lout(CB))
}


// --------------  HTML -> FORM  ---------------
function ChoixFic(NomCtl, Dest, PosDest, LookList, Val) {
	var Aj, H, T
	var Ctl = LID(NomCtl)
	if (!Dest)  Dest='biblio/doc'
	if (!PosDest)  PosDest=''
	if (!LookList) LookList='Vignette'
	Aj = "&Ctl=document.forms[0].elements['AdImg']"
	H = "/SIP/SIP.php?Role=Explor&LookList=" + LookList + "&Doss=" + Dest + Aj + AjUrl + ((window['ProjDoc']) ? "&ProjDoc=" + ProjDoc:"")
	if ((S=window['RootServ']))  H = AddStr(S,H,'/');			//alert(H)
	//window.open(H, "", "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,status=yes,width=790,height=550");  return
	Aj = window.showModalDialog(H, "", "dialogWidth:790px;dialogHeight:550px;resizable:yes");
	if (Aj) {
	  T = Aj.split(';')
	  if (Val)  H = AddStr(T[3],T[1],'/');  else  H = T[1]
		PVal(Ctl, H);  Change(Ctl);  AffForm()
	}
}

function ChoixTree(Role, W) {
	//Opt = &AffList=n
	var Aj, H, V
	H = "/SIP/SIP.php?" +Role + AjUrl;  if (!W)  W=790;
	//window.open(H, "", "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,status=yes,width="+W+",height=550");  return
	V = window.showModalDialog(H, "", "dialogWidth:"+W+"px;dialogHeight:550px;resizable:yes")
	return V
}

function InitSelects() {
	var CBs, CB, i, S, O
	CBs = document.getElementsByTagName('SELECT')
	for (i=0; i<CBs.length; i++) {
		CB = CBs[i]
		if ((S=LX(CB,'AjDeb')))  SetComboBox(CB, S)
		if ((T=LID("DefCB_" + CB.name))) {
			if ((S=LX(T,"AjoutDeb")))  SetComboBox(CB, S)
			if (T.innerHTML)  SetComboBox(CB, T)
			T.innerHTML = '';  RX(T,'AjoutDeb')
		}
		if ((S=LX(CB,"Ajout")))  SetComboBox(CB, S)
		if ((S=LX(T,"Ajout")))  SetComboBox(CB, S)
		//alert(Lout(CB))
	}
}

function Table_InitCtl (T, Vue) {
	// Met à jour les champs du formulaire à partir du contenu de la table T
	var TR, TD, Typ, O, Ol, Nom, V, Test, Ok, nbCol
	if (!T) T = LID("DefRow_" + App.TableLoad);  if (!T)  return;  if (T.rows.length==0)  return;  if (T.rows[0].cells.length<6)  return
		//wh("ID=" + T.id)
	if (Vue) {  var Tree = Vue.Tree, inod = Vue.On,  nod = inod.nod,  Lib = nod.Lib 	}
	for (i=1; i<T.rows.length; i++) {
		TR = T.rows[i];  nbCol = TR.cells.length
		Nom = LText(TR, 0);  O = LID(Nom);  if (!O)  continue
		//wh("Nom=" + Nom)
		if ((S=LText(TR,1)))  PX(O,"Lib",S)
		Typ = LText(TR, 2);  if (Typ=="D")  PX(O,"TypAff","D")
		if (Typ=="M")  V = TR.cells[6].innerHTML;  else  V = LText(TR, 6);
		lv = V.toLowerCase()
		Test = TR.cells[7].innerText
		if (Test)  Ok = eval(Test);  else  Ok = true
		if (Ok) {
			O.onchange=Change
			switch(O.tagName) {
				case "SELECT":
					if (V.indexOf(",")>=0 || V.indexOf(";")>=0)  SetComboBox(O, V);  else O.value = V;  //alert(V + crr + Lout(O));
					break;
				case "INPUT":
					switch(O.type) {
						case "checkbox":  O.checked = (lv=="vrai" || lv=="true" || lv=="1");  break;
						default:  O.value = V
					}
					break
				case "TEXTAREA":  O.value = V;  break
				default:  O.innerHTML = V;
			}
		}
		if ((Ol=LID("lb" + Nom)))  Ol.innerHTML = V
		//alert(Lout(O))
	}
}

function LoadChamps(NomTable, Suffix) {
	//alert(NomTable)
	if (!NomTable || !window['BD'])  return
	var T, Ch, Ctl, i
	T = BD.Tables[NomTable]
	T.InitChamps(Suffix)
}

function WinEdit(D) {
	var Dest, PosDest
	if (!(Dest=App.Dest))  Dest = "biblio/img"
	PosDest = "" //LVal("PathFic").substr(Dest.length+1)
		//alert(LX(D,"ParamEdit") + crr + Lout(D))
	Param = "Div=" + D.id + "&Ctl=" + LX(D,"CtlEdit") + LX(D,"ParamEdit") + AjUrl + "&Dest=" + Dest + "&PosDest=" + PosDest + "&bgBody=" + LX(D,"bgBody");  //alert(RootServ+crr+Param)
	window.open(AddStr(RootServ,"/SIP/pgm/Edit.php?",'/') + Param, "EditBox", "toolbar=no,menubar=no,scrollbars=yes,resizable=yes,status=no,width=822,height=612")
}


// ====================================    E V E N E M E N T S    ===============================

function Init() {
	var i, T, Ctl, O, D, S, F
	InitSelects()
	//Table_InitCtl()
	LoadChamps(App.TableLoad)
	if (window['BD'] && BD[0] && (F=BD[0].Form)) {
	  for (i=0; i<F.length; i++) {
			Ctl = F.elements[i];
			if (S=LX(Ctl,'meta')) {
     		//alert(1+crr+S+crr+window[S])
     		if ((O=window[S]))  PVal(Ctl, O[Ctl.name])
			}
			if (!LX(Ctl,'bd')) {
				if ((S=LX(Ctl,'ValDef')))  PVal(Ctl, S)
			}
	  }
	}
	T = LTags('TEXTAREA')
	for (i=0; i<T.length; i++) {
	  O = T[i];  //alert(Lout(O))
	  //alert(LX(O,"Edit"))
	  if ((D=LID(LX(O,'Edit')))) {
	    SetAt(D,'CtlEdit=' + O.name)
			if ((S=LVal(O)))  D.innerHTML = S
			//alert(Lout(D))
		}
	}
	onInit()
	AffForm()
}
function onInit() { }

function onClicBody(O) { }

function Change(e) {
	var O
	if (e && e.tagName)  O=e;  else  O = (ie) ? window.event.srcElement : e.target;  //alert(Lout(O))
  TransfoChamp(O)
  onChange(O)
  ChangeCalc()
  AffForm()
}
function onChange(O) {}
function AffForm() {}

function ChangeCalc() {
  nbChange++
	if (App.TableLoad) {
		T = BD.Tables[App.TableLoad]
		T.CalcChange(LID("_ChampsMaj"))
	}
}

function Submit(NomForm) {
	var O, Ctl, F
	if (!(F=LID(NomForm)))  F = BD[0].Form;  if (!F)  F = LID('Form')
	var MsgErr = VerifChamps(F);  if (MsgErr) {  alert(MsgErr);  return 0  }
	if (App.tinyMCE) {  //Sov des editeurs dans Textarea si modifié (du fait du test de modification des champs)
		for (n in tinyMCE.instances) {
	    inst = tinyMCE.instances[n];  if (!tinyMCE.isInstance(inst))  continue;
	    if (inst.isDirty())  inst.triggerSave(true, true);  //alert(inst.isDirty())
	    //inst.startContent   = tinyMCE.trim(inst.getBody().innerHTML);  inst.isNotDirty     = true;
	  }
	}
	if ((Ctl=LID('_ChampsMaj'))) {
		if (App.TableLoad) {
			T = BD.Tables[App.TableLoad]
			T.CalcChange(Ctl)
		}
		S = Ctl.value
		if (S && App.ValCle) {
		  if (S.indexOf(';Titre;')>=0 || S.indexOf(';Descript;')>=0 || S.indexOf(';AdrWeb;')>=0 || S.indexOf(';AdImg;')>=0) {
				PVal('DatMaj', FormatDate(new Date()));  Ctl.value+='DatMaj;';
				//alert(App.ValCle+cr+Ctl.value+cr+LVal('DatMaj')+cr+LVal('DatEnreg'));
			}
		}
	}
	onSubmit(F)
	return 1
}
function onSubmit() { }

function CloseWin() {
	var F = BD[0].Form
	if (nbChange && VerifChamps(F)=='')  window.event.returnValue = "Vous avez modifié ce formulaire"
}

function CalcChange(Ctl) {
	var T, TR, TD, Typ, Nom, V, oldV, Ctl, Li=""
	if (!Ctl)  return
	T = LID("DefRow_" + App.TableLoad);  if (!T)  return;  if (T.rows.length==0)  return;  if (T.rows[0].cells.length<6)  return
	for (i=1; i<T.rows.length; i++) {
		TR = T.rows[i];  nbCol = TR.cells.length
		Nom = LText(TR, 0);  O = LID(Nom);  if (!O)  continue
		Typ = LText(TR, 2);
		if (Typ=="M")  oldV = TR.cells[6].innerHTML;  else  oldV = LText(TR, 6);
		V = LVal(O);  
		if (V!=oldV) {
			Li += Nom + ";";  //alert(Nom+","+Typ+crr+ V + ", " + oldV + ", " + Li + crr + Lout(Ctl) + crr + Lout(TR))
		}
	}
	Ctl.value = ";" + Li;  //alert(Li + crr + Lout(Ctl))
}


// --------------  DIVERS ---------------
function MakeDir(Ch) {
  var Chemin, ChActu, fso, T, i, nb=0
  fso = new ActiveXObject("Scripting.FileSystemObject")
  if (fso.FolderExists(Ch))  return 0
  ChActu = Ch.substr(0,3);  Chemin = Ch.substr(3)
  T = Chemin.split("\\")
    //alert("Chemin=" + Chemin + "n " + T.length)
  for (i=0; i<T.length; i++) {
    ChActu=ChActu + "\\" + T[i]
    if (!fso.FolderExists(ChActu)) {  fso.CreateFolder(ChActu);  nb++  }
  }
  return nb
}

function ExistDir(Ch) {
  var fso, e
  try {
  	fso = new ActiveXObject("Scripting.FileSystemObject")
  }catch(e){}
  return fso.FolderExists(Ch)
}

function DateFic(Ch) {
  var fso, F, e
  try {
  	fso = new ActiveXObject("Scripting.FileSystemObject")
  	F = fso.GetFile(Ch)
  	if (F)  return F.DateLastModified
  }catch(e){}
  return null
}


// --------------  TEXTE ---------------
function Minus(Mot) {  if (CasseUniq(Mot))  return Mot.toLowerCase();  else  return Mot }
function Majus(Mot) {  if (CasseUniq(Mot))  return Mot.toUpperCase();  else  return Mot }

function NomPropre(SMot, Opt) {
  var Lig, C1, C2, C3, C4, C5, Mot, Mx
  if (!SMot) return ""
  Mx = SMot.length
  if (!Opt && !CasseUniq(SMot))  return SMot

  Mot = SMot.toLowerCase()
  Lig = Mot.substr(0,1).toUpperCase()
  for (C=1; C<Mx; C++) {
    C1 = Mot.substr(C-1,1)
    C2 = Mot.substr(C,1)
    if (C+1<Mx)  C3 = Mot.substr(C+1,1);  else  C3=" "
    if (C+2<Mx)  C4 = Mot.substr(C+2,1);  else  C4=" "
    if (C+3<Mx)  C5 = Mot.substr(C+3,1);  else  C5=" "
    M1 = C2 + C3 + C4;  M2 = M1 + C5
    if ("de du d' le la l' et ".indexOf(M1)>=0 || "rue des les ".indexOf(M2)>=0) {
    	Lig=Lig + C2
    }else{
      if (" ,;./-'".indexOf(C1)>=0)  Lig += C2.toUpperCase();  else  Lig += C2
    }
  }
  return Lig
}

function CasseUniq(Mot) {
  var C, C1, nbMin=0, nbMaj=0
  var Mx = Mot.length
  for (C=0; C<Mx; C++) {
    C1 = Mot.substr(C,1)
    if (C1>="A" && C1<="Z")  nbMaj++
    if (C1>="a" && C1<="z")  nbMin++
  }
  return !(nbMin>0 && nbMaj>0)
}

// --------------  POUBELLE ---------------
function ReplaceCode(TR, Chaine) {   // suppr qd ts les Liste.aspx auront basculés sur ReplaceVar de ssP.js
	if (!TR || !Chaine)  return Chaine
  for (i=0; i<TR.attributes.length; i++) {
  	V = TR.attributes[i].nodeValue
  	if (V) {
  		Chaine = Replace (Chaine, "$" + TR.attributes[i].nodeName, V)
  	}
  }
  return Chaine
}

