(function(jQuery){jQuery.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~","1":"!","2":"@","3":"#","4":"$","5":"%","6":"^","7":"&","8":"*","9":"(","0":")","-":"_","=":"+",";":": ","'":"\"",",":"<",".":">","/":"?","\\":"|"}};function keyHandler(handleObj){if(typeof handleObj.data!=="string"){return;}
var origHandler=handleObj.handler,keys=handleObj.data.toLowerCase().split(" ");handleObj.handler=function(event){if(this!==event.target&&(/textarea|select/i.test(event.target.nodeName)||event.target.type==="text")){return;}
var special=event.type!=="keypress"&&jQuery.hotkeys.specialKeys[event.which],character=String.fromCharCode(event.which).toLowerCase(),key,modif="",possible={};if(event.altKey&&special!=="alt"){modif+="alt+";}
if(event.ctrlKey&&special!=="ctrl"){modif+="ctrl+";}
if(event.metaKey&&!event.ctrlKey&&special!=="meta"){modif+="meta+";}
if(event.shiftKey&&special!=="shift"){modif+="shift+";}
if(special){possible[modif+special]=true;}else{possible[modif+character]=true;possible[modif+jQuery.hotkeys.shiftNums[character]]=true;if(modif==="shift+"){possible[jQuery.hotkeys.shiftNums[character]]=true;}}
for(var i=0,l=keys.length;i<l;i++){if(possible[keys[i]]){return origHandler.apply(this,arguments);}}};}
jQuery.each(["keydown","keyup","keypress"],function(){jQuery.event.special[this]={add:keyHandler};});})(jQuery);$beerpad={jq:jQuery};$beerpad['saveDraftReview']=function(options){var reviewId=options['reviewId'];var beerId=options['beerId'];var form=$beerpad.jq('#edit_review_'+reviewId);var url=(beerId===''?'/reviews':'/beers/'+beerId+'/reviews')+"/"+reviewId;var params=form.serialize()+"&"+$beerpad.jq.param({'beer_id':beerId});var callback=options['callback']||function(data,textStatus){};$beerpad.jq.post(url,params,callback,"json");};$beerpad['autocompleteBeerName']=function(options){var observedField=$(options['observedField']);var resultsContainer=$(options['resultsContainer']);var linkTextCallback=options['linkTextCallback']||function(beer){var linkText=beer['name'];if(beer['num_reviews']!=0){linkText=linkText+" - "+beer['num_reviews']+" reviews";}
return linkText;};var clickCallback=options['clickCallback']||function(beer){observedField.val(beer['name']);clearContainer();};var clearContainer=function(){return resultsContainer.children('li').remove();};var KEYS={27:'esc',38:'up',40:'down'};var isShortcutKey=function(keycode){return KEYS[keycode]};var showSearchResults=function(){resultsContainer.show();};var hideSearchResults=function(){resultsContainer.hide();};var focusField=function(){observedField.click();};var highlightNextResult=function(){var currentResult=$('.hovering');if(currentResult.size()==0){var currentResult=resultsContainer.children('li:first:visible');currentResult.addClass('hovering');return;}
currentResult.removeClass('hovering');currentResult.next().addClass('hovering');};var highlightPrevResult=function(){var currentResult=$('.hovering');if(currentResult.size()==0){var currentResult=resultsContainer.children('li:last:visible');currentResult.addClass('hovering');return;}
currentResult.removeClass('hovering');currentResult.prev().addClass('hovering');};observedField.bind('keydown','return',function(event){var currentResult=$('.hovering a');currentResult.click();event.preventDefault();});observedField.bind('keydown','esc',function(event){hideSearchResults();return true;});observedField.bind('keydown','up',function(event){highlightPrevResult();event.preventDefault();return true;});observedField.bind('keydown','down',function(event){highlightNextResult();event.preventDefault();return true;});var defaultText=observedField.val();observedField.click(function(){observedField.select();});observedField.keyup(function(event){if(isShortcutKey(event.which)){return;}
var beer_name=observedField.val();if(beer_name==""){clearContainer();return true;}
if(beer_name.length<2||beer_name==defaultText){return true;}
$beerpad.jq.getJSON('/beers/autocomplete',{q:{name:beer_name}},function(data,textStatus){clearContainer();$beerpad.jq(data).each(function(index,val){var beer=val['beer'];var link=$("<a>").attr('href','#beer_'+index).text(linkTextCallback(beer)).click(function(){clickCallback(beer)});resultsContainer.append($("<li>").append(link));showSearchResults();});});});};$beerpad['cookie']={set:function(name,value,daysToExpire){var expire='';if(!daysToExpire)daysToExpire=365;var d=new Date();d.setTime(d.getTime()+(86400000*parseFloat(daysToExpire)));expire='expires='+d.toGMTString();var path="path=/"
var cookieValue=escape(name)+'='+escape(value||'')+'; '+path+'; '+expire+';';return document.cookie=cookieValue;},get:function(name){var cookie=document.cookie.match(new RegExp('(^|;)\\s*'+escape(name)+'=([^;\\s]+)'));return(cookie?unescape(cookie[2]):null);},erase:function(name){var cookie=$beerpad.cookie.get(name)||true;$beerpad.cookie.set(name,'',-1);return cookie;},eraseAll:function(){var cookieString=""+document.cookie;var cookieArray=cookieString.split("; ");for(var i=0;i<cookieArray.length;++i)
{var singleCookie=cookieArray[i].split("=");if(singleCookie.length!=2)
continue;var name=unescape(singleCookie[0]);$beerpad.cookie.erase(name);}},accept:function(){if(typeof navigator.cookieEnabled=='boolean'){return navigator.cookieEnabled;}
$beerpad.cookie.set('_test','1');return($beerpad.cookie.erase('_test')==='1');},exists:function(cookieName){var cookieValue=$beerpad.cookie.get(cookieName);if(!cookieValue)return false;return cookieValue.toString()!="";}};$beerpad['flash']={data:{},transferFromCookies:function(){var data=JSON.parse(unescape($beerpad.cookie.get("flash")));if(!data){data={};}
$beerpad.flash.data=data;$beerpad.cookie.erase("flash");},writeDataTo:function(name,element){var content="";if($beerpad.flash.data[name]){content=$beerpad.flash.data[name].toString().replace(/\+/g,' ');}
$(element).text(unescape(content));}};