var MassAdd=new Class({Implements:[Options,Events],options:{errorContainer:"",errorCSS:"",useCookie:false,cookieName:"",navLinks:[],uidCookieClass:"",finishClass:"",itemContainerClass:"",onChange:$empty},items:{},initialize:function(references,bookmarks,uids,qtybox,url,cartbutton,options){this.setOptions(options);this.itemReference=$$(references);this.itemReferenceBookmark=$$(bookmarks);this.uidElements=$$(uids);this.qtyBoxClass=qtybox;this.addScriptURL=url;this.buildErrorPopup();$$(cartbutton).each(function(button){button.addEvent("click",this.onAddToCart.bind(this,button));button.setStyle("cursor","pointer")},this);$$(this.qtyBoxClass).each(function(qtyBox){qtyBox.addEvent("keyup",this.onQTYBoxChange.bind(this,qtyBox))},this);if(this.options.useCookie){$$(this.options.navLinks).each(function(link){link.addEvent("click",function(event){event.preventDefault();this.navLocation=link.get("href");this.onNavigate(link)}.bind(this))},this);this.items=new Hash.Cookie(this.options.cookieName,{path:"/"});this.setPage()}},verifyChoices:function(btn){var errorArray=[];var selectedItemsArray=this.getSelectedItems("position");var showNoItemsSelected=true;if((!btn.hasClass("AddToCartBtn")&&this.options.useCookie)||(btn.hasClass("AddToCartBtn")&&this.options.useCookie&&(this.items.getLength()>0))){showNoItemsSelected=false}if(!selectedItemsArray.length){if(showNoItemsSelected){errorArray.include({message:"No items selected to add!",referenceID:""})}}else{$each(selectedItemsArray,function(pos){if(!this.getFinishUID(this.uidElements[pos]).length){errorArray.include({message:"Please select a finish for item: "+this.itemReference[pos].get("value"),referenceID:pos})}},this)}if(errorArray.length>0){this.showErrorPopup(btn,errorArray)}else{return true}},onAddToCart:function(btn){var selectedItemsArray=this.getSelectedItems("values");if(this.verifyChoices(btn)){var urlString="",itemUID,itemQuantity,counter;$each(selectedItemsArray,function(itemQuantity,itemUID){if(this.options.useCookie){this.items.set(("UniqueID_"+itemUID),itemQuantity)}else{counter++;urlString=urlString+"UniqueID_"+itemUID+"="+itemQuantity;if(counter!=selectedItemsArray.length){urlString=urlString+"&"}}},this);if(this.options.useCookie){var queryString=this.items.toQueryString();this.items.empty()}location.href=this.addScriptURL+"&"+((this.options.useCookie)?queryString:urlString)}},onNavigate:function(lnk){if(this.verifyChoices(lnk)){location.href=this.navLocation}},updateCookie:function(){$$(this.options.uidCookieClass).each(function(el){this.items.erase("UniqueID_"+el.get("value"))},this);var selectedItemsArray=this.getSelectedItems("values");var itemUID,itemQuantity;$each(selectedItemsArray,function(itemQuantity,itemUID){if(itemUID.isWholeNum()&&itemUID>0){this.items.set(("UniqueID_"+itemUID),itemQuantity)}},this);this.fireEvent("onChange")},setPage:function(){$$(this.options.finishClass).each(function(el){el.addEvent("change",function(){this.updateCookie()}.bind(this))},this);$$(this.qtyBoxClass).each(function(el){el.addEvent("keyup",function(){this.updateCookie()}.bind(this))},this);$$(this.options.uidCookieClass).each(function(input){if(this.items.has("UniqueID_"+input.get("value"))){input.getParent(this.options.itemContainerClass).getElement(this.qtyBoxClass).set("value",this.items.get("UniqueID_"+input.get("value")));if(input.getParent("select")){input.set("selected","true")}}},this)},getItemTotal:function(){var itemTotal=0;this.items.each(function(value,key){itemTotal+=value.toInt()});return itemTotal},onQTYBoxChange:function(el){var value=el.get("value");if(!value.isWholeNum()||value<0){el.value=0;alert("Quantity must be a whole number!")}},getFinishUID:function(el){var optionValue=$(el).get("value");var mySplitResult=optionValue.split("|");var returnValue=(mySplitResult.length>1)?mySplitResult[0]:optionValue;return returnValue},getSelectedItems:function(type){var allSelectedItemsIDArray=[];var allSelectedItemsQTYArray=[];var allSelectedItemsKeyArray=[];var associatedArray=[];var counter=0;$$(this.qtyBoxClass).each(function(qtyBox){if(qtyBox.get("value").isWholeNum()&&qtyBox.get("value").toInt()>0){allSelectedItemsQTYArray[allSelectedItemsQTYArray.length]=qtyBox.value;allSelectedItemsIDArray.include(this.getFinishUID(this.uidElements[counter]));allSelectedItemsKeyArray.include(counter)}counter++},this);if(type=="values"){associatedArray=allSelectedItemsQTYArray.associate(allSelectedItemsIDArray);return associatedArray}else{return allSelectedItemsKeyArray}},buildErrorPopup:function(){if($defined(this.options.errorContainer)){scrollFx=new SmoothScroll();$(this.options.errorContainer).setStyle("display","none");$(this.options.errorContainer).getElementById("closeLink").addEvent("click",this.hideErrorPopup.bind(this))}},onErrorClick:function(el){scrollFx.toElement($(el));this.hideErrorPopup()},showErrorPopup:function(btn,errors){if($defined(this.options.errorContainer)){var htmlArray=[];var error,myElement,refID;errors.each(function(error){refID=this.itemReferenceBookmark[error.referenceID];myElement=new Element("a",{href:"#"+refID,text:error.message});if(error.referenceID.length!=0){myElement.addEvent("click",this.onErrorClick.bind(this,[refID]));if(this.options.errorCSS.length){$(this.uidElements[error.referenceID]).addClass(this.options.errorCSS).addEvent("change",function(changeObj){if(changeObj.get("value")!=""){changeObj.removeClass(this.options.errorCSS);this.hideErrorPopup()}}.bind(this,[$(this.uidElements[error.referenceID])]))}}htmlArray.include(new Element("li").adopt(myElement))}.bind(this));$$(this.options.errorContainer).getElement("ul").set("html","");$$(this.options.errorContainer).getElement("ul").adopt(htmlArray);$(this.options.errorContainer).setStyle("display","block");var offsetX,offsetY;offsetX=(btn.getCoordinates()["width"]-$(this.options.errorContainer).getCoordinates()["width"])/2;offsetY=$(this.options.errorContainer).getCoordinates()["height"]/2;$(this.options.errorContainer).setStyles({left:btn.getPosition().x-Math.abs(offsetX),top:btn.getPosition().y-offsetY})}else{alert("Oops...Please make sure you selected all options!")}},hideErrorPopup:function(){$(this.options.errorContainer).setStyle("display","none")}});String.implement({lastElement:function(separator){separator=separator||" ";var txt=this;var index=txt.lastIndexOf(separator);var result=(index==-1)?txt:txt.substr(index+separator.length,txt.length);return result},trimLastElement:function(separator){separator=separator||" ";var txt=this;var index=this.lastIndexOf(separator);return(index==-1)?"":txt.substr(0,index+separator.length)},isWholeNum:function(){return(this.match(/^(\d*?\d*)$/)!=null)}});