// JavaScript Shopping Cart
//                                       
// JavaScript Cart V.1.0.0 


// This file requires variable defined in netmag_template_customization_1_0_0.js
// which must be inclueded in the HTML page before this file.

MonetarySymbol        = '$';
DisplayTaxRow         = false;
TaxRate               = 0.0;
TaxByRegion           = false;
TaxPrompt             = 'For tax purposes, please select if you are an New York resident before continuing';
TaxablePrompt         = 'New York Residents';
NonTaxablePrompt      = 'Other States';


// FUNCTION:    AddToCart                                           
// PARAMETERS:  SKU,Qty,Descr,Price, path to thumbnail image                                      
// RETURNS:     Cookie to user's browser, with prompt               
// PURPOSE:     Adds a product to the user's shopping cart          

function AddToCart(SKU,Qty,Descr,Price,ImgPath) {
	
   var iNumberOrdered = 0;
   var bAlreadyInCart = false;
   var notice = "";
   iNumberOrdered = GetCookie("NumberOrdered");

   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   //Is this product already in the cart?  If so, increment quantity instead of adding another.
   for ( i = 1; i <= iNumberOrdered; i++ ) {
      NewOrder = "Order." + 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] == SKU &&
           fields[2] == Price  &&
           fields[3] == Descr   &&
           fields[5] == ImgPath
         ) {
         bAlreadyInCart = true;
         dbUpdatedOrder = SKU    + "|" +
                          (parseInt(Qty)+parseInt(fields[1]))  + "|" +
                          Price     + "|" +
                          Descr      + "|" +
                          "0"  + "|" +
                          ImgPath;
         strNewOrder = "Order." + i;
         DeleteCookie(strNewOrder, "/");
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         notice = Qty + " x " + Descr + strAdded;
         break;
      }
   }


   if ( !bAlreadyInCart ) {
      iNumberOrdered++;

      if ( iNumberOrdered > 12 )
         alert( strSorry );
      else {
         dbUpdatedOrder = SKU    + "|" + 
                          Qty  + "|" +
                          Price     + "|" +
                          Descr      + "|" +
                          "0"  + "|" +
                          ImgPath;

         strNewOrder = "Order." + iNumberOrdered;
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         SetCookie("NumberOrdered", iNumberOrdered, null, "/");
         notice = Qty + " x " + Descr + strAdded;
      }
   }


      alert(notice)
}

// ************************ COOKIE FUNCTIONS *************************************

// 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 in Cookie               
// 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";
   }
}

// ***************************** END COOKIE FUNCTIONS **********************

// FUNCTION:    DisplayCart
// PARAMETERS:  Null 
// RETURNS:     Product Table Written to Document  
// PURPOSE:     Draws current cart

function DisplayCart() {
   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 strUpdateAction ="";//

   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

	  strOutput = "<div id=\"basketh\">" +
                  "<ul>" +
                  "<li>"+strILabel+"</li>" +
                  "<li>"+strDLabel+"</li>" +
                  "<li>"+strPLabel+"</li>" +
					"<li>"+strQLabel+"</li>" +
					"<li>"+strSLabel+"</li>" +
					"<li>"+strALabel+"</li><br></ul>" +
					"</div>";

   if ( iNumberOrdered == 0 ) {
      strOutput += "<div id=\"basket\"><p class=\"p1\"><span>Your cart is empty</span></p></div>";
   }
	
	for ( i = 1; i <= iNumberOrdered; i++ ) {
		NewOrder = "Order." + 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 );					// SKU
		fields[1] = database.substring( Token0+1, Token1 );				// Quantity
		fields[2] = database.substring( Token1+1, Token2 );				// Price
		fields[3] = database.substring( Token2+1, Token3 );				// Product	
		fields[4] = database.substring( Token3+1, Token4 );				// Shipping Cost
		fields[5] = database.substring( Token4+1, database.length );	//Thumbnail Image

		fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );
		fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
		fTax        = (fTotal * TaxRate);
		strTotal    = moneyFormat(fTotal);
		strTax      = moneyFormat(fTax);
		strShipping = moneyFormat(fShipping);
		indx=i-1;
		
		if ( iNumberOrdered == 1 ) {
		strUpdateAction="javascript:ChangeQuantity("+i+", document.cartform.qty.value);"
		} else {
		strUpdateAction="javascript:ChangeQuantity("+i+", document.cartform.qty["+indx+"].value);"
		}
		
		// Start to write out the item
		strOutput += "<div id=\"basketlist\"><ul>"
		// image
	//	strOutput += "<li>"  + fields[5] + "</li>";
	strOutput += "<li><img src=\"http://www.netmagazines.com/images/"+fields[5]+"\" width=\"50\" height=\"66\"  /></li>"
		// product name
		strOutput += "<li>"  + fields[3] + "</li>";
		// Unit Price
		strOutput += "<li>"+ MonetarySymbol + moneyFormat(fields[2]) + "</li>";
		//Quantity
		strOutput += "<li><span><input type=\"text\" name=\"qty\" size=\"2\" maxlength=\"3\"  value=\"" + fields[1] + "\" class=\"input1\" /></span></li>";
		// Line Total
		strOutput += "<li>"+MonetarySymbol + moneyFormat((parseInt(fields[1]) * parseFloat(fields[2]) ))+"</li>";
		// Action
		strOutput += "<li><a href=\""+strUpdateAction+"\"> <img src=\"images/button_update.gif\" width=\"57\" height=\"16\" alt=\"Update\" /></a><br /><br />"+
		"<a href=\"javascript:RemoveFromCart("+i+");\"> <img src=\"images/button_remove.gif\" width=\"57\" height=\"16\" alt=\"Remove\" /></a>"+
		"</li></ul><br></div>";
   }
   // end of line items
   strOutput += "<div id=\"total_box\"><div id=\"total\"><ul>";

   //Subtotal
   strOutput += "<li>"+strSUB+"</li>"
   strOutput += "<li>" + MonetarySymbol + strTotal + "</li>";
   strOutput += "</ul>";
   
   //don't do tax and shipping as this will be done by netmagazines
   g_TotalCost = (fTotal + fShipping + fTax);
  
	// end totals block, but not the div as there is still the checkout button to add
	//Check out button
	strOutput += "<span><a href=\"javascript:CheckOut("+g_TotalCost+")\"> <img src=\"images/b_checkout.gif\" alt=\"Proceed to Checkout\" /></a></span>";
	strOutput += "</div></div>"
	
	//write out the data to the page
	document.write(strOutput);
