muck-engine 0.4.23 → 0.4.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. data/VERSION +1 -1
  2. data/app/helpers/muck_engine_helper.rb +1 -1
  3. data/app/views/shared/_output_ajax_messages.erb +16 -0
  4. data/lib/muck_engine/flash_errors.rb +22 -5
  5. data/muck-engine.gemspec +27 -3
  6. data/public/javascripts/jquery/jquery.easing.js +45 -71
  7. data/public/javascripts/muck-src.js +13 -0
  8. data/public/javascripts/muck.js +2 -1
  9. data/test/rails_root/lib/tasks/muck.rake +7 -0
  10. data/test/rails_root/public/images/admin/Home.gif +0 -0
  11. data/test/rails_root/public/images/admin/source/Home.png +0 -0
  12. data/test/rails_root/public/images/fancybox/blank.gif +0 -0
  13. data/test/rails_root/public/images/fancybox/fancy_close.png +0 -0
  14. data/test/rails_root/public/images/fancybox/fancy_loading.png +0 -0
  15. data/test/rails_root/public/images/fancybox/fancy_nav_left.png +0 -0
  16. data/test/rails_root/public/images/fancybox/fancy_nav_right.png +0 -0
  17. data/test/rails_root/public/images/fancybox/fancy_shadow_e.png +0 -0
  18. data/test/rails_root/public/images/fancybox/fancy_shadow_n.png +0 -0
  19. data/test/rails_root/public/images/fancybox/fancy_shadow_ne.png +0 -0
  20. data/test/rails_root/public/images/fancybox/fancy_shadow_nw.png +0 -0
  21. data/test/rails_root/public/images/fancybox/fancy_shadow_s.png +0 -0
  22. data/test/rails_root/public/images/fancybox/fancy_shadow_se.png +0 -0
  23. data/test/rails_root/public/images/fancybox/fancy_shadow_sw.png +0 -0
  24. data/test/rails_root/public/images/fancybox/fancy_shadow_w.png +0 -0
  25. data/test/rails_root/public/images/fancybox/fancy_title_left.png +0 -0
  26. data/test/rails_root/public/images/fancybox/fancy_title_main.png +0 -0
  27. data/test/rails_root/public/images/fancybox/fancy_title_over.png +0 -0
  28. data/test/rails_root/public/images/fancybox/fancy_title_right.png +0 -0
  29. data/test/rails_root/public/images/fancybox/fancybox-x.png +0 -0
  30. data/test/rails_root/public/images/fancybox/fancybox-y.png +0 -0
  31. data/test/rails_root/public/images/fancybox/fancybox.png +0 -0
  32. data/test/rails_root/public/images/service_icons/16/fireeagle.png +0 -0
  33. data/test/rails_root/public/images/service_icons/24/fireeagle.png +0 -0
  34. data/test/rails_root/public/images/service_icons/48/fireeagle.png +0 -0
  35. data/test/rails_root/public/images/service_icons/60/fireeagle.png +0 -0
  36. data/test/rails_root/public/images/service_icons/source/fireeagle.psd +0 -0
  37. data/test/rails_root/public/javascripts/jquery/jquery.easing.js +72 -1
  38. data/test/rails_root/public/javascripts/jquery/jquery.fancybox.js +34 -6
  39. data/test/rails_root/public/javascripts/jquery/jquery.form.js +511 -473
  40. data/test/rails_root/public/javascripts/jquery/jquery.jgrowl.js +9 -2
  41. data/test/rails_root/public/javascripts/jquery/jquery.js +150 -15
  42. data/test/rails_root/public/javascripts/jquery/jquery.mousewheel.js +13 -0
  43. data/test/rails_root/public/javascripts/muck-countries.js +50 -0
  44. data/test/rails_root/public/javascripts/muck-src.js +147 -0
  45. data/test/rails_root/public/javascripts/muck.js +7 -91
  46. data/test/rails_root/public/stylesheets/jquery/cupertino/jquery-ui-1.7.2.custom.css +160 -0
  47. data/test/rails_root/public/stylesheets/jquery/jquery.fancybox.css +77 -38
  48. data/test/rails_root/public/stylesheets/jquery/redmond/jquery-ui-1.7.2.custom.css +160 -0
  49. data/test/rails_root/public/stylesheets/jquery/smoothness/jquery-ui-1.7.2.custom.css +160 -0
  50. data/test/rails_root/public/stylesheets/jquery/ui-lightness/jquery-ui-1.7.2.custom.css +160 -0
  51. metadata +28 -4
  52. data/app/views/admin/shared/_output_admin_messages.js.erb +0 -2
@@ -1,16 +1,44 @@
1
1
  /*
2
2
  * FancyBox - jQuery Plugin
3
- * simple and fancy lightbox alternative
3
+ * Simple and fancy lightbox alternative
4
4
  *
5
- * Copyright (c) 2009 Janis Skarnelis
6
5
  * Examples and documentation at: http://fancybox.net
7
6
  *
8
- * Version: 1.2.6 (16/11/2009)
7
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
8
+ *
9
+ * Version: 1.3.1 (05/03/2010)
9
10
  * Requires: jQuery v1.3+
10
- *
11
+ *
11
12
  * Dual licensed under the MIT and GPL licenses:
12
13
  * http://www.opensource.org/licenses/mit-license.php
13
14
  * http://www.gnu.org/licenses/gpl.html
14
15
  */
