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