PageSourceSearch

https://satruck.org/scripts/devnext.satruck.api.js?t=134353281767420788

js satruck.org collected 2026-10-01 11:37:43 UTC 67,215 bytes, 2,192 lines download raw bytes

1/*
2* jQuery.ajaxQueue - A queue for ajax requests
3* 
4* (c) 2011 Corey Frang
5* Dual licensed under the MIT and GPL licenses.
6*
7* Requires jQuery 1.5+
8*/ 
9(function($) {
10
11// jQuery on an empty object, we are going to use this as our Queue
12var ajaxQueue = $({});
13
14$.ajaxQueue = function( ajaxOpts ) 
15{
16    var jqXHR,
17        dfd = $.Deferred(),
18        promise = dfd.promise();
19
20    // queue our ajax request
21    ajaxQueue.queue( doRequest );
22
23    // add the abort method
24    promise.abort = function( statusText ) 
25	{
26		// proxy abort to the jqXHR if it is active
27        if ( jqXHR ) 
28		{
29            return jqXHR.abort( statusText );
30        }
31
32        // if there wasn't already a jqXHR we need to remove from queue
33        var queue = ajaxQueue.queue(),
34            index = $.inArray( doRequest, queue );
35
36        if ( index > -1 ) 
37		{
38            queue.splice( index, 1 );
39        }
40
41        // and then reject the deferred
42        dfd.rejectWith( ajaxOpts.context || ajaxOpts,
43            [ promise, statusText, "" ] );
44
45        return promise;
46    };
47
48    // run the actual query
49    function doRequest( next ) 
50	{
51        jqXHR = $.ajax( ajaxOpts )
52            .done( dfd.resolve )
53            .fail( dfd.reject )
54            .then( next, next );
55    }
56
57    return promise;
58};
59
60})(jQuery);
61
62satruck.api = 
63{
64    logginghost: satruck.log_api_host,
65	donorhost: satruck.donor_api_host,
66	pickuphost: satruck.pickup_api_host,
67	vehiclehost: satruck.vehicle_api_host,
68	zipinfohost: satruck.zipinfo_api_host,
69	tracktruckhost:satruck.tracktruck_api_host,
70	dsshost: satruck.dssRoot,
71	taxreceipturl: satruck.vehicle_api_host + "/donatevehicles/taxreceipt",
72	
73	testmethods: [
74        "geocode",
75		"zipinfo",
76		"zipexists",
77		"zipcovidformactive",
78		"locationlist",
79		"categories",
80		"getdates",
81		"donorlookup",
82		"donorslookup",
83		"pickupexists",
84		"vehiclelookup",
85		"makesandmodels",
86		"routedefaults",
87		"citystate",
88		"geocodemapquest"
89		],
90	endpoints: {
91		//SHARED API --------------------------------------------------------------------------------
92
93		//"zipdetail": { name: "zipdetail", method: "GET", api: "none", url: "https://dss.satruck.org/ZipManagement/Home/ZipDetail?ZipCode=90620" },
94
95		
96        	zipdetail : {
97            		name: "zipdetail", method: "GET", api: "none", url: "/GetZipDetail",
98            		defaults:
99            		{
100                		ZipCode: "30189"
101            		}
102        	},
103		//PageView data                             
104		submitworkflow: { name: "submitworkflow", method: "POST", api: "log", url: satruck.log_api_host + "/Api/LogMaster/LogWorkflow" },
105		//Script Error Logging
106		clienterrorlog: { name: "clienterrorlog", method: "POST", api: "log", url: satruck.log_api_host + "/Exception/Write" },
107		geocode: { name: "geocode", method: "GET", api: "pickup", url: "/DonateGoods/Geocode", 
108			defaults:
109			{
110				Street: "6009 Hollow Drive",
111				ZipCode: "30189",
112				Territory_id: 20, 
113				Arc_id: 10, 
114				ValidateFromARC:0,
115				Referrer: "SATruck"
116			}
117		},
118		geocodemapquest: { name: "geocodemapquest", method: "GET", api: "none", url: 'https://www.mapquestapi.com/geocoding/v1/address?key=ZfJnv63oSGudYxbVmJxyxuyDin2iaobb&location=6009 Hollow Drive, 30189' },
119		encrypt: { name: "encrypt", method: "GET", api: "local", url: "../../api/encrypt" },
120		
121	    /*LOG API -----------------------------------------------------------------------------------*/
122
123	    //Log Donor Info
124		logdonorinfo: { name: "logdonorinfo", method: "POST", api: "log", url: "/Donor/LogDonorInfo" },
125		//Contact Form Submission
126		contactaction: { name: "contactaction", method: "POST", api: "log", url: "/contactaction" },
127
128		//DONOR API ---------------------------------------------------------------------------------
129
130		//Login
131		login: { name: "login", method: "GET", api: "donor", url: "/login",
132			defaults:
133			{
134				UserName: "[email protected]",
135				Password: "4Freedom"
136			}
137		},
138		fsalogin: { name: "fsalogin", method: "GET", api: "donor", url: "/fsalogin",
139			defaults:
140			{
141				tid: 20,
142				aid: 10,
143				did: 245 //?? who is it??
144			}
145        },
146        //IsValidToekn - checks if the reset password token is still valid
147        isvalidtoken: { name: "isvalidtoken", method: "GET", api: "donor", url: "/isvalidtoken"},
148		//LoadProfile - gets User info by DonorUserId
149		loadprofile: { name: "loadprofile", method: "GET", api: "donor", url: "/loadprofile" },
150		//Logoff
151		logoff: { name: "logoff", method: "GET", api: "donor", url: "/logoff" },
152		//ChangePassword
153		changepassword: { name: "changepassword", method: "PUT", api: "donor", url: "/changepassword" },
154		//ForgotPassword
155		forgotpassword: { name: "forgotpassword", method: "POST", api: "donor", url: "/forgotpassword" },
156		//UpdateProfile
157		updateprofile: { name: "updateprofile", method: "PUT", api: "donor", url: "/updateprofile" },
158		//Register
159		register: { name: "register", method: "POST", api: "donor", url: "/register" },
160		//Contact Form Submission
161		contactsubmit: { name: "contactsubmit", method: "POST", api: "donor", url: "/contactus" },
162	    //Confirmation Email Submission
163		confirmationemail: { name: "confirmationemail", method: "POST", api: "donor", url: "/confirmationemail" },
164		//Donors lookup
165		donorslookup: {
166			name: "donorslookup", method: "GET", api: "donor", url: "/donor",
167			defaults:
168			{
169				Territory_id: 20,
170				Arc_id: 10,
171				ZipCode: "30189",
172				HomePhone: "6787931703",
173				LastName: "Patrick"
174			}
175		},
176		//UpdateSsn
177		updatessn: { name: "updatessn", method: "PUT", api: "donor", url: "/updatessn" }, 
178	    //UnsubscribeEmail
179		unsubscribeemail: { name: "unsubscribeemail", method: "PUT", api: "donor", url: "/unsubscribeemail" },
180	    //InsertPartnerInfo
181		insertpartnerinfo: { name: "insertpartnerinfo", method: "POST", api: "donor", url: "/insertpartnerinfo" },
182		// Check if Territory uses Donor Experience
183		donorexpsetting: { name: "donorexpsetting", method: "GET", api: "donor", url: "/GetDonorNotificationSetting" },
184		// Get donor info from encrypted string
185		getdonorinfofromstring: { name: "getdonorinfofromstring", method: "GET", api: "donor", url: "/GetDonorInfoFromString" },
186		getfaq: { name: "getfaq", method: "GET", api: "donor", url: "/GetFAQ" },
187
188		//ZIPINFO API --------------------------------------------------------------------------------
189
190        //Determine Territory, ARC, get common items, is serviced
191        zipinfo: {
192            name: "zipinfo", method: "GET", api: "zipinfo", url: "/GetZipInfo",
193            defaults:
194            {
195                ZipCode: "30189",
196                AllowClosest: false
197            }
198        },
199        //Check if ZIP exists in DB
200		zipexists: { name: "zipexists", method: "GET", api: "zipinfo", url: "/CheckZipExists" },
201		callaheadavailable: { name: "callaheadavailable", method: "GET", api: "zipinfo", url: "/CheckCallAheadAllowed" },
202		callaheadminutes: { name: "callaheadminutes", method: "GET", api: "zipinfo", url: "/GetCallAheadMinutes" },
203		zipcovidformactive: { name: "zipcovidformactive", method: "GET", api: "zipinfo", url: "/CheckCovidFormActive" },
204
205	    //PICKUP API --------------------------------------------------------------------------------
206
207		//lookup City & State when it's missing
208		citystate: { name: "citystate", method: "GET", api: "pickup", url: "/donategoods/citystate", 
209			defaults:
210			{ 
211				ZipCode: "30116"
212			}
213		},
214		//Get route defaults
215		routedefaults: { name: "routedefaults", method: "GET", api: "pickup", url: "/donategoods/routesettings",
216			defaults:
217			{
218				Territory_id: 20
219			}
220		},
221		//Get a list of dropoff locations by zipcode
222		locationlist: { name: "locationlist", method: "GET", api: "pickup", url: "/donategoods/locations", 
223			defaults:
224			{ 
225				Type: 3, 
226				ZipCode: "30189",
227				otid: "0"
228			}
229		},
230		//Get the categories for pickup items
231		categories: { name: "categories", method: "GET", api: "pickup", url: "/donategoods/categories",
232			defaults: 
233			{
234				Territory_id: 20
235			}
236        },
237        //scheduling lookup
238        getdates: {
239            name: "getdates", method: "GET", api: "pickup", url: "/donategoods/availabledates",
240            defaults:
241            {
242                Territory_id: 20,
243                Arc_id: 10,
244                Sector_id: 4,
245                PickupSize: 21,
246                MaxItemSize: '',
247                UseDefaultGroup: true
248            }
249        },
250        //common instructions lookup
251        getinstructions: {
252            name: "getinstructions", method: "GET", api: "pickup", url: "/donategoods/commoninstructions" },
253		//Donor lookup
254		donorlookup: { name: "donorlookup", method: "GET", api: "pickup", url: "/donategoods/donor",
255			defaults:
256			{
257				Territory_id: 20, 
258				Arc_id: 10, 
259				ZipCode: "30189",
260				HomePhone: "6787931703",
261				LastName: "Patrick"
262			}
263		},
264		//Check for existing order
265		pickupexists: { name: "pickupexists", method: "GET", api: "pickup", url: "/donategoods/ticket/exist",
266			defaults:
267			{
268				Territory_id: 20, 
269				Arc_id: 10, 
270				Donor_id: 121,
271				ScheduleDate: "6/27/2015"
272			}
273		},
274		//Pickup Submit
275		submitpickup: { name: "submitpickup", method: "POST", api: "pickup", url: "/donategoods/ticket" },
276		//Add Item
277		additem: { name: "additem", method: "POST", api: "pickup", url: "/donategoods/itemincrement" },
278		//Remove Item
279		removeitem: { name: "removeitem", method: "POST", api: "pickup", url: "/donategoods/itemdecrement" },
280		//log referral
281		logreferral: { name: "logreferral", method: "POST", api: "pickup", url: "/Location/LogReferral"},
282		//log referral
283        customerlead: { name: "customerlead", method: "POST", api: "pickup", url: "/donategoods/customerlead" },
284        //log Initial referral
285        initialcustomerlead: { name: "initialcustomerlead", method: "POST", api: "pickup", url: "/donategoods/initialcustomerlead" },
286		//Get advertising methods
287		admethods: {
288			name: "admethods", method: "GET", api: "pickup", url: "/donategoods/admethods",
289			defaults:
290			{
291				Territory_id: 20
292			}
293		},
294		
295		//VEHICLE API -------------------------------------------------------------------------------
296		vehiclelookup: { name: "vehiclelookup", method: "GET", api: "vehicle", url: "/donatevehicles/vin",
297			defaults: 
298			{
299				Vin: "2G1WT58N481251496",
300				ZipCode: "30115"
301			}
302		},
303		submitvehicleorder: { name: "submitvehicleorder", method: "POST", api: "vehicle", url: "/donatevehicles/ticket"},
304		makesandmodels: { name: "makesandmodels", method: "GET", api: "vehicle", url: "/DonateVehicles/Models",
305			defaults: 
306			{
307				manufacturerId: 0
308			}
309		},
310
311		// Re Supply Pickup API -------------------------------------------------------------------------------
312		logReSupplyPickupbuttonclick: { name: "logReSupplyPickupbutton", method: "POST", api: "log", url: "/ReSupplyPickup/LogButton" },
313		// My Donations API -------------------------------------------------------------------------------
314		logbuttonclick: { name: "logbutton", method: "POST", api: "log", url: "/MyDonations/LogButton" },
315		getdonationsummary: { name: "getdonationsummary", method: "GET", api: "pickup", url: "/MyDonations/GetDonationSummary" },
316		getpartnerdonationsummary: { name: "getpartnerdonationsummary", method: "GET", api: "pickup", url: "/MyDonations/GetPartnerDonationSummary" },
317		getdonationdetail: { name: "getdonationdetail", method: "GET", api: "pickup", url: "/MyDonations/GetDonationDetail" },
318		editpickup: { name: "editpickup", method: "POST", api: "pickup", url: "/DonateGoods/EditTicket" },
319		cancelpickup: { name: "cancelpickup", method: "POST", api: "pickup", url: "/DonateGoods/CancelTicket" },
320		cancelvehicle: { name: "cancelvehicle", method: "POST", api: "vehicle", url: "/DonateVehicles/CancelTicket" },
321		emailpickupwebreceipt: { name: "emailpickupwebreceipt", method: "POST", api: "pickup", url: "/DonateGoods/EmailPickupWebReceipt" },
322		emailpickupwebreceipttoemail: { name: "emailpickupwebreceipttoemail", method: "POST", api: "pickup", url: "/DonateGoods/EmailPickupWebReceiptToEmail" },
323		emaildropoffwebreceipt: { name: "emaildropoffwebreceipt", method: "POST", api: "pickup", url: "/DonateGoods/EmailDropOffWebReceipt" },
324		getdonationdetailfornextpickup: { name: "getdonationdetailfornextpickup", method: "GET", api: "pickup", url: "/MyDonations/GetDonationDetailForNextPickup" },
325		// Track The Truck API -----------------------------------------------------------------------------
326		logutilizationevent: { name: "logutilizationevent", method: "POST", api: "tracktruck", url: "/LogUtilizationEvent" },
327		donornotificationsenabled: { name: "donornotificationsenabled", method: "GET", api: "tracktruck", url: "/DonorNotificationsEnabled" },
328		gettruckstatus: { name: "gettruckstatus", method: "GET", api: "tracktruck", url: "/GetTruckStatus" },
329		getterritoryandarcsettings: { name: "getterritoryandarcsettings", method: "GET", api: "tracktruck", url: "/GetTerritoryAndARCSettings" },
330		getticketeta: { name: "getticketeta", method: "GET", api: "tracktruck", url: "/TicketETA" },
331		getarcnotificationsettings: { name: "getarcnotificationsettings", method: "GET", api: "tracktruck", url: "/TrackTheTruck/GetArcNotificationSettings" },
332		getpickupnotificationsetting: { name: "getpickupnotificationsetting", method: "GET", api: "tracktruck", url: "/TrackTheTruck/GetPickupNotificationSetting" },
333		updatepickupnotificationsetting: { name: "updatepickupnotificationsetting", method: "POST", api: "tracktruck", url: "/TrackTheTruck/UpdatePickupNotification" },
334		getlatestsurvey: { name: "getlatestsurvey", method: "GET", api: "tracktruck", url: "/api/Survey" },
335		savesurvey: { name: "savesurvey", method: "POST", api: "tracktruck", url: "/api/Survey" }
336	},
337
338	_doCompletionRoutine: function(endpoint, jqXHR, completeHandler)
339	{
340		if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
341		{
342			var apiResult = jqXHR.responseJSON ? jqXHR.responseJSON : $.parseJSON(jqXHR.responseText);
343
344			//ONLY CACHE GOOD RESULTS
345			satruck.config._persistApiResult(endpoint, apiResult);
346
347			if (completeHandler)
348				completeHandler(apiResult);
349		}
350		else
351		{
352			DN.Utils.log(jqXHR.statusText);
353
354			var apiResult = 
355			{ 
356				Success: false, 
357				HasError: true, 
358				ErrorMessage: jqXHR.statusText,
359				ErrorDetail: '',
360				Feedback: '',
361				RetVal: null
362			};
363					
364			if (completeHandler)
365				completeHandler(apiResult);
366		}
367	},
368
369	Login: function(username, password, completeHandler)
370	{
371		var url = this.donorhost + this.endpoints.login.url;
372
373		$.ajax(
374		{
375			url: url,
376			dataType: 'json',
377			data: { UserName: username, Password: password },
378			complete: function(jqXHR, textStatus)
379			{
380				satruck.api._doCompletionRoutine("login", jqXHR, completeHandler);
381			}
382		});
383	},
384
385	Fsa_Login: function(tid, aid, did, completeHandler)
386	{
387		var url = this.donorhost + this.endpoints.fsalogin.url;
388
389		$.ajax(
390		{
391			url: url,
392			dataType: 'json',
393			data: { Territory_id: tid, Arc_id: aid, Donor_id: did },
394			complete: function(jqXHR, textStatus)
395			{
396				satruck.api._doCompletionRoutine("fsalogin", jqXHR, completeHandler);
397			}
398		});
399	},
400
401	Logoff: function(donorUserId, completeHandler)
402	{
403		var url = this.donorhost + this.endpoints.logoff.url;
404
405		$.ajax(
406		{
407			url: url,
408			dataType: 'json',
409			data: { DonorUserId: donorUserId },
410			complete: function(jqXHR, textStatus)
411			{
412				satruck.api._doCompletionRoutine("logoff", jqXHR, completeHandler);
413			}
414		});
415	},
416
417	ChangePassword: function(donorUserId, password, token, completeHandler)
418    {
419        var oldPassword = password.oldpw ? password.oldpw.replace('#', '||poundhash||').replace('+', '||plussign||').replace('&', '||ampersand||') : "";
420        var newPassword = password.newpw.replace('#', '||poundhash||').replace('+', '||plussign||').replace('&', '||ampersand||');
421        token = token ? token : "";
422		//PUT
423		var url = this.donorhost + this.endpoints.changepassword.url +
424			"?DonorUserId=" + donorUserId +
425			"&NewPassword=" + newPassword + 
426            "&OldPassword=" + oldPassword +
427            "&Token=" + token + "";
428
429		// add existing password
430		// OldPassword
431		// NewPassword
432
433		$.ajax(
434		{
435			url: url,
436			contentType: 'application/json',
437			method: this.endpoints.changepassword.method,
438			complete: function(jqXHR, textStatus)
439			{
440				satruck.api._doCompletionRoutine("changepassword", jqXHR, completeHandler);
441			}
442		});
443	},
444
445	ForgotPassword: function(email, completeHandler)
446	{
447
448		var url = this.donorhost + this.endpoints.forgotpassword.url + 
449			"?Email=" + email;
450
451		$.ajax(
452		{
453			url: url,
454			dataType: 'json',
455			method: this.endpoints.forgotpassword.method,
456			complete: function(jqXHR, textStatus)
457			{
458				satruck.api._doCompletionRoutine("forgotpassword", jqXHR, completeHandler);
459			}
460		});
461
462	},
463
464    IsValidToken: function (token, completeHandler) {
465        var url = this.donorhost + this.endpoints.isvalidtoken.url;
466
467        $.ajax(
468            {
469                url: url,
470                dataType: 'json',
471                async: false,
472                data: { Token: token },
473                complete: function (jqXHR, textStatus) {
474                    satruck.api._doCompletionRoutine("isvalidtoken", jqXHR, completeHandler);
475                }
476            });
477    },
478
479	LoadProfile: function(donorUserId, completeHandler)
480	{
481		var url = this.donorhost + this.endpoints.loadprofile.url;
482
483		$.ajax(
484		{
485			url: url,
486			dataType: 'json',
487			async: false,
488			data: { DonorUserId: donorUserId },
489			complete: function(jqXHR, textStatus)
490			{
491				satruck.api._doCompletionRoutine("loadprofile", jqXHR, completeHandler);
492			}
493		});
494	},
495
496	UpdateProfile: function(donor, completeHandler)
497	{
498		//PUT
499		var url = this.donorhost + this.endpoints.updateprofile.url;
500
501		var sourceType = satruck.config._getSourceType();
502		
503		var donorinfo = 
504		{
505			Territory_id: donor.Territory_id,
506			Arc_id: donor.Arc_id,
507			Donor_id: donor.Donor_id,
508			ZipCode: donor.ZipCode,
509			FirstName: donor.FirstName,
510			LastName: donor.LastName,
511			HomePhone: donor.HomePhone,
512			DayPhone: donor.DayPhone,
513			AddressLine1: donor.AddressLine1,
514			AddressLine2: donor.AddressLine2,
515			City: donor.City,
516			State: donor.State,
517			OtherInfo: donor.OtherInfo,
518			Email: donor.Email,
519			IsBusiness: donor.IsBusiness,
520			NoSolicitation: donor.NoSolicitation,
521			NoServiceReminders: donor.NoServiceReminders,
522			DoNotEmailSolicitation: donor.DoNotEmailSolicitation,
523			DoNotCallSolicitation: donor.DoNotCallSolicitation,
524			DoNotTextSolicitation: donor.DoNotTextSolicitation,
525			DoNotEmailServiceReminders: donor.DoNotEmailServiceReminders,
526			DoNotCallServiceReminders: donor.DoNotCallServiceReminders,
527			DoNotTextServiceReminders: donor.DoNotTextServiceReminders,
528			DonorGUID: donor.DonorGUID,
529			HomeExtension: donor.HomeExtension,
530			DayExtension: donor.DayExtension,
531			MapInfo: donor.MapInfo,
532			IsSpecial: donor.IsSpecial,
533			CrossStreet: donor.CrossStreet,
534			Latitude: donor.Latitude,
535			Longitude: donor.Longitude,
536			Geocode_id: donor.Geocode_id,
537			GeocodeTime: donor.GeocodeTime,
538			GeocodeTimeString: donor.GeocodeTimeString,
539			GeocodeSource: donor.GeocodeSource,
540			GeocodeService: donor.GeocodeService,
541			GeocodeConfidence: donor.GeocodeConfidence,
542			GeocodeAttempts: donor.GeocodeAttempts,
543			DonorUserId: donor.DonorUserId,
544			SourceType: sourceType,
545			IsMobile: satruck.config.ismobile
546		};
547
548		$.ajax(
549		{
550			url: url,
551			data: JSON.stringify(donorinfo),
552			contentType: 'application/json',
553			method: this.endpoints.updateprofile.method,
554			complete: function(jqXHR, textStatus)
555			{
556				satruck.api._doCompletionRoutine("updateprofile", jqXHR, completeHandler);
557			}
558		});
559	},
560
561	RegisterNewUser: function(donor, password, completeHandler)
562	{
563		var url = this.donorhost + this.endpoints.register.url;
564
565		var sourceType = satruck.config._getSourceType();
566
567		var accountinfo = 
568		{
569			FirstName: donor.FirstName,
570			LastName: donor.LastName,
571			HomePhone: donor.HomePhone,
572			ZipCode: donor.ZipCode,
573			Email: donor.Email,
574			Password: password,
575			Territory_id: donor.Territory_id,
576			Arc_id: donor.Arc_id,
577			Donor_id: donor.Donor_id,
578			SourceType: sourceType,
579			IsMobile: satruck.config.ismobile
580		};
581
582		DN.Utils.postJSON
583		(
584			url,
585			JSON.stringify(accountinfo),
586			function(jqXHR, textStatus)
587			{
588				satruck.api._doCompletionRoutine("register", jqXHR, completeHandler);
589			}
590		);
591	},
592
593	GetDonors: function(territoryId, arcId, zipCode, homePhone, lastName, zipCode, completeHandler)
594	{
595		var url = this.donorhost + this.endpoints.donorslookup.url;
596
597		$.ajax(
598		{
599			url: url,
600			dataType: 'json',
601			data:
602			{
603				Territory_id: territoryId,
604				Arc_id: arcId,
605				ZipCode: zipCode,
606				HomePhone: homePhone,
607				LastName: lastName,
608				ZipCode: zipCode
609			},
610			complete: function(jqXHR, textStatus)
611			{
612				satruck.api._doCompletionRoutine("donorslookup", jqXHR, completeHandler);
613			}
614		});
615	},
616
617	UpdateSsn: function(territoryId, arcId, donorId, ssn, completeHandler)
618	{
619		//PUT
620		var url = this.donorhost + this.endpoints.updatessn.url + 
621			"?Territory_id=" + territoryId +
622			"&Arc_id=" + arcId +
623			"&Donor_id=" + donorId +
624			"&SSN=" + encodeURIComponent(ssn);
625
626		$.ajax(
627		{
628			url: url,
629			contentType: 'application/json',
630			method: "PUT",
631			complete: function(jqXHR, textStatus)
632			{
633				satruck.api._doCompletionRoutine("updatessn", jqXHR, completeHandler);
634			}
635		});
636	},
637
638	UnsubscribeEmail: function (id, isUnsubscribe, completeHandler) {
639	    //PUT
640	    var url = this.donorhost + this.endpoints.unsubscribeemail.url +
641			"?Id=" + id +
642	        "&Unsubscribe=" + isUnsubscribe;
643
644	    $.ajax(
645		{
646		    url: url,
647		    contentType: 'application/json',
648		    method: "PUT",
649		    complete: function (jqXHR, textStatus) {
650		        satruck.api._doCompletionRoutine("unsubscribeemail", jqXHR, completeHandler);
651		    }
652		});
653	},
654
655	InsertPartnerInfo: function (partner, completeHandler) {
656	    //POST
657	    var url = this.donorhost + this.endpoints.insertpartnerinfo.url +
658			"?PartnerUserId=" + partner.PartnerUserId +
659	        "&Territory_id=" + partner.Territory_id +
660	        "&Arc_id=" + partner.Arc_id +
661	        "&Donor_id=" + partner.Donor_id +
662	        "&Pickup_id=" + partner.Pickup_id;
663
664	    $.ajax(
665		{
666		    url: url,
667		    contentType: 'application/json',
668		    method: this.endpoints.insertpartnerinfo.method,
669		    complete: function (jqXHR, textStatus) {
670		        satruck.api._doCompletionRoutine("insertpartnerinfo", jqXHR, completeHandler);
671		    }
672		});
673	},
674
675	GetZipDetail: function(zip, completeHandler)
676	{
677		var url = "http://dss.satruck.org/ZipManagement/Home/ZipDetail";
678		//var url = this.dsshost + this.endpoints.zipdetail.url;
679
680		$.ajax(
681		{
682			url: url,
683			dataType: 'json',
684			data: { ZipCode: zip },
685			complete: function(jqXHR, textStatus)
686			{
687				satruck.api._doCompletionRoutine("zipdetail", jqXHR, completeHandler);
688			}
689		});
690    },
691
692    GetZipInfo: function (zip, isVehicleLookup, completeHandler) {
693        var url = this.zipinfohost + this.endpoints.zipinfo.url;
694
695        try {
696            var sourceType = satruck.config._getSourceType();
697            var entryUserId = 1;
698
699            if (sourceType != null) {
700                switch (sourceType) {
701                    case 0://WebSite 
702                        entryUserId = 1;
703                        break;
704                    case 1://Mobile version of web site via browser
705                        entryUserId = 11;
706                        break;
707                    case 2://Mobile version of web site through family store app
708                        entryUserId = 12;
709                        break;
710                }
711            }
712            else if (satruck.config.ismobile) {
713                entryUserId = 11;
714            }
715        }
716        catch (e) {
717        }
718
719
720        $.ajax(
721            {
722                url: url,
723                dataType: 'json',
724                data: { ZipCode: zip, IsVehicleLookup: isVehicleLookup, EntryUser_id: entryUserId },
725                complete: function (jqXHR, textStatus) {
726                    satruck.api._doCompletionRoutine("zipinfo", jqXHR, completeHandler);
727                }
728            });
729	},
730
731	CheckZipExists: function (zip, completeHandler) {
732		var url = this.zipinfohost + this.endpoints.zipexists.url + "?ZipCode=" + zip;
733
734		$.ajax(
735			{
736				url: url,
737				dataType: 'json',
738				data: { ZipCode: zip },
739				method: this.endpoints.zipexists.method,
740				complete: function (jqXHR, textStatus) {
741					satruck.api._doCompletionRoutine("zipexists", jqXHR, completeHandler);
742				}
743			});
744	},
745
746	CheckCallAheadAllowed: function (territoryId, arcId, completeHandler) {
747		var url = this.zipinfohost + this.endpoints.callaheadavailable.url +
748			"?TerritoryId=" + territoryId +
749			"&ArcId=" + arcId;
750		$.ajax(
751			{
752				url: url,
753				dataType: 'json',
754				async: false,
755				data: { TerritoryId: territoryId, ArcId: arcId },
756				method: this.endpoints.callaheadavailable.method,
757				complete: function (jqXHR, textStatus) {
758					satruck.api._doCompletionRoutine("callaheadavailable", jqXHR, completeHandler);
759				}
760			});
761	},
762
763	GetCallAheadMinutes: function (territoryId, completeHandler) {
764		var url = this.zipinfohost + this.endpoints.callaheadminutes.url +
765			"?TerritoryId=" + territoryId;
766		$.ajax(
767			{
768				url: url,
769				dataType: 'json',
770				async: false,
771				data: { TerritoryId: territoryId },
772				method: this.endpoints.callaheadminutes.method,
773				complete: function (jqXHR, textStatus) {
774					satruck.api._doCompletionRoutine("callaheadminutes", jqXHR, completeHandler);
775				}
776			});
777	},
778
779	CheckCovidFormActive: function (tid, zip, completeHandler) {
780		var url = this.zipinfohost + this.endpoints.zipcovidformactive.url;
781		$.ajax(
782			{
783				url: url,
784				dataType: 'json',
785				async: false,
786				data: {
787					TerritoryId: tid,
788					ZipCode: zip},
789				method: this.endpoints.zipcovidformactive.method,
790				complete: function (jqXHR, textStatus) {
791					satruck.api._doCompletionRoutine("zipcovidformactive", jqXHR, completeHandler);
792				}
793			});
794	},
795
796	CheckDonorExperienceSetting: function (territoryId, arcId, completeHandler) {
797		var url = this.donorhost + this.endpoints.donorexpsetting.url; 
798		$.ajax(
799			{
800				url: url,
801				dataType: 'json',
802				async: false,
803				data: { TerritoryId: territoryId, ArcId: arcId },
804				method: this.endpoints.donorexpsetting.method,
805				complete: function (jqXHR, textStatus) {
806					satruck.api._doCompletionRoutine("donorexpsetting", jqXHR, completeHandler);
807				}
808			});
809	},
810
811	GetCityState: function(zip, completeHandler)
812	{
813		var url = this.pickuphost + this.endpoints.citystate.url;
814		var _topHandler = completeHandler;
815
816		$.ajax(
817		{
818			url: url,
819			dataType: 'json',
820			data: { ZipCode: zip },
821			complete: function(jqXHR, textStatus)
822			{
823				if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
824				{
825					var apiResult = jqXHR.responseJSON ? jqXHR.responseJSON : $.parseJSON(jqXHR.responseText);
826					if (apiResult.Success == true)
827					{
828						satruck.api._doCompletionRoutine("citystate", jqXHR, _topHandler);
829					}
830					else
831					{
832						DN.Utils.log("CityState lookup trying 2nd attempt");
833						//Try #2
834						$.ajax(
835						{
836							url: url,
837							dataType: 'json',
838							data: { ZipCode: zip },
839							complete: function(jqXHR, textStatus)
840							{
841								if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
842								{
843									var apiResult = jqXHR.responseJSON ? jqXHR.responseJSON : $.parseJSON(jqXHR.responseText);
844									if (apiResult.Success == true)
845									{
846										satruck.api._doCompletionRoutine("citystate", jqXHR, _topHandler);
847									}
848									else
849									{
850										DN.Utils.log("CityState lookup trying 3rd attempt");
851										//Try #3
852										$.ajax(
853										{
854											url: url,
855											dataType: 'json',
856											data: { ZipCode: zip },
857											complete: function(jqXHR, textStatus)
858											{
859												if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
860												{
861													var apiResult = jqXHR.responseJSON ? jqXHR.responseJSON : $.parseJSON(jqXHR.responseText);
862													if (apiResult.Success == true)
863													{
864														satruck.api._doCompletionRoutine("citystate", jqXHR, _topHandler);
865													}
866													else
867													{
868														//Custom Error so UI can handle correctly
869														var apiResult = 
870														{ 
871															Success: false, 
872															HasError: true, 
873															ErrorMessage: 'CityState lookup failed 3 times',
874															ErrorDetail: 'zip:'+zip,
875															Feedback: 'nocitystate',
876															RetVal: null
877														};
878					
879														if (_topHandler)
880															_topHandler(apiResult);
881													}
882												}
883											}
884										});
885									}
886								}
887								else
888								{
889									satruck.api._doCompletionRoutine("citystate", jqXHR, _topHandler);
890								}
891							}
892						});
893					}
894				}
895				else
896				{
897					satruck.api._doCompletionRoutine("citystate", jqXHR, _topHandler);
898				}
899			}
900		});
901	},
902
903	GeocodeMapquest: function(street, zip, completeHandler)
904	{
905		var url = 'https://www.mapquestapi.com/geocoding/v1/address?key=ZfJnv63oSGudYxbVmJxyxuyDin2iaobb&location=' + street + ', ' + zip;
906
907		$.ajax(
908		{
909			url: url,
910			dataType: 'json',
911			complete: function(jqXHR, textStatus)
912			{
913				if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
914				{
915					var mapResult = jqXHR.responseJSON ? jqXHR.responseJSON : $.parseJSON(jqXHR.responseText);
916					
917					if (mapResult.results.length && mapResult.results[0].locations && mapResult.results[0].locations.length)
918					{
919						try
920						{
921							var _mqresult = mapResult.results[0].locations[0];
922							var _geocodeQualityCodeArray = _mqresult.geocodeQualityCode.split('');
923							if (_geocodeQualityCodeArray && _geocodeQualityCodeArray.length >= 5)
924							{
925								var _good = ((_geocodeQualityCodeArray[2].toUpperCase() == 'A' || _geocodeQualityCodeArray[2].toUpperCase() == 'B') && 
926									(_geocodeQualityCodeArray[3].toUpperCase() == 'A' || _geocodeQualityCodeArray[3].toUpperCase() == 'B') &&
927									(_geocodeQualityCodeArray[4].toUpperCase() == 'A' || _geocodeQualityCodeArray[4].toUpperCase() == 'B'));
928
929								if (_good)
930								{
931									var apiResult = 
932									{ 
933										Success: true, 
934										HasError: false, 
935										ErrorMessage: null,
936										ErrorDetail: null,
937										Feedback: null,
938										RetVal: 
939										{
940											Confidence: "Good",
941											AttemptedGeocodes: 1,
942											City: _mqresult.adminArea5,
943											Accuracy: 1,
944											Lat: _mqresult.displayLatLng.lat,
945											Lon: _mqresult.displayLatLng.lng,
946											Source: "mapquest",
947											Street: _mqresult.street,
948											ZipCode: _mqresult.postalCode
949										}
950									};
951									//ONLY CACHE GOOD RESULTS
952									satruck.config._persistApiResult("geocodemapquest", apiResult);
953
954									if (completeHandler)
955										completeHandler(apiResult);
956								}
957								else
958								{
959									DN.Utils.log(_mqresult.geocodeQualityCode);
960
961									var apiResult = 
962									{ 
963										Success: false, 
964										HasError: true, 
965										ErrorMessage: "innaccurate mapquest result: " + _mqresult.geocodeQualityCode,
966										ErrorDetail: '',
967										Feedback: '',
968										RetVal: null
969									};
970
971									if (completeHandler)
972										completeHandler(apiResult);
973								}
974							}
975							else
976							{
977								DN.Utils.log("unknown mapquest result format");
978
979								var apiResult = 
980								{ 
981									Success: false, 
982									HasError: true, 
983									ErrorMessage: "unknown mapquest result format",
984									ErrorDetail: '',
985									Feedback: '',
986									RetVal: null
987								};
988
989								if (completeHandler)
990									completeHandler(apiResult);
991							}
992						}
993						catch(err)
994						{
995							DN.Utils.log(err.message);
996
997							var apiResult = 
998							{ 
999								Success: false, 
1000								HasError: true, 
1001								ErrorMessage: err.message,
1002								ErrorDetail: '',
1003								Feedback: '',
1004								RetVal: null
1005							};
1006
1007							if (completeHandler)
1008								completeHandler(apiResult);
1009						}
1010					}
1011					else
1012					{
1013						DN.Utils.log("unknown mapquest result format");
1014
1015						var apiResult = 
1016						{ 
1017							Success: false, 
1018							HasError: true, 
1019							ErrorMessage: "unknown mapquest result format",
1020							ErrorDetail: '',
1021							Feedback: '',
1022							RetVal: null
1023						};
1024						
1025						if (completeHandler)
1026							completeHandler(apiResult);
1027					}
1028				}
1029				else
1030				{
1031					DN.Utils.log(jqXHR.statusText);
1032
1033					var apiResult = 
1034					{ 
1035						Success: false, 
1036						HasError: true, 
1037						ErrorMessage: jqXHR.statusText,
1038						ErrorDetail: '',
1039						Feedback: '',
1040						RetVal: null
1041					};
1042					
1043					if (completeHandler)
1044						completeHandler(apiResult);
1045				}
1046			}
1047		});
1048	},
1049
1050	GetRouteDefaults: function(territoryId, completeHandler)
1051	{
1052		var url = this.pickuphost + this.endpoints.routedefaults.url;
1053
1054		$.ajax(
1055		{
1056			url: url,
1057			dataType: 'json',
1058			data: { Territory_id: territoryId },
1059			complete: function(jqXHR, textStatus)
1060			{
1061				satruck.api._doCompletionRoutine("routedefaults", jqXHR, completeHandler);
1062			}
1063		});
1064	},
1065
1066	GetLocationListing: function(zip, completeHandler)
1067	{
1068		var url = this.pickuphost + this.endpoints.locationlist.url;
1069		
1070		$.ajax(
1071		{
1072			url: url,
1073			dataType: 'json',
1074			data: { Type: 3, ZipCode: zip },
1075			complete: function(jqXHR, textStatus)
1076			{
1077				satruck.api._doCompletionRoutine("locationlist", jqXHR, completeHandler);
1078			}
1079		});
1080	},
1081
1082	GetStoreListing: function (zip, completeHandler) {
1083		var url = this.pickuphost + this.endpoints.locationlist.url;
1084
1085		$.ajax(
1086			{
1087				url: url,
1088				dataType: 'json',
1089				data: { Type: 2, ZipCode: zip },
1090				complete: function (jqXHR, textStatus) {
1091					satruck.api._doCompletionRoutine("locationlist", jqXHR, completeHandler);
1092				}
1093			});
1094	},
1095
1096	GetFamilyStoreListing: function (zip,_otid, completeHandler) {
1097		var url = this.pickuphost + this.endpoints.locationlist.url;
1098
1099		$.ajax(
1100			{
1101				url: url,
1102				dataType: 'json',
1103				data: { Type: 2, ZipCode: zip, ArcStoresOnly: true, otid: _otid },
1104				complete: function (jqXHR, textStatus) {
1105					satruck.api._doCompletionRoutine("locationlist", jqXHR, completeHandler);
1106				}
1107			});
1108	},
1109
1110	GetCategories: function(territoryId, completeHandler)
1111	{
1112		var url = this.pickuphost + this.endpoints.categories.url;
1113		
1114		$.ajax(
1115		{
1116			url: url,
1117			dataType: 'json',
1118			data: { Territory_id: territoryId },
1119			complete: function(jqXHR, textStatus)
1120			{
1121				satruck.api._doCompletionRoutine("categories", jqXHR, completeHandler);
1122			}
1123		});
1124	},
1125
1126	GetSchedulingInfo: function(territoryId, arcId, sectorId, pickupSize, maxItemSize, completeHandler)
1127	{
1128		var url = this.pickuphost + this.endpoints.getdates.url;
1129		$.ajax(
1130		{
1131			url: url,
1132			dataType: 'json',
1133			data: 
1134			{
1135				Territory_id: territoryId, 
1136				Arc_id: arcId, 
1137				Sector_id: sectorId,
1138				PickupSize: pickupSize,
1139				MaxItemSize: maxItemSize,
1140				UseDefaultGroup: true 
1141			},
1142			complete: function(jqXHR, textStatus)
1143			{
1144				satruck.api._doCompletionRoutine("getdates", jqXHR, completeHandler);
1145			}
1146		});
1147    },
1148
1149    GetCommonInstructions: function (territoryId, completeHandler) {
1150        var url = this.pickuphost + this.endpoints.getinstructions.url;
1151
1152        $.ajax(
1153            {
1154                url: url,
1155                dataType: 'json',
1156                data: { Territory_id: territoryId },
1157                complete: function (jqXHR, textStatus) {
1158                    satruck.api._doCompletionRoutine("getinstructions", jqXHR, completeHandler);
1159                }
1160            });
1161    },
1162
1163	GetDonorInfo: function(territoryId, arcId, zipCode, homePhone, lastName, completeHandler)
1164	{
1165		var url = this.pickuphost + this.endpoints.donorlookup.url;
1166		
1167		$.ajax(
1168		{
1169			url: url,
1170			dataType: 'json',
1171			data: 
1172			{
1173				Territory_id: territoryId, 
1174				Arc_id: arcId, 
1175				ZipCode: zipCode,
1176				HomePhone: homePhone,
1177				LastName: lastName
1178			},
1179			complete: function(jqXHR, textStatus)
1180			{
1181				satruck.api._doCompletionRoutine("donorlookup", jqXHR, completeHandler);
1182			}
1183		});
1184	},
1185
1186	GetPickupExists: function(territoryId, arcId, donorId, scheduleDate, completeHandler)
1187	{
1188		var url = this.pickuphost + this.endpoints.pickupexists.url;
1189		
1190		$.ajax(
1191		{
1192			url: url,
1193			dataType: 'json',
1194			data: 
1195			{
1196				Territory_id: territoryId, 
1197				Arc_id: arcId, 
1198				Donor_id: donorId,
1199				ScheduleDate: scheduleDate
1200			},
1201			complete: function(jqXHR, textStatus)
1202			{
1203				satruck.api._doCompletionRoutine("pickupexists", jqXHR, completeHandler);
1204			}
1205		});
1206	},
1207
1208	Geocode: function(street, zipCode, territoryId, arcId, source, completeHandler)
1209	{
1210		var url = this.pickuphost + this.endpoints.geocode.url;
1211		
1212		$.ajax(
1213		{
1214			url: url,
1215			dataType: 'json',
1216			data: 
1217			{
1218				Street: street,
1219				ZipCode: zipCode,
1220				Territory_id: territoryId, 
1221				Arc_id: arcId, 
1222				ValidateFromARC:0,
1223				Referrer: source ? source : "SATruck"
1224			},
1225			complete: function(jqXHR, textStatus)
1226			{
1227				satruck.api._doCompletionRoutine("geocode", jqXHR, completeHandler);
1228			}
1229		});
1230	},
1231
1232	GetMakesAndModels: function(id, completeHandler)
1233	{
1234		var url = this.vehiclehost + this.endpoints.makesandmodels.url;
1235		
1236		$.ajax(
1237		{
1238			url: url,
1239			dataType: 'json',
1240			data: 
1241			{
1242				manufacturerId: id
1243			},
1244			complete: function(jqXHR, textStatus)
1245			{
1246				satruck.api._doCompletionRoutine("makesandmodels", jqXHR, completeHandler);
1247			}
1248		});
1249	},
1250
1251	GetVehicleByVin: function(vin, zipCode, completeHandler)
1252	{
1253		var url = this.vehiclehost + this.endpoints.vehiclelookup.url;
1254		
1255		$.ajax(
1256		{
1257			url: url,
1258			dataType: 'json',
1259			data: 
1260			{
1261				Vin: vin,
1262				ZipCode: zipCode
1263			},
1264			complete: function(jqXHR, textStatus)
1265			{
1266				satruck.api._doCompletionRoutine("vehiclelookup", jqXHR, completeHandler);
1267			}
1268		});
1269	},
1270
1271	SubmitPickupOrder: function(donation, donor, completeHandler)
1272	{
1273		var url = this.pickuphost + this.endpoints.submitpickup.url;
1274		
1275		var pickupticket = 
1276		{
1277			ForceNewDonor: donation.ForceNewDonor,
1278			Territory_id: donation.tid,
1279			Arc_id: donation.aid,
1280			Donor_id: donation.did,
1281			ZipCode: donor.ZipCode,
1282			FirstName: donor.FirstName,
1283			LastName: donor.LastName,
1284			HomePhone: donor.HomePhone,
1285			DayPhone: donor.DayPhone,
1286			AddressLine1: donor.AddressLine1,
1287			AddressLine2: donor.AddressLine2,
1288			City: donor.City,
1289			State: donor.State,
1290			OtherInfo: donor.OtherInfo,
1291            Email: donor.Email,
1292            IsBusiness: donor.IsBusiness,
1293            CallAheadMinutes: donation.CallAheadTime,
1294			NoSolicitation: donor.NoSolicitation,
1295			NoServiceReminders: donor.NoServiceReminders,
1296			DoNotEmailSolicitation: donor.DoNotEmailSolicitation,
1297			DoNotCallSolicitation: donor.DoNotCallSolicitation,
1298			DoNotTextSolicitation: donor.DoNotTextSolicitation,
1299			DoNotEmailServiceReminders: donor.DoNotEmailServiceReminders,
1300			DoNotCallServiceReminders: donor.DoNotCallServiceReminders,
1301			DoNotTextServiceReminders: donor.DoNotTextServiceReminders,
1302			DonorGUID: donor.DonorGUID,
1303			Pickup_id: 0,
1304			DonatedItems: donation.itemsString,
1305			DonatedItemsArray: donation.items,
1306			Instructions: donation.instructions,
1307			ScheduleDate: donation.scheduleDate,
1308			Sector_id: donation.sectorId,
1309			Group_id: donation.groupId,
1310			Route_id: 0,
1311			PickupSize: donation.pickupSize,
1312			IPAddress: satruck.userHostAddress,
1313			HasCustomItem: donation.hasCustomItem,
1314			SourceType: donation.sourceType,
1315			IsMobile: donation.isMobile,
1316			HomeExtension: donor.HomeExtension,
1317			DayExtension: donor.DayExtension,
1318			MapInfo: donor.MapInfo,
1319			IsSpecial: donor.IsSpecial,
1320			CrossStreet: donor.CrossStreet,
1321			Latitude: donor.Latitude,
1322			Longitude: donor.Longitude,
1323			Geocode_id: donor.Geocode_id,
1324			GeocodeTime: donor.GeocodeTime,
1325			GeocodeTimeString: donor.GeocodeTimeString,
1326			GeocodeSource: donor.GeocodeSource,
1327			GeocodeService: donor.GeocodeService,
1328			GeocodeConfidence: donor.GeocodeConfidence,
1329			GeocodeAttempts: donor.GeocodeAttempts
1330        };
1331
1332		DN.Utils.postJSON
1333		(
1334			url,
1335			//JSON.stringify({ PickupTicket: pickupticket, SourceType: 0, IsMobile: false }),
1336			JSON.stringify(pickupticket),
1337			function(jqXHR, textStatus)
1338			{
1339				satruck.api._doCompletionRoutine("submitpickup", jqXHR, completeHandler);
1340			}
1341		);
1342		
1343	},
1344
1345	SubmitVehicleOrder: function(donation, donor, completeHandler)
1346	{
1347		var url = this.vehiclehost + this.endpoints.submitvehicleorder.url;
1348		
1349		var vehicleticket = 
1350		{
1351			ForceNewDonor: donation.forceNewDonor,
1352			Territory_id: donation.tid,
1353			Arc_id: donation.aid,
1354			Donor_id: donation.did,
1355			ZipCode: donor.ZipCode,
1356			FirstName: donor.FirstName,
1357			LastName: donor.LastName,
1358			HomePhone: donor.HomePhone,
1359			DayPhone: donor.DayPhone,
1360			AddressLine1: donor.AddressLine1,
1361			AddressLine2: donor.AddressLine2,
1362			City: donor.City,
1363			State: donor.State,
1364			OtherInfo: donor.OtherInfo,
1365			Email: donor.Email,
1366			IsBusiness: donor.IsBusiness,
1367			NoSolicitation: donor.NoSolicitation,
1368			NoServiceReminders: donor.NoServiceReminders,
1369			DoNotEmailSolicitation: donor.DoNotEmailSolicitation,
1370			DoNotCallSolicitation: donor.DoNotCallSolicitation,
1371			DoNotTextSolicitation: donor.DoNotTextSolicitation,
1372			DoNotEmailServiceReminders: donor.DoNotEmailServiceReminders,
1373			DoNotCallServiceReminders: donor.DoNotCallServiceReminders,
1374			DoNotTextServiceReminders: donor.DoNotTextServiceReminders,
1375			DonorGUID: donor.DonorGUID,
1376			HomeExtension: donor.HomeExtension,
1377			DayExtension: donor.DayExtension,
1378			MapInfo: donor.MapInfo,
1379			IsSpecial: donor.IsSpecial,
1380			CrossStreet: donor.CrossStreet,
1381			Latitude: donor.Latitude,
1382			Longitude: donor.Longitude,
1383			Geocode_id: donor.Geocode_id,
1384			GeocodeTime: donor.GeocodeTime,
1385			GeocodeTimeString: donor.GeocodeTimeString,
1386			GeocodeSource: donor.GeocodeSource,
1387			GeocodeService: donor.GeocodeService,
1388			GeocodeConfidence: donor.GeocodeConfidence,
1389			GeocodeAttempts: donor.GeocodeAttempts,
1390
1391			VehicleZipCode: donation.vehicleZipCode,
1392			Pickup_id: 0,
1393			VehicleType: donation.vehicleType,
1394			VehicleTypeName: donation.vehicleTypeName,
1395	        VehicleYear: donation.vehicleYear,
1396			VehicleManufacturer: donation.make,
1397			VehicleStyle: donation.model,
1398			VIN: donation.vin,
1399			AdvertismentMethod: donation.adSource,
1400			AdditionalInfo: donation.additionalInfo,
1401			VehicleColor: donation.color,
1402			VehiclePickupNotes: donation.notes,
1403			ContactPreference: donation.contactPreference,
1404			LocationAddress: donation.vehicleAddress,
1405			LocationCity: donation.vehicleCity,
1406			LocationState: donation.vehicleState,
1407			LocationZipCode: donation.vehicleZipCode,
1408			LocationLatitude: donation.vehicleLatitude,
1409			LocationLongitude: donation.vehicleLongitude,
1410			License: donation.tagNumber
1411
1412			//IPAddress: satruck.userHostAddress,
1413			//SourceType: donation.sourceType,
1414			//IsMobile: donation.isMobile
1415		};
1416
1417		DN.Utils.postJSON
1418		(
1419			url,
1420			//JSON.stringify({ PickupTicket: pickupticket, SourceType: 0, IsMobile: false }),
1421			JSON.stringify(vehicleticket),
1422			function(jqXHR, textStatus)
1423			{
1424				satruck.api._doCompletionRoutine("submitvehicleorder", jqXHR, completeHandler);
1425			}
1426		);
1427		
1428	},
1429
1430	SubmitWorkflowData: function(wip)
1431	{
1432		var url = this.endpoints.submitworkflow.url;
1433
1434		var data = { Wip_id: wip.id, LogItem: JSON.stringify(wip) };
1435        
1436		try
1437		{
1438			$.ajax(
1439			{
1440				url: url,
1441				type: 'POST',
1442				data: JSON.stringify(data),
1443				global: false,
1444				contentType: 'application/json; charset=utf-8',
1445				error: function(jqXHR, textStatus, errorThrown )
1446				{
1447					//var t = jqXHR;
1448				},
1449				complete: function(jqXHR, textStatus)
1450				{
1451                   //var t = jqXHR;
1452				}
1453			});	
1454		}
1455		catch(er)
1456		{
1457		}
1458    },
1459
1460	LogReferral: function(wip)
1461	{
1462		var url = this.pickuphost + this.endpoints.logreferral.url;
1463
1464		var d = 
1465		{ 
1466			Zip: wip.zip, 
1467			PickupSize: wip.donation.pickupSize, 
1468			Referred: wip.donation.referred, 
1469			ToStore: false, 
1470			IsDonorRequest: false, 
1471			IsUnservicedRequest: false 
1472		};
1473		
1474		DN.Utils.postJSON
1475		(
1476			url,
1477			JSON.stringify(d),
1478			function(jqXHR, textStatus)
1479			{
1480				satruck.api._doCompletionRoutine("logreferral", jqXHR);
1481			}
1482		);
1483	},
1484
1485	AddItem: function(territoryId, arcId, pickupId, itemId, qty, completeHandler)
1486	{
1487		var url = this.pickuphost + this.endpoints.additem.url + 
1488			"?Territory_id=" + territoryId + 
1489			"&Arc_id=" + arcId + 
1490			"&Pickup_id=" + pickupId + 
1491			"&Item_id=" + itemId + 
1492			"&Qty=" + qty + "";
1493
1494		$.ajax(
1495		{
1496			url: url,
1497			dataType: 'json',
1498			method: 'POST',
1499			complete: function(jqXHR, textStatus)
1500			{
1501				satruck.api._doCompletionRoutine("additem", jqXHR, completeHandler);
1502			}
1503		});
1504
1505	},
1506
1507	RemoveItem: function(territoryId, arcId, pickupId, itemId, qty, completeHandler)
1508	{
1509		
1510		var url = this.pickuphost + this.endpoints.removeitem.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId + "&Item_id=" + itemId + "&Qty=" + qty + "";
1511
1512		$.ajax(
1513		{
1514			url: url,
1515			dataType: 'json',
1516			method: 'POST',
1517			complete: function(jqXHR, textStatus)
1518			{
1519				satruck.api._doCompletionRoutine("removeitem", jqXHR, completeHandler);
1520			}
1521		});
1522
1523	},
1524
1525	ConfirmationEmail: function (name, contactEmail, toEmail, address, zip, message, reason, phone, completeHandler) {
1526	    var url = this.donorhost + this.endpoints.confirmationemail.url;
1527
1528	    var confirmaitonEmail =
1529		{
1530		    Name: name,
1531		    Message: message,
1532		    Address: address,
1533		    ZipCode: zip,
1534		    ContactEmail: contactEmail,
1535			ToEmail: toEmail,
1536			Reason: reason,
1537		    Phone: phone
1538		};
1539
1540	    DN.Utils.postJSON
1541		(
1542			url,
1543			JSON.stringify(confirmaitonEmail),
1544			function (jqXHR, textStatus) {
1545			    satruck.api._doCompletionRoutine("confirmationemail", jqXHR, completeHandler);
1546			}
1547		);
1548
1549	},
1550
1551	ContactSubmit: function(donorId, name, contactEmail, toEmail, address, zip, message, reason, reasonName, phone, locationTerritoryId, locationId, locationZip, locationName, completeHandler)
1552	{
1553		var url = this.donorhost + this.endpoints.contactsubmit.url;
1554		//var url = 'http://satruck.dev/apidonor' + this.endpoints.contactsubmit.url;
1555
1556		var contactForm = 
1557		{
1558			DonorId: donorId,
1559			Name: name, 
1560			Message: message,
1561            Address: address,
1562			ZipCode: zip, 
1563			ContactEmail: contactEmail,
1564			ToEmail: toEmail,
1565			Reason: reason,
1566			ReasonName: reasonName,
1567			Phone: phone,
1568			LocationTerritoryId: locationTerritoryId,
1569			LocationId: locationId,
1570			LocationZip: locationZip,
1571			LocationName: locationName
1572		};
1573
1574		DN.Utils.postJSON
1575		(
1576			url,
1577			JSON.stringify(contactForm),
1578			function(jqXHR, textStatus)
1579			{
1580				satruck.api._doCompletionRoutine("contactsubmit", jqXHR, completeHandler);
1581			}
1582		);
1583
1584	},
1585
1586	GetFAQ: function (territoryId, completeHandler) {
1587		var url = this.donorhost + this.endpoints.getfaq.url + "?tid=" + territoryId;
1588
1589		$.ajax(
1590			{
1591				url: url,
1592				complete(jqXHR, textStatus) {
1593					satruck.api._doCompletionRoutine("getfaq", jqXHR, completeHandler);
1594				}
1595			});
1596	},
1597
1598	LogContactAction: function (eventTime, action, faqId, faqText, territoryId, arcId, userId, ipAddress) {
1599		var url = this.logginghost + this.endpoints.contactaction.url;
1600		var contactForm =
1601		{
1602			EventTime: eventTime,
1603			Action: action,
1604			FaqId: faqId,
1605			FaqText: faqText,
1606			TerritoryId: territoryId,
1607			ArcId: arcId,
1608			UserId: userId,
1609			IpAddress: ipAddress
1610		};
1611
1612		DN.Utils.postJSON
1613			(
1614				url,
1615				JSON.stringify(contactForm),
1616				null
1617			);
1618
1619	},
1620
1621    InitialCustomerLead: function (territoryId, arcId, donorId, response, other, time, completeHandler) {
1622        var url = this.pickuphost + this.endpoints.initialcustomerlead.url;
1623
1624        var customerLeadForm =
1625        {
1626            Territory_id: territoryId,
1627            Arc_id: arcId,
1628            Donor_id: donorId,
1629            Response: response,
1630            Other: other,
1631            TimeStamp: time
1632        };
1633
1634        DN.Utils.postJSON
1635            (
1636                url,
1637                JSON.stringify(customerLeadForm),
1638                function (jqXHR, textStatus) {
1639                    satruck.api._doCompletionRoutine("initialcustomerlead", jqXHR, completeHandler);
1640                }
1641            );
1642
1643    },
1644
1645	CustomerLead: function(territoryId, arcid, pickupId, response, other, time, initialRowId, completeHandler)
1646	{
1647		var url = this.pickuphost + this.endpoints.customerlead.url;
1648
1649		var customerLeadForm = 
1650		{
1651			Territory_id: territoryId,
1652            Arc_id: arcid,
1653			Pickup_id: pickupId,
1654			Response: response,
1655			Other: other,
1656            TimeStamp: time,
1657            initialRowId: initialRowId
1658		};
1659
1660		DN.Utils.postJSON
1661		(
1662			url,
1663			JSON.stringify(customerLeadForm),
1664			function(jqXHR, textStatus)
1665			{
1666				satruck.api._doCompletionRoutine("customerlead", jqXHR, completeHandler);
1667			}
1668		);
1669
1670	},
1671
1672	AdMethods: function (territoryId, completeHandler) {
1673		var url = this.pickuphost + this.endpoints.admethods.url;
1674
1675		$.ajax(
1676		{
1677			url: url,
1678			dataType: 'json',
1679			data: { Territory_id: territoryId },
1680			complete: function (jqXHR, textStatus) {
1681				satruck.api._doCompletionRoutine("admethods", jqXHR, completeHandler);
1682			}
1683		});
1684	},
1685
1686	LogDonorInfo: function (terrArcDonPickId, donorUserId, generic1, generic2, generic3, time, message, completeHandler)
1687	{
1688		var url = this.logginghost + this.endpoints.logdonorinfo.url;
1689
1690		var donorinfo = 
1691		{
1692		    TerrArcDonPickId: terrArcDonPickId,
1693		    DonorUserId: donorUserId,
1694			Generic1: generic1,
1695			Generic2: generic2,
1696			Generic3: generic3,
1697			EvenTime: null,         //AJ: Changed to null because the time that was being passed wass incorrect so now doing doing on back end. Needs to eventually be removed and updated in all projects
1698			Message: message
1699		};
1700
1701		DN.Utils.postJSON
1702		(
1703			url,
1704			JSON.stringify(donorinfo),
1705			function(jqXHR, textStatus)
1706			{
1707				satruck.api._doCompletionRoutine("logdonorinfo", jqXHR, completeHandler);
1708			}
1709		);
1710
1711	},
1712
1713	LogButtonClick: function(donorUserId, donationType, territoryId, arcId, donorId, donationId, buttonClicked, completeHandler)
1714	{
1715		var url = this.logginghost +this.endpoints.logbuttonclick.url;
1716
1717		var donorinfo =
1718		{
1719			DonorUserId: donorUserId,
1720			DonationType: donationType,
1721			Territory_id: territoryId,
1722			Arc_id: arcId,
1723			Donor_id: donorId,
1724			Donation_id: donationId,
1725			ButtonClicked: buttonClicked
1726		};
1727
1728		DN.Utils.postJSON
1729		(
1730			url,
1731			JSON.stringify(donorinfo),
1732			function(jqXHR, textStatus)
1733			{
1734				satruck.api._doCompletionRoutine("logbuttonclick", jqXHR, completeHandler);
1735			}
1736		);
1737	},
1738
1739	LogReSupplyPickupbuttonclick: function(donorUserId, donationType, territoryId, arcId, donorId, donationId, buttonClicked,zipcode, completeHandler)
1740	{
1741		var url = this.logginghost + this.endpoints.logReSupplyPickupbuttonclick.url;
1742
1743		var donorinfo =
1744		{
1745			DonorUserId: donorUserId,
1746			DonationType: donationType,
1747			Territory_id: territoryId,
1748			Arc_id: arcId,
1749			Donor_id: donorId,
1750			Donation_id: donationId,
1751			ButtonClicked: buttonClicked,
1752			ZipCode: zipcode
1753		};
1754
1755		DN.Utils.postJSON
1756		(
1757			url,
1758			JSON.stringify(donorinfo),
1759			function(jqXHR, textStatus)
1760			{
1761				satruck.api._doCompletionRoutine("logReSupplyPickupbuttonclick", jqXHR, completeHandler);
1762			}
1763		);
1764	},
1765
1766	GetDonationSummary: function (donorUserId, pageNumber, pageSize, completeHandler)
1767	{
1768		var url = this.pickuphost + this.endpoints.getdonationsummary.url + "?donorUserId=" + donorUserId + "&PageNumber=" + pageNumber + "&PageSize=" + pageSize;
1769
1770		$.ajax(
1771		{
1772			url:url,
1773			dataType: 'json',
1774			complete: function (jqXHR, textStatus) {
1775				satruck.api._doCompletionRoutine("getdonationsummary", jqXHR, completeHandler);
1776			}
1777		});
1778
1779	},
1780
1781	GetPartnerDonationSummary: function (partnerUserId, pageNumber, pageSize, completeHandler) {
1782		var url = this.pickuphost + this.endpoints.getpartnerdonationsummary.url + "?PartnerUserId=" + partnerUserId + "&PageNumber=" + pageNumber + "&PageSize=" + pageSize;
1783
1784	    $.ajax(
1785		{
1786		    url: url,
1787		    dataType: 'json',
1788		    complete: function (jqXHR, textStatus) {
1789		        satruck.api._doCompletionRoutine("getpartnerdonationsummary", jqXHR, completeHandler);
1790		    }
1791		});
1792
1793	},
1794
1795	GetDonationDetail: function(donationType, territoryId, arcId, donationId, completeHandler)
1796	{
1797		var url = this.pickuphost + this.endpoints.getdonationdetail.url + "?DonationType=" + donationType + "&Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Donation_id=" + donationId;
1798
1799		$.ajax(
1800		{
1801			url: url,
1802			dataType: 'json',
1803			complete: function (jqXHR, textStatus) {
1804				satruck.api._doCompletionRoutine("getdonationdetail", jqXHR, completeHandler);
1805			}
1806		});
1807	},
1808
1809	GetDonationDetailForNextPickup: function (territoryId, arcId, donorId, completeHandler) {
1810		var url = this.pickuphost + this.endpoints.getdonationdetailfornextpickup.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Donor_id=" + donorId;
1811
1812		$.ajax(
1813			{
1814				url: url,
1815				dataType: 'json',
1816				complete: function (jqXHR, textStatus) {
1817					satruck.api._doCompletionRoutine("getdonationdetailfornextpickup", jqXHR, completeHandler);
1818				}
1819			});
1820	},
1821
1822	EditPickupOrder: function (donation, donor, sourceType, isMobile, completeHandler) {
1823
1824		var url = this.pickuphost + this.endpoints.editpickup.url;
1825
1826		var pickupticketedits =
1827		{
1828			ForceNewDonor: donation.forceNewDonor,
1829			Territory_id: donation.DonationDetails.Territory_id,
1830			Arc_id: donation.DonationDetails.Arc_id,
1831			Donor_id: donation.DonationDetails.Donor_id,
1832			ZipCode: donation.DonationDetails.ZipCode,
1833			FirstName: !donor.IsPartnerUser ? donor.FirstName : donation.DonationDetails.FirstName,
1834			LastName: !donor.IsPartnerUser ? donor.LastName : donation.DonationDetails.LastName,
1835			HomePhone: !donor.IsPartnerUser ? donor.HomePhone : donation.DonationDetails.HomePhone,
1836			DayPhone: !donor.IsPartnerUser ? donor.DayPhone : donation.DonationDetails.DayPhone,
1837			AddressLine1: !donor.IsPartnerUser ? donor.AddressLine1 : donation.DonationDetails.AddressLine1,
1838			AddressLine2: !donor.IsPartnerUser ? donor.AddressLine2 : donation.DonationDetails.AddressLine2,
1839			City: !donor.IsPartnerUser ? donor.City : donation.DonationDetails.City,
1840			State: !donor.IsPartnerUser ? donor.State : donation.DonationDetails.State,
1841			OtherInfo: donor.OtherInfo,
1842			Email: !donor.IsPartnerUser ? donor.Email : donation.DonationDetails.Email,
1843			IsBusiness: donor.IsBusiness,
1844			NoSolicitation: donor.NoSolicitation,
1845			NoServiceReminders: donor.NoServiceReminders,
1846			DoNotEmailSolicitation: donor.DoNotEmailSolicitation,
1847			DoNotCallSolicitation: donor.DoNotCallSolicitation,
1848			DoNotTextSolicitation: donor.DoNotTextSolicitation,
1849			DoNotEmailServiceReminders: donor.DoNotEmailServiceReminders,
1850			DoNotCallServiceReminders: donor.DoNotCallServiceReminders,
1851			DoNotTextServiceReminders: donor.DoNotTextServiceReminders,
1852			DonorGUID: donor.DonorGuid,
1853			Pickup_id: donation.DonationTypeSummary.Pickup_id,
1854			DonatedItems: donation.DonationDetails.DonationTypeDetail.Items,
1855            DonatedItemsArray: donation.DonationDetails.DonationTypeDetail.PickupOrderItems,
1856            Instructions: donation.DonationDetails.DonationTypeDetail.Instructions,
1857            CallAheadMinutes: donation.DonationDetails.DonationTypeDetail.CallAheadTime,
1858			ScheduleDate: donation.DonationDetails.DonationTypeDetail.StatusDate,
1859			Sector_id: donation.DonationDetails.DonationTypeDetail.Sector_id,
1860			Group_id: donation.DonationDetails.DonationTypeDetail.Group_id,
1861			Route_id: 0,
1862			PickupSize: donation.DonationDetails.DonationTypeDetail.PickupSize,
1863			IPAddress: satruck.userHostAddress,
1864			HasCustomItem: donation.DonationDetails.DonationTypeDetail.HasCustomItem,
1865			SourceType: sourceType,
1866			IsMobile: isMobile,
1867			HomeExtension: donor.HomeExtension,
1868			DayExtension: donor.DayExtension,
1869			MapInfo: donor.MapInfo,
1870			IsSpecial: donor.IsSpecial,
1871			CrossStreet: donor.CrossStreet,
1872			Latitude: donor.Latitude,
1873			Longitude: donor.Longitude,
1874			Geocode_id: donor.Geocode_id,
1875			GeocodeTime: donor.GeocodeTime,
1876			GeocodeTimeString: donor.GeocodeTimeString,
1877			GeocodeSource: donor.GeocodeSource,
1878			GeocodeService: donor.GeocodeService,
1879			GeocodeConfidence: donor.GeocodeConfidence,
1880			GeocodeAttempts: donor.GeocodeAttempts
1881		};
1882
1883		$.ajax(
1884		{
1885			url: url,
1886			data: JSON.stringify(pickupticketedits),
1887			headers: {
1888				'Accept': 'application/json',
1889				'Content-Type': 'application/json'
1890			},
1891			contentType: "json",
1892			type: "POST",
1893			complete: function (jqXHR, textStatus) {
1894				satruck.api._doCompletionRoutine("editpickup", jqXHR, completeHandler);
1895			}
1896		});
1897
1898	},
1899
1900	CancelPickup: function(territoryId, arcId, pickupId, sourceType, isMobile, completeHandler)
1901	{
1902		var url = this.pickuphost + this.endpoints.cancelpickup.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId + "&SourceType=" + sourceType+ "&isMobile=" + isMobile;
1903
1904		$.ajax(
1905		{
1906			url: url,
1907			contentType: "json",
1908			method: 'POST',
1909			complete: function (jqXHR, textStatus) {
1910				satruck.api._doCompletionRoutine("cancelpickup", jqXHR, completeHandler);
1911			}
1912		});
1913
1914	},
1915
1916	CancelVehicle: function(territoryId, arcId, pickupId, sourceType, isMobile, completeHandler)
1917	{
1918		var url = this.vehiclehost + this.endpoints.cancelvehicle.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId + "&SourceType=" + sourceType + "&isMobile=" + isMobile;
1919
1920		$.ajax(
1921		{
1922			url: url,
1923			contentType: "json",
1924			method: 'POST',
1925			complete: function (jqXHR, textStatus) {
1926				satruck.api._doCompletionRoutine("cancelvehicle", jqXHR, completeHandler);
1927			}
1928		});
1929	},
1930
1931	EmailPickupWebReceipt: function(territoryId, arcId, pickupId, completeHandler)
1932	{
1933		var url = this.pickuphost + this.endpoints.emailpickupwebreceipt.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId;
1934
1935		$.ajax(
1936		{
1937			url: url,
1938			dataType: 'json',
1939			method: 'POST',
1940			complete: function (jqXHR, textStatus) {
1941				satruck.api._doCompletionRoutine("emailpickupwebreceipt", jqXHR, completeHandler);
1942			}
1943		});
1944	},
1945
1946	EmailPickupWebReceiptToEmail: function (territoryId, arcId, pickupId, email, completeHandler) {
1947	    var url = this.pickuphost + this.endpoints.emailpickupwebreceipttoemail.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId + "&Email=" + email;
1948
1949	    $.ajax(
1950		{
1951		    url: url,
1952		    dataType: 'json',
1953		    method: 'POST',
1954		    complete: function (jqXHR, textStatus) {
1955		        satruck.api._doCompletionRoutine("emailpickupwebreceipttoemail", jqXHR, completeHandler);
1956		    }
1957		});
1958	},
1959
1960	EmailDropOffWebReceipt: function (dropoffTicketId, completeHandler)
1961	{
1962		var url = this.pickuphost + this.endpoints.emaildropoffwebreceipt.url + "?DropOffTicketId=" + dropoffTicketId;
1963
1964		$.ajax(
1965		{
1966			url: url,
1967			dataType: 'json',
1968			method: 'POST',
1969			complete: function (jqXHR, textStatus) {
1970				satruck.api._doCompletionRoutine("emaildropoffwebreceipt", jqXHR, completeHandler);
1971			}
1972		});
1973	},
1974
1975	GetTruckStatus: function (territoryId, arcId, pickupId, completeHandler) {
1976		var url = this.tracktruckhost + this.endpoints.gettruckstatus.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId;
1977
1978		$.ajax(
1979			{
1980				url: url,
1981				dataType: 'json',
1982				method: 'GET',
1983				complete: function (jqXHR, textStatus) {
1984					satruck.api._doCompletionRoutine("gettruckstatus", jqXHR, completeHandler);
1985				}
1986			});
1987	},
1988
1989	DonorNotificationsEnabled: function (territoryId, completeHandler) {
1990		var url = this.tracktruckhost + this.endpoints.donornotificationsenabled.url + "?Territory_id=" + territoryId;
1991
1992		$.ajax(
1993			{
1994				url: url,
1995				dataType: 'json',
1996				method: 'GET',
1997				complete: function (jqXHR, textStatus) {
1998					satruck.api._doCompletionRoutine("donornotificationsenabled", jqXHR, completeHandler);
1999				}
2000			});
2001	},
2002
2003	GetTrackTruckTerritoryAndARCSettings: function (territoryId, arcId, completeHandler) {
2004		var url = this.tracktruckhost + this.endpoints.getterritoryandarcsett
2004ings.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId;
2005
2006		$.ajax(
2007			{
2008				url: url,
2009				dataType: 'json',
2010				method: 'GET',
2011				complete: function (jqXHR, textStatus) {
2012					satruck.api._doCompletionRoutine("getterritoryandarcsettings", jqXHR, completeHandler);
2013				}
2014			});
2015	},
2016
2017	GetTicketETA: function (territoryId, arcId, pickupId, completeHandler) {
2018		var url = this.tracktruckhost + this.endpoints.getticketeta.url + "?Territory_id=" + territoryId + "&Arc_id=" + arcId + "&Pickup_id=" + pickupId;
2019
2020		$.ajax(
2021			{
2022				url: url,
2023				dataType: 'json',
2024				method: 'GET',
2025				complete: function (jqXHR, textStatus) {
2026					satruck.api._doCompletionRoutine("getticketeta", jqXHR, completeHandler);
2027				}
2028			});
2029	},
2030
2031	LogUtilizationEvent: function (territoryId, arcId, donorId, pickupId, eventData, sourceTrackingTag,referrer, eventId, completeHandler) {
2032		var url = this.tracktruckhost + this.endpoints.logutilizationevent.url + "?territoryId=" + territoryId + "&arcId=" + arcId + "&donorId=" + donorId + "&pickupId=" + pickupId + "&eventData=" + eventData + "&sourceTrackingTag=" + sourceTrackingTag + "&referrer=" + referrer + "&eventId=" + eventId;
2033
2034		$.ajax(
2035			{
2036				url: url,
2037				dataType: 'json',
2038				method: 'POST',
2039				complete: function (jqXHR, textStatus) {
2040					satruck.api._doCompletionRoutine("logutilizationevent", jqXHR, completeHandler);
2041				}
2042			});
2043	},
2044
2045	GetDonorInfoFromString: function (donorInfoString, completeHandler) {
2046		var url = this.donorhost + this.endpoints.getdonorinfofromstring.url + "?donorInfoString=" + donorInfoString;
2047
2048		$.ajax(
2049			{
2050				url: url,
2051				dataType: 'json',
2052				method: 'GET',
2053				complete: function (jqXHR, textStatus) {
2054					satruck.api._doCompletionRoutine("getdonorinfofromstring", jqXHR, completeHandler);
2055				}
2056			});
2057	},
2058
2059	GetArcNotificationSettings: function (territoryId, arcId, completeHandler) {
2060		var url = this.tracktruckhost + this.endpoints.getarcnotificationsettings.url + "?TerritoryId=" + territoryId + "&ArcId=" + arcId;
2061
2062		$.ajax(
2063			{
2064				url: url,
2065				dataType: 'json',
2066				method: 'GET',
2067				complete: function (jqXHR, textStatus) {
2068					satruck.api._doCompletionRoutine("getarcnotificationsettings", jqXHR, completeHandler);
2069				}
2070			});
2071	},
2072
2073	GetPickupNotificationSetting: function (territoryId, arcId, pickupId, completeHandler) {
2074		var url = this.tracktruckhost + this.endpoints.getpickupnotificationsetting.url + "?TerritoryId=" + territoryId + "&ArcId=" + arcId + "&PickupId=" + pickupId;
2075
2076		$.ajax(
2077			{
2078				url: url,
2079				dataType: 'json',
2080				method: 'GET',
2081				complete: function (jqXHR, textStatus) {
2082					satruck.api._doCompletionRoutine("getpickupnotificationsetting", jqXHR, completeHandler);
2083				}
2084			});
2085	},
2086
2087	UpdatePickupNotificationSetting: function (setting, completeHandler) {
2088		var url = this.tracktruckhost + this.endpoints.updatepickupnotificationsetting.url;
2089
2090		$.ajax(
2091			{
2092				url: url,
2093				data: JSON.stringify(setting),
2094				headers: {
2095					'Accept': 'application/json',
2096					'Content-Type': 'application/json'
2097				},
2098				dataType: 'json',
2099				method: 'POST',
2100				complete: function (jqXHR, textStatus) {
2101					satruck.api._doCompletionRoutine("updatepickupnotificationsetting", jqXHR, completeHandler);
2102				}
2103			});
2104	},
2105
2106	GetLatestSurvey: function (territoryId,arcId,pickupId, completeHandler) {
2107		var url = this.tracktruckhost + this.endpoints.getlatestsurvey.url + "?TerritoryId="+territoryId+"&ArcId="+arcId+"&PickupId=" + pickupId;
2108
2109		$.ajax(
2110			{
2111				url: url,
2112				dataType: 'json',
2113				method: 'GET',
2114				complete: function (jqXHR, textStatus) {
2115					satruck.api._doCompletionRoutine("getlatestsurvey", jqXHR, completeHandler);
2116				}
2117			});
2118	},
2119
2120	SaveSurvey: function (survey, completeHandler) {
2121		debugger
2122		var url = this.tracktruckhost + this.endpoints.savesurvey.url;
2123
2124		$.ajax(
2125			{
2126				url: url,
2127				data: JSON.stringify(survey),
2128				headers: {
2129					'Accept': 'application/json',
2130					'Content-Type': 'application/json'
2131				},
2132				dataType: 'json',
2133				method: 'POST',
2134				complete: function (jqXHR, textStatus) {
2135					satruck.api._doCompletionRoutine("savesurvey", jqXHR, completeHandler);
2136				}
2137			});
2138	},
2139
2140	LogClientException: function(message, location, line, meta)
2141	{
2142		var url = this.endpoints.clienterrorlog.url;
2143
2144		//$.ajax(
2145		//{
2146		//	url: url,
2147		//	timeout: 15000,
2148		//	type: 'post',
2149		//	global: false,
2150		//	data:   
2151		//	{
2152		//	  "WorkstationName": "",
2153		//	  "ApplicationVersion": satruck.appVersion,
2154		//	  "Application": "SaTruck",
2155		//	  "Module": location,
2156		//	  "Method": line,
2157		//	  "Notes": null,
2158		//	  "Generic1": meta,
2159		//	  "Generic2": null,
2160		//	  "Generic3": null,
2161		//	  "Message": message
2162		//	},
2163		//	complete: function(jqXHR, textStatus)
2164		//	{
2165		//		if (jqXHR && (jqXHR.statusText == "success" || jqXHR.statusText == "OK"))
2166		//		{
2167		//			var apiResult = $.parseJSON(jqXHR.responseText);
2168		//			if (apiResult.ErrorMessage == "SESSION_TIMEOUT")
2169		//			{
2170		//				document.location = satruck.config.urls.login;
2171		//			}
2172		//		}
2173		//	},
2174		//	error: function(jqXHR, textStatus, errorThrown){/*Override to prevent endless loop*/}
2175		//});
2176	},
2177
2178	Encrypt: function(ssn, completeHandler)
2179	{
2180		var url = this.endpoints.encrypt.url + "?toencrypt=" + ssn;
2181
2182		$.ajax(
2183		{
2184			url: url,
2185			dataType: 'json',
2186			complete: function (jqXHR, textStatus) 
2187			{
2188				satruck.api._doCompletionRoutine("encrypt", jqXHR, completeHandler);
2189			}
2190		});
2191	}
2192};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.