15
-
16
- ;eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';(p($){$.q.1Q=p(){J O.2n(p(){n b=$(O).u(\'2o\');8(b.1d(/^3i\\(["\']?(.*\\.2p)["\']?\\)$/i)){b=3j.$1;$(O).u({\'2o\':\'3k\',\'1e\':"3l:3m.3n.3o(3p=D, 3q="+($(O).u(\'3r\')==\'2q-3s\'?\'3t\':\'3u\')+", 13=\'"+b+"\')"}).2n(p(){n a=$(O).u(\'1u\');8(a!=\'2r\'&&a!=\'2s\')$(O).u(\'1u\',\'2s\')})}})};n l,4,1f=F,X=1v 1w,1x,1y=1,1z=/\\.(3v|3w|2p|3x|3y)(.*)?$/i;n m=1A,18=$.14.1g&&$.14.2t.1R(0,1)==6&&!19.3z,1S=18||($.14.1g&&$.14.2t.1R(0,1)==7);$.q.r=p(o){n j=$.2u({},$.q.r.2v,o);n k=O;p 2w(){l=O;4=$.2u({},j);2x();J F};p 2x(){8(1f)J;8($.1T(4.1U)){4.1U()}4.v=[];4.t=0;8(j.v.Y>0){4.v=j.v}C{n a={};8(!l.1B||l.1B==\'\'){n a={K:l.K,G:l.G};8($(l).1C("1l:1D").Y){a.S=$(l).1C("1l:1D")}C{a.S=$(l)}8(a.G==\'\'||1V a.G==\'1m\'){a.G=a.S.2y(\'1W\')}4.v.2z(a)}C{n b=$(k).1e("a[1B="+l.1B+"]");n a={};3A(n i=0;i<b.Y;i++){a={K:b[i].K,G:b[i].G};8($(b[i]).1C("1l:1D").Y){a.S=$(b[i]).1C("1l:1D")}C{a.S=$(b[i])}8(a.G==\'\'||1V a.G==\'1m\'){a.G=a.S.2y(\'1W\')}4.v.2z(a)}}}3B(4.v[4.t].K!=l.K){4.t++}8(4.1E){8(18){$(\'1X, 1Y, 1Z\').u(\'21\',\'3C\');$("#T").u(\'A\',$(U).A())}$("#T").u({\'3D-3E\':4.2A,\'22\':4.2B}).Z()}$(19).11("23.L 24.L",$.q.r.2C);1h()};p 1h(){$("#1n, #1o, #1i, #H").1a();n b=4.v[4.t].K;8(b.1d("1j")||l.3F.2D("1j")>=0){$.q.r.1F();1p(\'<1j s="2E" 3G="2F.q.r.2G()" 3H="3I\'+P.1b(P.3J()*3K)+\'" 2H="0" 3L="0" 13="\'+b+\'"></1j>\',4.1G,4.1H)}C 8(b.1d(/#/)){n c=19.3M.K.3N(\'#\')[0];c=b.3O(c,\'\');c=c.1R(c.2D(\'#\'));1p(\'<9 s="3P">\'+$(c).2I()+\'</9>\',4.1G,4.1H)}C 8(b.1d(1z)){X=1v 1w;X.13=b;8(X.3Q){25()}C{$.q.r.1F();$(X).Q().11(\'3R\',p(){$("#M").1a();25()})}}C{$.q.r.1F();$.3S(b,p(a){$("#M").1a();1p(\'<9 s="3T">\'+a+\'</9>\',4.1G,4.1H)})}};p 25(){n a=X.E;n b=X.A;n c=(4.N*2)+40;n d=(4.N*2)+26;n w=$.q.r.1q();8(4.2J&&(a>(w[0]-c)||b>(w[1]-d))){n e=P.28(P.28(w[0]-c,a)/a,P.28(w[1]-d,b)/b);a=P.1b(e*a);b=P.1b(e*b)}1p(\'<1l 1W="" s="3U" 13="\'+X.13+\'" />\',a,b)};p 2K(){8((4.v.Y-1)>4.t){n a=4.v[4.t+1].K||F;8(a&&a.1d(1z)){1I=1v 1w();1I.13=a}}8(4.t>0){n a=4.v[4.t-1].K||F;8(a&&a.1d(1z)){1I=1v 1w();1I.13=a}}};p 1p(a,b,c){1f=D;n d=4.N;8(1S||m){$("#y")[0].15.2L("A");$("#y")[0].15.2L("E")}8(d>0){b+=d*2;c+=d*2;$("#y").u({\'z\':d+\'R\',\'2M\':d+\'R\',\'2N\':d+\'R\',\'B\':d+\'R\',\'E\':\'2O\',\'A\':\'2O\'});8(1S||m){$("#y")[0].15.2P(\'A\',\'(O.2Q.3V - \'+d*2+\')\');$("#y")[0].15.2P(\'E\',\'(O.2Q.3W - \'+d*2+\')\')}}C{$("#y").u({\'z\':0,\'2M\':0,\'2N\':0,\'B\':0,\'E\':\'2R%\',\'A\':\'2R%\'})}8($("#x").16(":V")&&b==$("#x").E()&&c==$("#x").A()){$("#y").1J(\'29\',p(){$("#y").1r().1K($(a)).2a("1L",p(){1s()})});J}n w=$.q.r.1q();n e=(c+26)>w[1]?w[3]:(w[3]+P.1b((w[1]-c-26)*0.5));n f=(b+40)>w[0]?w[2]:(w[2]+P.1b((w[0]-b-40)*0.5));n g={\'B\':f,\'z\':e,\'E\':b+\'R\',\'A\':c+\'R\'};8($("#x").16(":V")){$("#y").1J("1L",p(){$("#y").1r();$("#x").2b(g,4.2S,4.2T,p(){$("#y").1K($(a)).2a("1L",p(){1s()})})})}C{8(4.2c>0&&4.v[4.t].S!==1m){$("#y").1r().1K($(a));n h=4.v[4.t].S;n i=$.q.r.2d(h);$("#x").u({\'B\':(i.B-20-4.N)+\'R\',\'z\':(i.z-20-4.N)+\'R\',\'E\':$(h).E()+(4.N*2),\'A\':$(h).A()+(4.N*2)});8(4.2e){g.22=\'Z\'}$("#x").2b(g,4.2c,4.2U,p(){1s()})}C{$("#y").1a().1r().1K($(a)).Z();$("#x").u(g).2a("1L",p(){1s()})}}};p 2V(){8(4.t!==0){$("#1o, #2W").Q().11("17",p(e){e.2X();4.t--;1h();J F});$("#1o").Z()}8(4.t!=(4.v.Y-1)){$("#1n, #2Y").Q().11("17",p(e){e.2X();4.t++;1h();J F});$("#1n").Z()}};p 1s(){8($.14.1g){$("#y")[0].15.1M(\'1e\');$("#x")[0].15.1M(\'1e\')}2V();2K();$(U).11("1N.L",p(e){8(e.2f==27&&4.2Z){$.q.r.1c()}C 8(e.2f==37&&4.t!==0){$(U).Q("1N.L");4.t--;1h()}C 8(e.2f==39&&4.t!=(4.v.Y-1)){$(U).Q("1N.L");4.t++;1h()}});8(4.30){$("#y").17($.q.r.1c)}8(4.1E&&4.31){$("#T").11("17",$.q.r.1c)}8(4.33){$("#1i").11("17",$.q.r.1c).Z()}8(1V 4.v[4.t].G!==\'1m\'&&4.v[4.t].G.Y>0){n a=$("#x").1u();$(\'#H 9\').3X(4.v[4.t].G).2I();$(\'#H\').u({\'z\':a.z+$("#x").34()-32,\'B\':a.B+(($("#x").35()*0.5)-($(\'#H\').E()*0.5))}).Z()}8(4.1E&&18){$(\'1X, 1Y, 1Z\',$(\'#y\')).u(\'21\',\'V\')}8($.1T(4.2g)){4.2g(4.v[4.t])}8($.14.1g){$("#x")[0].15.1M(\'1e\');$("#y")[0].15.1M(\'1e\')}1f=F};J O.Q(\'17.L\').11(\'17.L\',2w)};$.q.r.2C=p(){n w=$.q.r.1q();8(4.2h&&$("#x").16(\':V\')){n a=$("#x").35();n b=$("#x").34();n c={\'z\':(b>w[1]?w[3]:w[3]+P.1b((w[1]-b)*0.5)),\'B\':(a>w[0]?w[2]:w[2]+P.1b((w[0]-a)*0.5))};$("#x").u(c);$(\'#H\').u({\'z\':c.z+b-32,\'B\':c.B+((a*0.5)-($(\'#H\').E()*0.5))})}8(18&&$("#T").16(\':V\')){$("#T").u({\'A\':$(U).A()})}8($("#M").16(\':V\')){$("#M").u({\'B\':((w[0]-40)*0.5+w[2]),\'z\':((w[1]-40)*0.5+w[3])})}};$.q.r.1t=p(a,b){J 3Y($.3Z(a.41?a[0]:a,b,D))||0};$.q.r.2d=p(a){n b=a.42();b.z+=$.q.r.1t(a,\'43\');b.z+=$.q.r.1t(a,\'44\');b.B+=$.q.r.1t(a,\'45\');b.B+=$.q.r.1t(a,\'46\');J b};$.q.r.2G=p(){$("#M").1a();$("#2E").Z()};$.q.r.1q=p(){J[$(19).E(),$(19).A(),$(U).47(),$(U).48()]};$.q.r.36=p(){8(!$("#M").16(\':V\')){38(1x);J}$("#M > 9").u(\'z\',(1y*-40)+\'R\');1y=(1y+1)%12};$.q.r.1F=p(){38(1x);n w=$.q.r.1q();$("#M").u({\'B\':((w[0]-40)*0.5+w[2]),\'z\':((w[1]-40)*0.5+w[3])}).Z();$("#M").11(\'17\',$.q.r.1c);1x=49($.q.r.36,4a)};$.q.r.1c=p(){1f=D;$(X).Q();$(U).Q("1N.L");$(19).Q("23.L 24.L");$("#T, #y, #1i").Q();$("#1i, #M, #1o, #1n, #H").1a();1O=p(){8($("#T").16(\':V\')){$("#T").1J("29")}$("#y").1r();8(4.2h){$(19).Q("23.L 24.L")}8(18){$(\'1X, 1Y, 1Z\').u(\'21\',\'V\')}8($.1T(4.2i)){4.2i()}1f=F};8($("#x").16(":V")!==F){8(4.2j>0&&4.v[4.t].S!==1m){n a=4.v[4.t].S;n b=$.q.r.2d(a);n c={\'B\':(b.B-20-4.N)+\'R\',\'z\':(b.z-20-4.N)+\'R\',\'E\':$(a).E()+(4.N*2),\'A\':$(a).A()+(4.N*2)};8(4.2e){c.22=\'1a\'}$("#x").3a(F,D).2b(c,4.2j,4.3b,1O)}C{$("#x").3a(F,D).1J(\'29\',1O)}}C{1O()}J F};$.q.r.3c=p(){n a=\'\';a+=\'<9 s="T"></9>\';a+=\'<9 s="M"><9></9></9>\';a+=\'<9 s="x">\';a+=\'<9 s="3d">\';a+=\'<9 s="1i"></9>\';a+=\'<9 s="W"><9 I="W" s="4b"></9><9 I="W" s="4c"></9><9 I="W" s="4d"></9><9 I="W" s="4e"></9><9 I="W" s="4f"></9><9 I="W" s="4g"></9><9 I="W" s="4h"></9><9 I="W" s="4i"></9></9>\';a+=\'<a K="2k:;" s="1o"><1P I="2l" s="2W"></1P></a><a K="2k:;" s="1n"><1P I="2l" s="2Y"></1P></a>\';a+=\'<9 s="y"></9>\';a+=\'</9>\';a+=\'</9>\';a+=\'<9 s="H"></9>\';$(a).3e("4j");$(\'<3f 4k="0" 4l="0" 4m="0"><3g><1k I="H" s="4n"></1k><1k I="H" s="4o"><9></9></1k><1k I="H" s="4p"></1k></3g></3f>\').3e(\'#H\');8($.14.1g){$(".W").1Q()}8(18){$("9#T").u("1u","2r");$("#M 9, #1i, .H, .2l").1Q();$("#3d").4q(\'<1j s="3h" 13="2k:F;" 4r="2q" 2H="0"></1j>\');n b=$(\'#3h\')[0].4s.U;b.4t();b.1c()}};$.q.r.2v={N:10,2J:D,2e:D,2c:0,2j:0,2S:4u,2U:\'2m\',3b:\'2m\',2T:\'2m\',1G:4v,1H:4w,1E:D,2B:0.3,2A:\'#4x\',2Z:D,33:D,31:D,30:D,2h:D,v:[],1U:1A,2g:1A,2i:1A};$(U).4y(p(){m=$.14.1g&&!$.4z;8($("#x").Y<1){$.q.r.3c()}})})(2F);',62,284,'||||opts||||if|div||||||||||||||var||function|fn|fancybox|id|itemCurrent|css|itemArray||fancy_outer|fancy_content|top|height|left|else|true|width|false|title|fancy_title|class|return|href|fb|fancy_loading|padding|this|Math|unbind|px|orig|fancy_overlay|document|visible|fancy_bg|imagePreloader|length|show||bind||src|browser|style|is|click|IE6|window|hide|round|close|match|filter|busy|msie|_change_item|fancy_close|iframe|td|img|undefined|fancy_right|fancy_left|_set_content|getViewport|empty|_finish|getNumeric|position|new|Image|loadingTimer|loadingFrame|imageRegExp|null|rel|children|first|overlayShow|showLoading|frameWidth|frameHeight|objNext|fadeOut|append|normal|removeAttribute|keydown|__cleanup|span|fixPNG|substr|oldIE|isFunction|callbackOnStart|typeof|alt|embed|object|select||visibility|opacity|resize|scroll|_proceed_image|60||min|fast|fadeIn|animate|zoomSpeedIn|getPosition|zoomOpacity|keyCode|callbackOnShow|centerOnScroll|callbackOnClose|zoomSpeedOut|javascript|fancy_ico|swing|each|backgroundImage|png|no|absolute|relative|version|extend|defaults|_initialize|_start|attr|push|overlayColor|overlayOpacity|scrollBox|indexOf|fancy_frame|jQuery|showIframe|frameborder|html|imageScale|_preload_neighbor_images|removeExpression|right|bottom|auto|setExpression|parentNode|100|zoomSpeedChange|easingChange|easingIn|_set_navigation|fancy_left_ico|stopPropagation|fancy_right_ico|enableEscapeButton|hideOnContentClick|hideOnOverlayClick||showCloseButton|outerHeight|outerWidth|animateLoading||clearInterval||stop|easingOut|build|fancy_inner|appendTo|table|tr|fancy_bigIframe|url|RegExp|none|progid|DXImageTransform|Microsoft|AlphaImageLoader|enabled|sizingMethod|backgroundRepeat|repeat|crop|scale|jpg|gif|bmp|jpeg|XMLHttpRequest|for|while|hidden|background|color|className|onload|name|fancy_iframe|random|1000|hspace|location|split|replace|fancy_div|complete|load|get|fancy_ajax|fancy_img|clientHeight|clientWidth|text|parseInt|curCSS||jquery|offset|paddingTop|borderTopWidth|paddingLeft|borderLeftWidth|scrollLeft|scrollTop|setInterval|66|fancy_bg_n|fancy_bg_ne|fancy_bg_e|fancy_bg_se|fancy_bg_s|fancy_bg_sw|fancy_bg_w|fancy_bg_nw|body|cellspacing|cellpadding|border|fancy_title_left|fancy_title_main|fancy_title_right|prepend|scrolling|contentWindow|open|300|560|340|666|ready|boxModel'.split('|'),0,{}));
16
+
17
+ (function(b){var m,u,x,g,D,i,z,A,B,p=0,e={},q=[],n=0,c={},j=[],E=null,s=new Image,G=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,S=/[^\.]\.(swf)\s*$/i,H,I=1,k,l,h=false,y=b.extend(b("<div/>")[0],{prop:0}),v=0,O=!b.support.opacity&&!window.XMLHttpRequest,J=function(){u.hide();s.onerror=s.onload=null;E&&E.abort();m.empty()},P=function(){b.fancybox('<p id="fancybox_error">The requested content cannot be loaded.<br />Please try again later.</p>',{scrolling:"no",padding:20,transitionIn:"none",transitionOut:"none"})},
18
+ K=function(){return[b(window).width(),b(window).height(),b(document).scrollLeft(),b(document).scrollTop()]},T=function(){var a=K(),d={},f=c.margin,o=c.autoScale,t=(20+f)*2,w=(20+f)*2,r=c.padding*2;if(c.width.toString().indexOf("%")>-1){d.width=a[0]*parseFloat(c.width)/100-40;o=false}else d.width=c.width+r;if(c.height.toString().indexOf("%")>-1){d.height=a[1]*parseFloat(c.height)/100-40;o=false}else d.height=c.height+r;if(o&&(d.width>a[0]-t||d.height>a[1]-w))if(e.type=="image"||e.type=="swf"){t+=r;
19
+ w+=r;o=Math.min(Math.min(a[0]-t,c.width)/c.width,Math.min(a[1]-w,c.height)/c.height);d.width=Math.round(o*(d.width-r))+r;d.height=Math.round(o*(d.height-r))+r}else{d.width=Math.min(d.width,a[0]-t);d.height=Math.min(d.height,a[1]-w)}d.top=a[3]+(a[1]-(d.height+40))*0.5;d.left=a[2]+(a[0]-(d.width+40))*0.5;if(c.autoScale===false){d.top=Math.max(a[3]+f,d.top);d.left=Math.max(a[2]+f,d.left)}return d},U=function(a){if(a&&a.length)switch(c.titlePosition){case "inside":return a;case "over":return'<span id="fancybox-title-over">'+
20
+ a+"</span>";default:return'<span id="fancybox-title-wrap"><span id="fancybox-title-left"></span><span id="fancybox-title-main">'+a+'</span><span id="fancybox-title-right"></span></span>'}return false},V=function(){var a=c.title,d=l.width-c.padding*2,f="fancybox-title-"+c.titlePosition;b("#fancybox-title").remove();v=0;if(c.titleShow!==false){a=b.isFunction(c.titleFormat)?c.titleFormat(a,j,n,c):U(a);if(!(!a||a==="")){b('<div id="fancybox-title" class="'+f+'" />').css({width:d,paddingLeft:c.padding,
21
+ paddingRight:c.padding}).html(a).appendTo("body");switch(c.titlePosition){case "inside":v=b("#fancybox-title").outerHeight(true)-c.padding;l.height+=v;break;case "over":b("#fancybox-title").css("bottom",c.padding);break;default:b("#fancybox-title").css("bottom",b("#fancybox-title").outerHeight(true)*-1);break}b("#fancybox-title").appendTo(D).hide()}}},W=function(){b(document).unbind("keydown.fb").bind("keydown.fb",function(a){if(a.keyCode==27&&c.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if(a.keyCode==
22
+ 37){a.preventDefault();b.fancybox.prev()}else if(a.keyCode==39){a.preventDefault();b.fancybox.next()}});if(b.fn.mousewheel){g.unbind("mousewheel.fb");j.length>1&&g.bind("mousewheel.fb",function(a,d){a.preventDefault();h||d===0||(d>0?b.fancybox.prev():b.fancybox.next())})}if(c.showNavArrows){if(c.cyclic&&j.length>1||n!==0)A.show();if(c.cyclic&&j.length>1||n!=j.length-1)B.show()}},X=function(){var a,d;if(j.length-1>n){a=j[n+1].href;if(typeof a!=="undefined"&&a.match(G)){d=new Image;d.src=a}}if(n>0){a=
23
+ j[n-1].href;if(typeof a!=="undefined"&&a.match(G)){d=new Image;d.src=a}}},L=function(){i.css("overflow",c.scrolling=="auto"?c.type=="image"||c.type=="iframe"||c.type=="swf"?"hidden":"auto":c.scrolling=="yes"?"auto":"visible");if(!b.support.opacity){i.get(0).style.removeAttribute("filter");g.get(0).style.removeAttribute("filter")}b("#fancybox-title").show();c.hideOnContentClick&&i.one("click",b.fancybox.close);c.hideOnOverlayClick&&x.one("click",b.fancybox.close);c.showCloseButton&&z.show();W();b(window).bind("resize.fb",
24
+ b.fancybox.center);c.centerOnScroll?b(window).bind("scroll.fb",b.fancybox.center):b(window).unbind("scroll.fb");b.isFunction(c.onComplete)&&c.onComplete(j,n,c);h=false;X()},M=function(a){var d=Math.round(k.width+(l.width-k.width)*a),f=Math.round(k.height+(l.height-k.height)*a),o=Math.round(k.top+(l.top-k.top)*a),t=Math.round(k.left+(l.left-k.left)*a);g.css({width:d+"px",height:f+"px",top:o+"px",left:t+"px"});d=Math.max(d-c.padding*2,0);f=Math.max(f-(c.padding*2+v*a),0);i.css({width:d+"px",height:f+
25
+ "px"});if(typeof l.opacity!=="undefined")g.css("opacity",a<0.5?0.5:a)},Y=function(a){var d=a.offset();d.top+=parseFloat(a.css("paddingTop"))||0;d.left+=parseFloat(a.css("paddingLeft"))||0;d.top+=parseFloat(a.css("border-top-width"))||0;d.left+=parseFloat(a.css("border-left-width"))||0;d.width=a.width();d.height=a.height();return d},Q=function(){var a=e.orig?b(e.orig):false,d={};if(a&&a.length){a=Y(a);d={width:a.width+c.padding*2,height:a.height+c.padding*2,top:a.top-c.padding-20,left:a.left-c.padding-
26
+ 20}}else{a=K();d={width:1,height:1,top:a[3]+a[1]*0.5,left:a[2]+a[0]*0.5}}return d},N=function(){u.hide();if(g.is(":visible")&&b.isFunction(c.onCleanup))if(c.onCleanup(j,n,c)===false){b.event.trigger("fancybox-cancel");h=false;return}j=q;n=p;c=e;i.get(0).scrollTop=0;i.get(0).scrollLeft=0;if(c.overlayShow){O&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});
27
+ x.css({"background-color":c.overlayColor,opacity:c.overlayOpacity}).unbind().show()}l=T();V();if(g.is(":visible")){b(z.add(A).add(B)).hide();var a=g.position(),d;k={top:a.top,left:a.left,width:g.width(),height:g.height()};d=k.width==l.width&&k.height==l.height;i.fadeOut(c.changeFade,function(){var f=function(){i.html(m.contents()).fadeIn(c.changeFade,L)};b.event.trigger("fancybox-change");i.empty().css("overflow","hidden");if(d){i.css({top:c.padding,left:c.padding,width:Math.max(l.width-c.padding*
28
+ 2,1),height:Math.max(l.height-c.padding*2-v,1)});f()}else{i.css({top:c.padding,left:c.padding,width:Math.max(k.width-c.padding*2,1),height:Math.max(k.height-c.padding*2,1)});y.prop=0;b(y).animate({prop:1},{duration:c.changeSpeed,easing:c.easingChange,step:M,complete:f})}})}else{g.css("opacity",1);if(c.transitionIn=="elastic"){k=Q();i.css({top:c.padding,left:c.padding,width:Math.max(k.width-c.padding*2,1),height:Math.max(k.height-c.padding*2,1)}).html(m.contents());g.css(k).show();if(c.opacity)l.opacity=
29
+ 0;y.prop=0;b(y).animate({prop:1},{duration:c.speedIn,easing:c.easingIn,step:M,complete:L})}else{i.css({top:c.padding,left:c.padding,width:Math.max(l.width-c.padding*2,1),height:Math.max(l.height-c.padding*2-v,1)}).html(m.contents());g.css(l).fadeIn(c.transitionIn=="none"?0:c.speedIn,L)}}},F=function(){m.width(e.width);m.height(e.height);if(e.width=="auto")e.width=m.width();if(e.height=="auto")e.height=m.height();N()},Z=function(){h=true;e.width=s.width;e.height=s.height;b("<img />").attr({id:"fancybox-img",
30
+ src:s.src,alt:e.title}).appendTo(m);N()},C=function(){J();var a=q[p],d,f,o,t,w;e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));o=a.title||b(a).title||e.title||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(o===""&&e.orig)o=e.orig.attr("alt");d=a.nodeName&&/^(?:javascript|#)/i.test(a.href)?e.href||null:e.href||a.href||null;if(e.type){f=e.type;if(!d)d=e.content}else if(e.content)f="html";else if(d)if(d.match(G))f=
31
+ "image";else if(d.match(S))f="swf";else if(b(a).hasClass("iframe"))f="iframe";else if(d.match(/#/)){a=d.substr(d.indexOf("#"));f=b(a).length>0?"inline":"ajax"}else f="ajax";else f="inline";e.type=f;e.href=d;e.title=o;if(e.autoDimensions&&e.type!=="iframe"&&e.type!=="swf"){e.width="auto";e.height="auto"}if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=false;e.enableEscapeButton=false;e.showCloseButton=false}if(b.isFunction(e.onStart))if(e.onStart(q,p,e)===false){h=false;
32
+ return}m.css("padding",20+e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(i.children())});switch(f){case "html":m.html(e.content);F();break;case "inline":b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(i.children())}).bind("fancybox-cancel",function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();
33
+ s=new Image;s.onerror=function(){P()};s.onload=function(){s.onerror=null;s.onload=null;Z()};s.src=d;break;case "swf":t='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+d+'"></param>';w="";b.each(e.swf,function(r,R){t+='<param name="'+r+'" value="'+R+'"></param>';w+=" "+r+'="'+R+'"'});t+='<embed src="'+d+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+w+"></embed></object>";m.html(t);
34
+ F();break;case "ajax":a=d.split("#",2);f=e.ajax.data||{};if(a.length>1){d=a[0];if(typeof f=="string")f+="&selector="+a[1];else f.selector=a[1]}h=false;b.fancybox.showActivity();E=b.ajax(b.extend(e.ajax,{url:d,data:f,error:P,success:function(r){if(E.status==200){m.html(r);F()}}}));break;case "iframe":b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" scrolling="'+e.scrolling+'" src="'+e.href+'"></iframe>').appendTo(m);N();break}},$=function(){if(u.is(":visible")){b("div",
35
+ u).css("top",I*-40+"px");I=(I+1)%12}else clearInterval(H)},aa=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),u=b('<div id="fancybox-loading"><div></div></div>'),x=b('<div id="fancybox-overlay"></div>'),g=b('<div id="fancybox-wrap"></div>'));if(!b.support.opacity){g.addClass("fancybox-ie");u.addClass("fancybox-ie")}D=b('<div id="fancybox-outer"></div>').append('<div class="fancy-bg" id="fancy-bg-n"></div><div class="fancy-bg" id="fancy-bg-ne"></div><div class="fancy-bg" id="fancy-bg-e"></div><div class="fancy-bg" id="fancy-bg-se"></div><div class="fancy-bg" id="fancy-bg-s"></div><div class="fancy-bg" id="fancy-bg-sw"></div><div class="fancy-bg" id="fancy-bg-w"></div><div class="fancy-bg" id="fancy-bg-nw"></div>').appendTo(g);
36
+ D.append(i=b('<div id="fancybox-inner"></div>'),z=b('<a id="fancybox-close"></a>'),A=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),B=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));z.click(b.fancybox.close);u.click(b.fancybox.cancel);A.click(function(a){a.preventDefault();b.fancybox.prev()});B.click(function(a){a.preventDefault();b.fancybox.next()});if(O){x.get(0).style.setExpression("height",
37
+ "document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'");u.get(0).style.setExpression("top","(-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px'");D.prepend('<iframe id="fancybox-hide-sel-frame" src="javascript:\'\';" scrolling="no" frameborder="0" ></iframe>')}}};
38
+ b.fn.fancybox=function(a){b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(d){d.preventDefault();if(!h){h=true;b(this).blur();q=[];p=0;d=b(this).attr("rel")||"";if(!d||d==""||d==="nofollow")q.push(this);else{q=b("a[rel="+d+"], area[rel="+d+"]");p=q.index(this)}C();return false}});return this};b.fancybox=function(a,d){if(!h){h=true;d=typeof d!=="undefined"?d:{};q=[];p=d.index||0;if(b.isArray(a)){for(var f=0,o=a.length;f<o;f++)if(typeof a[f]==
39
+ "object")b(a[f]).data("fancybox",b.extend({},d,a[f]));else a[f]=b({}).data("fancybox",b.extend({content:a[f]},d));q=jQuery.merge(q,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},d,a));else a=b({}).data("fancybox",b.extend({content:a},d));q.push(a)}if(p>q.length||p<0)p=0;C()}};b.fancybox.showActivity=function(){clearInterval(H);u.show();H=setInterval($,66)};b.fancybox.hideActivity=function(){u.hide()};b.fancybox.next=function(){return b.fancybox.pos(n+1)};b.fancybox.prev=function(){return b.fancybox.pos(n-
40
+ 1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a,10);if(a>-1&&j.length>a){p=a;C()}if(c.cyclic&&j.length>1&&a<0){p=j.length-1;C()}if(c.cyclic&&j.length>1&&a>=j.length){p=0;C()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");J();e&&b.isFunction(e.onCancel)&&e.onCancel(q,p,e);h=false}};b.fancybox.close=function(){function a(){x.fadeOut("fast");g.hide();b.event.trigger("fancybox-cleanup");i.empty();b.isFunction(c.onClosed)&&c.onClosed(j,n,c);j=e=[];n=p=0;c=e={};h=false}
41
+ if(!(h||g.is(":hidden"))){h=true;if(c&&b.isFunction(c.onCleanup))if(c.onCleanup(j,n,c)===false){h=false;return}J();b(z.add(A).add(B)).hide();b("#fancybox-title").remove();g.add(i).add(x).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");i.css("overflow","hidden");if(c.transitionOut=="elastic"){k=Q();var d=g.position();l={top:d.top,left:d.left,width:g.width(),height:g.height()};if(c.opacity)l.opacity=1;y.prop=1;b(y).animate({prop:0},{duration:c.speedOut,easing:c.easingOut,
42
+ step:M,complete:a})}else g.fadeOut(c.transitionOut=="none"?0:c.speedOut,a)}};b.fancybox.resize=function(){var a,d;if(!(h||g.is(":hidden"))){h=true;a=i.wrapInner("<div style='overflow:auto'></div>").children();d=a.height();g.css({height:d+c.padding*2+v});i.css({height:d});a.replaceWith(a.children());b.fancybox.center()}};b.fancybox.center=function(){h=true;var a=K(),d=c.margin,f={};f.top=a[3]+(a[1]-(g.height()-v+40))*0.5;f.left=a[2]+(a[0]-(g.width()+40))*0.5;f.top=Math.max(a[3]+d,f.top);f.left=Math.max(a[2]+
43
+ d,f.left);g.css(f);h=false};b.fn.fancybox.defaults={padding:10,margin:20,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.3,overlayColor:"#666",titleShow:true,titlePosition:"outside",titleFormat:null,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",
44
+ easingIn:"swing",easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,onStart:null,onCancel:null,onComplete:null,onCleanup:null,onClosed:null};b(document).ready(function(){aa()})})(jQuery);
@@ -1,7 +1,7 @@
1
- /*
1
+ /*!
2
2
  * jQuery Form Plugin
3
- * version: 2.24 (10-MAR-2009)
4
- * @requires jQuery v1.2.2 or later
3
+ * version: 2.43 (12-MAR-2010)
4
+ * @requires jQuery v1.3.2 or later
5
5
  *
6
6
  * Examples and documentation at: http://malsup.com/jquery/form/
7
7
  * Dual licensed under the MIT and GPL licenses:
@@ -11,32 +11,32 @@
11
11
  ;(function($) {
12
12
 
13
13
  /*
14
- Usage Note:
15
- -----------
16
- Do not use both ajaxSubmit and ajaxForm on the same form. These
17
- functions are intended to be exclusive. Use ajaxSubmit if you want
18
- to bind your own submit handler to the form. For example,
19
-
20
- $(document).ready(function() {
21
- $('#myForm').bind('submit', function() {
22
- $(this).ajaxSubmit({
23
- target: '#output'
24
- });
25
- return false; // <-- important!
26
- });
27
- });
28
-
29
- Use ajaxForm when you want the plugin to manage all the event binding
30
- for you. For example,
31
-
32
- $(document).ready(function() {
33
- $('#myForm').ajaxForm({
34
- target: '#output'
35
- });
36
- });
37
-
38
- When using ajaxForm, the ajaxSubmit function will be invoked for you
39
- at the appropriate time.
14
+ Usage Note:
15
+ -----------
16
+ Do not use both ajaxSubmit and ajaxForm on the same form. These
17
+ functions are intended to be exclusive. Use ajaxSubmit if you want
18
+ to bind your own submit handler to the form. For example,
19
+
20
+ $(document).ready(function() {
21
+ $('#myForm').bind('submit', function() {
22
+ $(this).ajaxSubmit({
23
+ target: '#output'
24
+ });
25
+ return false; // <-- important!
26
+ });
27
+ });
28
+
29
+ Use ajaxForm when you want the plugin to manage all the event binding
30
+ for you. For example,
31
+
32
+ $(document).ready(function() {
33
+ $('#myForm').ajaxForm({
34
+ target: '#output'
35
+ });
36
+ });
37
+
38
+ When using ajaxForm, the ajaxSubmit function will be invoked for you
39
+ at the appropriate time.
40
40
  */
