//=====================================================================||
//  Modified from "NOP Design JavaScript Shopping Cart"
// JavaScript Shop Module, V.4.4.0
//=====================================================================||

//Options for Everyone:
MonetarySymbol        = '$';
//DisplayNotice         = true;
DisplayNotice         = false;
DisplayShippingColumn = true;
DisplayShippingRow    = true;
DisplayTaxRow         = true;
TaxRate               = 0.10;  // GST rate.
TaxByRegion           = true;
TaxPrompt             = 'For tax purposes, please select if you are an Australian resident before continuing';
TaxablePrompt         = 'Australia Residents &nbsp; &nbsp;';
NonTaxablePrompt      = 'Non-Australian orders';
MinimumOrder          =  0.00;
MinimumOrderPrompt    = 'Your order is below our minimum order, please order more before checking out.';

//Payment Processor Options:
PaymentProcessor      = '';

//Options for Programmers:
MaxOrderedItems       = 25
OrderedNumCookieName  = "te.ListItemsCount"    // number of different items ordered.
//CookieItemNamePrefix  = "Order."      // prefix for each cookies' name
strCookieItemNamePrefix  = "te."           // prefix for each cookies' name
OutputItemId          = 'ID_';
OutputItemQuantity    = 'QUANTITY_';
OutputItemPrice       = 'PRICE_';
OutputItemName        = 'NAME_';
OutputItemShipping    = 'SHIPPING_';
OutputItemAddtlInfo   = 'ADDTLINFO_';
OutputOrderSubtotal   = 'SUBTOTAL';
OutputOrderShipping   = 'SHIPPING';
OutputOrderTax        = 'TAX';
OutputOrderTotal      = 'TOTAL';
AppendItemNumToOutput = true;
//HiddenFieldsToCheckout = false;
HiddenFieldsToCheckout = true;


//                      Language Strings                               ||
//                     ------------------                              ||
// if ( !bLanguageDefined ) {
	strSorry  = "I'm Sorry, your cart is full. Please proceed to checkout.";
	strAdded  = " added to your shopping cart.";
	strRemove = "Click 'Ok' to remove this product from your shopping cart.";
	strILabel = "Product<br>Code";
	strDLabel = "D e s c r i p t i o n";
	strQLabel = "QTY";
	strPLabel = "Price<br>each";
	strSTLabel = "Sub-<br>Totals";
	strSLabel = "W'ght<br>grams";
	strRLabel = "Cart<br>Function";
	strRButton= "Remove";
	strRallButton= "Empty Cart";
	strSUB    = "Goods TOTAL";
	strSHIP   = "Goods WEIGHT (packaging may weigh extra) in grams";
	strTAX    = "TAX/GST/VAT (only for Australian orders at 10%)";
	strTOT    = "TOTAL";
	strErrQty = "Invalid Quantity.";
	strNewQty = 'Please enter new quantity:';
	bLanguageDefined = true;
// }


//---------------------------------------------------------------------||
//	FUNCTION:    checkManagePage
//	PARAMETERS:  Quantity to
//	RETURNS:     true if OK to order 
//	PURPOSE:     Make sure quantity is represented as a number
//---------------------------------------------------------------------||

function checkManagePage () {

	var d = document.order;
	var t;
	
	if (document.order.zone.selectedIndex == 0) {
		alert("You MUST select your correct International Postal Zone (below the  Check-Out-Now  button)");
	return false;
	}
	if (document.order.insure[1].checked == true) {
		if (confirm ("We normally ship using AIR MAIL (ie. the postal system)\n\nIf you DON'T insure then Tech Edge is NOT liable for losses\nLosses are rare but are possible.\n\n\nClick OK if you want to take that risk.\n\n\nClick CANCEL and change the Insurance option to YES to insure your goods.") == false) {
			return false;
		}
	}
	return true;
}


function focusit () {

	notthis.focus()
}



function wopen(url, name, parms) {

	var handle = window.open(url, name, parms);
	
	if (!handle.opener)
		handle.opener = self;
	return handle;
}



//---------------------------------------------------------------------||
//	FUNCTION:    ValQty
//	PARAMETERS:  Quantity to
//	RETURNS:     Quantity as a number, and possible alert
//	PURPOSE:     Make sure quantity is represented as a number
//---------------------------------------------------------------------||

function ValQty(checkString) {

	var strNewQuantity = "";
	
	for ( i = 0; i < checkString.length; i++ ) {
		ch = checkString.substring(i, i+1);
		if ( (ch >= "0" && ch <= "9") || (ch == '.') )
			strNewQuantity += ch;
	}

	if ( strNewQuantity.length < 1 )
		strNewQuantity = "1";
	
	return(strNewQuantity);
}



//---------------------------------------------------------------------||
//---------------------------------------------------------------------||
//-----------------TEST TEST TEST TEST TEST TEST ----------------------||
//---------------------------------------------------------------------||


