Advertisement
Guest User

Untitled

a guest
Mar 14th, 2013
510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.83 KB | None | 0 0
  1. (function($){
  2. $.fn.extend({
  3. forms:function(opt){
  4. if(opt===undefined)
  5. opt={}
  6. this.each(function(){
  7. var th=$(this),
  8. data=th.data('forms'),
  9. _={
  10. errorCl:'error',
  11. emptyCl:'empty',
  12. invalidCl:'invalid',
  13. notRequiredCl:'notRequired',
  14. successCl:'success',
  15. successShow:'4000',
  16. mailHandlerURL:'bin/MailHandler.php',
  17. ownerEmail:'#',
  18. stripHTML:true,
  19. smtpMailServer:'localhost',
  20. targets:'input,textarea',
  21. controls:'a[data-type=reset],a[data-type=submit]',
  22. validate:true,
  23. rx:{
  24. ".name":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
  25. ".state":{rx:/^[a-zA-Z'][a-zA-Z-' ]+[a-zA-Z']?$/,target:'input'},
  26. ".email":{rx:/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,target:'input'},
  27. ".phone":{rx:/^\d{2,3}-?\d{7,9}$/,target:'input'},
  28. ".fax":{rx:/^\+?(\d[\d\-\+\(\) ]{5,}\d$)/,target:'input'},
  29. ".message":{rx:/.{20}/,target:'textarea'}
  30. },
  31. preFu:function(){
  32. _.labels.each(function(){
  33. var label=$(this),
  34. inp=$(_.targets,this),
  35. defVal=inp.val(),
  36. trueVal=(function(){
  37. var tmp=inp.is('input')?(tmp=label.html().match(/value=['"](.+?)['"].+/),!!tmp&&!!tmp[1]&&tmp[1]):inp.html()
  38. return defVal==''?defVal:tmp
  39. })()
  40. trueVal!=defVal
  41. &&inp.val(defVal=trueVal||defVal)
  42. label.data({defVal:defVal})
  43. inp
  44. .bind('focus',function(){
  45. inp.val()==defVal
  46. &&(inp.val(''),_.hideEmptyFu(label),label.removeClass(_.invalidCl))
  47. })
  48. .bind('blur',function(){
  49. _.validateFu(label)
  50. if(_.isEmpty(label))
  51. inp.val(defVal)
  52. ,_.hideErrorFu(label.removeClass(_.invalidCl))
  53. })
  54. .bind('keyup',function(){
  55. label.hasClass(_.invalidCl)
  56. &&_.validateFu(label)
  57. })
  58. label.find('.'+_.errorCl+',.'+_.emptyCl).css({display:'block'}).hide()
  59. })
  60. _.success=$('.'+_.successCl,_.form).hide()
  61. },
  62. isRequired:function(el){
  63. return !el.hasClass(_.notRequiredCl)
  64. },
  65. isValid:function(el){
  66. var ret=true
  67. $.each(_.rx,function(k,d){
  68. if(el.is(k))
  69. ret=d.rx.test(el.find(d.target).val())
  70. })
  71. return ret
  72. },
  73. isEmpty:function(el){
  74. var tmp
  75. return (tmp=el.find(_.targets).val())==''||tmp==el.data('defVal')
  76. },
  77. validateFu:function(el){
  78. el.each(function(){
  79. var th=$(this)
  80. ,req=_.isRequired(th)
  81. ,empty=_.isEmpty(th)
  82. ,valid=_.isValid(th)
  83.  
  84. if(empty&&req)
  85. _.showEmptyFu(th.addClass(_.invalidCl))
  86. else
  87. _.hideEmptyFu(th.removeClass(_.invalidCl))
  88.  
  89. if(!empty)
  90. if(valid)
  91. _.hideErrorFu(th.removeClass(_.invalidCl))
  92. else
  93. _.showErrorFu(th.addClass(_.invalidCl))
  94. })
  95. },
  96. getValFromLabel:function(label){
  97. var val=$('input,textarea',label).val()
  98. ,defVal=label.data('defVal')
  99. return label.length?val==defVal?'nope':val:'nope'
  100. }
  101. ,submitFu:function(){
  102. _.validateFu(_.labels)
  103. if(!_.form.has('.'+_.invalidCl).length)
  104. $.ajax({
  105. type: "POST",
  106. url:_.mailHandlerURL,
  107. data:{
  108. name:_.getValFromLabel($('.name',_.form)),
  109. email:_.getValFromLabel($('.email',_.form)),
  110. phone:_.getValFromLabel($('.phone',_.form)),
  111. //fax:_.getValFromLabel($('.fax',_.form)),
  112. //state:_.getValFromLabel($('.state',_.form)),
  113. message:_.getValFromLabel($('.message',_.form)),
  114. owner_email:_.ownerEmail,
  115. stripHTML:_.stripHTML
  116. },
  117. success: function(){
  118. _.showFu()
  119. }
  120. })
  121. },
  122. showFu:function(){
  123. _.success.slideDown(function(){
  124. setTimeout(function(){
  125. _.success.slideUp()
  126. _.form.trigger('reset')
  127. },_.successShow)
  128. })
  129. },
  130. controlsFu:function(){
  131. $(_.controls,_.form).each(function(){
  132. var th=$(this)
  133. th
  134. .bind('click',function(){
  135. _.form.trigger(th.data('type'))
  136. return false
  137. })
  138. })
  139. },
  140. showErrorFu:function(label){
  141. label.find('.'+_.errorCl).slideDown()
  142. },
  143. hideErrorFu:function(label){
  144. label.find('.'+_.errorCl).slideUp()
  145. },
  146. showEmptyFu:function(label){
  147. label.find('.'+_.emptyCl).slideDown()
  148. _.hideErrorFu(label)
  149. },
  150. hideEmptyFu:function(label){
  151. label.find('.'+_.emptyCl).slideUp()
  152. },
  153. init:function(){
  154. _.form=this
  155. _.labels=$('label',_.form)
  156.  
  157. _.preFu()
  158.  
  159. _.controlsFu()
  160.  
  161. _.form
  162. .bind('submit',function(){
  163. if(_.validate)
  164. _.submitFu()
  165. else
  166. _.form[0].submit()
  167. return false
  168. })
  169. .bind('reset',function(){
  170. _.labels.removeClass(_.invalidCl)
  171. _.labels.each(function(){
  172. var th=$(this)
  173. _.hideErrorFu(th)
  174. _.hideEmptyFu(th)
  175. })
  176. })
  177. _.form.trigger('reset')
  178. }
  179. }
  180. if(!data)
  181. (typeof opt=='object'?$.extend(_,opt):_).init.call(th),
  182. th.data({cScroll:_}),
  183. data=_
  184. else
  185. _=typeof opt=='object'?$.extend(data,opt):data
  186. })
  187. return this
  188. }
  189. })
  190. })(jQuery)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement