/**
 * @author hangpeng
 */
$.extend({
    /**
     * 级联导航
     * @param {Object} _exp
     * @param {Object} callback
     */
    wNav: function(_exp, callback){
        //more level nav
        var _liList = $(_exp).children("li");
        //event bind
        _liList.each(function(index){
            //check sub nav
            var _subUl = this.getElementsByTagName("ul").item(0);
            var _subDo = typeof _subUl === 'object' && Object.prototype.toString.call(_subUl).replace(/^\[object[\s]{1}([A-Za-z]+)\]$/gi, "$1") !== 'Window';
            var _i = index;
            $(this).hover(function(){
				$(this).addClass("selected");
                if (_subDo) {
                    callback.call(this,"over", _subUl, _i);
                }
            }, function(){
                $(this).removeClass("selected");
                if (_subDo) {
                    callback.call(this,"out", _subUl, _i);
                }
            })
        })
    },
    followScroll: function(_exp, _conf){
        var _box, moveBox, defaults, _mTop = 0, _body;
        if (!(_box = typeof $(_exp).get(0) === 'object' ? $(_exp) : false)) {
            return false;
        }
        defaults = {
            interval: 500,
            duration: 800,
            easing: 'swing',
            top: 0,
            right: 0
        };
        $.extend(defaults, _conf);
        _body = $(document);
        _box.css({
            position: "absolute",
            top: defaults.top,
            right: defaults.right
        });
        moveBox = function(){
            var _mTo = 0;
            if (_body.scrollTop() == _mTop || _box.queue("fx") == 'inprogress') {
                return false;
            }
            else {
                _mTo = defaults.top + _body.scrollTop();
                _box.animate({
                    top: _mTo
                }, {
                    duration: defaults.duration,
                    easing: defaults.easing,
                    queue: true
                })
                _mTop = _mTo;
            }
        }
        return setInterval(moveBox, defaults.interval);
    },
    /*
     * @param jqueryExpression
     * @check from by rel attribute
     */
    checkForm: function(_exp){
		var _inputs , _len = arguments.length,_rules;
		if(_len == 0){
			_inputs = $(":input");
		}else{
			if (!($.type(_exp) == 'string' && (_inputs = $(_exp).find(":input").get(0)))) 
			return false;
		}
		_inputs = _inputs.filter("input[rel^='check']");
		_rules = {
            'qq': /[1-9][0-9]{4,}/i,
			'email':/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/i,
			'mobile':/^1\d{10}$/i,
			'tel':/\d{3}-\d{8}|\d{4}-\d{7}/i,
			'post':/[1-9]\d{5}(?!\d)/i,
			'idcard':/\d{15}|\d{18}/i,
			'ip':/\d+\.\d+\.\d+\.\d+/i,
			'url':/^[a-zA-z]+:\/\/(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$/i,
			'zhname':/^[\u4e00-\u9fa5]{2,4}$/i
        }
		_inputs.each(function(index){
			var _that = $(this),_index = index,_val,_regCheck,_alertInfo,_form,_orsub;
			var _type = _that.attr('rel').replace('check','').toLowerCase();
				_form = _that.parents("form").eq(0);
				if(!_form.attr("sublen")){
					_form.attr("sublen",_form.find("input[rel^='check']").length);
				}
				if(!_form.attr("orsub")){
					_form.attr("orsub","");
				}
				if(!_form.attr("bindsub")){
					_form.submit(function(){
						var _len = +$(this).attr("sublen"),
							_trace = $(this).attr("orsub").replace(/\,$/,'').split(","),
							//_do = $(this).attr("dosub") == 'false'?false:true,
							_do = true,
							_tl = {},
							_i = 0;
					
						if(_trace.length<_len){
							alert("请填写完整!");
							return false;
						}

						$.each(_trace,function(i,n){
							var _i = +n.match(/^\d+/gi)[0];
							var _n =  n.match(/true|false/gi)[0];	
							_tl[_i] = _n;
						})
						//console.log($(_tl).toArray().get(0));
						for(var i in _tl){
							_do = _do&&(_tl[i] == 'false'?false:true);
							++_i;
						}
						if(_i<_len){
							alert("请填写完整!");
							return false;
						}else{							
							if(!_do){
								alert("输入有误，请检查!");
								return false;
							}
						}
						return true;
					})
					_form.attr("bindsub","bindsub");
				}
			_that.blur(function(){
				_orsub = _form.attr("orsub");
				_val = $.trim(_that.val());
				if(!_regCheck){
					if(_rules[_type]&&$.type(_rules[_type]) == 'regexp'){
						_regCheck = _rules[_type];
					}else{
						if(_that.attr('rel').indexOf('Len')!='-1'){
							var _l = _that.attr('rel').match(/\d+/gi)[0];
							_regCheck = new RegExp(".{"+_l+"}","i");
						}
					}
				}
				if(_regCheck.test(_val)){
					   _alertInfo = _that.next(".formNotice");
					if(_alertInfo.get(0)){
						_alertInfo.html("格式正确!");
					}else{
						$("<span>").html("格式正确!").addClass("formNotice").css({
							"position":"absolute",
							"background-color":"#fafded",
							"border":"1px solid #d0dba1",
							"border-left":"none",
							"color":"#468b03",
							"height":_that.innerHeight()+'px',
							"width":"100px",
							"line-height":_that.innerHeight()+'px',
							"text-align":"center"
						})
						.insertAfter(_that);
					}	
					//Form submit control
					_form.attr("orsub",_orsub+=_index+"true,");			
				}else{
					_alertInfo = _that.next(".formNotice");
					if(_alertInfo.get(0)){
						_alertInfo.html("<font color=red>格式不正确!</font>");
					}else{
							$("<span>").html("<font color=red>格式不正确!</font>").addClass("formNotice").css({
							"position":"absolute",
							"background-color":"#fafded",
							"border":"1px solid #d0dba1",
							"border-left":"none",
							"color":"#468b03",
							"height":_that.innerHeight()+'px',
							"width":"100px",
							"line-height":_that.innerHeight()+'px',
							"text-align":"center"
						})
						.insertAfter(_that);
					}
					//Form submit control
					_form.attr("orsub",_orsub+=_index+"false,");
					_that.select();
				}
			})
		})
    }
})

