//---------------------------------------------------------------------||   
//  JavaScript Shop Module, V.4.4.0        
//---------------------------------------------------------------------||                             

// ******* Cambiar el root de window.location en BTN_ContinueShopping 

//dominioServer		  = 'http://www.royalresorts.com'
//dominioSecureServer = 'http://www.members.royalresorts.com'
MonetarySymbol        = '$';
TaxRate               = 0.00;
MinimumOrder          = 0.00;
MinimumOrderPrompt    = 'Your cart is empty, you can not checkout.';

//Names for Hidden fields:
OutputItemCode               = 'ItemCode';
OutputItemQuantity           = 'ItemQuantity';
OutputItemPrice              = 'ItemPrice';
OutputItemName               = 'ItemName';
OutputItemCategory           = 'ItemCategory';
OutputItemLocationCodeToPay  = 'ItemLocationCodeToPay';
OutputOrderTotal             = 'ItemTotal';
OutputNumItems		         = 'numItems';
OutputLanguage               = 'Language';

////

//Messages
strRemove = "Click 'Ok' to remove this product from your shopping cart.";
strErrQty = "Invalid Quantity.";
strNewQty = 'Please enter new quantity:';
strSorry  = "Your cart is full, please proceed to checkout.\n\n If you wish to continue shopping, please checkout to complete this Order and select the new Items. Thank you."; 

/////////////////////////////////////////////////////// BEGIN COOKIES ///////////////////////////////////////////////////////////////////////

//---------------------------------------------------------------------||
// 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  COOKIES ///////////////////////////////////////////////////////////////////////

//---------------------------------------------------------------------||
// 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:    CKquantity                                             ||
// PARAMETERS:  Quantity to                                            ||
// RETURNS:     Quantity as a number, and possible alert               ||
// PURPOSE:     Make sure quantity is represented as a number          ||
//---------------------------------------------------------------------||
function CKquantity(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);
}

//---------------------------------------------------------------------||
// 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 = "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:    AddToCart                                              ||
// PARAMETERS:  Form Object                                            ||
// RETURNS:     Cookie to user's browser, with prompt                  ||
// PURPOSE:     Adds a product to the user's shopping cart             ||
//---------------------------------------------------------------------||
function AddToCart(thisForm) {
   var iNumberOrdered = 0;
   var bAlreadyInCart = false;
   iNumberOrdered = GetCookie("NumberOrdered");

   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

   if ( thisForm.ItemCode == null )
      strCODE    = "";
   else
      strCODE    = thisForm.ItemCode.value;

   if ( thisForm.ItemQuantity == null )
      strQUANTITY  = "1";
   else
      strQUANTITY  = thisForm.ItemQuantity.value;

   if ( thisForm.ItemPrice == null )
      strPRICE     = "0.00";
   else
      strPRICE     = thisForm.ItemPrice.value;

   if ( thisForm.ItemName == null )
      strNAME      = "";
   else
      strNAME      = thisForm.ItemName.value;

   if ( thisForm.ItemCategory == null )
      strCATEGORY  = "";
   else
      strCATEGORY  = thisForm.ItemCategory.value;
      
   if ( thisForm.ItemLocationCodeToPay == null )
      strLOCATIONCODETOPAY  = "";
   else
      strLOCATIONCODETOPAY  = thisForm.ItemLocationCodeToPay.value;
	
	// Product Additional Information
   if ( thisForm.ADDITIONALINFO == null ) {
      strADDTLINFO = "";
   } else {
      strADDTLINFO = thisForm.ADDITIONALINFO[thisForm.ADDITIONALINFO.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO2 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO2[thisForm.ADDITIONALINFO2.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO3 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO3[thisForm.ADDITIONALINFO3.selectedIndex].value;
   }
   if ( thisForm.ADDITIONALINFO4 != null ) {
      strADDTLINFO += "; " + thisForm.ADDITIONALINFO4[thisForm.ADDITIONALINFO4.selectedIndex].value;
   }  

     //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] == strCODE &&
           fields[2] == strPRICE  &&
           fields[3] == strNAME   
         ) {
         bAlreadyInCart = true;
         dbUpdatedOrder = strCODE    + "|" +
                          (parseInt(strQUANTITY)+parseInt(fields[1]))  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strCATEGORY  + "|" +
                          strLOCATIONCODETOPAY;
         strNewOrder = "Order." + i;
         DeleteCookie(strNewOrder, "/");
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         break;
      }
   }


   if ( !bAlreadyInCart ) {
      iNumberOrdered++;
      
      if ( iNumberOrdered > 18 )
         alert( strSorry );
      else {
            
          dbUpdatedOrder = strCODE    + "|" + 
                          strQUANTITY  + "|" +
                          strPRICE     + "|" +
                          strNAME      + "|" +
                          strCATEGORY  + "|" +
                          strLOCATIONCODETOPAY;

         strNewOrder = "Order." + iNumberOrdered;
         SetCookie(strNewOrder, dbUpdatedOrder, null, "/");
         SetCookie("NumberOrdered", iNumberOrdered, null, "/");           
       }
    }
} // End function AddToCart()



