if (typeof Prototype == 'undefined') throw("cart_manager: Prototype JavaScript framework required");
var Cart = {
Token:"x01873",
AjaxURL:"/common/cart_manager.php",
AjaxResponse:null,
CaptureOnExit:true,
ResetRequired:false,
SCC:null,
Status:null,
ItemCount:0,
DisplayStyle:"",
ItemWindow:(typeof Cart_ItemWindow  != 'undefined') ? Cart_ItemWindow  : {x:415, y:0},
ItemEffects:(typeof Cart_ItemEffects != 'undefined') ? Cart_ItemEffects : ['BlindDown','BlindUp'],
ItemObject:false,
_ASYNCHRONOUS:(typeof Cart_ASYNCHRONOUS  == 'boolean') ? Cart_ASYNCHRONOUS  : true,
_SYNCHRONOUS:(typeof Cart_SYNCHRONOUS   == 'boolean') ? Cart_SYNCHRONOUS   : false,
_DISPLAY:(typeof Cart_DISPLAY       == 'boolean') ? Cart_DISPLAY       : true,
_NO_DISPLAY:(typeof Cart_NO_DISPLAY    == 'boolean') ? Cart_NO_DISPLAY    : false,
_SET_ON_UPDATE:(typeof Cart_SET_ON_UPDATE == 'boolean') ? Cart_SET_ON_UPDATE : true,
_ADD_ON_UPDATE:(typeof Cart_ADD_ON_UPDATE == 'boolean') ? Cart_ADD_ON_UPDATE : false,
Manager: function(fn, arg1,isAsync, callbk) {
fields = (document.CartForm) ? '&' + Form.serialize($(document.CartForm)) : "";
Cart.Status = 'unknown';
if (isAsync && typeof callbk == 'string') {
var ajax = new Ajax.Updater(callbk,Cart.AjaxURL, {
asynchronous:isAsync, requestHeaders: {'X-CartManager-Token': Cart.Token},
postBody: '_cmReq='+fn + arg1 + fields,
onSuccess: function(transport,json) {
if (json) Cart._count(json.ItemCount);
Cart.Status = ajax.getHeader('X-CartManager-Status') || 'OK';
},
onFailure:function(transport) {
alert(transport.status+": "+transport.responseText);
}
}
);
return null;
} else if (isAsync && typeof callbk == 'function') {
var ajax = new Ajax.Request(Cart.AjaxURL, {
asynchronous: isAsync, requestHeaders: {'X-CartManager-Token': Cart.Token},
postBody: '_cmReq='+fn + arg1 + fields,
onSuccess: function(transport,json) {
if (json) Cart._count(json.ItemCount);
Cart.Status = ajax.getHeader('X-CartManager-Status') || 'OK';
callbk(transport.responseText,Cart.Status);
},
onFailure:function(transport) {
alert(transport.status+": "+transport.responseText);
}
}
);
return null;
} else {
var ajax = new Ajax.Request(Cart.AjaxURL, {
asynchronous: isAsync, requestHeaders: {'X-CartManager-Token': Cart.Token},
postBody: '_cmReq='+fn + arg1 + fields,
onSuccess: function(transport,json) {
if (json) Cart._count(json.ItemCount);
Cart.AjaxResponse = transport.responseText;
},
onFailure:function(transport) {
alert(transport.status+": "+transport.responseText);
Cart.AjaxResponse = false;
}
}
);
Cart.Status = ajax.getHeader('X-CartManager-Status') || 'OK';
return Cart.AjaxResponse;
}
},
Hello: function() {
Cart.Token = encodeURIComponent(document.cookie);
Cart.Manager('hello','',false);
Cart.Token = Cart.Status;
},
Add: function(sku,show) {
Cart.Update(sku,1,Cart._SET_ON_UPDATE,show);
},
Remove: function(sku,show) {
Cart.Update(sku,0,true,show);
},
Update: function(sku,qty,set,show) {
if (sku) {
var set = (set) ? 'true' : 'false';
var isAsync = (show) ? false : true;
if (typeof onCartUpdate == 'function')
var result = Cart.Manager('update','&_sku='+sku+'&_qty='+qty+'&_set='+set,isAsync,onCartUpdate);
else
var result = Cart.Manager('update','&_sku='+sku+'&_qty='+qty+'&_set='+set,isAsync);
if (show === true) Cart.Show(); else if (typeof show == 'string') location.href=show;
}
},
Empty: function(isAsync) {
var isAsync = (isAsync !== false) ? Cart._ASYNCHRONOUS : Cart._SYNCHRONOUS;
var result = Cart.Manager('empty','',isAsync);
if (typeof onCartEmpty == 'function') onCartEmpty();
return (result * 1);
},
Count: function(isAsync) {
var result = Cart.Manager('count','',isAsync);
if (typeof onCartCount == 'function') onCartCount(result);
return (result * 1);
},
_count: function(result) {
if (document.getElementById('Shopping-Cart-Counter'))
document.getElementById('Shopping-Cart-Counter').innerHTML = result;
Cart.ItemCount = (result * 1);
},
Show: function(isAsync,force) {
Cart._ajax_start();
var isAsync = (isAsync !== false) ? Cart._ASYNCHRONOUS : Cart._SYNCHRONOUS;
var force   = (force) ? 'true' : 'false';
if (document.getElementById('Shopping-Cart-Items') && Cart.SCC != null) {
document.getElementById('Shopping-Cart-Items').innerHTML = Cart.SCC;
Cart.SCC = null;
}
var result = Cart.Manager('show','&_style='+Cart.DisplayStyle+'&_force='+force,isAsync,Cart._show);
if (!isAsync) Cart._show(result,Cart.Status);
},
_show: function(result,status) {
var parts = result.split("<!--[JSPLIT]-->");
if (document.getElementById('Shopping-Cart-Items')) {
if (status != 'OK') Cart.SCC = document.getElementById('Shopping-Cart-Items').innerHTML;
document.getElementById('Shopping-Cart-Items').innerHTML = parts[0] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Items');
}
if (document.getElementById('Shopping-Cart-Shipping')) {
document.getElementById('Shopping-Cart-Shipping').innerHTML =  parts[1] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Shipping');
}
if (document.getElementById('Shopping-Cart-Totals')) {
document.getElementById('Shopping-Cart-Totals').innerHTML =  parts[2] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Totals');
}
if (document.getElementById('Shopping-Cart-Payments')) {
document.getElementById('Shopping-Cart-Payments').innerHTML =  parts[3] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Payments');
}
if (document.getElementById('Shopping-Cart-Upsells')) {
document.getElementById('Shopping-Cart-Upsells').innerHTML =  parts[4] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Upsells');
}
if (document.getElementById('Shopping-Cart-Coupons')) {
document.getElementById('Shopping-Cart-Coupons').innerHTML =  parts[5] || "";
if (typeof wFORMS != 'undefined') wFORMS.addBehaviors('Shopping-Cart-Coupons');
}
if (Cart.ItemCount < 1 || status != 'OK') {
if (document.getElementById('Shopping-Cart-Form'))
document.getElementById('Shopping-Cart-Form').style.display = 'none';
if (document.getElementById('Shopping-Cart-AltForm'))
document.getElementById('Shopping-Cart-AltForm').style.display = 'block';
var scvalid = $$('.Shopping-Cart-WhenValid');
scvalid.each(function(e) { e.style.display = 'none'; });
} else {
if (document.getElementById('Shopping-Cart-AltForm'))
document.getElementById('Shopping-Cart-AltForm').style.display = 'none';
if (document.getElementById('Shopping-Cart-Form'))
document.getElementById('Shopping-Cart-Form').style.display = 'block';
var scvalid = $$('.Shopping-Cart-WhenValid');
scvalid.each(function(e) { e.style.display = 'block'; });
}
Cart._ajax_stop();
if (typeof onCartShow == 'function') onCartShow();
},
Summary: function(isAsync) {
var isAsync = (isAsync !== false) ? Cart._ASYNCHRONOUS : Cart._SYNCHRONOUS;
var result = Cart.Manager('summary','&_style='+Cart.DisplayStyle,isAsync,Cart._summary);
if (!isAsync) Cart._summary(result,status);
},
_summary: function(result,status) {
if (document.getElementById('Shopping-Cart-Summary'))
document.getElementById('Shopping-Cart-Summary').innerHTML = result || "";
if (typeof onCartSummary == 'function') onCartSummary();
},
Submit: function() {
Cart.CaptureOnExit = false;
window.status = "<-- Processing your order. Please wait. -->";
var result = Cart.Manager('submit','',true,Cart._submit);
Event.observe(window, "unload", function() {Cart.Reset()});
},
_submit: function(result,status) {
Cart.ResetRequired = true;
if (document.getElementById('Shopping-Cart-Confirmation'))
document.getElementById('Shopping-Cart-Confirmation').innerHTML = result || "";
if (typeof onCartSubmit == 'function') onCartSubmit();
window.status = "";
},
Reset: function(force) {
if (Cart.ResetRequired || force) {
var result = Cart.Manager('reset','',true);
Cart.ResetRequired = false;
}
},
Capture: function() {
if (Cart.CaptureOnExit) {
var result = Cart.Manager('capture','',true);
Cart.CaptureOnExit = false;
}
},
Item: function(sku,event) {
var result = Cart.Manager('item','&_style='+Cart.DisplayStyle+'&_sku='+sku,false);
if (document.getElementById('Shopping-Cart-Detail') && result) {
document.getElementById('Shopping-Cart-Detail').innerHTML = result;
if (typeof wFORMS != 'undefined') {
wFORMS.processedForm = document.CartItem;
wFORMS.addBehaviors(document.CartItem);
}
Cart.Item_Open(event);
}
},
Item_Open: function(evt) {
if (typeof EAC != 'undefined')
Cart.ItemObject = new EAC.floatingWindow('Shopping-Cart-Detail',Cart.ItemWindow.x,Cart.ItemWindow.y,evt,{id:'Shopping-Cart-Item',close:false,effects:Cart.ItemEffects});
else
document.getElementById('Shopping-Cart-Detail').style.display = 'block';
},
Item_Close: function() {
if (typeof Cart.ItemObject == 'object')
Cart.ItemObject.close();
else
document.getElementById('Shopping-Cart-Detail').style.display = 'none';
},
_ajax_start: function() {
window.status = "<-- Updating -->";
if (document.getElementById('Shopping-Cart-Busy')) {
var top  = window.pageYOffset || document.body.scrollTop  || document.documentElement.scrollTop;
var left = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
document.getElementById('Shopping-Cart-Busy').style.top = (top+3)+'px';
document.getElementById('Shopping-Cart-Busy').style.left = (left+3)+'px';
document.getElementById('Shopping-Cart-Busy').style.display = 'block';
}
},
_ajax_stop: function() {
if (document.getElementById('Shopping-Cart-Busy'))
document.getElementById('Shopping-Cart-Busy').style.display = 'none';
window.status = "";
},
Source: function(source) {
var result = Cart.Manager('source','&_source='+source,false);
if (result) {
if (typeof EAC != 'undefined') EAC.backgroundLayer(true);
window.location.reload(true);
}
},
Post: function(event) {
if (typeof EAC != 'undefined') EAC.backgroundLayer(true);
var result = Cart.Manager('post','',false);
Event.stop(event);
window.location.replace(document.CartForm.action);
return false;
}
}
Cart.Hello();
Event.observe(window, "load", function(event) {
Cart._count(Cart.ItemCount);
if (document.CartForm) {
Cart.Show(Cart._ASYNCHRONOUS);
Cart.Reset();
if (document.CartForm.cst_Firstname) {
Event.observe(document.CartForm, "submit", function(event) {Cart.CaptureOnExit = false;});
Event.observe(window, "unload", function(event) {Cart.Capture();});
}
}
}
);