/* Product Template JavaScript Module
   Copyright (C) 2000 Learnology Ltd
   All rights reserved

   String and field management functions (except InitializeQuantity) reproduced
   with the permission of Mark Lim. */



/* Form Management Variables */

var Task;


/* Shopping Cart Management Variables */

var InitialQuantity;


/* Error Messages */

var ErrorMessage =
 "You entered non-numeric input where numeric input was expected";



/* String Management Functions */

function Digit(TargetCharacter)

/* Determine if the character specified by TargetCharacter is indeed a digit. */


{
   if (TargetCharacter >= "0" && TargetCharacter <= "9")
	 return true;
   else
	 return false;
}



function Separator(TargetCharacter)

/* Determine if the character specified by TargetCharacter is indeed a separator
   or white-space character. */


{
   var ReturnValue;

   if (TargetCharacter == "\t")
	 ReturnValue = true;
   else if (TargetCharacter == "\n")
	 ReturnValue = true;
   else if (TargetCharacter == "\f")
	 ReturnValue = true;
   else if (TargetCharacter == "\r")
	 ReturnValue = true;
   else if (TargetCharacter == " ")
	 ReturnValue = true;
   else
	 ReturnValue = false;

   return ReturnValue;
}



function Trim(TargetString)

/* Return TargetString trimmed of all leading and trailing white-space. */


{
   var LeftIndex  = 0;
   var RightIndex = TargetString.length - 1;

   var TargetCharacter;

   TargetCharacter = TargetString.charAt(LeftIndex);

   while (TargetCharacter != "" && Separator(TargetCharacter))
	 {
		LeftIndex++;
		TargetCharacter = TargetString.charAt(LeftIndex);
	 }

   TargetCharacter = TargetString.charAt(RightIndex);

   while (TargetCharacter != "" && Separator(TargetCharacter))
	 {
		RightIndex--;
		TargetCharacter = TargetString.charAt(RightIndex);
	 }
   RightIndex++;

   if (LeftIndex < RightIndex)
	 return TargetString.substring(LeftIndex, RightIndex);
   else
	 return "";
}



function Collapse(SourceString)

/* Return SourceString with all runs of white-space collapsed to single
   characters. */


{
   var TargetString = "";

   var TargetCharacter;
   PreviousCharacter = new Array(2);

   for (var Index = 0; Index < SourceString.length; Index++)
	 {
		TargetCharacter = SourceString.charAt(Index);

		if (Separator(TargetCharacter))
		  {
			 if (PreviousCharacter[0] == "")
			   {
				  TargetString += TargetCharacter;
				  PreviousCharacter[0] = TargetCharacter;
			   }
			 else
			   {
				  if (PreviousCharacter[0] == "\r" && TargetCharacter == "\n")
					{
					   if (PreviousCharacter[1] == "")
						 {
							TargetString += TargetCharacter;
							PreviousCharacter[1] = TargetCharacter;
						 }
					}
			   }
		  }
		else
		  {
			 TargetString += TargetCharacter;

			 PreviousCharacter[0] = "";
			 PreviousCharacter[1] = "";
		  }
	 }

   return TargetString;
}



function Normalize(TargetString)

/* Return TargetString in normalized, integer format. */


{
   var Index = 0;
   var TargetCharacter;

   TargetString = Trim(TargetString);

   if (TargetString.length > 0)
	 {
		TargetCharacter = TargetString.charAt(Index);

		while (TargetCharacter != "" && TargetCharacter == "0")
		  {
			 Index++;
			 TargetCharacter = TargetString.charAt(Index);
		  }

		if (Index == 0)
		  return TargetString;
		else if (Index < TargetString.length)
		  return TargetString.substring(Index, TargetString.length);
		else
		  return "0";
	 }
   else
	 {
		return "0";
	 }
}



/* Cookie Management Functions */

function GetCookie(TargetCookie)

/* Return the value of the cookie specified by TargetCookie. */


{
   var TargetValue = "";

   var LeftIndex;
   var RightIndex;

   TargetCookie += "=";

   if (document.cookie.length > 0)
	 {
		LeftIndex = document.cookie.indexOf(TargetCookie);

		if (LeftIndex != -1)
		  {
			 LeftIndex += TargetCookie.length;

			 RightIndex = document.cookie.indexOf(";", LeftIndex);

			 if (RightIndex == -1)
			   RightIndex = document.cookie.length;

			 return document.cookie.substring(LeftIndex, RightIndex);
		  }
	 }

   return TargetValue;
}



