var
	iItemsInCart = 0,
	dfpStandardShippingTotal = 0.0,
	dfpExpressShippingTotal = 0.0,
	dfpOrderTotal = 0.0,
	dfpShippingCharge = 0.0;
var
	fIsNavigator = false;

function cleanEntryFieldString( efEntryField ) 
{
	if( efEntryField == null ||
		('' + efEntryField) == 'Not Defined' )
		return;
		
	var
		sCleanFieldValue = '',
		sEntryFieldValue = efEntryField.value;
		
	if( sEntryFieldValue == null || sEntryFieldValue == 'Not Defined' )
		return;
		
	// alert( "Entry field value: \"" + sEntryFieldValue + "\"" );
		
	for( var iScanChar = 0; iScanChar < sEntryFieldValue.length; iScanChar++ )
		if( sEntryFieldValue.charAt( iScanChar ) == '\'' ||
			sEntryFieldValue.charAt( iScanChar ) == '\"' )
			sCleanFieldValue += '`';
		else
			if( sEntryFieldValue.charAt( iScanChar ) == '|' ||
				 sEntryFieldValue.charAt( iScanChar ) == '\\' )
				sCleanFieldValue += " ";
			else
				sCleanFieldValue += sEntryFieldValue.charAt( iScanChar );
				
	efEntryField.value = sCleanFieldValue;
}

	function determineBrowserType()
	{
		if( parseInt( navigator.appVersion.charAt( 0 ) ) >= 4 )
			fIsNavigator = (navigator.appName == "Netscape" ? true : false);	
	}	
		
	function cleanArgString( sArgStr )
	{
		if( sArgStr == null )
			return null;
			
		var
			reRegExp = new RegExp( "%20", "g" );
		var
			sTempStr = sArgStr != null ? sArgStr : "";
			
		return sTempStr.replace( reRegExp, " " );
	}

function getCookieVal (offset) 
{
	var
		endstr = document.cookie.indexOf (";", offset);

	if ( endstr == -1 )
		endstr = document.cookie.length;

	return unescape(document.cookie.substring(offset, endstr));
}

function showError(sErrMsg,sURL,sLine)
{
	alert( "Error " + sErrMsg + " in \"" + sURL + "\" at line " + sLine );
}


function getCookie (name) 
{
  var
   	sResult = null,
		asCookieEntries = document.cookie.split( "; " );
		
   for( var iCookieScan = 0; iCookieScan < asCookieEntries.length; iCookieScan++ )
   {
   	var
   		asCrumb = asCookieEntries[ iCookieScan ].split( "=" );

//		if( asCrumb[ 0 ] == name )
//			alert( "Matched entry: " + asCrumb[ 0 ] + "\nValue: " + asCrumb[ 1 ] );

		if( asCrumb[ 0 ] == name )
			return unescape( asCrumb[ 1 ] );
   }
   
	return sResult;
}

function getCookieSubItem(name,subitemname)
{
//	alert( "Trying to get cookie " + name );

	var
		sCurrentCookieValue = getCookie( name );

//	alert( "Cookie result: " + sCurrentCookieValue );

	if( sCurrentCookieValue == null )
		return null;
	
	var 
		asPairs = sCurrentCookieValue.split( "~" );

	for( var iScan = 0; iScan < asPairs.length; iScan++ )
	{
		var
			asSubItem = asPairs[ iScan ].split( ":" );
		
//		if( name == "Items" )
//			alert( "Subitem: \"" + asSubItem[ 0 ] + "\"\n" + asSubItem[ 1 ] );
			
		if( asSubItem[ 0 ] == subitemname )
		{				
			var
				sFoundValue = asSubItem[ 1 ]; // asPairs[ iScan ].substr( asPairs[ iScan ].indexOf( subitemname + ":" ) + subitemname.length + 1  );

			var
				re = new RegExp( "<sp>", "g"),
				sCleanerValue = sFoundValue.replace( re, " " );
			sFoundValue = sCleanerValue;

			sCleanerValue = sFoundValue.replace( /<c>/g, "," );
			sFoundValue = sCleanerValue;

			re = new RegExp("<t>", "g"),
			sCleanerValue = sFoundValue.replace( re, "~" );
			sFoundValue = sCleanerValue;

			re = new RegExp("<se>", "g"),
			sCleanerValue = sFoundValue.replace( re, ";" );
			sFoundValue = sCleanerValue;

			re = new RegExp("<co>", "g"),
			sCleanerValue = sFoundValue.replace( re, ":" );
			sFoundValue = sCleanerValue;

			return sFoundValue;
		}
	}

	return null;
}


