2013-02-03 18:48:30 -05:00
/ * !
2008-11-15 05:27:46 +00:00
* jQuery Form Plugin
2013-08-28 18:18:05 +02:00
* version : 3.40 . 0 - 2013.08 . 13
2013-02-03 18:48:30 -05:00
* @ requires jQuery v1 . 5 or later
2013-06-16 09:38:00 +02:00
* Copyright ( c ) 2013 M . Alsup
2008-11-15 05:27:46 +00:00
* Examples and documentation at : http : //malsup.com/jquery/form/
2013-02-03 18:48:30 -05:00
* Project repository : https : //github.com/malsup/form
2013-06-16 09:38:00 +02:00
* Dual licensed under the MIT and GPL licenses .
* https : //github.com/malsup/form#copyright-and-license
2008-11-15 05:27:46 +00:00
* /
2013-08-28 18:18:05 +02:00
( function ( b ) { function x ( a ) { var g = a . data ; a . isDefaultPrevented ( ) || ( a . preventDefault ( ) , b ( this ) . ajaxSubmit ( g ) ) } function u ( a ) { var g = a . target , f = b ( g ) ; if ( ! f . is ( "[type=submit],[type=image]" ) ) { g = f . closest ( "[type=submit]" ) ; if ( 0 === g . length ) return ; g = g [ 0 ] } var c = this ; c . clk = g ; "image" == g . type && ( void 0 !== a . offsetX ? ( c . clk _x = a . offsetX , c . clk _y = a . offsetY ) : "function" == typeof b . fn . offset ? ( f = f . offset ( ) , c . clk _x = a . pageX - f . left , c . clk _y = a . pageY - f . top ) : ( c . clk _x = a . pageX - g . offsetLeft , c . clk _y = a . pageY - g . offsetTop ) ) ; setTimeout ( function ( ) { c . clk =
c . clk _x = c . clk _y = null } , 100 ) } function q ( ) { if ( b . fn . ajaxSubmit . debug ) { var a = "[jquery.form] " + Array . prototype . join . call ( arguments , "" ) ; window . console && window . console . log ? window . console . log ( a ) : window . opera && window . opera . postError && window . opera . postError ( a ) } } var z , B ; z = void 0 !== b ( "<input type='file'/>" ) . get ( 0 ) . files ; B = void 0 !== window . FormData ; var D = ! ! b . fn . prop ; b . fn . attr2 = function ( ) { if ( ! D ) return this . attr . apply ( this , arguments ) ; var a = this . prop . apply ( this , arguments ) ; return a && a . jquery || "string" === typeof a ? a :
this . attr . apply ( this , arguments ) } ; b . fn . ajaxSubmit = function ( a ) { function g ( c ) { c = b . param ( c , a . traditional ) . split ( "&" ) ; var g = c . length , d = [ ] , f , m ; for ( f = 0 ; f < g ; f ++ ) c [ f ] = c [ f ] . replace ( /\+/g , " " ) , m = c [ f ] . split ( "=" ) , d . push ( [ decodeURIComponent ( m [ 0 ] ) , decodeURIComponent ( m [ 1 ] ) ] ) ; return d } function f ( c ) { for ( var f = new FormData , d = 0 ; d < c . length ; d ++ ) f . append ( c [ d ] . name , c [ d ] . value ) ; if ( a . extraData ) for ( c = g ( a . extraData ) , d = 0 ; d < c . length ; d ++ ) c [ d ] && f . append ( c [ d ] [ 0 ] , c [ d ] [ 1 ] ) ; a . data = null ; d = b . extend ( ! 0 , { } , b . ajaxSettings , a , { contentType : ! 1 ,
processData : ! 1 , cache : ! 1 , type : m || "POST" } ) ; a . uploadProgress && ( d . xhr = function ( ) { var c = b . ajaxSettings . xhr ( ) ; c . upload && c . upload . addEventListener ( "progress" , function ( b ) { var e = 0 , c = b . loaded || b . position , d = b . total ; b . lengthComputable && ( e = Math . ceil ( 100 * ( c / d ) ) ) ; a . uploadProgress ( b , c , d , e ) } , ! 1 ) ; return c } ) ; d . data = null ; var k = d . beforeSend ; d . beforeSend = function ( a , b ) { b . data = f ; k && k . call ( this , a , b ) } ; return b . ajax ( d ) } function c ( c ) { function d ( a ) { var b = null ; try { a . contentWindow && ( b = a . contentWindow . document ) } catch ( c ) { q ( "cannot get iframe.contentWindow document: " +
c ) } if ( b ) return b ; try { b = a . contentDocument ? a . contentDocument : a . document } catch ( e ) { q ( "cannot get iframe.contentDocument: " + e ) , b = a . document } return b } function f ( ) { function a ( ) { try { var b = d ( v ) . readyState ; q ( "state = " + b ) ; b && "uninitialized" == b . toLowerCase ( ) && setTimeout ( a , 50 ) } catch ( c ) { q ( "Server abort: " , c , " (" , c . name , ")" ) , g ( z ) , u && clearTimeout ( u ) , u = void 0 } } var c = p . attr2 ( "target" ) , h = p . attr2 ( "action" ) ; k . setAttribute ( "target" , s ) ; m || k . setAttribute ( "method" , "POST" ) ; h != e . url && k . setAttribute ( "action" , e . url ) ; e . skipEncodingOverride ||
m && ! /post/i . test ( m ) || p . attr ( { encoding : "multipart/form-data" , enctype : "multipart/form-data" } ) ; e . timeout && ( u = setTimeout ( function ( ) { x = ! 0 ; g ( A ) } , e . timeout ) ) ; var l = [ ] ; try { if ( e . extraData ) for ( var n in e . extraData ) e . extraData . hasOwnProperty ( n ) && ( b . isPlainObject ( e . extraData [ n ] ) && e . extraData [ n ] . hasOwnProperty ( "name" ) && e . extraData [ n ] . hasOwnProperty ( "value" ) ? l . push ( b ( '<input type="hidden" name="' + e . extraData [ n ] . name + '">' ) . val ( e . extraData [ n ] . value ) . appendTo ( k ) [ 0 ] ) : l . push ( b ( '<input type="hidden" name="' + n + '">' ) . val ( e . extraData [ n ] ) . appendTo ( k ) [ 0 ] ) ) ;
e . iframeTarget || ( y . appendTo ( "body" ) , v . attachEvent ? v . attachEvent ( "onload" , g ) : v . addEventListener ( "load" , g , ! 1 ) ) ; setTimeout ( a , 15 ) ; try { k . submit ( ) } catch ( r ) { document . createElement ( "form" ) . submit . apply ( k ) } } finally { k . setAttribute ( "action" , h ) , c ? k . setAttribute ( "target" , c ) : p . removeAttr ( "target" ) , b ( l ) . remove ( ) } } function g ( a ) { if ( ! h . aborted && ! F ) if ( r = d ( v ) , r || ( q ( "cannot access response document" ) , a = z ) , a === A && h ) h . abort ( "timeout" ) , w . reject ( h , "timeout" ) ; else if ( a == z && h ) h . abort ( "server abort" ) , w . reject ( h , "error" , "server abort" ) ;
else if ( r && r . location . href != e . iframeSrc || x ) { v . detachEvent ? v . detachEvent ( "onload" , g ) : v . removeEventListener ( "load" , g , ! 1 ) ; a = "success" ; var c ; try { if ( x ) throw "timeout" ; var f = "xml" == e . dataType || r . XMLDocument || b . isXMLDoc ( r ) ; q ( "isXml=" + f ) ; if ( ! f && ( window . opera && ( null === r . body || ! r . body . innerHTML ) ) && -- C ) { q ( "requeing onLoad callback, DOM not available" ) ; setTimeout ( g , 250 ) ; return } var k = r . body ? r . body : r . documentElement ; h . responseText = k ? k . innerHTML : null ; h . responseXML = r . XMLDocument ? r . XMLDocument : r ; f && ( e . dataType = "xml" ) ;
h . getResponseHeader = function ( a ) { return { "content-type" : e . dataType } [ a . toLowerCase ( ) ] } ; k && ( h . status = Number ( k . getAttribute ( "status" ) ) || h . status , h . statusText = k . getAttribute ( "statusText" ) || h . statusText ) ; var l = ( e . dataType || "" ) . toLowerCase ( ) , m = /(json|script|text)/ . test ( l ) ; if ( m || e . textarea ) { var n = r . getElementsByTagName ( "textarea" ) [ 0 ] ; if ( n ) h . responseText = n . value , h . status = Number ( n . getAttribute ( "status" ) ) || h . status , h . statusText = n . getAttribute ( "statusText" ) || h . statusText ; else if ( m ) { var p = r . getElementsByTagName ( "pre" ) [ 0 ] ,
s = r . getElementsByTagName ( "body" ) [ 0 ] ; p ? h . responseText = p . textContent ? p . textContent : p . innerText : s && ( h . responseText = s . textContent ? s . textContent : s . innerText ) } } else "xml" == l && ( ! h . responseXML && h . responseText ) && ( h . responseXML = H ( h . responseText ) ) ; try { B = I ( h , l , e ) } catch ( G ) { a = "parsererror" , h . error = c = G || a } } catch ( E ) { q ( "error caught: " , E ) , a = "error" , h . error = c = E || a } h . aborted && ( q ( "upload aborted" ) , a = null ) ; h . status && ( a = 200 <= h . status && 300 > h . status || 304 === h . status ? "success" : "error" ) ; "success" === a ? ( e . success && e . success . call ( e . context ,
B , "success" , h ) , w . resolve ( h . responseText , "success" , h ) , t && b . event . trigger ( "ajaxSuccess" , [ h , e ] ) ) : a && ( void 0 === c && ( c = h . statusText ) , e . error && e . error . call ( e . context , h , a , c ) , w . reject ( h , "error" , c ) , t && b . event . trigger ( "ajaxError" , [ h , e , c ] ) ) ; t && b . event . trigger ( "ajaxComplete" , [ h , e ] ) ; t && ! -- b . active && b . event . trigger ( "ajaxStop" ) ; e . complete && e . complete . call ( e . context , h , a ) ; F = ! 0 ; e . timeout && clearTimeout ( u ) ; setTimeout ( function ( ) { e . iframeTarget || y . remove ( ) ; h . responseXML = null } , 100 ) } } var k = p [ 0 ] , l , e , t , s , y , v , h , x , u , w = b . Deferred ( ) ;
w . abort = function ( a ) { h . abort ( a ) } ; if ( c ) for ( l = 0 ; l < n . length ; l ++ ) c = b ( n [ l ] ) , D ? c . prop ( "disabled" , ! 1 ) : c . removeAttr ( "disabled" ) ; e = b . extend ( ! 0 , { } , b . ajaxSettings , a ) ; e . context = e . context || e ; s = "jqFormIO" + ( new Date ) . getTime ( ) ; e . iframeTarget ? ( y = b ( e . iframeTarget ) , ( l = y . attr2 ( "name" ) ) ? s = l : y . attr2 ( "name" , s ) ) : ( y = b ( '<iframe name="' + s + '" src="' + e . iframeSrc + '" />' ) , y . css ( { position : "absolute" , top : "-1000px" , left : "-1000px" } ) ) ; v = y [ 0 ] ; h = { aborted : 0 , responseText : null , responseXML : null , status : 0 , statusText : "n/a" , getAllResponseHeaders : function ( ) { } ,
getResponseHeader : function ( ) { } , setRequestHeader : function ( ) { } , abort : function ( a ) { var c = "timeout" === a ? "timeout" : "aborted" ; q ( "aborting upload... " + c ) ; this . aborted = 1 ; try { v . contentWindow . document . execCommand && v . contentWindow . document . execCommand ( "Stop" ) } catch ( d ) { } y . attr ( "src" , e . iframeSrc ) ; h . error = c ; e . error && e . error . call ( e . context , h , c , a ) ; t && b . event . trigger ( "ajaxError" , [ h , e , c ] ) ; e . complete && e . complete . call ( e . context , h , c ) } } ; ( t = e . global ) && 0 === b . active ++ && b . event . trigger ( "ajaxStart" ) ; t && b . event . trigger ( "ajaxSend" ,
[ h , e ] ) ; if ( e . beforeSend && ! 1 === e . beforeSend . call ( e . context , h , e ) ) return e . global && b . active -- , w . reject ( ) , w ; if ( h . aborted ) return w . reject ( ) , w ; ( c = k . clk ) && ( l = c . name ) && ! c . disabled && ( e . extraData = e . extraData || { } , e . extraData [ l ] = c . value , "image" == c . type && ( e . extraData [ l + ".x" ] = k . clk _x , e . extraData [ l + ".y" ] = k . clk _y ) ) ; var A = 1 , z = 2 ; c = b ( "meta[name=csrf-token]" ) . attr ( "content" ) ; ( l = b ( "meta[name=csrf-param]" ) . attr ( "content" ) ) && c && ( e . extraData = e . extraData || { } , e . extraData [ l ] = c ) ; e . forceSync ? f ( ) : setTimeout ( f , 10 ) ; var B , r , C = 50 ,
F , H = b . parseXML || function ( a , b ) { window . ActiveXObject ? ( b = new ActiveXObject ( "Microsoft.XMLDOM" ) , b . async = "false" , b . loadXML ( a ) ) : b = ( new DOMParser ) . parseFromString ( a , "text/xml" ) ; return b && b . documentElement && "parsererror" != b . documentElement . nodeName ? b : null } , J = b . parseJSON || function ( a ) { return window . eval ( "(" + a + ")" ) } , I = function ( a , c , e ) { var d = a . getResponseHeader ( "content-type" ) || "" , f = "xml" === c || ! c && 0 <= d . indexOf ( "xml" ) ; a = f ? a . responseXML : a . responseText ; f && "parsererror" === a . documentElement . nodeName && b . error && b . error ( "parsererror" ) ;
e && e . dataFilter && ( a = e . dataFilter ( a , c ) ) ; "string" === typeof a && ( "json" === c || ! c && 0 <= d . indexOf ( "json" ) ? a = J ( a ) : ( "script" === c || ! c && 0 <= d . indexOf ( "javascript" ) ) && b . globalEval ( a ) ) ; return a } ; return w } if ( ! this . length ) return q ( "ajaxSubmit: skipping submit process - no element selected" ) , this ; var m , d , p = this ; "function" == typeof a ? a = { success : a } : void 0 === a && ( a = { } ) ; m = a . type || this . attr2 ( "method" ) ; d = a . url || this . attr2 ( "action" ) ; ( d = ( d = "string" === typeof d ? b . trim ( d ) : "" ) || window . location . href || "" ) && ( d = ( d . match ( /^([^#]+)/ ) ||
[ ] ) [ 1 ] ) ; a = b . extend ( ! 0 , { url : d , success : b . ajaxSettings . success , type : m || b . ajaxSettings . type , iframeSrc : /^https/i . test ( window . location . href || "" ) ? "javascript:false" : "about:blank" } , a ) ; d = { } ; this . trigger ( "form-pre-serialize" , [ this , a , d ] ) ; if ( d . veto ) return q ( "ajaxSubmit: submit vetoed via form-pre-serialize trigger" ) , this ; if ( a . beforeSerialize && ! 1 === a . beforeSerialize ( this , a ) ) return q ( "ajaxSubmit: submit aborted via beforeSerialize callback" ) , this ; var l = a . traditional ; void 0 === l && ( l = b . ajaxSettings . traditional ) ; var n =
[ ] , k , t = this . formToArray ( a . semantic , n ) ; a . data && ( a . extraData = a . data , k = b . param ( a . data , l ) ) ; if ( a . beforeSubmit && ! 1 === a . beforeSubmit ( t , this , a ) ) return q ( "ajaxSubmit: submit aborted via beforeSubmit callback" ) , this ; this . trigger ( "form-submit-validate" , [ t , this , a , d ] ) ; if ( d . veto ) return q ( "ajaxSubmit: submit vetoed via form-submit-validate trigger" ) , this ; d = b . param ( t , l ) ; k && ( d = d ? d + "&" + k : k ) ; "GET" == a . type . toUpperCase ( ) ? ( a . url += ( 0 <= a . url . indexOf ( "?" ) ? "&" : "?" ) + d , a . data = null ) : a . data = d ; var s = [ ] ; a . resetForm && s . push ( function ( ) { p . resetForm ( ) } ) ;
a . clearForm && s . push ( function ( ) { p . clearForm ( a . includeHidden ) } ) ; if ( ! a . dataType && a . target ) { var x = a . success || function ( ) { } ; s . push ( function ( c ) { var d = a . replaceTarget ? "replaceWith" : "html" ; b ( a . target ) [ d ] ( c ) . each ( x , arguments ) } ) } else a . success && s . push ( a . success ) ; a . success = function ( b , c , d ) { for ( var f = a . context || this , g = 0 , k = s . length ; g < k ; g ++ ) s [ g ] . apply ( f , [ b , c , d || p , p ] ) } ; if ( a . error ) { var u = a . error ; a . error = function ( b , c , d ) { u . apply ( a . context || this , [ b , c , d , p ] ) } } if ( a . complete ) { var C = a . complete ; a . complete = function ( b , c ) { C . apply ( a . context ||
this , [ b , c , p ] ) } } k = 0 < b ( 'input[type=file]:enabled:not([value=""])' , this ) . length ; d = "multipart/form-data" == p . attr ( "enctype" ) || "multipart/form-data" == p . attr ( "encoding" ) ; l = z && B ; q ( "fileAPI :" + l ) ; var A ; ! 1 !== a . iframe && ( a . iframe || ( k || d ) && ! l ) ? a . closeKeepAlive ? b . get ( a . closeKeepAlive , function ( ) { A = c ( t ) } ) : A = c ( t ) : A = ( k || d ) && l ? f ( t ) : b . ajax ( a ) ; p . removeData ( "jqxhr" ) . data ( "jqxhr" , A ) ; for ( k = 0 ; k < n . length ; k ++ ) n [ k ] = null ; this . trigger ( "form-submit-notify" , [ this , a ] ) ; return this } ; b . fn . ajaxForm = function ( a ) { a = a || { } ; a . delegation = a . delegation &&
b . isFunction ( b . fn . on ) ; if ( ! a . delegation && 0 === this . length ) { var g = this . selector , f = this . context ; if ( ! b . isReady && g ) return q ( "DOM not ready, queuing ajaxForm" ) , b ( function ( ) { b ( g , f ) . ajaxForm ( a ) } ) , this ; q ( "terminating; zero elements found by selector" + ( b . isReady ? "" : " (DOM not ready)" ) ) ; return this } return a . delegation ? ( b ( document ) . off ( "submit.form-plugin" , this . selector , x ) . off ( "click.form-plugin" , this . selector , u ) . on ( "submit.form-plugin" , this . selector , a , x ) . on ( "click.form-plugin" , this . selector , a , u ) , this ) : this . ajaxFormUnbind ( ) . bind ( "submit.form-plugin" ,
a , x ) . bind ( "click.form-plugin" , a , u ) } ; b . fn . ajaxFormUnbind = function ( ) { return this . unbind ( "submit.form-plugin click.form-plugin" ) } ; b . fn . formToArray = function ( a , g ) { var f = [ ] ; if ( 0 === this . length ) return f ; var c = this [ 0 ] , m = a ? c . getElementsByTagName ( "*" ) : c . elements ; if ( ! m ) return f ; var d , p , l , n , k , q ; d = 0 ; for ( q = m . length ; d < q ; d ++ ) if ( k = m [ d ] , ( l = k . name ) && ! k . disabled ) if ( a && c . clk && "image" == k . type ) c . clk == k && ( f . push ( { name : l , value : b ( k ) . val ( ) , type : k . type } ) , f . push ( { name : l + ".x" , value : c . clk _x } , { name : l + ".y" , value : c . clk _y } ) ) ; else if ( ( n =
b . fieldValue ( k , ! 0 ) ) && n . constructor == Array ) for ( g && g . push ( k ) , p = 0 , k = n . length ; p < k ; p ++ ) f . push ( { name : l , value : n [ p ] } ) ; else if ( z && "file" == k . type ) if ( g && g . push ( k ) , n = k . files , n . length ) for ( p = 0 ; p < n . length ; p ++ ) f . push ( { name : l , value : n [ p ] , type : k . type } ) ; else f . push ( { name : l , value : "" , type : k . type } ) ; else null !== n && "undefined" != typeof n && ( g && g . push ( k ) , f . push ( { name : l , value : n , type : k . type , required : k . required } ) ) ; ! a && c . clk && ( m = b ( c . clk ) , d = m [ 0 ] , ( l = d . name ) && ( ! d . disabled && "image" == d . type ) && ( f . push ( { name : l , value : m . val ( ) } ) , f . push ( { name : l +
".x" , value : c . clk _x } , { name : l + ".y" , value : c . clk _y } ) ) ) ; return f } ; b . fn . formSerialize = function ( a ) { return b . param ( this . formToArray ( a ) ) } ; b . fn . fieldSerialize = function ( a ) { var g = [ ] ; this . each ( function ( ) { var f = this . name ; if ( f ) { var c = b . fieldValue ( this , a ) ; if ( c && c . constructor == Array ) for ( var m = 0 , d = c . length ; m < d ; m ++ ) g . push ( { name : f , value : c [ m ] } ) ; else null !== c && "undefined" != typeof c && g . push ( { name : this . name , value : c } ) } } ) ; return b . param ( g ) } ; b . fn . fieldValue = function ( a ) { for ( var g = [ ] , f = 0 , c = this . length ; f < c ; f ++ ) { var m = b . fieldValue ( this [ f ] ,
a ) ; null === m || ( "undefined" == typeof m || m . constructor == Array && ! m . length ) || ( m . constructor == Array ? b . merge ( g , m ) : g . push ( m ) ) } return g } ; b . fieldValue = function ( a , g ) { var f = a . name , c = a . type , m = a . tagName . toLowerCase ( ) ; void 0 === g && ( g = ! 0 ) ; if ( g && ( ! f || a . disabled || "reset" == c || "button" == c || ( "checkbox" == c || "radio" == c ) && ! a . checked || ( "submit" == c || "image" == c ) && a . form && a . form . clk != a || "select" == m && - 1 == a . selectedIndex ) ) return null ; if ( "select" == m ) { var d = a . selectedIndex ; if ( 0 > d ) return null ; for ( var f = [ ] , m = a . options , p = ( c = "select-one" ==
c ) ? d + 1 : m . length , d = c ? d : 0 ; d < p ; d ++ ) { var l = m [ d ] ; if ( l . selected ) { var n = l . value ; n || ( n = l . attributes && l . attributes . value && ! l . attributes . value . specified ? l . text : l . value ) ; if ( c ) return n ; f . push ( n ) } } return f } return b ( a ) . val ( ) } ; b . fn . clearForm = function ( a ) { return this . each ( function ( ) { b ( "input,select,textarea" , this ) . clearFields ( a ) } ) } ; b . fn . clearFields = b . fn . clearInputs = function ( a ) { var g = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i ; return this . each ( function ( ) { var f = this . type ,
c = this . tagName . toLowerCase ( ) ; g . test ( f ) || "textarea" == c ? this . value = "" : "checkbox" == f || "radio" == f ? this . checked = ! 1 : "select" == c ? this . selectedIndex = - 1 : "file" == f ? /MSIE/ . test ( navigator . userAgent ) ? b ( this ) . replaceWith ( b ( this ) . clone ( ! 0 ) ) : b ( this ) . val ( "" ) : a && ( ! 0 === a && /hidden/ . test ( f ) || "string" == typeof a && b ( this ) . is ( a ) ) && ( this . value = "" ) } ) } ; b . fn . resetForm = function ( ) { return this . each ( function ( ) { ( "function" == typeof this . reset || "object" == typeof this . reset && ! this . reset . nodeType ) && this . reset ( ) } ) } ; b . fn . enable = function ( a ) { void 0 ===
a && ( a = ! 0 ) ; return this . each ( function ( ) { this . disabled = ! a } ) } ; b . fn . selected = function ( a ) { void 0 === a && ( a = ! 0 ) ; return this . each ( function ( ) { var g = this . type ; "checkbox" == g || "radio" == g ? this . checked = a : "option" == this . tagName . toLowerCase ( ) && ( g = b ( this ) . parent ( "select" ) , a && ( g [ 0 ] && "select-one" == g [ 0 ] . type ) && g . find ( "option" ) . selected ( ! 1 ) , this . selected = a ) } ) } ; b . fn . ajaxSubmit . debug = ! 1 } ) ( "undefined" != typeof jQuery ? jQuery : window . Zepto ) ;