// FormatChamp, setComboBox

// ====================================      DATA     ===============================
function ReadBase(cl1, Deep, Call, Opt) {
	var JS = { Action:"ListData", BD:{NomT:'l_base_m', ValCle:cl1, Deep:Deep, Sortie:'JS'} };
	copyObj(JS,Opt)
	ExecAction(JS, function(re, Opt, reJ) {
		var J, T;		//alert(JSW(reJ))
		if (reJ && reJ.retour) {
			J = reJ.Data;  if (Deep==1)  J = J[cl1]
			if (Call)  Call(J)
		}else{
			PHB(re,'ReadBase','JS');
		}
	})
}

// ====================================      CHAMPS     ===============================
function JSONtoCtl(Div, JS) {   // {"Nb":"Capacité:N:3:8"}  ou  {"Data~Nb":{Lib:"Capacité",Typ:"N",Meta:"TMemo"}}
	var H='', J, k, S, l, Aj
	for (k in JS) {
	  Aj = ' '
		J = JS[k]
		if (isStr(J)) {
			T = J.split(':');  l = T.length
			J = { Lib:T[0] }
			if (l>1)  J.Typ = T[1];  if (l>2)  J.L = T[2];  if (l>3)  J.V = T[3]
		}
		if (!J.Lib)  J.Lib = k
		if (!J.L)  J.L = 1
		if (J.Typ=='CC') {
			Aj+= "type=checkbox "
		}else{
			if ((S=J.Typ))  Aj+='TypAff='+S+' '
			Aj+="size="+J.L+' '
		}
		if ((S=J.V))  Aj+='ValDef="'+S+'" '
		if ((S=J.Meta))  Aj+='meta='+S+' '
		Ctl = "<INPUT name="+k+Aj+">"
		H+="<div class=DivCh><label>"+J.Lib+"</label><br>"+Ctl+"</div>"
	}
	if (H)  H+="<div class=Separ></div>"
	$E(Div).innerHTML = H
}

function FormatChamp(V,Typ,TypAff,Opt) {
	var O, V, C, Test, p
	if (!Opt)  Opt = {}
	if (typeof(V)=='string') {
		V = Trim(V);  C = V.substr(0,1);  if (C=='=')  V = V.substr(1)
	}else if (isObj(V))
		V = JSONS(V)
	if (!V)  return C+V
	if (TypAff=='N')  Typ = 'N'
		//alert(Typ+cr+TypAff+cr+V)
	switch (Typ) {
		case 'N':
			V = Replace(V,",",".");  S = parseFloat(V);
			if (S!=V) { if (isNaN(S)) S='';  if (V) Opt.MsgErr = V + " n'est pas un nombre. Conversion automatique en '" + S + "'";  V=S }
			break
	}
	switch (TypAff) {
		case 'D':  V = ConvDate(V);  break
		case 'email':
			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))  Opt.Msg = "Adresse invalide (format : nom@domaine.dom)"
		  break
		case 'minus':  if (C!="=")  V = V.toLowerCase();  break
		case 'majus':  if (C!="=")  V = V.toUpperCase();  break
		case 'minus2':  V = Minus(V);  break
		case 'majus2':  V = Majus(V);  break
		case 'NP':  	 if (C!='=')  V = NomPropre(V);  		break
		case 'tel':
			V = ClearText(V, "isNaN(C) || C=='.' || C==' '")
			if (V.length==10) {
				O = V.match(/([0-9]{1,2})/g);  V = O.join(' ')
				if (V.substr(0,2)=='00')  V = '00'+V.substr(3)
			}
			break
	}
	return V
}

function ParamForm(F, Opt) {
	var Ctl, V, S, Li='', T={}, i, Cs, Nom
	F = LID(F);  Opt=Opt||{}
	Cs = ListCtl(F)
	for (i=0; i<Cs.length; i++) {
		Ctl = Cs[i]
		S = Ctl.tagName;  if (!(Nom=Ctl.name))  continue
		V = LVal(Ctl)
		if (V)  T[Nom] = V
	}
	if (Opt.Tableau)  return T
	for (Nom in T) {
		Li += '&'+Nom+'=' + T[Nom]   //escape(encodeURI(LVal(Ctl)))
	}
	return Li
}