//	alert(strOutput);
	document.close();
}

// ***************** Functions used by "managecart" ************************************




// 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:    RemoveFromCart
// PARAMETERS:  Order Number to Remove
// RETURNS:     Null
// PURPOSE:     Removes an item from a users shopping cart

function RemoveFromCart(RemOrder) {
   if ( confirm( strRemove ) ) {
      NumberOrdered = GetCookie("NumberOrdered");
      for ( i=RemOrder; i < NumberOrdered; i++ ) {
         NewOrder1 = "Order." + (i+1);
         NewOrder2 = "Order." + (i);
         database = GetCookie(NewOrder1);
         SetCookie (NewOrder2, database, null, "/");
      }
      NewOrder = "Order." + NumberOrdered;
      SetCookie ("NumberOrdered", NumberOrdered-1, null, "/");
      DeleteCookie(NewOrder, "/");
      location.href=location.href;
   }
}

// 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 +" - "+ NewQuantity );
   } else {
      NewOrder = "Order." + 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 = "Order." + OrderItem;
      DeleteCookie(strNewOrder, "/");
      SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
      location.href=location.href;      
   }
}

// FUNCTION:    CheckOut
// PARAMETERS:  Total 
// RETURNS:     null
// PURPOSE:    check cart is valid and trnasfer the basket to net magazines

function CheckOut(Total) {
var strLSURL     = ""; 
var strBTURL     = ""; 
var strItems ="";
if ( Total < MinimumOrder ) {
         alert( MinimumOrderPrompt );
         
      }else {
      strLSURL="http://click.linksynergy.com/fs-bin/click?id="+strLinkShareID+"&subid=1&offerid=50887.1&type=10&tmpid=1321&RD_PARM1="
      strBTURL= "http%3A%2F%2Fwww%2ENetMagazines%2Ecom%2Faddaffiliate%2Easp%3Fsourceid%3D"+strLinkShareID+"%3Fcatalog%3D"
      
      iNumberOrdered = GetCookie("NumberOrdered");
      if ( iNumberOrdered == null )
		 iNumberOrdered = 0;
		 
	for ( i = 1; i <= iNumberOrdered; i++ ) {
		NewOrder = "Order." + 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 );					// SKU
		fields[1] = database.substring( Token0+1, Token1 );				// Quantity
		fields[2] = database.substring( Token1+1, Token2 );				// Price
		fields[3] = database.substring( Token2+1, Token3 );				// Product	
		fields[4] = database.substring( Token3+1, Token4 );				// Shipping Cost
		fields[5] = database.substring( Token4+1, database.length );	//Thumbnail Image

		if ( strItems != "" )
		 strItems +="%2C";
		 
		strItems     += fields[0]+"%7C"+ fields[1];

		}
		 strBTURL+=strItems;
		 
       location.href= strLSURL+strBTURL ;
      }
}
// *******************************************************************************

// FUNCTION:    GotoLinkshareOffer
// PARAMETERS:  OfferID,SubID, Type 
// RETURNS:     null
// PURPOSE:    redirect to a URL

function GotoLinkshareOffer (OfferID, Type, SubID) {
	var URL="http://click.linksynergy.com/fs-bin/click?id="+strLinkShareID+"&offerid="+
	OfferID+"&type="+Type+"&subid="+SubID;
	location.href=URL;
}

// FUNCTION:    GotoLinkshareOffer
// PARAMETERS:  link (true/false)
// RETURNS:     null
// PURPOSE:    redirect to a URL

function DisplayEmail (bLink) {
	var strOutput="";

	if (bLink){
		strOutput="<a href=\"mailto:"+strSiteEmail+"\" class=\"K\">"+strSiteEmail+"</a>";	
	}
	else {
		strOutput=strSiteEmail;
	}
	
	//write out the data to the page
	document.write(strOutput);
	document.close();
}