41
41
 
42
42
  /**
@@ -44,184 +44,193 @@
44
44
  * an HTML form using AJAX.
45
45
  */
46
46
  $.fn.ajaxSubmit = function(options) {
47
- // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
48
- if (!this.length) {
49
- log('ajaxSubmit: skipping submit process - no element selected');
50
- return this;
51
- }
52
-
53
- if (typeof options == 'function')
54
- options = { success: options };
55
-
56
- // clean url (don't include hash vaue)
57
- var url = this.attr('action') || window.location.href;
58
- url = (url.match(/^([^#]+)/)||[])[1];
59
- url = url || '';
60
-
61
- options = $.extend({
62
- url: url,
63
- type: this.attr('method') || 'GET'
64
- }, options || {});
65
-
66
- // hook for manipulating the form data before it is extracted;
67
- // convenient for use with rich editors like tinyMCE or FCKEditor
68
- var veto = {};
69
- this.trigger('form-pre-serialize', [this, options, veto]);
70
- if (veto.veto) {
71
- log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
72
- return this;
73
- }
74
-
75
- // provide opportunity to alter form data before it is serialized
76
- if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
77
- log('ajaxSubmit: submit aborted via beforeSerialize callback');
78
- return this;
79
- }
80
-
81
- var a = this.formToArray(options.semantic);
82
- if (options.data) {
83
- options.extraData = options.data;
84
- for (var n in options.data) {
85
- if(options.data[n] instanceof Array) {
86
- for (var k in options.data[n])
87
- a.push( { name: n, value: options.data[n][k] } );
88
- }
89
- else
90
- a.push( { name: n, value: options.data[n] } );
91
- }
92
- }
93
-
94
- // give pre-submit callback an opportunity to abort the submit
95
- if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
96
- log('ajaxSubmit: submit aborted via beforeSubmit callback');
97
- return this;
98
- }
99
-
100
- // fire vetoable 'validate' event
101
- this.trigger('form-submit-validate', [a, this, options, veto]);
102
- if (veto.veto) {
103
- log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
104
- return this;
105
- }
106
-
107
- var q = $.param(a);
108
-
109
- if (options.type.toUpperCase() == 'GET') {
110
- options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
111
- options.data = null; // data is null for 'get'
112
- }
113
- else
114
- options.data = q; // data is the query string for 'post'
115
-
116
- var $form = this, callbacks = [];
117
- if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
118
- if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
119
-
120
- // perform a load on the target only if dataType is not provided
121
- if (!options.dataType && options.target) {
122
- var oldSuccess = options.success || function(){};
123
- callbacks.push(function(data) {
124
- $(options.target).html(data).each(oldSuccess, arguments);
125
- });
126
- }
127
- else if (options.success)
128
- callbacks.push(options.success);
129
-
130
- options.success = function(data, status) {
131
- for (var i=0, max=callbacks.length; i < max; i++)
132
- callbacks[i].apply(options, [data, status, $form]);
133
- };
134
-
135
- // are there files to upload?
136
- var files = $('input:file', this).fieldValue();
137
- var found = false;
138
- for (var j=0; j < files.length; j++)
139
- if (files[j])
140
- found = true;
141
-
142
- // options.iframe allows user to force iframe mode
143
- if (options.iframe || found) {
144
- // hack to fix Safari hang (thanks to Tim Molendijk for this)
145
- // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
146
- if (options.closeKeepAlive)
147
- $.get(options.closeKeepAlive, fileUpload);
148
- else
149
- fileUpload();
150
- }
47
+ // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
48
+ if (!this.length) {
49
+ log('ajaxSubmit: skipping submit process - no element selected');
50
+ return this;
51
+ }
52
+
53
+ if (typeof options == 'function')
54
+ options = { success: options };
55
+
56
+ var url = $.trim(this.attr('action'));
57
+ if (url) {
58
+ // clean url (don't include hash vaue)
59
+ url = (url.match(/^([^#]+)/)||[])[1];
60
+ }
61
+ url = url || window.location.href || '';
62
+
63
+ options = $.extend({
64
+ url: url,
65
+ type: this.attr('method') || 'GET',
66
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
67
+ }, options || {});
68
+
69
+ // hook for manipulating the form data before it is extracted;
70
+ // convenient for use with rich editors like tinyMCE or FCKEditor
71
+ var veto = {};
72
+ this.trigger('form-pre-serialize', [this, options, veto]);
73
+ if (veto.veto) {
74
+ log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
75
+ return this;
76
+ }
77
+
78
+ // provide opportunity to alter form data before it is serialized
79
+ if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
80
+ log('ajaxSubmit: submit aborted via beforeSerialize callback');
81
+ return this;
82
+ }
83
+
84
+ var a = this.formToArray(options.semantic);
85
+ if (options.data) {
86
+ options.extraData = options.data;
87
+ for (var n in options.data) {
88
+ if(options.data[n] instanceof Array) {
89
+ for (var k in options.data[n])
90
+ a.push( { name: n, value: options.data[n][k] } );
91
+ }
92
+ else
93
+ a.push( { name: n, value: options.data[n] } );
94
+ }
95
+ }
96
+
97
+ // give pre-submit callback an opportunity to abort the submit
98
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
99
+ log('ajaxSubmit: submit aborted via beforeSubmit callback');
100
+ return this;
101
+ }
102
+
103
+ // fire vetoable 'validate' event
104
+ this.trigger('form-submit-validate', [a, this, options, veto]);
105
+ if (veto.veto) {
106
+ log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
107
+ return this;
108
+ }
109
+
110
+ var q = $.param(a);
111
+
112
+ if (options.type.toUpperCase() == 'GET') {
113
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
114
+ options.data = null; // data is null for 'get'
115
+ }
116
+ else
117
+ options.data = q; // data is the query string for 'post'
118
+
119
+ var $form = this, callbacks = [];
120
+ if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
121
+ if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
122
+
123
+ // perform a load on the target only if dataType is not provided
124
+ if (!options.dataType && options.target) {
125
+ var oldSuccess = options.success || function(){};
126
+ callbacks.push(function(data) {
127
+ var fn = options.replaceTarget ? 'replaceWith' : 'html';
128
+ $(options.target)[fn](data).each(oldSuccess, arguments);
129
+ });
130
+ }
131
+ else if (options.success)
132
+ callbacks.push(options.success);
133
+
134
+ options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
135
+ for (var i=0, max=callbacks.length; i < max; i++)
136
+ callbacks[i].apply(options, [data, status, xhr || $form, $form]);
137
+ };
138
+
139
+ // are there files to upload?
140
+ var files = $('input:file', this).fieldValue();
141
+ var found = false;
142
+ for (var j=0; j < files.length; j++)
143
+ if (files[j])
144
+ found = true;
145
+
146
+ var multipart = false;
147
+ // var mp = 'multipart/form-data';
148
+ // multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
149
+
150
+ // options.iframe allows user to force iframe mode
151
+ // 06-NOV-09: now defaulting to iframe mode if file input is detected
152
+ if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {
153
+ // hack to fix Safari hang (thanks to Tim Molendijk for this)
154
+ // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
155
+ if (options.closeKeepAlive)
156
+ $.get(options.closeKeepAlive, fileUpload);
157
+ else
158
+ fileUpload();
159
+ }
151
160
  else
152
- $.ajax(options);
153
-
154
- // fire 'notify' event
155
- this.trigger('form-submit-notify', [this, options]);
156
- return this;
157
-
158
-
159
- // private function for handling file uploads (hat tip to YAHOO!)
160
- function fileUpload() {
161
- var form = $form[0];
162
-
163
- if ($(':input[name=submit]', form).length) {
164
- alert('Error: Form elements must not be named "submit".');
165
- return;
166
- }
167
-
168
- var opts = $.extend({}, $.ajaxSettings, options);
169
- var s = jQuery.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
170
-
171
- var id = 'jqFormIO' + (new Date().getTime());
172
- var $io = $('<iframe id="' + id + '" name="' + id + '" src="about:blank" />');
173
- var io = $io[0];
174
-
175
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
176
-
177
- var xhr = { // mock object
178
- aborted: 0,
179
- responseText: null,
180
- responseXML: null,
181
- status: 0,
182
- statusText: 'n/a',
183
- getAllResponseHeaders: function() {},
184
- getResponseHeader: function() {},
185
- setRequestHeader: function() {},
186
- abort: function() {
187
- this.aborted = 1;
188
- $io.attr('src','about:blank'); // abort op in progress
189
- }
190
- };
191
-
192
- var g = opts.global;
193
- // trigger ajax global events so that activity/block indicators work like normal
194
- if (g && ! $.active++) $.event.trigger("ajaxStart");
195
- if (g) $.event.trigger("ajaxSend", [xhr, opts]);
161
+ $.ajax(options);
162
+
163
+ // fire 'notify' event
164
+ this.trigger('form-submit-notify', [this, options]);
165
+ return this;
166
+
167
+
168
+ // private function for handling file uploads (hat tip to YAHOO!)
169
+ function fileUpload() {
170
+ var form = $form[0];
171
+
172
+ if ($(':input[name=submit]', form).length) {
173
+ alert('Error: Form elements must not be named "submit".');
174
+ return;
175
+ }
176
+
177
+ var opts = $.extend({}, $.ajaxSettings, options);
178
+ var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);
179
+
180
+ var id = 'jqFormIO' + (new Date().getTime());
181
+ var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" onload="(jQuery(this).data(\'form-plugin-onload\'))()" />');
182
+ var io = $io[0];
183
+
184
+ $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
185
+
186
+ var xhr = { // mock object
187
+ aborted: 0,
188
+ responseText: null,
189
+ responseXML: null,
190
+ status: 0,
191
+ statusText: 'n/a',
192
+ getAllResponseHeaders: function() {},
193
+ getResponseHeader: function() {},
194
+ setRequestHeader: function() {},
195
+ abort: function() {
196
+ this.aborted = 1;
197
+ $io.attr('src', opts.iframeSrc); // abort op in progress
198
+ }
199
+ };
200
+
201
+ var g = opts.global;
202
+ // trigger ajax global events so that activity/block indicators work like normal
203
+ if (g && ! $.active++) $.event.trigger("ajaxStart");
204
+ if (g) $.event.trigger("ajaxSend", [xhr, opts]);
196
205
 
197
206
  if (s.beforeSend && s.beforeSend(xhr, s) === false) {
198
- s.global && jQuery.active--;
207
+ s.global && $.active--;
208
+ return;
209
+ }
210
+ if (xhr.aborted)
199
211
  return;
200
- }
201
- if (xhr.aborted)
202
- return;
203
-
204
- var cbInvoked = 0;
205
- var timedOut = 0;
206
-
207
- // add submitting element to data if we know it
208
- var sub = form.clk;
209
- if (sub) {
210
- var n = sub.name;
211
- if (n && !sub.disabled) {
212
- options.extraData = options.extraData || {};
213
- options.extraData[n] = sub.value;
214
- if (sub.type == "image") {
215
- options.extraData[name+'.x'] = form.clk_x;
216
- options.extraData[name+'.y'] = form.clk_y;
217
- }
218
- }
219
- }
220
-
221
- // take a breath so that pending repaints get some cpu time before the upload starts
222
- setTimeout(function() {
223
- // make sure form attrs are set
224
- var t = $form.attr('target'), a = $form.attr('action');
212
+
213
+ var cbInvoked = false;
214
+ var timedOut = 0;
215
+
216
+ // add submitting element to data if we know it
217
+ var sub = form.clk;
218
+ if (sub) {
219
+ var n = sub.name;
220
+ if (n && !sub.disabled) {
221
+ opts.extraData = opts.extraData || {};
222
+ opts.extraData[n] = sub.value;
223
+ if (sub.type == "image") {
224
+ opts.extraData[n+'.x'] = form.clk_x;
225
+ opts.extraData[n+'.y'] = form.clk_y;
226
+ }
227
+ }
228
+ }
229
+
230
+ // take a breath so that pending repaints get some cpu time before the upload starts
231
+ function doSubmit() {
232
+ // make sure form attrs are set
233
+ var t = $form.attr('target'), a = $form.attr('action');
225
234
 
226
235
  // update form attrs in IE friendly way
227
236
  form.setAttribute('target',id);
@@ -230,112 +239,134 @@ $.fn.ajaxSubmit = function(options) {
230
239
  if (form.getAttribute('action') != opts.url)
231
240
  form.setAttribute('action', opts.url);
232
241
 
233
- // ie borks in some cases when setting encoding
234
- if (! options.skipEncodingOverride) {
235
- $form.attr({
236
- encoding: 'multipart/form-data',
237
- enctype: 'multipart/form-data'
238
- });
239
- }
240
-
241
- // support timout
242
- if (opts.timeout)
243
- setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
244
-
245
- // add "extra" data to form if provided in options
246
- var extraInputs = [];
247
- try {
248
- if (options.extraData)
249
- for (var n in options.extraData)
250
- extraInputs.push(
251
- $('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
252
- .appendTo(form)[0]);
253
-
254
- // add iframe to doc and submit the form
255
- $io.appendTo('body');
256
- io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
257
- form.submit();
258
- }
259
- finally {
260
- // reset attrs and remove "extra" input elements
242
+ // ie borks in some cases when setting encoding
243
+ if (! opts.skipEncodingOverride) {
244
+ $form.attr({
245
+ encoding: 'multipart/form-data',
246
+ enctype: 'multipart/form-data'
247
+ });
248
+ }
249
+
250
+ // support timout
251
+ if (opts.timeout)
252
+ setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
253
+
254
+ // add "extra" data to form if provided in options
255
+ var extraInputs = [];
256
+ try {
257
+ if (opts.extraData)
258
+ for (var n in opts.extraData)
259
+ extraInputs.push(
260
+ $('<input type="hidden" name="'+n+'" value="'+opts.extraData[n]+'" />')
261
+ .appendTo(form)[0]);
262
+
263
+ // add iframe to doc and submit the form
264
+ $io.appendTo('body');
265
+ $io.data('form-plugin-onload', cb);
266
+ form.submit();
267
+ }
268
+ finally {
269
+ // reset attrs and remove "extra" input elements
261
270
  form.setAttribute('action',a);
262
- t ? form.setAttribute('target', t) : $form.removeAttr('target');
263
- $(extraInputs).remove();
264
- }
265
- }, 10);
266
-
267
- var nullCheckFlag = 0;
268
-
269
- function cb() {
270
- if (cbInvoked++) return;
271
-
272
- io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
273
-
274
- var ok = true;
275
- try {
276
- if (timedOut) throw 'timeout';
277
- // extract the server response from the iframe
278
- var data, doc;
279
-
280
- doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
281
-
282
- if ((doc.body == null || doc.body.innerHTML == '') && !nullCheckFlag) {
283
- // in some browsers (cough, Opera 9.2.x) the iframe DOM is not always traversable when
284
- // the onload callback fires, so we give them a 2nd chance
285
- nullCheckFlag = 1;
286
- cbInvoked--;
287
- setTimeout(cb, 100);
288
- return;
289
- }
290
-
291
- xhr.responseText = doc.body ? doc.body.innerHTML : null;
292
- xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
293
- xhr.getResponseHeader = function(header){
294
- var headers = {'content-type': opts.dataType};
295
- return headers[header];
296
- };
297
-
298
- if (opts.dataType == 'json' || opts.dataType == 'script') {
299
- var ta = doc.getElementsByTagName('textarea')[0];
300
- xhr.responseText = ta ? ta.value : xhr.responseText;
301
- }
302
- else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
303
- xhr.responseXML = toXml(xhr.responseText);
304
- }
305
- data = $.httpData(xhr, opts.dataType);
306
- }
307
- catch(e){
308
- ok = false;
309
- $.handleError(opts, xhr, 'error', e);
310
- }
311
-
312
- // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
313
- if (ok) {
314
- opts.success(data, 'success');
315
- if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
316
- }
317
- if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
318
- if (g && ! --$.active) $.event.trigger("ajaxStop");
319
- if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
320
-
321
- // clean up
322
- setTimeout(function() {
323
- $io.remove();
324
- xhr.responseXML = null;
325
- }, 100);
326
- };
327
-
328
- function toXml(s, doc) {
329
- if (window.ActiveXObject) {
330
- doc = new ActiveXObject('Microsoft.XMLDOM');
331
- doc.async = 'false';
332
- doc.loadXML(s);
333
- }
334
- else
335
- doc = (new DOMParser()).parseFromString(s, 'text/xml');
336
- return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
337
- };
338
- };
271
+ t ? form.setAttribute('target', t) : $form.removeAttr('target');
272
+ $(extraInputs).remove();
273
+ }
274
+ };
275
+
276
+ if (opts.forceSync)
277
+ doSubmit();
278
+ else
279
+ setTimeout(doSubmit, 10); // this lets dom updates render
280
+
281
+ var domCheckCount = 100;
282
+
283
+ function cb() {
284
+ if (cbInvoked)
285
+ return;
286
+
287
+ var ok = true;
288
+ try {
289
+ if (timedOut) throw 'timeout';
290
+ // extract the server response from the iframe
291
+ var data, doc;
292
+
293
+ doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
294
+
295
+ var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
296
+ log('isXml='+isXml);
297
+ if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {
298
+ if (--domCheckCount) {
299
+ // in some browsers (Opera) the iframe DOM is not always traversable when
300
+ // the onload callback fires, so we loop a bit to accommodate
301
+ log('requeing onLoad callback, DOM not available');
302
+ setTimeout(cb, 250);
303
+ return;
304
+ }
305
+ log('Could not access iframe DOM after 100 tries.');
306
+ return;
307
+ }
308
+
309
+ log('response detected');
310
+ cbInvoked = true;
311
+ xhr.responseText = doc.body ? doc.body.innerHTML : null;
312
+ xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
313
+ xhr.getResponseHeader = function(header){
314
+ var headers = {'content-type': opts.dataType};
315
+ return headers[header];
316
+ };
317
+
318
+ if (opts.dataType == 'json' || opts.dataType == 'script') {
319
+ // see if user embedded response in textarea
320
+ var ta = doc.getElementsByTagName('textarea')[0];
321
+ if (ta)
322
+ xhr.responseText = ta.value;
323
+ else {
324
+ // account for browsers injecting pre around json response
325
+ var pre = doc.getElementsByTagName('pre')[0];
326
+ if (pre)
327
+ xhr.responseText = pre.innerHTML;
328
+ }
329
+ }
330
+ else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
331
+ xhr.responseXML = toXml(xhr.responseText);
332
+ }
333
+ data = $.httpData(xhr, opts.dataType);
334
+ }
335
+ catch(e){
336
+ log('error caught:',e);
337
+ ok = false;
338
+ xhr.error = e;
339
+ $.handleError(opts, xhr, 'error', e);
340
+ }
341
+
342
+ // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
343
+ if (ok) {
344
+ opts.success(data, 'success');
345
+ if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
346
+ }
347
+ if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
348
+ if (g && ! --$.active) $.event.trigger("ajaxStop");
349
+ if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
350
+
351
+ // clean up
352
+ setTimeout(function() {
353
+ $io.removeData('form-plugin-onload');
354
+ $io.remove();
355
+ xhr.responseXML = null;
356
+ }, 100);
357
+ };
358
+
359
+ function toXml(s, doc) {
360
+ if (window.ActiveXObject) {
361
+ doc = new ActiveXObject('Microsoft.XMLDOM');
362
+ doc.async = 'false';
363
+ doc.loadXML(s);
364
+ }
365
+ else
366
+ doc = (new DOMParser()).parseFromString(s, 'text/xml');
367
+ return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
368
+ };
369
+ };
339
370
  };
340
371
 
341
372
  /**
@@ -344,9 +375,9 @@ $.fn.ajaxSubmit = function(options) {
344
375
  * The advantages of using this method instead of ajaxSubmit() are:
345
376
  *
346
377
  * 1: This method will include coordinates for <input type="image" /> elements (if the element
347
- * is used to submit the form).
378
+ * is used to submit the form).
348
379
  * 2. This method will include the submit element's name/value data (for the element that was
349
- * used to submit the form).
380
+ * used to submit the form).
350
381
  * 3. This method binds the submit() method to the form for you.
351
382
  *
352
383
  * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
@@ -354,40 +385,42 @@ $.fn.ajaxSubmit = function(options) {
354
385
  * the form itself.
355
386
  */
356
387
  $.fn.ajaxForm = function(options) {
357
- return this.ajaxFormUnbind().bind('submit.form-plugin',function() {
358
- $(this).ajaxSubmit(options);
359
- return false;
360
- }).each(function() {
361
- // store options in hash
362
- $(":submit,input:image", this).bind('click.form-plugin',function(e) {
363
- var form = this.form;
364
- form.clk = this;
365
- if (this.type == 'image') {
366
- if (e.offsetX != undefined) {
367
- form.clk_x = e.offsetX;
368
- form.clk_y = e.offsetY;
369
- } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
370
- var offset = $(this).offset();
371
- form.clk_x = e.pageX - offset.left;
372
- form.clk_y = e.pageY - offset.top;
373
- } else {
374
- form.clk_x = e.pageX - this.offsetLeft;
375
- form.clk_y = e.pageY - this.offsetTop;
376
- }
377
- }
378
- // clear form vars
379
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 10);
380
- });
381
- });
388
+ return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
389
+ e.preventDefault();
390
+ $(this).ajaxSubmit(options);
391
+ }).bind('click.form-plugin', function(e) {
392
+ var target = e.target;
393
+ var $el = $(target);
394
+ if (!($el.is(":submit,input:image"))) {
395
+ // is this a child element of the submit el? (ex: a span within a button)
396
+ var t = $el.closest(':submit');
397
+ if (t.length == 0)
398
+ return;
399
+ target = t[0];
400
+ }
401
+ var form = this;
402
+ form.clk = target;
403
+ if (target.type == 'image') {
404
+ if (e.offsetX != undefined) {
405
+ form.clk_x = e.offsetX;
406
+ form.clk_y = e.offsetY;
407
+ } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
408
+ var offset = $el.offset();
409
+ form.clk_x = e.pageX - offset.left;
410
+ form.clk_y = e.pageY - offset.top;
411
+ } else {
412
+ form.clk_x = e.pageX - target.offsetLeft;
413
+ form.clk_y = e.pageY - target.offsetTop;
414
+ }
415
+ }
416
+ // clear form vars
417
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
418
+ });
382
419
  };