function setCookieSubItem (name, subitemname,value) 
{
	value = "" + value;

	if( value != null )
	{
		value = value.replace( /,/g, "<c>" );
		value = value.replace( /~/g, "<t>" );
		value = value.replace( /;/g, "<se>" );
		value = value.replace( / /g, "<sp>" );
		value = value.replace( /:/g, "<co>" );
	}

	var
		sCurrentCookieValue = getCookie( name );

	if( sCurrentCookieValue == null )
	{
		var
			sNewCookieValue = subitemname + ":" + value;

		setCookie( name, sNewCookieValue );
		return;
	}
	else
	{
		var 
			fFound = false,
			asPairs = sCurrentCookieValue.split( "~" );

		// See if it's already in list
		for( var iScan = 0; iScan < asPairs.length; iScan++ )
		{
			if( asPairs[ iScan ].indexOf( subitemname + ":" ) != -1 )
			{
				fFound = true;
			}
		}

		// If found and only one cookie and we're removing it, set it to null
		if( fFound && value == null && asPairs.length == 1 )
		{
			// No more pairs, remove cookie
			setCookie( name, "" );
			return;
		}

		// If not found and no value, do nothing
		if( !fFound && value == null )
			return;

		var
			sResultCookie = "";
		for( var iScan = 0; iScan < asPairs.length; iScan++ )
		{
			if( asPairs[ iScan ].indexOf( subitemname + ":" ) != -1 )
			{
				if( value == null )
				{
					continue;
				}

				if( sResultCookie.length > 1 )
					sResultCookie += "~";

				sResultCookie += subitemname + ":" + value;
			}
			else
			{
				if( sResultCookie.length > 1 )
					sResultCookie += "~";

				sResultCookie += asPairs[ iScan ];
			}
		}

		// If we're just adding it to the list
		if( !fFound )
		{
			if( sResultCookie.length > 1 &&
			   sResultCookie.charAt( sResultCookie.length - 1 ) != '~' )
				sResultCookie += "~";

			sResultCookie += subitemname + ":" + value;
		}

		setCookie( name, sResultCookie );
	}
}

function setPermCookie (name, value) 
{
	var
		argv = setPermCookie.arguments;
	var 
		argc = setPermCookie.arguments.length;

	var
		expires = new Date();

  	var
		path = (argc > 3) ? argv[3] : "/";

	var
		domain = (argc > 4) ? argv[4] : null;

	var
		secure = (argc > 5) ? argv[5] : false;

   	expires.setTime (expires.getTime() + (365 * 24 * 60 * 60000) );  // 1 year in advance

	document.cookie = name + "=" + escape (value) +

 	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +

	((path == null) ? "" : ("; path=" + path)) +

	((domain == null) ? "" : ("; domain=" + domain)) +

	((secure == true) ? "; secure" : "");

}

function setCookie (name, value) 
{
	var
		argv = setCookie.arguments;
	var 
		argc = setCookie.arguments.length;

	var
		expires = (argc > 2) ? argv[2] : null;

  	var
		path = (argc > 3) ? argv[3] : "/";

	var
		domain = (argc > 4) ? argv[4] : null;

	var
		secure = (argc > 5) ? argv[5] : false;

	document.cookie = name + "=" + escape (value) +
	 	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");

}
function clearCookie()
{
	if( confirm( "Are you sure you want to erase everything in your Shopping Cart?" ) )
	{
		setCookie( "Items", "" );
		location.reload();
	}
}

function deleteCookie () 
{

   var exp = new Date();

   exp.setTime (exp.getTime() - 1000000000);  // This cookie is history (changed -1 to make it previous time)

   var cval = getCookie ('DemoName');

   document.cookie ='DemoName' + "=" + cval + "; expires=" + exp.toGMTString();
}

