P.register('CheckoutPrefetch', function() {
function convertToQueryString(paramObjects) {
var params = [];
for(var i = 0; i < paramObjects.length; i++) {
var name = paramObjects[i].name;
var value = paramObjects[i].value;
name = (name === 'addressID' ? 'shippingAddressID' : name);
if (params[name]) continue;
params.push(name + '=' + encodeURIComponent(value));
params[name] = true;
}
return params.join('&');
}
function getBuyBoxForm() {
var buyBoxBlock = document.getElementById('sc-buy-box');
if (!buyBoxBlock) return;
var buyBoxForms = buyBoxBlock.getElementsByTagName('form');
if (buyBoxForms.length === 0) return;
return buyBoxForms[0];
}
function serializeFormParameters(form) {
var params = [];
var selects = form.getElementsByTagName('select');
for (var i = 0; i < selects.length; i++) {
if (selects[i].name === 'addressID') {
var name = selects[i].name;
var value = selects[i].options[selects[i].selectedIndex].value;
params.push({name: name, value: value});
params[name] = value;
}
}
var inputs = form.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
var input = inputs[i];
if (input.type !== 'hidden' && input.type !== 'checkbox') continue;
if (inputs[i].type === 'checkbox' && !inputs[i].checked) continue;
if (inputs[i].name === 'isToBeGiftWrapped'
|| inputs[i].name === 'addressID'
) {
var name = inputs[i].name;
var value = inputs[i].value;
params.push({name: name, value: value});
params[name] = value;
}
}
return params;
}
function getBuyBoxParameters() {
var form = getBuyBoxForm();
return form ? serializeFormParameters(form) : [];
}
function getPrefetchData(dataName) {
var prefetchBlock = document.getElementById('sc-checkout-prefetch');
return prefetchBlock.getAttribute('data-' + dataName);
}
function getAssetsPrefetchUrl() {
var prefetchBlock = document.getElementById('sc-checkout-prefetch');
return prefetchBlock.getAttribute('data-assetsprefetchurl');
}
function firePrefetchRequest(prefetchUrl) {
// Why we have to use iframe?
var iframe = document.createElement("iframe");
iframe.setAttribute("src", prefetchUrl);
iframe.setAttribute("style", "width:0px;height:0px;display:none;position:absolute;");
iframe.setAttribute("name", "checkoutPrefetch;");
// Why we insert into head?
if (document.head) {
document.head.appendChild (iframe);
} else {
document.getElementsByTagName('head')[0].appendChild (iframe);
}
}
function getInitiateIdInput() {
var buyBoxForm = getBuyBoxForm();
if (!buyBoxForm) return;
var inputs = buyBoxForm.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].name === "cartInitiateId") {
return inputs[i];
}
}
}
function insertInitiateIdInBuyBox(cartInitiateId) {
var buyBoxForm = getBuyBoxForm();
if (!buyBoxForm) return;
// clear previous one
var oldInput = getInitiateIdInput();
if (oldInput) {
buyBoxForm.removeChild(oldInput);
}
// insert a new one
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("value", cartInitiateId);
input.setAttribute("name", "cartInitiateId");
buyBoxForm.appendChild(input);
}
function initiateAndStorePurchase() {
var buyBoxParams = getBuyBoxParameters();
if (!buyBoxParams['isToBeGiftWrapped']) {
var cartInitiateId = new Date().getTime();
var prefetchUrl = getPrefetchData('prefetchurl')
+ "&cartInitiateId=" + cartInitiateId
+ "&" + convertToQueryString(buyBoxParams);
firePrefetchRequest(prefetchUrl);
insertInitiateIdInBuyBox(cartInitiateId);
}
}
initiateAndStorePurchase();
P.when('A', 'jQuery').execute('Cart-PrefetchInitiateAndStorePurchase', function(A, $) {
$(document).delegate('#sc-buy-box form [name=addressID]', 'change', function() {
initiateAndStorePurchase();
});
A.on('sc:ajaxupdate:cf', function() {
initiateAndStorePurchase();
});
var savedInitiateId;
A.on('sc:flcAction:before', function() {
var input = getInitiateIdInput();
savedInitiateId = input ? input.value : undefined;
});
A.on('sc:flcAction:after', function() {
if (savedInitiateId) {
insertInitiateIdInBuyBox(savedInitiateId);
savedInitiateId = undefined;
}
});
});
var prefetchingRequiredForMouseover = false;
var prefetchingDoneForMouseover = false;
function initiateAndStorePurchaseForPTCMouseover() {
var buyBoxParams = getBuyBoxParameters();
if (!buyBoxParams['isToBeGiftWrapped']) {
var prefetchUrl = getPrefetchData('prefetchurlforauthcheck')
+ "?siteState=" + convertToQueryString(buyBoxParams).replace(/&/g, '|').replace(/=/g, '.')
+ "&xxonClickPTC=1";
firePrefetchRequest(prefetchUrl);
}
prefetchingDoneForMouseover = true;
}
P.when('A', 'jQuery').execute('Cart-ListenEventsForPrefetch', function(A, $) {
A.on('sc:authportal:check-auth-status', function(data) {
prefetchingRequiredForMouseover = data.required ? true : false;
});
$(document).delegate('#sc-buy-box input[name=proceedToCheckout]', 'mouseenter', function() {
if (prefetchingRequiredForMouseover && !prefetchingDoneForMouseover) {
initiateAndStorePurchaseForPTCMouseover();
}
});
$(document).delegate('#sc-buy-box form [name=addressID]', 'change', function() {
prefetchingDoneForMouseover = false;
});
A.on('sc:ajaxupdate:cf', function() {
prefetchingRequiredForMouseover = false;
prefetchingDoneForMouseover = false;
});
});
P.when('ready').execute('Cart-FirePrefetchRequest', function() {
firePrefetchRequest(getPrefetchData('assetsprefetchurl'));
});
return {
firePrefetchRequest: firePrefetchRequest,
convertToQueryString: convertToQueryString,
getBuyBoxForm: getBuyBoxForm,
serializeFormParameters: serializeFormParameters,
getBuyBoxParameters: getBuyBoxParameters,
getPrefetchData: getPrefetchData,
insertInitiateIdInBuyBox: insertInitiateIdInBuyBox,
initiateAndStorePurchase: initiateAndStorePurchase,
initiateAndStorePurchaseForPTCMouseover: initiateAndStorePurchaseForPTCMouseover
}
});
The price and availability of items at Amazon.com are subject to change. The Cart is a temporary place to store a list of your items and reflects each item's most recent price. Learn more
Do you have a gift card or promotional code? We'll ask you to enter your claim code when it's time to pay.
비밀글 해당 댓글은 작성자와 운영자만 볼 수 있습니다.15.03.16 17:02