383
420
 
384
421
  // ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
385
422
  $.fn.ajaxFormUnbind = function() {
386
- this.unbind('submit.form-plugin');
387
- return this.each(function() {
388
- $(":submit,input:image", this).unbind('click.form-plugin');
389
- });
390
-
423
+ return this.unbind('submit.form-plugin click.form-plugin');
391
424
  };
392
425
 
393
426
  /**
@@ -402,44 +435,44 @@ $.fn.ajaxFormUnbind = function() {
402
435
  * ajaxSubmit() and ajaxForm() methods.
403
436
  */
404
437
  $.fn.formToArray = function(semantic) {
405
- var a = [];
406
- if (this.length == 0) return a;
407
-
408
- var form = this[0];
409
- var els = semantic ? form.getElementsByTagName('*') : form.elements;
410
- if (!els) return a;
411
- for(var i=0, max=els.length; i < max; i++) {
412
- var el = els[i];
413
- var n = el.name;
414
- if (!n) continue;
415
-
416
- if (semantic && form.clk && el.type == "image") {
417
- // handle image inputs on the fly when semantic == true
418
- if(!el.disabled && form.clk == el)
419
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
420
- continue;
421
- }
422
-
423
- var v = $.fieldValue(el, true);
424
- if (v && v.constructor == Array) {
425
- for(var j=0, jmax=v.length; j < jmax; j++)
426
- a.push({name: n, value: v[j]});
427
- }
428
- else if (v !== null && typeof v != 'undefined')
429
- a.push({name: n, value: v});
430
- }
431
-
432
- if (!semantic && form.clk) {
433
- // input type=='image' are not found in elements array! handle them here
434
- var inputs = form.getElementsByTagName("input");
435
- for(var i=0, max=inputs.length; i < max; i++) {
436
- var input = inputs[i];
437
- var n = input.name;
438
- if(n && !input.disabled && input.type == "image" && form.clk == input)
439
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
440
- }
441
- }
442
- return a;
438
+ var a = [];
439
+ if (this.length == 0) return a;
440
+
441
+ var form = this[0];
442
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
443
+ if (!els) return a;
444
+ for(var i=0, max=els.length; i < max; i++) {
445
+ var el = els[i];
446
+ var n = el.name;
447
+ if (!n) continue;
448
+
449
+ if (semantic && form.clk && el.type == "image") {
450
+ // handle image inputs on the fly when semantic == true
451
+ if(!el.disabled && form.clk == el) {
452
+ a.push({name: n, value: $(el).val()});
453
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
454
+ }
455
+ continue;
456
+ }
457
+
458
+ var v = $.fieldValue(el, true);
459
+ if (v && v.constructor == Array) {
460
+ for(var j=0, jmax=v.length; j < jmax; j++)
461
+ a.push({name: n, value: v[j]});
462
+ }
463
+ else if (v !== null && typeof v != 'undefined')
464
+ a.push({name: n, value: v});
465
+ }
466
+
467
+ if (!semantic && form.clk) {
468
+ // input type=='image' are not found in elements array! handle it here
469
+ var $input = $(form.clk), input = $input[0], n = input.name;
470
+ if (n && !input.disabled && input.type == 'image') {
471
+ a.push({name: n, value: $input.val()});
472
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
473
+ }
474
+ }
475
+ return a;
443
476
  };
