function MM_findObj(n, d) { //v4.01
  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);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function YY_checkform() { //v4.69
//copyright (c)1998,2002 Yaromat.com
  var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
  
  var orfield1=false;
  var orfield2=false;
  var orfield3=false;
  for (i=1; i<a.length;i=i+4){
    
	// set variables in order to use t in the following if-statement
	o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
    o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
    v=o.value;t=a[i+2];
	
	// set t=7 for all options which should be filled 'either or'
	// only works for string fields and can only be used for one
	// group of 'either or'-fields
	if (t==7){	//orfield1
  		//alert('t='+t+' und v.length='+v.length+' und v.value='+v);
		err=true;
		if(orfield1){
			//alert('vorheriges Feld war bereits gefüllt!');
			err=false;
		}
		else if(!(v.length>0)){ // field is empty, search for other field which are filled
			//alert('Feld leer!');
			for (j=1; (j<a.length);j=j+4){
				oo=MM_findObj(a[j].replace(/\[\d+\]/ig,""));
				vv=oo.value;
				tt=a[j+2];
				//alert('Schlaufe: tt='+tt+', v='+v);
				if(tt==7 && vv.length>0){
					//alert('nächstes Feld ist bereits gefüllt!');
					orfield1=true;
					err=false;
				}
			}
		}
		else{ // field is not empty
			//alert('Feld nicht leer!');
			orfield1=true;
			err=false;
		}
	}
	// use t=8 for a second 'either or' field group
	else if (t==8){
  		err=true;
		if(orfield2){
			err=false;
		}
		else if(!(v.length>0)){ // field is empty, search for other field which are filled
			for (j=1; (j<a.length);j=j+4){
				oo=MM_findObj(a[j].replace(/\[\d+\]/ig,""));
				vv=oo.value;
				tt=a[j+2];
				if(tt==8 && vv.length>0){
					orfield2=true;
					err=false;
				}
			}
		}
		else{ // field is not empty
			orfield2=true;
			err=false;
		}
	}
	// use t=9 for a third 'either or' field group
	else if (t==9){
  		err=true;
		if(orfield3){
			err=false;
		}
		else if(!(v.length>0)){ // field is empty, search for other field which are filled
			for (j=1; (j<a.length);j=j+4){
				oo=MM_findObj(a[j].replace(/\[\d+\]/ig,""));
				vv=oo.value;
				tt=a[j+2];
				if(tt==9 && vv.length>0){
					orfield3=true;
					err=false;
				}
			}
		}
		else{ // field is not empty
			orfield3=true;
			err=false;
		}
	}
	
	else{
		if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
	    o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
	    o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
	    v=o.value;t=a[i+2];
	    if (o.type=='text'||o.type=='password'||o.type=='hidden'){
	      if (r&&v.length==0){err=true}
	      if (v.length>0)
	      if (t==1){ //fromto
	        ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
	      } else if (t==2){
	        rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-z]{2,4}$");if(!rx.test(v))err=true;
	      } else if (t==3){ // date
	        ma=a[i+1].split("#");at=v.match(ma[0]);
	        if(at){
	          cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
	          dte=new Date(cy,cm,cd);
	          if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
	        }else{err=true}
	      } else if (t==4){ // time
	        ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
	      } else if (t==5){ // check this 2
	            if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
	            if(!o1.checked){err=true}
	      } else if (t==6){ // the same
	            if(v!=MM_findObj(a[i+1]).value){err=true}
	      }
	    } else
	    if (!o.type&&o.length>0&&o[0].type=='radio'){
	          at = a[i].match(/(.*)\[(\d+)\].*/i);
	          o2=(o.length>1)?o[at[2]]:o;
	      if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
	      if (t==2){
	        oo=false;
	        for(j=0;j<o.length;j++){oo=oo||o[j].checked}
	        if(!oo){s+='* ' +a[i+3]+'\n'}
	      }
	    } else if (o.type=='checkbox'){
	      if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
	    } else if (o.type=='select-one'||o.type=='select-multiple'){
	      if(t==1&&o.selectedIndex/1==0){err=true}
	    }else if (o.type=='textarea'){
	      if(v.length<a[i+2]){err=true}
	    }
	}
    if (err){s+='* '+a[i+3]+'\n'; err=false}
  }
  if (s!=''){alert('Die Angaben sind unvollständig oder enthalten Fehler:\t\t\t\t\t\n\n'+s)}
  return (s=='');
}