function getField (n, desc) // return the (n)th field in the description desc.
{
	if (desc == undefined) {
		alert("Pressing your browser's REFRESH button may solve this problem\n\nCould not find field " + n + " in \"" + desc + "\"  form = " + IDformName);
		return "";
		};
		
	if (desc != "") {
		var StartI = 0;
		var EndI = 0;
		var s;
		var i = 0;
		do {  // Unpack the encoded items from the item's name
	 		EndI = desc.indexOf("|", StartI);
			if (EndI > 0) {
				s = desc.substring(StartI, EndI);
				if (++i == n)
					return s;
			}
			StartI = EndI + 1;
		} while (EndI > -1)
	}	
	return "";
}


// Runs through current form and determines sums all the selected prices using the
// prices[ ] associative array that must have been set up.
//

//Global ID values for selected item.

var IDformName = "";
var IDid = "";   	//complete description
var IDname = "";	//1 - name
var IDprice = ""; 	//2
var IDdesc = "";	//3
var IDweight = 0;	//4
var IDarea = 0;  	//5
var IDheight = 0;	//6
var IDimage = "";	// image filename.
var IDurl = "";  	// url for description.
var IDimgArray = new Array();  // save area for these elements 
var IDhref = new Array();  // save area for these elements 


function sumPrices(thisForm)
{

	//alert("idSelected()");  // debug  ////////////////////////////////////

	var i;  // counter
	var n;  // counter
	var e;  // element of form 

	var sigmaPrice = 0;  // total value of goods in CENTS 
	var itemCount = thisForm.length

	if (itemCount == 0) {
		alert("No Items defined in this form");
		return "?1";
	}

	IDformName = thisForm.name;  // save form name for simpler access with other functions like updateImage();.

	var n_count = 0;        // elements named "atr_n" in this form
	var atr = new Array();  // save area for these elements 

	IDprice = ""; 	//
	IDdesc = "";	//
	IDweight = 0;	//
	IDarea = 0;  	//
	IDheight = 0;	//
	IDimage = "";	//
	IDurl = "";  	//

	var elemvaluestring; // string of form |2C0u|249.00|descr ..
	var eheight;
	var earea;
	var totvolume = 0;
	
	for (i = 0; i < itemCount; i++) {
		// the elemenets in the form may be encountered out of sequence

		e = thisForm.elements[i];  //each element of the form - expect atr1, atr2, etc.

		//alert("thisForm.elements[" + i + "].name = " + e.name);
		
		if (e.name.substring(0, 3) == "atr") {
			
			n = Math.round(e.name.substring(3));  //calculate n in "atr_n"
			elemvaluestring = prices[e.value];
			atr[n] = e.value;  //
			
		//alert ("element  = " + e.name + "  has value string from prices[ ] = " + elemvaluestring);  //DEBUG2011
			
			sigmaPrice += Math.round(100 * getField(2,elemvaluestring));
			IDdesc = IDdesc + ", " + getField(3,elemvaluestring);
			IDweight += Math.round(getField(4,elemvaluestring));
			earea = Math.round(getField(5,elemvaluestring));  	//
			eheight = Math.round(getField(6,elemvaluestring));	//
			totvolume += IDarea * IDheight;
			if (eheight > IDheight) {IDheight = eheight;}
			if (earea > IDarea) {IDarea = earea;}
			IDimage = getField(7,elemvaluestring);	//
			IDimgArray[n] = IDimage;  // save the image location for this attribute 
			IDhref[n] = getField(8,elemvaluestring);	//

			//alert("e.name = " + e.name + "   --> image = " + IDimage);
			// IDurl = (getField(8,elemvaluestring));	//
			//alert("file name for " + e.name + " (" + e.value + ") = " + efile);

			n_count++;  //elemnets encountered 
		}
	}
	IDdesc = IDdesc.substring(2); // trim off leading ", " 
	
	var elname = "";  // element of the ID name 
	var imsrcname = "";  // name=??? in the <img > element we want to change the src= for.
	var imagepath = "";
	
	IDname = "";
	for (i=1; i <= n_count; i++) {
		elname = atr[i];
		if (elname == null) {
			alert("Unassigned element name \"atr" + i + "\" discovered.");
			return "?3";
		}
		while (elname.substring(0,1) == "&") {elname = elname.substring(1)}  // remove all leading "&" characters
		IDname += "+" + elname;
		//alert("Element \"atr" + i + "\"  has image " + img[i]);

		imsrcname = thisForm.name + "_atr" + n;
		imagepath = "../im/" + IDimgArray[i];  //actually assign the (possibly new) src= value 

		//alert("defined attribute name = " + imsrcname + "   image filename = " + imagepath);
	}
	IDname = IDname.substring(1); //trim off the first character
	
	IDid = "|" + IDname + "|" + moneyFormat(sigmaPrice / 100) + "|" + IDdesc + "|" + IDweight + "|" + IDarea + "|" + IDheight + "|";
	//alert(IDid);

	IDprice = moneyFormat(sigmaPrice / 100); 	// convert to dollars
	return IDprice;
}

//---------------------------------------------------------------------||
// FUNCTION:    AddToCart - calls Add-item-to-cart for each item 
// PARAMETERS:  Form Object
// RETURNS:     Cookie to user's browser, with prompt
// PURPOSE:     Adds multiple products to the user's shopping cart
//---------------------------------------------------------------------||

