<!--
//  File Name: tracklib.js
//
//  Copyright (c) 2006 Harvey Software, Inc.  All rights reserved.
//
//  Description: Web based MULTI CARRIER Tracking Scripts for Mobile CPS Parcel Locator
//
//  Written by: Bert Hamilton
//
//  Date written: 11/13/2006
//
//  Last Revised by:  Bert Hamilton	
//
//  Date of Last Revision: 11/13/2006
// 
//  Revision:  Creation
//
//  Last Revised by:  Bert Hamilton	
//
//  Date of Last Revision: 02/20/2010
// 
//  Revision:  Added Support for UPS MI
//
///////////////////////////

// Declare global variables:

var sErrMsg = "";				// Process Error Message 
var sUrl = "";					// Tracking link built by this program

var fld1 = "";					// Temporary Fields
var fld2 = "";
var fld3 = "";
var fld4 = "";

var car = "";					// Carrier Selected
var crefno = "";				// Tracking/refference number
var carrierselected = "";			// Carrier Selected
var optnum = "";				// Optional Number (i.e. shipper order number)
var cselect = "";				// CPSPLProcess command

var upsTrck = "http://wwwapps.ups.com/tracking/tracking.cgi/";
var uspsTrck = "http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do";
var fedexTrck = "http://mobile.fedex.com/wince/tracking_query.xml?_s=mobile.fedex-7608475%3A-doam53i81ob4j%3A0&trackNumber=";
var fedex2Trck = "&trackNumber2=&trackNumber3=&_v=Track+It";
var spdTrck = "http://packages.speedeedelivery.com/packages/packages.php?tracking=";
var upsmiTrck = "http://www.ups-mi.net/packageID/PackageID.aspx?PID=";

var sep = "";
var which = "";
var inwhat = "";
function word (sep, which, inwhat)
{
// Delimited string processing function:
// sep  - delimiter
// which - word/phrase
// inwhat - string to search

	var n = 0;				// start of a phrase
	var wstr = 0;				// holds substring
	var i = 0;				// loop counter
	var s = 0;				// start of winning phrase
	var f = 0;				// end of winning phrase

	for (i=1 ; i < which ; i++)				
	{
		n = inwhat.indexOf(sep,n);	// look for separator
		
		if ( n < 0 )
		{
			return '';		// return empty string if not found
			break;							
		}
		
		n++;				// otherwise, loop again
	}
	
	if ( n >= 0 )				// do this only if separator found...
	{
		var s = n;			// phrase starts with n, now s
		var f = inwhat.indexOf(sep,n);	// get next instance of sep
		if ( f < 0 ) f = inwhat.length;	// if there is none...
		wstr = inwhat.substring(n,f);	// must be last phase in string
	}
	
	// alert("data returned is :	" + wstr);
	
	return wstr				// return string; it is empty if sep wasn't found
}

function ShipElert()
{
// check for ship elert data in URL address
// local variables:
// rawdata - used to store URL + other info tacked on
// carrier - carrier to be tracked
// trackingnum - reference/tracking number


	var rawdata = "";
	rawdata = location.search;			// assign everything from "?" on in the URL to rawdata
	form = document.forms[0];   					


	if (rawdata == "") 				// no data found to post to fields
	{
		crefno = "";				// reset tracking number assignment
		optnum = "";				// reset optional number
		carrierselected = "";			// reset carrier selected
		return;
	}

	var carrier = word ("&", 1, rawdata);		// get carrier assignment
	var trackingnum = word ("&", 2, rawdata);	// make tracking number assignment

	crefno = word ("&", 2, rawdata);		// get tracking number assignment
	optnum = word ("&", 3, rawdata);		// get optional number
		

	// set fields of the form to incomming data from SHIP elert

	if (carrier == '?UPS')							
	{
		carrierselected = "UPS";
		if(form.REFNUM.value.length == 22)
		{
			carrierselected = "UPM";
		}
		form.CARRIER.options[1].selected = 1;	// set CARRIER drop-down list box
		form.REFNUM.value = trackingnum;	// set Reference number field
		return;
	}
	
	if (carrier == '?RPS')	// RPS is translated to FedEx Ground
	{
		carrierselected = "FEX";
		form.CARRIER.options[2].selected = 1;	// set CARRIER field (FedEx Ground Trackng ID)
		form.REFNUM.value = trackingnum;	// set reference tracking number field
		return;
	}
	
	if (carrier == '?FXG')	// FXG is FedEx Ground
	{
		carrierselected = "FEX";
		form.CARRIER.options[2].selected = 1;	// set CARRIER field (FedEx Ground Trackng ID)
		form.REFNUM.value = trackingnum;	// set reference tracking number field
		return;
	}

 		
 	if (carrier == '?FEX')	// FedEx is set to FedEx Express
	{
		carrierselected = "FEX";
		form.CARRIER.options[2].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;	// set reference number field
		return;
	}
		
	if (carrier == '?USP')
	{
		carrierselected = "USP";
		form.CARRIER.options[3].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;	// set reference number
		return;
	}
	if (carrier == '?SPD')							
	{
		carrierselected = "SPD";
		form.CARRIER.options[4].selected = 1;	// set CARRIER drop-down list box
		form.REFNUM.value = trackingnum;	// set Reference number field
		return;
	}

	form.CARRIER.options[0].selected = 1;		// set CARRIER field
	form.REFNUM.value = trackingnum;		// set reference number
	return;
}

