function htmlFormValidator(form, validateProperty){ 
	var htmlFormValidator = new HtmlFormValidator(); 
	return htmlFormValidator.execute(form, validateProperty); 
}

var HtmlFormValidator = function()
{ 
	var errors = ''; 
	var radioRequiredList = new Array(); 
	var radioMaskList = new Array(); 
	var radioMaxlengthList = new Array(); 
	var radioMinlengthList = new Array();
	var radioSpaceList = new Array(); 
	var checkboxRequiredList = new Array(); 
	var checkboxMaskList = new Array(); 
	var checkboxMaxlengthList = new Array(); 
	var checkboxMinlengthList = new Array(); 
	var checkboxSpaceList = new Array();
	
	this.execute = function(form, validateProperty) 
	{ 
		errors = ''; 
 		for( var i= 0; i < form.elements.length; i++ ){ 
 			if( form.elements[i] ) { 
	 			for( key in validateProperty[ form.elements[i].name ] ) { 
	 				switch (key) { 
	 					case 'required': 
	 						this.required(form,form.elements[i],validateProperty); 
	 						break; 
	 					case 'maxlength': 
	 						this.maxlength(form,form.elements[i],validateProperty); 
	 						break; 
	 					case 'minlength': 
	 						this.minlength(form,form.elements[i],validateProperty); 
	 						break; 
	 					case 'mask': 
	 						this.mask(form,form.elements[i],validateProperty); 
	 						break; 
	 					case 'space': 
	 						this.space(form,form.elements[i],validateProperty); 
	 						break; 
	 					default : 
	 						break; 
	 				} 
	 			}
 			} 
 		} 
	 	if (errors.length > 0){ alert(errors); return false; } else { return true; } 
 	}
 	
 	/**
 	* 必須チェック
 	**/
	this.required = function(form,formObject,validateProperty){ 
	 	if( formObject.type === 'text' || formObject.type === 'select-one' || formObject.type === 'hidden' || formObject.type === 'password' ) { 
	 		if( form[formObject.name].value == null || form[formObject.name].value == '') { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'を入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'radio' ){ 
	 		var ret = ''; 
	 		if( radioRequiredList[formObject.name] ) return; 
	 		radioRequiredList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret = form[formObject.name][j].value; 
	 			} 
	 		} 
	 		if( ret == null || ret == '') { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'を入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'checkbox' ){ 
	 		var ret = ''; 
	 		if( checkboxRequiredList[ form[formObject.name].name ] ) return; 
	 		checkboxRequiredList[ form[formObject.name].name ] = true; 
	 		if (form[formObject.name].length == undefined) {
	 			if (form[formObject.name].checked == true ){ 
	 				ret += form[formObject.name].value + ','; 
	 			} 
	 		} else {
		 		for (var j=0;j<form[formObject.name].length;j++){ 
		 			if (form[formObject.name][j].checked == true ){ 
		 				ret += form[formObject.name][j].value + ','; 
		 			} 
		 		} 
	 		}
	 		if (ret != null && ret != ''){ 
	 			ret = ret.substring(0,ret.lastIndexOf(',')); 
	 		} 
	 		if( ret == null || ret == '') { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'を入力してください。\n'; 
	 		} 
	 	} 
	} 
	
	/**
	* 最大文字数チェック
	**/
	this.maxlength = function(form,formObject,validateProperty){ 
	 	if( formObject.type === 'text' || formObject.type === 'select-one' || formObject.type === 'hidden' || formObject.type === 'password' ){ 
	 		if( form[formObject.name].value.length > validateProperty[form[formObject.name].name ]['maxlength'] ) { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'は' + validateProperty[formObject.name]['maxlength'] + '文字以内で入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'radio' ){ 
	 		var ret = ''; 
	 		if( radioMaxlengthList[formObject.name] ) return; 
	 		radioMaxlengthList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret = form[formObject.name][j].value; 
	 			} 
	 		} 
	 		if( ret.length > validateProperty[formObject.name]['maxlength']) { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'は' + validateProperty[formObject.name]['maxlength'] + '文字以内で入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'checkbox' ){ 
	 		var ret = ''; 
	 		if( checkboxMaxlengthList[formObject.name] ) return; 
	 		checkboxMaxlengthList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret += form[formObject.name][j].value + ','; 
	 			} 
	 		} 
	 		if (ret != null && ret != ''){ 
	 			ret = ret.substring(0,ret.lastIndexOf(',')); 
	 		} 
	 		if( ret.length > validateProperty[formObject.name]['maxlength']) { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'は' + validateProperty[formObject.name]['maxlength'] + '文字以内で入力してください。\n'; 
	 		} 
	 	} 
	}
				
	/**
	 * 最小文字数チェック
	 */
	this.minlength = function(form,formObject,validateProperty){ 
	 	if( formObject.type === 'text' || formObject.type === 'select-one' || formObject.type === 'hidden' || formObject.type === 'password' ) { 
	 		if( form[formObject.name].value.length < validateProperty[ form[formObject.name].name ]['minlength'] ) { 
	 			errors += validateProperty[form[formObject.name].name]['name']  
	 					+ 'は' + validateProperty[ form[formObject.name].name ]['minlength'] + '文字以上で入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'radio' ){ 
	 		var ret = ''; 
	 		if( radioMinlengthList[formObject.name] ) return; 
	 		radioMinlengthList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret = form[formObject.name][j].value; 
	 			} 
	 		} 
	 		if( ret.length < validateProperty[form[formObject.name].name ]['minlength']) { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'は' + validateProperty[formObject.name]['minlength'] + '文字以上で入力してください。\n'; 
	 		} 
	 	} else if ( formObject.type === 'checkbox' ){ 
	 		var ret = ''; 
	 		if( checkboxMinlengthList[formObject.name] ) return; 
	 		checkboxMinlengthList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret += form[formObject.name][j].value + ','; 
	 			} 
	 		} 
	 		if (ret != null && ret != ''){ 
	 			ret = ret.substring(0,ret.lastIndexOf(',')); 
	 		} 
	 		if( ret.length < validateProperty[form[formObject.name].name ]['minlength']) { 
	 			errors += validateProperty[formObject.name]['name']  
	 					+ 'は' + validateProperty[formObject.name]['minlength'] + '文字以上で入力してください。\n'; 
	 		} 
	 	} 
	}
	
	/**
	* 正規表現チェック
	**/
	this.mask = function(form,formObject,validateProperty){ 
	 	if ( formObject.type === 'text' || formObject.type === 'select-one' || formObject.type === 'hidden' || formObject.type === 'password' ){ 
	 		if (form[formObject.name].value != null && form[formObject.name].value != ''){ 
	 			if( !form[formObject.name].value.match(validateProperty[ form[formObject.name].name ]['mask']) ) { 
	 				errors += validateProperty[form[formObject.name].name]['name']  
	 						+ 'は' + validateProperty[ form[formObject.name].name ]['maskword'] + '\n'; 
	 			} 
	 		} 
	 	} else if ( formObject.type === 'radio' ){ 
	 		var ret = ''; 
	 		if( radioMaskList[formObject.name] ) return; 
	 		radioMaskList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret = form[formObject.name][j].value; 
	 			} 
	 		} 
			if( ret != null && ret != '' ){
	 			if( !ret.match(validateProperty[ formObject.name ]['mask']) ) { 
	 				errors += validateProperty[formObject.name]['name']  
	 						+ 'は' + validateProperty[formObject.name]['maskword'] + '\n'; 
	 			} 
	 		} 
	 	} else if ( formObject.type === 'checkbox' ){ 
	 		var ret = ''; 
	 		if( checkboxMaskList[formObject.name] ) return; 
	 		checkboxMaskList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret += form[formObject.name][j].value + ','; 
	 			} 
	 		} 
	 		if (ret != null && ret != ''){ 
	 			ret = ret.substring(0,ret.lastIndexOf(',')); 
	 			if( !ret.match(validateProperty[ formObject.name ]['mask']) ) { 
	 				errors += validateProperty[formObject.name]['name']  
	 						+ 'は' + validateProperty[formObject.name]['maskword'] + '\n'; 
	 			} 
	 		} 
	 	} 
	}
	
	this.space = function(form,formObject,validateProperty){
	 	if ( formObject.type === 'text' || formObject.type === 'select-one' || formObject.type === 'hidden' || formObject.type === 'password' ){ 
	 		if (form[formObject.name].value != null && form[formObject.name].value != ''){ 
	 			if (form[formObject.name].value.match("　") || form[formObject.name].value.match(" ")){
	 				errors += validateProperty[form[formObject.name].name]['name']  
	 						+ 'にスペースが入っています。\n'; 
	 			}
	 		} 
	 	} else if ( formObject.type === 'radio' ){ 
	 		var ret = ''; 
	 		if( radioSpaceList[formObject.name] ) return; 
	 		radioSpaceList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret = form[formObject.name][j].value; 
	 			} 
	 		} 
			if( ret != null && ret != '' ){
	 			if( ret.match("　") || ret.match(" ") ) { 
	 				errors += validateProperty[formObject.name]['name']  
	 						+ 'にスペースが入っています。\n'; 
	 			} 
	 		} 
	 	} else if ( formObject.type === 'checkbox' ){ 
	 		var ret = ''; 
	 		if( checkboxSpaceList[formObject.name] ) return; 
	 		checkboxSpaceList[formObject.name] = true; 
	 		for (var j=0;j<form[formObject.name].length;j++){ 
	 			if (form[formObject.name][j].checked == true ){ 
	 				ret += form[formObject.name][j].value + ','; 
	 			} 
	 		} 
	 		if (ret != null && ret != ''){ 
	 			ret = ret.substring(0,ret.lastIndexOf(',')); 
	 			if( ret.match("　") || ret.match(" ") ) { 
	 				errors += validateProperty[formObject.name]['name']  
	 						+ 'にスペースが入っています。\n'; 
	 			} 
	 		} 
	 	} 
	}
}
		
