function PileTagCounter(span,anchor){this.span=span;this.anchor=anchor;var p=this.findCounterPosition(this.span.innerHTML);this.counterSpan={position:p,has:(p.start>=0&&p.end>=1)};if(this.counterSpan.has){var initialText=this.span.innerHTML;this.counterSpan.prefix=initialText.substring(0,this.counterSpan.position.start);this.counterSpan.sufix=initialText.substring(this.counterSpan.position.end,initialText.length);var tnr=initialText.substring(this.counterSpan.position.start,this.counterSpan.position.end);this.counter=parseInt(tnr);};this.counterAnchor={};this.counterAnchor.has=anchor&&anchor.getAttribute("title");};PileTagCounter.prototype.increment=function(){this.counter++;if(this.counterSpan.has){this.span.innerHTML=this.counterSpan.prefix+this.counter+this.counterSpan.sufix;};if(this.counterAnchor.has){this.anchor.setAttribute("title",this.anchor.getAttribute("title").replace(this.counter-1,this.counter));}};PileTagCounter.prototype.decrement=function(){this.counter--;if(this.counterSpan.has){this.span.innerHTML=this.counterSpan.prefix+this.counter+this.counterSpan.sufix;};if(this.counterAnchor.has){this.anchor.setAttribute("title",this.anchor.getAttribute("title").replace(this.counter+1,this.counter));}};PileTagCounter.prototype.findCounterPosition=function(text){var nrs="0123456789";var r={start:-1,end:-1};var i=0;for(i=0;i<text.length;i++){if(nrs.indexOf(text.charAt(i))>=0){if(r.start<0){r.start=i;}}else{if(r.start>-1){r.end=i;break;}}};if(r.start>-1&&r.end<0){r.end=text.length;};return r;};function PileTagControl(tagDiv,piles,status){this.piles=piles;this.objId=this.piles.objId;this.appY=this.piles.appY;this.tag=tagDiv.getAttribute("tag");this.container=tagDiv;this.status=status;this.inProgress=false;var counters=TaggingUtils.findNodes(tagDiv,"span","counter");var as=TaggingUtils.findNodes(tagDiv,"a");if(counters&&counters.length>0){this.counter=new PileTagCounter(counters[0],as&&as.length>0?as[0]:null);}};PileTagControl.prototype.init=function(){this.imgYes=document.createElement("img");this.imgYes.className="pill-yes";this.setStatus(this.status);this.container.insertBefore(this.imgYes,this.container.firstChild);this.imgYes.control=this;this.imgYes.tagAction="yes";TaggingUtils.observe(this.imgYes,"click",TaggingUtils.bindAsEventListener(this.triggerAction,this),false);TaggingUtils.observe(this.imgYes,"mouseover",TaggingUtils.bindAsEventListener(this.onMouseOver,this),false);TaggingUtils.observe(this.imgYes,"mouseout",TaggingUtils.bindAsEventListener(this.onMouseOut,this),false);};PileTagControl.prototype.setStatus=function(status){this.status=status;this.imgYes.title=TaggingOptions.piles.clickTagSuggest.replace("TAG",this.tag);if(this.status=="yes"){this.imgYes.src=TaggingOptions.piles.yesCheckedImg;this.imgYes.title=TaggingOptions.piles.undoTagSuggest.replace("TAG",this.tag);}else{this.imgYes.src=TaggingOptions.piles.yesImg;}};PileTagControl.prototype.onMouseOver=function(evt){if(!this.inProgress){var e=evt||window.event;var trigger=e.target||e.srcElement;if(trigger.tagAction=="yes"&&this.status!="yes"&&trigger.src!=TaggingOptions.piles.yesCheckedImg){trigger.src=TaggingOptions.piles.yesHoverImg;}}};PileTagControl.prototype.onMouseOut=function(evt){if(!this.inProgress){var e=evt||window.event;var trigger=e.target||e.srcElement;if(trigger.tagAction=="yes"&&this.status!="yes"&&trigger.src!=TaggingOptions.piles.yesImg){trigger.src=TaggingOptions.piles.yesImg;}}};PileTagControl.prototype.triggerAction=function(evt){if(!this.inProgress&&this.piles.ackStartWorkingControler(this)){this.inProgress=true;var appId=this.appY;if(TaggingProductTags.editPanel){TaggingProductTags.editPanel.hide();TaggingProductTags.editPanel=null;};var e=evt||window.event;var trigger=e.target||e.srcElement;var previousImg=trigger.src;trigger.src=TaggingOptions.piles.progressImg;var opts={method:'GET',asynchronous:true,sameInstance:true,trigger:trigger,previousImg:previousImg};if(!this.status||this.status!=trigger.tagAction){opts.parameters="appID="+appId+"&tgTag="+this.tag+"&ASIN="+this.objId;opts.onSuccess=TaggingUtils.bind(function(transport){this.doneTagging(transport,opts);},this);opts.onError=TaggingUtils.bind(function(transport){this.failedTagging(transport,opts);},this);opts.onTimeout=TaggingUtils.bind(function(transport){this.failedTagging(transport,opts);},this);var ajax=new TaggingAjax.Request(opts);ajax.makeRequest(trigger.tagAction=="yes"?TaggingOptions.piles.tagObjectUrlYes:TaggingOptions.piles.tagObjectUrlNo);}else{opts.parameters="appID="+appId+"&tgTag="+this.tag+"&ASIN="+this.objId;opts.onSuccess=TaggingUtils.bind(function(transport){this.doneRemove(transport,opts);},this);opts.onError=TaggingUtils.bind(function(transport){this.failedRemove(transport,opts);},this);opts.onTimeout=TaggingUtils.bind(function(transport){this.failedRemove(transport,opts);},this);var ajax=new TaggingAjax.Request(opts);ajax.makeRequest(trigger.tagAction=="yes"?TaggingOptions.piles.removeObjecTagUrlYes:TaggingOptions.piles.removeObjecTagUrlNo);}}};PileTagControl.prototype.doneTagging=function(xmlObj,options){var response=TaggingUtils.trim(xmlObj.responseText);var trigger=options.trigger;var n="error";if(response.indexOf(this.tag+":"+this.objId+":ok")!=-1){n="success";if(trigger.tagAction=="yes"){this.setStatus("yes");this.addTagToYTUI();if(this.counter){this.counter.increment();}}}else{trigger.src=options.previousImg;};this.inProgress=false;this.piles.ackDoneWorkingControler(this,"tag",trigger.tagAction,n);};PileTagControl.prototype.failedTagging=function(xmlObj,options){options.trigger.src=options.previousImg;this.inProgress=false;this.piles.ackDoneWorkingControler(this);this.piles.ackDoneWorkingControler(this,"tag",options.trigger.tagAction,"error");};PileTagControl.prototype.doneRemove=function(xmlObj,options){var response=TaggingUtils.trim(xmlObj.responseText);var trigger=options.trigger;var n="error";if(response.indexOf(this.objId+":ok")!=-1){n="success";trigger.src=TaggingOptions.piles.yesImg;this.setStatus();if(this.counter){this.counter.decrement();};this.removeTagFromYTUI();}else{trigger.src=options.previousImg;};this.inProgress=false;this.piles.ackDoneWorkingControler(this,"remove",trigger.tagAction,n);};PileTagControl.prototype.failedRemove=function(xmlObj,options){options.trigger.src=options.previousImg;this.inProgress=false;this.piles.ackDoneWorkingControler(this,"remove",options.trigger.tagAction,"error");};PileTagControl.prototype.addTagToYTUI=function(){var productTags=document[this.objId];if(productTags&&!productTags.containsTag(this.tag)){productTags.addTagAnchor(this.tag);productTags.addTag(this.tag);var editElem=document.getElementById(this.objId+"-edit");if(editElem){editElem.style.display="";};var compactEditElem=document.getElementById(this.objId+"-compact-edit");if(compactEditElem){compactEditElem.style.display="";}}};PileTagControl.prototype.removeTagFromYTUI=function(){var productTags=document[this.objId];if(productTags&&productTags.containsTag(this.tag)){var tags=productTags.tags;if(tags&&tags.length>=1){for(i=0;i<tags.length;i++){if(tags[i]==this.tag){tags.splice(i,1);productTags.tags=new Array();productTags.tagsReplaced(tags);break;}}}};if(productTags.tags.length==0){var editElem=document.getElementById(this.objId+"-edit");if(editElem){editElem.style.display="none";};var compactEditElem=document.getElementById(this.objId+"-compact-edit");if(compactEditElem){compactEditElem.style.display="none";}}};function PilesTagger(options){this.objId=options.objId;this.appY=options.appY;this.id=this.objId+"-piles";this.notifyEle=document.getElementById(this.objId+"-piles-feedback");this.notifyEle.parentNode.style.display="";this.workingControlers=0;};PilesTagger.prototype.init=function(){var productTags=document[this.objId];var container=document.getElementById(this.id);if(productTags&&container){this.triggers=new Array();var tmp=TaggingUtils.findNodes(container,"div","tag");var i=0;for(;i<tmp.length;i++){var status=null;if(productTags.containsTag(tmp[i].getAttribute("tag"))){status="yes";};var c=new PileTagControl(tmp[i],this,status);this.triggers.push(c);c.init();};productTags.onTagAdded=TaggingUtils.bind(this.onTagAdded,this);productTags.onTagsReplaced=TaggingUtils.bind(this.onTagsReplaced,this);}};PilesTagger.prototype.ackStartWorkingControler=function(control){if(!TaggingProductTags.addTagInProgress||(TaggingProductTags.addTagInProgress&&this.workingControlers>0)){TaggingProductTags.addTagInProgress=true;this.workingControlers++;};return this.workingControlers>0;};PilesTagger.prototype.ackDoneWorkingControler=function(control,action,trigger,actionStatus){var text="";if(actionStatus=="success"){text=TaggingOptions.piles[actionStatus+"_"+trigger+"_"+action];}else{text=TaggingOptions.piles.errorMsg;};if(text){text=text.replace("TAG",control.tag);};text=text||"&nbsp;";this.updateNotify(this.notifyEle,text,actionStatus=="error");if(this.workingControlers>0){this.workingControlers--;if(this.workingControlers==0){TaggingProductTags.addTagInProgress=false;}}};PilesTagger.prototype.onTagAdded=function(src,tag){for(i=0;i<this.triggers.length;i++){if(this.triggers[i].tag==tag){this.triggers[i].setStatus("yes");if(this.triggers[i].counter){this.triggers[i].counter.increment();};return;}}};PilesTagger.prototype.onTagsReplaced=function(src,oldTags,newTags){if(!newTags){newTags=new Array();};for(i=0;i<this.triggers.length;i++){var status=this.triggers[i].status;var found=false;for(j=0;j<newTags.length;j++){if(this.triggers[i].tag==newTags[j]){status="yes";found=true;break;}};if(!found&&status=="yes"){status=null;};if(this.triggers[i].status!=status){this.triggers[i].setStatus(status);if(this.triggers[i].container){if(status=="yes"){this.triggers[i].counter.increment();}else{this.triggers[i].counter.decrement();}}}}};PilesTagger.prototype.updateNotify=function(obj,text,error){var proto={};obj.frame=0;obj.steps=50;obj.innerHTML=text;obj.error=error;if(text!="&nbsp;"){proto.updateNotify=function(o){if(o.frame<o.steps){o.frame++;var frame=(o.steps-o.frame);var rgb=(o.error)?{r:parseInt('0xFF'),g:parseInt('0x00'),b:parseInt('0x00')}:{r:parseInt('0xD6'),g:parseInt('0xDD'),b:parseInt('0xEA')};var r=255-parseInt(frame*(255-rgb.r)/o.steps);var g=255-parseInt(frame*(255-rgb.g)/o.steps);var b=255-parseInt(frame*(255-rgb.b)/o.steps);o.style.color=(o.error)?"#DD0000":"#000000";o.style.background='rgb('+r+','+g+','+b+')';setTimeout(function(){proto.updateNotify(o)},10);}};proto.updateNotify(obj);}};



