function updateSize(pField,pMaxChar){
	vAnch = findAnchor(pField.name+'_ctrl')
	if(vAnch!=null){
		document.anchors[vAnch].innerHTML = (pMaxChar-pField.value.length) + ' car.';
	}
}

function checkTextarea(pField,pMaxChar){
	if(pField.value.length>pMaxChar){
		pField.value = pField.value.substr(0,pMaxChar);
		alert("Max. "+pMaxChar+" caractères");
	}
	updateSize(pField,pMaxChar);
}
	
function isNull(data)
{
	if(data==null || data=="")
		return true ;
	else
		return false ;
}

function isDate(Dat1) 
  {
    var ok = false;
	if (Dat1.length > 5) 
	   {
		  var DatArr1 = Dat1.split(".");
          if (DatArr1.length == 3) 
		    {
			if (DatArr1[2].length == 2)
			 {
			 DatArr1[2] = 20 + DatArr1[2];
		     }
			 var ckDate1 = new Date(DatArr1[2], DatArr1[1] - 1, DatArr1[0]);
             ok = (ckDate1.getMonth() == DatArr1[1] - 1) && (ckDate1.getYear() == DatArr1[2]) && (ckDate1.getDate() == DatArr1[0]);
             }
       }
       return ok;
  }

function emailCheck (emailStr) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"

// The following pattern describes the structure of the user
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
	var matchArray=emailStr.match(emailPat)

	if (matchArray==null)
	{
		return false
	}
	var user=matchArray[1]
	var domain=matchArray[2]

// See if "user" is valid 
	if (user.match(userPat)==null)
	{
	    // user is not valid
	    return false
	}

var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null)
	{
		// this is an IP address
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
			{
				alert("Adresse IP invalide !")
				return false
	    		}
    		}
	return true;
	}

// Domain is symbolic name
	var domainArray=domain.match(domainPat)
	if (domainArray==null)
	{
		return false
	}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length

	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3)
	{
		// the address must end in a two letter or three letter word.
		return false
	}

// Make sure there's a host name preceding the domain.
	if (len<2)
	{
		return false
	}

	return true;
}

function MM_findObj(n, d) { //v3.0
  var p,i,x;
  
  if(!d)
  	d = document;
	 
  if((p=n.indexOf("?"))>0&&parent.frames.length)
  {
    d = parent.frames[n.substring(p+1)].document;
	n = n.substring(0,p);
  }
  
  if(!(x=d[n])&&d.all)
  	x = d.all[n];
	
  for (i=0;!x&&i<d.forms.length;i++)
  	x = d.forms[i][n];
	
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
  	x = MM_findObj(n,d.layers[i].document);

  return x;
}

function findAnchor(aName) { //v1.0
  var i, x ;
  x = -1 ;
  for (i=0;i<document.anchors.length;i++)
  {
  	if (document.anchors[i].name==aName)
	{
		x = i ;
	}
  }
  return x;
}

function MM_validateForm() { //v3.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3)
  {
  	test=args[i+2];
	msg = args[i+1];
	val=MM_findObj(args[i]);
	val = eval("document.forms.frm." + args[i])
	
    if (val)
	{
		nm=val.name; 
		nAnchor = findAnchor(nm)
		document.anchors[nAnchor].innerHTML = ""
		if ((val=val.value)!="")
		{
	      		if (test.indexOf('isDate')!=-1)
			{
				if(!isDate(val.substring(0,val.length))) 
				{
					document.anchors[nAnchor].innerHTML = "<font color='Green'><b>*</b></font><font size='1'>" + msg + "</font>"
					errors+='- '+nm+' must contain an valid date.\n';
				}
      			}

	      		if (test.indexOf('isEmail')!=-1)
			{
				if(!emailCheck(val.substring(0,val.length))) 
				{
					document.anchors[nAnchor].innerHTML = "<font color='Green'><b>*</b></font>&nbsp;<font size='1'>" + msg + "</font>"
					errors+='- '+nm+' must contain an e-mail address.\n';
				}
      			}

			if(test.indexOf('isNum')!=-1)
			{
				num = parseFloat(val);
				if (isNaN(val))
				{
					document.anchors[nAnchor].innerHTML = "<font color='Green'><b>*</b></font>&nbsp;<font size='1'>" + msg + "</font>"
					errors+='- '+nm+' must contain a number.\n';
				}
			}
			
			if (test.indexOf('inRange') != -1) {
				num = parseFloat(val);
				p=test.indexOf(':');
          		min=test.substring(8,p);
				max=test.substring(p+1);
				if (isNaN(val))
				//if (val!=''+num)
				{
					document.anchors[nAnchor].innerHTML = "<font color='Green'><b>*</b></font>&nbsp;<font size='1'>" + msg + "</font>"
					errors+='- '+nm+' must contain a number.\n';
				}
				else
				{
	          		if (num<min || max<num)
					{
						document.anchors[nAnchor].innerHTML = "<font color='Green'><b>*</b></font>&nbsp;<font size='1'>" + msg + "</font>"
						errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';			
					}
				}
			}

		}
		else
			if (test.charAt(0) == 'R')
			{
				errors += '- '+nm+' is required.\n';
				if (msg=='')
					document.anchors[nAnchor].innerHTML = "<font color='Crimson'><b>*</b></font>&nbsp;<font size='1'>Requis</font>"
				else
					document.anchors[nAnchor].innerHTML = "<font color='Crimson'><b>*</b></font>&nbsp;<font size='1'>" + msg + "</font>"
			}
		msg='';
	}
  }
  document.MM_returnValue = (errors == '');
}