444
477
 
445
478
  /**
@@ -447,8 +480,8 @@ $.fn.formToArray = function(semantic) {
447
480
  * in the format: name1=value1&amp;name2=value2
448
481
  */
449
482
  $.fn.formSerialize = function(semantic) {
450
- //hand off to jQuery.param for proper encoding
451
- return $.param(this.formToArray(semantic));
483
+ //hand off to jQuery.param for proper encoding
484
+ return $.param(this.formToArray(semantic));
452
485
  };
453
486
 
454
487
  /**
@@ -456,32 +489,32 @@ $.fn.formSerialize = function(semantic) {
456
489
  * This method will return a string in the format: name1=value1&amp;name2=value2
457
490
  */
458
491
  $.fn.fieldSerialize = function(successful) {
459
- var a = [];
460
- this.each(function() {
461
- var n = this.name;
462
- if (!n) return;
463
- var v = $.fieldValue(this, successful);
464
- if (v && v.constructor == Array) {
465
- for (var i=0,max=v.length; i < max; i++)
466
- a.push({name: n, value: v[i]});
467
- }
468
- else if (v !== null && typeof v != 'undefined')
469
- a.push({name: this.name, value: v});
470
- });
471
- //hand off to jQuery.param for proper encoding
472
- return $.param(a);
492
+ var a = [];
493
+ this.each(function() {
494
+ var n = this.name;
495
+ if (!n) return;
496
+ var v = $.fieldValue(this, successful);
497
+ if (v && v.constructor == Array) {
498
+ for (var i=0,max=v.length; i < max; i++)
499
+ a.push({name: n, value: v[i]});
500
+ }
501
+ else if (v !== null && typeof v != 'undefined')
502
+ a.push({name: this.name, value: v});
503
+ });
504
+ //hand off to jQuery.param for proper encoding
505
+ return $.param(a);
473
506
  };
