
cart={};Cart=Class.create();Cart.prototype={initialize:function(id,app,options){if(id){this.id=id;this.options=options;this.items=[];this.self=$(this.id);this.order_summary=$('order_summary');this.sum=$(this.id+'_sum');updaters[this.id]=new Updater(this.id,app,'Update',{parent:this,status_style:'simple'});this.updater=updaters[this.id];if($(this.id+"_status")){this.status=new StatusComponent(this.id+"_status",this.options.color);}
if(console)console.log('Currency: '+this.options.currency);this.app=app;this.loadCart();}},initAjax:function(){ajaxEngine.registerRequest(this.id+'_request',this.app);ajaxEngine.registerAjaxObject(this.id+'_update',this);},callRicoAjaxEngine:function(callParams){if(console)console.log('PARAMS: '+callParams);ajaxEngine.sendRequest.apply(ajaxEngine,callParams);},ajaxUpdate:function(ajaxResponse){this.updater.update(ajaxResponse);if(console)console.log('Loaded Cart');var content=ajaxResponse.getElementsByTagName('content')[0];var items=ajaxResponse.getElementsByTagName('items')[0];if(content&&items){this.enableBtns();this.insertContent(content);this.insertItems(items.getElementsByTagName('item'));this.calcSum();}else{this.disableBtns();}
this.cart_loaded=true;},enableBtns:function(){if(btns[this.id+'_remove_all'])btns[this.id+'_remove_all'].enable();if(btns[this.id+'_checkout'])btns[this.id+'_checkout'].enable();},disableBtns:function(){if(btns[this.id+'_remove_all'])btns[this.id+'_remove_all'].disable();if(btns[this.id+'_checkout'])btns[this.id+'_checkout'].disable();},loadCart:function(){var callParams=[];this.updater.run([],'LoadCart','');},addItem:function(item_id,quantity,default_config){var callParams=[];callParams.push('vars[item_id]='+item_id);callParams.push('vars[quantity]='+quantity);callParams.push('vars[default_config]='+default_config);this.updater.run(callParams,'UpdateCart');},deleteItem:function(item_id,key){$('cart_item_'+item_id).style.display='none';var callParams=[];callParams.push('vars[item_id]='+item_id);callParams.push('vars[key]='+key);this.updater.run(callParams,'UpdateCart');},removeAll:function(redirect){for(var i=0;i<this.items.length;i++){if(console)console.log(this.items[i].self);$(this.items[i].self).style.display='none';}
this.items=[];var callParams=[];callParams.push('remove_all=1');this.updater.run(callParams,'UpdateCart','',redirect);},insertContent:function(content){if(this.order_summary){this.order_summary.innerHTML=RicoUtil.getContentAsString(content);ApexUtil.evalScripts(this.order_summary);}},insertItems:function(items){this.items=[];for(var i=0;i<items.length;++i){var self=items[i].getAttribute('self');var id=parseInt(RicoUtil.getContentAsString(items[i].getElementsByTagName('id')[0]));var price=parseFloat(RicoUtil.getContentAsString(items[i].getElementsByTagName('price')[0]));var quantity=parseInt(RicoUtil.getContentAsString(items[i].getElementsByTagName('quantity')[0]));if(!this.options.properties){this.options.properties=[];}
this.items.push(new CartItem(id,self,price,quantity,this.options.properties));}},syncServer:function(item_id,quantity){var callParams=[];callParams.push('item_id='+item_id);callParams.push('quantity='+quantity);this.updater.run(callParams,'SyncCart');},calcSum:function(){this.total=0;if(this.items.length){for(var i=0;i<this.items.length;++i){this.total=parseFloat(this.total)+parseFloat(this.items[i].getTotal());if(console)console.log('after item '+i+' with: '+this.items[i].getTotal()+' = '+this.total);}
for(var i=0;i<this.options.properties.length;++i){var property=this.options.properties[i];var temp=$('cart_total_'+property);temp.innerHTML=0;for(var j=0;j<this.items.length;++j){temp.innerHTML=parseFloat(temp.innerHTML)+parseFloat(this.items[j].getProperty(property));}}}
this.sum.innerHTML=this.options.currency+this.currencyFormatted(this.total);if(this.options.tax_rate&&$(this.id+'_tax')&&$(this.id+'_total')){var tax_rate=parseFloat(this.options.tax_rate);var taxes=this.total*tax_rate;var final=this.total+taxes;$(this.id+'_tax').innerHTML=this.options.currency+this.currencyFormatted(taxes);$(this.id+'_total').innerHTML=this.options.currency+this.currencyFormatted(final);}},currencyFormatted:function(amount){var i=parseFloat(amount);if(isNaN(i)){i=0.00;}
var minus='';if(i<0){minus='-';}
i=Math.abs(i);i=parseInt((i+.005)*100);i=i/100;s=new String(i);if(s.indexOf('.')<0){s+='.00';}
if(s.indexOf('.')==(s.length-2)){s+='0';}
s=minus+s;return s;},calcProperties:function(){}};CartItem=Class.create();CartItem.prototype={initialize:function(id,self,price,quantity,properties){this.id=id;this.self=$(self);this.price=parseFloat(price);this.quantity=parseFloat(quantity);this.self_total=$('total_'+this.id);this.self_quantity=$('quantity_'+this.id);this.self_quantity.value=this.quantity;this.total=this.quantity*this.price;this.properties={};for(var i=0;i<properties.length;++i){this.properties[properties[i]]=$('item_'+id+'_'+properties[i]);this.properties[properties[i]].value=$('item_'+id+'_'+properties[i]).innerHTML/this.quantity;if(console)console.log('Actual '+properties[i]+' : '+this.properties[properties[i]].innerHTML);}
this.injectBehaviours();},calcTotal:function(){this.quantity=this.self_quantity.value;this.total=this.quantity*this.price;this.self_total.innerHTML=cart.options.currency+cart.currencyFormatted(this.total);for(var i in this.properties){this.properties[i].innerHTML=this.properties[i].value*this.quantity;}
cart.calcSum();cart.syncServer(this.id,this.quantity);},injectBehaviours:function(){this.self_quantity.onblur=this.calcTotal.bindAsEventListener(this);},getTotal:function(){return cart.currencyFormatted(this.total);},getProperty:function(key){return this.properties[key].innerHTML;}};
