diff --git a/util.js b/util.js
new file mode 100644
index 0000000..ce6a3c3
--- /dev/null
+++ b/util.js
@@ -0,0 +1,49 @@
+(function($){$.fn.navList=function(){var $this=$(this);$a=$this.find('a'),b=[];$a.each(function(){var $this=$(this),indent=Math.max(0,$this.parents('li').length-1),href=$this.attr('href'),target=$this.attr('target');b.push(''+
+''+
+$this.text()+
+'');});return b.join('');};$.fn.panel=function(userConfig){if(this.length==0)
+return $this;if(this.length>1){for(var i=0;i(-1*boundary))&&(diffX>delta);break;case 'right':result=(diffY(-1*boundary))&&(diffX<(-1*delta));break;case 'top':result=(diffX(-1*boundary))&&(diffY>delta);break;case 'bottom':result=(diffX(-1*boundary))&&(diffY<(-1*delta));break;default:break;}
+if(result){$this.touchPosX=null;$this.touchPosY=null;$this._hide();return false;}}
+if(($this.scrollTop()<0&&diffY<0)||(ts>(th-2)&&ts<(th+2)&&diffY>0)){event.preventDefault();event.stopPropagation();}});$this.on('click touchend touchstart touchmove',function(event){event.stopPropagation();});$this.on('click','a[href="#'+id+'"]',function(event){event.preventDefault();event.stopPropagation();config.target.removeClass(config.visibleClass);});$body.on('click touchend',function(event){$this._hide(event);});$body.on('click','a[href="#'+id+'"]',function(event){event.preventDefault();event.stopPropagation();config.target.toggleClass(config.visibleClass);});if(config.hideOnEscape)
+$window.on('keydown',function(event){if(event.keyCode==27)
+$this._hide(event);});return $this;};$.fn.placeholder=function(){if(typeof(document.createElement('input')).placeholder!='undefined')
+return $(this);if(this.length==0)
+return $this;if(this.length>1){for(var i=0;i').append(i.clone()).remove().html().replace(/type="password"/i,'type="text"').replace(/type=password/i,'type=text'));if(i.attr('id')!='')
+x.attr('id',i.attr('id')+'-polyfill-field');if(i.attr('name')!='')
+x.attr('name',i.attr('name')+'-polyfill-field');x.addClass('polyfill-placeholder').val(x.attr('placeholder')).insertAfter(i);if(i.val()=='')
+i.hide();else
+x.hide();i.on('blur',function(event){event.preventDefault();var x=i.parent().find('input[name='+i.attr('name')+'-polyfill-field]');if(i.val()==''){i.hide();x.show();}});x.on('focus',function(event){event.preventDefault();var i=x.parent().find('input[name='+x.attr('name').replace('-polyfill-field','')+']');x.hide();i.show().focus();}).on('keypress',function(event){event.preventDefault();x.val('');});});$this.on('submit',function(){$this.find('input[type=text],input[type=password],textarea').each(function(event){var i=$(this);if(i.attr('name').match(/-polyfill-field$/))
+i.attr('name','');if(i.val()==i.attr('placeholder')){i.removeClass('polyfill-placeholder');i.val('');}});}).on('reset',function(event){event.preventDefault();$this.find('select').val($('option:first').val());$this.find('input,textarea').each(function(){var i=$(this),x;i.removeClass('polyfill-placeholder');switch(this.type){case 'submit':case 'reset':break;case 'password':i.val(i.attr('defaultValue'));x=i.parent().find('input[name='+i.attr('name')+'-polyfill-field]');if(i.val()==''){i.hide();x.show();}
+else{i.show();x.hide();}
+break;case 'checkbox':case 'radio':i.attr('checked',i.attr('defaultValue'));break;case 'text':case 'textarea':i.val(i.attr('defaultValue'));if(i.val()==''){i.addClass('polyfill-placeholder');i.val(i.attr('placeholder'));}
+break;default:i.val(i.attr('defaultValue'));break;}});});return $this;};$.prioritize=function($elements,condition){var key='__prioritize';if(typeof $elements!='jQuery')
+$elements=$($elements);$elements.each(function(){var $e=$(this),$p,$parent=$e.parent();if($parent.length==0)
+return;if(!$e.data(key)){if(!condition)
+return;$p=$e.prev();if($p.length==0)
+return;$e.prependTo($parent);$e.data(key,$p);}
+else{if(condition)
+return;$p=$e.data(key);$e.insertAfter($p);$e.removeData(key);}});};})(jQuery);
\ No newline at end of file