<!--
//  File Name: tracklib.js
//
//  Copyright (c) 1997-2002 Harvey Software, Inc.  All rights reserved.
//
//  Description: Web based MULTI CARRIER Tracking page for Harveysoft.com
//
// Comments: page uses 1 form, contents are submitted to CARRIERS server, each carrier running their own cgi script.
//
// Assumptions: CARRIER'S server and cgi script are running;  
// 			 Correct path to cgi scripts are coded in variables below.
//			 Correct field names anticipated by the carrier's cgi script are coded below.
// 			 Country field is hardcoded to US
//
//  Written by: 
//
//  Date written: 
//
//  Last Revised by:  Bert Hamilton	
//
//  Date of Last Revision: 12/26/02
// 
//  Revision:  Removed validation of tracker length for FedEx
///////////////////////////

// Declare global variables:

var sErrMsg	= "Error";     
var nSubmitFlag = 0;
var sAction = "http://www.harveysoft.com/tracking.htm";
var frmSubmit = true;
var sUrl = sAction;

var fld1 = "";
var fld2 = "";
var fld3 = "";
var fld4 = "";

var car = "";
var ref = "";
var ship = "";

var upsTrck = "http://wwwapps.ups.com/tracking/tracking.cgi/";
// OLD 12/26/02 var uspsTrck = "http://www.usps.com/cgi-bin/cttgate/ontrack.cgi";
// OLD 10/23/03 var uspsTrck = "http://www.enque.net/eCommerce/Shipping/USPSTrackReq.asp";
// OLD 01/29/04 var uspsTrck = "http://www.usps.com/shipping/trackandconfirm.htm";
var uspsTrck = "http://trkcnfrm1.smi.usps.com/netdata-cgi/db2www/cbd_243.d2w/output";
var fedexTrck = "http://www.fedex.com/cgi-bin/tracking";
var dhlTrck  = "http://track.dhl-usa.com/atrknav.asp";

var sep = "";
var which = "";
var inwhat = "";

var path = "http://www.harveysoft.com/images/";

var supported = navigator.userAgent.indexOf("Mozilla")== 0 && navigator.userAgent.substring(8,9) >= 3;

// Image swapping routines in this section ----------------

// end of image swapping routines ------------------------------



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 passed from email
// local variables:
// rawdata - used to store URL + other info tacked on
// fexdate - date of FEX shipment
// fexctry - Destination country for FEX shipment
// rpsshipper - RPS shipper #
// 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.trackingForm

	if (rawdata == "") 	// no data found to post to fields
	{
		return false;
	}

	var carrier = word ("&", 1, rawdata);	// make carrier assignment
	var trackingnum = word ("&", 2, rawdata);	// make tracking number assignment
 		
	// set fields of the form to incomming data from SHIP elert
	if (carrier == '?UPS')							
	{
		form.CARRIER.options[1].selected = 1;	// set CARRIER drop-down list box
		form.REFNUM.value = trackingnum;	// set Reference number field
		return true;
	}
	
	if (carrier == '?RPS')	// RPS is translated to FedEx Ground
	{
		form.CARRIER.options[2].selected = 1;	// set CARRIER field (FedEx Ground Trackng ID)
		form.REFNUM.value = trackingnum;		// set reference tracking number field
		return true;
	}
	
	if (carrier == '?FXG')	// FXG is FedEx Ground
	{
		form.CARRIER.options[2].selected = 1;	// set CARRIER field (FedEx Ground Trackng ID)
		form.REFNUM.value = trackingnum;		// set reference tracking number field
		return true;
	}

 		
 	if (carrier == '?FEX')	// FedEx is set to FedEx Express
	{
		form.CARRIER.options[2].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;		// set reference number field
		return true;
	}
		
	if (carrier == '?USP')
	{
		form.CARRIER.options[3].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;		//	set reference number
		return true;
	}
	
	if (carrier == '?DHL')
	{
		form.CARRIER.options[4].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;		//	set reference number
		return true;
	}
	// anything else will get UPS as the carrier
	acct = word ("&", 3, rawdata);	// get advertising account #


	form.CARRIER.options[0].selected = 1;	// set CARRIER field
	form.REFNUM.value = trackingnum;		//	set reference number
	return true;
}


function build_Url()
{
// Function to build target URL & attached info
// The following global varaibles are used:

// fld1-fld4 - incoming field names specific to each carrier { assigned in Validate() }
// car - the selected server to use to retrieve tracking info (UPS, RPS, USPS)
// ref - a reference number for the selected carrier
// ship - a shipper number for the carrier
// dte - shipment Date
// ctry - Shipper's Country
// 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 = "&";
	
	// alert ("building URL for list item: " + car);

	// UPS: list item 1
	if (form.CARRIER.selectedIndex == 1) //used to be zero
	{
		sUrl = upsTrck + dlmtr1 + fld1 + ref;
		return;
	}

	// USPS: list item 3
	if (form.CARRIER.selectedIndex == 3)
	{
		// alert ("building USPS...");
		// OLD 12/26/02 sUrl = uspsTrck + dlmtr1 + fld1 + dlmtr2 + fld2 + ref;
		// OLD 01/29/04 sUrl = uspsTrck + dlmtr1 + fld1 + ref;
                sUrl = uspsTrck + dlmtr1 + fld1 + ref + fld2;
		return;
	}

   // FEDEX: list item 2

    if (form.CARRIER.selectedIndex == 2)
    {
		// alert ("building FedEx...");
		sUrl = fedexTrck + dlmtr1 + fld1 + ref + dlmtr2 + fld2 + dlmtr2 + fld3 + dlmtr2 + fld4; 
		return;
	}

  // DHL: list item 4

    if (form.CARRIER.selectedIndex == 4)
    {
		// alert ("building DHL...");
		sUrl = dhlTrck + dlmtr1 + fld1 + ref; 
		return;
	}
// All Other Carriers...
		return;
}



