// Copyright 2008 Travis Crowder
// Change the iDomain below to match the site that is holding the cart.php file
var iDomain = 'http://d2720232.web.aplus.net'; // this is the "mother" site
var usingScriptaculous = 1;
// do not modify below this line v v v v v v v v v v v v v v v v v v v v v v v v
//------------------------------------------------------------------------------
var request = null;
var token = null;
var responseObject = null;
// set zero values
var tax = 0;
var shipping = 0;
var total = 0;

function createRequest(){
  try {
    request = new XMLHttpRequest();
    if(request.overrideMimeType)
      request.overrideMimeType('text/plain');
  } catch (trymicrosoft){
    try {
      request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (othermicrosoft) {
      try {
        request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (failed) {
        request = null;
      }
    }
  }

  if(request == null){
    alert("Error creating request object.");
  }

}
function outputMoney(number) {
    return outputDollars(Math.floor(number-0) + '') + outputCents(number - 0);
}

function outputDollars(number) {
    if (number.length <= 3)
        return (number == '' ? '0' : number);
    else {
        var mod = number.length%3;
        var output = (mod == 0 ? '' : (number.substring(0,mod)));
        for (i=0 ; i < Math.floor(number.length/3) ; i++) {
            if ((mod ==0) && (i ==0))
                output+= number.substring(mod+3*i,mod+3*i+3);
            else
                output+= ',' + number.substring(mod+3*i,mod+3*i+3);
        }
        return (output);
    }
}

function outputCents(amount) {
    amount = Math.round( ( (amount) - Math.floor(amount) ) *100);
    return (amount < 10 ? '.0' + amount : '.' + amount);
}

function getIt(what){
  return document.getElementById(what);
}

function roundFloat(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

// {{{ substr
function substr( f_string, f_start, f_length ) {
    // Return part of a string
    //
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_substr/
    // +       version: 804.1712
    // +     original by: Martijn Wieringa
    // *         example 1: substr('abcdef', 0, -1);
    // *         returns 1: 'abcde'

    if(f_start < 0) {
        f_start += f_string.length;
    }

    if(f_length == undefined) {
        f_length = f_string.length;
    } else if(f_length < 0){
        f_length += f_string.length;
    } else {
        f_length += f_start;
    }

    if(f_length < f_start) {
        f_length = f_start;
    }

    return f_string.substring(f_start, f_length);
}// }}}

function getPageSize() {

     var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = window.innerWidth + window.scrollMaxX;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;

	if (self.innerHeight) {	// all except Explorer
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth;
		} else {
			windowWidth = self.innerWidth;
		}
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = xScroll;
	} else {
		pageWidth = windowWidth;
	}

	return [pageWidth,pageHeight];
}

function config(){
  var daReturn = '';
  if(token != null)
    daReturn = 'token=' + token;
  for(var i = 0; i < conf.length; i++){
    daReturn = daReturn + 'conf_' + i + '=' + escape(conf[i]);
    if(i != conf.length - 1) daReturn = daReturn + '&';
  }
  return daReturn;
}

function closeCart(){
  var oldDiv = document.getElementById('aplusCart');
  if(oldDiv) document.body.removeChild(oldDiv);
  oldDiv = document.getElementById('shadowBG');
  if(oldDiv){
    if(usingScriptaculous)
      new Effect.Fade('shadowBG', {duration:1, from: 0.8, to: 0.0});
    document.body.removeChild(oldDiv);
  }
  return false;
}

function showLoading(){
  if(!document.getElementById('aplusLoadingImage')){
    var daImage = document.createElement('img');
    daImage.src = iDomain + '/images/ajax-loader.gif';
    daImage.id = 'aplusLoadingImage';
    document.getElementById('aplusCart').appendChild(daImage);
  } else {
    document.getElementById('aplusLoadingImage').style.visibility = 'visible';
  }
}

function hideLoading(){
  setTimeout('document.getElementById(\'aplusLoadingImage\').style.visibility = \'hidden\';', 500);
}

function centerBox(divid){
  var IpopTop = (document.documentElement.clientHeight - document.getElementById(divid).offsetHeight) / 2;
  var IpopLeft = (document.documentElement.clientWidth - document.getElementById(divid).offsetWidth) / 2;
  var daLeft = parseInt(IpopLeft + document.documentElement.scrollLeft);
  var daTop = parseInt(IpopTop + document.documentElement.scrollTop);
  document.getElementById(divid).style.left = (daLeft - 300) + 'px';
  document.getElementById(divid).style.top = (daTop - 200) + 'px';
}

function centerShadow(divid){
  var sizes = getPageSize();
  document.getElementById(divid).style.width = sizes[0] + 'px';
  document.getElementById(divid).style.height = sizes[1] + 'px';
  if(usingScriptaculous)
    new Effect.Appear(divid, {duration:.5, from: 0.0, to: 0.8});
}

function createBox(){
  // destroy current box
  closeCart();
  // create shadow BG
  var daOverlay = document.createElement('div');
  daOverlay.setAttribute('id', 'shadowBG');
  // fix for Effect.Fade()
  daOverlay.style.display = 'none';
  // create cart
  var daDiv = document.createElement('div');
  daDiv.setAttribute('id', 'aplusCart');
  daDiv.style.display = 'none';
  // add to document
  document.body.insertBefore(daDiv, document.body.firstChild);
  // center cart
  centerBox('aplusCart');
  // show loading
  showLoading();
  document.body.insertBefore(daOverlay, document.body.firstChild);
  centerShadow('shadowBG');
  if(usingScriptaculous)
    setTimeout('document.getElementById(\'aplusCart\').style.display = \'block\';', 500);
  else
    document.getElementById('aplusCart').style.display = 'block';
  return false;
}

function emptyBox(){
  // show loading
  showLoading();
  document.getElementById('aplusCart').removeChild(document.getElementById('aplusCartForm'));
}

function populateBox(){
  var daDiv = document.getElementById('aplusCart');
  var daCartForm = document.createElement('form');
  daCartForm.setAttribute('id', 'aplusCartForm');
  daDiv.appendChild(daCartForm);
  // reset global charges to zero
  tax = shipping = total = 0;
  // get the response
  var rObj = responseObject;
  // each item in rObj is a JS object holding each item in cart
  var container = document.getElementById('aplusCartForm');

  // add close
  var daClose = document.createElement('div');
  daClose.setAttribute('id', 'aplusCartClose');
  daClose.className = 'aplusCartClose';
  daClose.onclick = closeCart;
  daClose.innerHTML = '<img src="' + iDomain + '/images/close.gif" alt="Close" onmouseover="this.className=\'hand\'" onmouseout="this.className=\'pointer\'" border="0" />&nbsp;&nbsp;&nbsp;';
  container.appendChild(daClose);

  // add header
  var daHeader = document.createElement('div');
  daHeader.setAttribute('id', 'aplusCartHeader');
  daHeader.setAttribute('style', 'padding:5px;');
  daHeader.innerHTML = '<img src="' + iDomain + '/images/shopping_cart.gif" alt="' + conf[12] + '" border="0" style="float:left;margin:3px;" /><p class="aplusCartShoppingCart">' + conf[12] + ' Shopping Cart</p>';
  container.appendChild(daHeader);

  // create container
  var daItemsContainer = document.createElement('div');
  daItemsContainer.setAttribute('id', 'aplusCartContainer');
  daItemsContainer.className = 'aplusCartContainer';

  if(rObj.length > 0){
    // add item headers
    var daItemsHeader = document.createElement('div');
    daItemsHeader.className = 'aplusCartLineStyle aplusCartLineHeader';

    var daItemHeader = document.createElement('div');
    daItemHeader.className = 'aplusCartItemStyle aplusCartNameStyle';
    daItemHeader.innerHTML = 'Item';

    var daRemoveHeader = document.createElement('div');
    daRemoveHeader.className = 'aplusCartItemStyle aplusCartRemoveStyle';
    daRemoveHeader.innerHTML = 'Remove';

    var daQuantityHeader = document.createElement('div');
    daQuantityHeader.className = 'aplusCartItemStyle aplusCartQuantityStyle';
    daQuantityHeader.innerHTML = 'Quantity';

    var daPriceHeader = document.createElement('div');
    daPriceHeader.className = 'aplusCartItemStyle aplusCartPriceStyle';
    daPriceHeader.innerHTML = 'Price';
    daItemsHeader.appendChild(daItemHeader);
    daItemsHeader.appendChild(daRemoveHeader);
    daItemsHeader.appendChild(daQuantityHeader);
    daItemsHeader.appendChild(daPriceHeader);
    daItemsContainer.appendChild(daItemsHeader);
  }
  // iterate items
  for(var i = 0; i < rObj.length; i++){

    if(isNaN(rObj[i].taxfee)) rObj[i].taxfee = 0;
    if(isNaN(rObj[i].shippingfee)) rObj[i].shippingfee = 0;
    if(isNaN(rObj[i].handlingfee)) rObj[i].handlingfee = 0;

    tax += parseFloat(rObj[i].taxfee) * rObj[i].itemqty;
    shipping += parseFloat(rObj[i].shippingcost) + parseFloat(rObj[i].handlingfee);
    shipping += parseFloat(rObj[i].shippingcostadditionalunit) * (rObj[i].itemqty - 1);
    total += parseFloat(rObj[i].itemcost) * rObj[i].itemqty;

    // build the item line

    var disLine = document.createElement('div');
    disLine.className = 'aplusCartLineStyle';

    // pack the line with attributes
    var daItemName = document.createElement('div');
    daItemName.className = 'aplusCartItemStyle aplusCartNameStyle';
    daItemName.innerHTML = '<input type="hidden" id="item_no_' + i + '" name="item_no_' + i + '" value="' + rObj[i].itemno + '" />' + rObj[i].itemname+ '<input type="hidden" id="item_name_' + i + '" name="item_name_' + i + '" value="' + rObj[i].itemname + '" />';

    var daItemRemove = document.createElement('div');
    daItemRemove.className = 'aplusCartItemStyle aplusCartRemoveStyle';
    //daItemRemove.innerHTML = '<input type="checkbox" id="remove_' + i + '" name="remove_' + i + '" onclick="removeItem(this.parentNode)" />';
    daItemRemove.innerHTML = '<img src="'+iDomain+'/images/close.gif" alt="Remove Item" id="remove_' + i + '" name="remove_' + i + '" onclick="removeItem(this.parentNode)" />';

    var daItemQuantity = document.createElement('div');
    daItemQuantity.className = 'aplusCartItemStyle aplusCartQuantityStyle';
    daItemQuantity.innerHTML = '<input type="text" id="quantity_' + i + '" name="quantity_' + i + '" value="' + rObj[i].itemqty + '" size="2" maxlength="7" onfocus="javascript:void(0);" onblur="javascript:void(0);" />';

    var daItemPrice = document.createElement('div');
    daItemPrice.className = 'aplusCartItemStyle aplusCartPriceStyle';
    daItemPrice.innerHTML = parseFloat(rObj[i].itemcost) + '<input type="hidden" id="cost_' + i + '" name="cost_' + i + '" value="' + parseFloat(rObj[i].itemcost) + '" />';

    var daItemOptions = document.createElement('input');
    daItemOptions.setAttribute('type', 'hidden');
    daItemOptions.setAttribute('id', 'item_options_' + i);
    daItemOptions.setAttribute('name', 'item_options_' + i);
    daItemOptions.setAttribute('value', rObj[i].itemoptions);

    // append the items
    disLine.appendChild(daItemName);
    disLine.appendChild(daItemRemove);
    disLine.appendChild(daItemQuantity);
    disLine.appendChild(daItemPrice);
    disLine.appendChild(daItemOptions);

    // append the line
    daItemsContainer.appendChild(disLine);
  }

  if(rObj.length > 0){
    // make sure monetary values are to precision 2
    tax = roundFloat(tax, 2);
    shipping = roundFloat(shipping, 2);

    // add spacer
    /*var disTaxLine = document.createElement('div');
    disTaxLine.className = 'aplusCartLineStyle';;
    var daSpacer = document.createElement('div');
    daSpacer.className = 'aplusCartSpacer';
    daSpacer.innerHTML = '&nbsp;';
    disTaxLine.appendChild(daSpacer);

    // add tax line
    var daTax = document.createElement('div');
    daTax.setAttribute('id', 'aplusCartTax');
    daTax.innerHTML = '<b>Tax:</b> ' + outputMoney(parseFloat(tax));
    disTaxLine.appendChild(daTax);
    daItemsContainer.appendChild(disTaxLine);*/

    // add another spacer
    var disShippingLine = document.createElement('div');
    disShippingLine.className = 'aplusCartLineStyle';
    var daSpacer2 = document.createElement('div');
    daSpacer2.className = 'aplusCartSpacer';
    daSpacer2.innerHTML = '&nbsp;';
    disShippingLine.appendChild(daSpacer2);

    // add shipping line
    var daShipping = document.createElement('div');
    daShipping.setAttribute('id', 'aplusCartShipping');
    daShipping.innerHTML = '<b>S/H:</b> ' + outputMoney(parseFloat(shipping));
    disShippingLine.appendChild(daShipping);
    daItemsContainer.appendChild(disShippingLine);

    // add one more spacer
    var disTotalLine = document.createElement('div');
    disTotalLine.className = 'aplusCartLineStyle';
    var daSpacer3 = document.createElement('div');
    daSpacer3.className = 'aplusCartSpacer';
    daSpacer3.innerHTML = '&nbsp;';
    disTotalLine.appendChild(daSpacer3);

    // add total line
    var daTotal = document.createElement('div');
    daTotal.setAttribute('id', 'aplusCartTotal');
    total = parseFloat(total) + parseFloat(shipping);
    total = roundFloat(total, 2);
    daTotal.innerHTML = '<b>Total:</b> ' + outputMoney(parseFloat(total));
    disTotalLine.appendChild(daTotal);
    daItemsContainer.appendChild(disTotalLine);

    // add update cart button
    var daUpdate = document.createElement('div');
    var daUpdateBtn = document.createElement('input');
    daUpdateBtn.setAttribute('type', 'button');
    daUpdateBtn.className = 'aplusCartButton';
    daUpdateBtn.setAttribute('value', 'Update Quantities');
    daUpdateBtn.setAttribute('id', 'updateButton');
    daUpdateBtn.onclick = updateQuantities;
    daUpdate.appendChild(daUpdateBtn);
    daItemsContainer.appendChild(daUpdate);
    // add continue shopping button -- closeCart()
    // add update cart button
    var daCloseCart = document.createElement('div');
    var daCloseCartBtn = document.createElement('input');
    daCloseCartBtn.setAttribute('type', 'button');
    daCloseCartBtn.className = 'aplusCartButton';
    daCloseCartBtn.setAttribute('value', 'Continue Shopping');
    daCloseCartBtn.setAttribute('id', 'closeCartBtn');
    daCloseCartBtn.onclick = closeCart;
    daCloseCart.appendChild(daCloseCartBtn);
    daItemsContainer.appendChild(daCloseCart);
    container.appendChild(daItemsContainer);
    // add checkout buttons
    var daFooter = document.createElement('div');
    daFooter.setAttribute('id', 'aplusCartFooter');
    daFooter.className = 'aplusCartFooter';
    if(navigator.appName != "Microsoft Internet Explorer")
      daFooter.innerHTML = '<br /><br /><br /><br />';
    if(parseInt(conf[13]) == 1)
      daFooter.innerHTML = daFooter.innerHTML + '<a href="javascript:void(0);" onclick="paypalCheckout()" title="PayPal Checkout"><img src="' + iDomain + '/images/paypal_checkout.gif" alt="PayPal" border="0" /></a>';
    if(parseInt(conf[14]) == 1)
      daFooter.innerHTML = daFooter.innerHTML + '&nbsp;<a href="javascript:void(0);" onclick="googleCheckout()" title="Google Checkout"><img src="' + iDomain + '/images/google_checkout.gif" alt="Google Checkout" border="0" /></a>';
    container.appendChild(daFooter);
  } else {
    var daNoItems = document.createElement('div');
    daNoItems.innerHTML = '<p class="aplusCartNoItems">You have no items in your cart.</p>';
    daItemsContainer.appendChild(daNoItems);
    container.appendChild(daItemsContainer);
  }
  // hide loading
  hideLoading();
  return false;
}

function addItem(ele){
  createRequest();
  var url = "proxy.php?path=cart.php";
  var daForm = ele;
  var daFormLength = daForm.length;
  var queryString = config();
  for(var i = 0; i < daFormLength; i++){
    queryString = queryString + '&' + daForm.elements[i].name + '=' + escape(daForm.elements[i].value);
    if(i != daFormLength - 1) queryString = queryString + '&';
  }
  request.open("POST", url, true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", queryString.length);
  request.setRequestHeader("Connection", "close");
  request.onreadystatechange = changeIt;
  request.send(queryString);
  return false;
}

function viewCart(){
  createRequest();
  var url = 'proxy.php?path=basket.php';
  request.open("POST", url, true);
  request.onreadystatechange = changeIt;
  var toSend = null;
  if(token != null) toSend = 'token='+token;
  request.send(toSend);
}

function updateQuantities(){
  // get the quantities for each item
  createRequest();
  var url = "proxy.php?path=update.php";
  var daForm = document.getElementById('aplusCartForm');
  var daFormLength = daForm.length;
  var queryString = config();
  for(var i = 0; i < daFormLength; i++){
    queryString = queryString + '&' + daForm.elements[i].name + '=' + escape(daForm.elements[i].value);
    if(i != daFormLength - 1) queryString = queryString + '&';
  }

  // post them to update.php
  request.open("POST", url, true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", queryString.length);
  request.setRequestHeader("Connection", "close");
  request.onreadystatechange = changeItAgain;
  request.send(queryString);
  return false;
}

function removeItem(ele){
  var daBox = ele.getElementsByTagName('img')[0];
  var daId = substr(daBox.name, 7);
  var daForm = document.getElementById('aplusCartForm');
  data = new Array();
  var daIno = getIt('item_no_' + daId).value;
  var daIname = getIt('item_name_' + daId).value;
  var daIcost = getIt('cost_' + daId).value;
  var daIopts = getIt('item_options_' + daId).value;

  // get each form

  createRequest();
  var url = "proxy.php?path=remove.php";
  var queryString = config();
  queryString = queryString + '&item_no=' + daIno + '&item_name=' + daIname + '&cost=' + daIcost + '&item_options=' + escape(daIopts);

  // post them to remove.php
  request.open("POST", url, true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", queryString.length);
  request.setRequestHeader("Connection", "close");
  request.onreadystatechange = changeItAgain;
  request.send(queryString);
  return false;
}

function changeIt(){
  if(request.readyState == 4){
    if(request.status == 200){
      if(request.responseText.length != 0){
        responseObject = eval('(' + request.responseText + ')');
        // give back the token
        token = responseObject.cartid;
        // create the basket box
        createBox();
        // populate the basket box
        populateBox();
      } else {
        alert("There was an error.  Response was empty.");
      }
    } else {
      alert("Error receiving value. HTTP Code " + request.status);
    }
  }
  return false;
}

function changeItAgain(){
  if(request.readyState == 4){
    if(request.status == 200){
      responseObject = eval('(' + request.responseText + ')');
      // give back the token
      token = responseObject.cartid;
      // empty the basket box
      emptyBox();
      // populate the basket box
      populateBox();
    } else {
      alert("Error receiving value. HTTP Code " + request.status);
    }
  }
  return false;
}

function googleCheckout(){
  // post to URL
  // https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/MERCHANT_ID
  // refer to http://code.google.com/apis/checkout/developer/Google_Checkout_Basic_HTML_Sample_Forms.html
  var url = 'https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/' + conf[5];
  var daForm = document.createElement('form');
  daForm.setAttribute('method', 'post');
  daForm.setAttribute('action', url);
  daForm.setAttribute('accept-charset', 'utf-8');
  daForm.setAttribute('name', 'googleCheckout');
  // reset global charges to zero
  tax = shipping = total = 0;
  // iterate items in cart and add inputs
  var rObj = responseObject;
  for(var i = 0; i < rObj.length; i++){
    if(isNaN(rObj[i].taxfee)) rObj[i].taxfee = 0;
    if(isNaN(rObj[i].shippingfee)) rObj[i].shippingfee = 0;
    if(isNaN(rObj[i].handlingfee)) rObj[i].handlingfee = 0;

    shipping += parseFloat(rObj[i].shippingcost) + parseFloat(rObj[i].handlingfee);
    shipping += parseFloat(rObj[i].shippingcostadditionalunit) * (rObj[i].itemqty - 1);

    // item name
    var itemName = document.createElement('input');
    itemName.setAttribute('type', 'hidden');
    itemName.setAttribute('name', 'item_name_' + (i + 1));
    itemName.setAttribute('value', rObj[i].itemname);
    daForm.appendChild(itemName);
    // item options
    // iterate itemoptions object
    var daItemOptions = rObj[i].itemoptions;

    if(daItemOptions.length > 0){
      var chunks = daItemOptions.split("#");
      var daDesc = document.createElement('input');
      daDesc.setAttribute('type', 'hidden');
      daDesc.setAttribute('name', 'item_description_' + (i + 1));
      var itemDesc = '';
      for(var n = 0; n < chunks.length; n++){
        // item description
        var options = chunks[n].split("|");
        if(n > 0)
          itemDesc = itemDesc + ' ';

        itemDesc = options[0] + ': ' + options[1];
      }
      daDesc.setAttribute('value', itemDesc);
      daForm.appendChild(daDesc);
    } else {
      var daDesc = document.createElement('input');
      daDesc.setAttribute('type', 'hidden');
      daDesc.setAttribute('name', 'item_description_' + (i + 1));
      daDesc.setAttribute('value', '');
      daForm.appendChild(daDesc);
    }
    // quantity
    var itemQty = document.createElement('input');
    itemQty.setAttribute('type', 'hidden');
    itemQty.setAttribute('name', 'item_quantity_' + (i + 1));
    itemQty.setAttribute('value', rObj[i].itemqty);
    daForm.appendChild(itemQty);
    // item price
    var itemCost = document.createElement('input');
    itemCost.setAttribute('type', 'hidden');
    itemCost.setAttribute('name', 'item_price_' + (i + 1));
    itemCost.setAttribute('value', rObj[i].itemcost);
    daForm.appendChild(itemCost);
    // item currency
    var itemCost = document.createElement('input');
    itemCost.setAttribute('type', 'hidden');
    itemCost.setAttribute('name', 'item_currency_' + (i + 1));
    itemCost.setAttribute('value', conf[2]);
    daForm.appendChild(itemCost);

  }

  // shipping
  var cartShippingMethod = document.createElement('input');
  cartShippingMethod.setAttribute('type', 'hidden');
  cartShippingMethod.setAttribute('name', 'ship_method_name_1');
  cartShippingMethod.setAttribute('value', conf[10]);
  daForm.appendChild(cartShippingMethod);
  var cartShipping = document.createElement('input');
  cartShipping.setAttribute('type', 'hidden');
  cartShipping.setAttribute('name', 'ship_method_price_1');
  cartShipping.setAttribute('value', outputMoney(roundFloat(shipping, 2)));
  daForm.appendChild(cartShipping);
  var cartShipping = document.createElement('input');
  cartShipping.setAttribute('type', 'hidden');
  cartShipping.setAttribute('name', 'ship_method_us_area_1');
  cartShipping.setAttribute('value', 'FULL_50_STATES');
  daForm.appendChild(cartShipping);
  var cartShippingCurrency = document.createElement('input');
  cartShippingCurrency.setAttribute('type', 'hidden');
  cartShippingCurrency.setAttribute('name', 'ship_method_currency_1');
  cartShippingCurrency.setAttribute('value', conf[2]);
  daForm.appendChild(cartShippingCurrency);

  // tax
  var cartTax = document.createElement('input');
  cartTax.setAttribute('type', 'hidden');
  cartTax.setAttribute('name', 'tax_rate');
  cartTax.setAttribute('value', conf[8]);
  daForm.appendChild(cartTax);
  var cartTaxState = document.createElement('input');
  cartTaxState.setAttribute('type', 'hidden');
  cartTaxState.setAttribute('name', 'tax_us_state');
  cartTaxState.setAttribute('value', conf[9]);
  daForm.appendChild(cartTaxState);
  // required charset
  var daCharset = document.createElement('input');
  daCharset.setAttribute('type', 'hidden');
  daCharset.setAttribute('name', '_charset_');
  daForm.appendChild(daCharset);

  // required image
  var daImage = document.createElement('input');
  daImage.setAttribute('type', 'image');
  daImage.setAttribute('src', 'https://checkout.google.com/buttons/checkout.gif?merchant_id=' + conf[5] + '&w=180&h=46&style=white&variant=text&loc=en_US');
  daImage.setAttribute('style', 'display:none;');
  daForm.appendChild(daImage);
  document.body.appendChild(daForm);
  // submit the data
  daForm.submit();
}

function paypalCheckout(){
  // post to URL
  // https://www.paypal.com/us/cgi-bin/webscr
  // refer to https://www.paypal.com/en_US/ebook/PP_WebsitePaymentsStandard_IntegrationGuide/shopping_cart.html
  // form name must be _xclick
  // form must have hidden field "cmd" with value "_xclick"
  // reset global charges to zero
  tax = shipping = total = 0;
  var url = 'https://www.paypal.com/us/cgi-bin/webscr';
  var daForm = document.createElement('form');
  daForm.setAttribute('name', '_xclick');
  daForm.setAttribute('action', url);
  daForm.setAttribute('method', 'post');
  var daCmd = document.createElement('input');
  daCmd.setAttribute('type', 'hidden');
  daCmd.setAttribute('name', 'cmd');
  daCmd.setAttribute('value', '_cart');
  daForm.appendChild(daCmd);
  var daAdd = document.createElement('input');
  daAdd.setAttribute('type', 'hidden');
  daAdd.setAttribute('name', 'upload');
  daAdd.setAttribute('value', '1');
  daForm.appendChild(daAdd);
  // business
  var daBiz = document.createElement('input');
  daBiz.setAttribute('type', 'hidden');
  daBiz.setAttribute('name', 'business');
  daBiz.setAttribute('value', conf[4]);
  daForm.appendChild(daBiz);
  // currency
  var daCurr = document.createElement('input');
  daCurr.setAttribute('type', 'hidden');
  daCurr.setAttribute('name', 'currency_code');
  daCurr.setAttribute('value', conf[2]);
  daForm.appendChild(daCurr);
  // locale
  var daLC = document.createElement('input');
  daLC.setAttribute('type', 'hidden');
  daLC.setAttribute('name', 'lc');
  daLC.setAttribute('value', 'US');
  daForm.appendChild(daLC);
  // iterate items in cart and add inputs
  var rObj = responseObject;
  for(var i = 0; i < rObj.length; i++){
    if(isNaN(rObj[i].taxfee)) rObj[i].taxfee = 0;
    if(isNaN(rObj[i].shippingfee)) rObj[i].shippingfee = 0;
    if(isNaN(rObj[i].handlingfee)) rObj[i].handlingfee = 0;

    tax += parseFloat(rObj[i].taxfee) * rObj[i].itemqty;
    //shipping += parseFloat(rObj[i].shippingcost) + parseFloat(rObj[i].handlingfee);
    //shipping += parseFloat(rObj[i].shippingcostadditionalunit) * (rObj[i].itemqty - 1);
    total += parseFloat(rObj[i].itemcost) * rObj[i].itemqty;
    // item number
    /*var itemNo = document.createElement('input');
    itemNo.setAttribute('type', 'hidden');
    itemNo.setAttribute('name', 'item_number_' + (i + 1));
    itemNo.setAttribute('value', rObj[i].itemno);
    daForm.appendChild(itemNo);*/
    // item name
    var itemName = document.createElement('input');
    itemName.setAttribute('type', 'hidden');
    itemName.setAttribute('name', 'item_name_' + (i + 1));
    itemName.setAttribute('value', rObj[i].itemname);
    daForm.appendChild(itemName);
    // item options
    // iterate itemoptions object
    var daItemOptions = rObj[i].itemoptions;

    if(daItemOptions.length > 0){
      var chunks = daItemOptions.split("#");
      for(var n = 0; n < chunks.length; n++){
        var options = chunks[n].split("|");
        var daSelect = document.createElement('input');
        daSelect.setAttribute('type', 'hidden');
        daSelect.setAttribute('name', 'on' + n + '_' + (i + 1));
        daSelect.setAttribute('value', options[0]);
        var daOpt = document.createElement('input');
        daOpt.setAttribute('type', 'hidden');
        daOpt.setAttribute('name', 'os' + n + '_' + (i + 1));
        daOpt.setAttribute('value', options[1]);
        daSelect.appendChild(daOpt);
        daForm.appendChild(daSelect);
      }
    }
    // item price
    var itemCost = document.createElement('input');
    itemCost.setAttribute('type', 'hidden');
    itemCost.setAttribute('name', 'amount_' + (i + 1));
    itemCost.setAttribute('value', rObj[i].itemcost);
    daForm.appendChild(itemCost);
    // quantity
    var itemQty = document.createElement('input');
    itemQty.setAttribute('type', 'hidden');
    itemQty.setAttribute('name', 'quantity_' + (i + 1));
    itemQty.setAttribute('value', rObj[i].itemqty);
    daForm.appendChild(itemQty);
    // tax
    var itemQty = document.createElement('input');
    itemQty.setAttribute('type', 'hidden');
    itemQty.setAttribute('name', 'tax_' + (i + 1));
    itemQty.setAttribute('value', rObj[i].taxfee);
    daForm.appendChild(itemQty);
    // shipping
    var shippingFee = 0;
    if(rObj[i].itemqty == 1)
      shippingFee = parseFloat(rObj[i].shippingcost) + parseFloat(rObj[i].handlingfee);
    else
      shippingFee = (parseFloat(rObj[i].shippingcost) + parseFloat(rObj[i].handlingfee)) + (parseFloat(rObj[i].shippingcostadditionalunit) * (rObj[i].itemqty - 1));
    var itemQty = document.createElement('input');
    itemQty.setAttribute('type', 'hidden');
    itemQty.setAttribute('name', 'shipping_' + (i + 1));
    itemQty.setAttribute('value', shippingFee);
    daForm.appendChild(itemQty);
  }
  // hidden button
  var daBN = document.createElement('input');
  daBN.setAttribute('type', 'hidden');
  daBN.setAttribute('name', 'bn');
  daBN.setAttribute('value', 'PP-ShopCartBF');
  daForm.appendChild(daBN);
  // shopping URL
  var daSH = document.createElement('input');
  daSH.setAttribute('type', 'hidden');
  daSH.setAttribute('name', 'shopping_url');
  daSH.setAttribute('value', conf[0]);
  daForm.appendChild(daSH);
  // shipping
  var cartShippingNo = document.createElement('input');
  cartShippingNo.setAttribute('type', 'hidden');
  cartShippingNo.setAttribute('name', 'no_shipping');
  cartShippingNo.setAttribute('value', '2');
  daForm.appendChild(cartShippingNo);
  // tax
  // handled via conf.js and
  // total
  total = total + tax + shipping;
  total = roundFloat(total, 2);
  var cartTotal = document.createElement('input');
  cartTotal.setAttribute('type', 'hidden');
  cartTotal.setAttribute('name', 'amount');
  cartTotal.setAttribute('value', outputMoney(total));
  daForm.appendChild(cartTotal);
  // return url
  var daRT = document.createElement('input');
  daRT.setAttribute('type', 'hidden');
  daRT.setAttribute('name', 'notify_url');
  daRT.setAttribute('value', conf[1]);
  daForm.appendChild(daRT);
  // cancel url
  var daCN = document.createElement('input');
  daCN.setAttribute('type', 'hidden');
  daCN.setAttribute('name', 'cancel_return');
  daCN.setAttribute('value', conf[1]);
  daForm.appendChild(daCN);
  // submit the data
  document.body.appendChild(daForm);
  daForm.submit();
}