var validatorMap=new Hash({
  'required':['本项必填',function(element,v){
   return v!=null && v!='';
  }],
  'number':['请录入数值',function(element,v){
   return v==null || v=='' || !isNaN(v) && !/^\s+$/.test(v);
  }],
   'msn':['请输入MSN',function(element,v){
	return v==null || v=='' || /\S+@\S+/.test(v);
  }],
   'skype':['请输入Skype',function(element,v){
   return v==null || v=='' || !/\W/.test(v) || /^[a-zA-Z0-9]+$/.test(v);
  }],
  'digits':['请录入整数',function(element,v){
   return v==null || v=='' || !/[^\d]/.test(v);
  }],
  'unsignedint':['请录入正整数',function(element,v){
   return v==null || v=='' || (!/[^\d]/.test(v) && v > 0);
  }],
  'unsigned':['请输入大于等于0的数值',function(element,v){
   return v==null || v=='' || (!isNaN(v) && !/^\s+$/.test(v) && v >= 0);
  }],
  'positive':['请输入大于0的数值',function(element,v){
   return v==null || v=='' || (!isNaN(v) && !/^\s+$/.test(v) && v > 0);
  }],
  'alpha':['请录入英文字母',function(element,v){
   return v==null || v=='' || /^[a-zA-Z]+$/.test(v);
  }],
  'alphaint':['请录入英文字母或者数字',function(element,v){
   return v==null || v=='' || !/\W/.test(v) || /^[a-zA-Z0-9]+$/.test(v);
  }],
  'alphanum':['请录入英文字母、中文及数字',function(element,v){
   return v==null || v=='' || !/\W/.test(v) || /^[\u4e00-\u9fa5a-zA-Z0-9]+$/.test(v);
  }],
  'date':['请录入日期格式yyyy-mm-dd',function(element,v){
   return v==null || v=='' || /^(19|20)[0-9]{2}-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01])+$/.test(v);
  }],
  'email':['请录入正确的Email地址',function(element,v){
   return v==null || v=='' || /(\S)+[@]{1}(\S)+[.]{1}(\w)+/.test(v);
  }],
  'text':['',function(element,v){
   return true;
  }],
  'select':['',function(element,v){
   return true;
  }],
  'radio':['',function(element,v){
   return true;
  }],
  'checkbox':['',function(element,v){
   return true;
  }],
  'url':['请录入正确的网址',function(element,v){
   return v==null || v=='' || /^(http|https|ftp):\/\/([A-Z0-9][A-Z0-9_-]*)(:(\d+))?\/?/i.test(v);
  }],
  'area':['请选择完整的地区',function(element,v){
    return  element.getElements('select').every(function(sel){
                  var selValue=sel.getValue();
                  return selValue!=''&&selValue!='_NULL_';
      });
  }]
 });

var validator=new Abstract({
 test:function(form,element){
  element=$(element);
  this.bindBlurWithValidator(form,element);
  var validityList=[],
  required=element.get('required'),
  vtype=element.get('vtype'),
  extendCaution=element.get('caution');
  extra = form.get('extra');
  
  if(vtype&&vtype.contains('&&')){
     vtype=vtype.split('&&');
  }
  
  
    if('true'==required){validityList.include('required');}
  
  if(!!vtype){validityList.include(vtype);}
  
  validityList=validityList.flatten();
  
  var vresult=validityList.every(function(t){
     var validateResult=true;
     var validator=validatorMap.get(t)||window[t];
     
     if(!validator)return validateResult;
     
     var caution=extendCaution||validator[0];
     var validateFuc=validator[1];
     
     validateResult=validateFuc(element,element.getValue()?element.getValue().trim():'');
     if(!validateResult){
        this.showCaution(element,caution);
     }
     return validateResult;
  },this);
  if(!vresult) return false;
  
 
  
  return true;
 },
 showCaution:function(element,caution){
  var el=$(element).getNext();
  if(el&&el.get('name')&&el.get('name').contains('validationMsgBox'))return;
  if(!caution||caution.trim()=='')return;
  new Element('div', {
       'class': 'valierror',
       'name': 'validationMsgBox',
       'html':caution
      }).injectAfter(element);
 },
 removeCaution:function(element){
   var el=$(element).getNext();
   if(el&&el.get('name')&&el.get('name').contains('validationMsgBox'))return el.remove();
 },
 bindBlurWithValidator:function(form,element){
  var xinput=$$(element,element.getFormElements());
  xinput.removeEvents('blur').addEvent('blur',function(){
    this.removeCaution(element);
    this.test(form,element);
  }.bind(this));
 }
});

$ES('form').each(function(f, i){
    if ($chk(f.action))
    f.addEvent('submit', function(e){
		        if(!f.bindValidator()){
                   e.stop();
                   return false;
                }
		    });
});
if($('goodsselect')){
	$('goodsselect').addEvent('click', function(e){
		e=new Event(e);
		var oInput = $ES('INPUT',"goodsbody");
		for(var i=0; i<oInput.length; i++){
			oInput[i].checked = $('goodsselect').checked;
		}
	});
}
if($('pkgselect')){
	$('pkgselect').addEvent('click', function(e){
		e=new Event(e);
		var oInput = $ES('INPUT',"pkgbody");
		for(var i=0; i<oInput.length; i++){
			oInput[i].checked = $('pkgselect').checked;
		}
	});
}
if($('giftselect')){
	$('giftselect').addEvent('click', function(e){
		e=new Event(e);
		var oInput = $ES('INPUT',"giftbody");
		for(var i=0; i<oInput.length; i++){
			oInput[i].checked = $('giftselect').checked;
		}
	});
}