<!--
//  File Name: tracklib2.js
//
//  Copyright (c) 2006 Harvey Software, Inc.  All rights reserved.
//
//  Description: Web based MULTI CARRIER Tracking Scripts
//
//  Written by: Bert Hamilton
//
//  Date written: 10/22/2006
//
//  Last Revised by:  Bert Hamilton	
//
//  Date of Last Revision: 10/22/2006
// 
//  Revision:  Removed validation of tracker length for FedEx
//
//  Date of Last Revision: 02/20/2010
// 
//  Revision:  Validation for FedEx added 20 for SmartPost and 22 for UPS MI
//
///////////////////////////

// Declare global variables:

var sErrMsg = "";				// Process Error Message 
var sUrl = "";					// Tracking link built by this program
var rawdata = "";				// Used to store URL + other info tacked on

var allTrck = "http://www.hsicpl.com/cpspl.htm";
var allTrckm = "http://www.hsicpl.com/cpsplm.htm";
var cselect = "";				// CPSPLProcess command

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 passed from email
// local variables:
// fexdate - date of FEX shipment
// fexctry - Destination country for FEX shipment
// rpsshipper - RPS shipper #
// carrier - carrier to be tracked
// trackingnum - reference/tracking number

	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
	{
		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 == '?SPD')
	{
		form.CARRIER.options[4].selected = 1;	// set CARRIER field
		form.REFNUM.value = trackingnum;	// set reference number
		return true;
	}

	form.CARRIER.options[0].selected = 1;		// set CARRIER field
	form.REFNUM.value = trackingnum;		// set reference number
	return true;
}

function build_Url()					// Build for Normal Tracking
{
// Function to build target URL & attached info


	sUrl = allTrck + rawdata;
	return;
}

function mbuild_Url()					// Build for Mobile Tracking
{
// Function to build target URL & attached info

	rawdata = location.search;
	sUrl = allTrckm + rawdata;
	return;
}

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.

	form = document.forms[0];   					

	// Checks for a tracking number on form - all carriers must have one

	if (form.REFNUM.value == "")
	{ 
		sErrMsg	 = "Please enter a Tracking Number.";
		form.REFNUM.focus();
		return false;
	}
 	
	// UPS: dropdown list item 1

	if (form.CARRIER.selectedIndex == 1)
	{

		// check for proper length of tracking #

		if(form.REFNUM.value.length !=11 && form.REFNUM.value.length !=18 && form.REFNUM.value.length !=22)
		{	
			sErrMsg = "UPS requires an 11, 22 or 18 digit number for tracking!";
			form.REFNUM.focus();
			return false;
		}

		rawdata = "?UPS&" + form.REFNUM.value;
		build_Url();
		return true;
	} 

	// FEDEX: dropdown list item 2

	if (form.CARRIER.selectedIndex == 2)
	{

		// check for proper length of tracking #

		if(form.REFNUM.value.length !=10 && form.REFNUM.value.length !=12 && form.REFNUM.value.length !=15 && form.REFNUM.value.length !=20 && form.REFNUM.value.length !=22) 
		{	
			sErrMsg = "FedEx requires an 10, 12, 15, 20 or 22 digit number for tracking!";
			form.REFNUM.focus();
			return false;
		}
  			 
		rawdata = "?FEX&" + form.REFNUM.value;
		build_Url();
		return true;
	} 

	 	      
	// USPS: dropdown list item 3

	if (form.CARRIER.selectedIndex == 3)
	{

		// check for proper length of tracking #

		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;
		}
			
		rawdata = "?USP&" + form.REFNUM.value;
		build_Url();
		return true;
	} 

	// SPD: dropdown list item 4

	if (form.CARRIER.selectedIndex == 4)
	{

		// check for proper length of tracking #

		if(form.REFNUM.value.length != 13)
		{	
			sErrMsg = "Spee-Dee Delivery requires a 13 digit number for tracking!";
			form.REFNUM.focus();
			return false;
		}
			
		rawdata = "?SPD&" + form.REFNUM.value;
		build_Url();
		return true;
	} 


	// last case scenario - no carrier selected to validate

	sErrMsg = "Please select a Carrier.";
	return false;
}

function CPSPLProcess(cselect)
{

	// 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,'CPSPLTracking','height=275,width=400,resizable=no,scrollbars=no,toolbar=no');
			return true;
		}            
	}

	// MTRACK command

	if (cselect.toUpperCase() == "MTRACK")
    	{   
		mbuild_Url();
		window.open(sUrl,'MCPSPLTracking','');
		return true;
	}

	// CPSPLUSE command

	if (cselect.toUpperCase() == "CPSPLUSE")
	{
		window.open('http://www.hsicpl.com/use.htm','HSIWebSite','height=590,width=790,resizable=yes,scrollbars=yes,toolbar=yes');
		return true;
    	}
    
	// Handle bad command requests if none were found

	sErrMsg = "Not a valid process request!";
	alert(sErrMsg);
	return false;
}

//-->


