// http://plugins.jquery.com/project/input-placeholder
(function($){$.extend({placeholder:{settings:{focusClass:'placeholderFocus',activeClass:'placeholder',overrideSupport:false,preventRefreshIssues:true},debug:false,log:function(msg){if(!$.placeholder.debug)return;msg="[Placeholder] "+msg;$.placeholder.hasFirebug?console.log(msg):$.placeholder.hasConsoleLog?window.console.log(msg):alert(msg)},hasFirebug:"console"in window&&"firebug"in window.console,hasConsoleLog:"console"in window&&"log"in window.console}});$.support.placeholder='placeholder'in document.createElement('input');$.fn.plVal=$.fn.val;$.fn.val=function(value){$.placeholder.log('in val');if(this[0]){$.placeholder.log('have found an element');var el=$(this[0]);if(value!=undefined){$.placeholder.log('in setter');var currentValue=el.plVal();var returnValue=$(this).plVal(value);if(el.hasClass($.placeholder.settings.activeClass)&&currentValue==el.attr('placeholder')){el.removeClass($.placeholder.settings.activeClass)}return returnValue}if(el.hasClass($.placeholder.settings.activeClass)&&el.plVal()==el.attr('placeholder')){$.placeholder.log('returning empty because its a placeholder');return''}else{$.placeholder.log('returning original val');return el.plVal()}}$.placeholder.log('returning undefined');return undefined};$(window).bind('beforeunload.placeholder',function(){var els=$('input.placeholderActive');if(els.length>0)els.val('').attr('autocomplete','off')});$.fn.placeholder=function(opts){opts=$.extend({},$.placeholder.settings,opts);if(!opts.overrideSupport&&$.support.placeholder)return this;return this.each(function(){var $el=$(this);if(!$el.is('[placeholder]'))return;if($el.is(':password'))return;if(opts.preventRefreshIssues)$el.attr('autocomplete','off');$el.bind('focus.placeholder',function(){var $el=$(this);if(this.value==$el.attr('placeholder')&&$el.hasClass(opts.activeClass))$el.val('').removeClass(opts.activeClass).addClass(opts.focusClass)});$el.bind('blur.placeholder',function(){var $el=$(this);$el.removeClass(opts.focusClass);if(this.value=='')$el.val($el.attr('placeholder')).addClass(opts.activeClass)});$el.triggerHandler('blur');$el.parents('form').submit(function(){$el.triggerHandler('focus.placeholder')})})}})(jQuery);

