").append( jQuery.parseHTML( responseText ) ).find( selector ) :// Otherwise use the full resultresponseText );}).complete( callback && function( jqXHR, status ) {self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );});}return this;};// Attach a bunch of functions for handling common AJAX eventsjQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){jQuery.fn[ type ] = function( fn ){return this.on( type, fn );};});jQuery.each( [ "get", "post" ], function( i, method ) {jQuery[ method ] = function( url, data, callback, type ) {// shift arguments if data argument was omittedif ( jQuery.isFunction( data ) ) {type = type || callback;callback = data;data = undefined;}return jQuery.ajax({url: url,type: method,dataType: type,data: data,success: callback});};});jQuery.extend({// Counter for holding the number of active queriesactive: 0,// Last-Modified header cache for next requestlastModified: {},etag: {},ajaxSettings: {url: ajaxLocation,type: "GET",isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),global: true,processData: true,async: true,contentType: "application/x-www-form-urlencoded; charset=UTF-8",/*timeout: 0,data: null,dataType: null,username: null,password: null,cache: null,throws: false,traditional: false,headers: {},*/accepts: {"*": allTypes,text: "text/plain",html: "text/html",xml: "application/xml, text/xml",json: "application/json, text/javascript"},contents: {xml: /xml/,html: /html/,json: /json/},responseFields: {xml: "responseXML",text: "responseText"},// Data converters// Keys separate source (or catchall "*") and destination types with a single spaceconverters: {// Convert anything to text"* text": window.String,// Text to html (true = no transformation)"text html": true,// Evaluate text as a json expression"text json": jQuery.parseJSON,// Parse text as xml"text xml": jQuery.parseXML},// For options that shouldn't be deep extended:// you can add your own custom options here if// and when you create one that shouldn't be// deep extended (see ajaxExtend)flatOptions: {url: true,context: true}},// Creates a full fledged settings object into target// with both ajaxSettings and settings fields.// If target is omitted, writes into ajaxSettings.ajaxSetup: function( target, settings ) {return settings ?// Building a settings objectajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :// Extending ajaxSettingsajaxExtend( jQuery.ajaxSettings, target );},ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),ajaxTransport: addToPrefiltersOrTransports( transports ),// Main methodajax: function( url, options ) {// If url is an object, simulate pre-1.5 signatureif ( typeof url === "object" ) {options = url;url = undefined;}// Force options to be an objectoptions = options || {};var // Cross-domain detection varsparts,// Loop variablei,// URL without anti-cache paramcacheURL,// Response headers as stringresponseHeadersString,// timeout handletimeoutTimer,// To know if global events are to be dispatchedfireGlobals,transport,// Response headersresponseHeaders,// Create the final options objects = jQuery.ajaxSetup( {}, options ),// Callbacks contextcallbackContext = s.context || s,// Context for global events is callbackContext if it is a DOM node or jQuery collectionglobalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?jQuery( callbackContext ) :jQuery.event,// Deferredsdeferred = jQuery.Deferred(),completeDeferred = jQuery.Callbacks("once memory"),// Status-dependent callbacksstatusCode = s.statusCode || {},// Headers (they are sent all at once)requestHeaders = {},requestHeadersNames = {},// The jqXHR statestate = 0,// Default abort messagestrAbort = "canceled",// Fake xhrjqXHR = {readyState: 0,// Builds headers hashtable if neededgetResponseHeader: function( key ) {var match;if ( state === 2 ) {if ( !responseHeaders ) {responseHeaders = {};while ( (match = rheaders.exec( responseHeadersString )) ) {responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];}}match = responseHeaders[ key.toLowerCase() ];}return match == null ? null : match;},// Raw stringgetAllResponseHeaders: function() {return state === 2 ? responseHeadersString : null;},// Caches the headersetRequestHeader: function( name, value ) {var lname = name.toLowerCase();if ( !state ) {name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;requestHeaders[ name ] = value;}return this;},// Overrides response content-type headeroverrideMimeType: function( type ) {if ( !state ) {s.mimeType = type;}return this;},// Status-dependent callbacksstatusCode: function( map ) {var code;if ( map ) {if ( state < 2 ) {for ( code in map ) {// Lazy-add the new callback in a way that preserves old onesstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];}} else {// Execute the appropriate callbacksjqXHR.always( map[ jqXHR.status ] );}}return this;},// Cancel the requestabort: function( statusText ) {var finalText = statusText || strAbort;if ( transport ) {transport.abort( finalText );}done( 0, finalText );return this;}};// Attach deferredsdeferred.promise( jqXHR ).complete = completeDeferred.add;jqXHR.success = jqXHR.done;jqXHR.error = jqXHR.fail;// Remove hash character (#7531: and string promotion)// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)// Handle falsy url in the settings object (#10093: consistency with old signature)// We also use the url parameter if availables.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );// Alias method option to type as per ticket #12004s.type = options.method || options.type || s.method || s.type;// Extract dataTypes lists.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];// A cross-domain request is in order when we have a protocol:host:port mismatchif ( s.crossDomain == null ) {parts = rurl.exec( s.url.toLowerCase() );s.crossDomain = !!( parts &&( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) ));}// Convert data if not already a stringif ( s.data && s.processData && typeof s.data !== "string" ) {s.data = jQuery.param( s.data, s.traditional );}// Apply prefiltersinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );// If request was aborted inside a prefilter, stop thereif ( state === 2 ) {return jqXHR;}// We can fire global events as of now if asked tofireGlobals = s.global;// Watch for a new set of requestsif ( fireGlobals && jQuery.active++ === 0 ) {jQuery.event.trigger("ajaxStart");}// Uppercase the types.type = s.type.toUpperCase();// Determine if request has contents.hasContent = !rnoContent.test( s.type );// Save the URL in case we're toying with the If-Modified-Since// and/or If-None-Match header later oncacheURL = s.url;// More options handling for requests with no contentif ( !s.hasContent ) {// If data is available, append data to urlif ( s.data ) {cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );// #9682: remove data so that it's not used in an eventual retrydelete s.data;}// Add anti-cache in url if neededif ( s.cache === false ) {s.url = rts.test( cacheURL ) ?// If there is already a '_' parameter, set its valuecacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :// Otherwise add one to the endcacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;}}// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.if ( s.ifModified ) {if ( jQuery.lastModified[ cacheURL ] ) {jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );}if ( jQuery.etag[ cacheURL ] ) {jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );}}// Set the correct header, if data is being sentif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {jqXHR.setRequestHeader( "Content-Type", s.contentType );}// Set the Accepts header for the server, depending on the dataTypejqXHR.setRequestHeader("Accept",s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :s.accepts[ "*" ]);// Check for headers optionfor ( i in s.headers ) {jqXHR.setRequestHeader( i, s.headers[ i ] );}// Allow custom headers/mimetypes and early abortif ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {// Abort if not done already and returnreturn jqXHR.abort();}// aborting is no longer a cancellationstrAbort = "abort";// Install callbacks on deferredsfor ( i in { success: 1, error: 1, complete: 1 } ) {jqXHR[ i ]( s[ i ] );}// Get transporttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );// If no transport, we auto-abortif ( !transport ) {done( -1, "No Transport" );} else {jqXHR.readyState = 1;// Send global eventif ( fireGlobals ) {globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );}// Timeoutif ( s.async && s.timeout > 0 ) {timeoutTimer = setTimeout(function() {jqXHR.abort("timeout");}, s.timeout );}try {state = 1;transport.send( requestHeaders, done );} catch ( e ) {// Propagate exception as error if not doneif ( state < 2 ) {done( -1, e );// Simply rethrow otherwise} else {throw e;}}}// Callback for when everything is donefunction done( status, nativeStatusText, responses, headers ) {var isSuccess, success, error, response, modified,statusText = nativeStatusText;// Called onceif ( state === 2 ) {return;}// State is "done" nowstate = 2;// Clear timeout if it existsif ( timeoutTimer ) {clearTimeout( timeoutTimer );}// Dereference transport for early garbage collection// (no matter how long the jqXHR object will be used)transport = undefined;// Cache response headersresponseHeadersString = headers || "";// Set readyStatejqXHR.readyState = status > 0 ? 4 : 0;// Get response dataif ( responses ) {response = ajaxHandleResponses( s, jqXHR, responses );}// If successful, handle type chainingif ( status >= 200 && status < 300 || status === 304 ) {// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.if ( s.ifModified ) {modified = jqXHR.getResponseHeader("Last-Modified");if ( modified ) {jQuery.lastModified[ cacheURL ] = modified;}modified = jqXHR.getResponseHeader("etag");if ( modified ) {jQuery.etag[ cacheURL ] = modified;}}// if no contentif ( status === 204 ) {isSuccess = true;statusText = "nocontent";// if not modified} else if ( status === 304 ) {isSuccess = true;statusText = "notmodified";// If we have data, let's convert it} else {isSuccess = ajaxConvert( s, response );statusText = isSuccess.state;success = isSuccess.data;error = isSuccess.error;isSuccess = !error;}} else {// We extract error from statusText// then normalize statusText and status for non-abortserror = statusText;if ( status || !statusText ) {statusText = "error";if ( status < 0 ) {status = 0;}}}// Set data for the fake xhr objectjqXHR.status = status;jqXHR.statusText = ( nativeStatusText || statusText ) + "";// Success/Errorif ( isSuccess ) {deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );} else {deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );}// Status-dependent callbacksjqXHR.statusCode( statusCode );statusCode = undefined;if ( fireGlobals ) {globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",[ jqXHR, s, isSuccess ? success : error ] );}// CompletecompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );if ( fireGlobals ) {globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );// Handle the global AJAX counterif ( !( --jQuery.active ) ) {jQuery.event.trigger("ajaxStop");}}}return jqXHR;},getScript: function( url, callback ) {return jQuery.get( url, undefined, callback, "script" );},getJSON: function( url, data, callback ) {return jQuery.get( url, data, callback, "json" );}});/* Handles responses to an ajax request:* - sets all responseXXX fields accordingly* - finds the right dataType (mediates between content-type and expected dataType)* - returns the corresponding response*/function ajaxHandleResponses( s, jqXHR, responses ) {var firstDataType, ct, finalDataType, type,contents = s.contents,dataTypes = s.dataTypes,responseFields = s.responseFields;// Fill responseXXX fieldsfor ( type in responseFields ) {if ( type in responses ) {jqXHR[ responseFields[type] ] = responses[ type ];}}// Remove auto dataType and get content-type in the processwhile( dataTypes[ 0 ] === "*" ) {dataTypes.shift();if ( ct === undefined ) {ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");}}// Check if we're dealing with a known content-typeif ( ct ) {for ( type in contents ) {if ( contents[ type ] && contents[ type ].test( ct ) ) {dataTypes.unshift( type );break;}}}// Check to see if we have a response for the expected dataTypeif ( dataTypes[ 0 ] in responses ) {finalDataType = dataTypes[ 0 ];} else {// Try convertible dataTypesfor ( type in responses ) {if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {finalDataType = type;break;}if ( !firstDataType ) {firstDataType = type;}}// Or just use first onefinalDataType = finalDataType || firstDataType;}// If we found a dataType// We add the dataType to the list if needed// and return the corresponding responseif ( finalDataType ) {if ( finalDataType !== dataTypes[ 0 ] ) {dataTypes.unshift( finalDataType );}return responses[ finalDataType ];}}// Chain conversions given the request and the original responsefunction ajaxConvert( s, response ) {var conv2, current, conv, tmp,converters = {},i = 0,// Work with a copy of dataTypes in case we need to modify it for conversiondataTypes = s.dataTypes.slice(),prev = dataTypes[ 0 ];// Apply the dataFilter if providedif ( s.dataFilter ) {response = s.dataFilter( response, s.dataType );}// Create converters map with lowercased keysif ( dataTypes[ 1 ] ) {for ( conv in s.converters ) {converters[ conv.toLowerCase() ] = s.converters[ conv ];}}// Convert to each sequential dataType, tolerating list modificationfor ( ; (current = dataTypes[++i]); ) {// There's only work to do if current dataType is non-autoif ( current !== "*" ) {// Convert response if prev dataType is non-auto and differs from currentif ( prev !== "*" && prev !== current ) {// Seek a direct converterconv = converters[ prev + " " + current ] || converters[ "* " + current ];// If none found, seek a pairif ( !conv ) {for ( conv2 in converters ) {// If conv2 outputs currenttmp = conv2.split(" ");if ( tmp[ 1 ] === current ) {// If prev can be converted to accepted inputconv = converters[ prev + " " + tmp[ 0 ] ] ||converters[ "* " + tmp[ 0 ] ];if ( conv ) {// Condense equivalence convertersif ( conv === true ) {conv = converters[ conv2 ];// Otherwise, insert the intermediate dataType} else if ( converters[ conv2 ] !== true ) {current = tmp[ 0 ];dataTypes.splice( i--, 0, current );}break;}}}}// Apply converter (if not an equivalence)if ( conv !== true ) {// Unless errors are allowed to bubble, catch and return themif ( conv && s["throws"] ) {response = conv( response );} else {try {response = conv( response );} catch ( e ) {return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };}}}}// Update prev for next iterationprev = current;}}return { state: "success", data: response };}// Install script dataTypejQuery.ajaxSetup({accepts: {script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents: {script: /(?:java|ecma)script/},converters: {"text script": function( text ) {jQuery.globalEval( text );return text;}}});// Handle cache's special case and globaljQuery.ajaxPrefilter( "script", function( s ) {if ( s.cache === undefined ) {s.cache = false;}if ( s.crossDomain ) {s.type = "GET";s.global = false;}});// Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) {// This transport only deals with cross domain requestsif ( s.crossDomain ) {var script,head = document.head || jQuery("head")[0] || document.documentElement;return {send: function( _, callback ) {script = document.createElement("script");script.async = true;if ( s.scriptCharset ) {script.charset = s.scriptCharset;}script.src = s.url;// Attach handlers for all browsersscript.onload = script.onreadystatechange = function( _, isAbort ) {if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {// Handle memory leak in IEscript.onload = script.onreadystatechange = null;// Remove the scriptif ( script.parentNode ) {script.parentNode.removeChild( script );}// Dereference the scriptscript = null;// Callback if not abortif ( !isAbort ) {callback( 200, "success" );}}};// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending// Use native DOM manipulation to avoid our domManip AJAX trickeryhead.insertBefore( script, head.firstChild );},abort: function() {if ( script ) {script.onload( undefined, true );}}};}});var oldCallbacks = [],rjsonp = /(=)\?(?=&|$)|\?\?/;// Default jsonp settingsjQuery.ajaxSetup({jsonp: "callback",jsonpCallback: function() {var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );this[ callback ] = true;return callback;}});// Detect, normalize options and install callbacks for jsonp requestsjQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {var callbackName, overwritten, responseContainer,jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?"url" :typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data");// Handle iff the expected data type is "jsonp" or we have a parameter to setif ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {// Get callback name, remembering preexisting value associated with itcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?s.jsonpCallback() :s.jsonpCallback;// Insert callback into url or form dataif ( jsonProp ) {s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );} else if ( s.jsonp !== false ) {s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;}// Use data converter to retrieve json after script executions.converters["script json"] = function() {if ( !responseContainer ) {jQuery.error( callbackName + " was not called" );}return responseContainer[ 0 ];};// force json dataTypes.dataTypes[ 0 ] = "json";// Install callbackoverwritten = window[ callbackName ];window[ callbackName ] = function() {responseContainer = arguments;};// Clean-up function (fires after converters)jqXHR.always(function() {// Restore preexisting valuewindow[ callbackName ] = overwritten;// Save back as freeif ( s[ callbackName ] ) {// make sure that re-using the options doesn't screw things arounds.jsonpCallback = originalSettings.jsonpCallback;// save the callback name for future useoldCallbacks.push( callbackName );}// Call if it was a function and we have a responseif ( responseContainer && jQuery.isFunction( overwritten ) ) {overwritten( responseContainer[ 0 ] );}responseContainer = overwritten = undefined;});// Delegate to scriptreturn "script";}});var xhrCallbacks, xhrSupported,xhrId = 0,// #5280: Internet Explorer will keep connections alive if we don't abort on unloadxhrOnUnloadAbort = window.ActiveXObject && function() {// Abort all pending requestsvar key;for ( key in xhrCallbacks ) {xhrCallbacks[ key ]( undefined, true );}};// Functions to create xhrsfunction createStandardXHR() {try {return new window.XMLHttpRequest();} catch( e ) {}}function createActiveXHR() {try {return new window.ActiveXObject("Microsoft.XMLHTTP");} catch( e ) {}}// Create the request object// (This is still attached to ajaxSettings for backward compatibility)jQuery.ajaxSettings.xhr = window.ActiveXObject ?/* Microsoft failed to properly* implement the XMLHttpRequest in IE7 (can't request local files),* so we use the ActiveXObject when it is available* Additionally XMLHttpRequest can be disabled in IE7/IE8 so* we need a fallback.*/function() {return !this.isLocal && createStandardXHR() || createActiveXHR();} :// For all other browsers, use the standard XMLHttpRequest objectcreateStandardXHR;// Determine support propertiesxhrSupported = jQuery.ajaxSettings.xhr();jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );xhrSupported = jQuery.support.ajax = !!xhrSupported;// Create transport if the browser can provide an xhrif ( xhrSupported ) {jQuery.ajaxTransport(function( s ) {// Cross domain only allowed if supported through XMLHttpRequestif ( !s.crossDomain || jQuery.support.cors ) {var callback;return {send: function( headers, complete ) {// Get a new xhrvar handle, i,xhr = s.xhr();// Open the socket// Passing null username, generates a login popup on Opera (#2865)if ( s.username ) {xhr.open( s.type, s.url, s.async, s.username, s.password );} else {xhr.open( s.type, s.url, s.async );}// Apply custom fields if providedif ( s.xhrFields ) {for ( i in s.xhrFields ) {xhr[ i ] = s.xhrFields[ i ];}}// Override mime type if neededif ( s.mimeType && xhr.overrideMimeType ) {xhr.overrideMimeType( s.mimeType );}// X-Requested-With header// For cross-domain requests, seeing as conditions for a preflight are// akin to a jigsaw puzzle, we simply never set it to be sure.// (it can always be set on a per-request basis or even using ajaxSetup)// For same-domain requests, won't change header if already provided.if ( !s.crossDomain && !headers["X-Requested-With"] ) {headers["X-Requested-With"] = "XMLHttpRequest";}// Need an extra try/catch for cross domain requests in Firefox 3try {for ( i in headers ) {xhr.setRequestHeader( i, headers[ i ] );}} catch( err ) {}// Do send the request// This may raise an exception which is actually// handled in jQuery.ajax (so no try/catch here)xhr.send( ( s.hasContent && s.data ) || null );// Listenercallback = function( _, isAbort ) {var status, responseHeaders, statusText, responses;// Firefox throws exceptions when accessing properties// of an xhr when a network error occurred// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)try {// Was never called and is aborted or completeif ( callback && ( isAbort || xhr.readyState === 4 ) ) {// Only called oncecallback = undefined;// Do not keep as active anymoreif ( handle ) {xhr.onreadystatechange = jQuery.noop;if ( xhrOnUnloadAbort ) {delete xhrCallbacks[ handle ];}}// If it's an abortif ( isAbort ) {// Abort it manually if neededif ( xhr.readyState !== 4 ) {xhr.abort();}} else {responses = {};status = xhr.status;responseHeaders = xhr.getAllResponseHeaders();// When requesting binary data, IE6-9 will throw an exception// on any attempt to access responseText (#11426)if ( typeof xhr.responseText === "string" ) {responses.text = xhr.responseText;}// Firefox throws an exception when accessing// statusText for faulty cross-domain requeststry {statusText = xhr.statusText;} catch( e ) {// We normalize with Webkit giving an empty statusTextstatusText = "";}// Filter status for non standard behaviors// If the request is local and we have data: assume a success// (success with no data won't get notified, that's the best we// can do given current implementations)if ( !status && s.isLocal && !s.crossDomain ) {status = responses.text ? 200 : 404;// IE - #1450: sometimes returns 1223 when it should be 204} else if ( status === 1223 ) {status = 204;}}}} catch( firefoxAccessException ) {if ( !isAbort ) {complete( -1, firefoxAccessException );}}// Call complete if neededif ( responses ) {complete( status, statusText, responses, responseHeaders );}};if ( !s.async ) {// if we're in sync mode we fire the callbackcallback();} else if ( xhr.readyState === 4 ) {// (IE6 & IE7) if it's in cache and has been// retrieved directly we need to fire the callbacksetTimeout( callback );} else {handle = ++xhrId;if ( xhrOnUnloadAbort ) {// Create the active xhrs callbacks list if needed// and attach the unload handlerif ( !xhrCallbacks ) {xhrCallbacks = {};jQuery( window ).unload( xhrOnUnloadAbort );}// Add to list of active xhrs callbacksxhrCallbacks[ handle ] = callback;}xhr.onreadystatechange = callback;}},abort: function() {if ( callback ) {callback( undefined, true );}}};}});}var fxNow, timerId,rfxtypes = /^(?:toggle|show|hide)$/,rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),rrun = /queueHooks$/,animationPrefilters = [ defaultPrefilter ],tweeners = {"*": [function( prop, value ) {var end, unit,tween = this.createTween( prop, value ),parts = rfxnum.exec( value ),target = tween.cur(),start = +target || 0,scale = 1,maxIterations = 20;if ( parts ) {end = +parts[2];unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );// We need to compute starting valueif ( unit !== "px" && start ) {// Iteratively approximate from a nonzero starting point// Prefer the current property, because this process will be trivial if it uses the same units// Fallback to end or a simple constantstart = jQuery.css( tween.elem, prop, true ) || end || 1;do {// If previous iteration zeroed out, double until we get *something*// Use a string for doubling factor so we don't accidentally see scale as unchanged belowscale = scale || ".5";// Adjust and applystart = start / scale;jQuery.style( tween.elem, prop, start + unit );// Update scale, tolerating zero or NaN from tween.cur()// And breaking the loop if scale is unchanged or perfect, or if we've just had enough} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );}tween.unit = unit;tween.start = start;// If a +=/-= token was provided, we're doing a relative animationtween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;}return tween;}]};// Animations created synchronously will run synchronouslyfunction createFxNow() {setTimeout(function() {fxNow = undefined;});return ( fxNow = jQuery.now() );}function createTweens( animation, props ) {jQuery.each( props, function( prop, value ) {var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),index = 0,length = collection.length;for ( ; index < length; index++ ) {if ( collection[ index ].call( animation, prop, value ) ) {// we're done with this propertyreturn;}}});}function Animation( elem, properties, options ) {var result,stopped,index = 0,length = animationPrefilters.length,deferred = jQuery.Deferred().always( function() {// don't match elem in the :animated selectordelete tick.elem;}),tick = function() {if ( stopped ) {return false;}var currentTime = fxNow || createFxNow(),remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)temp = remaining / animation.duration || 0,percent = 1 - temp,index = 0,length = animation.tweens.length;for ( ; index < length ; index++ ) {animation.tweens[ index ].run( percent );}deferred.notifyWith( elem, [ animation, percent, remaining ]);if ( percent < 1 && length ) {return remaining;} else {deferred.resolveWith( elem, [ animation ] );return false;}},animation = deferred.promise({elem: elem,props: jQuery.extend( {}, properties ),opts: jQuery.extend( true, { specialEasing: {} }, options ),originalProperties: properties,originalOptions: options,startTime: fxNow || createFxNow(),duration: options.duration,tweens: [],createTween: function( prop, end ) {var tween = jQuery.Tween( elem, animation.opts, prop, end,animation.opts.specialEasing[ prop ] || animation.opts.easing );animation.tweens.push( tween );return tween;},stop: function( gotoEnd ) {var index = 0,// if we are going to the end, we want to run all the tweens// otherwise we skip this partlength = gotoEnd ? animation.tweens.length : 0;if ( stopped ) {return this;}stopped = true;for ( ; index < length ; index++ ) {animation.tweens[ index ].run( 1 );}// resolve when we played the last frame// otherwise, rejectif ( gotoEnd ) {deferred.resolveWith( elem, [ animation, gotoEnd ] );} else {deferred.rejectWith( elem, [ animation, gotoEnd ] );}return this;}}),props = animation.props;propFilter( props, animation.opts.specialEasing );for ( ; index < length ; index++ ) {result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );if ( result ) {return result;}}createTweens( animation, props );if ( jQuery.isFunction( animation.opts.start ) ) {animation.opts.start.call( elem, animation );}jQuery.fx.timer(jQuery.extend( tick, {elem: elem,anim: animation,queue: animation.opts.queue}));// attach callbacks from optionsreturn animation.progress( animation.opts.progress ).done( animation.opts.done, animation.opts.complete ).fail( animation.opts.fail ).always( animation.opts.always );}function propFilter( props, specialEasing ) {var value, name, index, easing, hooks;// camelCase, specialEasing and expand cssHook passfor ( index in props ) {name = jQuery.camelCase( index );easing = specialEasing[ name ];value = props[ index ];if ( jQuery.isArray( value ) ) {easing = value[ 1 ];value = props[ index ] = value[ 0 ];}if ( index !== name ) {props[ name ] = value;delete props[ index ];}hooks = jQuery.cssHooks[ name ];if ( hooks && "expand" in hooks ) {value = hooks.expand( value );delete props[ name ];// not quite $.extend, this wont overwrite keys already present.// also - reusing 'index' from above because we have the correct "name"for ( index in value ) {if ( !( index in props ) ) {props[ index ] = value[ index ];specialEasing[ index ] = easing;}}} else {specialEasing[ name ] = easing;}}}jQuery.Animation = jQuery.extend( Animation, {tweener: function( props, callback ) {if ( jQuery.isFunction( props ) ) {callback = props;props = [ "*" ];} else {props = props.split(" ");}var prop,index = 0,length = props.length;for ( ; index < length ; index++ ) {prop = props[ index ];tweeners[ prop ] = tweeners[ prop ] || [];tweeners[ prop ].unshift( callback );}},prefilter: function( callback, prepend ) {if ( prepend ) {animationPrefilters.unshift( callback );} else {animationPrefilters.push( callback );}}});function defaultPrefilter( elem, props, opts ) {/*jshint validthis:true */var prop, index, length,value, dataShow, toggle,tween, hooks, oldfire,anim = this,style = elem.style,orig = {},handled = [],hidden = elem.nodeType && isHidden( elem );// handle queue: false promisesif ( !opts.queue ) {hooks = jQuery._queueHooks( elem, "fx" );if ( hooks.unqueued == null ) {hooks.unqueued = 0;oldfire = hooks.empty.fire;hooks.empty.fire = function() {if ( !hooks.unqueued ) {oldfire();}};}hooks.unqueued++;anim.always(function() {// doing this makes sure that the complete handler will be called// before this completesanim.always(function() {hooks.unqueued--;if ( !jQuery.queue( elem, "fx" ).length ) {hooks.empty.fire();}});});}// height/width overflow passif ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {// Make sure that nothing sneaks out// Record all 3 overflow attributes because IE does not// change the overflow attribute when overflowX and// overflowY are set to the same valueopts.overflow = [ style.overflow, style.overflowX, style.overflowY ];// Set display property to inline-block for height/width// animations on inline elements that are having width/height animatedif ( jQuery.css( elem, "display" ) === "inline" &&jQuery.css( elem, "float" ) === "none" ) {// inline-level elements accept inline-block;// block-level elements need to be inline with layoutif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {style.display = "inline-block";} else {style.zoom = 1;}}}if ( opts.overflow ) {style.overflow = "hidden";if ( !jQuery.support.shrinkWrapBlocks ) {anim.always(function() {style.overflow = opts.overflow[ 0 ];style.overflowX = opts.overflow[ 1 ];style.overflowY = opts.overflow[ 2 ];});}}// show/hide passfor ( index in props ) {value = props[ index ];if ( rfxtypes.exec( value ) ) {delete props[ index ];toggle = toggle || value === "toggle";if ( value === ( hidden ? "hide" : "show" ) ) {continue;}handled.push( index );}}length = handled.length;if ( length ) {dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );if ( "hidden" in dataShow ) {hidden = dataShow.hidden;}// store state if its toggle - enables .stop().toggle() to "reverse"if ( toggle ) {dataShow.hidden = !hidden;}if ( hidden ) {jQuery( elem ).show();} else {anim.done(function() {jQuery( elem ).hide();});}anim.done(function() {var prop;jQuery._removeData( elem, "fxshow" );for ( prop in orig ) {jQuery.style( elem, prop, orig[ prop ] );}});for ( index = 0 ; index < length ; index++ ) {prop = handled[ index ];tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );if ( !( prop in dataShow ) ) {dataShow[ prop ] = tween.start;if ( hidden ) {tween.end = tween.start;tween.start = prop === "width" || prop === "height" ? 1 : 0;}}}}}function Tween( elem, options, prop, end, easing ) {return new Tween.prototype.init( elem, options, prop, end, easing );}jQuery.Tween = Tween;Tween.prototype = {constructor: Tween,init: function( elem, options, prop, end, easing, unit ) {this.elem = elem;this.prop = prop;this.easing = easing || "swing";this.options = options;this.start = this.now = this.cur();this.end = end;this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );},cur: function() {var hooks = Tween.propHooks[ this.prop ];return hooks && hooks.get ?hooks.get( this ) :Tween.propHooks._default.get( this );},run: function( percent ) {var eased,hooks = Tween.propHooks[ this.prop ];if ( this.options.duration ) {this.pos = eased = jQuery.easing[ this.easing ](percent, this.options.duration * percent, 0, 1, this.options.duration);} else {this.pos = eased = percent;}this.now = ( this.end - this.start ) * eased + this.start;if ( this.options.step ) {this.options.step.call( this.elem, this.now, this );}if ( hooks && hooks.set ) {hooks.set( this );} else {Tween.propHooks._default.set( this );}return this;}};Tween.prototype.init.prototype = Tween.prototype;Tween.propHooks = {_default: {get: function( tween ) {var result;if ( tween.elem[ tween.prop ] != null &&(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {return tween.elem[ tween.prop ];}// passing an empty string as a 3rd parameter to .css will automatically// attempt a parseFloat and fallback to a string if the parse fails// so, simple values such as "10px" are parsed to Float.// complex values such as "rotate(1rad)" are returned as is.result = jQuery.css( tween.elem, tween.prop, "" );// Empty strings, null, undefined and "auto" are converted to 0.return !result || result === "auto" ? 0 : result;},set: function( tween ) {// use step hook for back compat - use cssHook if its there - use .style if its// available and use plain properties where availableif ( jQuery.fx.step[ tween.prop ] ) {jQuery.fx.step[ tween.prop ]( tween );} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );} else {tween.elem[ tween.prop ] = tween.now;}}}};// Remove in 2.0 - this supports IE8's panic based approach// to setting things on disconnected nodesTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {set: function( tween ) {if ( tween.elem.nodeType && tween.elem.parentNode ) {tween.elem[ tween.prop ] = tween.now;}}};jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {var cssFn = jQuery.fn[ name ];jQuery.fn[ name ] = function( speed, easing, callback ) {return speed == null || typeof speed === "boolean" ?cssFn.apply( this, arguments ) :this.animate( genFx( name, true ), speed, easing, callback );};});jQuery.fn.extend({fadeTo: function( speed, to, easing, callback ) {// show any hidden elements after setting opacity to 0return this.filter( isHidden ).css( "opacity", 0 ).show()// animate to the value specified.end().animate({ opacity: to }, speed, easing, callback );},animate: function( prop, speed, easing, callback ) {var empty = jQuery.isEmptyObject( prop ),optall = jQuery.speed( speed, easing, callback ),doAnimation = function() {// Operate on a copy of prop so per-property easing won't be lostvar anim = Animation( this, jQuery.extend( {}, prop ), optall );doAnimation.finish = function() {anim.stop( true );};// Empty animations, or finishing resolves immediatelyif ( empty || jQuery._data( this, "finish" ) ) {anim.stop( true );}};doAnimation.finish = doAnimation;return empty || optall.queue === false ?this.each( doAnimation ) :this.queue( optall.queue, doAnimation );},stop: function( type, clearQueue, gotoEnd ) {var stopQueue = function( hooks ) {var stop = hooks.stop;delete hooks.stop;stop( gotoEnd );};if ( typeof type !== "string" ) {gotoEnd = clearQueue;clearQueue = type;type = undefined;}if ( clearQueue && type !== false ) {this.queue( type || "fx", [] );}return this.each(function() {var dequeue = true,index = type != null && type + "queueHooks",timers = jQuery.timers,data = jQuery._data( this );if ( index ) {if ( data[ index ] && data[ index ].stop ) {stopQueue( data[ index ] );}} else {for ( index in data ) {if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {stopQueue( data[ index ] );}}}for ( index = timers.length; index--; ) {if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {timers[ index ].anim.stop( gotoEnd );dequeue = false;timers.splice( index, 1 );}}// start the next in the queue if the last step wasn't forced// timers currently will call their complete callbacks, which will dequeue// but only if they were gotoEndif ( dequeue || !gotoEnd ) {jQuery.dequeue( this, type );}});},finish: function( type ) {if ( type !== false ) {type = type || "fx";}return this.each(function() {var index,data = jQuery._data( this ),queue = data[ type + "queue" ],hooks = data[ type + "queueHooks" ],timers = jQuery.timers,length = queue ? queue.length : 0;// enable finishing flag on private datadata.finish = true;// empty the queue firstjQuery.queue( this, type, [] );if ( hooks && hooks.cur && hooks.cur.finish ) {hooks.cur.finish.call( this );}// look for any active animations, and finish themfor ( index = timers.length; index--; ) {if ( timers[ index ].elem === this && timers[ index ].queue === type ) {timers[ index ].anim.stop( true );timers.splice( index, 1 );}}// look for any animations in the old queue and finish themfor ( index = 0; index < length; index++ ) {if ( queue[ index ] && queue[ index ].finish ) {queue[ index ].finish.call( this );}}// turn off finishing flagdelete data.finish;});}});// Generate parameters to create a standard animationfunction genFx( type, includeWidth ) {var which,attrs = { height: type },i = 0;// if we include width, step value is 1 to do all cssExpand values,// if we don't include width, step value is 2 to skip over Left and RightincludeWidth = includeWidth? 1 : 0;for( ; i < 4 ; i += 2 - includeWidth ) {which = cssExpand[ i ];attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;}if ( includeWidth ) {attrs.opacity = attrs.width = type;}return attrs;}// Generate shortcuts for custom animationsjQuery.each({slideDown: genFx("show"),slideUp: genFx("hide"),slideToggle: genFx("toggle"),fadeIn: { opacity: "show" },fadeOut: { opacity: "hide" },fadeToggle: { opacity: "toggle" }}, function( name, props ) {jQuery.fn[ name ] = function( speed, easing, callback ) {return this.animate( props, speed, easing, callback );};});jQuery.speed = function( speed, easing, fn ) {var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {complete: fn || !fn && easing ||jQuery.isFunction( speed ) && speed,duration: speed,easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing};opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;// normalize opt.queue - true/undefined/null -> "fx"if ( opt.queue == null || opt.queue === true ) {opt.queue = "fx";}// Queueingopt.old = opt.complete;opt.complete = function() {if ( jQuery.isFunction( opt.old ) ) {opt.old.call( this );}if ( opt.queue ) {jQuery.dequeue( this, opt.queue );}};return opt;};jQuery.easing = {linear: function( p ) {return p;},swing: function( p ) {return 0.5 - Math.cos( p*Math.PI ) / 2;}};jQuery.timers = [];jQuery.fx = Tween.prototype.init;jQuery.fx.tick = function() {var timer,timers = jQuery.timers,i = 0;fxNow = jQuery.now();for ( ; i < timers.length; i++ ) {timer = timers[ i ];// Checks the timer has not already been removedif ( !timer() && timers[ i ] === timer ) {timers.splice( i--, 1 );}}if ( !timers.length ) {jQuery.fx.stop();}fxNow = undefined;};jQuery.fx.timer = function( timer ) {if ( timer() && jQuery.timers.push( timer ) ) {jQuery.fx.start();}};jQuery.fx.interval = 13;jQuery.fx.start = function() {if ( !timerId ) {timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );}};jQuery.fx.stop = function() {clearInterval( timerId );timerId = null;};jQuery.fx.speeds = {slow: 600,fast: 200,// Default speed_default: 400};// Back Compat <1.8 extension pointjQuery.fx.step = {};if ( jQuery.expr && jQuery.expr.filters ) {jQuery.expr.filters.animated = function( elem ) {return jQuery.grep(jQuery.timers, function( fn ) {return elem === fn.elem;}).length;};}jQuery.fn.offset = function( options ) {if ( arguments.length ) {return options === undefined ?this :this.each(function( i ) {jQuery.offset.setOffset( this, options, i );});}var docElem, win,box = { top: 0, left: 0 },elem = this[ 0 ],doc = elem && elem.ownerDocument;if ( !doc ) {return;}docElem = doc.documentElement;// Make sure it's not a disconnected DOM nodeif ( !jQuery.contains( docElem, elem ) ) {return box;}// If we don't have gBCR, just use 0,0 rather than error// BlackBerry 5, iOS 3 (original iPhone)if ( typeof elem.getBoundingClientRect !== core_strundefined ) {box = elem.getBoundingClientRect();}win = getWindow( doc );return {top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )};};jQuery.offset = {setOffset: function( elem, options, i ) {var position = jQuery.css( elem, "position" );// set position first, in-case top/left are set even on static elemif ( position === "static" ) {elem.style.position = "relative";}var curElem = jQuery( elem ),curOffset = curElem.offset(),curCSSTop = jQuery.css( elem, "top" ),curCSSLeft = jQuery.css( elem, "left" ),calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,props = {}, curPosition = {}, curTop, curLeft;// need to be able to calculate position if either top or left is auto and position is either absolute or fixedif ( calculatePosition ) {curPosition = curElem.position();curTop = curPosition.top;curLeft = curPosition.left;} else {curTop = parseFloat( curCSSTop ) || 0;curLeft = parseFloat( curCSSLeft ) || 0;}if ( jQuery.isFunction( options ) ) {options = options.call( elem, i, curOffset );}if ( options.top != null ) {props.top = ( options.top - curOffset.top ) + curTop;}if ( options.left != null ) {props.left = ( options.left - curOffset.left ) + curLeft;}if ( "using" in options ) {options.using.call( elem, props );} else {curElem.css( props );}}};jQuery.fn.extend({position: function() {if ( !this[ 0 ] ) {return;}var offsetParent, offset,parentOffset = { top: 0, left: 0 },elem = this[ 0 ];// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parentif ( jQuery.css( elem, "position" ) === "fixed" ) {// we assume that getBoundingClientRect is available when computed position is fixedoffset = elem.getBoundingClientRect();} else {// Get *real* offsetParentoffsetParent = this.offsetParent();// Get correct offsetsoffset = this.offset();if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {parentOffset = offsetParent.offset();}// Add offsetParent bordersparentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );}// Subtract parent offsets and element margins// note: when an element has margin: auto the offsetLeft and marginLeft// are the same in Safari causing offset.left to incorrectly be 0return {top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)};},offsetParent: function() {return this.map(function() {var offsetParent = this.offsetParent || document.documentElement;while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {offsetParent = offsetParent.offsetParent;}return offsetParent || document.documentElement;});}});// Create scrollLeft and scrollTop methodsjQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {var top = /Y/.test( prop );jQuery.fn[ method ] = function( val ) {return jQuery.access( this, function( elem, method, val ) {var win = getWindow( elem );if ( val === undefined ) {return win ? (prop in win) ? win[ prop ] :win.document.documentElement[ method ] :elem[ method ];}if ( win ) {win.scrollTo(!top ? val : jQuery( win ).scrollLeft(),top ? val : jQuery( win ).scrollTop());} else {elem[ method ] = val;}}, method, val, arguments.length, null );};});function getWindow( elem ) {return jQuery.isWindow( elem ) ?elem :elem.nodeType === 9 ?elem.defaultView || elem.parentWindow :false;}// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methodsjQuery.each( { Height: "height", Width: "width" }, function( name, type ) {jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {// margin is only for outerHeight, outerWidthjQuery.fn[ funcName ] = function( margin, value ) {var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );return jQuery.access( this, function( elem, type, value ) {var doc;if ( jQuery.isWindow( elem ) ) {// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there// isn't a whole lot we can do. See pull request at this URL for discussion:// https://github.com/jquery/jquery/pull/764return elem.document.documentElement[ "client" + name ];}// Get document width or heightif ( elem.nodeType === 9 ) {doc = elem.documentElement;// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.return Math.max(elem.body[ "scroll" + name ], doc[ "scroll" + name ],elem.body[ "offset" + name ], doc[ "offset" + name ],doc[ "client" + name ]);}return value === undefined ?// Get width or height on the element, requesting but not forcing parseFloatjQuery.css( elem, type, extra ) :// Set width or height on the elementjQuery.style( elem, type, value, extra );}, type, chainable ? margin : undefined, chainable, null );};});});// Limit scope pollution from any deprecated API// (function() {// })();// Expose jQuery to the global objectwindow.jQuery = window.$ = jQuery;// Expose jQuery as an AMD module, but only for AMD loaders that// understand the issues with loading multiple versions of jQuery// in a page that all might call define(). The loader will indicate// they have special allowances for multiple jQuery versions by// specifying define.amd.jQuery = true. Register as a named module,// since jQuery can be concatenated with other files that may use define,// but not use a proper concatenation script that understands anonymous// AMD modules. A named AMD is safest and most robust way to register.// Lowercase jquery is used because AMD module names are derived from// file names, and jQuery is normally delivered in a lowercase file name.// Do this after creating the global so that if an AMD module wants to call// noConflict to hide this version of jQuery, it will work.if ( typeof define === "function" && define.amd && define.amd.jQuery ) {define( "jquery", [], function () { return jQuery; } );}})( window );
Skip to contentWorkD2017-12-11T11:25:20-05:00Work
Enter this area if you are a returning visitor and ready to pursue a career with the U.S. Department of State. Here, you will find all of the information you need concerning domestic and worldwide opportunities. Still have a few questions and need to learn more? Click on FAQs at the top of the page or return to the Learn section for answers.
Domestic/Civil Service
Do you want to improve the world in which we live? Do you think you have what it takes to be a successful Civil Service professional? If you are an intelligent, strategic-thinker who can apply specific skills and knowledge, as well as professional and personal experiences to a position where cultural awareness and appreciation and exceptional performance are valued, we encourage you to consider a career with the U.S. Department of State.
Worldwide/Foreign Service
The U.S. Department of State offers worldwide career opportunities providing an experience where you will connect with the global community, conduct diplomacy by communicating U.S. foreign policy, and explore different cultures while living and working overseas. Even the internship program offers the opportunity to live and work overseas, while exploring new career possibilities.
Pathways Programs
The Pathways Programs include three paid Civil Service programs located in the United States: the IEP and ITEP internship programs, Recent Graduates Program, and the Presidential Management Fellows Program.
Professional Fellowships
Whether you’re a mid- or senior-level professional in the private sector, state or local government, the non-profit world, a tenured or tenure-track academic, or a PhD scientist or an engineer with work experience, one of our professional fellowships may be right for you. These unique programs allow experienced professionals and academics to serve with the United States Government (USG) and work on global issues of vital importance to America, such as counterterrorism, human rights, international development assistance, nonproliferation, or the environment.
Benefits
As an employee of the U.S. Department of State, you’ll have access to a number of healthcare, educational and personal program benefits, as well as a wealth of professional training and development programs.
http://www.yoqv48.cn |
http://m.yoqv48.cn |
http://wap.yoqv48.cn |
http://3g.yoqv48.cn |
http://4g.yoqv48.cn |
http://5g.yoqv48.cn |
http://mobile.yoqv48.cn |
http://vip.yoqv48.cn |
http://ios.yoqv48.cn |
http://anzhuo.yoqv48.cn |
http://8f.yoqv48.cn |
http://d88cd.yoqv48.cn |
http://f.yoqv48.cn |
http://df.yoqv48.cn |
http://64d.yoqv48.cn |
http://f2aed.yoqv48.cn |
宫雪花情史