if(typeof jQuery=="undefined"){alert("Hashgrid: jQuery not loaded. Make sure it's linked to your pages.");}
var hashgrid=function(set){var options={id:'grid',modifierKey:null,showGridKey:'g',holdGridKey:'h',foregroundKey:'f',jumpGridsKey:'j',numberOfGrids:1,classPrefix:'grid-',cookiePrefix:'hashgrid'};var overlayOn=false,sticky=false,overlayZState='B',overlayZBackground=-1,overlayZForeground=9999,classNumber=1;if(typeof set=='object'){var k;for(k in set)options[k]=set[k];}
else if(typeof set=='string'){options.id=set;}
if($('#'+options.id).length>0){$('#'+options.id).remove();}
var overlayEl=$('<div></div>');overlayEl
.attr('id',options.id)
.css({display:'none','pointer-events':'none'});$("body").prepend(overlayEl);var overlay=$('#'+options.id);if(overlay.css('z-index')=='auto')overlay.css('z-index',overlayZBackground);var pageHeight=parseFloat($(document).height());overlay.height(pageHeight);overlay.append('<div id="'+options.id+'-horiz" class="horiz first-line">');var top=overlay.css("top");overlay.css({top:"-999px",display:"block"});var line=$('#'+options.id+'-horiz'),lineHeight=line.outerHeight();overlay.css({display:"none",top:top});if(lineHeight<=0)return true;var i,numGridLines=Math.floor(pageHeight/lineHeight);for(i=numGridLines-1;i>=1;i--){overlay.append('<div class="horiz"></div>');}
overlay.append($('<div class="vert-container"></div>'));var overlayVert=overlay.children('.vert-container');var gridWidth=overlay.width();overlayVert.css({width:gridWidth,position:'absolute',top:0});overlayVert.append('<div class="vert first-line">&nbsp;</div>');for(i=0;i<30;i++){overlayVert.append('<div class="vert">&nbsp;</div>');}
overlayVert.children()
.height(pageHeight)
.css({display:'inline-block'});var overlayCookie=readCookie(options.cookiePrefix+options.id);if(typeof overlayCookie=='string'){var state=overlayCookie.split(',');state[2]=Number(state[2]);if((typeof state[2]=='number')&&!isNaN(state[2])){classNumber=state[2].toFixed(0);overlay.addClass(options.classPrefix+classNumber);}
if(state[1]=='F'){overlayZState='F';overlay.css('z-index',overlayZForeground);}
if(state[0]=='1'){overlayOn=true;sticky=true;showOverlay();}}
else{overlay.addClass(options.classPrefix+classNumber);}
$(document).bind('keydown',keydownHandler);$(document).bind('keyup',keyupHandler);function getModifier(e){if(options.modifierKey==null)return true;var m=true;switch(options.modifierKey){case'ctrl':m=(e.ctrlKey?e.ctrlKey:false);break;case'alt':m=(e.altKey?e.altKey:false);break;case'shift':m=(e.shiftKey?e.shiftKey:false);break;}
return m;}
function getKey(e){var k=false,c=(e.keyCode?e.keyCode:e.which);if(c==13)k='enter';else k=String.fromCharCode(c).toLowerCase();return k;}
function saveState(){createCookie(options.cookiePrefix+options.id,(sticky?'1':'0')+','+overlayZState+','+classNumber,1);}
function showOverlay(){overlay.show();overlayVert.css({width:overlay.width()});overlayVert.children('.vert').each(function(){$(this).css('display','inline-block');if($(this).offset().top>0){$(this).hide();}});}
function keydownHandler(e){var source=e.target.tagName.toLowerCase();if((source=='input')||(source=='textarea')||(source=='select'))return true;var m=getModifier(e);if(!m)return true;var k=getKey(e);if(!k)return true;switch(k){case options.showGridKey:if(!overlayOn){showOverlay();overlayOn=true;}
else if(sticky){overlay.hide();overlayOn=false;sticky=false;saveState();}
break;case options.holdGridKey:if(overlayOn&&!sticky){sticky=true;saveState();}
break;case options.foregroundKey:if(overlayOn){if(overlay.css('z-index')==overlayZForeground){overlay.css('z-index',overlayZBackground);overlayZState='B';}
else{overlay.css('z-index',overlayZForeground);overlayZState='F';}
saveState();}
break;case options.jumpGridsKey:if(overlayOn&&(options.numberOfGrids>1)){overlay.removeClass(options.classPrefix+classNumber);classNumber++;if(classNumber>options.numberOfGrids)classNumber=1;overlay.addClass(options.classPrefix+classNumber);showOverlay();if(/webkit/.test(navigator.userAgent.toLowerCase())){forceRepaint();}
saveState();}
break;}}
function keyupHandler(e){var m=getModifier(e);if(!m)return true;var k=getKey(e);if(!k)return true;if((k==options.showGridKey)&&!sticky){overlay.hide();overlayOn=false;}}
function createCookie(name,value,days){if(days){var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();}
else var expires="";document.cookie=name+"="+value+expires+"; path=/";}
function readCookie(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);}
return null;}
function eraseCookie(name){createCookie(name,"",-1);}
function forceRepaint(){var ss=document.styleSheets[0];try{ss.addRule('.xxxxxx','position: relative');ss.removeRule(ss.rules.length-1);}catch(e){}}}
$(document).ready(function(){var grid=new hashgrid({numberOfGrids:3});});