function frmEntry_Submit()
{	
   // Submit RPS form the first time
 //  if (frmSubmit == true)
 //  {
 //     frmSubmit = false;
      return true;
 //  }
	
   // Only submit form once unless user overrides:
 //  return confirm("Your request is in progress.  Submit again?");
}



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;
	form = document.trackingForm;
	
	// Checks for a tracking number on form - all carriers must have one
    if (form.REFNUM.value == "")
    { 
          sErrMsg	 = "Please enter a Tracking #.";
          form.REFNUM.focus();
          return false;
     }
 	
// UPS: dropdown list item 0
	if (form.CARRIER.selectedIndex == 1)
    {
		 fld1 = "tracknum=";
		 car = form.CARRIER.value;
		 ref = form.REFNUM.value;
		 
	    // check for proper length of tracking #
	     if(form.REFNUM.value.length !=11 && form.REFNUM.value.length !=18)
		 {	
			sErrMsg = "UPS requires an 11 or 18 digit number for tracking!";
			form.REFNUM.focus();
			return false;
         }
	 
		 build_Url();
		 // alert ("UPS successfull - ");
		 // alert ("Target URL string is: " + sUrl);           
		 return true;
	} 

// FEDEX: dropdown list item 2
    if (form.CARRIER.selectedIndex == 2)
    {
		//02/28/01 -- we will not be validating the length FEX or FXG tracking numbers
		// because they are all different
			
		// check for proper length of tracking #
//	    if(form.REFNUM.value.length !=10 && form.REFNUM.value.length !=12)
//		{	
//			sErrMsg = "FedEx Express requires a 10 or 12 digit number for tracking!";
//			form.REFNUM.focus();
//			return false;
  //      }

  		// make field assignments, build target URL
  			 
		fld1 = "tracknumbers=";
		fld2 = "action=track";
		fld3 = "language=english";
		fld4 = "cntry_code=us";

		if (rawdata == "") 	// no data found from a ship elert
		{
			car = form.CARRIER.value; 
		}

		 ref = form.REFNUM.value;

		 build_Url();
		 // alert ("Fedex successfull - ");
		 // alert ("Target URL string is: " + sUrl);           
		 return true;
	} 

	 	      
// USPS: dropdown list item 3
      if (form.CARRIER.selectedIndex == 3)
      {
		 if(form.REFNUM.value.length !=13 && form.REFNUM.value.length !=22)
	     {	
              sErrMsg = "USPS requires a 13 or 22 digit number for tracking!";
              form.REFNUM.focus();
              return false;
         }
			
			 // OLD 12/26/02 fld1 = "rsptype=normal";
			 // OLD 01/29/04 fld1 = "trackingID=";
                         fld1 = "strOrigTrackNum=";
			 // OLD 12/26/02 fld2 = "tracknbr=";
                         fld2 = "&CAMEFROM=OK";
			 ref = form.REFNUM.value;

			 build_Url();
			 // alert ("USPS successfull - ");
			 // alert ("Target URL string is: " + sUrl);           
			 return true
      } 

// DHL: dropdown list item 4
    if (form.CARRIER.selectedIndex == 4)
    {
  		// make field assignments, build target URL
  			 
		fld1 = "ShipmentNumber=";
	
		if (rawdata == "") 	// no data found from a ship elert
		{
			car = form.CARRIER.value; 
		}

		 ref = form.REFNUM.value;

		 build_Url();
		 // alert ("DHL successfull - ");
		//  alert ("Target URL string is: " + sUrl);           
		 return true;
	} 


// last case scenario - no carrier selected to validate

  sErrMsg = "Please select a Carrier.";
  return false;
}

function Compute(Selection)
{
	form = document.forms[0]   									// assign variable FORM to the form used to collect data

	if (Selection.toUpperCase() == "CLEAR") 					// convert and check for clear submission
    {
		if (supported)    //Netscape browser 3.0 or greater
		{    
			form.REFNUM.value = "";
			form.CARRIER.options[0].selected = true;
		}
	    else
		{ 
	        form.Button.value = "Clear"; 						// clear fields on IE
			form.submit();
		}
    } 
	else
	{ 
		if (Selection.toUpperCase() == "SUBMIT")// check for submit
	    {   
			if (!Validate())						// if data is not valid (validate returns false), 
			{ 
				alert(sErrMsg);					// post error message to screen
				return;							// return to form for data entry
			}
			else									// otherwise, 
			{
				if(frmEntry_Submit())				// check for previous submission
				{
					//window.location.href = sUrl;	// if not already submitted, make current location = to new URL with attached data
					window.open(sUrl,'trackShip','');
				}
			}            
		}
    }
    
	return;
}

//-->