474
507
 
475
508
  /**
476
509
  * Returns the value(s) of the element in the matched set. For example, consider the following form:
477
510
  *
478
511
  * <form><fieldset>
479
- * <input name="A" type="text" />
480
- * <input name="A" type="text" />
481
- * <input name="B" type="checkbox" value="B1" />
482
- * <input name="B" type="checkbox" value="B2"/>
483
- * <input name="C" type="radio" value="C1" />
484
- * <input name="C" type="radio" value="C2" />
512
+ * <input name="A" type="text" />
513
+ * <input name="A" type="text" />
514
+ * <input name="B" type="checkbox" value="B1" />
515
+ * <input name="B" type="checkbox" value="B2"/>
516
+ * <input name="C" type="radio" value="C1" />
517
+ * <input name="C" type="radio" value="C2" />
485
518
  * </fieldset></form>
486
519
  *
487
520
  * var v = $(':text').fieldValue();
@@ -508,51 +541,51 @@ $.fn.fieldSerialize = function(successful) {
508
541
  * for each element is returned.
509
542
  *
510
543
  * Note: This method *always* returns an array. If no valid value can be determined the
511
- * array will be empty, otherwise it will contain one or more values.
544
+ * array will be empty, otherwise it will contain one or more values.
512
545
  */
513
546
  $.fn.fieldValue = function(successful) {
514
- for (var val=[], i=0, max=this.length; i < max; i++) {
515
- var el = this[i];
516
- var v = $.fieldValue(el, successful);
517
- if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
518
- continue;
519
- v.constructor == Array ? $.merge(val, v) : val.push(v);
520
- }
521
- return val;
547
+ for (var val=[], i=0, max=this.length; i < max; i++) {
548
+ var el = this[i];
549
+ var v = $.fieldValue(el, successful);
550
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
551
+ continue;
552
+ v.constructor == Array ? $.merge(val, v) : val.push(v);
553
+ }
554
+ return val;
522
555
  };
