function validateForm(form, rules) { 
  //clear out any old errors 
  var message = "";
  //$("messages").slideUp(); 
  //$(".error-message").hide(); 
  //loop through the validation rules and check for errors 
  //alert(rules);
  for( var field in rules) {
  	
  	var fname = field;
  	var iname = fname;
  	
    field = rules[field][0];
    
    var val = "";
    var ipt = form[field['field']];
    //alert(ipt.value);
    
    if(Boolean(ipt.type)){
    	val = ipt.value;
		} else if( Boolean(ipt.length) ){
			
			for(var i = 0; i < ipt.length; i++){
				
        if(ipt[i].checked) {
            val = ipt[i].value;
            i++;
            break;
      	}
      }
      iname += ipt[i-1].value;
      
		}
		iname = iname.split(".").join("");
		//alert(val);
		//dump(eval(field['rule']));
      //console.log(this['rule']); 
      //check if the input exists 
      //alert($(iname));
      if ($(iname) != undefined) { 
        var valid = true; 
        //alert(field['rule']);
        //alert(field['rule'].match(/^range/));
        if (field['allowEmpty'] && val == '') { 
          //do nothing 
        } else if (field['rule'].match(/^range/)) { 
        	
          var range = field['rule'].split('|'); 
          if (val < parseInt(range[1])) { 
            valid = false; 
          } 
          if (val > parseInt(range[2])) { 
            valid = false; 
          } 
        } else if (field['negate']) { 
          if (val.match(eval(field['rule']))) { 
            valid = false; 
            
          } 
        } else if (!val.match(eval(field['rule']))) {
          valid = false;
        } 
        
        var prt = $(iname).parentNode;
        var cld = getElementsByTagAndClassName('div', 'error-message', prt);
        //alert(valid);
        if (!valid) { 
          message += "<p>" + field['message'] + "</p>";
          //もしまだエラーメッセージがなければ
          //alert(fname);
          if(!cld.length){
          	if(!Boolean($(fname+"Error"))){
							var CDIV = DIV({'class' : 'error-message', 'id' : fname+"Error"});
							prt.appendChild(CDIV);
          	}
          	$(fname+"Error").innerHTML = field['message'];
          }
        }else{
        	//OKなのにもしまだエラーメッセージがあれば
          if(cld.length){
          	for(var i = 0; i < cld.length; i++){
          		prt.removeChild(cld[i]);
          	}
          }else if(Boolean($(fname+"Error"))){
          	$(fname+"Error").innerHTML = "";
          }
        }
      } 

  }; 
   
  if(message != "") {
  	 
    //$("messages").wrapInner("<div class='errors'></div>"); 
    //$("#messages").slideDown(); 
    return false; 
  } 

  return true; 
} 