var SearchQuicklist=function(){var PREFADE_TIME=500;var FADE_TIME=500;var ERROR_PREFADE_TIME=4000;var ERROR_FADE_TIME=500;var setupSearchClicks=function(){var image=jQuery(".defaultView .productTitle");image.bind("mouseenter",searchImageMouseEnterCallback)
.bind("mouseleave",searchImageMouseLeaveCallback);var button=jQuery(".searchql_div");button.click(doSearchClick)
.bind("mouseenter",searchButtonMouseEnterCallback)
.bind("mouseleave",searchButtonMouseLeaveCallback);jQuery(document).bind("added.ql",searchAddedEventCallback)
.bind("removed.ql",searchRemovedEventCallback)
.bind("adding.ql",searchAddingEventCallback)
.bind("removing.ql",searchRemovingEventCallback)
.bind("clearing.ql",searchClearingEventCallback)
.bind("cleared.ql",searchClearedEventCallback)
.bind("loaded.ql",searchLoadedEventCallback);};var doSearchClick=function(){return goToNextStateFromAsin(jQuery(this),"buttonClicked");};var searchImageMouseEnterCallback=function(){goToNextStateFromAsin(jQuery(this),"mouseEnterImage");return true;};var searchImageMouseLeaveCallback=function(){goToNextStateFromAsin(jQuery(this),"mouseLeaveImage");return true;};var searchButtonMouseEnterCallback=function(){goToNextStateFromAsin(jQuery(this),"mouseEnterButton");return true;};var searchButtonMouseLeaveCallback=function(){goToNextStateFromAsin(jQuery(this),"mouseLeaveButton");return true;};var searchAddedEventCallback=function(event,data){return setNextState("addedEvent",data);};var searchRemovedEventCallback=function(event,data){return setNextState("removedEvent",data);};var searchAddingEventCallback=function(event,data){return setNextState("addingEvent",data);};var searchRemovingEventCallback=function(event,data){return setNextState("removingEvent",data);};var searchClearingEventCallback=function(event,data){return setNextState("clearingEvent",data);};var searchClearedEventCallback=function(event,data){return setNextState("clearedEvent",data);};var searchLoadedEventCallback=function(event,data){return setNextState("loadedEvent",data);};var goToNextStateFromAsin=function(element,nextState){var asinAndParent=getAsinAndParentFromSearchLink(element);if(!asinAndParent||asinAndParent.length<2)return;return setNextState(nextState,asinAndParent,element);};var getAsinAndParentFromSearchLink=function(searchElement){var keys=searchElement.attr("id").split("_");if(keys.length<2)return[];var parent;var asin;if(searchElement.hasClass('searchql_div')){parent=keys[1];var quicklistChildDiv=searchElement.parent();if(quicklistChildDiv.length>0){keys=quicklistChildDiv.attr("id").split("_");asin=keys[2];}}else{var quicklistParentDiv=searchElement.find(".searchql_div");keys=quicklistParentDiv.attr("id").split("_");parent=keys[1];var quicklistChildDiv=quicklistParentDiv.parent();if(quicklistChildDiv.length>0){keys=quicklistChildDiv.attr("id").split("_");asin=keys[2];}}
var asinAndParent;if(asin&&parent){asinAndParent=[asin,parent];}
return asinAndParent;};var currentAsin;var currentParent;var currentAsinButton;var currentAsinButtonElement;var currentAsinImage;var currentAsinImageElement;var asinsWorkingState={};var setNextState=function(transition,data,element){var returnValue=stateMachine[transition](data,element);return returnValue;};var isWorking=function(asin){var button=searchQuicklistGetButtonFromParent(asin);var inWorkingState=asinsWorkingState[asin]||button.hasClass("error")||button.hasClass("adding")||button.hasClass("removing");return inWorkingState;};var isFading=function(asin){var button=searchQuicklistGetButtonFromParent(asin);return button.hasClass("error");};var stateMachine={mouseEnterImage:function(asinAndParent,element){if(currentAsinImage&&asinAndParent[0]!=currentAsinImage){goToNextStateFromAsin(currentAsinImageElement,"mouseLeaveImage");}
currentAsin=asinAndParent[0];currentParent=asinAndParent[1];currentAsinImage=currentParent;currentAsinImageElement=element;var button=searchQuicklistGetButtonFromParent(currentParent);if(button.hasClass("searchql_hidden")){searchQuicklistSetButtonState(button,"image_hover");}
Quicklist.setupMouseTracking(element,["opened.ql"],searchImageMouseLeaveCallback);return true;},mouseLeaveImage:function(asinAndParent,element){currentAsinImage=null;currentAsinImageElement=null;currentAsin=asinAndParent[0];currentParent=asinAndParent[1];if(!isWorking(currentParent)&&!isFading(currentParent)){var nextClass=Quicklist.containsASINorParent(currentAsin,currentParent)?"added":"searchql_hidden";searchQuicklistSetButtonState(searchQuicklistGetButtonFromParent(currentParent),nextClass);searchQuicklistHideBanner(currentParent);}
return false;},mouseEnterButton:function(asinAndParent,element){if(currentAsinButton&&asinAndParent[0]!=currentAsinButton){goToNextStateFromAsin(currentAsinButtonElement,"mouseLeaveButton");}
currentAsin=asinAndParent[0];currentParent=asinAndParent[1];currentAsinButton=currentParent;currentAsinButtonElement=element;button=searchQuicklistGetButtonFromParent(currentParent);var action=Quicklist.containsASINorParent(currentAsin,currentParent)?"remove":"add";if(!button.hasClass("error")){var nextButtonClass=action=="add"?"ready_to_add":"ready_to_remove";var bannerText=action=="add"?"Add to Quicklist":"Remove from Quicklist";searchQuicklistSetButtonState(button,nextButtonClass);searchQuicklistShowBanner(currentParent,bannerText);}
Quicklist.setupMouseTracking(button,["opened.ql"],searchButtonMouseLeaveCallback);return false;},mouseLeaveButton:function(asinAndParent,element){currentAsin=asinAndParent[0];currentParent=asinAndParent[1];button=searchQuicklistGetButtonFromParent(currentParent);var action=Quicklist.containsASINorParent(currentAsin,currentParent)?"remove":"add";var span=searchQuicklistGetBannerElement(currentParent);if(!isWorking(currentParent)&&!isFading(currentParent)){if(button.hasClass("ready_to_remove")){searchQuicklistSetButtonState(button,"added");}
else if(!button.hasClass("added")){searchQuicklistSetButtonState(button,"image_hover");}
searchQuicklistHideBanner(currentParent);}
currentAsinButton=null;currentAsinButtonElement=null;return false;},buttonClicked:function(asinAndParent){currentAsin=asinAndParent[0];currentParent=asinAndParent[1];var forceChild=getForceChild(currentParent);if(isWorking(currentParent)){return false;}
if(Quicklist.getViewState()!=Quicklist.VIEW_STATE_RELOADING)asinsWorkingState[currentParent]=true;if(Quicklist.containsASINorParent(currentAsin,currentParent))
{searchQuicklistActionPending(currentParent,"remove","removing","Removing...");Quicklist.open(function(){Quicklist.remove(currentAsin,currentParent);});}else{searchQuicklistActionPending(currentParent,"add","adding","Adding...");Quicklist.open(function(){if(forceChild){Quicklist.add(currentAsin,currentParent,Quicklist.IMAGE_TYPE_SEARCH);}
else{Quicklist.add(currentParent,currentParent,Quicklist.IMAGE_TYPE_SEARCH);}});}
return false;},addedEvent:function(data){var addingAsin=data.asin;var parent=data.parent;var asinAndParent=[addingAsin,parent];var button=searchQuicklistGetButtonFromParent(parent);if(data.status=="success")searchQuicklistSetButtonState(button,"added");else searchQuicklistSetButtonState(button,"error");var returnValue=searchQuicklistActionCompleted(data,"add","Added",data.error_heading,data.error_text,"Add to Quicklist",function(){if(parent==currentAsinButton){if(data.status=="error"){setAddedOrRemovedButtonState(addingAsin,parent,button);}
setNextState("mouseEnterButton",asinAndParent);}else if(parent==currentAsinImage){if(data.status!="success"){searchQuicklistSetButtonState(button,"image_hover");}}
else if(data.status=="error"){setAddedOrRemovedButtonState(addingAsin,parent,button);}});return returnValue;},removedEvent:function(data){var removingAsin=data.asin;var parent=data.parent;var asinAndParent=[removingAsin,parent];var button=searchQuicklistGetButtonFromParent(parent);if(data.status=="error"){searchQuicklistSetButtonState(button,"error");}
var returnValue=searchQuicklistActionCompleted(data,"remove","Removed",data.error_heading,data.error_text,"Remove from Quicklist",function(){if(data.status=="error"){setAddedOrRemovedButtonState(removingAsin,parent,button);}else if(data.status=="success"){searchQuicklistSetButtonState(button,"searchql_hidden");}
if(parent==currentAsinButton){setNextState("mouseEnterButton",asinAndParent);}else{if(parent==currentAsinImage){setNextState("mouseEnterImage",asinAndParent);}}});return returnValue;},addingEvent:function(data){currentAsin=data.asin;var returnValue=searchQuicklistActionPending(data.asin,"add","adding","Adding...");return returnValue;},removingEvent:function(data){currentAsin=data.asin;var returnValue=searchQuicklistActionPending(data.asin,"remove","removing","Removing...");return returnValue;},clearingEvent:function(data){removeAllAnchors();return false;},clearedEvent:function(data){if(data.status=="success"){removeAllAnchors();}
return false;},loadedEvent:function(data){if(data.status=="success"){removeAllAnchors();var quicklist=Quicklist.getQuicklist();jQuery.each(quicklist,function(index,asinObject){var buttons=jQuery("#searchql_"+asinObject.parent+" a[href=#add_to_quicklist]").not('.error');if(buttons.length>0){searchQuicklistSetButtonState(buttons,"added");}});}
return false;}};var setAddedOrRemovedButtonState=function(asin,parent,button){if(Quicklist.containsASINorParent(asin,parent)){searchQuicklistSetButtonState(button,"added");}else{searchQuicklistSetButtonState(button,"searchql_hidden");}};var getForceChild=function(parent){var id="#searchql_"+parent;var childDiv=jQuery(id);var forceChildDiv=childDiv.find("#searchql_child");return forceChildDiv.hasClass("searchql_child_on")?true:false;};var removeAllAnchors=function(){var anchors=jQuery(".searchql_div a[href=#add_to_quicklist]").not('.error');anchors.removeClass(searchQuicklistButtonStatesString).addClass("searchql_hidden");};var searchQuicklistBannerStates=["searchql_hidden","searchql_hover","searchql_working","searchql_success","searchql_error"];var searchQuicklistBannerStatesString=searchQuicklistBannerStates.join(" ");var searchQuicklistSetBannerState=function(banner,state){banner.removeClass(searchQuicklistBannerStatesString).addClass(state);return banner;};var searchQuicklistButtonStates=["searchql_hidden","image_hover","ready_to_add","adding","added","ready_to_remove","removing","removed","error"];var searchQuicklistButtonStatesString=searchQuicklistButtonStates.join(" ");var searchQuicklistSetButtonState=function(button,state){button.removeClass(searchQuicklistButtonStatesString).addClass(state);return button;};var searchQuicklistGetCurrentBannerState=function(asin,action){var span=searchQuicklistGetBannerElement(asin);var returnedState="searchql_hover";jQuery.each(searchQuicklistBannerStates,function(n,state){if(span.hasClass(state)){returnedState=state;return false;};return true;});return returnedState;};var searchQuicklistActionCompleted=function(data,action,completeText,errorHeading,errorText,finalText,fadeCallback){var asin=data.asin;var parent=data.parent;if(data.status=="success"){return searchQuicklistActionComplete(parent,action,"success",null,completeText,finalText,fadeCallback);}else{return searchQuicklistActionComplete(parent,action,"error",errorHeading,errorText,finalText,fadeCallback);}};var searchQuicklistGetButtonFromParent=function(parent){return jQuery("#searchql_"+parent+" a[href=#add_to_quicklist]");};var searchQuicklistGetButtonFromChild=function(asin){var childDiv=jQuery('#searchql_child_'+asin);return childDiv.find('.searchql_div a[href=#add_to_quicklist]');};var searchQuicklistActionComplete=function(asin,action,status,completeActionHeader,completeActionText,resetActionText,fadeCallback){var nextBannerState="searchql_"+status;if(status=="success")searchQuicklistSetBannerStateAndHTML(asin,nextBannerState,searchQuicklistGetBannerStandardHTML(completeActionText));else{searchQuicklistSetBannerStateAndHTML(asin,nextBannerState,searchQuicklistGetBannerErrorHTML(completeActionHeader,completeActionText));}
asinsWorkingState[asin]=false;searchQuicklistAnimateBannerClose(asin,resetActionText,status=="error"?ERROR_PREFADE_TIME:PREFADE_TIME,status=="error"?ERROR_FADE_TIME:FADE_TIME,function(){fadeCallback&&fadeCallback(asin);});return false;};var searchQuicklistActionPending=function(asin,action,newButtonState,text){if(Quicklist.getViewState()==Quicklist.VIEW_STATE_RELOADING){return false;}
var currentState=searchQuicklistGetCurrentBannerState(asin);searchQuicklistSetButtonState(searchQuicklistGetButtonFromParent(asin),newButtonState);var span=searchQuicklistSetBannerStateAndHTML(asin,"searchql_working",searchQuicklistGetBannerStandardHTML(text));span.show();return false;};var searchQuicklistShowBanner=function(asin,text){var span=searchQuicklistSetBannerStateAndHTML(asin,"searchql_hover",searchQuicklistGetBannerStandardHTML(text));span.show();var ie=jQuery.browser.msie;if(ie){span.css("background-color","white");}
return span;};var prefadeTimeout={};var searchQuicklistAnimateBannerClose=function(asin,html,preFadeTime,fadeTime,callback){var span=searchQuicklistGetBannerElement(asin);if(prefadeTimeout[asin]){clearTimeout(prefadeTimeout[asin]);delete prefadeTimeout[asin];}
span.stop();prefadeTimeout[asin]=setTimeout(function(){delete prefadeTimeout[asin];span.fadeOut(fadeTime,function(){searchQuicklistHideBanner(asin,html);callback&&callback();});},preFadeTime);return span;};var searchQuicklistHideBanner=function(asin,text){return searchQuicklistSetBannerStateAndHTML(asin,"searchql_hidden",searchQuicklistGetBannerStandardHTML(text));};var searchQuicklistSetBannerStateAndHTML=function(asin,toclass,html){var banner=searchQuicklistGetBannerElement(asin);var element=searchQuicklistSetBannerState(banner,toclass);if(html)element.html(html);return element;};var searchQuicklistGetBannerElement=function(asin){return jQuery("#searchql_"+asin+" .searchql_banner");};var searchQuicklistGetBannerStandardHTML=function(text){return'<span class="searchql_text">'+text+"</span>";};var searchQuicklistGetBannerErrorHTML=function(heading,text){return'<span class="searchql_error_heading">'+heading+'</span>'+
'</br><span class="searchql_error_text">'+text+'</span>';};return{setup:setupSearchClicks};}();amznJQ&&amznJQ.available("Quicklist",function(){amznJQ.declareAvailable('SearchQuicklist');});