/* String*/
String.prototype.trim=function(){return this.replace(/(^\s+)|(\s+$)/g,"")}
String.prototype.ucwords=function(){return this.length>0?this.substr(0,1).toUpperCase()+this.substr(1).toLowerCase() : ''}
/* form functions
 @ dellker.com 2007-10-29
*/
var formFunc={
valid : function(f){
/*
Regular Expression Ruler
 [u4E00-u9FA5] non- double byte character
 required : \S{1,}
 email    : ^[_a-z0-9]+@([_a-z0-9]+\.)+[a-z0-9]{2,3}$
 tel      : ^[\d|\+|\-|(|)]{1,}$
 graph    : (.*)(\.jpg|\.gif|\.png)$
 optional, but must be appoint format : ^((.*)(\.doc|\.docx|\.pdf))?$
 selected or checked one at least : ,$
                     more than one: ,{2,}$
*/
  var els = f.elements;
  var jo=new Object();
  var sVal='';
  for(var i=0;i<els.length;i++){
    sVal = /**/this.getValue(els[i]);
    if(els[i].getAttribute('rule')!=null){
      var sReg = els[i].getAttribute('rule');
      var reg = new RegExp(sReg,'i');
      if(!reg.test(sVal)){
        alert(this.getAlt(els[i]));
        this.focus(els[i]);
        return false;
      }
    }
    if(!els[i].name || els[i].name=='jsonstr' || !sVal)continue;
    jo[els[i].name]={
      'title' : this.getCaption(els[i]),
      'type'  : els[i].type,
      'value' : sVal
    }
  }
  if(this.createJsonstr(f))
    f.jsonstr.value=jo.toJSONString();
  if($('#TB_ajaxContent')){    
    $('#TB_ajaxContent > table').after('<img src="img/loading.gif" />');
    $('#TB_ajaxContent > table').eq(0).css('display','none');
  }
  return true;
},
createJsonstr : function(f){
  if(f.jsonstr)return true;
  /*var oInput = document.createElement('input');
  oInput.id   = 'jsonstr';
  oInput.name = 'jsonstr';
  oInput.type = 'hidden';
  f.appendChild(oInput);*/
  $('<input type="hidden" name="jsonstr" id="jsonstr" />').appendTo(f);
  return true;
},
getCaption : function(el){
  return !el.getAttribute('caption') ?
    el.name.ucwords() :
    el.getAttribute('caption');
},
getAlt : function(el){
  return !el.getAttribute('alt') ?
    this.getAltExec(el) :
    el.getAttribute('alt');
},
getAltExec : function(el){
  switch(el.type){
    case'text':case'hidden':case'password':case'file':case'textarea':
      return this.getCaption(el)+" is required";
    case'checkbox':case'radio':
      return this.getCaption(el)+" is required, choose it first please";
    case'select-one':case'select-multiple':
      return this.getCaption(el)+" is required, select it first please";
  }
},
getValue : function(el){
  switch(el.type){
    case'text':case'hidden':case'password':case'file':case'textarea':
      return el.value;
    case'checkbox':case'radio':
      return this.getValueByChoose(el);
    case'select-one':case'select-multiple':
      return this.getValueBySelect(el);
  }
},
getValueByChoose : function(el){
  var sValue = '';
  var tmpels = document.getElementsByName(el.name);
  for(var i=0;i<tmpels.length;i++){
    if(tmpels[i].checked){
      sValue += tmpels[i].value+',';
      /*取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
       @ 2007-10-22 修改为 value1,value2, ... 模式, 以逗号记录选中个数
      */
    }
  }
  return sValue;
},
getValueBySelect : function(el){
  var sValue = '';
  for(var i=0;i<el.options.length;i++){
    if(el.options[i].selected && el.options[i].value!=''){
      sValue += el.options[i].value+',';
    }
  }
  return sValue;
},
focus : function(el){
  switch(el.type){
    case'text':
    case'hidden':
    case'password':
    case'file':
    case'textarea': try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){}
    case'checkbox':
    case'radio': var els = document.getElementsByName(el.name);els[0].focus();
    case'select-one':
    case'select-multiple': el.focus();
  }
}
}/* end formFunc*/