//---------------------------------------------------------------------||
// 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:    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 strTotal       = "";   //Total cost formatted as money
   var strFooter	  = 0;	  //Number of Products in the shopping cart	
   
   /*  var fTax           = 0;    //Tax amount
       var fShipping      = 0;    //Shipping amount
       var strTax         = "";   //Total tax formatted as money
       var strShipping    = "";   //Total shipping formatted as money
   */
   
   var strOutput      = "";   //String to be written to page

   iNumberOrdered = GetCookie("NumberOrdered");
   if ( iNumberOrdered == null )
      iNumberOrdered = 0;

  strOutput = "<FORM NAME=\"frm_shopcart\" ACTION=" + strCheckOutUrl + " METHOD=\"post\" OnSubmit=\"javascript:return ValidateCart();\">" +
	           "<table align='center' border='0' cellpadding='4' cellspacing='0' width='94%'>" +
               "<tbody>" + 
     			 "<tr style='background:#E0F6F9;'>" +
                   "<td width='19%' height='35' align='center'><h2>Product Code</h2></td>" +
				   "<td width='29%' align='center'><h2>Product Description</h2></td>" +
	 			   "<td width='12%' align='center'><h2>Quantity</h2></td>" +
				   "<td width='11%' align='center'><h2>Price</h2></td>" +
				   "<td width='29%' align='center'>&nbsp;</td>" +
				 "</tr>";							 

   if ( iNumberOrdered == 0 ) {
   
      strOutput += "<TR style=\"height:35px; font-size: 11px; color: black; font-family: Arial; background-color: #EAF1F7;\">" +
                   "<TD COLSPAN=5><CENTER><BR><B>YOUR SHOPPING CART IS EMPTY. </B></CENTER> <BR> " +
                   "&nbsp; <u>Posible reason</u>: You have not added anything yet or your browser does not support <BR>" +
                   "&nbsp; cookies, or you have instructed your browser not to allow cookies. <BR>" +
                   "&nbsp; Please enable this feature in your browser in order to book online. Thanks. <BR><BR>" +
                   "</TD></TR>";
   }

   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 );                 // 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 );          // Category of the Item (To send the confirmation email)
      fields[5] = database.substring( Token4+1, database.length ); // LocationCodeToPay (To look the PlaceCode and determine the Merchant)

      fTotal     += (parseInt(fields[1]) * parseFloat(fields[2]) );      
      strTotal    = moneyFormat(fTotal);
   /* fShipping  += (parseInt(fields[1]) * parseFloat(fields[4]) );
      fTax        = (fTotal * TaxRate);
      strTax      = moneyFormat(fTax);
      strShipping = moneyFormat(fShipping);
   */
			
         strOutput += "<tr valign='middle'>";
         strOutput += "<TD align=\"center\">"  + fields[0] + "</TD>";
         strOutput += "<TD align=\"center\">"  + fields[3] + "</TD>";
         strOutput += "<TD align=\"center\"><INPUT TYPE=TEXT NAME=Q SIZE=2 VALUE=\"" + fields[1] + "\" onChange=\"ChangeQuantity("+i+", this.value);\"></TD>";
         strOutput += "<TD align=\"right\">" + MonetarySymbol + moneyFormat(fields[2]) + "</TD>";
         strOutput += "<TD align=\"center\"><a><img style=\"cursor:pointer\" src='img/bt-remove-item.gif' width='149' height='30' value='Add to Cart' onClick=\"RemoveFromCart("+i+")\" /></a></TD></TR>";
     
         strFooter = i;
         
		 strOutput += "<input type=hidden name=\"" + OutputItemCode      + 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=\"" + OutputItemCategory  + strFooter + "\" value=\"" + fields[4] + "\">";
         strOutput += "<input type=hidden name=\"" + OutputItemLocationCodeToPay  + strFooter + "\" value=\"" + fields[5] + "\">";
         //strOutput += "<input type=hidden name=\"" + OutputItemAddtlInfo + strFooter + "\" value=\"" + fields[5] + "\">";     
   }

    // TO DISPLAY TOTAL AMOUNT
         strOutput += "<tr valign='middle'>";
		 strOutput += "<td colspan='4' align='right'><h1>TOTAL  &rang;</h1></td>";
         strOutput += "<td align=center><h1><b>" + MonetarySymbol + moneyFormat(fTotal) + " MX" + "</b></h1></td>";
         strOutput += "</TR>"; 
		 //strOutput += "<TR valign=middle style=\"height:25px; font-weight: bold; font-size: 10px; color: #0099cc; font-family: Arial; background-color: #EAF1F7;\">";
         //strOutput += "<td colspan=5  align=right>* All  prices are in Mexican Pesos &nbsp;&nbsp;</td>";
         //strOutput += "</TR>";
		 
		 strOutput += "<TR>";
		 strOutput += "<TD COLSPAN=5><BR><BR>";
		 strOutput += "<TABLE border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"300\" align=\"center\">";
		 strOutput += "<tbody>";
		 strOutput += "<TR><TD align=center><img style=\"cursor:pointer\" src=\"img/bt-continue-shopping.gif\" width=\"199\" height=\"30\" VALUE=\"Continue Shopping\" NAME=\"continueShopping\" onClick=\"javascript:window.location='specialGifts.aspx';\">";
		 strOutput += "<TD align=center><INPUT TYPE=\"image\" src=\"img/bt-checkout.gif\" width=\"149\" height=\"30\" VALUE=\"Checkout\" NAME=\"Checkout\">&nbsp;</TD></TR>";
		 strOutput += "</tbody>"
		 strOutput += "</TABLE>";
		 strOutput += "</TD>";
		 strOutput += "</TR>";	
		 
		 strOutput += "</TABLE>";

		 strOutput += "<input type=hidden name=\"" + OutputOrderTotal + "\"  value=\"" + MonetarySymbol + moneyFormat(fTotal) + "\">";		 
		 strOutput += "<input type=hidden name=\""+OutputNumItems+"\"    value=\""+ strFooter + "\">";
		    
		 /*
		    William Santos - May 22, 08. Post language to checkout.aspx. strLanguage variable and its value are registered from 
		    shopcart.aspx using ClientScriptManagerClass. Do this cause language value is registered in web.config file.
		    checkout.aspx english version will be used for both english and spanish languages.
		 
		 
		    strOutput += "<input type=hidden name=\""+OutputLanguage+"\"    value=\""+ strLanguage + "\">";
		 */
		 
		 strOutput += "</FORM>";
		
      //}
   
   g_TotalCost = (fTotal);

   document.write(strOutput);
   document.close();
}


//---------------------------------------------------------------------||
// FUNCTION:    ValidateCart                                           ||
// PARAMETERS:  Null                                      ||
// RETURNS:     true/false                                             ||
// PURPOSE:     Validates the managecart form                          ||
//---------------------------------------------------------------------||
    var g_TotalCost = 0;
    function ValidateCart() {   
         if ( g_TotalCost < 0.01 ) {
             alert(MinimumOrderPrompt);
             return false;
         }  
       return true;
    }

//---------------------------------------------------------------------||

//=====================================================================||
//               END NOP Design SmartPost Shopping Cart                ||
//=====================================================================||