function build_Url()
{
// Function to build target URL & attached info
// The following global varaibles are used:
// fld1-fld5 - incoming field names specific to each carrier { assigned in Validate() }
// carrierselected - the selected server to use to retrieve tracking info (UPS, FEX, USP)
// crefno - a refference number for the selected carrier
// sUrl - the resulting target URL and attached form info
// upsTrck - the target CGi script URL for UPS
// fedexTrck - the target CGi script URL for FEX
// uspsTrck - the target CGi script URL for USPS


	var dlmtr1 = "?";
	var dlmtr2 = "&";
	
	// Build UPS Link

	if (carrierselected.toUpperCase() == "UPS")
	{
		sUrl = upsTrck + dlmtr1 + fld1 + crefno;
		return true;
	}

	// Build UPS MI Link


	if (carrierselected.toUpperCase() == "UPM")
	{
		sUrl = upsmiTrck + crefno;
		return true;
	}

	// Build USPS Link

	if (carrierselected.toUpperCase() == "USP")
	{
                sUrl = uspsTrck + dlmtr1 + fld1 + crefno + fld2;
		return true;
	}

	// Build FedEx Link

	if (carrierselected.toUpperCase() == "FEX")
	{
		sUrl = fedexTrck + crefno + fedex2Trck; 
		return true;
	}
	// Build SPD Link

	if (carrierselected.toUpperCase() == "SPD")
	{
		sUrl = spdTrck + crefno;
		return true;
	}

	return false;
}

function Validate()
{
// This function validates data entry, 
// sets variables based on the contents of the form, 
// and calls the build_Url() routine if data entered is ok.

	var rawdata = "";
	rawdata = location.search;
	
	// Checks for a tracking number on form - all carriers must have one

	crefno = form.REFNUM.value;

	if (crefno == "")
	{ 
		sErrMsg	 = "No Tracking Number!";
		return false;
	}

	if (form.CARRIER.selectedIndex == 0)
	{
		carrierselected = "";
	}

	if (form.CARRIER.selectedIndex == 1)
	{
		carrierselected = "UPS";
		if(form.REFNUM.value.length == 22)
		{
			carrierselected = "UPM";
		}
	}

	if (form.CARRIER.selectedIndex == 2)
	{
		carrierselected = "FEX";
	}

	if (form.CARRIER.selectedIndex == 3)
	{
		carrierselected = "USP";
	}

	if (form.CARRIER.selectedIndex == 4)
	{
		carrierselected = "SPD";
	}


	if ( carrierselected.toUpperCase() == "" )
	{ 
		sErrMsg	 = "Unknown Carrier!";
		return false;
	}

 	
	// Check Carrier Selected  and Build Link

	// Build UPS link

	if (carrierselected.toUpperCase() == "UPS")
	{
		fld1 = "tracknum=";

		if( !build_Url() )
		{
			sErrMsg	 = "Cannot track this number!";	
			return false;
		}
		else
		{
			return true;
		}
	} 

	// Build UPS MI link

	if (carrierselected.toUpperCase() == "UPM")
	{
		fld1 = "";

		if( !build_Url() )
		{
			sErrMsg	 = "Cannot track this number!";	
			return false;
		}
		else
		{
			return true;
		}
	} 


	// Build FedEx link

	if (carrierselected.toUpperCase() == "FEX")
	{
		// make field assignments, build target URL
  			 
		fld1 = "tracknumbers=";
		fld2 = "action=track";
		fld3 = "language=english";
		fld4 = "cntry_code=us";

		if( !build_Url() )
		{
			sErrMsg	 = "Cannot track this number!";	
			return false;
		}
		else
		{
			return true;
		}
	} 

	 	      
	// Build USPS link

	if (carrierselected.toUpperCase() == "USP")
	{
		fld1 = "origTrackNum=";

		if( !build_Url() )
		{
			sErrMsg	 = "Cannot track this number!";	
			return false;
		}
		else
		{
			return true;
		}
	}

	// Build SPD link

	if (carrierselected.toUpperCase() == "SPD")
	{
		if( !build_Url() )
		{
			sErrMsg	 = "Cannot track this number!";	
			return false;
		}
		else
		{
			return true;
		}
	}


	// last case scenario - no carrier selected to validate

	sErrMsg = "Unknown Carrier!";
	return false;

}

