jQuery.fn.farbtastic=function(callback){$.farbtastic(this,callback);return this;};jQuery.farbtastic=function(container,callback){var container=$(container).get(0);return container.farbtastic||(container.farbtastic=new jQuery._farbtastic(container,callback));}
jQuery._farbtastic=function(container,callback){var fb=this;$(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');var e=$('.farbtastic',container);fb.wheel=$('.wheel',container).get(0);fb.radius=84;fb.square=100;fb.width=194;if(navigator.appVersion.match(/MSIE [0-6]\./)){$('*',e).each(function(){if(this.currentStyle.backgroundImage!='none'){var image=this.currentStyle.backgroundImage;image=this.currentStyle.backgroundImage.substring(5,image.length-2);$(this).css({'backgroundImage':'none','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='"+image+"')"});}});}
fb.linkTo=function(callback){if(typeof fb.callback=='object'){$(fb.callback).unbind('keyup',fb.updateValue);}
fb.color=null;if(typeof callback=='function'){fb.callback=callback;}
else if(typeof callback=='object'||typeof callback=='string'){fb.callback=$(callback);fb.callback.bind('keyup',fb.updateValue);if(fb.callback.get(0).value){fb.setColor(fb.callback.get(0).value);}}
return this;}
fb.updateValue=function(event){if(this.value&&this.value!=fb.color){fb.setColor(this.value);}}
fb.setColor=function(color){var unpack=fb.unpack(color);if(fb.color!=color&&unpack){fb.color=color;fb.rgb=unpack;fb.hsl=fb.RGBToHSL(fb.rgb);fb.updateDisplay();}
return this;}
fb.setHSL=function(hsl){fb.hsl=hsl;fb.rgb=fb.HSLToRGB(hsl);fb.color=fb.pack(fb.rgb);fb.updateDisplay();return this;}
fb.widgetCoords=function(event){var x,y;var el=event.target||event.srcElement;var reference=fb.wheel;if(typeof event.offsetX!='undefined'){var pos={x:event.offsetX,y:event.offsetY};var e=el;while(e){e.mouseX=pos.x;e.mouseY=pos.y;pos.x+=e.offsetLeft;pos.y+=e.offsetTop;e=e.offsetParent;}
var e=reference;var offset={x:0,y:0}
while(e){if(typeof e.mouseX!='undefined'){x=e.mouseX-offset.x;y=e.mouseY-offset.y;break;}
offset.x+=e.offsetLeft;offset.y+=e.offsetTop;e=e.offsetParent;}
e=el;while(e){e.mouseX=undefined;e.mouseY=undefined;e=e.offsetParent;}}
else{var pos=fb.absolutePosition(reference);x=(event.pageX||0*(event.clientX+$('html').get(0).scrollLeft))-pos.x;y=(event.pageY||0*(event.clientY+$('html').get(0).scrollTop))-pos.y;}
return{x:x-fb.width/2,y:y-fb.width/2};}
fb.mousedown=function(event){if(!document.dragging){$(document).bind('mousemove',fb.mousemove).bind('mouseup',fb.mouseup);document.dragging=true;}
var pos=fb.widgetCoords(event);fb.circleDrag=Math.max(Math.abs(pos.x),Math.abs(pos.y))*2>fb.square;fb.mousemove(event);return false;}
fb.mousemove=function(event){var pos=fb.widgetCoords(event);if(fb.circleDrag){var hue=Math.atan2(pos.x,-pos.y)/6.28;if(hue<0)hue+=1;fb.setHSL([hue,fb.hsl[1],fb.hsl[2]]);}
else{var sat=Math.max(0,Math.min(1,-(pos.x/fb.square)+.5));var lum=Math.max(0,Math.min(1,-(pos.y/fb.square)+.5));fb.setHSL([fb.hsl[0],sat,lum]);}
return false;}
fb.mouseup=function(){$(document).unbind('mousemove',fb.mousemove);$(document).unbind('mouseup',fb.mouseup);document.dragging=false;}
fb.updateDisplay=function(){var angle=fb.hsl[0]*6.28;$('.h-marker',e).css({left:Math.round(Math.sin(angle)*fb.radius+fb.width/2)+'px',top:Math.round(-Math.cos(angle)*fb.radius+fb.width/2)+'px'});$('.sl-marker',e).css({left:Math.round(fb.square*(.5-fb.hsl[1])+fb.width/2)+'px',top:Math.round(fb.square*(.5-fb.hsl[2])+fb.width/2)+'px'});$('.color',e).css('backgroundColor',fb.pack(fb.HSLToRGB([fb.hsl[0],1,0.5])));if(typeof fb.callback=='object'){$(fb.callback).css({backgroundColor:fb.color,color:fb.hsl[2]>0.5?'#000':'#fff'});$(fb.callback).each(function(){if(this.value&&this.value!=fb.color){this.value=fb.color;}});}
else if(typeof fb.callback=='function'){fb.callback.call(fb,fb.color);}}
fb.absolutePosition=function(el){var r={x:el.offsetLeft,y:el.offsetTop};if(el.offsetParent){var tmp=fb.absolutePosition(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}
return r;};fb.pack=function(rgb){var r=Math.round(rgb[0]*255);var g=Math.round(rgb[1]*255);var b=Math.round(rgb[2]*255);return'#'+(r<16?'0':'')+r.toString(16)+
(g<16?'0':'')+g.toString(16)+
(b<16?'0':'')+b.toString(16);}
fb.unpack=function(color){if(color.length==7){return[parseInt('0x'+color.substring(1,3))/255,parseInt('0x'+color.substring(3,5))/255,parseInt('0x'+color.substring(5,7))/255];}
else if(color.length==4){return[parseInt('0x'+color.substring(1,2))/15,parseInt('0x'+color.substring(2,3))/15,parseInt('0x'+color.substring(3,4))/15];}}
fb.HSLToRGB=function(hsl){var m1,m2,r,g,b;var h=hsl[0],s=hsl[1],l=hsl[2];m2=(l<=0.5)?l*(s+1):l+s-l*s;m1=l*2-m2;return[this.hueToRGB(m1,m2,h+0.33333),this.hueToRGB(m1,m2,h),this.hueToRGB(m1,m2,h-0.33333)];}
fb.hueToRGB=function(m1,m2,h){h=(h<0)?h+1:((h>1)?h-1:h);if(h*6<1)return m1+(m2-m1)*h*6;if(h*2<1)return m2;if(h*3<2)return m1+(m2-m1)*(0.66666-h)*6;return m1;}
fb.RGBToHSL=function(rgb){var min,max,delta,h,s,l;var r=rgb[0],g=rgb[1],b=rgb[2];min=Math.min(r,Math.min(g,b));max=Math.max(r,Math.max(g,b));delta=max-min;l=(min+max)/2;s=0;if(l>0&&l<1){s=delta/(l<0.5?(2*l):(2-2*l));}
h=0;if(delta>0){if(max==r&&max!=g)h+=(g-b)/delta;if(max==g&&max!=b)h+=(2+(b-r)/delta);if(max==b&&max!=r)h+=(4+(r-g)/delta);h/=6;}
return[h,s,l];}
$('*',e).mousedown(fb.mousedown);fb.setColor('#000000');if(callback){fb.linkTo(callback);}};Date.CultureInfo={name:"en-US",englishName:"English (United States)",nativeName:"English (United States)",dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbreviatedDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],shortestDayNames:["Su","Mo","Tu","We","Th","Fr","Sa"],firstLetterDayNames:["S","M","T","W","T","F","S"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],abbreviatedMonthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:0,twoDigitYearMax:2029,dateElementOrder:"mdy",formatPatterns:{shortDate:"M/d/yyyy",longDate:"dddd, MMMM dd, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, MMMM dd, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"MMMM dd",yearMonth:"MMMM, yyyy"},regexPatterns:{jan:/^jan(uary)?/i,feb:/^feb(ruary)?/i,mar:/^mar(ch)?/i,apr:/^apr(il)?/i,may:/^may/i,jun:/^jun(e)?/i,jul:/^jul(y)?/i,aug:/^aug(ust)?/i,sep:/^sep(t(ember)?)?/i,oct:/^oct(ober)?/i,nov:/^nov(ember)?/i,dec:/^dec(ember)?/i,sun:/^su(n(day)?)?/i,mon:/^mo(n(day)?)?/i,tue:/^tu(e(s(day)?)?)?/i,wed:/^we(d(nesday)?)?/i,thu:/^th(u(r(s(day)?)?)?)?/i,fri:/^fr(i(day)?)?/i,sat:/^sa(t(urday)?)?/i,future:/^next/i,past:/^last|past|prev(ious)?/i,add:/^(\+|after|from)/i,subtract:/^(\-|before|ago)/i,yesterday:/^yesterday/i,today:/^t(oday)?/i,tomorrow:/^tomorrow/i,now:/^n(ow)?/i,millisecond:/^ms|milli(second)?s?/i,second:/^sec(ond)?s?/i,minute:/^min(ute)?s?/i,hour:/^h(ou)?rs?/i,week:/^w(ee)?k/i,month:/^m(o(nth)?s?)?/i,day:/^d(ays?)?/i,year:/^y((ea)?rs?)?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a|p)/i},abbreviatedTimeZoneStandard:{GMT:"-000",EST:"-0400",CST:"-0500",MST:"-0600",PST:"-0700"},abbreviatedTimeZoneDST:{GMT:"-000",EDT:"-0500",CDT:"-0600",MDT:"-0700",PDT:"-0800"}};Date.getMonthNumberFromName=function(name){var n=Date.CultureInfo.monthNames,m=Date.CultureInfo.abbreviatedMonthNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.getDayNumberFromName=function(name){var n=Date.CultureInfo.dayNames,m=Date.CultureInfo.abbreviatedDayNames,o=Date.CultureInfo.shortestDayNames,s=name.toLowerCase();for(var i=0;i<n.length;i++){if(n[i].toLowerCase()==s||m[i].toLowerCase()==s){return i;}}
return-1;};Date.isLeapYear=function(year){return(((year%4===0)&&(year%100!==0))||(year%400===0));};Date.getDaysInMonth=function(year,month){return[31,(Date.isLeapYear(year)?29:28),31,30,31,30,31,31,30,31,30,31][month];};Date.getTimezoneOffset=function(s,dst){return(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST[s.toUpperCase()]:Date.CultureInfo.abbreviatedTimeZoneStandard[s.toUpperCase()];};Date.getTimezoneAbbreviation=function(offset,dst){var n=(dst||false)?Date.CultureInfo.abbreviatedTimeZoneDST:Date.CultureInfo.abbreviatedTimeZoneStandard,p;for(p in n){if(n[p]===offset){return p;}}
return null;};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.compareTo=function(date){if(isNaN(this)){throw new Error(this);}
if(date instanceof Date&&!isNaN(date)){return(this>date)?1:(this<date)?-1:0;}else{throw new TypeError(date);}};Date.prototype.equals=function(date){return(this.compareTo(date)===0);};Date.prototype.between=function(start,end){var t=this.getTime();return t>=start.getTime()&&t<=end.getTime();};Date.prototype.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};Date.prototype.addSeconds=function(value){return this.addMilliseconds(value*1000);};Date.prototype.addMinutes=function(value){return this.addMilliseconds(value*60000);};Date.prototype.addHours=function(value){return this.addMilliseconds(value*3600000);};Date.prototype.addDays=function(value){return this.addMilliseconds(value*86400000);};Date.prototype.addWeeks=function(value){return this.addMilliseconds(value*604800000);};Date.prototype.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,this.getDaysInMonth()));return this;};Date.prototype.addYears=function(value){return this.addMonths(value*12);};Date.prototype.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
var x=config;if(x.millisecond||x.milliseconds){this.addMilliseconds(x.millisecond||x.milliseconds);}
if(x.second||x.seconds){this.addSeconds(x.second||x.seconds);}
if(x.minute||x.minutes){this.addMinutes(x.minute||x.minutes);}
if(x.hour||x.hours){this.addHours(x.hour||x.hours);}
if(x.month||x.months){this.addMonths(x.month||x.months);}
if(x.year||x.years){this.addYears(x.year||x.years);}
if(x.day||x.days){this.addDays(x.day||x.days);}
return this;};Date._validate=function(value,min,max,name){if(typeof value!="number"){throw new TypeError(value+" is not a Number.");}else if(value<min||value>max){throw new RangeError(value+" is not a valid value for "+name+".");}
return true;};Date.validateMillisecond=function(n){return Date._validate(n,0,999,"milliseconds");};Date.validateSecond=function(n){return Date._validate(n,0,59,"seconds");};Date.validateMinute=function(n){return Date._validate(n,0,59,"minutes");};Date.validateHour=function(n){return Date._validate(n,0,23,"hours");};Date.validateDay=function(n,year,month){return Date._validate(n,1,Date.getDaysInMonth(year,month),"days");};Date.validateMonth=function(n){return Date._validate(n,0,11,"months");};Date.validateYear=function(n){return Date._validate(n,1,9999,"seconds");};Date.prototype.set=function(config){var x=config;if(!x.millisecond&&x.millisecond!==0){x.millisecond=-1;}
if(!x.second&&x.second!==0){x.second=-1;}
if(!x.minute&&x.minute!==0){x.minute=-1;}
if(!x.hour&&x.hour!==0){x.hour=-1;}
if(!x.day&&x.day!==0){x.day=-1;}
if(!x.month&&x.month!==0){x.month=-1;}
if(!x.year&&x.year!==0){x.year=-1;}
if(x.millisecond!=-1&&Date.validateMillisecond(x.millisecond)){this.addMilliseconds(x.millisecond-this.getMilliseconds());}
if(x.second!=-1&&Date.validateSecond(x.second)){this.addSeconds(x.second-this.getSeconds());}
if(x.minute!=-1&&Date.validateMinute(x.minute)){this.addMinutes(x.minute-this.getMinutes());}
if(x.hour!=-1&&Date.validateHour(x.hour)){this.addHours(x.hour-this.getHours());}
if(x.month!==-1&&Date.validateMonth(x.month)){this.addMonths(x.month-this.getMonth());}
if(x.year!=-1&&Date.validateYear(x.year)){this.addYears(x.year-this.getFullYear());}
if(x.day!=-1&&Date.validateDay(x.day,this.getFullYear(),this.getMonth())){this.addDays(x.day-this.getDate());}
if(x.timezone){this.setTimezone(x.timezone);}
if(x.timezoneOffset){this.setTimezoneOffset(x.timezoneOffset);}
return this;};Date.prototype.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};Date.prototype.isLeapYear=function(){var y=this.getFullYear();return(((y%4===0)&&(y%100!==0))||(y%400===0));};Date.prototype.isWeekday=function(){return!(this.is().sat()||this.is().sun());};Date.prototype.getDaysInMonth=function(){return Date.getDaysInMonth(this.getFullYear(),this.getMonth());};Date.prototype.moveToFirstDayOfMonth=function(){return this.set({day:1});};Date.prototype.moveToLastDayOfMonth=function(){return this.set({day:this.getDaysInMonth()});};Date.prototype.moveToDayOfWeek=function(day,orient){var diff=(day-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};Date.prototype.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};Date.prototype.getDayOfYear=function(){return Math.floor((this-new Date(this.getFullYear(),0,1))/86400000);};Date.prototype.getWeekOfYear=function(firstDayOfWeek){var y=this.getFullYear(),m=this.getMonth(),d=this.getDate();var dow=firstDayOfWeek||Date.CultureInfo.firstDayOfWeek;var offset=7+1-new Date(y,0,1).getDay();if(offset==8){offset=1;}
var daynum=((Date.UTC(y,m,d,0,0,0)-Date.UTC(y,0,1,0,0,0))/86400000)+1;var w=Math.floor((daynum-offset+7)/7);if(w===dow){y--;var prevOffset=7+1-new Date(y,0,1).getDay();if(prevOffset==2||prevOffset==8){w=53;}else{w=52;}}
return w;};Date.prototype.isDST=function(){console.log('isDST');return this.toString().match(/(E|C|M|P)(S|D)T/)[2]=="D";};Date.prototype.getTimezone=function(){return Date.getTimezoneAbbreviation(this.getUTCOffset,this.isDST());};Date.prototype.setTimezoneOffset=function(s){var here=this.getTimezoneOffset(),there=Number(s)*-6/10;this.addMinutes(there-here);return this;};Date.prototype.setTimezone=function(s){return this.setTimezoneOffset(Date.getTimezoneOffset(s));};Date.prototype.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r[0]+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};Date.prototype.getDayName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedDayNames[this.getDay()]:Date.CultureInfo.dayNames[this.getDay()];};Date.prototype.getMonthName=function(abbrev){return abbrev?Date.CultureInfo.abbreviatedMonthNames[this.getMonth()]:Date.CultureInfo.monthNames[this.getMonth()];};Date.prototype._toString=Date.prototype.toString;Date.prototype.toString=function(format){var self=this;var p=function p(s){return(s.toString().length==1)?"0"+s:s;};return format?format.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,function(format){switch(format){case"hh":return p(self.getHours()<13?self.getHours():(self.getHours()-12));case"h":return self.getHours()<13?self.getHours():(self.getHours()-12);case"HH":return p(self.getHours());case"H":return self.getHours();case"mm":return p(self.getMinutes());case"m":return self.getMinutes();case"ss":return p(self.getSeconds());case"s":return self.getSeconds();case"yyyy":return self.getFullYear();case"yy":return self.getFullYear().toString().substring(2,4);case"dddd":return self.getDayName();case"ddd":return self.getDayName(true);case"dd":return p(self.getDate());case"d":return self.getDate().toString();case"MMMM":return self.getMonthName();case"MMM":return self.getMonthName(true);case"MM":return p((self.getMonth()+1));case"M":return self.getMonth()+1;case"t":return self.getHours()<12?Date.CultureInfo.amDesignator.substring(0,1):Date.CultureInfo.pmDesignator.substring(0,1);case"tt":return self.getHours()<12?Date.CultureInfo.amDesignator:Date.CultureInfo.pmDesignator;case"zzz":case"zz":case"z":return"";}}):this._toString();};Date.now=function(){return new Date();};Date.today=function(){return Date.now().clearTime();};Date.prototype._orient=+1;Date.prototype.next=function(){this._orient=+1;return this;};Date.prototype.last=Date.prototype.prev=Date.prototype.previous=function(){this._orient=-1;return this;};Date.prototype._is=false;Date.prototype.is=function(){this._is=true;return this;};Number.prototype._dateElement="day";Number.prototype.fromNow=function(){var c={};c[this._dateElement]=this;return Date.now().add(c);};Number.prototype.ago=function(){var c={};c[this._dateElement]=this*-1;return Date.now().add(c);};(function(){var $D=Date.prototype,$N=Number.prototype;var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),de;var df=function(n){return function(){if(this._is){this._is=false;return this.getDay()==n;}
return this.moveToDayOfWeek(n,this._orient);};};for(var i=0;i<dx.length;i++){$D[dx[i]]=$D[dx[i].substring(0,3)]=df(i);}
var mf=function(n){return function(){if(this._is){this._is=false;return this.getMonth()===n;}
return this.moveToMonth(n,this._orient);};};for(var j=0;j<mx.length;j++){$D[mx[j]]=$D[mx[j].substring(0,3)]=mf(j);}
var ef=function(j){return function(){if(j.substring(j.length-1)!="s"){j+="s";}
return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k<px.length;k++){de=px[k].toLowerCase();$D[de]=$D[de+"s"]=ef(px[k]);$N[de]=$N[de+"s"]=nf(de);}}());Date.prototype.toJSONString=function(){return this.toString("yyyy-MM-ddThh:mm:ssZ");};Date.prototype.toShortDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortDatePattern);};Date.prototype.toLongDateString=function(){return this.toString(Date.CultureInfo.formatPatterns.longDatePattern);};Date.prototype.toShortTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.shortTimePattern);};Date.prototype.toLongTimeString=function(){return this.toString(Date.CultureInfo.formatPatterns.longTimePattern);};Date.prototype.getOrdinal=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};(function(){Date.Parsing={Exception:function(s){this.message="Parse error at '"+s.substring(0,10)+" ...'";}};var $P=Date.Parsing;var _=$P.Operators={rtoken:function(r){return function(s){var mx=s.match(r);if(mx){return([mx[0],s.substring(mx[0].length)]);}else{throw new $P.Exception(s);}};},token:function(s){return function(s){return _.rtoken(new RegExp("^\s*"+s+"\s*"))(s);};},stoken:function(s){return _.rtoken(new RegExp("^"+s));},until:function(p){return function(s){var qx=[],rx=null;while(s.length){try{rx=p.call(this,s);}catch(e){qx.push(rx[0]);s=rx[1];continue;}
break;}
return[qx,s];};},many:function(p){return function(s){var rx=[],r=null;while(s.length){try{r=p.call(this,s);}catch(e){return[rx,s];}
rx.push(r[0]);s=r[1];}
return[rx,s];};},optional:function(p){return function(s){var r=null;try{r=p.call(this,s);}catch(e){return[null,s];}
return[r[0],r[1]];};},not:function(p){return function(s){try{p.call(this,s);}catch(e){return[null,s];}
throw new $P.Exception(s);};},ignore:function(p){return p?function(s){var r=null;r=p.call(this,s);return[null,r[1]];}:null;},product:function(){var px=arguments[0],qx=Array.prototype.slice.call(arguments,1),rx=[];for(var i=0;i<px.length;i++){rx.push(_.each(px[i],qx));}
return rx;},cache:function(rule){var cache={},r=null;return function(s){try{r=cache[s]=(cache[s]||rule.call(this,s));}catch(e){r=cache[s]=e;}
if(r instanceof $P.Exception){throw r;}else{return r;}};},any:function(){var px=arguments;return function(s){var r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
try{r=(px[i].call(this,s));}catch(e){r=null;}
if(r){return r;}}
throw new $P.Exception(s);};},each:function(){var px=arguments;return function(s){var rx=[],r=null;for(var i=0;i<px.length;i++){if(px[i]==null){continue;}
try{r=(px[i].call(this,s));}catch(e){throw new $P.Exception(s);}
rx.push(r[0]);s=r[1];}
return[rx,s];};},all:function(){var px=arguments,_=_;return _.each(_.optional(px));},sequence:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;if(px.length==1){return px[0];}
return function(s){var r=null,q=null;var rx=[];for(var i=0;i<px.length;i++){try{r=px[i].call(this,s);}catch(e){break;}
rx.push(r[0]);try{q=d.call(this,r[1]);}catch(ex){q=null;break;}
s=q[1];}
if(!r){throw new $P.Exception(s);}
if(q){throw new $P.Exception(q[1]);}
if(c){try{r=c.call(this,r[1]);}catch(ey){throw new $P.Exception(r[1]);}}
return[rx,(r?r[1]:s)];};},between:function(d1,p,d2){d2=d2||d1;var _fn=_.each(_.ignore(d1),p,_.ignore(d2));return function(s){var rx=_fn.call(this,s);return[[rx[0][0],r[0][2]],rx[1]];};},list:function(p,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return(p instanceof Array?_.each(_.product(p.slice(0,-1),_.ignore(d)),p.slice(-1),_.ignore(c)):_.each(_.many(_.each(p,_.ignore(d))),px,_.ignore(c)));},set:function(px,d,c){d=d||_.rtoken(/^\s*/);c=c||null;return function(s){var r=null,p=null,q=null,rx=null,best=[[],s],last=false;for(var i=0;i<px.length;i++){q=null;p=null;r=null;last=(px.length==1);try{r=px[i].call(this,s);}catch(e){continue;}
rx=[[r[0]],r[1]];if(r[1].length>0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
if(!last&&q[1].length===0){last=true;}
if(!last){var qx=[];for(var j=0;j<px.length;j++){if(i!=j){qx.push(px[j]);}}
p=_.set(qx,d).call(this,q[1]);if(p[0].length>0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
if(rx[1].length<best[1].length){best=rx;}
if(best[1].length===0){break;}}
if(best[0].length===0){return best;}
if(c){try{q=c.call(this,best[1]);}catch(ey){throw new $P.Exception(best[1]);}
best[1]=q[1];}
return best;};},forward:function(gr,fname){return function(s){return gr[fname].call(this,s);};},replace:function(rule,repl){return function(s){var r=rule.call(this,s);return[repl,r[1]];};},process:function(rule,fn){return function(s){var r=rule.call(this,s);return[fn.call(this,r[0]),r[1]];};},min:function(min,rule){return function(s){var rx=rule.call(this,s);if(rx[0].length<min){throw new $P.Exception(s);}
return rx;};}};var _generator=function(op){return function(){var args=null,rx=[];if(arguments.length>1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
if(args){for(var i=0,px=args.shift();i<px.length;i++){args.unshift(px[i]);rx.push(op.apply(null,args));args.shift();return rx;}}else{return op.apply(null,arguments);}};};var gx="optional not ignore cache".split(/\s/);for(var i=0;i<gx.length;i++){_[gx[i]]=_generator(_[gx[i]]);}
var _vector=function(op){return function(){if(arguments[0]instanceof Array){return op.apply(null,arguments[0]);}else{return op.apply(null,arguments);}};};var vx="each any all".split(/\s/);for(var j=0;j<vx.length;j++){_[vx[j]]=_vector(_[vx[j]]);}}());(function(){var flattenAndCompact=function(ax){var rx=[];for(var i=0;i<ax.length;i++){if(ax[i]instanceof Array){rx=rx.concat(flattenAndCompact(ax[i]));}else{if(ax[i]){rx.push(ax[i]);}}}
return rx;};Date.Grammar={};Date.Translator={hour:function(s){return function(){this.hour=Number(s);};},minute:function(s){return function(){this.minute=Number(s);};},second:function(s){return function(){this.second=Number(s);};},meridian:function(s){return function(){this.meridian=s.slice(0,1).toLowerCase();};},timezone:function(s){return function(){var n=s.replace(/[^\d\+\-]/g,"");if(n.length){this.timezoneOffset=Number(n);}else{this.timezone=s.toLowerCase();}};},day:function(x){var s=x[0];return function(){this.day=Number(s.match(/\d+/)[0]);};},month:function(s){return function(){this.month=((s.length==3)?Date.getMonthNumberFromName(s):(Number(s)-1));};},year:function(s){return function(){var n=Number(s);this.year=((s.length>2)?n:(n+(((n+2000)<Date.CultureInfo.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];var now=new Date();this.year=now.getFullYear();this.month=now.getMonth();this.day=1;this.hour=0;this.minute=0;this.second=0;for(var i=0;i<x.length;i++){if(x[i]){x[i].call(this);}}
this.hour=(this.meridian=="p"&&this.hour<13)?this.hour+12:this.hour;if(this.day>Date.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
for(var i=0;i<x.length;i++){if(typeof x[i]=="function"){x[i].call(this);}}
if(this.now){return new Date();}
var today=Date.today();var method=null;var expression=!!(this.days!=null||this.orient||this.operator);if(expression){var gap,mod,orient;orient=((this.orient=="past"||this.operator=="subtract")?-1:1);if(this.weekday){this.unit="day";gap=(Date.getDayNumberFromName(this.weekday)-today.getDay());mod=7;this.days=gap?((gap+(orient*mod))%mod):(orient*mod);}
if(this.month){this.unit="month";gap=(this.month-today.getMonth());mod=12;this.months=gap?((gap+(orient*mod))%mod):(orient*mod);this.month=null;}
if(!this.unit){this.unit="day";}
if(this[this.unit+"s"]==null||this.operator!=null){if(!this.value){this.value=1;}
if(this.unit=="week"){this.unit="day";this.value=this.value*7;}
this[this.unit+"s"]=this.value*orient;}
return today.add(this);}else{if(this.meridian&&this.hour){this.hour=(this.hour<13&&this.meridian=="p")?this.hour+12:this.hour;}
if(this.weekday&&!this.day){this.day=(today.addDays((Date.getDayNumberFromName(this.weekday)-today.getDay()))).getDate();}
if(this.month&&!this.day){this.day=1;}
return today.set(this);}}};var _=Date.Parsing.Operators,g=Date.Grammar,t=Date.Translator,_fn;g.datePartDelimiter=_.rtoken(/^([\s\-\.\,\/\x27]+)/);g.timePartDelimiter=_.stoken(":");g.whiteSpace=_.rtoken(/^\s*/);g.generalDelimiter=_.rtoken(/^(([\s\,]|at|on)+)/);var _C={};g.ctoken=function(keys){var fn=_C[keys];if(!fn){var c=Date.CultureInfo.regexPatterns;var kx=keys.split(/\s+/),px=[];for(var i=0;i<kx.length;i++){px.push(_.replace(_.rtoken(c[kx[i]]),kx[i]));}
fn=_C[keys]=_.any.apply(null,px);}
return fn;};g.ctoken2=function(key){return _.rtoken(Date.CultureInfo.regexPatterns[key]);};g.h=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2]|[1-9])/),t.hour));g.hh=_.cache(_.process(_.rtoken(/^(0[0-9]|1[0-2])/),t.hour));g.H=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3]|[0-9])/),t.hour));g.HH=_.cache(_.process(_.rtoken(/^([0-1][0-9]|2[0-3])/),t.hour));g.m=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.minute));g.mm=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.minute));g.s=_.cache(_.process(_.rtoken(/^([0-5][0-9]|[0-9])/),t.second));g.ss=_.cache(_.process(_.rtoken(/^[0-5][0-9]/),t.second));g.hms=_.cache(_.sequence([g.H,g.mm,g.ss],g.timePartDelimiter));g.t=_.cache(_.process(g.ctoken2("shortMeridian"),t.meridian));g.tt=_.cache(_.process(g.ctoken2("longMeridian"),t.meridian));g.z=_.cache(_.process(_.rtoken(/^(\+|\-)?\s*\d\d\d\d?/),t.timezone));g.zz=_.cache(_.process(_.rtoken(/^(\+|\-)\s*\d\d\d\d/),t.timezone));g.zzz=_.cache(_.process(g.ctoken2("timezone"),t.timezone));g.timeSuffix=_.each(_.ignore(g.whiteSpace),_.set([g.tt,g.zzz]));g.time=_.each(_.optional(_.ignore(_.stoken("T"))),g.hms,g.timeSuffix);g.d=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1]|\d)/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.dd=_.cache(_.process(_.each(_.rtoken(/^([0-2]\d|3[0-1])/),_.optional(g.ctoken2("ordinalSuffix"))),t.day));g.ddd=g.dddd=_.cache(_.process(g.ctoken("sun mon tue wed thu fri sat"),function(s){return function(){this.weekday=s;};}));g.M=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d|\d)/),t.month));g.MM=_.cache(_.process(_.rtoken(/^(1[0-2]|0\d)/),t.month));g.MMM=g.MMMM=_.cache(_.process(g.ctoken("jan feb mar apr may jun jul aug sep oct nov dec"),t.month));g.y=_.cache(_.process(_.rtoken(/^(\d\d?)/),t.year));g.yy=_.cache(_.process(_.rtoken(/^(\d\d)/),t.year));g.yyy=_.cache(_.process(_.rtoken(/^(\d\d?\d?\d?)/),t.year));g.yyyy=_.cache(_.process(_.rtoken(/^(\d\d\d\d)/),t.year));_fn=function(){return _.each(_.any.apply(null,arguments),_.not(g.ctoken2("timeContext")));};g.day=_fn(g.d,g.dd);g.month=_fn(g.M,g.MMM);g.year=_fn(g.yyyy,g.yy);g.orientation=_.process(g.ctoken("past future"),function(s){return function(){this.orient=s;};});g.operator=_.process(g.ctoken("add subtract"),function(s){return function(){this.operator=s;};});g.rday=_.process(g.ctoken("yesterday tomorrow today now"),t.rday);g.unit=_.process(g.ctoken("minute hour day week month year"),function(s){return function(){this.unit=s;};});g.value=_.process(_.rtoken(/^\d\d?(st|nd|rd|th)?/),function(s){return function(){this.value=s.replace(/\D/g,"");};});g.expression=_.set([g.rday,g.operator,g.value,g.unit,g.orientation,g.ddd,g.MMM]);_fn=function(){return _.set(arguments,g.datePartDelimiter);};g.mdy=_fn(g.ddd,g.month,g.day,g.year);g.ymd=_fn(g.ddd,g.year,g.month,g.day);g.dmy=_fn(g.ddd,g.day,g.month,g.year);g.date=function(s){return((g[Date.CultureInfo.dateElementOrder]||g.mdy).call(this,s));};g.format=_.process(_.many(_.any(_.process(_.rtoken(/^(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?)/),function(fmt){if(g[fmt]){return g[fmt];}else{throw Date.Parsing.Exception(fmt);}}),_.process(_.rtoken(/^[^dMyhHmstz]+/),function(s){return _.ignore(_.stoken(s));}))),function(rules){return _.process(_.each.apply(null,rules),t.finishExact);});var _F={};var _get=function(f){return _F[f]=(_F[f]||g.format(f)[0]);};g.formats=function(fx){if(fx instanceof Array){var rx=[];for(var i=0;i<fx.length;i++){rx.push(_get(fx[i]));}
return _.any.apply(null,rx);}else{return _get(fx);}};g._formats=g.formats(["yyyy-MM-ddTHH:mm:ss","ddd, MMM dd, yyyy H:mm:ss tt","ddd MMM d yyyy HH:mm:ss zzz","d"]);g._start=_.process(_.set([g.date,g.time,g.expression],g.generalDelimiter,g.whiteSpace),t.finish);g.start=function(s){try{var r=g._formats.call({},s);if(r[1].length===0){return r;}}catch(e){}
return g._start.call({},s);};}());Date._parse=Date.parse;Date.parse=function(s){var r=null;if(!s){return null;}
try{r=Date.Grammar.start.call({},s);}catch(e){return null;}
return((r[1].length===0)?r[0]:null);};Date.getParseFunction=function(fx){var fn=Date.Grammar.formats(fx);return function(s){var r=null;try{r=fn.call({},s);}catch(e){return null;}
return((r[1].length===0)?r[0]:null);};};Date.parseExact=function(s,fx){return Date.getParseFunction(fx)(s);};jQuery.fn.increase_widget=function(options){tpl='<div class="increase_widget"><span class="state"><a class="increase ui-icon ui-icon-triangle-1-n" href="#">+</a></span><span class="state"><a class="decrease ui-icon ui-icon-triangle-1-s" href="#">-</a></span></div>';var settings=jQuery.extend({min:0,max:false},options);this.each(function(){var input=this;var w=jQuery(tpl).insertAfter(this);jQuery('.increase',w).click(function(e){e.preventDefault();value=jQuery(input).val();if(settings.max===false||value<settings.max){value++;jQuery(input).val(value);jQuery(input).trigger('change');};});jQuery('.decrease',w).click(function(e){e.preventDefault();value=jQuery(input).val();if(settings.min===false||value>settings.min){value--;jQuery(input).val(value);jQuery(input).trigger('change');};});jQuery('a',w).hover(function(){jQuery(this).parent('.state').addClass('ui-state-highlight');},function(){jQuery(this).parent('.state').removeClass('ui-state-highlight');});});};(function(){function u(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(b.isFunction(a.isEqual))return a.isEqual(c);if(b.isFunction(c.isEqual))return c.isEqual(a);var e=typeof a;if(e!=typeof c)return false;if(!a!=!c)return false;if(b.isNaN(a))return b.isNaN(c);var g=b.isString(a),f=b.isString(c);if(g||f)return g&&f&&String(a)==String(c);g=b.isNumber(a);f=b.isNumber(c);if(g||f)return g&&f&&+a==+c;g=b.isBoolean(a);f=b.isBoolean(c);if(g||f)return g&&f&&+a==+c;g=b.isDate(a);f=b.isDate(c);if(g||f)return g&&f&&a.getTime()==c.getTime();g=b.isRegExp(a);f=b.isRegExp(c);if(g||f)return g&&f&&a.source==c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase;if(e!="object")return false;if(a.length!==c.length)return false;if(a.constructor!==c.constructor)return false;for(e=d.length;e--;)if(d[e]==a)return true;d.push(a);var e=0,g=true,h;for(h in a)if(m.call(a,h)&&(e++,!(g=m.call(c,h)&&u(a[h],c[h],d))))break;if(g){for(h in c)if(m.call(c,h)&&!e--)break;g=!e}d.pop();return g}var r=this,F=r._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,G=k.unshift,l=p.toString,m=p.hasOwnProperty,v=k.forEach,w=k.map,x=k.reduce,y=k.reduceRight,z=k.filter,A=k.every,B=k.some,q=k.indexOf,C=k.lastIndexOf,p=Array.isArray,H=Object.keys,s=Function.prototype.bind,b=function(a){return new n(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else typeof define==="function"&&define.amd?define("underscore",function(){return b}):r._=b;b.VERSION="1.2.1";var j=b.each=b.forEach=function(a,c,b){if(a!=null)if(v&&a.forEach===v)a.forEach(c,b);else if(a.length===+a.length)for(var e=0,g=a.length;e<g;e++){if(e in a&&c.call(b,a[e],e,a)===o)break}else for(e in a)if(m.call(a,e)&&c.call(b,a[e],e,a)===o)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.map===w)return a.map(c,b);j(a,function(a,f,h){e[e.length]=c.call(b,a,f,h)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var g=d!==void 0;a==null&&(a=[]);if(x&&a.reduce===x)return e&&(c=b.bind(c,e)),g?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){g?d=c.call(e,d,a,b,i):(d=a,g=true)});if(!g)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){a==null&&(a=[]);if(y&&a.reduceRight===y)return e&&(c=b.bind(c,e)),d!==void 0?a.reduceRight(c,d):a.reduceRight(c);a=(b.isArray(a)?a.slice():b.toArray(a)).reverse();return b.reduce(a,c,d,e)};b.find=b.detect=function(a,c,b){var e;D(a,function(a,f,h){if(c.call(b,a,f,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.filter===z)return a.filter(c,b);j(a,function(a,f,h){c.call(b,a,f,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,f,h){c.call(b,a,f,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(A&&a.every===A)return a.every(c,b);j(a,function(a,f,h){if(!(e=e&&c.call(b,a,f,h)))return o});return e};var D=b.some=b.any=function(a,c,d){var c=c||b.identity,e=false;if(a==null)return e;if(B&&a.some===B)return a.some(c,d);j(a,function(a,b,h){if(e|=c.call(d,a,b,h))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return q&&a.indexOf===q?a.indexOf(c)!=-1:b=D(a,function(a){if(a===c)return true})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(c.call?c||a:a[c]).apply(a,d)})};b.pluck=function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,g){g==0?b[0]=a:(d=Math.floor(Math.random()*(g+1)),b[g]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,f){return{value:a,criteria:c.call(d,a,b,f)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,g=a.length;e<g;){var f=e+g>>1;d(a[f])<d(c)?e=f+1:g=f}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,a.length-b):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,f,h){if(0==h||(c===true?b.last(d)!=f:!b.include(d,f)))d[d.length]=f,e[e.length]=a[h];return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a,c){return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(q&&a.indexOf===q)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(C&&a.lastIndexOf===C)return a.lastIndexOf(b);for(var d=a.length;d--;)if(a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),g=0,f=Array(e);g<e;)f[g++]=a,a+=d;return f};var E=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));E.prototype=a.prototype;var b=new E,f=a.apply(b,e.concat(i.call(arguments)));return Object(f)===f?f:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var b=c.apply(this,arguments);return m.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,g,f,h;h=b.debounce(function(){f=false},c);return function(){e=this;g=arguments;var b;d||(d=setTimeout(function(){d=null;a.apply(e,g);h()},c));f||a.apply(e,g);h&&h();f=true}};b.debounce=function(a,b){var d;return function(){var e=this,g=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=i.call(arguments);return function(){for(var b=i.call(arguments),d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return function(){if(--a<1)return b.apply(this,arguments)}};b.keys=H||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)m.call(a,d)&&(b[b.length]=d);return b};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return u(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(m.call(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=l.call(arguments)=="[object Arguments]"?function(a){return l.call(a)=="[object Arguments]"}:function(a){return!(!a||!m.call(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){r._=F;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),function(c){I(c,b[c]=a[c])})};var J=0;b.uniqueId=function(a){var b=J++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape,function(a,b){return"',_.escape("+b.replace(/\\'/g,"'")+"),'"}).replace(d.interpolate,function(a,b){return"',"+b.replace(/\\'/g,"'")+",'"}).replace(d.evaluate||null,function(a,b){return"');"+b.replace(/\\'/g,"'").replace(/[\r\n\t]/g," ")+"__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",d=new Function("obj",d);return c?d(c):d};var n=function(a){this._wrapped=a};b.prototype=n.prototype;var t=function(a,c){return c?b(a).chain():a},I=function(a,c){n.prototype[a]=function(){var a=i.call(arguments);G.call(a,this._wrapped);return t(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];n.prototype[a]=function(){b.apply(this._wrapped,arguments);return t(this._wrapped,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];n.prototype[a]=function(){return t(b.apply(this._wrapped,arguments),this._chain)}});n.prototype.chain=function(){this._chain=true;return this};n.prototype.value=function(){return this._wrapped}})();if(!this.JSON){this.JSON={};}
(function(){function f(n){return n<10?'0'+n:n;}
if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+'-'+
f(this.getUTCMonth()+1)+'-'+
f(this.getUTCDate())+'T'+
f(this.getUTCHours())+':'+
f(this.getUTCMinutes())+':'+
f(this.getUTCSeconds())+'Z':null;};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf();};}
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});};}
if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+
('0000'+a.charCodeAt(0).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');};}}());(function(){var h=this,p=h.Backbone,e;e=typeof exports!=="undefined"?exports:h.Backbone={};e.VERSION="0.5.3";var f=h._;if(!f&&typeof require!=="undefined")f=require("underscore")._;var g=h.jQuery||h.Zepto;e.noConflict=function(){h.Backbone=p;return this};e.emulateHTTP=!1;e.emulateJSON=!1;e.Events={bind:function(a,b,c){var d=this._callbacks||(this._callbacks={});(d[a]||(d[a]=[])).push([b,c]);return this},unbind:function(a,b){var c;if(a){if(c=this._callbacks)if(b){c=c[a];if(!c)return this;for(var d=0,e=c.length;d<e;d++)if(c[d]&&b===c[d][0]){c[d]=null;break}}else c[a]=[]}else this._callbacks={};return this},trigger:function(a){var b,c,d,e,f=2;if(!(c=this._callbacks))return this;for(;f--;)if(b=f?a:"all",b=c[b])for(var g=0,h=b.length;g<h;g++)(d=b[g])?(e=f?Array.prototype.slice.call(arguments,1):arguments,d[0].apply(d[1]||this,e)):(b.splice(g,1),g--,h--);return this}};e.Model=function(a,b){var c;a||(a={});if(c=this.defaults)f.isFunction(c)&&(c=c.call(this)),a=f.extend({},c,a);this.attributes={};this._escapedAttributes={};this.cid=f.uniqueId("c");this.set(a,{silent:!0});this._changed=!1;this._previousAttributes=f.clone(this.attributes);if(b&&b.collection)this.collection=b.collection;this.initialize(a,b)};f.extend(e.Model.prototype,e.Events,{_previousAttributes:null,_changed:!1,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;if(b=this._escapedAttributes[a])return b;b=this.attributes[a];return this._escapedAttributes[a]=(b==null?"":""+b).replace(/&(?!\w+;|#\d+;|#x[\da-f]+;)/gi,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")},has:function(a){return this.attributes[a]!=null},set:function(a,b){b||(b={});if(!a)return this;if(a.attributes)a=a.attributes;var c=this.attributes,d=this._escapedAttributes;if(!b.silent&&this.validate&&!this._performValidation(a,b))return!1;if(this.idAttribute in a)this.id=a[this.idAttribute];var e=this._changing;this._changing=!0;for(var g in a){var h=a[g];if(!f.isEqual(c[g],h))c[g]=h,delete d[g],this._changed=!0,b.silent||this.trigger("change:"+g,this,h,b)}!e&&!b.silent&&this._changed&&this.change(b);this._changing=!1;return this},unset:function(a,b){if(!(a in this.attributes))return this;b||(b={});var c={};c[a]=void 0;if(!b.silent&&this.validate&&!this._performValidation(c,b))return!1;delete this.attributes[a];delete this._escapedAttributes[a];a==this.idAttribute&&delete this.id;this._changed=!0;b.silent||(this.trigger("change:"+a,this,void 0,b),this.change(b));return this},clear:function(a){a||(a={});var b,c=this.attributes,d={};for(b in c)d[b]=void 0;if(!a.silent&&this.validate&&!this._performValidation(d,a))return!1;this.attributes={};this._escapedAttributes={};this._changed=!0;if(!a.silent){for(b in c)this.trigger("change:"+b,this,void 0,a);this.change(a)}return this},fetch:function(a){a||(a={});var b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&&c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"read",this,a)},save:function(a,b){b||(b={});if(a&&!this.set(a,b))return!1;var c=this,d=b.success;b.success=function(a,e,f){if(!c.set(c.parse(a,f),b))return!1;d&&d(c,a,f)};b.error=i(b.error,c,b);var f=this.isNew()?"create":"update";return(this.sync||e.sync).call(this,f,this,b)},destroy:function(a){a||(a={});if(this.isNew())return this.trigger("destroy",this,this.collection,a);var b=this,c=a.success;a.success=function(d){b.trigger("destroy",b,b.collection,a);c&&c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"delete",this,a)},url:function(){var a=k(this.collection)||this.urlRoot||l();if(this.isNew())return a;return a+(a.charAt(a.length-1)=="/"?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this)},isNew:function(){return this.id==null},change:function(a){this.trigger("change",this,a);this._previousAttributes=f.clone(this.attributes);this._changed=!1},hasChanged:function(a){if(a)return this._previousAttributes[a]!=this.attributes[a];return this._changed},changedAttributes:function(a){a||(a=this.attributes);var b=this._previousAttributes,c=!1,d;for(d in a)f.isEqual(b[d],a[d])||(c=c||{},c[d]=a[d]);return c},previous:function(a){if(!a||!this._previousAttributes)return null;return this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},_performValidation:function(a,b){var c=this.validate(a);if(c)return b.error?b.error(this,c,b):this.trigger("error",this,c,b),!1;return!0}});e.Collection=function(a,b){b||(b={});if(b.comparator)this.comparator=b.comparator;f.bindAll(this,"_onModelEvent","_removeReference");this._reset();a&&this.reset(a,{silent:!0});this.initialize.apply(this,arguments)};f.extend(e.Collection.prototype,e.Events,{model:e.Model,initialize:function(){},toJSON:function(){return this.map(function(a){return a.toJSON()})},add:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)this._add(a[c],b);else this._add(a,b);return this},remove:function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)this._remove(a[c],b);else this._remove(a,b);return this},get:function(a){if(a==null)return null;return this._byId[a.id!=null?a.id:a]},getByCid:function(a){return a&&this._byCid[a.cid||a]},at:function(a){return this.models[a]},sort:function(a){a||(a={});if(!this.comparator)throw Error("Cannot sort a set without a comparator");this.models=this.sortBy(this.comparator);a.silent||this.trigger("reset",this,a);return this},pluck:function(a){return f.map(this.models,function(b){return b.get(a)})},reset:function(a,b){a||(a=[]);b||(b={});this.each(this._removeReference);this._reset();this.add(a,{silent:!0});b.silent||this.trigger("reset",this,b);return this},fetch:function(a){a||(a={});var b=this,c=a.success;a.success=function(d,f,e){b[a.add?"add":"reset"](b.parse(d,e),a);c&&c(b,d)};a.error=i(a.error,b,a);return(this.sync||e.sync).call(this,"read",this,a)},create:function(a,b){var c=this;b||(b={});a=this._prepareModel(a,b);if(!a)return!1;var d=b.success;b.success=function(a,e,f){c.add(a,b);d&&d(a,e,f)};a.save(null,b);return a},parse:function(a){return a},chain:function(){return f(this.models).chain()},_reset:function(){this.length=0;this.models=[];this._byId={};this._byCid={}},_prepareModel:function(a,b){if(a instanceof e.Model){if(!a.collection)a.collection=this}else{var c=a;a=new this.model(c,{collection:this});a.validate&&!a._performValidation(c,b)&&(a=!1)}return a},_add:function(a,b){b||(b={});a=this._prepareModel(a,b);if(!a)return!1;var c=this.getByCid(a);if(c)throw Error(["Can't add the same model to a set twice",c.id]);this._byId[a.id]=a;this._byCid[a.cid]=a;this.models.splice(b.at!=null?b.at:this.comparator?this.sortedIndex(a,this.comparator):this.length,0,a);a.bind("all",this._onModelEvent);this.length++;b.silent||a.trigger("add",a,this,b);return a},_remove:function(a,b){b||(b={});a=this.getByCid(a)||this.get(a);if(!a)return null;delete this._byId[a.id];delete this._byCid[a.cid];this.models.splice(this.indexOf(a),1);this.length--;b.silent||a.trigger("remove",a,this,b);this._removeReference(a);return a},_removeReference:function(a){this==a.collection&&delete a.collection;a.unbind("all",this._onModelEvent)},_onModelEvent:function(a,b,c,d){(a=="add"||a=="remove")&&c!=this||(a=="destroy"&&this._remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],this._byId[b.id]=b),this.trigger.apply(this,arguments))}});f.each(["forEach","each","map","reduce","reduceRight","find","detect","filter","select","reject","every","all","some","any","include","contains","invoke","max","min","sortBy","sortedIndex","toArray","size","first","rest","last","without","indexOf","lastIndexOf","isEmpty","groupBy"],function(a){e.Collection.prototype[a]=function(){return f[a].apply(f,[this.models].concat(f.toArray(arguments)))}});e.Router=function(a){a||(a={});if(a.routes)this.routes=a.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var q=/:([\w\d]+)/g,r=/\*([\w\d]+)/g,s=/[-[\]{}()+?.,\\^$|#\s]/g;f.extend(e.Router.prototype,e.Events,{initialize:function(){},route:function(a,b,c){e.history||(e.history=new e.History);f.isRegExp(a)||(a=this._routeToRegExp(a));e.history.route(a,f.bind(function(d){d=this._extractParameters(a,d);c.apply(this,d);this.trigger.apply(this,["route:"+b].concat(d))},this))},navigate:function(a,b){e.history.navigate(a,b)},_bindRoutes:function(){if(this.routes){var a=[],b;for(b in this.routes)a.unshift([b,this.routes[b]]);b=0;for(var c=a.length;b<c;b++)this.route(a[b][0],a[b][1],this[a[b][1]])}},_routeToRegExp:function(a){a=a.replace(s,"\\$&").replace(q,"([^/]*)").replace(r,"(.*?)");return RegExp("^"+a+"$")},_extractParameters:function(a,b){return a.exec(b).slice(1)}});e.History=function(){this.handlers=[];f.bindAll(this,"checkUrl")};var j=/^#*/,t=/msie [\w.]+/,m=!1;f.extend(e.History.prototype,{interval:50,getFragment:function(a,b){if(a==null)if(this._hasPushState||b){a=window.location.pathname;var c=window.location.search;c&&(a+=c);a.indexOf(this.options.root)==0&&(a=a.substr(this.options.root.length))}else a=window.location.hash;return decodeURIComponent(a.replace(j,""))},start:function(a){if(m)throw Error("Backbone.history has already been started");this.options=f.extend({},{root:"/"},this.options,a);this._wantsPushState=!!this.options.pushState;this._hasPushState=!(!this.options.pushState||!window.history||!window.history.pushState);a=this.getFragment();var b=document.documentMode;if(b=t.exec(navigator.userAgent.toLowerCase())&&(!b||b<=7))this.iframe=g('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(a);this._hasPushState?g(window).bind("popstate",this.checkUrl):"onhashchange"in window&&!b?g(window).bind("hashchange",this.checkUrl):setInterval(this.checkUrl,this.interval);this.fragment=a;m=!0;a=window.location;b=a.pathname==this.options.root;if(this._wantsPushState&&!this._hasPushState&&!b)return this.fragment=this.getFragment(null,!0),window.location.replace(this.options.root+"#"+this.fragment),!0;else if(this._wantsPushState&&this._hasPushState&&b&&a.hash)this.fragment=a.hash.replace(j,""),window.history.replaceState({},document.title,a.protocol+"//"+a.host+this.options.root+this.fragment);if(!this.options.silent)return this.loadUrl()},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();a==this.fragment&&this.iframe&&(a=this.getFragment(this.iframe.location.hash));if(a==this.fragment||a==decodeURIComponent(this.fragment))return!1;this.iframe&&this.navigate(a);this.loadUrl()||this.loadUrl(window.location.hash)},loadUrl:function(a){var b=this.fragment=this.getFragment(a);return f.any(this.handlers,function(a){if(a.route.test(b))return a.callback(b),!0})},navigate:function(a,b){var c=(a||"").replace(j,"");if(!(this.fragment==c||this.fragment==decodeURIComponent(c))){if(this._hasPushState){var d=window.location;c.indexOf(this.options.root)!=0&&(c=this.options.root+c);this.fragment=c;window.history.pushState({},document.title,d.protocol+"//"+d.host+c)}else if(window.location.hash=this.fragment=c,this.iframe&&c!=this.getFragment(this.iframe.location.hash))this.iframe.document.open().close(),this.iframe.location.hash=c;b&&this.loadUrl(a)}}});e.View=function(a){this.cid=f.uniqueId("view");this._configure(a||{});this._ensureElement();this.delegateEvents();this.initialize.apply(this,arguments)};var u=/^(\S+)\s*(.*)$/,n=["model","collection","el","id","attributes","className","tagName"];f.extend(e.View.prototype,e.Events,{tagName:"div",$:function(a){return g(a,this.el)},initialize:function(){},render:function(){return this},remove:function(){g(this.el).remove();return this},make:function(a,b,c){a=document.createElement(a);b&&g(a).attr(b);c&&g(a).html(c);return a},delegateEvents:function(a){if(a||(a=this.events))for(var b in f.isFunction(a)&&(a=a.call(this)),g(this.el).unbind(".delegateEvents"+this.cid),a){var c=this[a[b]];if(!c)throw Error('Event "'+a[b]+'" does not exist');var d=b.match(u),e=d[1];d=d[2];c=f.bind(c,this);e+=".delegateEvents"+this.cid;d===""?g(this.el).bind(e,c):g(this.el).delegate(d,e,c)}},_configure:function(a){this.options&&(a=f.extend({},this.options,a));for(var b=0,c=n.length;b<c;b++){var d=n[b];a[d]&&(this[d]=a[d])}this.options=a},_ensureElement:function(){if(this.el){if(f.isString(this.el))this.el=g(this.el).get(0)}else{var a=this.attributes||{};if(this.id)a.id=this.id;if(this.className)a["class"]=this.className;this.el=this.make(this.tagName,a)}}});e.Model.extend=e.Collection.extend=e.Router.extend=e.View.extend=function(a,b){var c=v(this,a,b);c.extend=this.extend;return c};var w={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};e.sync=function(a,b,c){var d=w[a];c=f.extend({type:d,dataType:"json"},c);if(!c.url)c.url=k(b)||l();if(!c.data&&b&&(a=="create"||a=="update"))c.contentType="application/json",c.data=JSON.stringify(b.toJSON());if(e.emulateJSON)c.contentType="application/x-www-form-urlencoded",c.data=c.data?{model:c.data}:{};if(e.emulateHTTP&&(d==="PUT"||d==="DELETE")){if(e.emulateJSON)c.data._method=d;c.type="POST";c.beforeSend=function(a){a.setRequestHeader("X-HTTP-Method-Override",d)}}if(c.type!=="GET"&&!e.emulateJSON)c.processData=!1;return g.ajax(c)};var o=function(){},v=function(a,b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){return a.apply(this,arguments)};f.extend(d,a);o.prototype=a.prototype;d.prototype=new o;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},k=function(a){if(!a||!a.url)return null;return f.isFunction(a.url)?a.url():a.url},l=function(){throw Error('A "url" property or function must be specified');},i=function(a,b,c){return function(d){a?a(b,d,c):b.trigger("error",b,d,c)}}}).call(this);(function(undefined){var Backbone=this.Backbone;Backbone.oldSync=Backbone.sync;Backbone.sync=function(method,model,options){if(method==='create'){var dfd=new $.Deferred();dfd.done(options.success);options.success=function(resp,status,xhr){if(xhr.status===201&&!resp){var location=xhr.getResponseHeader('Location');return $.ajax({url:location,success:dfd.resolve,error:dfd.reject});}
else{return dfd.resolveWith(options.context||options,[resp,status,xhr]);}};dfd.fail(options.error);options.error=dfd.reject;dfd.request=Backbone.oldSync(method,model,options);return dfd;}
return Backbone.oldSync(method,model,options);};Backbone.Model.prototype.idAttribute='resource_uri';Backbone.Model.prototype.url=function(){var url=this.id;if(!url){url=this.collection&&(_.isFunction(this.collection.url)?this.collection.url():this.collection.url);url=url||this.urlRoot;}
url&&(url+=(url.length>0&&url.charAt(url.length-1)==='/')?'':'/');return url;};Backbone.Model.prototype.parse=function(data){return data&&data.objects&&(_.isArray(data.objects)?data.objects[0]:data.objects)||data;};Backbone.Collection.prototype.parse=function(data){return data&&data.objects;};Backbone.Collection.prototype.url=function(models){var url=this.urlRoot||(models&&models.length&&models[0].urlRoot);url&&(url+=(url.length>0&&url.charAt(url.length-1)==='/')?'':'/');if(models&&models.length){var ids=_.map(models,function(model){var parts=_.compact(model.id.split('/'));return parts[parts.length-1];});url+='set/'+ids.join(';')+'/';}
return url;};})();var SYSTEMS={'metric':'mm','imperial':'in','pixels':'px'}
var UNITS={'px':1.0,'pt':1.0,'in':72.0,'mm':0.0393700787*72}
var PAPER_SIZE={'A5':[148*UNITS['mm'],210*UNITS['mm']],'A4':[210*UNITS['mm'],297*UNITS['mm']],'A3':[297*UNITS['mm'],420*UNITS['mm']],'LETTER':[216*UNITS['mm'],279*UNITS['mm']],'TABLOID':[432*UNITS['mm'],279*UNITS['mm']]}
var MAX_CANVAS_WIDTH=658;var CANVAS_DIV=$('#canvas');var e_form=$('#gridder');var e_width=$('#id_width');var e_width_unit=$('#id_width_unit');var e_height=$('#id_height');var e_height_unit=$('#id_height_unit');var e_columns=$('#id_columns');var e_columns_gutter=$('#id_columns_gutter');var e_columns_gutter_unit=$('#id_columns_gutter_unit');var e_columns_width=$('#id_cols_width');var e_columns_unit=$('#id_cols_width_unit');var e_baseline=$('#id_baseline');var e_baseline_unit=$('#id_baseline_unit');var e_margin_left=$('#id_margin_left');var e_margin_left_unit=$('#id_margin_left_unit');var e_margin_right=$('#id_margin_right');var e_margin_right_unit=$('#id_margin_right_unit');var e_margin_top=$('#id_margin_top');var e_margin_top_unit=$('#id_margin_top_unit');var e_margin_bottom=$('#id_margin_bottom');var e_margin_bottom_unit=$('#id_margin_bottom_unit');var e_cols_width_unit=$('#id_cols_width_unit');var e_cols_color=$('#id_columns_color');var e_baseline_color=$('#id_baseline_color');var e_values_units=[[e_width,e_width_unit],[e_height,e_height_unit],[e_columns_width,e_columns_unit],[e_columns_gutter,e_columns_gutter_unit],[e_baseline,e_baseline_unit],[e_margin_left,e_margin_left_unit],[e_margin_right,e_margin_right_unit],[e_margin_top,e_margin_top_unit],[e_margin_bottom,e_margin_bottom_unit]];AppRouter=Backbone.Router.extend({routes:{"grids/:grid_id":"grid_detail"},grid_detail:function(grid_id){}});var Grid=Backbone.Model.extend({defaults:{'name':'Untitled','width':210,'width_unit':'mm','height':297,'height_unit':'mm','margin_top':5,'margin_top_unit':'mm','margin_bottom':5,'margin_bottom_unit':'mm','margin_left':5,'margin_left_unit':'mm','margin_right':5,'margin_right_unit':'mm','columns':7,'columns_color':'#eeeeee','columns_opacity':1.0,'columns_width':26,'columns_width_unit':'mm','columns_gutter':3,'columns_gutter_unit':'mm','baseline_size':15,'baseline_size_unit':'pt','baseline_color':"#c0c0c0",'baseline_opacity':1.0},validators:{'width':'isNumber','height':'isNumber','margin_top':'isNumber','margin_bottom':'isNumber','margin_left':'isNumber','margin_right':'isNumber','columns':'isInteger','columns_color':'isColor','columns_opacity':'isAlpha','columns_width':'isNumber','columns_gutter':'isNumber','baseline_size':'isNumber','baseline_color':'isColor','baseline_opacity':'isAlpha','summary':'isString','created':'isDate'},unitAttributes:['width_unit','height_unit','margin_top_unit','margin_bottom_unit','margin_left_unit','margin_right_unit','columns_gutter_unit','columns_width_unit','baseline_size_unit'],widthAttributes:['width','margin_left','margin_right','columns','columns_gutter'],initialize:function(){this.collection=new GridCollection;if(!this.id){this.set(this.defaults,{silent:true});}
this.setColumnsWidthForInnerArea();_.each(this.widthAttributes,function(k){this.bind('change:'+k,this.setColumnsWidthForInnerArea,this);},this);this.bind('change:columns_width',this.setGutterWidthForInnerArea);this.bind('change:columns',this.updateSummary,this);this.bind('change:columns_gutter',this.updateSummary,this);this.bind('change:columns_gutter_unit',this.updateSummary,this);this.bind('change:baseline_size',this.updateSummary,this);this.bind('change:baseline_size_unit',this.updateSummary,this);this.bind('change:is_spread',this.updateSummary,this);_.each(this.unitAttributes,function(k){this.bind('change:'+k,this.updateValue,this);},this);},innerAreaWidth:function(){page_width=this.normalize('width');margin_left=this.normalize('margin_left');margin_right=this.normalize('margin_right');inner_width=page_width-margin_left-margin_right;return inner_width;},columnsWidthForInnerArea:function(){settings={'gutter':this.normalize('columns_gutter'),'colsN':this.get('columns'),'areaWidth':this.innerAreaWidth()};width=(settings.areaWidth-(settings.gutter*(settings.colsN-1)))/settings.colsN;return this.convertValueToUnit(width,this.get('columns_width_unit'));},gutterWidthForInnerArea:function(){settings={'columnsWidth':this.normalize('columns_width'),'colsN':this.get('columns'),'areaWidth':this.innerAreaWidth()};gutter=(settings.areaWidth-(settings.columnsWidth*settings.colsN))/(settings.colsN-1);return this.convertValueToUnit(gutter,this.get('gutter_unit'));},setGutterWidthForInnerArea:function(){this.set({'columns_gutter':this.gutterWidthForInnerArea()});},setColumnsWidthForInnerArea:function(){if(this.get('columns_gutter')){this.set({'columns_width':this.columnsWidthForInnerArea()});}},normalizeFromUnit:function(param,unit){val=this.get(param);return val*UNITS[unit];},normalize:function(param){unit=this.get(param+'_unit');return this.normalizeFromUnit(param,unit);},convertValueToUnit:function(val,unit){return val/UNITS[unit];},convertToUnit:function(param,unit){val=this.get(param);return this.convertValueToUnit(val,unit);},convert:function(param){unit=this.get(param+'_unit');return this.convertToUnit(param,unit);},noopValidator:function(value){return true;},isNumber:function(value){if(_.isNaN(value)||!_.isNumber(value)){return"This value should be a Number.";}
return true;},isInteger:function(value){isNumber=this.isNumber(value);if(isNumber===true){if(value%1!=0){return"This value must be an Integer.";}}
return isNumber;},isDate:function(value){if(_.isString(value)){value=new Date(value);}
if(!_.isDate(value)){return"This value must be a valid date."}
return true;},isAlpha:function(value){if(_.isString(value)){value=parseFloat(value);}
isNumber=this.isNumber(value);if(isNumber===true){if(value<0||value>1){return"This value must be between 0 and 1.";}}
return isNumber;},isColor:function(value){if(value.match(/#[0-9,a-f,A-F]{3,6}/)==null){return("This value must be a valid hex color");}
return true;},isString:function(value){if(!_.isString(value)){return"This value must be a string."}
return true;},validateValue:function(validatorName,value){return this[validatorName](value);},validate:function(attrs){errors={};ctx={model:this,errors:errors};_.each(attrs,function(value,key,attrs){validator=this.model.validators[key];if(validator){validatorResult=this.model.validateValue(validator,value)
if(validatorResult!==true){if(_.isUndefined(this.errors[key])){this.errors[key]=[];}
this.errors[key].push(validatorResult);}}},ctx);if(!_.isEmpty(errors)){return errors;}},buildSummary:function(){if(this.get('is_spread')){summary='Spread, ';}else{summary='';}
summary+=this.get('columns')+' cols, gutter '+this.get('columns_gutter').toFixed(1)+this.get('columns_gutter_unit')+', baseline '+this.get('baseline_size').toFixed(1)+this.get('baseline_size_unit');return summary;},updateValue:function(){_.each(this.changedAttributes(),function(v,k){if(_.include(this.unitAttributes,k)){param=k.split('_').slice(0,-1).join('_');newValue=this.normalizeFromUnit(param,this.previous(k))/UNITS[this.get(k)];params={};params[param]=newValue;this.set(params);}},this);},updateSummary:function(){this.set({summary:this.buildSummary()});}});GridCollection=Backbone.Collection.extend({url:'/api/v1/grids/',model:Grid});GenericView=Backbone.View.extend({initialize:function(options){this.parentView=options.parentView;if(this.parentView.model){this.parentView.bind('change:model',this.changeModel,this);}
return this._initialize(options);},_initialize:function(options){},changeModel:function(){this.model=this.parentView.model;this.trigger('change:model');}});var GridView=GenericView.extend({_initialize:function(options){this.page=options.page;this.model.bind('change',this.render,this);this.model.bind('change:is_spread',this.setupCanvas,this);this.setupCanvas();},getRatio:function(){canvas_width=MAX_CANVAS_WIDTH;if(this.model.get('is_spread')){canvas_width=(canvas_width/2)-4;}
ratio=canvas_width/this.model.normalize('width');return ratio;},convert_to_unit:function(value,unit){return value/UNITS[unit];},setupCanvas:function(){page_width=this.model.normalize('width');page_height=this.model.normalize('height');ratio=this.getRatio();canvas_width=page_width*ratio;canvas_height=page_height*ratio;this.el.css({width:canvas_width});if(this.model.get('is_spread')){this.el.addClass('spread');}else{this.el.removeClass('spread');};$(this.el).html('');this.canvas=Raphael($(this.el).attr('id'),canvas_width,canvas_height);this.render();},render:function(){page_width=this.model.normalize('width');page_height=this.model.normalize('height');margin_top=this.model.normalize('margin_top');margin_bottom=this.model.normalize('margin_bottom');margin_left=this.model.normalize('margin_left');margin_right=this.model.normalize('margin_right');if(this.page=='left'){temp=margin_left;margin_left=margin_right;margin_right=temp;};baseline_size=this.model.normalize('baseline_size');baseline_color=this.model.get('baseline_color');baseline_opacity=this.model.get('baseline_opacity');columns_count=this.model.get('columns');columns_width=this.model.normalize('columns_width');gutter=this.model.normalize('columns_gutter');ratio=this.getRatio();canvas=this.canvas;canvas.clear();page_scaled={'width':page_width*ratio,'height':page_height*ratio,'margin_top':margin_top*ratio,'margin_bottom':margin_bottom*ratio,'margin_left':margin_left*ratio,'margin_right':margin_right*ratio};columns_scaled={'count':columns_count,'width':columns_width*ratio,'width_unit':this.parentView.controlsView.units['width_unit'],'gutter':gutter*ratio,'gutter_unit':this.parentView.controlsView.units['gutter_unit'],'color':this.model.get('columns_color'),'opacity':this.model.get('columns_opacity')};baseline_scaled={'size':baseline_size*ratio,'color':baseline_color,'opacity':baseline_opacity};this.draw_columns(this.canvas,page_scaled,columns_scaled);this.draw_baseline(this.canvas,page_scaled,baseline_scaled);this.draw_quotes(this.canvas,page_scaled,columns_scaled,baseline_scaled);},draw_columns:function(canvas,page,columns){col_height=page['height']-page['margin_top']-page['margin_bottom'];col_rects=canvas.set();col_gutters=canvas.set();for(i=0;i<columns['count'];i++){x=page['margin_left']+(i*(columns['width']+columns['gutter']))
col=canvas.rect(x,page['margin_top'],columns['width'],col_height);$(col.node).css('opacity',columns['opacity']);col_rects.push(col);if(i<columns['count']-1){gut=canvas.rect(x+columns['width'],page['margin_top'],columns['width'],col_height)
col_gutters.push(gut);}}
col_gutters.attr('fill','white');col_gutters.attr('stroke','none');col_rects.attr('fill',columns['color']);col_rects.attr('stroke','none');},draw_quotes:function(canvas,page,columns,baseline){columns['width_unit']=this.model.get('width_unit');col_padding=5;quotes=canvas.set();lines=canvas.set();if(baseline['size']>6){step=baseline['size']*2;}else{step=24;}
x0=page['margin_left'];y0=page['margin_top'];for(i=1;i<=columns['count'];i++){w=(columns['width']*i)+(columns['gutter']*(i-1));x1=x0+w;y0+=step;line=canvas.path("M"+x0+" "+y0+"L"+x1+" "+y0);open=canvas.path("M"+x0+" "+(y0-2)+"L"+x0+" "+(y0+2));close=canvas.path("M"+x1+" "+(y0-2)+"L"+x1+" "+(y0+2));lines.push(line);lines.push(open);lines.push(close);y0+=-10;quote=canvas.text(x0+(w/2),y0,i+': '+this.convert_to_unit((w/ratio),columns['width_unit']).toFixed(2)+columns['width_unit']);quotes.push(quote);y0+=10;}
quotes.attr('text-anchor','middle');quotes.attr('fill','purple');quotes.attr('background','white');lines.attr('stroke','purple');},draw_rows:function(canvas,page,rows,ratio){row_padding=5;row_width=page['width']-page['margin_left']-page['margin_right'];row_rects=canvas.set();row_quotes=canvas.set();row_gutters=canvas.set();row_gut_quotes=canvas.set();for(i=0;i<rows['count'];i++){x=page['margin_left']+(i*(rows['width']+rows['gutter']))
row=canvas.rect(x,page['margin_left'],rows['height'],row_width);$(row.node).hover(function(){row_quotes.show();},function(){row_quotes.hide();});row_rects.push(row);if(i<rows['count']-1){gut=canvas.rect(x+rows['height'],page['margin_left'],rows['height'],row_width)
$(gut.node).hover(function(){row_gut_quotes.show();},function(){row_gut_quotes.hide();});row_gutters.push(gut);}}
for(i=0;i<rows['count'];i++){x=page['margin_top']+(i*(rows['height']+rows['gutter']))
row_quote=canvas.text(x+row_padding,page['margin_left']+5+row_padding,this.convert_to_unit((rows['height']/ratio),rows['height_unit']).toFixed(2)+rows['height_unit']);row_quotes.push(row_quote);if(i<row['count']-1){gut_quote=canvas.text(x+row['height'],page['margin_left']+5+row_padding,this.convert_to_unit((rows['gutter']/ratio),rows['gutter_unit']).toFixed(2)+rows['gutter_unit']);row_gut_quotes.push(gut_quote);}}
row_gutters.attr('fill','white');row_gutters.attr('stroke','none');row_rects.attr('fill',rows['color']);row_rects.attr('stroke','none');row_quotes.hide();row_quotes.attr('text-anchor','start');row_quotes.attr('fill','purple');row_gut_quotes.hide();row_gut_quotes.attr('text-anchor','start');row_gut_quotes.attr('fill','green');},draw_baseline:function(canvas,page,baseline){if(baseline['size']>0){baselines=canvas.set();baseline_x2=page['width']-page['margin_right'];baseline_y2=page['height']-page['margin_bottom'];y=page['margin_top']+baseline['size'];while(y<baseline_y2){line=canvas.path("M"+page['margin_left']+" "+y+"L"+baseline_x2+" "+y);y+=baseline['size'];$(line.node).css('opacity',baseline['opacity']);baselines.push(line);}
baselines.attr('stroke',baseline['color']);}}});GridRowView=GenericView.extend({tagName:'li',className:"hentry",events:{'click .star':"toggleStar",'click .delete':'deleteGrid'},_initialize:function(options){_.bindAll(this,'updateStar','deleteRow');this.model.bind('change',this.updateChanged,this);this.model.bind('save',this.resetChanged,this);this.model.bind('change:star',this.updateStar);this.model.bind('change:name',this.updateTitle,this);this.model.bind('change:summary',this.updateSummary,this);this.render();},render:function(){grid=this.model;created=Date.parse(grid.get('created').split('.')[0]);created_human=created.toString('MMMM, d')+created.getOrdinal()+created.toString(' yyyy');newItem='<div class="tools"><a rel="'+grid.get('id')+'" class="star" href="'+grid.get('edit_url')+'/togglestar/" title="favorite"></a><a class="download" href="'+grid.get('grid')+'" title="download">&darr;</a><a class="delete" href="'+grid.get('edit_url')+'/delete/" rel="'+grid.get('id')+'" title="delete" title="delete">&times;</a></div><div class="details"><h5 class="entry-title"><a href="'+grid.get('edit_url')+'" title="edit this grid">'+grid.get('name')+'</a></h5><p class="entry-summary">'+grid.get('summary')+'</p><p class="published">created on '+created_human+'.</p></div>';$(this.el).html(newItem);this.updateStar();return this;},toggleStar:function(e){e.preventDefault();this.model.set({star:!this.model.get('star')});this.model.save();},deleteGrid:function(e){e.preventDefault();this.model.destroy({success:this.deleteRow});},deleteRow:function(model,response){$(this.el).addClass('deleting');$(this.el).slideUp(function(){this.parentView.removeSubView(this);});},updateChanged:function(e){changedAttributes=this.model.changedAttributes();delete changedAttributes['hash'];delete changedAttributes['grid'];if(!_.isEmpty(changedAttributes)){$(this.el).addClass('modified');}},resetChanged:function(e){$(this.el).removeClass('modified');},updateStar:function(){star=this.$('.star[rel='+this.model.get('id')+']');if(this.model.get('star')==true){star.html('★');star.parents('.hentry').addClass('starred');}else{star.html('☆');star.parents('.hentry').removeClass('starred');}},updateTitle:function(){this.$('.entry-title a').text(this.model.get('name'));},updateSummary:function(){this.$('.entry-summary').text(this.model.get('summary'));},show:function(){$(this.el).slideDown();},hide:function(){$(this.el).slideUp();},setActiveGrid:function(){$(this.el).addClass('active');},unsetActiveGrid:function(){$(this.el).removeClass('active');}});GridListView=GenericView.extend({events:{'click .category a[rel=hentry]':'filterAll','click .category a[rel=starred]':"filterStarred"},_initialize:function(options){this.rowViews=[];_.bindAll(this,'addNewGrid','refreshGrids','filterAll','filterStarred');this.collection.bind('add',this.addNewGrid,this);this.collection.bind('reset',this.refreshGrids,this);this.parentView.bind('change:model',this.setActiveRowView,this);this.refreshGrids(this.collection);},refreshGrids:function(collection,resp){this.$('.grids').html('');collection.each(function(grid){gw=this.addGridView(grid)
inserted=$(gw.el).appendTo(this.$('.grids'));},this);this.setActiveRowView();},addGridView:function(grid){gridRowView=new GridRowView({parentView:this,model:grid,id:"row-grid-"+grid.get('id')});this.rowViews.push(gridRowView);return gridRowView;},addNewGrid:function(grid){gw=this.addGridView(grid);$(gridRowView.el).addClass('just_added');inserted=$(gw.el).prependTo(this.$('.grids'));$(inserted).slideDown('slow',function(){$(this).animate({'backgroundColor':'#fafafa'},'slow',function(){$(this).removeClass('just_added');});});this.setActiveRowView();},removeSubView:function(view){$(view.el).remove();this.rowViews=_.without(this.rowViews,view);},selectFilter:function(filterEl){$(filterEl).addClass('selected').siblings().removeClass('selected');},filterAll:function(e){e.preventDefault();this.selectFilter($(e.currentTarget).parent());_.each(this.rowViews,function(view){view.show();});},setActiveRowView:function(){if(this.parentView.model){grid=this.parentView.model;_.map(this.rowViews,function(rowView){if(rowView.model==this){rowView.setActiveGrid();}else{rowView.unsetActiveGrid();}},grid);}},filterStarred:function(e){e.preventDefault();this.selectFilter($(e.currentTarget).parent());_.each(this.rowViews,function(view){if(!$(view.el).hasClass('starred')){view.hide();};});}});TitleView=GenericView.extend({tagName:'h2',events:{"keyup":"setValue",},_initialize:function(options){this.param=options.parameter;this.model.bind('change:'+this.param,this.getValue,this);this.parentView.bind('change:model',this.getValue,this);this.setValue();},setValue:function(){params={}
if(this.$('input')){this.value=$(this.$('input')).val();}else{this.value=$(this.el).text();};params[this.param]=this.value;this.model.set(params);},getValue:function(){if(this.$('input')){$(this.$('input')).val(this.model.get(this.param));}else{$(this.el).text(this.model.get(this.param));}}});ValueView=GenericView.extend({events:{"keyup":"setValue","change":"highlightInteger"},tagName:'input',_initialize:function(options){this.param=options.parameter;this.valueElement=$(this.el);_.bindAll(this,'getValue','showErrors');this.setValue();this.model.bind('change:'+this.param,this.getValue);this.getValue();this.valueElement.trigger('change');},setValue:function(){params={};this.value=this.fixComma(this.valueElement.val());params[this.param]=this.value;this.clearErrors();this.model.set(params,{'error':this.showErrors});},fixComma:function(value){parsed=parseFloat(value.replace(',','.'))
if(_.isNumber(parsed))return parsed;return NaN;},prettyPrint:function(value){if(_.isNumber(value))return value.toFixed(2);return NaN;},highlightInteger:function(){value=this.fixComma(this.valueElement.val());if((value.toFixed(2)%1)==0){this.valueElement.addClass('integer');}else{this.valueElement.removeClass('integer');}},getValue:function(){value=this.model.get(this.param);if(value!=this.value){this.value=value;this.valueElement.val(this.prettyPrint(this.value));};},showErrors:function(model,errors){return this.parentView.showErrors(model,errors);},clearErrors:function(){return this.parentView.clearErrors();}});UnitView=GenericView.extend({events:{"change":"setValue",},tagName:'select',_initialize:function(options){this.param=options.parameter;this.unitElement=$(this.el);this.setValue();_.bindAll(this,'getValue','showErrors');this.model.bind('change:'+this.param,this.getValue);this.getValue();},setValue:function(){this.value=this.unitElement.val();if(this.model.get(this.param)!=this.value){params={};params[this.param]=this.value;this.clearErrors();this.model.set(params,{'error':this.showErrors});}},getValue:function(){if(this.model.get(this.param)!=this.value){value=this.model.get(this.param);this.unitElement.val(value);this.value=value;};},showErrors:function(model,errors){return this.parentView.showErrors(model,errors);},clearErrors:function(){return this.parentView.clearErrors();}});IncreaseView=GenericView.extend({events:{"change input[type=text]":"setValue",},_initialize:function(options){this.param=options.parameter;this.valueElement=this.$('input[type=text]');this.valueElement.increase_widget({min:1});_.bindAll(this,'getValue','showErrors');this.setValue();this.model.bind('change:'+this.param,this.getValue);},setValue:function(){params={};this.value=parseInt(this.valueElement.val());params[this.param]=this.value;this.clearErrors()
this.model.set(params,{'error':this.showErrors});},getValue:function(){value=this.model.get(this.param);if(value!=this.value){this.value=value;this.valueElement.val(this.value);};},clearErrors:function(){$(this.el).removeClass('error');$(this.el).siblings('.errorMessage').slideUp(function(){$(this).remove();});},showErrors:function(model,errors){if(this.valueElement.val()!=''){$(this.el).addClass('error');errorList=errors[this.param];_.each(errorList,function(error){errorSpan=$('<p class="errorMessage">'+error+'</p>');$(this.el).before(errorSpan);errorSpan.slideDown();},this);}}});MeasureView=GenericView.extend({_initialize:function(options){this.param=options.parameter;this.valueView=new ValueView({parentView:this,el:this.$('input[type=text]'),model:this.model,parameter:this.param});this.unitView=new UnitView({parentView:this,el:this.$('.units'),model:this.model,parameter:this.param+'_unit'});this.label=this.$('label');_.bindAll(this,'showErrors');},clearErrors:function(){$(this.el).removeClass('error');$(this.el).siblings('.errorMessage').slideUp(function(){$(this).remove();});},showErrors:function(model,errors){if(this.valueView&&this.valueView.valueElement.val()!=''){$(this.el).addClass('error');errorList=errors[this.param];_.each(errorList,function(error){errorSpan=$('<p class="errorMessage">'+error+'</p>');$(this.el).before(errorSpan);errorSpan.slideDown();},this);}}});MarginView=MeasureView.extend({_initialize:function(options){MeasureView.prototype._initialize.call(this,options);this.model.bind('change:is_spread',this.changeLabel,this);this.changeLabel();},changeLabel:function(){if(this.param=='margin_left'){if(this.model.get('is_spread')){this.label.text('Inside');}else{this.label.text('Left');};}else if(this.param=='margin_right'){if(this.model.get('is_spread')){this.label.text('Outside');}else{this.label.text('Right');};};}});ColorView=GenericView.extend({_initialize:function(options){_.bindAll(this,'setColor','setValue');this.param=options.parameter;this.colorElement=options.colorElement;$(this.colorElement).change(this.setValue);this.setValue();},render:function(){this.colorPicker=$('<div class="color_picker"></div>');this.colorPicker.farbtastic(this.setColor);$(this.el).append(this.colorPicker);return this;},setColor:function(color){field=$(this.colorElement);$(field).css({backgroundColor:color});$(field).val(color);$(field).trigger('change');},setValue:function(){params={};color=$(this.colorElement).val();this.value=color;params[this.param]=this.value;this.model.set(params);}});OpacityView=GenericView.extend({_initialize:function(options){_.bindAll(this,'setOpacity','setValue','showErrors');this.param=options.parameter;this.opacityElement=options.opacityElement;$(this.opacityElement).bind('change',this.setValue);this.setValue();},render:function(){this.opacitySlider=$('<div class="opacity_slider"></div>');this.opacitySlider.slider({min:0,max:1,step:0.01,value:1,orientation:'vertical',slide:this.setOpacity});$(this.el).append(this.opacitySlider);return this;},setOpacity:function(e,ui){$('.farbtastic',$(this.el).parent()).css('opacity',ui.value);$(this.opacityElement).val(ui.value);$(this.opacityElement).trigger('change');return true;},setValue:function(){params={};opacity=$(this.opacityElement).val();this.value=parseFloat(opacity);params[this.param]=this.value;this.clearErrors();this.model.set(params,{'error':this.showErrors});},clearErrors:function(){$(this.el).removeClass('error');$(this.el).siblings('.errorMessage').slideUp(function(){$(this).remove();});},showErrors:function(model,errors){if(this.opacityElement.val()!=''){$(this.el).addClass('error');errorList=errors[this.param];_.each(errorList,function(error){errorSpan=$('<p class="errorMessage">'+error+'</p>');$(this.el).before(errorSpan);errorSpan.slideDown();},this);}}});ColorPickerView=GenericView.extend({_initialize:function(options){this.param_group=options.param_group;this.colorView=new ColorView({el:this.$('.color_picker'),parentView:this,parameter:this.param_group+'_color',colorElement:this.$('#id_'+this.param_group+'_color'),model:this.model});this.opacityView=new OpacityView({el:this.$('.opacity_slider'),parentView:this,parameter:this.param_group+'_opacity',opacityElement:this.$('#id_'+this.param_group+'_opacity'),model:this.model});},render:function(){this.colorView.render();this.opacityView.render();return this;}});OptionView=GenericView.extend({events:{"change":"setValue",},tagName:'p',_initialize:function(options){this.param=options.parameter;this.checkboxElement=this.$('input');_.bindAll(this,'getValue','setValue');this.setValue();this.model.bind('change:'+this.param,this.getValue);this.getValue();},setValue:function(){params={};this.value=this.$('input').is(':checked');params[this.param]=this.value;this.model.set(params);},getValue:function(){value=this.model.get(this.param);if(value!=this.value){this.value=value;};}});var ControlsView=GenericView.extend({events:{'click #units input':'switchSystem','click #id_save_as':'openSaveAs','click #id_save_as_confirm':'saveAs','click #options_colors':'toggleColors','click #id_submit':'downloadPDF','click #id_downloadINX':'downloadINX','click #id_downloadIDML':'downloadIDML','click #id_save':'save','click #toggleDownloadOptions':'toggleDownloadOptions'},_initialize:function(options){_.bindAll(this,'prepareAdd','downloadGridPDF','downloadGridINX','downloadGridIDML','saveAs','redirect');this.measureViews=_.map(this.$('.measure'),function(elem){v=new MeasureView({parentView:this,parameter:$(elem).attr('id'),el:elem,model:this.model});return v;},this);this.marginViews=_.map(this.$('.margin'),function(elem){v=new MarginView({parentView:this,parameter:$(elem).attr('id'),el:elem,model:this.model});return v;},this);this.increaseViews=_.map(this.$('.increase'),function(elem){v=new IncreaseView({parentView:this,parameter:$(elem).attr('id'),model:this.model,el:elem});return v;},this);this.columnsColorPicker=new ColorPickerView({el:this.$('#columns_color_opacity_picker'),param_group:'columns',parentView:this,model:this.model}).render();this.baselineColorPicker=new ColorPickerView({el:this.$('#baseline_color_opacity_picker'),param_group:'baseline',parentView:this,model:this.model}).render();this.spreadOption=new OptionView({el:this.$('#is_spread'),parameter:'is_spread',model:this.model,parentView:this});this.units={'width_unit':e_cols_width_unit.val(),'gutter_unit':e_columns_gutter_unit.val()}
this.model.trigger('change');this.colorsPanel=this.$('#colors');},toggleColors:function(e){e.preventDefault();if(this.colorsPanel.css('display')=='block'){this.$('#options_colors, .ui-icon',this).removeClass('ui-icon-triangle-1-s');this.$('#options_colors, .ui-icon',this).addClass('ui-icon-triangle-1-e');this.colorsPanel.slideUp();}else{this.$('#options_colors, .ui-icon',this).removeClass('ui-icon-triangle-1-e');this.$('#options_colors, .ui-icon',this).addClass('ui-icon-triangle-1-s');this.colorsPanel.slideDown()}},switchSystem:function(e){e.preventDefault();elem=e.target;unit=SYSTEMS[$(elem).val()];ctx={model:this.model,unit:unit};_.each(this.model.unitAttributes,function(k){params={};params[k]=this.unit;this.model.set(params);},ctx);this.model.set(params);},openSaveAs:function(e){e.preventDefault();if(this.$('#save').css('display')=='block'){$(e.target).removeClass('open');this.$('#save').slideUp();}else{$(e.target).addClass('open');this.$('#save').slideDown();}},prepareAdd:function(model,response){this.model.trigger('save');model.fetch({success:this.redirect});},save:function(e){e.preventDefault();this.model.set({'created':null,'grid':null,'hash':null,'name':this.$('#id_name').val(),'description':this.$('#id_description').val(),'summary':this.model.buildSummary()});this.model.save({},{success:this.prepareAdd});},saveAs:function(e){e.preventDefault();newModel=this.model.clone();newModel.set({'resource_uri':null,'id':null,'created':null,'edit_url':null,'grid':null,'hash':null,'name':this.$('#id_name').val(),'description':this.$('#id_description').val(),'summary':newModel.buildSummary()},{silent:true});this.parentView.changeModel(newModel);this.model.save({},{success:this.prepareAdd});},redirect:function(model,reponse){if(!this.parentView.collection.getByCid(model.cid)){this.parentView.collection.add(model);window.router.navigate(model.get('edit_url'));}},toggleDownloadOptions:function(e){e.preventDefault();this.$('#downloadOptions').toggle();},downloadPDF:function(e){if(window.user_id){e.preventDefault();this.model.save({'summary':this.model.buildSummary()},{success:this.downloadGridPDF});}},downloadGridPDF:function(model,response){this.model.fetch({success:function(model,response){this.$('#toggleDownloadOptions').click();window.location=model.get('grid');}})},downloadINX:function(e){if(window.user_id){e.preventDefault();this.model.save({'summary':this.model.buildSummary()},{success:this.downloadGridINX});}},downloadGridINX:function(model,response){this.model.fetch({success:function(model,response){this.$('#toggleDownloadOptions').click();window.location=model.get('edit_url')+'inx/';}})},downloadIDML:function(e){e.preventDefault();this.model.save({'summary':this.model.buildSummary()},{success:this.downloadGridIDML});},downloadGridIDML:function(model,response){this.model.fetch({success:function(model,response){this.$('#toggleDownloadOptions').click();window.location=model.get('edit_url')+'idml/';}})}});AppView=Backbone.View.extend({initialize:function(){this.collection=new GridCollection;this.collection.bind('reset',this.setup,this);this.collection.fetch();grid_data={};},setup:function(){if(window.object_id){this.model=this.collection.detect(function(grid){return grid.get('id')==window.object_id;});if(!this.model){this.model=new Grid({id:window.object_id});}}else{this.model=new Grid;}
if(window.user_id){this.model.set({'user_id':window.user_id},{silent:true});}
this.titleView=new TitleView({el:$('h2.pageTitle'),model:this.model,parentView:this,parameter:'name'});this.controlsView=new ControlsView({el:$("#gridder"),model:this.model,parentView:this});this.rightGridView=new GridView({el:$("#right_page"),model:this.model,parentView:this,page:'right'});this.leftGridView=new GridView({el:$("#left_page"),model:this.model,parentView:this,page:'left'});this.gridListView=new GridListView({el:$('#recents'),parentView:this,collection:this.collection});},changeModel:function(model){this.model=model;this.trigger('change:model');}});
