/**
 * form验证对象
 * @param name: form字段name属性
 * @param msg: 提示信息节点id
 * @param fun: 验证函数
 */
function validate(name, msg, fun) {
	this.name = name;
	this.msg = msg;
	this.fun = fun;
	this.valid = function(element) {
		var msgNode = getElement(msg);
		if (msgNode) {
			return fun(element, msgNode);
		} 
		alert('没有找到验证提示节点：' + msg);
		return false;	
	}
}

var validateArray = new Array();
validateArray.push(new validate('name', 	'name_msg', 	checkText));
validateArray.push(new validate('email', 	'email_msg', 	checkEmail));
validateArray.push(new validate('title', 	'title_msg', 	checkLength));
validateArray.push(new validate('image', 	'image_msg', 	checkUrl));
validateArray.push(new validate('url', 		'url_msg', 		checkUrl));
validateArray.push(new validate('category', 'category_msg', checkSelected));
validateArray.push(new validate('description', 	'description_msg', 	checkLength));
validateArray.push(new validate('validateCode', 'validateCode_msg', checkText));

/**
 * 验证表单并构建提交url
 */
function validateForm(form) {
	var element = null;
	var validate = null;
	var passed = 0;
	for (var i = 0; i < validateArray.length; i++) {
		validate = validateArray[i];
		element = form.elements[validate.name];
		if (element && element.name) {
			if (validate.valid(element)) 
				passed++;
		} else {
			alert("无效的表单字段：" + validate.name);
		}
	}
	return passed == validateArray.length;
}

function checkSelected(element, msgNode) {
	if (element.value > 0) {
		msgNode.style.display = 'none';
		return true;
	} else {
		msgNode.style.display = 'block';
		return false;
	}	
}

function checkUrl(element, msgNode) {
	if (element.name == 'image' && element.value.length == 0) {
		return true;
	}
	var reg = /^(http[s]?|ftp):\/\/[^\/\.]+?\..+\w\/?$/;
	if (reg.test(element.value)) {
		msgNode.style.display = 'none';
		return true;
	} else {
		msgNode.style.display = 'block';
		return false;
	}	
}

function checkLength(element, msgNode) {
     var length = 0;
     var value = element.value;
     for (var i=0; i < value.length; i++) {  
	 	if (value.charCodeAt(i) > 127 || value.charCodeAt(i) == 94) {  
	 		length += 2;  
	 	} else {  
	 		length++;  
	 	}  
    }
    var minLength = parseInt(msgNode.getAttribute('min'));
    var maxLength = parseInt(msgNode.getAttribute('max'));
    if (isNaN(minLength)) 
     	minLength = 0;
    if (isNaN(maxLength)) 
		maxLength = 200;
 	if (length >= minLength && length <= maxLength) {
	 	msgNode.style.display = 'none';
		return true;
 	} else {
 		msgNode.style.display = 'block';
		return false; 	
 	}
}

function checkText(element, msgNode) {
	if (element.value.length > 0) {
		msgNode.style.display = 'none';
		return true;
	} else {
		msgNode.style.display = 'block';
		return false;	
	}
}		

function checkEmail(element, msgNode) {
	var re = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/; 
	if (re.test(element.value)) {
		msgNode.style.display = 'none';
		return true;
	} else {
		msgNode.style.display = 'block';
		return false;	
	}	
}

function getElement(id) {
	if (typeof(id) == 'string') {
		var obj = document.getElementById(id);
		if (obj) return obj;
		else alert('没有找到元素节点 [' + id + ']');
	}
	return id;
}

/*function countOfText(input, output, maxLength) {
	 var length = 0;
     var value = input.value;
     output = getElement(output);
     for (var i=0; i < value.length; i++) {  
	 	if (value.charCodeAt(i) > 127 || value.charCodeAt(i) == 94) {  
	 		length += 2;  
	 	} else {  
	 		length++;  
	 	}  
    }
    output.value = length;
    if (length >= maxLength) {
    	alert('超出最大字符数');
    }
}*/