
        //window.onerror = null;
		ns6 = (!document.all && document.getElementById)? true:false;
		ns4 = (document.layers)? true:false;
		ie4 = (document.all)? true:false;
		window.onresize=resize;
        function resize(){
          document.location.href=document.location.href;
        }
		
		/*
		**la fonction getElement prend en parametre un id de layer
		**et renvoie la methode d'acces aux proprietes selon le navigateur
		*/
		
			
		function getElement(id,tree){
			if (ns6) {
			 	return document.getElementById(id);
				}else 	if (ie4) {
			 	  return document.all[id].style;
				}else if (ns4){
				  return eval(getNS4Element(id,tree));
			 	}				
			}
			
	   /*
		**fonction qui renvoie l'attribut top du calk
		*/
			
			function getTop(id,tree){
			
			if(ns4){
				return getElement(id,tree).top;
				
				}else if(ns6){
			
				return getElement(id,tree).offsetTop;
				
				}else if(ie4){
				
			  	return getElement(id,tree).pixelTop;
				 
			
					}
				
			}
			
		/*
		**fonction qui renvoie l'attribut left du calk
		*/
		
		
		function getLeft(id,tree){
			
			if(ns4){
				return getElement(id,tree).left;
				
				}else if(ns6){
			
				return getElement(id,tree).offsetLeft;
				
				}else if(ie4){
				
			  	return getElement(id,tree).pixelLeft;
				 
			
					}
				
			}
			
			
	    /*
		**getHeight  fonction qui renvoit la hauteur du calque
		*/
			function getHeight(id,tree){
			  if(ns4)return getElement(id,tree).document.height;
			  else if(ie4)return document.all[id].scrollHeight;
			  else if(ns6)return  getElement(id,tree).offsetHeight;
			}
			
		/*
		**getWidth fonction qui renvoit la largeur du calque
		*/
			function getWidth(id,tree){
			  if(ns4)return getElement(id,tree).document.width;
			  else if(ie4)return document.all[id].scrollWidth;
			  else if(ns6)return getElement(id,tree).offsetWidth;
			 
			}
			
			
	    /*
		**setHeight fonction qui sette la hauteur du calque
		*/
			function setHeight(id,tree,val){
			  if(ns4)return getElement(id,tree).height=val;
			  else if(ns6)return getElement(id,tree).style.height=val;
			  else if(ie4)return getElement(id,tree).height=val;
			}
			
		/*
		**setWidth fonction qui sette la longueur du calque
		*/
			function setWidth(id,tree,val){
			  if(ns4)return getElement(id,tree).width=val;
			  else if(ns6)return getElement(id,tree).style.width=val;
			  else if(ie4)return getElement(id,tree).width=val;
			}
			
		/*
		**setTop sette le parametre top du calque id
		*/
		
		function setTop(id,tree,intTopPosition){
		    if(ns6)getElement(id,tree).style.top = intTopPosition;
			else getElement(id,tree).top = intTopPosition;	
		}
				
		/*
		**setLeft sette le parametre left du calque id
		*/
		
		function setLeft(id,tree,intLeftPosition){
		    if(ns6)getElement(id,tree).style.left = intLeftPosition;
			else getElement(id,tree).left = intLeftPosition;
		}
				
				

       /*
		**la fonction show fait apparaitre le calque id 
		*/
		
		function show(id,tree) {
			 
			 if (ns4) {
			      eval(getNS4Element(id,tree)+".visibility='show'");
			 }
			 else if (ie4) {
			 
			 	document.all[id].style.visibility = 'visible'
				
				}else if (ns6) {
			 
			 	getElement(id,tree).style.visibility = 'visible'
				
				}
			}
		
		/*
		**la fonction show fait disparaitre le calque id 
		*/
		
		function hide(id,tree) {
		 
		 	if (ns4){
			
				 eval(getNS4Element(id,tree)+".visibility='hide'");
				 
		 		}else if (ie4) { 
					
					document.all[id].style.visibility = 'hidden';
					
					}else if (ns6) {
			 
			 	getElement(id,tree).style.visibility = 'hidden'
				
				}
			}
			
			function inherit(id,tree) {
		 
		 	if (ns4){
			
				 eval(getNS4Element(id,tree)+".visibility='inherit'");
				 
		 		}else if (ie4) { 
					
					document.all[id].style.visibility = 'inherit';
					
					}else if (ns6) {
			 
			 	getElement(id,tree).style.visibility = 'inherit';
				
				}
			}
			
			/*
			** fonctions de déplacement compatible iex,nsx
			*/
			
			function move_to(id,tree,x,y){
			  setLeft(id,tree,x);
			   getTop(id,tree,y);
			}
			function move_by(id,tree,x,y){
			   setLeft(id,tree,getLeft(id,tree)+x);
			  setTop(id,tree,getTop(id,tree)+y);
			}
			
			 
		 /*
		**fonction qui renvoit la position de la scrollbar verticale du navigateur
		*/
		
		function getScroll(){
		
			if(ns4){
			
				return window.pageYOffset;
				
				}else if(ns6){
			
			return scrollY;
			
			}else if(ie4){
			
				return document.body.scrollTop;
				
				}
			}
			
			
			/*
			** fonctions qui donnent des informations sur les dimensions
			** de la partie utile des navigateurs
			*/
			
			function getScreenWidth(){
			 if(ns4)return window.innerWidth-16;
			 else if(ns6)return window.innerWidth-18;
			 else if(ie4)return document.body.offsetWidth-20;
			}
			function getScreenHeight(){
			 if(ns4)return window.innerHeight;
			 else if(ns6)return window.innerHeight;
			 else if(ie4)return document.body.offsetHeight;
			}
			function getScreenCenter(){
			 var xCenter=Math.round(getScreenWidth()/2);
			 var yCenter=Math.round(getScreenHeight()/2);
			 return new Point(xCenter,yCenter);
			 
			}
			/*
			** fonctions de positionnement des elements
			** indépendament de la résolution de l'ecran
			*/
			function setRelatifTop(id,tree,top){
			}
			function  setRelatifBottom(id,tree,marge){
			  var decalage=getHeight(id,tree)+marge;
			  var inter=getScreenHeight()-decalage;
			  setTop(id,tree,inter);
			}
			function setRelatifRight(id,tree,margin){
				var newLeft=getScreenWidth()-getWidth(id,tree)-margin;
				setLeft(id,null,newLeft);
			}
			function setRelatifPos(id,tree,left,top){
			}
			function setRelatifCenter(id,tree){
				var p=getScreenCenter();
				var width=Math.round(getWidth(id,tree)/2);
				var height=Math.round(getHeight(id,tree)/2);
				setTop(id,tree,p.y-width);
				setLeft(id,tree,p.x-height);
			}
			
			
			/*
			**fonction de clipping
			*/
			
			
			function getPointOfClip(id,tree,point){
			  var result;
			  if(ie4 || ns6){
			   if(ie4)
                 h=getElement(id,tree).clip;
				else
				 h=getElement(id,tree).style.clip;
                d=h.indexOf("(",0);
                a=h.indexOf(")",0);
                ibo=h.slice(d+1,a);
                wili=ibo.split(" ");
				if(point=="top")result=parseInt(wili[0]);
                else if(point=="right")result=parseInt(wili[1]);
                else if(point=="bottom")result=parseInt(wili[2]);
                else if(point=="left")result=parseInt(wili[3]);
			  }
			  else if(ns4){
			    if(point=="top")result=getElement(id,tree).clip.top;
                else if(point=="right")result=getElement(id,tree).clip.right;
                else if(point=="bottom")result=getElement(id,tree).clip.bottom;
                else if(point=="left")result=getElement(id,tree).clip.left;
			 }
			 return result;
		   }
			function setPointOfClip(id,tree,top,right,bottom,left){
			 if(ie4)getElement(id,tree).clip="rect("+top+"px "+right+"px "+bottom+"px "+left+"px "+")";
			 else if(ns6)getElement(id,tree).style.clip="rect("+top+"px "+right+"px "+bottom+"px "+left+"px "+")";
			 else if(ns4){
			    getElement(id,tree).clip.top=top;
			    getElement(id,tree).clip.right=right;
			    getElement(id,tree).clip.bottom=bottom;
			    getElement(id,tree).clip.left=left;
			 }
			
			}
		
		/*
		**la fonction setContentTag édite dynamiquement une couche,elle prend comme paramètre id de la couche
		** la racine de son arbre et le texte à éditer.
		*/
		
		
	function setContentTag(id,tree,text){
     if(ie4)document.all[id].innerHTML=text;
      else if(ns4){
      eval(getNS4Element(id,tree)+".document.open()");
      eval(getNS4Element(id,tree)+".document.write(text)");
	  eval(getNS4Element(id,tree)+".document.close()");
     }
	 else if(ns6)getElement(id,tree).innerHTML=text;
    }
	
	/*
	**vette fonction définie la couleur de fond de la couche
	*/
	
	function setBGColor(id,tree,color){
	  if(ie4)
	   getElement(id,tree).bgColor=color;
      else if(ns4)
        eval(getNS4Element(id,tree)+".bgColor='color'");
	}
