/*	usemedia.com . joes koppers . 2006
	human readable date formatting (English), usage:

	var date = new Date().format('Current time and date: ','time',' on ','day',' ','humandate');
		
		//predefined date formats, use (u) for US date order (month first)
	
		day					 => 'friday'
		shortday			 => 'fri'
		(u)date				 => '22/12/2006'
		(u)shortdate		 => '22/12/06'
		(u)humandate		 => '22 december 2006'
		(u)shorthumandate	 => '22 dec 2006'
		(u)shorterhumandate	 => '22 dec '06';
		(u)shortesthumandate => '22 dec';
		(u)longhumandate	 => 'friday 22 december, 2006';
		time				 => '14:56'
		longtime			 => '14:56:23'
		(u)(short)relative	 => 'x minutes ago', 'x hours x minutes ago', '1 day x hours ago', 'x days ago',
								prints regular (u)shorthumandate at 14+ days */

Date.months=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.days=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.times=["day","days","hour","hours","minute","minutes","mins","second","seconds","on","at","ago","less than a minute"];Date.prototype.format=function(){var n=this.getDay();var c=this.getDate();var j=this.getMonth()+1;var l=this.getFullYear();var g=this.getHours();var d=this.getMinutes();if(d<10){d="0"+d}var r=this.getSeconds();if(r<10){r="0"+r}var k="";for(var f=0;f<arguments.length;f++){switch(arguments[f]){default:k+=arguments[f];break;case"day":k+=Date.days[n];break;case"shortday":k+=Date.days[n].substring(0,3);break;case"date":k+=c+"/"+j+"/"+l;break;case"udate":k+=j+"/"+c+"/"+l;break;case"shortdate":k+=c+"/"+j+"/"+String(l).substr(2);break;case"ushortdate":k+=j+"/"+c+"/"+String(l).substr(2);break;case"humandate":k+=c+" "+Date.months[j-1]+" "+l;break;case"uhumandate":k+=Date.months[j-1]+" "+c+", "+l;break;case"shorthumandate":k+=c+" "+Date.months[j-1].substring(0,3)+" "+l;break;case"ushorthumandate":k+=Date.months[j-1].substring(0,3)+" "+c+", "+l;break;case"shorterhumandate":k+=c+" "+Date.months[j-1].substring(0,3)+" '"+String(l).substr(2);break;case"shortesthumandate":k+=c+" "+Date.months[j-1].substring(0,3);break;case"ushorterhumandate":k+=Date.months[j-1].substring(0,3)+" "+c+", '"+String(l).substr(2);break;case"ushortesthumandate":k+=Date.months[j-1].substring(0,3)+" "+c;break;case"longhumandate":k+=Date.days[n]+" "+c+" "+Date.months[j-1]+", "+l;break;case"ulonghumandate":k+=Date.days[n]+" "+Date.months[j-1]+" "+c+", "+l;break;case"time":k+=g+":"+d;break;case"longtime":k+=g+":"+d+":"+r;break;case"relative":case"urelative":case"shortrelative":case"ushortrelative":var b=new Date();var o=b-this;if(o<60000){o=0}var a=Math.floor(o/1000/60);var q=Math.floor(a/60);var p=(q>b.getHours())?Math.floor((q)/24):0;if(p==0){a=a-(q*60);q=q;if(q==0&&a==0){k+=Date.times[12]+" "}else{var e=(arguments[f].indexOf("short")!=-1)?Date.times[6]:Date.times[5];if(q>0){k+=(q==1)?"1 "+Date.times[2]+" ":q+" "+Date.times[3]+" "}if(a>0){k+=(a==1)?"1 "+Date.times[4]+" ":a+" "+e+" "}}}else{if(p==1){k+="1 "+Date.times[0]+" ";q=q-24;if(q>0){k+=(q==1)?"1 "+Date.times[2]+" ":q+" "+Date.times[3]+" "}}else{if(p<=14){k+=p+" "+Date.times[1]+" "}}}if(p>14){if(arguments[f].indexOf("short")!=-1){l="'"+String(l).substr(2)}else{k+=Date.times[9]+" "}k+=(arguments[f].indexOf("u")==-1)?c+" "+Date.months[j-1].substring(3,0)+" "+l:Date.months[j-1].substring(3,0)+" "+c+", "+l;k+=" "+Date.times[10]+" "+g+":"+d}else{k+=Date.times[11];if(p>1){k+=" "+Date.times[10]+" "+g+":"+d}}break;case"tolower":k=k.toLowerCase();break;case"nonbreaking":k=k.replace(/ /g,"&nbsp;");break}}return k};

/*	usemedia.com . joes koppers . 2009
	ease-out animation object, usage:

	var ease = new UseEase(update [, callback [, speed [, refresh [, margin ]]]]);
			//update 	function, called during ease, with current values
			//callback 	function, called at end of ease
			//speed		number, ease speed <1, default .35
			//refresh	number, update rate (milliseconds) default 40
			//margin	number, snap margin at end of ease, default 1
		
		ease.start(values);
			//values	object, { a:[start value,end value], b:[start,end], ... } */

function UseEase(e,d,c,a,b){this.a=false;this.s=c||0.35;this.m=b||1;this.r=a||40;this.uCb=e;this.eCb=d}UseEase.prototype.start=function(a){this.oV=a;this.v=[];this.t=[];var b=0;for(var c in a){this.v[b]=a[c][0];this.t[b]=a[c][1];b++}this.sld();return this};UseEase.prototype.abort=function(b){if(this.a){window.clearTimeout(this.a)}if(b){var a={};for(var c in this.oV){a[c]=this.oV[c][0]}this.uCb(a)}};UseEase.prototype.upd=function(){var a={},b=0;for(var c in this.oV){a[c]=this.v[b];b++}this.uCb(a)};UseEase.prototype.sld=function(){var f=false;for(var a=0;a<this.v.length;a++){var e=this.t[a]-this.v[a];this.v[a]+=this.s*(e);var b=(e>0&&this.v[a]<this.t[a]-this.m)||(e<0&&this.v[a]>this.t[a]+this.m);if(b){f=true}}if(f){this.upd();var c=this;this.a=window.setTimeout(function(){c.sld()},this.r)}else{for(var a=0;a<this.v.length;a++){this.v[a]=this.t[a]}this.upd();if(this.eCb){this.eCb()}this.a=false}};

/*	usemedia.com . joes koppers . 2011
	mini jquery plugin to set href and title (optional) attributes for javascript:// links, usage: elm.jslink('title',true|false) */

(function($){$.fn.jslink=function(b,c){if(!b){b=''}return this.attr({href:'javascript://'+b,title:c?b:''})}})(jQuery);