// http://malsup.com/jquery/form/
;(function($){$.fn.ajaxSubmit=function(options){if(!this.length){log('ajaxSubmit: skipping submit process - no element selected');return this}var method,action,url,$form=this;if(typeof options=='function'){options={success:options}}method=this.attr('method');action=this.attr('action');url=(typeof action==='string')?$.trim(action):'';url=url||window.location.href||'';if(url){url=(url.match(/^([^#]+)/)||[])[1]}options=$.extend(true,{url:url,success:$.ajaxSettings.success,type:method||'GET',iframeSrc:/^https/i.test(window.location.href||'')?'javascript:false':'about:blank'},options);var veto={};this.trigger('form-pre-serialize',[this,options,veto]);if(veto.veto){log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');return this}if(options.beforeSerialize&&options.beforeSerialize(this,options)===false){log('ajaxSubmit: submit aborted via beforeSerialize callback');return this}var traditional=options.traditional;if(traditional===undefined){traditional=$.ajaxSettings.traditional}var qx,n,v,a=this.formToArray(options.semantic);if(options.data){options.extraData=options.data;qx=$.param(options.data,traditional)}if(options.beforeSubmit&&options.beforeSubmit(a,this,options)===false){log('ajaxSubmit: submit aborted via beforeSubmit callback');return this}this.trigger('form-submit-validate',[a,this,options,veto]);if(veto.veto){log('ajaxSubmit: submit vetoed via form-submit-validate trigger');return this}var q=$.param(a,traditional);if(qx){q=(q?(q+'&'+qx):qx)}if(options.type.toUpperCase()=='GET'){options.url+=(options.url.indexOf('?')>=0?'&':'?')+q;options.data=null}else{options.data=q}var callbacks=[];if(options.resetForm){callbacks.push(function(){$form.resetForm()})}if(options.clearForm){callbacks.push(function(){$form.clearForm(options.includeHidden)})}if(!options.dataType&&options.target){var oldSuccess=options.success||function(){};callbacks.push(function(data){var fn=options.replaceTarget?'replaceWith':'html';$(options.target)[fn](data).each(oldSuccess,arguments)})}else if(options.success){callbacks.push(options.success)}options.success=function(data,status,xhr){var context=options.context||options;for(var i=0,max=callbacks.length;i<max;i++){callbacks[i].apply(context,[data,status,xhr||$form,$form])}};var fileInputs=$('input:file:enabled[value]',this);var hasFileInputs=fileInputs.length>0;var mp='multipart/form-data';var multipart=($form.attr('enctype')==mp||$form.attr('encoding')==mp);var fileAPI=!!(hasFileInputs&&fileInputs.get(0).files&&window.FormData);log("fileAPI :"+fileAPI);var shouldUseFrame=(hasFileInputs||multipart)&&!fileAPI;if(options.iframe!==false&&(options.iframe||shouldUseFrame)){if(options.closeKeepAlive){$.get(options.closeKeepAlive,function(){fileUploadIframe(a)})}else{fileUploadIframe(a)}}else if((hasFileInputs||multipart)&&fileAPI){options.progress=options.progress||$.noop;fileUploadXhr(a)}else{$.ajax(options)}this.trigger('form-submit-notify',[this,options]);return this;function fileUploadXhr(a){var formdata=new FormData();for(var i=0;i<a.length;i++){if(a[i].type=='file')continue;formdata.append(a[i].name,a[i].value)}$form.find('input:file:enabled').each(function(){var name=$(this).attr('name'),files=this.files;if(name){for(var i=0;i<files.length;i++)formdata.append(name,files[i])}});if(options.extraData){for(var k in options.extraData)formdata.append(k,options.extraData[k])}options.data=null;var s=$.extend(true,{},$.ajaxSettings,options,{contentType:false,processData:false,cache:false,type:'POST'});s.context=s.context||s;s.data=null;var beforeSend=s.beforeSend;s.beforeSend=function(xhr,o){o.data=formdata;if(xhr.upload){xhr.upload.onprogress=function(event){o.progress(event.position,event.total)}}if(beforeSend)beforeSend.call(o,xhr,options)};$.ajax(s)}function fileUploadIframe(a){var form=$form[0],el,i,s,g,id,$io,io,xhr,sub,n,timedOut,timeoutHandle;var useProp=!!$.fn.prop;if(a){if(useProp){for(i=0;i<a.length;i++){el=$(form[a[i].name]);el.prop('disabled',false)}}else{for(i=0;i<a.length;i++){el=$(form[a[i].name]);el.removeAttr('disabled')}}}if($(':input[name=submit],:input[id=submit]',form).length){alert('Error: Form elements must not have name or id of "submit".');return}s=$.extend(true,{},$.ajaxSettings,options);s.context=s.context||s;id='jqFormIO'+(new Date().getTime());if(s.iframeTarget){$io=$(s.iframeTarget);n=$io.attr('name');if(n==null)$io.attr('name',id);else id=n}else{$io=$('<iframe name="'+id+'" src="'+s.iframeSrc+'" />');$io.css({position:'absolute',top:'-1000px',left:'-1000px'})}io=$io[0];xhr={aborted:0,responseText:null,responseXML:null,status:0,statusText:'n/a',getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(status){var e=(status==='timeout'?'timeout':'aborted');log('aborting upload... '+e);this.aborted=1;$io.attr('src',s.iframeSrc);xhr.error=e;s.error&&s.error.call(s.context,xhr,e,status);g&&$.event.trigger("ajaxError",[xhr,s,e]);s.complete&&s.complete.call(s.context,xhr,e)}};g=s.global;if(g&&!$.active++){$.event.trigger("ajaxStart")}if(g){$.event.trigger("ajaxSend",[xhr,s])}if(s.beforeSend&&s.beforeSend.call(s.context,xhr,s)===false){if(s.global){$.active--}return}if(xhr.aborted){return}sub=form.clk;if(sub){n=sub.name;if(n&&!sub.disabled){s.extraData=s.extraData||{};s.extraData[n]=sub.value;if(sub.type=="image"){s.extraData[n+'.x']=form.clk_x;s.extraData[n+'.y']=form.clk_y}}}var CLIENT_TIMEOUT_ABORT=1;var SERVER_ABORT=2;function getDoc(frame){var doc=frame.contentWindow?frame.contentWindow.document:frame.contentDocument?frame.contentDocument:frame.document;return doc}var csrf_token=$('meta[name=csrf-token]').attr('content');var csrf_param=$('meta[name=csrf-param]').attr('content');if(csrf_param&&csrf_token){s.extraData=s.extraData||{};s.extraData[csrf_param]=csrf_token}function doSubmit(){var t=$form.attr('target'),a=$form.attr('action');form.setAttribute('target',id);if(!method){form.setAttribute('method','POST')}if(a!=s.url){form.setAttribute('action',s.url)}if(!s.skipEncodingOverride&&(!method||/post/i.test(method))){$form.attr({encoding:'multipart/form-data',enctype:'multipart/form-data'})}if(s.timeout){timeoutHandle=setTimeout(function(){timedOut=true;cb(CLIENT_TIMEOUT_ABORT)},s.timeout)}function checkState(){try{var state=getDoc(io).readyState;log('state = '+state);if(state.toLowerCase()=='uninitialized')setTimeout(checkState,50)}catch(e){log('Server abort: ',e,' (',e.name,')');cb(SERVER_ABORT);timeoutHandle&&clearTimeout(timeoutHandle);timeoutHandle=undefined}}var extraInputs=[];try{if(s.extraData){for(var n in s.extraData){extraInputs.push($('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n]).appendTo(form)[0])}}if(!s.iframeTarget){$io.appendTo('body');io.attachEvent?io.attachEvent('onload',cb):io.addEventListener('load',cb,false)}setTimeout(checkState,15);form.submit()}finally{form.setAttribute('action',a);if(t){form.setAttribute('target',t)}else{$form.removeAttr('target')}$(extraInputs).remove()}}if(s.forceSync){doSubmit()}else{setTimeout(doSubmit,10)}var data,doc,domCheckCount=50,callbackProcessed;function cb(e){if(xhr.aborted||callbackProcessed){return}try{doc=getDoc(io)}catch(ex){log('cannot access response document: ',ex);e=SERVER_ABORT}if(e===CLIENT_TIMEOUT_ABORT&&xhr){xhr.abort('timeout');return}else if(e==SERVER_ABORT&&xhr){xhr.abort('server abort');return}if(!doc||doc.location.href==s.iframeSrc){if(!timedOut)return}io.detachEvent?io.detachEvent('onload',cb):io.removeEventListener('load',cb,false);var status='success',errMsg;try{if(timedOut){throw'timeout';}var isXml=s.dataType=='xml'||doc.XMLDocument||$.isXMLDoc(doc);log('isXml='+isXml);if(!isXml&&window.opera&&(doc.body==null||doc.body.innerHTML=='')){if(--domCheckCount){log('requeing onLoad callback, DOM not available');setTimeout(cb,250);return}}var docRoot=doc.body?doc.body:doc.documentElement;xhr.responseText=docRoot?docRoot.innerHTML:null;xhr.responseXML=doc.XMLDocument?doc.XMLDocument:doc;if(isXml)s.dataType='xml';xhr.getResponseHeader=function(header){var headers={'content-type':s.dataType};return headers[header]};if(docRoot){xhr.status=Number(docRoot.getAttribute('status'))||xhr.status;xhr.statusText=docRoot.getAttribute('statusText')||xhr.statusText}var dt=(s.dataType||'').toLowerCase();var scr=/(json|script|text)/.test(dt);if(scr||s.textarea){var ta=doc.getElementsByTagName('textarea')[0];if(ta){xhr.responseText=ta.value;xhr.status=Number(ta.getAttribute('status'))||xhr.status;xhr.statusText=ta.getAttribute('statusText')||xhr.statusText}else if(scr){var pre=doc.getElementsByTagName('pre')[0];var b=doc.getElementsByTagName('body')[0];if(pre){xhr.responseText=pre.textContent?pre.textContent:pre.innerText}else if(b){xhr.responseText=b.textContent?b.textContent:b.innerText}}}else if(dt=='xml'&&!xhr.responseXML&&xhr.responseText!=null){xhr.responseXML=toXml(xhr.responseText)}try{data=httpData(xhr,dt,s)}catch(e){status='parsererror';xhr.error=errMsg=(e||status)}}catch(e){log('error caught: ',e);status='error';xhr.error=errMsg=(e||status)}if(xhr.aborted){log('upload aborted');status=null}if(xhr.status){status=(xhr.status>=200&&xhr.status<300||xhr.status===304)?'success':'error'}if(status==='success'){s.success&&s.success.call(s.context,data,'success',xhr);g&&$.event.trigger("ajaxSuccess",[xhr,s])}else if(status){if(errMsg==undefined)errMsg=xhr.statusText;s.error&&s.error.call(s.context,xhr,status,errMsg);g&&$.event.trigger("ajaxError",[xhr,s,errMsg])}g&&$.event.trigger("ajaxComplete",[xhr,s]);if(g&&!--$.active){$.event.trigger("ajaxStop")}s.complete&&s.complete.call(s.context,xhr,status);callbackProcessed=true;if(s.timeout)clearTimeout(timeoutHandle);setTimeout(function(){if(!s.iframeTarget)$io.remove();xhr.responseXML=null},100)}var toXml=$.parseXML||function(s,doc){if(window.ActiveXObject){doc=new ActiveXObject('Microsoft.XMLDOM');doc.async='false';doc.loadXML(s)}else{doc=(new DOMParser()).parseFromString(s,'text/xml')}return(doc&&doc.documentElement&&doc.documentElement.nodeName!='parsererror')?doc:null};var parseJSON=$.parseJSON||function(s){return window['eval']('('+s+')')};var httpData=function(xhr,type,s){var ct=xhr.getResponseHeader('content-type')||'',xml=type==='xml'||!type&&ct.indexOf('xml')>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.nodeName==='parsererror'){$.error&&$.error('parsererror')}if(s&&s.dataFilter){data=s.dataFilter(data,type)}if(typeof data==='string'){if(type==='json'||!type&&ct.indexOf('json')>=0){data=parseJSON(data)}else if(type==="script"||!type&&ct.indexOf("javascript")>=0){$.globalEval(data)}}return data}}};$.fn.ajaxForm=function(options){if(this.length===0){var o={s:this.selector,c:this.context};if(!$.isReady&&o.s){log('DOM not ready, queuing ajaxForm');$(function(){$(o.s,o.c).ajaxForm(options)});return this}log('terminating; zero elements found by selector'+($.isReady?'':' (DOM not ready)'));return this}return this.ajaxFormUnbind().bind('submit.form-plugin',function(e){if(!e.isDefaultPrevented()){e.preventDefault();$(this).ajaxSubmit(options)}}).bind('click.form-plugin',function(e){var target=e.target;var $el=$(target);if(!($el.is(":submit,input:image"))){var t=$el.closest(':submit');if(t.length==0){return}target=t[0]}var form=this;form.clk=target;if(target.type=='image'){if(e.offsetX!=undefined){form.clk_x=e.offsetX;form.clk_y=e.offsetY}else if(typeof $.fn.offset=='function'){var offset=$el.offset();form.clk_x=e.pageX-offset.left;form.clk_y=e.pageY-offset.top}else{form.clk_x=e.pageX-target.offsetLeft;form.clk_y=e.pageY-target.offsetTop}}setTimeout(function(){form.clk=form.clk_x=form.clk_y=null},100)})};$.fn.ajaxFormUnbind=function(){return this.unbind('submit.form-plugin click.form-plugin')};$.fn.formToArray=function(semantic){var a=[];if(this.length===0){return a}var form=this[0];var els=semantic?form.getElementsByTagName('*'):form.elements;if(!els){return a}var i,j,n,v,el,max,jmax;for(i=0,max=els.length;i<max;i++){el=els[i];n=el.name;if(!n){continue}if(semantic&&form.clk&&el.type=="image"){if(!el.disabled&&form.clk==el){a.push({name:n,value:$(el).val(),type:el.type});a.push({name:n+'.x',value:form.clk_x},{name:n+'.y',value:form.clk_y})}continue}v=$.fieldValue(el,true);if(v&&v.constructor==Array){for(j=0,jmax=v.length;j<jmax;j++){a.push({name:n,value:v[j]})}}else if(v!==null&&typeof v!='undefined'){a.push({name:n,value:v,type:el.type})}}if(!semantic&&form.clk){var $input=$(form.clk),input=$input[0];n=input.name;if(n&&!input.disabled&&input.type=='image'){a.push({name:n,value:$input.val()});a.push({name:n+'.x',value:form.clk_x},{name:n+'.y',value:form.clk_y})}}return a};$.fn.formSerialize=function(semantic){return $.param(this.formToArray(semantic))};$.fn.fieldSerialize=function(successful){var a=[];this.each(function(){var n=this.name;if(!n){return}var v=$.fieldValue(this,successful);if(v&&v.constructor==Array){for(var i=0,max=v.length;i<max;i++){a.push({name:n,value:v[i]})}}else if(v!==null&&typeof v!='undefined'){a.push({name:this.name,value:v})}});return $.param(a)};$.fn.fieldValue=function(successful){for(var val=[],i=0,max=this.length;i<max;i++){var el=this[i];var v=$.fieldValue(el,successful);if(v===null||typeof v=='undefined'||(v.constructor==Array&&!v.length)){continue}v.constructor==Array?$.merge(val,v):val.push(v)}return val};$.fieldValue=function(el,successful){var n=el.name,t=el.type,tag=el.tagName.toLowerCase();if(successful===undefined){successful=true}if(successful&&(!n||el.disabled||t=='reset'||t=='button'||(t=='checkbox'||t=='radio')&&!el.checked||(t=='submit'||t=='image')&&el.form&&el.form.clk!=el||tag=='select'&&el.selectedIndex==-1)){return null}if(tag=='select'){var index=el.selectedIndex;if(index<0){return null}var a=[],ops=el.options;var one=(t=='select-one');var max=(one?index+1:ops.length);for(var i=(one?index:0);i<max;i++){var op=ops[i];if(op.selected){var v=op.value;if(!v){v=(op.attributes&&op.attributes['value']&&!(op.attributes['value'].specified))?op.text:op.value}if(one){return v}a.push(v)}}return a}return $(el).val()};$.fn.clearForm=function(includeHidden){return this.each(function(){$('input,select,textarea',this).clearFields(includeHidden)})};$.fn.clearFields=$.fn.clearInputs=function(includeHidden){var re=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var t=this.type,tag=this.tagName.toLowerCase();if(re.test(t)||tag=='textarea'||(includeHidden&&/hidden/.test(t))){this.value=''}else if(t=='checkbox'||t=='radio'){this.checked=false}else if(tag=='select'){this.selectedIndex=-1}})};$.fn.resetForm=function(){return this.each(function(){if(typeof this.reset=='function'||(typeof this.reset=='object'&&!this.reset.nodeType)){this.reset()}})};$.fn.enable=function(b){if(b===undefined){b=true}return this.each(function(){this.disabled=!b})};$.fn.selected=function(select){if(select===undefined){select=true}return this.each(function(){var t=this.type;if(t=='checkbox'||t=='radio'){this.checked=select}else if(this.tagName.toLowerCase()=='option'){var $sel=$(this).parent('select');if(select&&$sel[0]&&$sel[0].type=='select-one'){$sel.find('option').selected(false)}this.selected=select}})};$.fn.ajaxSubmit.debug=false;function log(){if(!$.fn.ajaxSubmit.debug)return;var msg='[jquery.form] '+Array.prototype.join.call(arguments,'');if(window.console&&window.console.log){window.console.log(msg)}else if(window.opera&&window.opera.postError){window.opera.postError(msg)}}})(jQuery);

// http://onehackoranother.com/projects/jquery/tipsy/
(function($){function Tipsy(element,options){this.$element=$(element);this.options=options;this.enabled=true;this.fixTitle()}Tipsy.prototype={show:function(){var title=this.getTitle();if(title&&this.enabled){var $tip=this.tip();$tip.find('.tipsy-inner')[this.options.html?'html':'text'](title);$tip[0].className='tipsy';$tip.remove().css({top:0,left:0,visibility:'hidden',display:'block'}).appendTo(document.body);var pos=$.extend({},this.$element.offset(),{width:this.$element[0].offsetWidth,height:this.$element[0].offsetHeight});var actualWidth=$tip[0].offsetWidth,actualHeight=$tip[0].offsetHeight;var gravity=(typeof this.options.gravity=='function')?this.options.gravity.call(this.$element[0]):this.options.gravity;var tp;switch(gravity.charAt(0)){case'n':tp={top:pos.top+pos.height+this.options.offset,left:pos.left+pos.width/2-actualWidth/2};break;case's':tp={top:pos.top-actualHeight-this.options.offset,left:pos.left+pos.width/2-actualWidth/2};break;case'e':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth-this.options.offset};break;case'w':tp={top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width+this.options.offset};break}if(gravity.length==2){if(gravity.charAt(1)=='w'){tp.left=pos.left+pos.width/2-15}else{tp.left=pos.left+pos.width/2-actualWidth+15}}$tip.css(tp).addClass('tipsy-'+gravity);if(this.options.fade){$tip.stop().css({opacity:0,display:'block',visibility:'visible'}).animate({opacity:this.options.opacity})}else{$tip.css({visibility:'visible',opacity:this.options.opacity})}}},hide:function(){if(this.options.fade){this.tip().stop().fadeOut(function(){$(this).remove()})}else{this.tip().remove()}},fixTitle:function(){var $e=this.$element;if($e.attr('title')||typeof($e.attr('original-title'))!='string'){$e.attr('original-title',$e.attr('title')||'').removeAttr('title')}},getTitle:function(){var title,$e=this.$element,o=this.options;this.fixTitle();var title,o=this.options;if(typeof o.title=='string'){title=$e.attr(o.title=='title'?'original-title':o.title)}else if(typeof o.title=='function'){title=o.title.call($e[0])}title=(''+title).replace(/(^\s*|\s*$)/,"");return title||o.fallback},tip:function(){if(!this.$tip){this.$tip=$('<div class="tipsy"></div>').html('<div class="tipsy-arrow"></div><div class="tipsy-inner"></div>')}return this.$tip},validate:function(){if(!this.$element[0].parentNode){this.hide();this.$element=null;this.options=null}},enable:function(){this.enabled=true},disable:function(){this.enabled=false},toggleEnabled:function(){this.enabled=!this.enabled}};$.fn.tipsy=function(options){if(options===true){return this.data('tipsy')}else if(typeof options=='string'){var tipsy=this.data('tipsy');if(tipsy)tipsy[options]();return this}options=$.extend({},$.fn.tipsy.defaults,options);function get(ele){var tipsy=$.data(ele,'tipsy');if(!tipsy){tipsy=new Tipsy(ele,$.fn.tipsy.elementOptions(ele,options));$.data(ele,'tipsy',tipsy)}return tipsy}function enter(){var tipsy=get(this);tipsy.hoverState='in';if(options.delayIn==0){tipsy.show()}else{tipsy.fixTitle();setTimeout(function(){if(tipsy.hoverState=='in')tipsy.show()},options.delayIn)}};function leave(){var tipsy=get(this);tipsy.hoverState='out';if(options.delayOut==0){tipsy.hide()}else{setTimeout(function(){if(tipsy.hoverState=='out')tipsy.hide()},options.delayOut)}};if(!options.live)this.each(function(){get(this)});if(options.trigger!='manual'){var binder=options.live?'live':'bind',eventIn=options.trigger=='hover'?'mouseenter':'focus',eventOut=options.trigger=='hover'?'mouseleave':'blur';this[binder](eventIn,enter)[binder](eventOut,leave)}return this};$.fn.tipsy.defaults={delayIn:0,delayOut:0,fade:false,fallback:'',gravity:'n',html:false,live:false,offset:0,opacity:0.8,title:'title',trigger:'hover'};$.fn.tipsy.elementOptions=function(ele,options){return $.metadata?$.extend({},options,$(ele).metadata()):options};$.fn.tipsy.autoNS=function(){return $(this).offset().top>($(document).scrollTop()+$(window).height()/2)?'s':'n'};$.fn.tipsy.autoWE=function(){return $(this).offset().left>($(document).scrollLeft()+$(window).width()/2)?'e':'w'}})(jQuery);

// http://isotope.metafizzy.co (modified)
(function(window,$,undefined){var getStyleProperty=(function(){var prefixes=['Moz','Webkit','Khtml','O','Ms'];var _cache={};function getStyleProperty(propName,element){element=element||document.documentElement;var style=element.style,prefixed,uPropName,i,l;if(arguments.length===1&&typeof _cache[propName]==='string'){return _cache[propName]}if(typeof style[propName]==='string'){return(_cache[propName]=propName)}uPropName=propName.charAt(0).toUpperCase()+propName.slice(1);for(i=0,l=prefixes.length;i<l;i++){prefixed=prefixes[i]+uPropName;if(typeof style[prefixed]==='string'){return(_cache[propName]=prefixed)}}}return getStyleProperty}());var docElement=document.documentElement,vendorCSSPrefixes=' -o- -moz- -ms- -webkit- -khtml- '.split(' '),tests=[{name:'csstransforms',getResult:function(){return!!getStyleProperty('transform')}},{name:'csstransforms3d',getResult:function(){var test=!!getStyleProperty('perspective');if(test){var st=document.createElement('style'),div=document.createElement('div'),mq='@media ('+vendorCSSPrefixes.join('transform-3d),(')+'modernizr)';st.textContent=mq+'{#modernizr{height:3px}}';(document.head||document.getElementsByTagName('head')[0]).appendChild(st);div.id='modernizr';docElement.appendChild(div);test=div.offsetHeight===3;st.parentNode.removeChild(st);div.parentNode.removeChild(div)}return!!test}},{name:'csstransitions',getResult:function(){return!!getStyleProperty('transitionProperty')}}],i,len=tests.length;if(window.Modernizr){for(i=0;i<len;i++){var test=tests[i];if(!Modernizr.hasOwnProperty(test.name)){Modernizr.addTest(test.name,test.getResult)}}}else{window.Modernizr=(function(){var miniModernizr={_version:'1.6ish: miniModernizr for Isotope'},classes=[],test,result,className;for(i=0;i<len;i++){test=tests[i];result=test.getResult();miniModernizr[test.name]=result;className=(result?'':'no-')+test.name;classes.push(className)}docElement.className+=' '+classes.join(' ');return miniModernizr})()}var isoTransform={transformProp:getStyleProperty('transform'),fnUtils:Modernizr.csstransforms3d?{translate:function(position){return'translate3d('+position[0]+'px, '+position[1]+'px, 0) '},scale:function(scale){return'scale3d('+scale+', '+scale+', 1) '}}:{translate:function(position){return'translate('+position[0]+'px, '+position[1]+'px) '},scale:function(scale){return'scale('+scale+') '}},set:function(elem,name,value){var $elem=$(elem),data=$elem.data('isoTransform')||{},newData={},fnName,transformObj={};newData[name]=value;$.extend(data,newData);for(fnName in data){var transformValue=data[fnName],getFn=isoTransform.fnUtils[fnName];transformObj[fnName]=getFn(transformValue)}var translateFn=transformObj.translate||'',scaleFn=transformObj.scale||'',valueFns=translateFn+scaleFn;$elem.data('isoTransform',data);elem.style[isoTransform.transformProp]=valueFns}};$.cssNumber.scale=true;$.cssHooks.scale={set:function(elem,value){if(typeof value==='string'){value=parseFloat(value)}isoTransform.set(elem,'scale',value)},get:function(elem,computed){var transform=$.data(elem,'transform');return transform&&transform.scale?transform.scale:1}};$.fx.step.scale=function(fx){$.cssHooks.scale.set(fx.elem,fx.now+fx.unit)};$.cssNumber.translate=true;$.cssHooks.translate={set:function(elem,value){isoTransform.set(elem,'translate',value)},get:function(elem,computed){var transform=$.data(elem,'transform');return transform&&transform.translate?transform.translate:[0,0]}};var $event=$.event,resizeTimeout;$event.special.smartresize={setup:function(){$(this).bind("resize",$event.special.smartresize.handler)},teardown:function(){$(this).unbind("resize",$event.special.smartresize.handler)},handler:function(event,execAsap){var context=this,args=arguments;event.type="smartresize";if(resizeTimeout){clearTimeout(resizeTimeout)}resizeTimeout=setTimeout(function(){jQuery.event.handle.apply(context,args)},execAsap==="execAsap"?0:100)}};$.fn.smartresize=function(fn){return fn?this.bind("smartresize",fn):this.trigger("smartresize",["execAsap"])};$.Isotope=function(options,element){this.element=$(element);this._create(options);this._init()};$.Isotope.prototype={options:{removeFarMargin:false,resizable:true,layoutMode:'masonry',containerClass:'isotope',itemClass:'isotope-item',hiddenClass:'isotope-hidden',hiddenStyle:Modernizr.csstransforms&&!$.browser.opera?{opacity:0,scale:0.001}:{opacity:0},visibleStyle:Modernizr.csstransforms&&!$.browser.opera?{opacity:1,scale:1}:{opacity:1},animationEngine:$.browser.opera?'jquery':'best-available',animationOptions:{queue:false,duration:800},sortBy:'original-order',sortAscending:true,resizesContainer:true},_filterFind:function($elems,selector){return selector?$elems.filter(selector).add($elems.find(selector)):$elems},_create:function(options){this.options=$.extend(true,{},this.options,options);this.isNew={};this.styleQueue=[];this.elemCount=0;this.$allAtoms=this._filterFind(this.element.children(),this.options.itemSelector);this.element.css({overflow:'hidden',position:'relative'});var jQueryAnimation=false;switch(this.options.animationEngine.toLowerCase().replace(/[ _\-]/g,'')){case'none':this.applyStyleFnName='css';break;case'jquery':this.applyStyleFnName='animate';jQueryAnimation=true;break;default:this.applyStyleFnName=Modernizr.csstransitions?'css':'animate'}this.usingTransforms=Modernizr.csstransforms&&Modernizr.csstransitions&&!jQueryAnimation;this.getPositionStyles=this.usingTransforms?this._translate:this._positionAbs;var originalOrderSorter={'original-order':function($elem,instance){return instance.elemCount}};this.options.getSortData=$.extend(this.options.getSortData,originalOrderSorter);this._setupAtoms(this.$allAtoms);var $cursor=$(document.createElement('div'));this.element.prepend($cursor);this.posTop=Math.round($cursor.position().top);this.posLeft=Math.round($cursor.position().left);$cursor.remove();var instance=this;setTimeout(function(){instance.element.addClass(instance.options.containerClass)},0);if(this.options.resizable){$(window).bind('smartresize.isotope',function(){instance.element.isotope('resize')})}},_isNewProp:function(prop){return this.prevOpts?(this.options[prop]!==this.prevOpts[prop]):true},_init:function(callback){var instance=this;$.each(['filter','sortBy','sortAscending'],function(i,propName){instance.isNew[propName]=instance._isNewProp(propName)});if(this.isNew.filter){this.$filteredAtoms=this._filter(this.$allAtoms)}else{this.$filteredAtoms=this.$allAtoms}if(this.isNew.filter||this.isNew.sortBy||this.isNew.sortAscending){this._sort()}this.reLayout(callback)},option:function(key,value){if($.isPlainObject(key)){this.options=$.extend(true,this.options,key)}else if(key&&typeof value==="undefined"){return this.options[key]}else{this.options[key]=value}return this},_setupAtoms:function($atoms){var atomStyle={position:'absolute'};if(this.usingTransforms){atomStyle.left=0;atomStyle.top=0}$atoms.css(atomStyle).addClass(this.options.itemClass);this.updateSortData($atoms,true)},_filter:function($atoms){var $filteredAtoms,filter=this.options.filter===''?'*':this.options.filter;if(!filter){$filteredAtoms=$atoms}else{var hiddenClass=this.options.hiddenClass,hiddenSelector='.'+hiddenClass,$visibleAtoms=$atoms.not(hiddenSelector),$hiddenAtoms=$atoms.filter(hiddenSelector),$atomsToShow=$hiddenAtoms;$filteredAtoms=$atoms.filter(filter);if(filter!=='*'){$atomsToShow=$hiddenAtoms.filter(filter);var $atomsToHide=$visibleAtoms.not(filter).toggleClass(hiddenClass);$atomsToHide.addClass(hiddenClass);this.styleQueue.push({$el:$atomsToHide,style:this.options.hiddenStyle})}this.styleQueue.push({$el:$atomsToShow,style:this.options.visibleStyle});$atomsToShow.removeClass(hiddenClass)}return $filteredAtoms},updateSortData:function($atoms,isIncrementingElemCount){var instance=this,getSortData=this.options.getSortData,$this,sortData;$atoms.each(function(){$this=$(this);sortData={};for(var key in getSortData){sortData[key]=getSortData[key]($this,instance)}$this.data('isotope-sort-data',sortData);if(isIncrementingElemCount){instance.elemCount++}})},_sort:function(){var instance=this,getSorter=function(elem){return $(elem).data('isotope-sort-data')[instance.options.sortBy]},sortDir=this.options.sortAscending?1:-1,sortFn=function(alpha,beta){var a=getSorter(alpha),b=getSorter(beta);return((a>b)?1:(a<b)?-1:0)*sortDir};this.$filteredAtoms.sort(sortFn);return this},_translate:function(x,y){return{translate:[x,y]}},_positionAbs:function(x,y){return{left:x,top:y}},_pushPosition:function($elem,x,y){var position=this.getPositionStyles(x,y);this.styleQueue.push({$el:$elem,style:position})},layout:function($elems,callback){var layoutMode=this.options.layoutMode;this['_'+layoutMode+'Layout']($elems);if(this.options.resizesContainer){var containerStyle=this['_'+layoutMode+'GetContainerSize']();this.styleQueue.push({$el:this.element,style:containerStyle})}var styleFn=(this.applyStyleFnName==='animate'&&!this.isLaidOut)?'css':this.applyStyleFnName,animOpts=this.options.animationOptions;$.each(this.styleQueue,function(i,obj){obj.$el[styleFn](obj.style,animOpts)});this.styleQueue=[];if(callback){callback.call($elems)}this.isLaidOut=true;return this},resize:function(){return this['_'+this.options.layoutMode+'Resize']()},reLayout:function(callback){return this['_'+this.options.layoutMode+'Reset']().layout(this.$filteredAtoms,callback)},addItems:function($content,callback){var $newAtoms=this._filterFind($content,this.options.itemSelector);this._setupAtoms($newAtoms);this.$allAtoms=this.$allAtoms.add($newAtoms);if(callback){callback($newAtoms)}},insert:function($content,callback){this.element.append($content);var instance=this;this.addItems($content,function($newAtoms){var $filteredAtoms=instance._filter($newAtoms);instance.$filteredAtoms=instance.$filteredAtoms.add($filteredAtoms)});this._sort().reLayout(callback)},appended:function($content,callback){var instance=this;this.addItems($content,function($newAtoms){instance.$filteredAtoms=instance.$filteredAtoms.add($newAtoms);instance.layout($newAtoms,callback)})},remove:function($content){this.$allAtoms=this.$allAtoms.not($content);this.$filteredAtoms=this.$filteredAtoms.not($content);$content.remove()},_shuffleArray:function(array){var tmp,current,i=array.length;if(i){while(--i){current=~~(Math.random()*(i+1));tmp=array[current];array[current]=array[i];array[i]=tmp}}return array},shuffle:function(callback){this.options.sortBy='shuffle';this.$allAtoms=this._shuffleArray(this.$allAtoms);this.$filteredAtoms=this._filter(this.$allAtoms);return this.reLayout(callback)},destroy:function(){var atomUnstyle=$.extend(this.options.visibleStyle,{position:'relative',top:'auto',left:'auto'});if(this.usingTransforms){atomUnstyle[isoTransform.transformProp]='none'}this.$allAtoms.css(atomUnstyle).removeClass(this.options.hiddenClass+' '+this.options.itemClass);this.element.css({width:'auto',height:'auto'}).unbind('.isotope').removeClass(this.options.containerClass).removeData('isotope');$(window).unbind('.isotope')},_getSegments:function(namespace,isRows){var measure=isRows?'rowHeight':'columnWidth',size=isRows?'height':'width',UCSize=isRows?'Height':'Width',segments=isRows?'rows':'cols',segmentsValue;this[namespace][measure]=(this.options[namespace]&&this.options[namespace][measure])||this.$allAtoms['outer'+UCSize](true);if(!this[namespace][measure]){$.error(measure+' calculated to be zero. Stopping Isotope plugin before divide by zero. Check that the width of first child inside the isotope container is not zero.');return this}this[size]=this.element[size]();if(this.options.removeFarMargin==true){segmentsValue=Math.floor((this[size]+parseInt(this.$allAtoms.css('margin-right')))/this[namespace][measure])}else{segmentsValue=Math.floor(this[size]/this[namespace][measure])}this[namespace][segments]=Math.max(segmentsValue,1);return this},_masonryPlaceBrick:function($brick,setCount,setY){var minimumY=Math.min.apply(Math,setY),setHeight=minimumY+$brick.outerHeight(true),i=setY.length,shortCol=i,setSpan=this.masonry.cols+1-i,x,y;while(i--){if(setY[i]===minimumY){shortCol=i}}x=this.masonry.columnWidth*shortCol+this.posLeft;y=minimumY;if(this.options.removeFarMargin==true&&setY.length!=(shortCol+1)){$brick.css('margin-right','0px;');}this._pushPosition($brick,x,y);for(i=0;i<setSpan;i++){this.masonry.colYs[shortCol+i]=setHeight}},_masonryLayout:function($elems){var instance=this;$elems.each(function(){var $this=$(this),colSpan=Math.ceil($this.outerWidth(true)/instance.masonry.columnWidth);colSpan=Math.min(colSpan,instance.masonry.cols);if(colSpan===1){instance._masonryPlaceBrick($this,instance.masonry.cols,instance.masonry.colYs)}else{var groupCount=instance.masonry.cols+1-colSpan,groupY=[],groupColY,i;for(i=0;i<groupCount;i++){groupColY=instance.masonry.colYs.slice(i,i+colSpan);groupY[i]=Math.max.apply(Math,groupColY)}instance._masonryPlaceBrick($this,groupCount,groupY)}});return this},_masonryReset:function(){this.masonry={};this._getSegments('masonry');var i=this.masonry.cols;this.masonry.colYs=[];while(i--){this.masonry.colYs.push(this.posTop)}return this},_masonryResize:function(){var prevColCount=this.masonry.cols;this._getSegments('masonry');if(this.masonry.cols!==prevColCount){this.reLayout()}return this},_masonryGetContainerSize:function(){var containerHeight=Math.max.apply(Math,this.masonry.colYs)-this.posTop;return{height:containerHeight}},_fitRowsLayout:function($elems){this.width=this.element.width();var instance=this;$elems.each(function(){var $this=$(this),atomW=$this.outerWidth(true),atomH=$this.outerHeight(true),x,y;if(instance.fitRows.x!==0&&atomW+instance.fitRows.x>instance.width){instance.fitRows.x=0;instance.fitRows.y=instance.fitRows.height}x=instance.fitRows.x+instance.posLeft;y=instance.fitRows.y+instance.posTop;instance._pushPosition($this,x,y);instance.fitRows.height=Math.max(instance.fitRows.y+atomH,instance.fitRows.height);instance.fitRows.x+=atomW});return this},_fitRowsReset:function(){this.fitRows={x:0,y:0,height:0};return this},_fitRowsGetContainerSize:function(){return{height:this.fitRows.height}},_fitRowsResize:function(){return this.reLayout()},_cellsByRowReset:function(){this.cellsByRow={};this._getSegments('cellsByRow');this.cellsByRow.rowHeight=this.options.cellsByRow.rowHeight||this.$allAtoms.outerHeight(true);return this},_cellsByRowLayout:function($elems){var instance=this,cols=this.cellsByRow.cols;this.cellsByRow.atomsLen=$elems.length;$elems.each(function(i){var $this=$(this),x=(i%cols+0.5)*instance.cellsByRow.columnWidth-$this.outerWidth(true)/2+instance.posLeft,y=(~~(i/cols)+0.5)*instance.cellsByRow.rowHeight-$this.outerHeight(true)/2+instance.posTop;instance._pushPosition($this,x,y)});return this},_cellsByRowGetContainerSize:function(){return{height:Math.ceil(this.cellsByRow.atomsLen/this.cellsByRow.cols)*this.cellsByRow.rowHeight+this.posTop}},_cellsByRowResize:function(){var prevCols=this.cellsByRow.cols;this._getSegments('cellsByRow');if(this.cellsByRow.cols!==prevCols){this.reLayout()}return this},_straightDownReset:function(){this.straightDown={y:0};return this},_straightDownLayout:function($elems){var instance=this;$elems.each(function(i){var $this=$(this),y=instance.straightDown.y+instance.posTop;instance._pushPosition($this,instance.posLeft,y);instance.straightDown.y+=$this.outerHeight(true)});return this},_straightDownGetContainerSize:function(){return{height:this.straightDown.y+this.posTop}},_straightDownResize:function(){this.reLayout();return this},_masonryHorizontalPlaceBrick:function($brick,setCount,setX){var minimumX=Math.min.apply(Math,setX),setWidth=minimumX+$brick.outerWidth(true),i=setX.length,smallRow=i,setSpan=this.masonryHorizontal.rows+1-i,x,y;while(i--){if(setX[i]===minimumX){smallRow=i}}x=minimumX;y=this.masonryHorizontal.rowHeight*smallRow+this.posTop;this._pushPosition($brick,x,y);for(i=0;i<setSpan;i++){this.masonryHorizontal.rowXs[smallRow+i]=setWidth}},_masonryHorizontalLayout:function($elems){var instance=this;$elems.each(function(){var $this=$(this),rowSpan=Math.ceil($this.outerHeight(true)/instance.masonryHorizontal.rowHeight);rowSpan=Math.min(rowSpan,instance.masonryHorizontal.rows);if(rowSpan===1){instance._masonryHorizontalPlaceBrick($this,instance.masonryHorizontal.rows,instance.masonryHorizontal.rowXs)}else{var groupCount=instance.masonryHorizontal.rows+1-rowSpan,groupX=[],groupRowX,i;for(i=0;i<groupCount;i++){groupRowX=instance.masonryHorizontal.rowXs.slice(i,i+rowSpan);groupX[i]=Math.max.apply(Math,groupRowX)}instance._masonryHorizontalPlaceBrick($this,groupCount,groupX)}});return this},_masonryHorizontalReset:function(){this.masonryHorizontal={};this._getSegments('masonryHorizontal',true);var i=this.masonryHorizontal.rows;this.masonryHorizontal.rowXs=[];while(i--){this.masonryHorizontal.rowXs.push(this.posLeft)}return this},_masonryHorizontalResize:function(){var prevRows=this.masonryHorizontal.rows;this._getSegments('masonryHorizontal',true);if(this.masonryHorizontal.rows!==prevRows){this.reLayout()}return this},_masonryHorizontalGetContainerSize:function(){var containerWidth=Math.max.apply(Math,this.masonryHorizontal.rowXs)-this.posLeft;return{width:containerWidth}},_fitColumnsReset:function(){this.fitColumns={x:0,y:0,width:0};return this},_fitColumnsLayout:function($elems){var instance=this;this.height=this.element.height();$elems.each(function(){var $this=$(this),atomW=$this.outerWidth(true),atomH=$this.outerHeight(true),x,y;if(instance.fitColumns.y!==0&&atomH+instance.fitColumns.y>instance.height){instance.fitColumns.x=instance.fitColumns.width;instance.fitColumns.y=0}x=instance.fitColumns.x+instance.posLeft;y=instance.fitColumns.y+instance.posTop;instance._pushPosition($this,x,y);instance.fitColumns.width=Math.max(instance.fitColumns.x+atomW,instance.fitColumns.width);instance.fitColumns.y+=atomH});return this},_fitColumnsGetContainerSize:function(){return{width:this.fitColumns.width}},_fitColumnsResize:function(){return this.reLayout()},_cellsByColumnReset:function(){this.cellsByColumn={};this._getSegments('cellsByColumn',true);this.cellsByColumn.columnWidth=this.options.cellsByColumn.columnWidth||this.$allAtoms.outerHeight(true);return this},_cellsByColumnLayout:function($elems){var instance=this,rows=this.cellsByColumn.rows;this.cellsByColumn.atomsLen=$elems.length;$elems.each(function(i){var $this=$(this),x=(~~(i/rows)+0.5)*instance.cellsByColumn.columnWidth-$this.outerWidth(true)/2+instance.posLeft,y=(i%rows+0.5)*instance.cellsByColumn.rowHeight-$this.outerHeight(true)/2+instance.posTop;instance._pushPosition($this,x,y)});return this},_cellsByColumnGetContainerSize:function(){return{width:Math.ceil(this.cellsByColumn.atomsLen/this.cellsByColumn.rows)*this.cellsByColumn.columnWidth+this.posLeft}},_cellsByColumnResize:function(){var prevRows=this.cellsByColumn.rows;this._getSegments('cellsByColumn',true);if(this.cellsByColumn.rows!==prevRows){this.reLayout()}return this}};$.fn.imagesLoaded=function(callback){var elems=this.find('img'),len=elems.length,_this=this;if(!elems.length){callback.call(this)}elems.bind('load',function(){if(--len<=0){callback.call(_this)}}).each(function(){if(this.complete||this.complete===undefined){var src=this.src;this.src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";this.src=src}});return this};$.widget=$.widget||{};$.widget.bridge=$.widget.bridge||function(name,object){$.fn[name]=function(options){var isMethodCall=typeof options==="string",args=Array.prototype.slice.call(arguments,1),returnValue=this;options=!isMethodCall&&args.length?$.extend.apply(null,[true,options].concat(args)):options;if(isMethodCall&&options.charAt(0)==="_"){return returnValue}if(isMethodCall){this.each(function(){var instance=$.data(this,name);if(!instance){return $.error("cannot call methods on "+name+" prior to initialization; "+"attempted to call method '"+options+"'")}if(!$.isFunction(instance[options])){return $.error("no such method '"+options+"' for "+name+" widget instance")}var methodValue=instance[options].apply(instance,args);if(methodValue!==instance&&methodValue!==undefined){returnValue=methodValue;return false}})}else{this.each(function(){var instance=$.data(this,name);if(instance){instance.option(options||{})._init()}else{$.data(this,name,new object(options,this))}})}return returnValue}};$.widget.bridge('isotope',$.Isotope)})(window,jQuery);

/**
 * Copyright (c) 2005 - 2010, James Auldridge
 * All rights reserved.
 *
 * Licensed under the BSD, MIT, and GPL (your choice!) Licenses:
 *  http://code.google.com/p/cookies/wiki/License
 *
 */
var jaaulde=window.jaaulde||{};jaaulde.utils=jaaulde.utils||{};jaaulde.utils.cookies=(function(){var resolveOptions,assembleOptionsString,parseCookies,constructor,defaultOptions={expiresAt:null,path:'/',domain:null,secure:false};resolveOptions=function(options){var returnValue,expireDate;if(typeof options!=='object'||options===null){returnValue=defaultOptions;}else
{returnValue={expiresAt:defaultOptions.expiresAt,path:defaultOptions.path,domain:defaultOptions.domain,secure:defaultOptions.secure};if(typeof options.expiresAt==='object'&&options.expiresAt instanceof Date){returnValue.expiresAt=options.expiresAt;}else if(typeof options.hoursToLive==='number'&&options.hoursToLive!==0){expireDate=new Date();expireDate.setTime(expireDate.getTime()+(options.hoursToLive*60*60*1000));returnValue.expiresAt=expireDate;}if(typeof options.path==='string'&&options.path!==''){returnValue.path=options.path;}if(typeof options.domain==='string'&&options.domain!==''){returnValue.domain=options.domain;}if(options.secure===true){returnValue.secure=options.secure;}}return returnValue;};assembleOptionsString=function(options){options=resolveOptions(options);return((typeof options.expiresAt==='object'&&options.expiresAt instanceof Date?'; expires='+options.expiresAt.toGMTString():'')+'; path='+options.path+(typeof options.domain==='string'?'; domain='+options.domain:'')+(options.secure===true?'; secure':''));};parseCookies=function(){var cookies={},i,pair,name,value,separated=document.cookie.split(';'),unparsedValue;for(i=0;i<separated.length;i=i+1){pair=separated[i].split('=');name=pair[0].replace(/^\s*/,'').replace(/\s*$/,'');try
{value=decodeURIComponent(pair[1]);}catch(e1){value=pair[1];}if(typeof JSON==='object'&&JSON!==null&&typeof JSON.parse==='function'){try
{unparsedValue=value;value=JSON.parse(value);}catch(e2){value=unparsedValue;}}cookies[name]=value;}return cookies;};constructor=function(){};constructor.prototype.get=function(cookieName){var returnValue,item,cookies=parseCookies();if(typeof cookieName==='string'){returnValue=(typeof cookies[cookieName]!=='undefined')?cookies[cookieName]:null;}else if(typeof cookieName==='object'&&cookieName!==null){returnValue={};for(item in cookieName){if(typeof cookies[cookieName[item]]!=='undefined'){returnValue[cookieName[item]]=cookies[cookieName[item]];}else
{returnValue[cookieName[item]]=null;}}}else
{returnValue=cookies;}return returnValue;};constructor.prototype.filter=function(cookieNameRegExp){var cookieName,returnValue={},cookies=parseCookies();if(typeof cookieNameRegExp==='string'){cookieNameRegExp=new RegExp(cookieNameRegExp);}for(cookieName in cookies){if(cookieName.match(cookieNameRegExp)){returnValue[cookieName]=cookies[cookieName];}}return returnValue;};constructor.prototype.set=function(cookieName,value,options){if(typeof options!=='object'||options===null){options={};}if(typeof value==='undefined'||value===null){value='';options.hoursToLive=-8760;}else if(typeof value!=='string'){if(typeof JSON==='object'&&JSON!==null&&typeof JSON.stringify==='function'){value=JSON.stringify(value);}else
{throw new Error('cookies.set() received non-string value and could not serialize.');}}var optionsString=assembleOptionsString(options);document.cookie=cookieName+'='+encodeURIComponent(value)+optionsString;};constructor.prototype.del=function(cookieName,options){var allCookies={},name;if(typeof options!=='object'||options===null){options={};}if(typeof cookieName==='boolean'&&cookieName===true){allCookies=this.get();}else if(typeof cookieName==='string'){allCookies[cookieName]=true;}for(name in allCookies){if(typeof name==='string'&&name!==''){this.set(name,null,options);}}};constructor.prototype.test=function(){var returnValue=false,testName='cT',testValue='data';this.set(testName,testValue);if(this.get(testName)===testValue){this.del(testName);returnValue=true;}return returnValue;};constructor.prototype.setOptions=function(options){if(typeof options!=='object'){options=null;}defaultOptions=resolveOptions(options);};return new constructor();})();(function(){if(window.jQuery){(function($){$.cookies=jaaulde.utils.cookies;var extensions={cookify:function(options){return this.each(function(){var i,nameAttrs=['name','id'],name,$this=$(this),value;for(i in nameAttrs){if(!isNaN(i)){name=$this.attr(nameAttrs[i]);if(typeof name==='string'&&name!==''){if($this.is(':checkbox, :radio')){if($this.attr('checked')){value=$this.val();}}else if($this.is(':input')){value=$this.val();}else
{value=$this.html();}if(typeof value!=='string'||value===''){value=null;}$.cookies.set(name,value,options);break;}}}});},cookieFill:function(){return this.each(function(){var n,getN,nameAttrs=['name','id'],name,$this=$(this),value;getN=function(){n=nameAttrs.pop();return!!n;};while(getN()){name=$this.attr(n);if(typeof name==='string'&&name!==''){value=$.cookies.get(name);if(value!==null){if($this.is(':checkbox, :radio')){if($this.val()===value){$this.attr('checked','checked');}else
{$this.removeAttr('checked');}}else if($this.is(':input')){$this.val(value);}else
{$this.html(value);}}break;}}});},cookieBind:function(options){return this.each(function(){var $this=$(this);$this.cookieFill().change(function(){$this.cookify(options);});});}};$.each(extensions,function(i){$.fn[i]=this;});})(window.jQuery);}})();

/*
 * ----------------------------- JSTORAGE -------------------------------------
 * Simple local storage wrapper to save data on the browser side, supporting
 * all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
 *
 * Copyright (c) 2010 Andris Reinman, andris.reinman@gmail.com
 * Project homepage: www.jstorage.info
 *
 * Licensed under MIT-style license:
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
(function($){if(!$||!($.toJSON||Object.toJSON||window.JSON)){throw new Error("jQuery, MooTools or Prototype needs to be loaded before jStorage!");}var _storage={},_storage_service={jStorage:"{}"},_storage_elm=null,_storage_size=0,json_encode=$.toJSON||Object.toJSON||(window.JSON&&(JSON.encode||JSON.stringify)),json_decode=$.evalJSON||(window.JSON&&(JSON.decode||JSON.parse))||function(str){return String(str).evalJSON()},_backend=false,_XMLService={isXML:function(elm){var documentElement=(elm?elm.ownerDocument||elm:0).documentElement;return documentElement?documentElement.nodeName!=="HTML":false},encode:function(xmlNode){if(!this.isXML(xmlNode)){return false}try{return new XMLSerializer().serializeToString(xmlNode)}catch(E1){try{return xmlNode.xml}catch(E2){}}return false},decode:function(xmlString){var dom_parser=("DOMParser"in window&&(new DOMParser()).parseFromString)||(window.ActiveXObject&&function(_xmlString){var xml_doc=new ActiveXObject('Microsoft.XMLDOM');xml_doc.async='false';xml_doc.loadXML(_xmlString);return xml_doc}),resultXML;if(!dom_parser){return false}resultXML=dom_parser.call("DOMParser"in window&&(new DOMParser())||window,xmlString,'text/xml');return this.isXML(resultXML)?resultXML:false}};function _init(){if("localStorage"in window){try{if(window.localStorage){_storage_service=window.localStorage;_backend="localStorage"}}catch(E3){}}else if("globalStorage"in window){try{if(window.globalStorage){_storage_service=window.globalStorage[window.location.hostname];_backend="globalStorage"}}catch(E4){}}else{_storage_elm=document.createElement('link');if(_storage_elm.addBehavior){_storage_elm.style.behavior='url(#default#userData)';document.getElementsByTagName('head')[0].appendChild(_storage_elm);_storage_elm.load("jStorage");var data="{}";try{data=_storage_elm.getAttribute("jStorage")}catch(E5){}_storage_service.jStorage=data;_backend="userDataBehavior"}else{_storage_elm=null;return}}_load_storage()}function _load_storage(){if(_storage_service.jStorage){try{_storage=json_decode(String(_storage_service.jStorage))}catch(E6){_storage_service.jStorage="{}"}}else{_storage_service.jStorage="{}"}_storage_size=_storage_service.jStorage?String(_storage_service.jStorage).length:0}function _save(){try{_storage_service.jStorage=json_encode(_storage);if(_storage_elm){_storage_elm.setAttribute("jStorage",_storage_service.jStorage);_storage_elm.save("jStorage")}_storage_size=_storage_service.jStorage?String(_storage_service.jStorage).length:0}catch(E7){}}function _checkKey(key){if(!key||(typeof key!="string"&&typeof key!="number")){throw new TypeError('Key name must be string or numeric');}return true}$.jStorage={version:"0.1.5.3",set:function(key,value){_checkKey(key);if(_XMLService.isXML(value)){value={_is_xml:true,xml:_XMLService.encode(value)}}_storage[key]=value;_save();return value},get:function(key,def){_checkKey(key);if(key in _storage){if(_storage[key]&&typeof _storage[key]=="object"&&_storage[key]._is_xml&&_storage[key]._is_xml){return _XMLService.decode(_storage[key].xml)}else{return _storage[key]}}return typeof(def)=='undefined'?null:def},deleteKey:function(key){_checkKey(key);if(key in _storage){delete _storage[key];_save();return true}return false},flush:function(){_storage={};_save();return true},storageObj:function(){function F(){}F.prototype=_storage;return new F()},index:function(){var index=[],i;for(i in _storage){if(_storage.hasOwnProperty(i)){index.push(i)}}return index},storageSize:function(){return _storage_size},currentBackend:function(){return _backend},storageAvailable:function(){return!!_backend},reInit:function(){var new_storage_elm,data;if(_storage_elm&&_storage_elm.addBehavior){new_storage_elm=document.createElement('link');_storage_elm.parentNode.replaceChild(new_storage_elm,_storage_elm);_storage_elm=new_storage_elm;_storage_elm.style.behavior='url(#default#userData)';document.getElementsByTagName('head')[0].appendChild(_storage_elm);_storage_elm.load("jStorage");data="{}";try{data=_storage_elm.getAttribute("jStorage")}catch(E5){}_storage_service.jStorage=data;_backend="userDataBehavior"}_load_storage()}};_init()})(window.jQuery||window.$);


// selectlist v0.1 author mitchell pavao
(function($){  
	 $.fn.selectlist = function(options) {  
	  	
	    // default option values
        var defaults = {
            button_display_type: 'count',
            minimum: 0,
            selected: [],
            button_html: '',
            classes: {
            	ul: '',
            	li: '',
            	button: '',
            	button_link: ''
            },
            new_list_item: {
            	url: '',
            	params: {}
            }    
        };
             
        // set options
        var options =  $.extend(defaults, options);
        
        // member variables for 
        var el = {
        	container: false, // entire container for menu_button, select tag, list, etc
        	select: false,  // select tag
        	button: false,  // create html list, link with select tag, get list (ul)
        	list: false  // setup menu button, get menu button
        };
        
        
        // init / setup the select tag
        var select_init = function()
        {
        	return el.container.find('select');
        };
    
    
    	// toggle the button status, as well as the list status
        var button_toggle = function()
        {
	        // handle showing or not showing the list
			if (el.button.hasClass('selected'))
			{
				el.container.find('ul.selectlist').hide();
				el.button.removeClass('selected');
			}
			else
			{
				el.container.find('ul.selectlist').show();
				el.button.addClass('selected');
			}
        };
        
        
        // init / create the menu button 
       	var button_init = function()
       	{
       		// find menu button container
			el.button = (options.classes.button) ? el.container.find('.' + options.classes.button) : el.container.find('div');
			
			// store the default button html
			defaults.button_html = el.button.html();
			
			// add link in button
			el.button.html('<a href="" class="selectlist-button-link '+options.classes.button_link+'">'+el.button.html()+'</a>');
			
			// onclick for the menu button
			el.button.find('a').click(function()
			{
				button_toggle();
				
				return false;
			});
			
			return el.button;
       	};
       	
       	
       	// handle button txt
       	var button_update = function()
		{
			selected_option_count = el.select.find('option:selected').length;
			
			// if no options selected, show default html
			if (selected_option_count == 0)
			{
				el.button.find('a').html(defaults.button_html);
				return true;
			}
			
			// update button txt if necessary
			if (options.button_display_type == 'count')
			{
				var button_html = selected_option_count + ' Collection';
				
				// add an S if plural (todo: handle 's', 'es' or no 's')
				if (selected_option_count > 1)
				{
					button_html = button_html + 's';
				}
				
				// if only one result, show the name of the one
				else if(selected_option_count == 1)
				{
					button_html = el.select.find('option:selected').html();
				}
				
				el.button.find('a').html('<span>' + button_html + '</span>');
			}
			
			return true;
		}
       	
       	
       	// create the ul, li html list, link with the select tag list
       	var list_init = function()
       	{	
       		el.list = $('<ul class="selectlist '+options.classes.ul+'" style="display:none;"></ul>');
       		
       		el.list.attr('tabindex', -1);
    	
    		// don't let the event propagate, so the menu will stay open 
    		el.list.click(function(event) 
    		{
    			event.stopPropagation();
			});
			
			// hide the menu if the user clicks elsewhere
			$('body').click(function() 
			{
				// only hide list if it is showing
				if (el.button.hasClass('selected'))
				{
					button_toggle();
				}
			});
       		
       		// start count at 0, used for unique id
       		var count = 0;
       		
       		// hide the select tag
			el.select.hide();
			
			// link select tag options with their corresponding li elements	
			el.select.find('option').each(function()
			{
				var unique_id = 'selectlist-a-'+(count++);
				var $option   = $(this);
				
				// add the unique id as a class to the current element.
				$option.addClass(unique_id);
				
			    // create the list element
			    var $li_element = $('<li><a id="'+unique_id+'" href="javascript:;" onclick="return false;" rel="'+$option.val()+'"><span>'+$option.html()+'</span></a></li>');
			    
			    el.list.append($li_element);
                                			    			    
			    // make sure to mark selected
			    if ($(this).attr('selected') == 'selected')
			    {
			    	$li_element.find('a').addClass('selected');
			    }
			});
			
			// add a create list item li
			if (options.new_list_item.url != '')
			{
				var $new_item       = $('<li class="selectlist-option"><input type="text" name="new_list_item" placeholder="Create New Collection" /></li>');
				el.list.append($new_item);
				var $new_item_input = $new_item.find('input');
				
				$new_item_input.keypress(function(event)
				{
					// if the user hits enter, submit the new field
					if (event.keyCode == '13')
					{	
						// prevent enter key from submitting a parent form (if present)
						event.stopPropagation();
						event.preventDefault();
						
						var params = $.extend({ new_list_item: $new_item_input.val() }, options.new_list_item.params);
						
						$.post(options.new_list_item.url, params, function(xml)
							{
								if ($('status', xml).text() == 'success')
						        {
						        	// create new unique id
						        	var unique_id = 'selectlist-a-new-'+$('option_value', xml).text();
						        	
						        	// create new list item
						        	$new_item.before('<li><a id="'+unique_id+'" href="javascript:;" onclick="return false;" rel="'+$('option_value', xml).text()+'"><span>'+$('option_name', xml).text()+'</span></a></li>');
						        	
						        	// create new select option
						        	el.select.append('<option value="'+$('option_value', xml).text()+'" class="'+unique_id+'">'+$('option_name', xml).text()+'</option>');
						        	$new_item_input.val('');
						        	list_item_init();
						       	}
						       	else
						       	{
						       		alert($('message', xml).text());
						       	}
						});
					}
				});
			
				
			}
						
			el.select.before(el.list);
			
			return el.list;
       	};
       	
       	
       	// setup list element (li) onclick
       	var list_item_init = function()
       	{
       		// onclick for list items
			el.list.find('li a').each(function()
			{
				$(this).click(function()
				{		
					var $link = $(this);						
				
					// deselecting item
					if ($link.hasClass('selected'))
					{													
						unselect_item($link, el.select);
					}
					
					// selecting
					else
					{				
						select_item($link);
					}
					
					button_update();
					
					return false;
				});
			});
       	};
        
        
        // select an item & option
    	var select_item = function($link)
    	{
    		// unique id connects the list item with the select option
    		var unique_id = $link.attr('id');
    	
    		// select option
			$('.'+unique_id).attr('selected','selected');
			// select item
			$link.addClass('selected');
			
			return true;
    	}
        
        
        
        // select an item & option
    	var unselect_item = function($link)
    	{
    		// unique id connects the list item with the select option
    		var unique_id = $link.attr('id');
    		// total items selected
    		var selected_option_count = el.select.find('option:selected').length;									

    	
    		// check if we can unselect (i.e. selected items count not less than minimum)
			if (selected_option_count <= options.minimum)
			{
				var error_msg = 'You must have at least ' + options.minimum + ' option';
				
				if (selected_option_count > 1)
				{
					error_msg = error_msg + 's';
				}
				
				error_msg = error_msg + ' selected';
			
				alert(error_msg);
				return false;
			}

			// unselect select tag option
			$('.'+unique_id).removeAttr('selected');
			// unselect item
			$link.removeClass('selected');
			
			return true;
    	}
        
        
	  
	  	// loop through all matched elements
	    this.each(function() 
	    {  
	    	el.container = $(this); // entire container for menu_button, select tag, list, etc
	  		el.select    = select_init();  // select tag
			el.list      = list_init();  // create html list, link with select tag, get list (ul)
			el.button    = button_init(); 	// setup menu button, get menu button
	
			list_item_init();
			
			// handle default selected options
			// set any default options to selected, if provided
        	for (key in options.selected)
        	{
        		var value = options.selected[key];
        	
        		el.list.find('li a[rel="'+value+'"]').each(function()
        		{
        			select_item($(this));
        		});
        	}
			
			button_update();
			
		});	
	 };  
})(jQuery); 


/**
 * Hunker Methods
 */
 
 
 
// display the tags overlay 
function space_image_overlay(image_id)
{
	show_overlay_container();
	
	$.post('/ajax', {
			image_id: image_id,
			type: 'space_image',
			action: 'get'
		},
		function (xml)
		{
			if ($('status', xml).text() == 'success')
			{
				// write overlay 
				$('#overlay').append($($('html', xml).text()));
			}
			else
			{
				alert($('message', xml).text());
			}
		}
	);
} 



 
// display the tags overlay 
function tags_overlay(image_id)
{
	show_overlay_container();
	
	$.post('/ajax', {
			image_id: image_id,
			type: 'collections',
			action: 'get'
		},
		function (xml)
		{
			if ($('status', xml).text() == 'success')
			{
				// write overlay 
				$('#overlay').append($($('html', xml).text()));
				
				// apply cool html selectlist
				$('.selectlist-container').selectlist(
				{	
					button_display_type: 'count',
					minimum: 1,
					// selected: [69],
					classes: {
						ul: 'text-medium',
						button: 'collection-button',
						button_link: 'button text-medium'
					},
					new_list_item: {
						url: '/ajax',
						params: {
							type: 'collections',
							action: 'add'
						}
					}
				});
				
			}
			else
			{
				alert($('message', xml).text());
			}
		}
	);
} 


// display the edit collections overlay 
function collection_overlay(collection_id, collection_identifier)
{
	show_overlay_container();
	
	$.post('/ajax', {
			collection_id: collection_id,
			collection_identifier: collection_identifier,
			type: 'collections',
			action: 'edit'
		},
		function (xml)
		{
			if ($('status', xml).text() == 'success')
			{
				// write overlay 
				$('#overlay').append($($('html', xml).text()));
			}
			else
			{
				alert($('message', xml).text());
			}
		}
	);
} 




// display the generic overlay container
function show_overlay_container()
{
	$('#overlay-cover').show();
	$('#overlay-container').show();
	$('#overlay').show();
}

// hide the generic container
function close_overlay_container()
{
	// clear & hide overlay
	$('#overlay-cover').hide(); 
	$('#overlay-container').hide();
	$('#overlay :not(#overlay-close)').remove();
	
	// clear & hide lightbox
	$('#image-light-box-background').hide();
    $('#image-light-box :not(#image-light-box-close)').remove();
    $('#image-light-box-container').hide();
	
}

// add the image tags
function image_add_tags(image_id, tags, collections)
{
	$.post('/ajax', {
        id: image_id,
        tags: tags,
        collections: collections,
        type: 'image',
        action: 'add_tags'
       }, 

        function(xml) 
        {   
           // tags added successfully        
           if ($('status', xml).text() == 'success')
           {    
                // clear what's in the overlay
                $('#overlay :not(#overlay-close)').remove();
                
           		var html = '<p id="overlay-success-message" class="text-extra-large gray-very-dark">Success</p>';
                
                $('#overlay').append($(html));
                $('#overlay').addClass('overlay-success');
                
                // show overlay success message
                setTimeout("$('#overlay').fadeOut(600, function(){close_overlay_container(); $('#overlay').removeClass('overlay-success');});", 550);
                setTimeout("$('#overlay-cover').fadeOut(600);", 750);
                
                update_image_buttons(image_id, 'added');
                
                return true;
           }
           else
           {    
                // error
                alert($('message', xml).text());
                return false;
           }
        }); 
}


// add the image tags
function space_image_update(image_id, tags)
{
	$.post('/ajax', {
        id: image_id,
        tags: tags,
        type: 'space_image',
        action: 'update'
       }, 

        function(xml) 
        {   
           // tags added successfully        
           if ($('status', xml).text() == 'success')
           {    
                // clear what's in the overlay
                $('#overlay :not(#overlay-close)').remove();
                
           		var html = '<p id="overlay-success-message" class="text-extra-large gray-very-dark">Success</p>';
                
                $('#overlay').append($(html));
                $('#overlay').addClass('overlay-success');
                
                // show overlay success message
                setTimeout("$('#overlay').fadeOut(600, function(){close_overlay_container(); $('#overlay').removeClass('overlay-success');});", 550);
                setTimeout("$('#overlay-cover').fadeOut(600);", 750);
                
                update_image_buttons(image_id, 'added');
                
                return true;
           }
           else
           {    
                // error
                alert($('message', xml).text());
                return false;
           }
        }); 
}



// post the collection edit
function collection_edit(collection_id, collection_name)
{
	$.post('/ajax', {
        id: collection_id,
        name: collection_name,
        type: 'collections',
        action: 'update'
       }, 

        function(xml) 
        {   
           // delete successful, remove item from list        
           if ($('status', xml).text() == 'success')
           {    
                $('#overlay :not(#overlay-close)').remove();
           
           		var html = '<p id="overlay-success-message">Your collection was updated.</p>';
           		html += '<p><a href="javascript:;" class="overlay-close-button">Close</a></p>';
                
                $('#overlay').append($(html));
                $('#overlay').addClass('overlay-success');
                
                // show overlay success message
                setTimeout("$('#overlay').fadeOut(2000, function(){close_overlay_container(); $('#overlay').removeClass('overlay-success');});", 2000);
                setTimeout("$('#overlay-cover').fadeOut(2000);", 2000);
                
                
                return true;
           }
           else
           {    
                // error
                alert($('message', xml).text());
                return false;
           }
        }); 
}




// handle updating all buttons on page depending on user action
function update_image_buttons(image_id, action)
{  
    // added bookmark / image / spaces image
   
    // find all buttons related to the image
    //console.log('a.button-add[data-image-id='+image_id+']');
  
    if (action == 'added')
    {     
        $('a.button-add[data-image-id='+image_id+']').each(function(){
       
            if ($(this).attr('data-display') == 'add-added')
            {
                $(this).addClass('button-added').removeClass('button-add');
                $(this).find('span').html('Added');     
            }
            
            else if ($(this).attr('data-display') == 'add-options')
            {
               $(this).addClass('button-options').removeClass('button-add');
               $(this).find('span').html('Options'); 
            }
        });
    }	           
   
    // removed bookmark / image / spaces image
    else if (action == 'add')
    {
        //console.log('a.button-added[data-image-id='+image_id+'], a.button-options[data-image-id='+image_id+']');
        
        $('a.button-added[data-image-id='+image_id+'], a.button-options[data-image-id='+image_id+']').each(function(){
    
            // handle updating all relevant add-added button combos       
            if ($(this).hasClass('button-options') || $(this).hasClass('button-added'))
            {
              $(this).addClass('button-add').removeClass('button-added').removeClass('button-options');
              $(this).find('span').html('Add'); 
            }
        });
    };
}


// remove an image from being associated with a user
function remove_space_image(image_id)
{	
    $.post('/ajax', {
        image_id: image_id,
        type: 'space_image',
        action: 'delete'
        },
        
        function (xml)
        {
            if ($('status', xml).text() == 'success')
            {
                update_image_buttons(image_id, 'add');
                close_overlay_container();
            }
            else
            {    
                alert($('message', xml).text());
            }
        });

}


/**
 * "Delete Collection" 
 **/
function delete_collection(collection_id)
{
   $.post('/ajax', {
    id: collection_id,
    type: 'collections',
    action: 'delete'
   }, 

    function(xml) 
    {   
       // delete successful, remove tag from list        
       if ($('status', xml).text() == 'success')
       {    
       		//$('.image-grid').isotope('remove', $collection_identifier); 
       		//$('.image-grid').isotope('reLayout');
       		close_overlay_container();
       }
       else
       {    
            // error
            alert($('message', xml).text());
            return false;
       }
    }); 

	return false;
} 

// remove an image from being associated with a user
function remove_bookmark(image_id)
{	
    $.post('/ajax', {
        image_id: image_id,
        type: 'bookmark',
        action: 'toggle'
        },
        
        function (xml)
        {
            if ($('status', xml).text() == 'success')
            {
                update_image_buttons(image_id, 'add');
                close_overlay_container();
            }
            else
            {    
                alert($('message', xml).text());
            }
        });

}

// remove an image from being associated with a user when it's the last bookmark to the image on the site
function delete_bookmark(image_id)
{	
    if (confirm('Deleting will be completely remove this image from Hunker.  Are you sure you want to delete?') == false)
    {
        return false;
    }


    $.post('/ajax', {
        image_id: image_id,
        type: 'bookmark',
        action: 'toggle'
        },
        
        function (xml)
        {
            if ($('status', xml).text() == 'success')
            {
                update_image_buttons(image_id, 'add');
                close_overlay_container();
            }
            else
            {    
                alert($('message', xml).text());
            }
        });

}





/**
 * Hunker attach LIVE onclicks
 */
(function(){
	
	
	// "add tag" link onclick
	$('#image-profile-add-tags, .button-options, .button-tags').live('click', function(){
		
		if ($(this).attr('data-display') == 'options')
		{
            space_image_overlay($(this).attr('data-image-id'));
		}
		else
		{
            tags_overlay($(this).attr('data-image-id'));
        }
		return false;
	});
	
	/**
	 * "Delete Tag" link
	 **/
	$('.tag-delete').live('click', function() { 
		
		var $el    = $(this);
		var params = $el.attr('rel').split(',');
		
		$.post('/ajax', {
        image_id: params[0],
        tag_id: params[1],
        type: 'image_tag',
        action: 'delete'
       }, 

        function(xml) 
        {   
           // delete successful, remove tag from list        
           if ($('status', xml).text() == 'success')
           {    
           		$el.parent('li').remove();           
           }
           else
           {    
                // error
                alert($('message', xml).text());
                return false;
           }
        }); 

		return false;
	});
	

	
	/**
	 * "Add" button onclick
	 **/
	$('.button-add').live('click', function() { 

		var $a       = $(this);
		
		tags_overlay($a.attr('data-image-id'));
		
		return false;
	});
	
	
	/**
	 * "Added" button onclick
	 **/
	$('.button-added').live('click', function() { 

		var $a       = $(this);
		
		$.post('/ajax', {
          image_id: $a.attr('data-image-id'),
          type: 'bookmark',
          action: 'toggle'
       }, 

        function(xml) 
        {   
           // delete successful, remove tag from list        
           if ($('status', xml).text() == 'success')
           {    
           		update_image_buttons($a.attr('data-image-id'), 'add');
           }
           else
           {    
                // error
                alert($('message', xml).text());
           }
        }); 

		return false;
	});


    /**
	 * "remove / flag feed image" button onclick
	 **/
	$('.button-remove').live('click', function() { 

		var $a       = $(this);
		
		$.post('/ajax', {
          image_id: $a.attr('data-feed-image-id'),
          type: 'feed_image',
          action: 'remove'
       }, 

        function(xml) 
        {   
           // delete successful, remove tag from list        
           if ($('status', xml).text() == 'success')
           {    
           		$('.image-grid').isotope('remove', $a.parents('.image-wrapper')); 
           		
           		//$a.parents('.image-wrapper').remove();
           		$('.image-grid').isotope('reLayout');
           }
           else
           {    
                // error
                alert($('message', xml).text());
           }
        }); 

		return false;
	});
	
	
	/**
	 * "remove / flag feed image" button onclick
	 **/
	$('.button-add-feed-image').live('click', function() { 

		var $a       = $(this);
		
		$.post('/ajax', {
          image_id: $a.attr('data-feed-image-id'),
          type: 'feed_image',
          action: 'add'
       }, 

        function(xml) 
        {   
           // delete successful, remove tag from list        
           if ($('status', xml).text() == 'success')
           {    
                $a.html('Added');
           		//$('.image-grid').isotope('remove', $a.parents('.image-wrapper')); 
           		
           		//$a.parents('.image-wrapper').remove();
           		//$('.image-grid').isotope('reLayout');
           }
           else
           {    
                // error
                alert($('message', xml).text());
           }
        }); 

		return false;
	});
	
	
	
	
	/**
	 * "Follow" / "Following" button onclick
	 **/
	$('.button-follow, .button-following').live('click', function() { 

		var $a      = $(this);
		var $span   = $a.children('span')
		var param   = $a.attr('rel');
		
		$.post('/ajax', {
          user_id: param,
          type: 'follow',
          action: 'toggle'
       }, 

        function(xml) 
        {   
           // delete successful, remove tag from list        
           if ($('status', xml).text() == 'success')
           {    
           		if ($a.hasClass('button-follow'))
           		{
           			$a.addClass('button-following').removeClass('button-follow');
           			$span.html('Following');
           		}
           		else
           		{
           			$a.addClass('button-follow').removeClass('button-following');
           			$span.html('Follow');
           		}
           }
           else
           {    
                // error
                alert($('message', xml).text());
           }
        }); 

		return false;
	});
	
	
	
	/**
	 * "edit collection" link onclick
	 */
	$('.button-collection-edit').live('click', function(){
		var params = $(this).attr('rel').split(',');
		collection_overlay(params[0], params[1]);
		return false;
	});
})();


/**
 * Hunker On Ready
 */
$(document).ready(function(){
	
	
	// EXTRA
	
	$('#invite-user').click(function(){
    	event.stopPropagation();
    	show_overlay_container();
        //$('#overlay').append($('#add-user-overlay').html());        
        $('#add-user-overlay').clone(true).show().appendTo($('#overlay'));
	});
	
	$('#invite-user-form').ajaxForm({
	        dataType: 'xml',
			beforeSend: function() {},
			success: function(xml) {
				if ($('status', xml).text() == 'success')
				{
				    close_overlay_container();
				}
				else
				{
				    alert('There was a problem inviting this user. Please try again. [Error B].')
				}
			},
			error: function(xml) {
				alert('There was a problem inviting this user. Please try again. [Error A]')
			}
		});
	
	
	// MAIN NAV

	// main nav Image Feeds
	$('#sub-menu-image-feeds-link, #sub-menu-image-feeds').hover(
		function() { $('#sub-menu-image-feeds').show(); $('#sub-menu-image-feeds-link').addClass('hover-selected');},
	    function() { $('#sub-menu-image-feeds').hide(); $('#sub-menu-image-feeds-link').removeClass('hover-selected');}
	);
	
	// main nav Community
	$('#sub-menu-community-link, #sub-menu-community').hover(
		function() { $('#sub-menu-community').show(); $('#sub-menu-community-link').addClass('hover-selected');},
	    function() { $('#sub-menu-community').hide(); $('#sub-menu-community-link').removeClass('hover-selected');}
	);
	
	// main nav Account
	$('#sub-menu-account-link, #sub-menu-account').hover(
		function() { $('#sub-menu-account').show(); $('#sub-menu-account-link').addClass('hover-selected');},
	    function() { $('#sub-menu-account').hide(); $('#sub-menu-account-link').removeClass('hover-selected');}
	);
	
	// tooltips
	$('a.tooltip').tipsy({live: false, fade: true, opacity: 0.9, gravity: 's', delayIn: 300});
	
	// top sources view more link onclick 
	$('#top-sources-view-more').click(function(){	
		if ($(this).html().toLowerCase() == 'more')
		{
			$('.top-sources-more').show();
			$(this).addClass('view-less-link').removeClass('view-more-link').html('Less');
		} 
		else
		{
			$('.top-sources-more').hide();
			$(this).addClass('view-more-link').removeClass('view-less-link').html('More');
		}
		return false;
	});
	
	// top tags view more link onclick 
	$('#top-tags-view-more').click(function(){	
		if ($(this).html().toLowerCase() == 'more')
		{
			$('.top-tags-more').show();
			
			$(this).addClass('view-less-link').removeClass('view-more-link').html('Less');
		} 
		else
		{
			$('.top-tags-more').hide();
			$(this).addClass('view-more-link').removeClass('view-less-link').html('More');
		}
		return false;
	});

	// close overlays if esc is pressed
    $(document).keyup(function(e) {  
        if (e.keyCode == 27) 
        {
            close_overlay_container();
        }
    });   
	
	// for non html 5 browsers, add placeholder functionality 
	$('input[placeholder],textarea[placeholder]').placeholder();
	
	
	// hide all overlays
	
	$('body, .overlay-light-box-close, .overlay-close-button').click(function(){
	   // light box
	   close_overlay_container();
	});
	
    // prevent the light box from disappearing when clicked
    $('#image-light-box, #image-light-box-large, #overlay').click(function(event){

        // stop event propagation UNLESS it's the cancel / close button
        if ($(event.target).hasClass('overlay-light-box-close') == false && $(event.target).hasClass('overlay-close-button') == false)
        {
            event.stopPropagation();
        }
    });

    // 
	$('.image-light-box-link').click(function(event){
	
	   event.stopPropagation();
	   
	   var style = "";
	   var $image = $('.image-light-box-image');
	   
	   var max_height = $(window).height() - 210;
	   var max_width  = 900;
	   
	   var dimensions = $image.attr('rel').split(',');
	   	   
	   var height = dimensions[1];
	   var width  = dimensions[0];
	   
	   //console.log('image height = ' + height + ' image width = ' + width);
	   
       //console.log('max_height ' + max_height + '. height of image is ' + height);

        var new_height = height;
        var new_width  = width;

	   // make sure image isn't too tall
	   if ( parseInt(new_height) > parseInt(max_height) )
	   {
	       //console.log ('resize!');
	   
	       new_width  = Math.round(max_height * (new_width / new_height));
	       new_height = max_height;
	       
	       //console.log('new width: ' + new_width);
	   }
	   
	   // make sure not too wide
	   if ( parseInt(new_width) > parseInt(max_width) )
	   {
	       new_height = Math.round(max_width * (new_height / new_width)); 
	       new_width  = max_width;
	   }
	   
	   style = "height: " + new_height + 'px; width: '+ new_width +'px;';

       var image_src = $image.attr('src').replace('resize_450', 'resize_900x1000').replace('resize_630', 'resize_900x1000');
	   
	   var image_light_box_width = (typeof new_width != 'undefined') ? new_width : width;
	   image_light_box_width = (image_light_box_width > 900) ? 900 : image_light_box_width; 
	   
	   
	   
	   
       $('#image-light-box').prepend('<img src="'+image_src+'" style="'+style+'" id="image-light-box-large" />');
	   $('#image-light-box-background').show(); 
	   $('#image-light-box-container').show();
	   $('#image-light-box').css('width', image_light_box_width);
	   
	   
	   // set the width of the image as the width of the light box

	   
	});
	
	
	$('#image-layout-tumble-option').click(function(){
	   $.cookies.set('image_layout', 'image_tumble', { expiresAt: new Date(2014, 2, 11) });
	   window.location.href=window.location.href;
	});
	
	$('#image-layout-grid-option').click(function(){
	   $.cookies.set('image_layout', 'image_grid', { expiresAt: new Date(2014, 2, 11) });
	   window.location.href=window.location.href;
	});
	

	// get more images 
	$('#more-images').click(function(){
    
        var $button = $(this);
        var action  = $button.attr('data-action');
        var last_id = $button.attr('data-last-id');
        var extra   = $button.attr('data-extra');
        
        // show the loading gif
        $('#more-pagination-text').hide();
        $('#more-images').append('<img src="http://hunker.com/static/images/ajax_loader.gif" id="more-pagination-loading" />').addClass('loading');
        
        // handle the url
        var page = parseInt($button.attr('data-page')) + 1;
        
        $button.attr('data-page', page);
        
        $.post('/ajax', 
            {
                type: 'more_images',
                action: action, 
                last_id: last_id,
                extra: extra
            },
            function(xml)
            {
                if ($('status', xml).text() == 'success')
                {
                    $button.attr('data-last-id', $('last_id', xml).text());                    
                    
                    // see what layout we have
                    if ($.cookies.get('image_layout') == 'image_tumble')
                    {
                        $('.image-tumble').append($($('html', xml).text()));
                    }
                    else
                    {
                        var $newItems = $($('html', xml).text());
                    
                        $('.image-grid').isotope('insert', $newItems);
                    }
                    
                    // store the html for the current page in local storage.  Used to retreive later so that when the user hits back, the page looks as the left it.
                    page_cache.set();
                }
                else
                {
                    alert($('message', xml).text());
                }
                
                // remove loading gif
                $('#more-pagination-text').show();
                $('#more-pagination-loading').remove();
                $('#more-images').removeClass('loading');

            });
    });
    
    
    // get more sources 
	$('#more-sources').click(function(){
    
        var $button = $(this);
        var action  = $button.attr('data-action');
        var last_id = $button.attr('data-last-id');
        var extra   = $button.attr('data-extra');
        
        // show the loading gif
        $('#more-pagination-text').hide();
        $('#more-sources').append('<img src="http://hunker.com/static/images/ajax_loader.gif" id="more-pagination-loading" />').addClass('loading');
        
        // handle the url
        var page = parseInt($button.attr('data-page')) + 1;
        
        $button.attr('data-page', page);
        
        $.post('/ajax', 
            {
                type: 'more_sources',
                action: action, 
                last_id: last_id,
                extra: extra
            },
            function(xml)
            {
                if ($('status', xml).text() == 'success')
                {
                    $button.attr('data-last-id', $('last_id', xml).text());                    
                    
                    $('#source-index').append($($('html', xml).text()));
                }
                else
                {
                    alert($('message', xml).text());
                }
                
                // remove loading gif
                $('#more-pagination-text').show();
                $('#more-pagination-loading').remove();
                $('#more-sources').removeClass('loading');

            });
    });
	
	
	
	// isotope: remove unneccesary verticle space from image grid
	
	// if there is content to show from page cache, do so first.
	page_cache.get();
    
	$('.image-grid').isotope({
        itemSelector : '.image-wrapper',
        //columnWidth : 320,
        removeFarMargin : true
    });
});



var page_cache = {

    _this: this, // cheat

    ttl: 5 * 60 * 1000,  // cache will live for 5 minutes

    time: parseInt(new Date().valueOf()), // current time
    
    key: {
        expire: 'hunker_page_cache_time_' + document.location.href.split('?')[0].split('$'),
        last_id: 'hunker_page_cache_last_id_' + document.location.href.split('?')[0].split('$'),
        data: 'hunker_page_cache_data_' + document.location.href.split('?')[0].split('$')
    },

    get: function() {
    
        var expire_time = $.jStorage.get(page_cache.key.expire);
        
        // page wasn't cached, or cache is empty
        if (expire_time == false || expire_time == null)
        {
            return false;
        }
                
        expire_time = parseInt(expire_time);
    
        // if cache has expired, clear out variables
        if (expire_time < page_cache.time)
        {
            page_cache.clear();
            return false;
        }
                
        // cache hasn't expired, get data        
        $('.image-grid').html($.jStorage.get(page_cache.key.data));
        $('#more-images').attr('data-last-id', $.jStorage.get(page_cache.key.last_id));
        
        // make sure pagination knows what the last id is
        
                
        return true;
    },
    
    set: function() {
    
        $.jStorage.set(page_cache.key.expire, page_cache.time + page_cache.ttl);
        $.jStorage.set(page_cache.key.data, $('.image-grid').html());
        $.jStorage.set(page_cache.key.last_id, $('#more-images').attr('data-last-id'));
        
    },
    
    // clear cache for id
    clear: function() {
        $.jStorage.deleteKey(page_cache.key.expire);
        $.jStorage.deleteKey(page_cache.key.data);
        $.jStorage.deleteKey(page_cache.key.last_id);
    }

};