523
556
 
524
557
  /**
525
558
  * Returns the value of the field element.
526
559
  */
527
560
  $.fieldValue = function(el, successful) {
528
- var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
529
- if (typeof successful == 'undefined') successful = true;
530
-
531
- if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
532
- (t == 'checkbox' || t == 'radio') && !el.checked ||
533
- (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
534
- tag == 'select' && el.selectedIndex == -1))
535
- return null;
536
-
537
- if (tag == 'select') {
538
- var index = el.selectedIndex;
539
- if (index < 0) return null;
540
- var a = [], ops = el.options;
541
- var one = (t == 'select-one');
542
- var max = (one ? index+1 : ops.length);
543
- for(var i=(one ? index : 0); i < max; i++) {
544
- var op = ops[i];
545
- if (op.selected) {
561
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
562
+ if (typeof successful == 'undefined') successful = true;
563
+
564
+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
565
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
566
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
567
+ tag == 'select' && el.selectedIndex == -1))
568
+ return null;
569
+
570
+ if (tag == 'select') {
571
+ var index = el.selectedIndex;
572
+ if (index < 0) return null;
573
+ var a = [], ops = el.options;
574
+ var one = (t == 'select-one');
575
+ var max = (one ? index+1 : ops.length);
576
+ for(var i=(one ? index : 0); i < max; i++) {
577
+ var op = ops[i];
578
+ if (op.selected) {
546
579
  var v = op.value;
547
580
  if (!v) // extra pain for IE...
548
- v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
549
- if (one) return v;
550
- a.push(v);
551
- }
552
- }
553
- return a;
554
- }
555
- return el.value;
581
+ v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
582
+ if (one) return v;
583
+ a.push(v);
584
+ }
585
+ }
586
+ return a;
587
+ }
588
+ return el.value;
556
589
  };
