//--------------------------------------------------------------
//	  Fonction javascript de controle de formulaire
//--------------------------------------------------------------


// Test si le champ est vide
// True : vide
// False : pas vide
function vide(champ)
{
	if(champ.length == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

//radio
function getRadioVal(rb)
{var L=rb.length;var ret="";
for (var i = 0 ; i< L ; i++)
{if(rb[i].checked) {ret=rb[i].value;break;}}
return(ret);
}

//text, password, hidden, textarea, file
function getTextVal(tf)
{
	var ret=tf.value;
	return(ret);
}

//checkbox
function getCheckboxVal(cb)
{var L=cb.length;var ret='';
for (i = 0; i < L; i++)
{if (cb[i].checked==true) {ret += cb[i].value + '\n';}}
return(ret);
}

//select (Le texte correspondant à la "value")
function getSelectVal(sel)
{var ret='';
ret=sel.options[sel.selectedIndex].value;
return(ret);
}

//select (le texte placé entre <option> et </option>)
function getSelectText(sel)
{var ret='';
ret=sel.options[sel.selectedIndex].text;
return(ret);
}


// Permet de tester si les trois parametres d'une date correspondent à une date reelle
function IsDate(JJ, MM, AAAA)
{if(JJ<1||JJ>31||MM<1||MM>12) return false;
if(MM==2)
{if(JJ==30||JJ==31) return false;
  if(JJ==29) return ((AAAA%4==0&&AAAA%100!=0)||AAAA%400==0);
}
else if(JJ==31) return !(MM==4||MM==6||MM==9||MM==11);
return true;
}

//Permet de tester si l'URL commence bien par http://
function IsURL(lurl)
{
	if(lurl.length > 7 && lurl.substring(0,7)=="http://")
		return true;
	else return false;
}

// Permet de tester si l'email passé en parametre est un email valide
// de la forme xxx@xxxx.domain
// deprecated : fonction remplacée par celle ci-dessous
/*
function IsEMail(emailStr)
{var validDomain=false;
var AtPos = emailStr.lastIndexOf("@");
var DotPos= emailStr.lastIndexOf(".");
if((AtPos>0)&&(DotPos>0)&&(AtPos<DotPos-2))
{var domainExtList='ac.ad.ae.af.ag.ai.al.am.an.ao.aq.ar.as.at.au.aw.az.ba.bb.bd.be.bf.bg.bh.bi.bj.bm.bn.bo.br.bs.bt.bv.bw.by.bz.ca.cc.cd.cf.cg.ch.ci.ck.cl.cm.cn.co.cr.cs.cu.cv.cx.cy.cz.de.dj.dk.dm.do.dz.ec.ee.eg.eh.er.es.et.fi.fj.fk.fm.fo.fr.fx.ga.gb.gd.ge.gf.gg.gh.gi.gl.gm.gn.gp.gq.gr.gs.gt.gu.gw.gy.hk.hm.hn.hr.ht.hu.id.ie.il.im.in.io.iq.ir.is.it.je.jm.jo.jp.ke.kg.kh.ki.km.kn.kp.kr.kw.ky.kz.la.lb.lc.li.lk.lr.ls.lt.lu.lv.ly.ma.mc.md.mg.mh.mk.ml.mm.mn.mo.mp.mq.mr.ms.mt.mu.mv.mw.mx.my.mz.na.nc.ne.nf.ng.ni.nl.no.np.nr.nt.nu.nz.om.pa.pe.pf.pg.ph.pk.pl.pm.pn.pr.ps.pt.pw.py.qa.re.ro.ru.rw.sa.sb.sc.sd.se.sg.sh.si.sj.sk.sl.sm.sn.so.sr.st.su.sv.sy.sz.tc.td.tf.tg.th.tj.tk.tm.tn.to.tp.tr.tt.tv.tw.tz.ua.ug.uk.um.us.uy.uz.va.vc.ve.vg.vi.vn.vu.wf.ws.ye.yt.yu.za.zm.zr.zw.com.edu.gov.int.mil.net.org.biz.pro.info.aero.name.coop.arpa.nato.museum.EoF';
  var domainExt=domainExtList.split(".");
  var emailExt=emailStr.substr(DotPos+1);
  emailExt=emailExt.toLowerCase();
  for(i=0;domainExt.length;i++)
  {if (domainExt[i]=='EoF')  break; //infinite loop else
   if (emailExt==domainExt[i])  {validDomain=true;break;}
  }
}
return(validDomain);
}
*/

function IsEMail(emailStr) {
    if (emailStr.search(/^(_|-)?(([A-Za-z0-9]+(_+|\-+|\.+|\+|\-\.+|\.\-+)))*[A-Za-z0-9]+(\.|\-|\_){0,1}@((\w+\-+)|(\w+\.))*\w{1,63}\.('a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnorsuvxyz]|d[ejkmoz]|e[ceghrstu]|f[ijkmorx]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgiloprtuz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amrw]|com|edu|gov|int|mil|net|org|biz|pro|info|aero|name|coop|arpa|nato|museum|mobi)$/) != -1) {
        return true;
    }
    else {
        return false;
    }
}

// Permet de tester si l'email passé en paramètre est de la forme x@y.z ou @y.z
// (utilisé pour les listes blanches et noires de la messagerie)
function IsEMailMsg(emailStr) {
    return IsEMail('a'+emailStr);
}


// Permet de tester si l'email passé en parametre est un email valide
// de la forme xxx@nordnet.fr
function IsEMailNN(emailStr)
{var validAddressNN=false;
var AtPos = emailStr.lastIndexOf("@");

if(IsEMail(emailStr))
{
	var monAdresse = emailStr.slice(AtPos);
	monAdresse = monAdresse.toLowerCase();
	if(monAdresse == "@nordnet.fr") {validAddressNN=true;}
}
return(validAddressNN);
}


// Permet de tester si le parametre est un champ numerique
function IsNumber(NumStr)
{var regEx=/^[0-9]+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de tester si le parametre est un champ alphanumerique
function IsLettreNum(NumStr)
{var regEx=/^[A-Za-z0-9]+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de tester si le parametre est un champ alphanumerique accentué
function IsAdresse(NumStr)
{var regEx=/^[- 0-9),;.(A-Za-z_çâäàéèëêûüùïîöôÿ\']+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de tester si le parametre est un champ alphanumerique
function IsNom(NumStr)
{var regEx=/^[- A-Za-z_]+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de tester si le parametre est un champ alphanumerique accentué
function IsNomAccent(NumStr)
{var regEx=/^[- A-Za-z_çâäàéèëêûüùïîöôÿ\']+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de tester si le parametre est un champ alphabetique + "." , "_" et "-"
function IsPassword(NumStr)
{var regEx=/^[a-z0-9]+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}


// Permet de tester si le parametre est un champ alphabetique
function IsLettre(NumStr)
{var regEx=/^[A-Za-z]+$/;
var ret=false;
if (regEx.test(NumStr)) ret=true;
return ret;
}

// Permet de verifier la validité d'une carte de credit
function isCreditCard(st) {
  // Encoding only works on cards with less than 19 digits with Luhn mod-10
  if (st.length > 19) return (false);
  sum=0;mul=1;l=st.length;
  for(i=0;i<l;i++)
  {digit = st.substring(l-i-1,l-i);
   tproduct = parseInt(digit ,10)*mul;
   if (tproduct >= 10)
    sum += (tproduct % 10) + 1;
   else
    sum += tproduct;
   if (mul == 1)
    mul++;
   else
    mul--;
  }
  if ((sum % 10) == 0)
   return (true);
  else
   return (false);
}

// Teste si le numero appartient à une VISA
function isVisa(cc)
{if(((cc.length==16)||(cc.length==13))&&(cc.substring(0,1)==4)) return isCreditCard(cc);
return false;
}

// Teste si le numero appartient à une MasterCard
function isMasterCard(cc)
{firstdig = cc.substring(0,1);
seconddig = cc.substring(1,2);
if((cc.length==16)&&(firstdig==5)&&((seconddig>=1)&&(seconddig<=5))) return isCreditCard(cc);
  return false;
}

// Teste si le numero appartient à une American express
function isAmericanExpress(cc)
{firstdig = cc.substring(0,1);
seconddig = cc.substring(1,2);
if((cc.length==15)&&(firstdig==3)&&((seconddig==4)||(seconddig==7))) return isCreditCard(cc);
  return false;
}

// Teste si le numero appartient à une carte de credit
function isAnyCard(cc)
{if(!isCreditCard(cc)) return false;
if(!isMasterCard(cc) && !isVisa(cc) && !isAmericanExpress(cc)) return false;
return true;
}
 
// Verifie la validité d'un numéros de telephone
function verifTel(num)
{
	if( num.indexOf(" ") >0) return false;
	if(IsNumber(num) && num.length == 10)
	{	
		return true;
	}
	else return false;
}
		
// Verifie le code postal
function verifCode(code)
{
	if(IsNumber(code) &&  code.length == 5)
		return true;
	else return false;
}


function trim(TXT)
{
  return TXT.replace(/(^\s+)|(\s+$)/g,"");
}



function verif_rib(etab, guichet, compte, cle)
{
	var regEx=/^[0-9]+$/;
	var regEx2=/^[A-Za-z0-9]+$/;
	// verification des longueurs des chaines
	if (etab.length != 5) return false;
	if (guichet.length != 5) return false;
	if (compte.length != 11) return false;
	if (cle.length != 2) return false;
	//Verification de ce sont bien des nombres
	if (!regEx.test(etab)) return false;
	if (!regEx.test(guichet)) return false;
	if (!regEx2.test(compte)) return false;
	if (!regEx.test(cle)) return false;
	//Découpage des chaines en A, B et C
	// voir http://stjo.com/web/main/algorib.htm pour + d'info
	var A = parseFloat(etab + guichet.substring(0,2));
	var B = parseFloat(guichet.substring(2,5) + remplace_for_verif_rib(compte.substring(0,4)));
	var C = parseFloat(remplace_for_verif_rib(compte.substring(4,11)));
	//calcul de la clé théorique
	var clet = 97-(62*A+34*B+3*C)%97;

	return eval(clet) == eval(cle);
}

function remplace_for_verif_rib(num_brut)
{
	// Fonction de remplacement de caractères dans la vérification du RIB
	
	var num = num_brut.toUpperCase();
	var ret = "";
	var c;
	for (i=0;i<num.length;i++)
	{
		c = num.charCodeAt(i);
		if (c >= 65 && c <= 82)
		{
			c = ((c-65) % 9) + 1;
			ret += c;
		}
		else if (c >= 83 && c <= 90)
		{
			c = ((c-64) % 9) + 1;
			ret += c;
		}
		else
		{
			ret += String.fromCharCode(c);
		}
	}
	return ret;
}