function SetCookie(TargetCookie, TargetValue)

/* Set the value of the cookie specified by TargetCookie to TargetValue. */


{
   document.cookie = TargetCookie + "=" + TargetValue;
}



/* Field Management Functions */

function InitializeQuantity()

/* Initialize the Quantity field. */


{
   var OrderForm = document.OrderForm;

   var Key = OrderForm["key"].value;
   var Quantity = 0;

   var ShoppingCart = GetCookie("shopping-cart");

   if (ShoppingCart != "")
	 {
		var LeftIndex;
		var RightIndex;

		LeftIndex  = ShoppingCart.indexOf(":" + Key + "-");

		if (LeftIndex != -1)
		  {
			 LeftIndex += Key.length + 2;
			 RightIndex = ShoppingCart.indexOf(":", LeftIndex);

			 if (RightIndex != -1)
			   Quantity = ShoppingCart.substring(LeftIndex, RightIndex);
		  }
	 }

   InitialQuantity = Quantity;

   if (Quantity != 0)
	 OrderForm["quantity"].value = Quantity;
   else
	 OrderForm["quantity"].value = "";
}



function FormatQuantity(TargetField)

/* Format the value entered in the field specified by TargetField as a
   numeric quantity. */


{
   FormatString(TargetField);

   if (TargetField.value.length > 0)
	 {
		if (!ValidateQuantity(TargetField))
		  {
			 TargetField.value = "0";
		  }
	 }
}



function FormatString(TargetField)

/* Format the value entered in the field specified by TargetField as a
   string. */


{
   if (TargetField.value.length > 0)
	 TargetField.value = Trim(TargetField.value);

   if (TargetField.value.length > 0)
	 TargetField.value = Collapse(TargetField.value);
}



/* Validation Functions */

function ValidateQuantity(TargetField)

/* Validate the value entered in the quantity field specified by TargetField. */


{
   var SubmitField = true;

   var TargetString = "";
   var TargetCharacter;

   for (var Index = 0; Index < TargetField.value.length; Index++)
	 {
		TargetCharacter = TargetField.value.charAt(Index);

		if (Digit(TargetCharacter))
		  TargetString += TargetCharacter;
		else
		  SubmitField = false;
	 }

   TargetField.value = Normalize(TargetString);

   if (!SubmitField)
	 window.alert(ErrorMessage);

   return SubmitField;
}



function PostQuantity()

/* Make any orders placed on this page part of the persistent client-side
   state. */


{
   var OrderForm = document.OrderForm;

   var Key = OrderForm["key"].value;
   var Quantity = OrderForm["quantity"].value;

   var ShoppingCart = GetCookie("shopping-cart");
   var ItemList = "";

   if (Quantity == "")
	 Quantity = 0;

   if (Quantity != InitialQuantity)
	 {
		var LeftIndex  = Number.NaN;
		var RightIndex = Number.NaN;

		var LeftString = ":";
		var RightString = "";

		if (ShoppingCart != "")
		  {
			 LeftIndex  = ShoppingCart.indexOf(":" + Key + "-");
			 RightIndex = ShoppingCart.indexOf(":", LeftIndex + 1);

			 if (LeftIndex >= 0)
			   {
				  LeftString  = ShoppingCart.substring(0, LeftIndex + 1);
				  RightString = ShoppingCart.substring(RightIndex + 1);
			   }
			 else
			   {
				  LeftString  = ShoppingCart;
				  RightString = "";
			   }
		  }

		if (Quantity != 0)
		  {
			 ItemList = LeftString + Key + "-" + Quantity + ":" + RightString;
		  }
		else
		  {
			 if (!isNaN(LeftIndex))
			   ItemList = LeftString + RightString;

			 OrderForm["quantity"].value = "";
		  }

		SetCookie("shopping-cart", ItemList);

		InitialQuantity = Quantity;

		window.alert("Your shopping cart has been updated");
	 }
}



function ValidateForm()

/* Validate the form presented to the user by the current page. */


{
   var OrderForm = document.OrderForm;

   if (Task == "Preview Order")
	 return true;
   else
	 return false;
}