function galere(id,tree){
  var relativeWay=tree.skimDepth(id);
  var chaine="";
  relativeWay.getReverse();
  while(relativeWay.top!=null){
    //j'ai remplacer relativeWay.top.value
    chaine+="document.layers['"+relativeWay.top.getValue()+"'].";
	relativeWay.pop();
  }
  return chaine.substring(0,chaine.length-1);
}		
function getNS4Element(id,tree){
 var result="";
 var str="document.layers['"+id+"']";
 if(typeof(eval(str))!="undefined")
   result=str;
  else
   result=galere(id,tree);
  return result;
}			
// gestion des evenements
function startMouseMoveEvent(e){
  if(ns4){
   My=e.pageY;
   Mx=e.pageX;
  }
 else if(ie4){
   My=event.y+getScroll();
   Mx=event.x;
 }
 else if(ns6){
    Mx=e.clientX;
    My=e.clientY;
 }
}
/*objet qui récupère les données des formulaires de couches imbriquées ou non
** il faut utiliser un lien qui aura pour charge d'appeler une fonction qui
** liera les données du formulaire imbriqué avec le formulaire contenant les
** champs hidden
*/			
function UniversalForm(nameForm,nameLayerParent,root){
	this.root=root;
	this.nameForm=nameForm;
	this.nameParent=nameLayerParent;
	this.getValue=UniversalForm_getValue;
}
/* type correspond au type d'élément de formulaire
** cette methode renvoie l'indice de l'élément radio sélectionné
** cette methode renvoie un booleen pour l'élément checkbox sélectionné
*/
function UniversalForm_getValue(name,type){
	var nameRef="";
	var value="alert('type incorrect:'+type)";
	if(ns6||ie4||this.nameParent=="")nameRef="document."+this.nameForm+"."+name;
	else if(ns4)nameRef=getNS4Element(this.nameParent,this.root)+".document."+this.nameForm+"."+name;		
   	if(type=="text")value=nameRef+".value";
	else if(type=="select")value=nameRef+".options["+nameRef+".selectedIndex].value";
	else if(type=="checkbox")value=nameRef+".checked";
	else if(type=="radio"){
		for(var i=0;i<eval(nameRef+".length");i++)
			if(eval(nameRef+"["+i+"].checked"))return i;
	}
	else if(type=="file")value=nameRef+".value";
	return eval(value);
	
}
function UniversalForms(stringFormTargetName,stringFormSourceName,stringLayerFormName,root,stringFilter){
	this.formTargetName=stringFormTargetName;
	this.formSourceName=stringFormSourceName;
	this.layerFormName=stringLayerFormName;
	this.pileDec="";
	this.root=root;
	this.form="";
	this.refForm="";
	this.initialData=new Array();
	this.stringFilter=stringFilter;
	this.defaultError="champ obligatoire";
	this.stackError="les erreurs suivantes ont été détectées: \n";
	this.tokenFilter=new Array();;
	this.forms=new Array();
	this.validate=UniversalForms_validate;
	this.genLog=UniversalForms_genLog;
	this.getErrorMessage=UniversalForms_getErrorMessage;
	this.isObligatory=UniversalForms_isObligatory;
	this.init=UniversalForms_init;
	this.reset=UniversalForms_reset;
	this.initTokenFilter=UniversalForms_initTokenFilter;
	this.evalPredicat=UniversalForms_evalPredicat;
	this.padding=UniversalForms_padding;
	this.delAsterix=UniversalForms_delAsterix;
	this.skill=UniversalForms_skill;
	this.extract=UniversalForms_extract;
	this.getType=UniversalForms_getType;
	this.setDefaultError=UniversalForms_setDefaultError;
	this.setBaseStackError=UniversalForms_setBaseStackError
}
function UniversalForms_init(){
	this.form=new UniversalForm(this.formSourceName,this.layerFormName,root);
	this.refForm="document."+this.formTargetName+".elements";
	for(var i=0;i<eval(this.refForm+".length");i++){
		this.initialData[i]=eval(this.refForm+"["+i+"].value");
	}
	this.initTokenFilter();
}
function UniversalForms_reset(){
	for(var i=0;i<eval(this.refForm+".length");i++){
		eval(this.refForm+"["+i+"].value='"+this.initialData[i]+"'");
	}
}
function UniversalForms_validate(){
	var nameElem="";
	var typeElem="";
	var interForm="";
	var refElem="";
	for( var i=0;i<this.tokenFilter.length;i++){
		nameElem=this.delAsterix(this.tokenFilter[i][0]);
		valueElem=this.refForm+"['"+nameElem+"'].value";
		typeElem=eval(valueElem);
		interForm="this.form.getValue('"+nameElem+"','"+typeElem+"')";
		this.genLog(eval(interForm),i); //alert(valueElem+"="+interForm);
		eval(valueElem+"="+interForm);
	}
	if(this.stackError!="les erreurs suivantes ont été détectées: \n"){
		alert(this.getErrorMessage());
		this.reset();
	}
	else
		eval("document."+this.formTargetName+".submit()");
}
function UniversalForms_genLog(fieldValue,index){
	var fieldName=this.tokenFilter[index][0];
	var test_obligatory=fieldValue=="" && this.isObligatory(fieldName);
	
	if(fieldValue=="" && this.isObligatory(fieldName))this.stackError+=this.delAsterix(fieldName)+": "+this.defaultError+" \n";
	else if(this.evalPredicat(index))this.stackError+=this.delAsterix(fieldName)+":"+this.tokenFilter[index][2]+"\n";
}
function UniversalForms_getErrorMessage(){
	return this.stackError;
}
function UniversalForms_initTokenFilter(){
	tabInter=new Array();
	var enonce=this.stringFilter.split("|");
	for(var i=0;i<enonce.length;i++){
		tabInter=enonce[i].split(",");
		this.tokenFilter[i]=new Array();
		for(var j=0;j<tabInter.length;j++)
			this.tokenFilter[i][j]=tabInter[j];
	}
	this.padding();
}
function UniversalForms_evalPredicat(index){
  	var test=this.skill(this.tokenFilter[index][1]);
	var ind=test.indexOf(";")>0?test.indexOf(";"):test.length;
	var test=this.pileDec+test.substring(0,ind);
	return eval(test);
}
function UniversalForms_isObligatory(fieldName){
	return fieldName.indexOf("*")>=0;
}	
function UniversalForms_padding(){
		var count=this.tokenFilter.length;
		for(var j=0;j<eval("document."+this.formTargetName+".elements.length");j++){
			var know=-1;
			for(var i=0;i<this.tokenFilter.length;i++){
				if(this.delAsterix(this.tokenFilter[i][0])==eval("document."+this.formTargetName+".elements["+j+"].name")){
					know=1;
					break;
				}
			}
			if(know<0){
				this.tokenFilter[count]=new Array();
				this.tokenFilter[count][0]=eval("document."+this.formTargetName+".elements["+j+"].name");
				this.tokenFilter[count][1]="false";
				this.tokenFilter[count][2]="no";
				count++;
			}
		}
}		
function UniversalForms_delAsterix(chaine){
	return this.isObligatory(chaine)?chaine.substring(1):chaine;
}
function UniversalForms_skill(chaine){
	var d=chaine.indexOf("[");
	var f=chaine.indexOf("]");
	if(d>=0){
		var base=chaine.substring(0,d);
		this.extract(chaine.substring(d+1,f));
		base+=chaine.substring(d+1,f)+" "+this.skill(chaine.substring(f+1)+" ");
		return base+";";
	}
	else return chaine;
}
function UniversalForms_extract(chaine){
		var typeElem=this.getType(chaine);
		var valueElem=eval("this.form.getValue('"+chaine+"','"+typeElem+"')");
	    this.pileDec="var "+chaine+"='"+valueElem+"';"+this.pileDec;
}
function UniversalForms_getType(chaine){
	var inter="";
	var result="";
	for(var i=0;i<this.initialData.length;i++){
		inter=eval(this.refForm+"["+i+"].name");
		if(inter==chaine){
			result=this.initialData[i];
		}
	}
	return result;
}
function UniversalForms_setDefaultError(chaine){
	this.defaultError=chaine;
}
// définit l'annonce de l'apparition d'erreur au sein de la boîte de dialogue
function UniversalForms_setBaseStackError(chaine){
	this.stackError=chaine;
}