function Verif_IP(V) {
	var M='', reg = /\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(reg))  M = "L'adresse ip " + V + " n'est pas valide";  return M
}
function Verif_Date(V) {    //alert(Verif_Date("12/01/2003 10:08"))
	var M='', reg, f1, f2, f3
	f1 = "[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}";  f2 = "[ ][0-9]{2}[:]{1}[0-9]{2}";  f3 = "[ ][0-9]{2}[:]{1}[0-9]{2}[:]{1}[0-9]{2}"
	reg = new RegExp("^"+f1+"$","g");
	if (!reg.test(V)) {
		reg = new RegExp("^"+f1+f2+"$","g");
		if (!reg.test(V)) { reg = new RegExp("^"+f1+f3+"$","g");  if (!reg.test(V))  M = V + " n'est pas au format date (ex : 08/02/2002)" }
	}
	return M
}
function Verif_eMail(V) { if (!V)  return;  var M='', reg = new RegExp("^([a-zA-Z0-9_-])+([.]?[a-zA-Z0-9_-]{1,})*@([a-zA-Z0-9-_]{2,}[.])+[a-zA-Z]{2,3}$");  if (!reg.exec(V))  M = V + " n'est pas une e-mail valide";  return M }


function setComboBox(CB, Liste, Opt) {
	var T, Cod, CodV, S, O, V, N, i, j, ValDef, R, okSel, nb
	CB = LID(CB);  if (!CB)  return
	if (typeof Liste=='string') {
		switch(Liste) {
			case 'SelDat':  Liste = ",(Tous);-0 day,Aujourd'hui;-2 day,3 derniers jours;-6 day,7 derniers jours;-1 month,30 derniers jours;M,Mois en cours;M-1,Mois précédent;-3 month,3 derniers mois;-12 month,12 mois glissants;A,Année en cours;A-1,Année précédente";  break;
		}
		Liste = Tableau2D(Liste);		//alert(JSW(Liste))
	}
	if (Opt==undefined)  Opt={};  else if (!isObj(Opt))  Opt = {Clear:Opt}
	if (Opt.Clear)  CB.innerHTML=''
	N = CountNod(Liste);  //alert(CB.name+crr+N+crr+ze(LX(CB,'HideSi0')));
	//if (ze(LX(CB,'HideSi0')) && !N) { Hide(CB,'DIV');  return }else  Aff(CB,'DIV');
	if (ze(LX(CB,'HideSi0'))) { if (!N) { Hide(CB,'DIV');  return }else  Aff(CB,'DIV') }

 	if ((S=LX(CB,'AjDeb')) && (!(ze(LX(CB,'AjDebNot1')) && N==1))) {
		T = Tableau2D(S)
		if (TypOf(Liste)=='Array')  for (i in Liste)  T.push(Liste[i]);  else  copyObj(T,Liste);		//alert(TypOf(Liste)+crr+JSW(T))
		Liste = T
	}
 	if ((S=LX(CB,'AjFin'))) { T = Tableau2D(S);  for (i in T)  Liste.push(T[i]); }
	//if (CB.name=='OP.CodRub')  alert(JSW(Liste))

	ValDef = Opt.ValDef;  j=0

	for (Cod in Liste) {
		if (Cod=='length')  continue
		R = Liste[Cod];
		if (Opt.Test && !eval(Opt.Test))  continue
		if (Opt.Sauf && Tin(Opt.Sauf,Cod))  continue
		CodV = Cod
		O = document.createElement('OPTION')
		if (Opt.Typ=='obj') {
			V = R[Opt.Lib]
		}else if (typeof(R)=='object') {      // tableaux T[n]=[Cle,Libellé]
			i = 0
			for (N in R) {
				S = R[N]
				if (i==0)  CodV = S
				else if (i==1)  V = S
				else{
					PX(O,N,S)
				}
				i++
			}
			if (i<2) { V=CodV;  CodV=Cod  }  // cas des tableaux T[Cle]=Libellé
		}else{
			V = R
		}
		O.value = CodV;  O.text = V
		if (Opt.Sel)  if ((Opt.Sel=='_1_' && j==0) || Opt.Sel==CodV)  O.selected=true;
		CB.add(O,Opt.pos)
		j++
	}
	nb = CB.options.length
	if (nb==1)  ValDef = CodV
	if (ValDef!==undefined)  PVal(CB,ValDef)
}


// ====================================      ss-PGM     ===============================
function CheminToIn(Chemin) {
	var S
	if ((S=Replace(Chemin,'/',',')))  return S.substr(1,S.length-2)
}

function FormeSql(Chaine) {
	var T, Sql, S
	if (Isole(Chaine,' ',1)=='SELECT')
		Sql = Chaine
	else{
		T = Chaine.split(';')
		Sql = "SELECT " + T[1] + ', ' + T[2] + " FROM " + T[0];		//alert(Sql)
		if ((S=T[3])) Sql+= " WHERE " + S
	}
	return Sql
}