function AddToCart(thisForm) {

	var i;
	
	itemCount = thisForm.length

	// alert( "Forms = " + itemCount ); // debug

	for (i = 0; i < itemCount; i++) {    
		strName     = thisForm.elements[i].name;
		strQUANTITY = thisForm.elements[i].value;
		
		//alert( "name = " + strName + ",  Qty = " + strQUANTITY ); // debug

		if (strQUANTITY != 0) {      

			AddItemToCart(strName, strQUANTITY);
		}
	}
}

/*---------------------------------------------------------------------
	FUNCTION:    Add-Item-ToCart
	PARAMETERS:  Form Object
	RETURNS:     Cookie to user's browser, with prompt
	PURPOSE:     Adds a product to the user's shopping cart
----------------------------------------------------------------------*/

function AddItemToCart(strName, strQUANTITY) {

	var iNumberOrdered = 0;
	var bAlreadyInCart = false;
	var notice = "";
	
	iNumberOrdered = GetCookie(OrderedNumCookieName);

	// eg --> "|2A0PK1|674|2A0 package (2A0 unit, LA1, 4.0m6066cbl, LSU-6066)|960|60000|50">
	// ----->   ID    PRICE  D e s c r i p t i o n                         weight area height
	
	EndI = 0;
	StartI = 1;
	i = 0;
	do {  // Unpack the encoded items from the item's name
 		i++;
 		EndI = strName.indexOf("|", StartI);
		if (EndI > 0) {
			strng = strName.substring(StartI, EndI);
	
			//alert( "I = " + i + ", S  = " + strng );
			 
			switch(i) {
			case 1:
					strID_NUM = strng;
					break;
			case 2:
					strPRICE = strng;   //price
					break;
			case 3:
					strNAME = strng;   //reassign name
					break;
			case 4: 
					strSHIPPING  = strng;   //weight
					break;
			case 5:
					strADDTLINFO = strng;    //area
					break;
			case 6:   strADDTLINFO += ";, " + strng;  //height
					break;
			}
		}
		StartI = EndI + 1;
	} while (EndI > -1)

	//Is this product already in the cart?  If so, increment quantity instead of adding another.
	for ( i = 1; i <= iNumberOrdered; i++ ) {
		NewOrder = strCookieItemNamePrefix + i;
		database = "";
		database = GetCookie(NewOrder);
		
		Token0 = database.indexOf("|", 0);
		Token1 = database.indexOf("|", Token0+1);
		Token2 = database.indexOf("|", Token1+1);
		Token3 = database.indexOf("|", Token2+1);
		Token4 = database.indexOf("|", Token3+1);
		
		fields = new Array;
		fields[0] = database.substring( 0, Token0 );
		fields[1] = database.substring( Token0+1, Token1 );
		fields[2] = database.substring( Token1+1, Token2 );
		fields[3] = database.substring( Token2+1, Token3 );
		fields[4] = database.substring( Token3+1, Token4 );
		fields[5] = database.substring( Token4+1, database.length );
	
		if (	fields[0] == strID_NUM &&
				fields[2] == strPRICE  &&
				fields[3] == strNAME   &&
				fields[5] == strADDTLINFO ) {
			bAlreadyInCart = true;
			dbUpdatedOrder = 
					strID_NUM    + "|" +
					(parseInt(strQUANTITY)+parseInt(fields[1]))  + "|" +
					strPRICE     + "|" +
					strNAME      + "|" +
					strSHIPPING  + "|" +
					strADDTLINFO;
			strNewOrder = strCookieItemNamePrefix + i;
			DeleteCookie(strNewOrder, "/");
			SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
			notice = strQUANTITY + " " + strNAME + strAdded;
			break;
		}
	}
	
	
	if ( !bAlreadyInCart ) {
		iNumberOrdered++;

		if ( iNumberOrdered > MaxOrderedItems )
			alert( strSorry );
		else {
			dbUpdatedOrder = strID_NUM    + "|" + 
							strQUANTITY  + "|" +
							strPRICE     + "|" +
							strNAME      + "|" +
							strSHIPPING  + "|" +
							strADDTLINFO;
			strNewOrder = strCookieItemNamePrefix + iNumberOrdered;
			SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
			SetCookie(OrderedNumCookieName, iNumberOrdered, null, "/");
			notice = strQUANTITY + " " + strNAME + strAdded;
		}
	}
	
	if ( DisplayNotice )
		alert(notice);
}


//---------------------------------------------------------------------||
// FUNCTION:    getCookieVal
// PARAMETERS:  offset
// RETURNS:     URL unescaped Cookie Value
// PURPOSE:     Get a specific value from a cookie
//---------------------------------------------------------------------||

function getCookieVal (offset) {

	var endstr = document.cookie.indexOf (";", offset);
	
	if ( endstr == -1 )
		endstr = document.cookie.length;
	return(unescape(document.cookie.substring(offset, endstr)));
}

//---------------------------------------------------------------------||
// FUNCTION:    FixCookieDate
// PARAMETERS:  date
// RETURNS:     date
// PURPOSE:     Fixes cookie date, stores back in date
//---------------------------------------------------------------------||

function FixCookieDate (date) {

	var base = new Date(0);
	var skew = base.getTime();
	
	date.setTime (date.getTime() - skew);
}

