/*
 * 
 */
	var Validator = {
		validate : function(form) {			
    		var elements = form.elements;
    		for(var i = 0; i <elements.length;i++) {				
				var el = elements[i];				
				var classes = el.className.split(" ");
				for(var j = 0; j < classes.length; j++) {
					// 각 클래스 명
					var className = classes[j].replace(" ","");					
					// 클래스명과 일치하는 메서드가 있으면...								
    				if(Validator[className]) {
						var message = Validator[className](el.value,el);						
						// 오류가 있으면 메시지를 반환																		
						if(message) {
							Validator._handleError(message, el);
							return false;
						}
					}
				}
    		}
			return true;
		},
		/**
		 * 오류 제어
		 * @param {String} message
		 * @param {HTMLFormElement} el
		 */
		_handleError : function(message, el) {
			var title = Validator._getTitle(el);
			alert(title +"(은)는 " + message);
			el.style.backgroundColor="#fdfde4";
			el.focus();
			
		}, 
		
		"required" : function(v) {			
			return !v ? "반드시 입력하셔야 합니다." : false;
		},
		"validate-number" : function(v) {
			return isNaN(v) || /^\s+$/.test(v) ? "숫자로 입력하셔야 합니다." : false;
		},
		"validate-digits" : function(v) {
			return isNaN(v) || /[^\d]/.test(v)? "숫자만 입력하셔야 합니다." : false;			
		},
		"validate-alpha" : function(v) {
			return /^[a-zA-Z]+$/.test(v) ? "알파뱃만 입력하셔야 합니다." : false;
		},
		"validate-alpha-num" : function(v) {
			return /\W/.test(v) ? "알파뱃과 숫자만 입력하셔야 합니다." : false;
		},
		"validate-date" : function(v) {
			var date = new Date(v);
			return isNaN(v) ? "바른 날짜를 입력하셔야 합니다." : false;
		},
		"validate-email" : function(v) {
			return !/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(v) ? "바른 이메일 주소를 입력하셔야 합니다." : false;
		},
		"validate-url" : function(v) {
			return !/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(v) ? "바른 URL을 입력하셔야 합니다." : false;
		},
		"validate-one-required" : function(v,elm) {			
			var field_obj  = document.getElementsByName(elm.name);
			if (field_obj.length > 1) {
		        for (var idx = 0; idx < field_obj.length; idx++) {
		            if (field_obj[idx].checked) return false;
		        }
		    } else {
		        if (field_obj.checked) return false;
		    }
			return "선택을 하셔야 합니다.";
		},
		_getTitle : function (el) {
			if (el.title) {
				var elTitles = el.title.split(" ")
				return elTitles[0];
			}else{
				return el.name;
			}	
		}
	}