var validationArgs = new Array();
function addFormValidator(form) {
    for(var i=1; i<arguments.length; i++) {
    	validationArgs[i-1]=arguments[i];
    }
	if ( form.addEventListener ) {
		form.addEventListener('submit', validateForm, false);
	} else if ( form.attachEvent ) {
		form.attachEvent('submit', validateForm);
	} else {
	}
}

function validateForm( event ) {
	var value = MM_validateForm(validationArgs);
	if ( !value ) {
		if (event.preventDefault) {
	        event.preventDefault();
	    } else {
	        event.returnValue = false;
	        return false;
	    }
	}
}

function MM_findObj(n, d) { //v4.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);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}
function MM_validateForm( validationArray ) { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  args = validationArray;
  var arg1Array = Array();
  var arg2Array = Array();
  for (i=0; i<(args.length-2); i+=3) {
    test=args[i+2];
  	arg1Array = args[i].split(":");
    arg2Array = args[i+1].split(":");
    name1 = arg1Array[1];
    name2 = arg2Array[1];
    val=MM_findObj(arg1Array[0]);
    val2=MM_findObj(arg2Array[0]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
	  if ( test.indexOf('match') !=-1 ) {
	  	if ( val != val2.value ) errors += '- '+name1+' ja '+name2+' eivät täsmää.\n';
      } else if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+name1+' täytyy olla sähköpostiosoite.\n';
	  } else if ( test.indexOf( 'both' ) != -1) {
	        if ( val != "" ) {
	        	if ( val2.value == "" ) {
	        		errors += '- \''+name2+'\' on pakollinen, jos \''+name1+'\' on täytetty.\n';
	        	}
	        }
      } else if ( test.indexOf( 'checked' ) != -1) {
	        if ( val2.value == "" ) {
	        	if ( MM_findObj(arg1Array[0]).checked ) {
	        		errors += '- \''+name2+'\' on pakollinen, jos \''+name1+'\' on valittu.\n';
	        	}
	        }
      } else if (test!='R') {
        if (isNaN(val)) errors+='- \''+name1+'\' täytyy olla numero.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (val<min || max<val) errors+='- \''+name1+'\' täytyy olla numero väliltä '+min+' - '+max+'.\n';
    } }
    } else if (test.charAt(0) == 'R') errors += '- '+name1+' on pakollinen kenttä.\n'; }
  } if (errors) alert('Seuraavat virheet havaittiin:\n'+errors);
  return (errors == '');
}
