/**
	The Shopping Cart Class
**/

			function ShoppingCart( cartName ) {
				this.cartName = cartName
				this.itemSep = '~';
				this.fieldSep = ':';
				this.ith = 0;
				this.cart = new Array();
				this.item = new Array();
				this.fieldNameList = new Array();
				this.fieldValues = new Array();
				this.itemString = new String();
			}


		ShoppingCart.prototype.openCookieJar = function() {
				var wholeCookie = new String(document.cookie);
				var crumbs = wholeCookie.split(';');
				var i, a,b;
	
				this.cart.length=0;			
				if( wholeCookie.length == 0 )  { this.cart.length=0; return };
				if( wholeCookie.indexOf( '=' ) < 0 ) { this.cart.length=0; return }

				for( i=0; i<crumbs.length; i++ ) {
					a = crumbs[i].split('=');
					if( a.length < 2 ) { this.cart.length=0; return }
			
					if( this.trim(a[0]) == this.cartName ) {
						this.unpackCart( unescape(a[1]) );
						return;
					}
				}
				this.cart.length=0;
			}
			
			ShoppingCart.prototype.unpackCart = function( c ) {
				if( c.length == 0  ) return;
				if(c.indexOf(this.itemSep)<0 ) 					// Single item in cart
					this.cart[0]=c;
				else
					this.cart = c.split( this.itemSep );		// fetch the still connected cart field items.
			}
			

			ShoppingCart.prototype.rollCart = function() {
				return( this.cart.join( this.itemSep ) );
			
			}

			ShoppingCart.prototype.crush = function() {									//** not used
			
			var wholeCart = this.cart.join( this.itemSep );
			document.cookie = this.cartName + '=' + escape( wholeCart ); 
		}	
		



		ShoppingCart.prototype.isEmpty = function() { return( this.cart.length == 0 ); }
		
		ShoppingCart.prototype.emptyCart = function() { this.cart.length = 0; this.packCart() }

		ShoppingCart.prototype.defineFields = function() {
			var i, fname;
					
			for(i=0; i<arguments.length; i++) {
				 fname = arguments[i];
				if( this.inList( fname, this.fieldNameList ) == -1 ) 
					this.fieldNameList[ this.fieldNameList.length ] = fname;
			}
		}
		
		ShoppingCart.prototype.gatherFormData = function( oForm ) {
			var i, p;
			var e = oForm.elements;

			this.fieldValues.length=0;
			for( i=0; i<this.fieldNameList.length; i++ ) 
				this.fieldValues[this.fieldValues.length]='';

			this.fieldValues.length = this.fieldNameList.length;			
			for( i=0; i<e.length; i++ ) {
				p = this.inList(e[i].name);
				if( p > -1 ) {
					this.fieldValues[p]=e[i].value;
				}
			}
		}		
		
		ShoppingCart.prototype.packFieldValues = function () {
			this.itemString = this.fieldValues.join( this.fieldSep );
		}
		
		ShoppingCart.prototype.addItemStringToCart = function () {
			this.cart[this.cart.length]=this.itemString;
		}
		
		ShoppingCart.prototype.addItemToCart = function () {
			this.cart[this.cart.length] = this.fieldValues.join( this.fieldSep );
		}
		
		ShoppingCart.prototype.replaceItemInCart = function () {	
			this.cart[this.ith] = this.itemString;
		}	
		
		
		
		ShoppingCart.prototype.packCart = function(  ) {
			var i, newCart = new Array();
			var wholeCart = new String();
			newCart.length = 0;
			for( i=0; i<this.cart.length; i++ ) 
				if( this.cart[i] !== '') newCart[newCart.length] = this.cart[i] ;
			this.cart.length=0;				
			this.cart = newCart;
			
			wholeCart = this.cart.join( this.itemSep );
			document.cookie = this.cartName + '=' + escape( wholeCart );
			
		}
		
		ShoppingCart.prototype.getNextItem = function () {
				this.itemString = this.nextItem();
				this.fieldValues = this.itemString.split(this.fieldSep);
				return( this.fieldValues );
		}		
				
		
		ShoppingCart.prototype.removeItem = function( n ) {		//** not used
			if( n < this.cart.length )
				this.cart[n] = '';
		}
		
		ShoppingCart.prototype.inList = function( oName ) {
			var i;
			for(i=0; i<this.fieldNameList.length; i++) 
				if(oName == this.fieldNameList[i]) return( i );
			return( -1 );
		}
		
			
		ShoppingCart.prototype.trim = function(s) {
			var Trim = /^\s*|\s*$/g;
			return( s.replace( Trim, "" ) );
		}

		// Iterator		
		ShoppingCart.prototype.first     = function () {this.ith = 0 }
		ShoppingCart.prototype.atEnd  = function () {return(this.ith >= this.cart.length) }
		ShoppingCart.prototype.next    = function () { this.ith++ }
		ShoppingCart.prototype.item    = function () { return(this.cart[this.ith]) }
		ShoppingCart.prototype.nextItem = function () { return(this.cart[this.ith++]) }
		ShoppingCart.prototype.kill      = function () { this.cart.length=0 }
		
		
		
