var API={debug:false,log:function(msg){if(this.debug&&window.console){if(console.debug){console.debug(msg)}else{console.log(msg)}}},emptyFunction:function(){return function(){}},Ajax:{transport:function(){var transport=false;var transports=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}];for(var i=0;i<transports.length;i++){try{transport=transports[i]();break}catch(e){API.log(e)}}return transport},events:["Uninitialized","Loading","Loaded","Interactive","Complete"],success:function(trans){var status=this.status(trans);return !status||(status>=200&&status<300)||status==304},status:function(trans){try{if(trans.status===1223){return 204}return trans.status||0}catch(e){return 0}},serializeForm:function(formID){var form=document.getElementById(formID);var elements=form.getElementsByTagName("*");var results={};for(var i=0;i<elements.length;i++){var elm=elements[i];var tag=elm.tagName.toLowerCase();if((tag=="input"||tag=="select")&&elm.name&&!elm.disabled){results[elm.name]=elm.value}}return results}},send:function(action,params,callback,options){params=params||{};if(params.method&&params.method.toUpperCase()==="GET"){var method="GET"}else{var method="POST"}delete params.method;params=params instanceof String?params:Format.queryString(params);callback=callback||API.emptyFunction;options=options||{};var url="/"+action+".js"+(params&&method==="GET"?"?"+params:"");var body=method==="POST"?params:null;var transport=API.Ajax.transport();try{transport.open(method,url,true);transport.setRequestHeader("X-Requested-With","XMLHttpRequest");transport.setRequestHeader("Accept","text/javascript, text/html, application/xml, text/xml, */*");transport.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");transport.onreadystatechange=function(){var state=API.Ajax.events[transport.readyState];var success=API.Ajax.success(transport);var complete=state=="Complete";var response=complete?transport.responseText:"";response=complete&&success&&response?eval("("+response+")"):response;if(complete){try{if(!success){API.onError(response)}else{if(response.errors){API.onError(response.errors)}else{callback(response)}}}catch(e){API.log('Ajax error handling "Complete" response');API.log(e)}}try{(options["on"+state]||API.emptyFunction)(response)}catch(e){API.log('Ajax error handling "'+state+'" response');API.log(e)}};transport.send(body)}catch(e){API.log("Ajax error");API.log(e)}},onError:function(error){if(error instanceof Array){error=error.join(", ")}alert("Error: "+error)}};var Cart={refresh:function(callback,options){API.send("cart",{},callback,options)},updateFromForm:function(formID,callback,options){API.send("cart",API.Ajax.serializeForm(formID),callback,options)},addItem:function(optionID,quantity,callback,options){var params={};params["cart[add][id]"]=optionID;params["cart[add][quantity]"]=quantity||1;API.send("cart",params,callback,options)},updateItem:function(id,quantity,callback,options){var params={};params["cart[update]["+id+"]"]=quantity;API.send("cart",params,callback,options)},removeItem:function(id,callback,options){this.updateItem(id,0,callback,options)}};var Product={find:function(permalink,callback,options){var params={method:"get"};API.send("product/"+permalink,params,callback,options)},findAll:function(params,callback,options){params=params||{};params.method="get";API.send("products",params,callback,options)},search:function(term,params,callback,options){params=params||{};params.search=term;this.findAll(params,callback,options)},findImage:function(url,size){if(!size){return url}var ext=url.match(/\.(\w{2,4}$)/)[1];var dir=url.substr(0,url.lastIndexOf("/")+1);switch(size.toLowerCase()){case"large":return dir+"300."+ext;case"medium":return dir+"175."+ext;case"thumb":return dir+"75."+ext;default:return url}}};var Format={currency:{strip_insignificant_zeros:false,significant:false,delimiter:",",precision:0,unit:"\u00a5",format:"%n%u",separator:".",code:"JPY"},version:function(versionString){var a=versionString.split(".");var v=a.shift()+"."+a.join("");return parseFloat(v)},number:function(number,withDelimiter,withPrecision){var negative=number<0;var string=Math.abs(number).toFixed(Format.currency.precision).toString();var parts=string.split(".");number=parts[0];var precision=parts[1];var n=[];while(number.length>0){n.unshift(number.substr(Math.max(0,number.length-3),3));number=number.substr(0,number.length-3)}var formattedNumber=n.join(withDelimiter?Format.currency.delimiter:"");if(withPrecision&&Format.currency.precision>0){formattedNumber+=Format.currency.separator+parts[1]}if(negative){formattedNumber="-"+formattedNumber}if(Format.currency.strip_insignificant_zeros){var regex={separator:new RegExp(Format.currency.separator.replace(/\./,"\\.")+"$"),zeros:/0+$/};formattedNumber=formattedNumber.replace(regex.zeros,"").replace(regex.separator,"")}return formattedNumber},commas:function(number){return Format.number(number,true)},money:function(number,withDelimiter,withSign,withCode){number=Format.number(number,withDelimiter,true);var result=withSign?Format.currency.format.replace("%u",'<span class="currency_sign">'+Format.currency.unit+"</span>").replace("%n",number):number;return withCode?(result+' <span class="currency_code">'+Format.currency.code+"</span>"):result},pluralize:function(count,singular,plural){plural=plural||singular+"s";return count+" "+(count==1?singular:plural)},queryString:function(hash){var results=[];for(var key in hash){results.push(encodeURIComponent(key)+"="+encodeURIComponent(hash[key]))}return results.join("&")}};
