if (typeof Prototype == 'undefined') throw("cart_manager: Prototype JavaScript framework required");
var Cart = {
Version:'v3.16.5 (Jan 28, 2010)',
AjaxURL:"/common/cart_manager.php",
Status:null,
Response:null,
ItemCount:0,
Token:null,
CaptureOnExit:true,
DisplayStyle:"",
ItemWindow:{x:415,y:0},
ItemEffects:['BlindDown','BlindUp'],
ItemObject:false,
Order:(typeof EAC != 'undefined') ? EAC.CartValues : null,
_ASYNCHRONOUS:true,_SYNCHRONOUS:false,
_DISPLAY:true,_NO_DISPLAY:false,
_SET_ON_UPDATE:true,_ADD_ON_UPDATE:false,
_prior:null,
_callback:{},
Manager: function(action, arg1, isAsync, element) {
fields = (document.CartForm) ? '&' + Form.serialize($(document.CartForm)) : "";
Cart.Status = '';
Cart.Response = null;
var ajaxStructure = {
asynchronous:(isAsync !== false) ? Cart._ASYNCHRONOUS : Cart._SYNCHRONOUS,
requestHeaders: {'X-CartManager-Token': Cart.Token},
postBody: '_action='+action + arg1 + fields,
onCreate: function() {
document.fire('Cart:active');
},
onSuccess: function(response,json) {
document.fire('Cart:success',
{action:action, status:Cart.Status, response:response, request:response.request, json:json, exception:null}
);
document.fire('Cart:'+action,
{action:action, status:Cart.Status, response:response, request:response.request, json:json, exception:null}
);
},
onFailure:function(response,json) {
document.fire('Cart:failure',
{action:action, status:'Error', response:response, request:response.request, json:json, exception:null}
);
},
onException: function(request, exception) {
document.fire('Cart:exception',
{action:action, status:'Error', response:{status:999,responseText:exception.message}, request:request, json:null, exception:exception}
);
},
onComplete: function() {
document.fire('Cart:idle');
}
};
if (element) {
var xhr = new Ajax.Updater(element, Cart.AjaxURL, ajaxStructure);
return null;
} else {
var xhr = new Ajax.Request(Cart.AjaxURL, ajaxStructure);
return Cart.Response;
}
},
_active: function() {
window.status = "<-- Updating -->";
if (elem = 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;
elem.style.top = (top+3)+'px';
elem.style.left = (left+3)+'px';
elem.style.display = 'block';
}
},
_idle: function() {
if (elem = document.getElementById('Shopping-Cart-Busy')) elem.style.display = 'none';
window.status = "";
},
_success: function(event) {
var response  = event.memo.response;
Cart.Status = response.getHeader('X-CartManager-Status') || 'OK';
Cart.Response = response.responseText;
if (event.memo.json) {
Cart._showCount(event.memo.json.UserItems);
Cart.Order = EAC.CartValues = event.memo.json;
}
var warning = false;
switch (event.memo.status) {
case 'Empty':warning = 'The shopping cart is empty'; break;
case 'Exceeded':warning = 'The total amount of the order exceeds the system limits'; break;
case 'Duplicate':warning = 'An order has already been submitted during this session'; break;
case 'Error':warning = 'An error has occured while processing the request'; break;
}
if (warning) {
event.memo.warning = warning;
document.fire('Cart:warning', event.memo);
window.status = warning;
}
},
_failure: function(event) {
var response  = event.memo.response;
var request   = event.memo.request;
Cart.Status   = event.memo.status;
if (response.status == 404)
response.responseText = 'Requested URL not found';
if (response.responseText.length > 1024 || response.getHeader('Content-Type') == 'text/html')
response.responseText = 'http '+response.status+' '+request.method+' error';
var e = document.fire('Cart:error', event.memo);
if (!e.stopped) alert("("+response.status+") "+response.responseText);
},
_exception: function(event) {
var request   = event.memo.request;
var exception = event.memo.exception;
Cart.Status   = event.memo.status;
var e = document.fire('Cart:error', event.memo);
if (!e.stopped) {
var err = 'AJAX '+request.method.toUpperCase()+' '+exception.name+': '+exception.message;
var element = document.getElementById('Shopping-Cart-Confirmation') || document.getElementById('Shopping-Cart-Items') || null;
if (element) {
element.innerHTML =
"<div id='Shopping-Cart-Message'><h3>We're sorry, we are unable to process your request due to an error. "+
"Please refresh the page and try again or contact one of our sales representatives to complete your order.</h3>"+
"<p>"+err+"<br />This is often the result of a connection failure and may be cause by firewall or security settings.</p></div>";
element.style.sisplay = 'block';
} else {
alert(err);
}
}
},
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) {
Cart.registerCallback('onCartUpdate');
if (typeof sku == 'object') {
try {
sku = (sku) || null;
if (typeof sku == 'object') {
for (i=0;i<sku.length;i++) {
if (sku[i].checked)  {Cart.Update(sku[i].value,qty,set,false);}
}
if (show === true) Cart.Show(); else if (typeof show == 'string') location.href=show;
return;
}
} catch(e) {sku = null};
}
if (sku) {
var set = (set) ? 'true' : 'false';
var isAsync = (show) ? false : true;
Cart.Manager('update','&_sku='+sku+'&_qty='+qty+'&_set='+set,isAsync);
if (show === true) Cart.Show(); else if (typeof show == 'string') location.href=show;
}
},
Recalc: function(isAsync) {
var isAsync = (isAsync !== true) ? Cart._SYNCHRONOUS : Cart._ASYNCHRONOUS;
Cart.registerCallback('onCartRecalc');
var result = Cart.Manager('recalc','',isAsync);
return result;
},
Empty: function(isAsync) {
Cart.registerCallback('onCartEmpty');
Cart.Manager('empty','',isAsync);
},
Count: function(isAsync) {
var isAsync = (isAsync !== true) ? Cart._SYNCHRONOUS : Cart._ASYNCHRONOUS;
Cart.registerCallback('onCartCount');
var result = Cart.Manager('count','',isAsync,'Shopping-Cart-Counter');
return (result * 1);
},
_showCount: function(result) {
if (document.getElementById('Shopping-Cart-Counter'))
document.getElementById('Shopping-Cart-Counter').innerHTML = result;
Cart.ItemCount = (result * 1);
},
Show: function(isAsync,force) {
Cart.registerCallback('onCartShow');
var force = (force) ? 'true' : 'false';
if (document.getElementById('Shopping-Cart-Items') && Cart._prior != null) {
document.getElementById('Shopping-Cart-Items').innerHTML = Cart._prior;
Cart._prior = null;
}
Cart.Manager('show','&_style='+Cart.DisplayStyle+'&_force='+force,isAsync);
},
_show: function(event) {
var result = event.memo.response.responseText;
var status = event.memo.status;
if (result == 'reload' || status == 'reload') {
if (typeof EAC != 'undefined') EAC.backgroundLayer(true);
window.onbeforeunload = null;
window.location.reload(true);
return;
}
if (status != 'OK') Cart._prior = document.getElementById('Shopping-Cart-Items').innerHTML || null;
var parts = result.split("<!--[JSPLIT]-->");
Cart._showElement('Shopping-Cart-Items',   parts[0]||'');
Cart._showElement('Shopping-Cart-Shipping',parts[1]||'');
Cart._showElement('Shopping-Cart-Totals',  parts[2]||'');
Cart._showElement('Shopping-Cart-Payments',parts[3]||'');
Cart._showElement('Shopping-Cart-Upsells', parts[4]||'');
Cart._showElement('Shopping-Cart-Coupons', parts[5]||'');
var el=null,sc=$$('.Shopping-Cart-WhenValid');
if (Cart.ItemCount < 1 || status != 'OK') {
if (el=document.getElementById('Shopping-Cart-Form')) el.style.display = 'none';
if (el=document.getElementById('Shopping-Cart-AltForm')) el.style.display = 'block';
if (sc) sc.each(function(el) {el.style.display = 'none';});
} else {
if (el=document.getElementById('Shopping-Cart-AltForm')) el.style.display = 'none';
if (el=document.getElementById('Shopping-Cart-Form')) el.style.display = 'block';
if (sc) sc.each(function(el) {el.style.display = 'block';});
}
},
_showElement : function(elem,content) {
if (!(elem = document.getElementById(elem))) return;
elem.innerHTML = content;
if (content && typeof wFORMS != 'undefined') try {wFORMS.addBehaviors(elem.id)} catch(e){}
},
Summary: function(isAsync) {
Cart.registerCallback('onCartSummary');
Cart.Manager('summary','&_style='+Cart.DisplayStyle,isAsync,'Shopping-Cart-Summary');
},
Submit: function(isAsync) {
if (Cart.Order.OrderID) return Cart.Confirm(isAsync);
//isAsync = (isAsync !== true) ? Cart._SYNCHRONOUS : Cart._ASYNCHRONOUS;
document.observe('Cart:submit', Cart._submit);
Cart.registerCallback('onCartSubmit');
Cart.Manager('submit','',isAsync,'Shopping-Cart-Confirmation');
},
Confirm: function(isAsync) {
document.observe('Cart:confirm', Cart._submit);
Cart.registerCallback('onCartConfirm');
if (document.loaded) {
Cart.Manager('confirm','',isAsync,'Shopping-Cart-Confirmation');
} else {
document.observe('dom:loaded', function(event) {
Cart.Manager('confirm','',isAsync,'Shopping-Cart-Confirmation');
});
}
},
_submit: function(event) {
Cart.CaptureOnExit = false;
},
Reset: function() {
Cart.Manager('reset','',false);
},
Capture: function() {
if (Cart.CaptureOnExit) {
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';
},
Source: function(source) {
var result = Cart.Manager('source','&_source='+source,false);
if (result) {
if (typeof EAC != 'undefined') EAC.backgroundLayer(true);
window.onbeforeunload = null;
window.location.reload(true);
}
},
Promo: function(promo,show) {
if (promo) {
Cart.registerCallback('onCartUpdate','promo');
var isAsync = (show) ? false : true;
Cart.Manager('promo','&_promo='+promo,isAsync);
}
},
Post: function(event) {
if (typeof EAC != 'undefined') EAC.backgroundLayer(true);
Cart.Manager('post','',false);
Event.stop(event);
window.location.replace(document.CartForm.action);
return false;
},
registerCallback: function(func,name) {
if (!func || typeof window[func] != 'function') return;
if (!name) name = func.substr(6).toLowerCase();
if (Cart._callback[name]) return;
Cart._callback[name] = window[func];
document.observe('Cart:'+name, function(event) {
Cart._callback[name](event.memo.response.responseText,event.memo.Status);
});
},
Initialize: function() {
if (typeof EAC != 'undefined') EAC.console.info('Cart Manager '+Cart.Version);
document.observe('Cart:active', Cart._active);
document.observe('Cart:idle', Cart._idle);
document.observe('Cart:success', Cart._success);
document.observe('Cart:failure', Cart._failure);
document.observe('Cart:exception', Cart._exception);
document.observe('Cart:show', Cart._show);
document.observe('Cart:promo', Cart._show);
document.observe('dom:loaded', function(event) {
if (document.CartForm) {
if (document.CartForm.cst_Firstname) {
Event.observe(document.CartForm, "submit", function(event) {Cart.CaptureOnExit = false;});
Event.observe(window, "unload", function(event) {Cart.Capture();});
}
Cart.Show(Cart._ASYNCHRONOUS);
}
Cart._showCount(Cart.ItemCount);
});
Cart.Hello();
}
}
if (typeof EAC != 'undefined') {
EAC.Cart = Cart;
EAC.isLoaded['cart'] = Cart.Version;
}
Cart.Initialize();