557
590
 
558
591
  /**
@@ -564,46 +597,46 @@ $.fieldValue = function(el, successful) {
564
597
  * - button elements will *not* be effected
565
598
  */
566
599
  $.fn.clearForm = function() {
567
- return this.each(function() {
568
- $('input,select,textarea', this).clearFields();
569
- });
600
+ return this.each(function() {
601
+ $('input,select,textarea', this).clearFields();
602
+ });
570
603
  };
571
604
 
572
605
  /**
573
606
  * Clears the selected form elements.
574
607
  */
575
608
  $.fn.clearFields = $.fn.clearInputs = function() {
576
- return this.each(function() {
577
- var t = this.type, tag = this.tagName.toLowerCase();
578
- if (t == 'text' || t == 'password' || tag == 'textarea')
579
- this.value = '';
580
- else if (t == 'checkbox' || t == 'radio')
581
- this.checked = false;
582
- else if (tag == 'select')
583
- this.selectedIndex = -1;
584
- });
609
+ return this.each(function() {
610
+ var t = this.type, tag = this.tagName.toLowerCase();
611
+ if (t == 'text' || t == 'password' || tag == 'textarea')
612
+ this.value = '';
613
+ else if (t == 'checkbox' || t == 'radio')
614
+ this.checked = false;
615
+ else if (tag == 'select')
616
+ this.selectedIndex = -1;
617
+ });
585
618
  };
586
619
 
587
620
  /**
588
621
  * Resets the form data. Causes all form elements to be reset to their original value.
589
622
  */
590
623
  $.fn.resetForm = function() {
591
- return this.each(function() {
592
- // guard against an input with the name of 'reset'
593
- // note that IE reports the reset function as an 'object'
594
- if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
595
- this.reset();
596
- });
624
+ return this.each(function() {
625
+ // guard against an input with the name of 'reset'
626
+ // note that IE reports the reset function as an 'object'
627
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
628
+ this.reset();
629
+ });
597
630
  };
598
631
 
599
632
  /**
600
633
  * Enables or disables any matching elements.
601
634
  */
602
635
  $.fn.enable = function(b) {
603
- if (b == undefined) b = true;
604
- return this.each(function() {
605
- this.disabled = !b;
606
- });
636
+ if (b == undefined) b = true;
637
+ return this.each(function() {
638
+ this.disabled = !b;
639
+ });
607
640
  };
608
641
 
609
642
  /**
@@ -611,27 +644,32 @@ $.fn.enable = function(b) {
611
644
  * selects/deselects and matching option elements.
612
645
  */
613
646
  $.fn.selected = function(select) {
614
- if (select == undefined) select = true;
615
- return this.each(function() {
616
- var t = this.type;
617
- if (t == 'checkbox' || t == 'radio')
618
- this.checked = select;
619
- else if (this.tagName.toLowerCase() == 'option') {
620
- var $sel = $(this).parent('select');
621
- if (select && $sel[0] && $sel[0].type == 'select-one') {
622
- // deselect all other options
623
- $sel.find('option').selected(false);
624
- }
625
- this.selected = select;
626
- }
627
- });
647
+ if (select == undefined) select = true;
648
+ return this.each(function() {
649
+ var t = this.type;
650
+ if (t == 'checkbox' || t == 'radio')
651
+ this.checked = select;
652
+ else if (this.tagName.toLowerCase() == 'option') {
653
+ var $sel = $(this).parent('select');
654
+ if (select && $sel[0] && $sel[0].type == 'select-one') {
655
+ // deselect all other options
656
+ $sel.find('option').selected(false);
657
+ }
658
+ this.selected = select;
659
+ }
660
+ });
628
661
  };
629
662
 
630
663
  // helper fn for console logging
631
664
  // set $.fn.ajaxSubmit.debug to true to enable debug logging
632
665
  function log() {
633
- if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
634
- window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
666
+ if ($.fn.ajaxSubmit.debug) {
667
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
668
+ if (window.console && window.console.log)
669
+ window.console.log(msg);
670
+ else if (window.opera && window.opera.postError)
671
+ window.opera.postError(msg);
672
+ }
635
673
  };
636
674
 
637
675
  })(jQuery);