//---------------------------------------------------------------------||
// FUNCTION:    GetCookie
// PARAMETERS:  Name
// RETURNS:     Value Cookie called name
// PURPOSE:     Retrieves cookie from users browser
//---------------------------------------------------------------------||

function GetCookie (name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	
	while ( i < clen ) {
		var j = i + alen;
		if ( document.cookie.substring(i, j) == arg )
			return(getCookieVal (j));
		i = document.cookie.indexOf(" ", i) + 1;
		if ( i == 0 )
			break;
	}
	
	return(null);
	}
	
//---------------------------------------------------------------------||
// FUNCTION:    SetCookie
// PARAMETERS:  name, value, expiration date, path, domain, security
// RETURNS:     Null
// PURPOSE:     Stores a cookie in the users browser
//---------------------------------------------------------------------||

function SetCookie (name,value,expires,path,domain,secure) {

	document.cookie = name + "=" + escape (value) +
					((expires) ? "; expires=" + expires.toGMTString() : "") +
					((path) ? "; path=" + path : "") +
					((domain) ? "; domain=" + domain : "") +
					((secure) ? "; secure" : "");
}

//---------------------------------------------------------------------||
// FUNCTION:    DeleteCookie
// PARAMETERS:  Cookie name, path, domain
// RETURNS:     null
// PURPOSE:     Removes a cookie from users browser.
//---------------------------------------------------------------------||