function cleanDollarAmount( amount )
{
	if( amount == null )
		return "0.00";
	
	var
		iDollars = Math.floor( amount ),
		fpCents = amount - iDollars;

	if( Math.abs( fpCents ) < 0.01 )
		fpCents = 0;
	fpCents = fpCents * 100.0;

	var
		iCents = Math.floor( fpCents );
	if( fpCents - iCents > 0.5 && iCents < 99 )
		iCents++;

	return "" + iDollars + "." + (iCents < 10 ? "0" : "") + iCents;
}

function openShoppingCart()
{
	determineBrowserType();

// 	if( getCookieSubItem( "CompanyInfo", 'CompanyName' ) != null )
	{
		var 
			wndPurchase = window.open( "https://www.repdirect.net/WebCatalogLibraryTools/ProductOrderRequestSubmitShoppingCart.jsp", "WCTProductDetails", "toolbar=no,directories=no,titlebar=yes,status=yes,scrollbars=yes,resizable=no,location=no,height=460,width=600,top=0,left=20" );

		wndPurchase.focus();
	}
//	else
//		alert( "Your Order Request List is empty." );
}

var
	aiTranslate = new Array(  0, 2, 4, 6, 8, 1, 3, 5, 7, 9 );
var
	sCalculatedCardType = null;
	
	function getCalculatedCardType() 
	{
		return sCalculatedCardType;
	}

	function checkCardNumber( sCCCardNumber )
	{

		sCCCardNumber = sCCCardNumber.replace( / /gi, "" );
		sCCCardNumber = sCCCardNumber.replace( /\//gi, "" );
		sCCCardNumber = sCCCardNumber.replace( /-/gi, "" );
		
		// For debugging purposes/testing only
		// this will be rejected by rep if received as part of an order
		if( sCCCardNumber == '4111111111111111' )
			return true;
			
		if( isValidMastercard( sCCCardNumber ) )
		{
			sCalculatedCardType = "MC";
			return true;
		}
			
		if( isValidDiscover( sCCCardNumber ) )
		{
			sCalculatedCardType = "DS";
			return true;
		}
		
		if( isValidAmex( sCCCardNumber ) )
		{
			sCalculatedCardType = "AE";
			return true;
		}
		
		if( isValidVisa( sCCCardNumber ) )
		{
			sCalculatedCardType = "VS";
			return true;
		}

		return false;
	}

	function isValidMastercard( sMCCardNumber )
	{
		if( sMCCardNumber.length != 16 )
			return false;
		
		var
			iPrefix = new Number( sMCCardNumber.substring( 0, 2 )  );

		if( iPrefix < 51 || iPrefix > 55 )	
			return false;

		return isValidCard( sMCCardNumber, 16 );	
	}

	function isValidDiscover( sDSCardNumber )
	{
		if( sDSCardNumber.length != 16 )
			return false;
		
		var
			iPrefix = new Number( sDSCardNumber.substring( 0, 4 )  );

		if( iPrefix != 6011 )
			return false;

		return isValidCard( sDSCardNumber, 16 );	
	}

	function isValidAmex( sAECardNumber )
	{
		if( sAECardNumber.length != 15 )
			return false;
		
		var
			iPrefix = new Number( sAECardNumber.substring( 0, 2 ) );

		if( iPrefix != 34 && iPrefix != 37 )
			return false;

		return isValidCard( sAECardNumber, 15 );	
	}

	function isValidVisa( sVSCardNumber )
	{
		if( sVSCardNumber.length == 13 )
		{		
			var
				iPrefix = new Number( sVSCardNumber.substring( 0, 1 )  );

			if( iPrefix != 4 )
				return false;

			return isValidCard( sVSCardNumber, 13 );	
		}

		if( sVSCardNumber.length == 16 )
		{		
			var
				iPrefix = new Number( sVSCardNumber.substring( 0, 1 )  );

			if( iPrefix != 4 )
				return false;

			return isValidCard( sVSCardNumber, 16 );	
		}

		return false;
	}

	function isValidCard( sCCCardNumber, iMaxDigits )
	{
		var
			iTotal = new Number( 0 );

		// Correct index for array processing
		iMaxDigits--;

		for( var iDigit = iMaxDigits; iDigit >= 0; iDigit-- )
		{
			var 
				iNumber = new Number( sCCCardNumber.charAt( iDigit ) );

			if( ((iMaxDigits - iDigit ) & 1) != 0 )
			{
				// Odd - use special case
				iTotal +=  aiTranslate[ iNumber ];
			}
			else
			{
				// even numbers - use these directly
				iTotal += iNumber;
			}		
		}

		if(( iTotal % 10 ) == 0 )
			return true;	
		
		return false;
	}


function validateCreditCardInformation( form )
{
/*	if( form.CreditCardType.value == 'MC' ||
	    form.CreditCardType.value == 'VS' ||
 	    form.CreditCardType.value == 'AE' ||
	    form.CreditCardType.value == 'MC' )
*/	    
	{
		if( !checkCardNumber( form.CreditCardNumber.value ) )
		{
			alert( "Your credit card number does not appear to be correct.  Please try again." );
			form.CreditCardNumber.focus();
			return false;
		}
	}
	
	// Compare Credit Card Exp. date with today
	var
		dtToday = new Date();
	var
		iMonth = new Number( form.CreditCardExpMonth.options[ form.CreditCardExpMonth.selectedIndex ].value ) - 1, // Convert month to index to match Date object
		iYear = new Number( form.CreditCardExpYear.options[ form.CreditCardExpYear.selectedIndex ].value ),
		iSystemYear = dtToday.getYear(); // 
		
	if( iSystemYear < 2000 )
		iSystemYear += 1900;
		
	if( iYear < iSystemYear )
	{
		alert( "The expiration date for your card appears to have past (at least according to the date on your computer).  Please check the date and try again." );
		form.CreditCardExpYear.focus();
		return false;
	}
				
	// Check month if the year is this year
	if( iYear == iSystemYear )
	{
		if( iMonth < dtToday.getMonth() )
		{
			alert( "The expiration date for your card appears to have past (at least according to the date on your computer).  Please check the date and try again." );
			form.CreditCardExpMonth.focus();
			return false;
		}
	}
	
	if( form.CreditCardVerify.value.length == 0 )
	{
		alert( "Please enter in the Credit Card verification number or customer service number located on the back of your credit card." );
		form.CreditCardVerify.focus();
		return false;
	}
	
	if( form.BillingFirstName.value.length == 0 )
	{
		alert( "Please enter your first name exactly as it appears on your credit card.  If your card includes a middle initial, include it along with your first name." );
		form.BillingFirstName.focus();
		return false;
	}
	if( form.BillingLastName.value.length == 0 )
	{
		alert( "Please enter your last name exactly as it appears on your credit card.  If your name includes a suffix (such as \"Jr.\") please enter it after your last name." );
		form.BillingLastName.focus();
		return false;
	}
	
	if( form.BillingPhone.value.length == 0 )
	{
		alert( "Please enter a phone number where you can be contacted if there is a problem completing this transaction." );
		form.BillingPhone.focus();
		return false;
	}
	
	if( form.BillingEmailAddress.value.length == 0 )
	{
		alert( "Please enter your email address so that you may be contacted if there is a problem completing this transaction." );
		form.BillingEmailAddress.focus();
		return false;
	}

	if( form.BillingAddressStreet1.value.length == 0 ||
		form.BillingAddressCity.value.length == 0 ||
		form.BillingAddressState.selectedIndex == 0 ||
		form.BillingAddressZip.value.length == 0 )
	{
		alert( "Please enter your billing address exactly as it appears on your credit card statement." );
		
		if( form.BillingAddressStreet1.value.length == 0 )
		{
			form.BillingAddressStreet1.focus();
			return false;
		}

		if( form.BillingAddressCity.value.length == 0 )
		{
			form.BillingAddressCity.focus();
			return false;
		}
		
		if( form.BillingAddressState.selectedIndex == 0 )
		{
			form.BillingAddressState.focus();
			return false;
		}
		
		if( form.BillingAddressZip.value.length == 0 )
		{
			form.BillingAddressZip.focus();
			return false;
		}
		return false;
	}
	
	return true;
}
