var rules = {
	title:{msg:'请输入标题，例如 “北京到上海拼车”', get_err:function(val){
		if( val.is_blank() ){
			return '标题不能为空';
		}		
		return false;
	}},
	
	citys:{msg:'请输入您目前所在的城市，例如 “北京”', get_err:function(val){
		if( val.is_blank() ){
			return '目前所在城市不能为空';
		}		
		return false;
	}},
	
	qidian:{msg:'请输入起点，例如 “北京中关村”', get_err:function(val){
		if( val.is_blank() ){
			return '起点不能为空';
		}		
		return false;
	}},
	zongdian:{msg:'请输入终点，例如 “上海外滩”', get_err:function(val){
		if( val.is_blank() ){
			return '终点不能为空';
		}		
		return false;
	}},
	
		start_at:{msg:'请输入出发时间，例如 “5月1日，早晨8点”',get_err:function(val){return false;}},
		back_at:{msg:'请输入返回时间，例如 “5月6日，晚上8点”',get_err:function(val){return false;}},
	/*<%--	price:{msg:'请输入价格', get_err:function(val){
		if( val.is_blank() ){
			return '价格不能为空';
		}
		else if( ! val.is_int() )
		{
			return '价格必须是整数';
		}	
		return false;
	}},--%>*/
	content:{msg:'例如“从北京拼车回上海，拼三个伙伴同行”', get_err:function(val){
		if( val.is_blank() ){
			return '描述不能为空';
		}		
		return false;
	}},
	/*<%--phone:{msg:'请输入您的手机或座机', get_err:function(val){
		if( val.is_blank() ){
			return '电话不能为空';
		}
		else if( ! val.is_right_phone() )
		{
			return '电话格式不正确';
		}		
		return false;
	}},
		email:{msg:'请输入电子邮件，例如“example@qq.com”', get_err:function(val)
		{	if( val.is_blank() ){
			return '电子邮件不能为空';
		}		
		else if( ! val.is_right_email() )
		{
			return '电子邮件格式不正确';
		}return false;
	}},
	--%>*/
		phone:{msg:'请输入您的手机或座机', get_err:function(val){}},
		qq:{msg:'请输入您的腾讯QQ号码', get_err:function(val){}},
	  email:{msg:'请输入电子邮件，例如“example@qq.com”', get_err:function(val){}},

	authcode:{msg:'请输入验证码', get_err:function(val){
		if( val.is_blank() ){
			return '验证码不能为空';
		}		
		return false;
	}}
	
	
};

$(function(){
	function get_rule( name ){
		var rule = rules[name];
		if( typeof rule == 'string' ){
			rule = rules[rule];
		}
		return rule;
	}
	function get_span(name){
		var rule = rules[name];
		if( typeof rule == 'string' ){
			name = rule;
		}
		var span = $('#id_hint_'+name);
		if( span.size()==0 ){
			$('<span id="id_hint_{0}"></span>'.format(name)).insertAfter( $(':input[@name='+name+']') );
		}
		span = $('#id_hint_'+name);
		return span;
	}
	function show_hint(name, msg){
		if( msg ){
			get_span(name).attr('class','box_hint').html(msg);
		}
	}
	function show_error(name, msg){
		if( msg ){
			get_span(name).attr('class','box_error').html(msg);
		}
	}
	function close_alert(name){
		get_span(name).attr('class','box_right').html('');
	}
	
	var onfocus = function(){
		var name = $(this).attr('name');
		var rule = get_rule(name);
		if( rule ){
			show_hint(name, rule.msg);
		}
	};
	$('#id_form :input').focus(onfocus);
	var onblur = function(){
		var name = $(this).attr('name');
		var rule = get_rule(name);
		var err = '';
		if( rule ){
			var err = rule.get_err( $(this).val(), this );
		}
		if( err ){
			show_error(name, err);
		}else{
			close_alert(name);
		}
	};
	$('#id_form :input').blur(onblur);
	$('#id_form select').change(onblur);
	$('#id_form').submit(function(){
		var err_count = 0;
		$('#id_form :input').each(function(){
			$(this).fixInputPromptText();
			var name = $(this).attr('name');
			var rule = get_rule(name);
			if( rule ){
				var err = rule.get_err( $(this).val() );
				if( err ){
					show_error(name, err);
					err_count += 1;
				}
			}
		});
		return err_count == 0;
	});
	
});