function DeleteCookie (name,path,domain) {

	if ( GetCookie(name) ) {
		document.cookie = name + "=" +
						((path) ? "; path=" + path : "") +
						((domain) ? "; domain=" + domain : "") +
						"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

//---------------------------------------------------------------------||
// FUNCTION:    MoneyFormat
// PARAMETERS:  Number to be formatted
// RETURNS:     Formatted Number
// PURPOSE:     Reformats Dollar Amount to #.## format
//---------------------------------------------------------------------||

function moneyFormat(input) {

	var dollars = Math.floor(input);
	var tmp = new String(input);
	
	for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
		if ( tmp.charAt(decimalAt)=="." )
			break;
	}
	
	var cents = "" + Math.round(input * 100);
	
	cents = cents.substring(cents.length-2, cents.length)
	
	dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;
	
	if ( cents == "0" )
		cents = "00";
	
	return(dollars + "." + cents);
}

function moneyFormatHTML(input) {

	var dollars = Math.floor(input);
	var tmp = new String(input);
	
	for ( var decimalAt = 0; decimalAt < tmp.length; decimalAt++ ) {
		if ( tmp.charAt(decimalAt)=="." )
			break;
	}
	
	var cents = "" + Math.round(input * 100);
	
	cents = cents.substring(cents.length-2, cents.length)
	
	dollars += ((tmp.charAt(decimalAt+2)=="9")&&(cents=="00"))? 1 : 0;
	
	if ( cents == "0" )
		cents = "00";
	
	return(dollars + ".<sup>" + cents + "</sup>");
}


//---------------------------------------------------------------------||
// FUNCTION:    RemoveFromCart
// PARAMETERS:  Order Number to Remove
// RETURNS:     Null
// PURPOSE:     Removes an item from a users shopping cart
//---------------------------------------------------------------------||

function removeItem(RemOrder) {

	var i;

	NumberOrdered = GetCookie(OrderedNumCookieName);
	for ( i=RemOrder; i < NumberOrdered; i++ ) {
		NewOrder1 = strCookieItemNamePrefix + (i+1);
		NewOrder2 = strCookieItemNamePrefix + (i);
		database = GetCookie(NewOrder1);
		SetCookie (NewOrder2, database, null, "/");
	}
	NewOrder = strCookieItemNamePrefix + NumberOrdered;
	SetCookie (OrderedNumCookieName, NumberOrdered-1, null, "/");
	DeleteCookie(NewOrder, "/");
}


function RemoveFromCart(RemOrder) {

	//alert(RemOrder + " NumberOrdered = " + GetCookie(OrderedNumCookieName));
	
	if ( confirm( strRemove ) ) {
		removeItem(RemOrder);
		location.href=location.href;  //repaint.
	}
}


function RemoveAllFromCart() {

	var n = GetCookie(OrderedNumCookieName);
	
	if (confirm("Remove all items from your cart?")) {
		while (n > 0) {
			removeItem(n);
			n--;
		}
	location.href=location.href;  // repaint.
	}

}


//---------------------------------------------------------------------||
// FUNCTION:    ChangeQuantity
// PARAMETERS:  Order Number to Change Quantity
// RETURNS:     Null
// PURPOSE:     Changes quantity of an item in the shopping cart
//---------------------------------------------------------------------||

function ChangeQuantity(OrderItem,NewQuantity) {

	if ( isNaN(NewQuantity) ) {
		alert( strErrQty );
	} else {
		NewOrder = strCookieItemNamePrefix + OrderItem;
		database = "";
		database = GetCookie(NewOrder);
		
		Token0 = database.indexOf("|", 0);
		Token1 = database.indexOf("|", Token0+1);
		Token2 = database.indexOf("|", Token1+1);
		Token3 = database.indexOf("|", Token2+1);
		Token4 = database.indexOf("|", Token3+1);
		
		fields = new Array;
		fields[0] = database.substring( 0, Token0 );
		fields[1] = database.substring( Token0+1, Token1 );
		fields[2] = database.substring( Token1+1, Token2 );
		fields[3] = database.substring( Token2+1, Token3 );
		fields[4] = database.substring( Token3+1, Token4 );
		fields[5] = database.substring( Token4+1, database.length );
	
		dbUpdatedOrder = fields[0] + "|" +
						NewQuantity + "|" +
						fields[2] + "|" +
						fields[3] + "|" +
						fields[4] + "|" +
						fields[5];
		strNewOrder = strCookieItemNamePrefix + OrderItem;
		DeleteCookie(strNewOrder, "/");
		SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
		location.href=location.href;      
	}
}


//---------------------------------------------------------------------||
// FUNCTION:    GetFromCart
// PARAMETERS:  Null
// RETURNS:     Product Table Written to Document
// PURPOSE:     Draws current cart product table on HTML page
//              **DEPRECATED FUNCTION, USE ManageCart or Checkout**
//---------------------------------------------------------------------||

function GetFromCart( fShipping ) {    // DEPRECATED FUNCTION 

	ManageCart( );
}


//---------------------------------------------------------------------||
// FUNCTION:    RadioChecked
// PARAMETERS:  Radio button to check
// RETURNS:     True if a radio has been checked
// PURPOSE:     Form fillin validation
//---------------------------------------------------------------------||

function RadioChecked( radiobutton ) {

	var bChecked = false;
	var rlen = radiobutton.length;
	for ( i=0; i < rlen; i++ ) {
		if ( radiobutton[i].checked )
			bChecked = true;
	}
	return bChecked;
}


//---------------------------------------------------------------------||
// FUNCTION:    QueryString 
// PARAMETERS:  Key to read
// RETURNS:     value of key
// PURPOSE:     Read data passed in via GET mode
//---------------------------------------------------------------------||

QueryString.keys = new Array();
QueryString.values = new Array();

function QueryString(key) {

	var value = null;
	
	for (var i=0;i<QueryString.keys.length;i++) {
		if (QueryString.keys[i]==key) {
			value = QueryString.values[i];
			break;
		}
	}
	return value;
} 

//---------------------------------------------------------------------||
// FUNCTION:    QueryString_Parse
// PARAMETERS:  (URL string)
// RETURNS:     null
// PURPOSE:     Parses query string data, must be called before Q.S.
//---------------------------------------------------------------------||

function QueryString_Parse() {

	var query = window.location.search.substring(1);
	var pairs = query.split("&"); for (var i=0;i<pairs.length;i++) {
	var pos = pairs[i].indexOf('=');

	if (pos >= 0) {
		var argname = pairs[i].substring(0,pos);
		var value = pairs[i].substring(pos+1);
		QueryString.keys[QueryString.keys.length] = argname;
		QueryString.values[QueryString.values.length] = value;
	}
	}
}


//---------------------------------------------------------------------||
// FUNCTION:    ManageCart
// PARAMETERS:  Null
// RETURNS:     Product Table Written to Document
// PURPOSE:     Draws current cart product table on HTML page
//---------------------------------------------------------------------||

function ManageCart( ) {

	var iNumberOrdered = 0;    //Number of products ordered
	var fTotal         = 0;    //Total cost of order
	var fSubTotal      = 0;    //Subtotal of item * Qty
	var fTax           = 0;    //Tax amount
	var fShipping      = 0;    //Shipping amount
	var strTotal       = "";   //Total cost formatted as money
	var strTax         = "";   //Total tax formatted as money
	var strShipping    = "";   //Total shipping formatted as money
	var strOutput      = "";   //String to be written to page
	var bDisplay       = true; //Whether to write string to the page (here for programmers)
	var strng;

	iNumberOrdered = GetCookie(OrderedNumCookieName);
	if ( iNumberOrdered == null )
		iNumberOrdered = 0;

	if ( bDisplay ) {
		strOutput = 
			"<td align=center class=\"nopheader\"><b>" + strILabel +"</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strDLabel +"</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strQLabel +"</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strPLabel +"</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strSTLabel + "</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strRLabel +"</b></td>" +
			"<td align=center class=\"nopheader\"><b>" + strSLabel +"</b></td>" +
			"</tr>";
	}
	if ( iNumberOrdered == 0 ) {
		strOutput += "<tr><td COLSPAN=7 class=\"nopentry\"><CENTER><BR><b>Your cart is empty</b><BR><BR></CENTER></td></tr>";
	}

	for ( i = 1; i <= iNumberOrdered; i++ ) {
		// --> for each item 
		NewOrder = strCookieItemNamePrefix + i;
		database = "";
		database = GetCookie(NewOrder);
		
		Token0 = database.indexOf("|", 0);
		Token1 = database.indexOf("|", Token0+1);
		Token2 = database.indexOf("|", Token1+1);
		Token3 = database.indexOf("|", Token2+1);
		Token4 = database.indexOf("|", Token3+1);
		
		fields = new Array;
		fields[0] = database.substring( 0, Token0 );                 // Product ID
		fields[1] = database.substring( Token0+1, Token1 );          // Quantity
		fields[2] = database.substring( Token1+1, Token2 );          // Price
		fields[3] = database.substring( Token2+1, Token3 );          // Product Name/Description
		fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
		fields[5] = database.substring( Token4+1, database.length ); // Additional Information

		//      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
		fSubTotal   = (parseInt(fields[1]) * parseFloat(fields[2]) );
		fTotal     += fSubTotal;
		fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
		fTax        = (fTotal * TaxRate);
		strTotal    = moneyFormat(fTotal);
		strTax      = moneyFormat(fTax);
//      strShipping = moneyFormat(fShipping);

		if ( bDisplay ) {
			strOutput += "<tr><td class=\"nopid\">"  + fields[0] + "</td>";
			
			strOutput += "<td class=\"nopentry\">"  + fields[3] + "</td>";
			//if ( fields[5] == "" )
			//	strOutput += "<td class=\"nopentry\">"  + fields[3] + "</td>";
			//else
			//	strOutput += "<td class=\"nopentry\">"  + fields[3] + " - <I>"+ fields[5] + "</I></td>";
			
			strOutput += "<td class=\"nopentry\"><INPUT TYPE=TEXT NAME=Q SIZE=2 VALUE=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this.value);\"></td>";
			strOutput += "<td class=\"noprice\">"+ MonetarySymbol + moneyFormatHTML(fields[2]) + "</td>";
			strOutput += "<td class=\"noptotal\" align=right>"+ MonetarySymbol + moneyFormatHTML(fSubTotal) + "</td>"; //pg
			
			strOutput += "<td class=\"nopentry\" ALIGN=CENTER><input type=button value=\" "+strRButton+" \" onClick=\"RemoveFromCart("+i+")\" class=\"nopbutton\"></td>";
		///???????
			strOutput += "<td align=right class=\"nopentry\">";
			if ( parseFloat(fields[4]) > 0 )
			   strOutput += fields[4] + "/ea";
			else
			   strOutput += "N/A";
			strOutput += "</td></tr>";
		}

		if ( AppendItemNumToOutput )
			strFooter = i;
		else
		 strFooter = "";
			
		if ( HiddenFieldsToCheckout ) {
			strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
		}
		
		// <input size=1 maxlength=2 type=text name="*2A0-LA1-4c0b7-7057*624*2A0 package (2A0 unit, LA1, 4.0m7057cbl, LSU-7057)*960*60000*50">
		// <input type=hidden value=QTY name="*2A0-LA1-4c0b7-7057*624*2A0 package (2A0 unit, LA1, 4.0m7057cbl, LSU-7057)*960*60000*50">

		strng 		= "<input value=" + fields[1] 
					+ " type=hidden name=\"*"
					+ fields[0] + "*"
					+ fields[2] + "*" 
					+ fields[3] + "*"
					+ fields[4] + "*"
					+ fields[5] + "*"
					+ "\">";
		// alert (strng);
		strOutput += strng;
		
	} // <-- for each item 

	if ( bDisplay ) {
		strOutput += "<tr><td class=\"noptotal\" COLSPAN=3><b>"+strSUB+"</b></td>"; //pg
		strOutput += "<td class=\"noptotal\" ALIGN=CENTER><input type=button value=\"Recalc.\" class=\"nopbutton\"></td>";
		strOutput += "<td class=\"nopid\" align=right><b id=r>" + MonetarySymbol + moneyFormatHTML(strTotal) + "</b></td>";
//		strOutput += "<td class=\"nopentry\" COLSPAN=2><input type=button value=\" "+strRallButton+" \" onClick=\"RemoveAllFromCart()\" class=\"nopbutton\"></td>";
		strOutput += "<td class=\"nopentry\" ALIGN=CENTER><input type=button value=\" "+strRallButton+" \" onClick=\"RemoveAllFromCart()\" class=\"nopbutton\"></td>";
		strOutput += "<td></td></tr>";
		strOutput += "<tr><td class=\"nopentry\" COLSPAN=6><b>"+strSHIP+"</b></td>";//pg 4->4
		strOutput += "<td align=right class=\"nopentry\"><b>" + fShipping + "</b> g</td>";
		strOutput += "</tr>";
	}

	if ( DisplayTaxRow || TaxByRegion ) {
		if ( TaxByRegion ) {
			strOutput += "<tr><td class=\"nopentry\" COLSPAN=2><b>"+strTAX+"</b></td>";
			strOutput += "<td class=\"nopentry\" COLSPAN=5>"; //pg
			strOutput += "<input type=radio name=\""+OutputOrderTax+"\" value=\"" + strTax + "\">";
			strOutput += TaxablePrompt + ":</b> " + MonetarySymbol + moneyFormatHTML(strTax);
			strOutput += "<BR><input type=radio name=\""+OutputOrderTax+"\" value=\"0.00\">";
			strOutput += NonTaxablePrompt + ":</b> " + MonetarySymbol + moneyFormatHTML(0.00) + "</td>";
			strOutput += "</tr>";
		} else {
			strOutput += "<tr><td class=\"noptotal\" COLSPAN=4><b>"+strTAX+"</b></td>";
			strOutput += "<td class=\"noptotal\" COLSPAN=2><b>" + MonetarySymbol + strTax + "</b></td>";
			strOutput += "</tr>";
		}
	}
		
	if ( !TaxByRegion ) {
		strOutput += "<tr><td class=\"nopentry\" COLSPAN=4><b>"+strTOT+"</b></td>";
		strOutput += "<td class=\"nopentry\" COLSPAN=2><b>" + MonetarySymbol + moneyFormatHTML((fTotal + fShipping + fTax)) + "</b></td>";
		strOutput += "</tr>";
	}

	if ( HiddenFieldsToCheckout ) {
		strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ MonetarySymbol + strTotal + "\">";
		strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ MonetarySymbol + fShipping + "\">";
		strOutput += "<input type=hidden name=\""+OutputOrderTax+"\"      value=\""+ MonetarySymbol + strTax + "\">";
		strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
	}
	
	// eg --> "*2A0PK1*674*2A0 package (2A0 unit, LA1, 4.0m6066cbl, LSU-6066)*960*60000*50">
	// ----->   ID    PRICE  D e s c r i p t i o n                         weight area height


	strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
	


	g_TotalCost = (fTotal + fShipping + fTax);
	
	document.write(strOutput);
	document.close();
}

//---------------------------------------------------------------------||
// FUNCTION:    ValidateCart
// PARAMETERS:  Form to validate
// RETURNS:     true/false
// PURPOSE:     Validates the managecart form
//---------------------------------------------------------------------||
var g_TotalCost = 0;

function ValidateCart( theForm ) {

	if ( TaxByRegion ) {
		if ( !RadioChecked(eval("theForm."+OutputOrderTax)) ) {
			alert( TaxPrompt );
			return false;
		}
	}
	
	if ( MinimumOrder >= 0.01 ) {
		if ( g_TotalCost < MinimumOrder ) {
			alert( MinimumOrderPrompt );
			return false;
		}
	}
	return true;
}

//---------------------------------------------------------------------||
// FUNCTION:    CheckoutCart
// PARAMETERS:  Null
// RETURNS:     Product Table Written to Document
// PURPOSE:     Draws current cart product table on HTML page for
//              checkout.
//---------------------------------------------------------------------||
function CheckoutCart( ) {

   var iNumberOrdered = 0;    //Number of products ordered
   var fTotal         = 0;    //Total cost of order
   var fTax           = 0;    //Tax amount
   var fShipping      = 0;    //Shipping amount
   var strTotal       = "";   //Total cost formatted as money
   var strTax         = "";   //Total tax formatted as money
   var strShipping    = "";   //Total shipping formatted as money
   var strOutput      = "";   //String to be written to page
   var bDisplay       = true; //Whether to write string to the page (here for programmers)
   var strPP          = "";   //Payment Processor Description Field

   iNumberOrdered = GetCookie(OrderedNumCookieName);
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( TaxByRegion ) {
      QueryString_Parse();
      fTax = parseFloat( QueryString( OutputOrderTax ) );
      strTax = moneyFormat(fTax);
   }

   if ( bDisplay )
      strOutput = "<table class=\"nopcart\"><tr>" +
                  "<td class=\"nopheader\"><b>"+strILabel+"</b></td>" +
                  "<td class=\"nopheader\"><b>"+strDLabel+"</b></td>" +
                  "<td class=\"nopheader\"><b>"+strQLabel+"</b></td>" +
                  "<td class=\"nopheader\"><b>"+strPLabel+"</b></td>" +
                  "<td class=\"nopheader\"><b>"+strSLabel+"</b></td>" +
                  "</tr>";

	for ( i = 1; i <= iNumberOrdered; i++ ) {
		NewOrder = strCookieItemNamePrefix + i;
		database = "";
		database = GetCookie(NewOrder);
		
		Token0 = database.indexOf("|", 0);
		Token1 = database.indexOf("|", Token0+1);
		Token2 = database.indexOf("|", Token1+1);
		Token3 = database.indexOf("|", Token2+1);
		Token4 = database.indexOf("|", Token3+1);
		
		fields = new Array;
		fields[0] = database.substring( 0, Token0 );                 // Product ID
		fields[1] = database.substring( Token0+1, Token1 );          // Quantity
		fields[2] = database.substring( Token1+1, Token2 );          // Price
		fields[3] = database.substring( Token2+1, Token3 );          // Product Name/Description
		fields[4] = database.substring( Token3+1, Token4 );          // Shipping Cost
		fields[5] = database.substring( Token4+1, database.length ); //Additional Information
		
		fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
		fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
		if ( !TaxByRegion ) fTax = (fTotal * TaxRate);
			strTotal    = moneyFormat(fTotal);
		if ( !TaxByRegion ) strTax = moneyFormat(fTax);
			strShipping = moneyFormat(fShipping);

		if ( bDisplay ) {
			strOutput += "<tr><td class=\"nopentry\">"  + fields[0] + "</td>";
			
			strOutput += "<td class=\"nopentry\">"  + fields[3] + "</td>";
			//if ( fields[5] == "" )
			//	strOutput += "<td class=\"nopentry\">"  + fields[3] + "</td>";
			//else
			//	strOutput += "<td class=\"nopentry\">"  + fields[3] + " - <I>"+ fields[5] + "</I></td>";
			
			strOutput += "<td class=\"nopentry\">" + fields[1] + "</td>";
			strOutput += "<td class=\"nopentry\">"+ MonetarySymbol + moneyFormatHTML(fields[2]) + "/ea</td>";
			
			if ( parseFloat(fields[4]) > 0 )
				strOutput += "<td class=\"nopentry\">"+ MonetarySymbol + moneyFormatHTML(fields[4]) + "/ea</td>";
			else
				strOutput += "<td class=\"nopentry\">N/A</td>";
				
			strOutput += "</tr>";
		}
		
		if ( AppendItemNumToOutput )
			strFooter = i;
		else
			strFooter = "";
		
		if ( PaymentProcessor != '' ) {
		//Process description field for payment processors instead of hidden values.
		//Format Description of product as:
		// ID, Name, Qty X
			strPP += fields[0] + ", " + fields[3];
			if ( fields[5] != "" )
				strPP += " - " + fields[5];
			strPP += ", Qty. " + fields[1] + "\n";
 		} else {
			strOutput += "<input type=hidden name=\"" + OutputItemId        + strFooter + "\" value=\"" + fields[0] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemQuantity  + strFooter + "\" value=\"" + fields[1] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemPrice     + strFooter + "\" value=\"" + fields[2] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemName      + strFooter + "\" value=\"" + fields[3] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemShipping  + strFooter + "\" value=\"" + fields[4] + "\">";
			strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";
 		} 

	} // <-- for each item 

	if ( bDisplay ) {
		strOutput += "<tr><td class=\"noptotal\" COLSPAN=3><b>"+strSUB+"</b></td>";
		strOutput += "<td class=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><b>" + MonetarySymbol + strTotal + "</b></td>";
		strOutput += "</tr>";
		
		if ( DisplayShippingRow ) {
			strOutput += "<tr><td class=\"noptotal\" COLSPAN=3><b>"+strSHIP+"</b></td>";
			strOutput += "<td class=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><b>" + MonetarySymbol + strShipping + "</b></td>";
			strOutput += "</tr>";
		}
		if ( DisplayTaxRow || TaxByRegion ) {
			strOutput += "<tr><td class=\"noptotal\" COLSPAN=3><b>"+strTAX+"</b></td>";
			strOutput += "<td class=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><b>" + MonetarySymbol + strTax + "</b></td>";
			strOutput += "</tr>";
		}
	
		strOutput += "<tr><td class=\"noptotal\" COLSPAN=3><b>"+strTOT+"</b></td>";
		strOutput += "<td class=\"noptotal\" COLSPAN=2 ALIGN=RIGHT><b>" + MonetarySymbol + moneyFormatHTML((fTotal + fShipping + fTax)) + "</b></td>";
		strOutput += "</tr>";
		
		strOutput += "</table>";
	
	  
		if ( PaymentProcessor == 'an') {
			//Process this for Authorize.net WebConnect
			strOutput += "<input type=hidden name=\"x_Version\" value=\"3.0\">";
			strOutput += "<input type=hidden name=\"x_Show_Form\" value=\"PAYMENT_FORM\">";
			strOutput += "<input type=hidden name=\"x_Description\" value=\""+ strPP + "\">";
			strOutput += "<input type=hidden name=\"x_Amount\" value=\""+ moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
		} else if ( PaymentProcessor == 'wp') {
			//Process this for WorldPay
			strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
			strOutput += "<input type=hidden name=\"amount\" value=\""+ moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
		} else if ( PaymentProcessor == 'lp') {
			//Process this for LinkPoint         
			strOutput += "<input type=hidden name=\"mode\" value=\"fullpay\">";
			strOutput += "<input type=hidden name=\"chargetotal\" value=\""+ moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
			strOutput += "<input type=hidden name=\"tax\" value=\""+ MonetarySymbol + strTax + "\">";
			strOutput += "<input type=hidden name=\"subtotal\" value=\""+ MonetarySymbol + strTotal + "\">";
			strOutput += "<input type=hidden name=\"shipping\" value=\""+ MonetarySymbol + strShipping + "\">";
			strOutput += "<input type=hidden name=\"desc\" value=\""+ strPP + "\">";
		} else {
			strOutput += "<input type=hidden name=\""+OutputOrderSubtotal+"\" value=\""+ MonetarySymbol + strTotal + "\">";
			strOutput += "<input type=hidden name=\""+OutputOrderShipping+"\" value=\""+ MonetarySymbol + strShipping + "\">";
			strOutput += "<input type=hidden name=\""+OutputOrderTax+"\"      value=\""+ MonetarySymbol + strTax + "\">";
			strOutput += "<input type=hidden name=\""+OutputOrderTotal+"\"    value=\""+ MonetarySymbol + moneyFormatHTML((fTotal + fShipping + fTax)) + "\">";
		}
	}

	document.write(strOutput);
	document.close();
}

//               END NOP Design SmartPost Shopping Cart
//=====================================================================||