function CPSPLProcess(cselect)
{
	form = document.forms[0];

	if (form.CARRIER.selectedIndex == 0)
	{
		carrierselected = "";
	}

	if (form.CARRIER.selectedIndex == 1)
	{
		carrierselected = "UPS";
	}

	if (form.CARRIER.selectedIndex == 2)
	{
		carrierselected = "FEX";
	}

	if (form.CARRIER.selectedIndex == 3)
	{
		carrierselected = "USP";
	}

	if (form.CARRIER.selectedIndex == 4)
	{
		carrierselected = "SPD";
	}

	// TRACK command

	if (cselect.toUpperCase() == "TRACK")// check for submit
    	{   
		if ( !Validate() )							// if data is not valid (validate returns false) 
		{ 
			alert(sErrMsg);							// post error message to screen
			return false;							// return to form for data entry
		}
		else									// otherwise track it at carrier site 
		{
			window.open(sUrl,'CPSTrackingResults','');
			return true;
		}            
	}

	// CARRIER command

	if (cselect.toUpperCase() == "CARRIER")
	{
		if ( carrierselected.toUpperCase() == "UPS")
		{
			window.open('http://www.ups.com','UPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "FEX")
		{
 			window.open('http://www.fedex.com','FEDEXWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "USP")
		{
 			window.open('http://www.usps.com','USPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "SPD")
		{
 			window.open('http://speedeedelivery.com','SPDWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "")
		{
			sErrMsg = "Unknown Carrier!";
 			alert(sErrMsg);	
			return false;
		}
    	}

	// CLAIMS command

	if (cselect.toUpperCase() == "CLAIMS")
	{
		if ( carrierselected.toUpperCase() == "UPS")
		{
			window.open('http://www.ups.com/content/us/en/resources/service/claims/hlp/faq.html','UPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "FEX")
		{
 			window.open('http://www.fedex.com/us/customersupport/express/faq/claims.html','FEDEXWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "USP")
		{
 			window.open('http://www.usps.com/insuranceclaims/welcome.htm','USPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "SPD")
		{
 			window.open('http://speedeedelivery.com','SPDWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "")
		{
			sErrMsg = "Unknown Carrier!";
 			alert(sErrMsg);	
			return false;
		}
    	}


	// CONTACT command

	if (cselect.toUpperCase() == "CONTACT")
	{
		if ( carrierselected.toUpperCase() == "UPS")
		{
			window.open('http://www.hsicpl.com/mobile/contactups.htm','UPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "FEX")
		{
 			window.open('http://www.hsicpl.com/mobile/contactfedex.htm','FEDEXWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "USP")
		{
 			window.open('http://www.hsicpl.com/mobile/contactusps.htm','USPSWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "SPD")
		{
 			window.open('http://www.hsicpl.com/mobile/contactspeedee.htm','SPDWebSite','');
			return true;
		}
		if ( carrierselected.toUpperCase() == "")
		{
 			window.open('http://www.hsicpl.com/mobile/contactcarrier.htm','CARWebSite','');
			return true;
		}
    	}

	// CPSPLUSE command

	if (cselect.toUpperCase() == "CPSPLUSE")
	{
		window.open('http://www.hsicpl.com/use.htm','HSIWebSite','');
		return true;
    	}

	// WEATHER command

	if (cselect.toUpperCase() == "WEATHER")
	{
		window.open('http://www.nws.noaa.gov/','W1WebSite','');
		return true;
    	}

	// TRACKNO command

	if (cselect.toUpperCase() == "TRACKNO")
	{
		if (crefno == "" )
		{
 			alert("No Tracking Number available!");	
			return false;
		}
		else
		{
 			alert("Tracking Number: " + crefno);	
			return true;
		}
    	}

	// OPTNO command

	if (cselect.toUpperCase() == "OPTNO")
	{
		if (optnum == "" )
		{
 			alert("No Reference Number available!");	
			return false;
		}
		else
		{
 			alert("Reference Number: " + optnum);	
			return true;
		}
    	}

	// GETTRACKNO command

	if (cselect.toUpperCase() == "GETTRACKNO")
	{
		if (crefno == "" )
		{
			return false;
		}
		else
		{
			return crefno;
		}
    	}

	// GETOPTNO command

	if (cselect.toUpperCase() == "GETOPTNO")
	{
		if (optnum == "" )
		{
			return false;
		}
		else
		{
			return optnum;
		}
    	}


	// Handle bad command requests if none were found

	sErrMsg = "Not a valid process request!";
	alert(sErrMsg);
	return false;
}

//-->