//--------------Specific to Particular Cart Structure------------//

		ShoppingCart.prototype.addItem = function( product, description, color, quantity, price  ) {
			var f = this.fieldValues;
			this.openCookieJar();
			f.length = 0;
			f[f.length] = product
			f[f.length] = description;
			f[f.length] = color;
			f[f.length] = quantity;
			f[f.length] = price;				
			this.addItemToCart();
			this.packCart();
				
			document.location = 'view-cart.html';
		}
		
		
		
//----------------End of the Shopping cart object-------------------//		
		
		function roundOff( c ) {
			c = Math.round( c*100 );
			c = c/100;
			return( c );
		}

		function calcCost( quantity, price ) {
			var q = parseFloat( quantity);
			var p = parseFloat( price );
				if( isNaN(q) ) q = 0;
				if( isNaN(p) ) p = 0;						
			var c = p*q;
			TotalNumberOfPackages += q;
			c = Math.round( c*100 );
			c = c/100;
			return( c );
		}

		function makeCents( v ) {
			if( !v ) return;
			var a = v.split('.');
			if( a.length != 2 ) return( v + '.00' );
			var z = a[1];
			if( z.length < 2 ) z += '0';
			if( z.length < 2 ) z += '0';
			return ( a[0] +'.'+ z );
		}			
		

		function cartHeader() { 			
			var s =  "<form name=cartform>";;
			
			s += "<table align='center' border='1' bordercolor='#0066ff' bgcolor='#ffffcc'>";
			s += "<tr><th width='400px'>";
			s += "<font face='arial,helvetica' color='#000088'>";
			s += "Your <B>Cable Clamp<SUP>&reg;</SUP></B> Shopping Cart";
			s += "</font></table><br>";
					
			s += "<table align='center' border='1' bordercolor='#0066ff' bgcolor='#ffffcc'>";
			s += "<tr><th>&nbsp;&nbsp;Model&nbsp;&nbsp;"
			s += "<th>&nbsp;Description&nbsp;";
			s += "<th>&nbsp;Color&nbsp;"
			s += "<th>&nbsp;Quantity&nbsp;"
			s += "<th>&nbsp;Price&nbsp;"
			s +="<th>&nbsp;Cost&nbsp;";
			s +="<th>&nbsp;Check&nbsp;";

			return( s );
		}			
		

				
		function buildLine( a ) {
			s =  "<tr>"
			s += "<td align='center'>"+a[0];
			s += "<td align='center'>"+a[1]
			s += "<td align='center'>"+a[2];
			s += "<td align='center'>"+a[3];
			s += "<td align='center'>"+makeCents(a[4]);
			s += "<td align='center'>"+makeCents(a[5]);
			s += "<td align='center'>&nbsp;&nbsp;<input type='checkbox' name='remove' id='remove'>&nbsp;&nbsp;"
			return( s );		
		}
		
		
		function cartFooter( n, v ) {
		var s = "</table><br>";
			s += "<br>"
			s += "<table align='center' border='1' bordercolor='#0066ff' bgcolor='#ffffcc'>";
			s += "<tr><th width='400px'>";
			s += "<font face='arial,helvetica' color='#000088'>";
			s +=  "Has " + n + " Items - Total Product Cost is &nbsp;$" + v;
			s += "</font></table><br>";
			return( s );
		}		


		/*-----CHA 01-03-02--------------------------------*/
			////////////////////////////////////
			function getCartData() {
			// get contents of cart opbject
			////////////////////////////////////
				cart.openCookieJar();				// fetch cookie from document
				return( cart.rollCart() );					// unpack cart from cookie
			}

		/*----------------------------------------------------*/
		
		function cartControls() {
			// CHA28/Dec/2006 15:36
			// CHA 12-29-01 
			var g = "?" + totalAmount +"^"+  TotalNumberOfPackages + "^" + getCartData();

			var s = "";
			s += "<table align=\"center\" border=0 cellspacing=4>";
			s += " <tr>";
			s += "  <td align=center>";
			s += "   <input type=button onclick=window.location=\"https://secure.cableclamp.com/orderform.html";
			s += g;
			s += "\" value=\'Check Out\'>";
			s += "  <td align=center>";
			s += "   <input type=\'button\' onclick=\'removeChecked();\' value=\'Remove Checked\'>";
			s += "  <td align=center>";
			s += "   <input type=\'button\' onclick=\'removeAll();\' value=\'Empty Cart\'>";
			s += " <tr><td colspan=3 height=10>";
			s += " <tr>";
			s += "  <td align=center>";
			s += "   <input type=\"button\" onclick=\"window.location=\'store.html#top\'\" value=\"Cable Clamps\">";
			s += "  <td align=center><span style=\"font-family:verdana\">";
			s += "   &#8592; Continue Shopping &#8594;</span>";
			s += "  <td align=center>";
			s += "   <input type=\"button\" onclick=\"window.location=\'SeaStore.html#top\'\" value=\"&nbsp;&nbsp;Sea Clamps&nbsp;&nbsp;\">";
			s += "";
			s += "</table>";
			return s
		}//~
		
		
		function emptyNotice() {
			var m =  "<center><font size=4 color='#880000' face='arial'><b>";
			m += "Your cart is empty<p>Please visit the <p><a href='store.html#top'>Cable Clamp Store</a>";
			m += " or the <a href=\"SeaStore.html\">Sea Clamp Store</a>";
			m += "</b></font></center>";
			return( m );			
		}


		function cartLinks() {
			var m = "<p><center>";
				//m += "<a href='javascript: window.history.back()'>Continue Shopping</a>";
				m += "<a href='store.html#top'>Continue Shopping</a>";
				m += "&nbsp;&nbsp;or&nbsp;&nbsp;"
				m += "<a href='orderform.html'>Check Out</a>";
				m += "</center>";
			return m
		}

		function removeChecked() {
			var i, check = document.cartform.remove;

			if( cart.cart.length == 1 ) {
				if( check.checked ) { cart.emptyCart();	}
			} else {

					for(i=0; i<check.length; i++) {
						if(check[i].checked) cart.cart[i]='';
					}
			}					
			cart.packCart();
			repaintCart();
		}

		function removeAll() {
			cart.emptyCart();
			cart.packCart();
			repaintCart();
		}

		function repaintCart() { self.location.replace( self.location );}


		/// GLOBALS ///
			var TotalNumberOfPackages = 0;
			var totalAmount = 0.00;


		function displayCart() {			
			var s='';
			var work = new Array();
			var cost = 0.00;
/* CHA 12-29-01 making into globals; copy used to initialize			
			var totalCost = 0.00;
			var totalAmount;
*/			
			totalCost = 0.00;
			totalAmount = 0.00;


			TotalNumberOfPackages = 0;

			cart.openCookieJar();
			if( cart.isEmpty() ) {document.write( emptyNotice() ); return; }

			document.write( cartHeader() );
			cart.first();
			while( !cart.atEnd() ) {
				work = cart.getNextItem();
				cost = calcCost( work[3], work[4] );
				work[work.length] = makeCents( "" + cost );
				totalCost += cost;
				s = buildLine( cart.fieldValues );
				document.write( s ); 
			}
			totalCost = roundOff( totalCost );
			totalAmount = makeCents( "" + totalCost );
			//document.cookie = cart.cartName + 'total' + "=" + escape( totalAmount+cart.itemSep+cart.cart.length) ;
			document.cookie = cart.cartName + 'total' + "=" + escape( totalAmount+cart.itemSep+TotalNumberOfPackages );
			document.write( cartFooter( "" + cart.cart.length, totalAmount )  );
			document.write( cartControls() );

		}
		
		function cancelCart() {
			document.cookie = cart.cartName + 'total' + "=" + escape( '0.00' + cart.itemSep+ 0) ;
		}

	/* GLOBALS */
				var TotalNumberOfPackages=0;
				var cartDollars='0.00';
				var cartItems='0';
	/* END GLOBALS */
	
			function fetchCartTotal() {
				var wholeCookie = document.cookie;
				var crumbs = wholeCookie.split(';');
				var cartId = cart.cartName+'total';
				var i, a,b;
				cartDollars = 0.00;
				if( wholeCookie.length == 0 ) return( false );
				if( wholeCookie.indexOf( '=' ) < 0 ) return( false );

				for( i=0; i<crumbs.length; i++ ) {
					a = crumbs[i].split('=');
					if( cart.trim(a[0]) == cartId ) {
						b = unescape( a[1] );
						a = b.split( cart.itemSep );
						cartDollars = parseFloat( a[0] );
						cartItems = parseInt( a[1] );
						return( cartDollars != 0.00  );  
					}
				}
				return( false );			
			}


/*** CHA 01-03-02
		function check_cart_totals() {
			var s = new String( window.location );
			a = s.split("?");
			a = a[1].split("^");
			
			//alert( "Window.location=" + window.location );
			cartDollars = parseFloat(a[0]);
			if( isNaN(cartDollars) ) cartDollars = 0.00;
			cartItems = parseInt(a[1]);
			if( isNaN(cartItems) ) cartItems = 1;		// Assume at least one item (if dollars >0 )
			return( cartDollars != 0.00  );
		} 			
***/

// Define the shopping cart for this application.
	var cart = new ShoppingCart( 'qacart' );


