(function(jQuery){
  var formValidTypes = []
  jQuery.fn.extend({
    
    fieldValue : function(name,selectNullValue){
      if(selectNullValue == undefined) selectNullValue = '0'
      obj = this.field(name)
      try {
        name = obj.attr("tagName").toLowerCase()
        type = obj.attr("type").toLowerCase()
      }
      catch(e){
        alert("Name: "+name)
        return false
      }
      if(type == "text" || name == "textarea" || type == "hidden")
        val = obj.val()
      else if(type == "radio" || type == "checkbox"){
        val = false
        obj.each(function(){
          if($(this).attr("checked") == true) val = $(this).val()
        })
      }
      else if(name == "select"){
        val = obj.val()
        if(val == selectNullValue) val = false
      }
      return val
    },

    formValidate : function(setting, selectNullValue){
      txt = ''
      enabledNull = {}
      for(i in setting){
        enabledNull[i] = false;
        if(!this.fieldValue(i,selectNullValue)) txt += "\n\t"+setting[i]
      }
      txt2 = ''
      for(i in formValidTypes){
        attr = formValidTypes[i]
        if(!this.fieldValidate(attr[0],attr[1],enabledNull[attr[0]]))
          txt2 += "\n\t"+attr[2]
      }
      if(txt2.length != 0) txt2 = "\nError:"+txt2
      if(txt.length != 0) txt = "Required:"+txt
      txt += txt2
      if(txt.length != 0) alert(txt)
      return txt.length == 0
    },

    fieldValidate : function(name,type,isnull){
      if(isnull == undefined) isnull = true
      val = this.fieldValue(name)
      if(isnull && val.length == 0) return true
      type = type.toLowerCase()
      reg = /.*/
      if(type == "integer" || type == "int") reg = /^[0-9]+$/
      else if(type == "numeric") reg = /^[0-9]*\.?[0-9]+$/
      else if(type == "mail" || type == "email" || type == "e-mail") reg = /^[a-z0-9._-]+@([a-z0-9-]{2,})([.][a-z0-9-]{2,})*[.][a-z]{2,6}$/i
      return reg.test(val)
    },

    /*
     *  Struct
     *  0: name, 1: type, 2: message
     *  [ ['name1','type1','Message1'],
     *    ['name2','type2','Message2'],
     *    ['name3','type3','Message3']
     *  ]
     */
    formAddType : function(arr){
      formValidTypes = arr
    },

    field : function(name){
      return jQuery('[name='+name+']',this)
    }
  }) 
})(jQuery)
