var PDRP_REL = 'market';
// Underscore.js 1.1.7
if (typeof _ === 'undefined') {
	(function(){var p=this,C=p._,m={},i=Array.prototype,n=Object.prototype,f=i.slice,D=i.unshift,E=n.toString,l=n.hasOwnProperty,s=i.forEach,t=i.map,u=i.reduce,v=i.reduceRight,w=i.filter,x=i.every,y=i.some,o=i.indexOf,z=i.lastIndexOf;n=Array.isArray;var F=Object.keys,q=Function.prototype.bind,b=function(a){return new j(a)};typeof module!=="undefined"&&module.exports?(module.exports=b,b._=b):p._=b;b.VERSION="1.1.7";var h=b.each=b.forEach=function(a,c,b){if(a!=null)if(s&&a.forEach===s)a.forEach(c,b);else if(a.length===
	+a.length)for(var e=0,k=a.length;e<k;e++){if(e in a&&c.call(b,a[e],e,a)===m)break}else for(e in a)if(l.call(a,e)&&c.call(b,a[e],e,a)===m)break};b.map=function(a,c,b){var e=[];if(a==null)return e;if(t&&a.map===t)return a.map(c,b);h(a,function(a,g,G){e[e.length]=c.call(b,a,g,G)});return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var k=d!==void 0;a==null&&(a=[]);if(u&&a.reduce===u)return e&&(c=b.bind(c,e)),k?a.reduce(c,d):a.reduce(c);h(a,function(a,b,f){k?d=c.call(e,d,a,b,f):(d=a,k=!0)});if(!k)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(v&&a.reduceRight===v)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;A(a,function(a,g,f){if(c.call(b,a,g,f))return e=a,!0});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(w&&a.filter===w)return a.filter(c,b);h(a,function(a,g,f){c.call(b,a,g,f)&&(e[e.length]=a)});return e};
	b.reject=function(a,c,b){var e=[];if(a==null)return e;h(a,function(a,g,f){c.call(b,a,g,f)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=!0;if(a==null)return e;if(x&&a.every===x)return a.every(c,b);h(a,function(a,g,f){if(!(e=e&&c.call(b,a,g,f)))return m});return e};var A=b.some=b.any=function(a,c,d){c=c||b.identity;var e=!1;if(a==null)return e;if(y&&a.some===y)return a.some(c,d);h(a,function(a,b,f){if(e|=c.call(d,a,b,f))return m});return!!e};b.include=b.contains=function(a,c){var b=
	!1;if(a==null)return b;if(o&&a.indexOf===o)return a.indexOf(c)!=-1;A(a,function(a){if(b=a===c)return!0});return b};b.invoke=function(a,c){var d=f.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);var e={computed:-Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):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);var e={computed:Infinity};h(a,function(a,b,f){b=c?c.call(d,a,b,f):a;b<e.computed&&(e={value:a,computed:b})});return e.value};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,b){var d={};h(a,function(a,f){var g=b(a,f);(d[g]||(d[g]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||
	(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){if(!a)return[];if(a.toArray)return a.toArray();if(b.isArray(a))return f.call(a);if(b.isArguments(a))return f.call(a);return b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?f.call(a,0,b):a[0]};b.rest=b.tail=function(a,b,d){return f.call(a,b==null||d?1:b)};b.last=function(a){return a[a.length-1]};b.compact=function(a){return b.filter(a,
	function(a){return!!a})};b.flatten=function(a){return b.reduce(a,function(a,d){if(b.isArray(d))return a.concat(b.flatten(d));a[a.length]=d;return a},[])};b.without=function(a){return b.difference(a,f.call(arguments,1))};b.uniq=b.unique=function(a,c){return b.reduce(a,function(a,e,f){if(0==f||(c===!0?b.last(a)!=e:!b.include(a,e)))a[a.length]=e;return a},[])};b.union=function(){return b.uniq(b.flatten(arguments))};b.intersection=b.intersect=function(a){var c=f.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=f.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(o&&a.indexOf===o)return a.indexOf(c);d=0;for(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(z&&a.lastIndexOf===z)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);d=arguments[2]||1;for(var e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};b.bind=function(a,b){if(a.bind===q&&q)return q.apply(a,f.call(arguments,1));var d=f.call(arguments,2);return function(){return a.apply(b,d.concat(f.call(arguments)))}};b.bindAll=function(a){var c=f.call(arguments,1);
	c.length==0&&(c=b.functions(a));h(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 l.call(d,b)?d[b]:d[b]=a.apply(this,arguments)}};b.delay=function(a,b){var d=f.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(f.call(arguments,1)))};var B=function(a,b,d){var e;return function(){var f=this,g=arguments,h=function(){e=null;
	a.apply(f,g)};d&&clearTimeout(e);if(d||!e)e=setTimeout(h,b)}};b.throttle=function(a,b){return B(a,b,!1)};b.debounce=function(a,b){return B(a,b,!0)};b.once=function(a){var b=!1,d;return function(){if(b)return d;b=!0;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(f.call(arguments));return b.apply(this,d)}};b.compose=function(){var a=f.call(arguments);return function(){for(var b=f.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=F||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[],d;for(d in a)l.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){h(f.call(arguments,1),function(b){for(var d in b)b[d]!==void 0&&(a[d]=b[d])});return a};b.defaults=function(a){h(f.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.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,c){if(a===c)return!0;var d=typeof a;if(d!=typeof c)return!1;if(a==c)return!0;if(!a&&c||a&&!c)return!1;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual)return a.isEqual(c);if(c.isEqual)return c.isEqual(a);if(b.isDate(a)&&b.isDate(c))return a.getTime()===c.getTime();if(b.isNaN(a)&&b.isNaN(c))return!1;
	if(b.isRegExp(a)&&b.isRegExp(c))return a.source===c.source&&a.global===c.global&&a.ignoreCase===c.ignoreCase&&a.multiline===c.multiline;if(d!=="object")return!1;if(a.length&&a.length!==c.length)return!1;d=b.keys(a);var e=b.keys(c);if(d.length!=e.length)return!1;for(var f in a)if(!(f in c)||!b.isEqual(a[f],c[f]))return!1;return!0};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(l.call(a,c))return!1;return!0};b.isElement=function(a){return!!(a&&a.nodeType==
	1)};b.isArray=n||function(a){return E.call(a)==="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return!(!a||!l.call(a,"callee"))};b.isFunction=function(a){return!(!a||!a.constructor||!a.call||!a.apply)};b.isString=function(a){return!!(a===""||a&&a.charCodeAt&&a.substr)};b.isNumber=function(a){return!!(a===0||a&&a.toExponential&&a.toFixed)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===!0||a===!1};b.isDate=function(a){return!(!a||!a.getTimezoneOffset||
	!a.setUTCFullYear)};b.isRegExp=function(a){return!(!a||!a.test||!a.exec||!(a.ignoreCase||a.ignoreCase===!1))};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.noConflict=function(){p._=C;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.mixin=function(a){h(b.functions(a),function(c){H(c,b[c]=a[c])})};var I=0;b.uniqueId=function(a){var b=I++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\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.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 j=function(a){this._wrapped=a};b.prototype=j.prototype;var r=function(a,c){return c?b(a).chain():a},H=function(a,c){j.prototype[a]=function(){var a=f.call(arguments);D.call(a,this._wrapped);return r(c.apply(b,a),this._chain)}};b.mixin(b);h(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=i[a];j.prototype[a]=function(){b.apply(this._wrapped,arguments);return r(this._wrapped,this._chain)}});h(["concat","join","slice"],function(a){var b=i[a];j.prototype[a]=function(){return r(b.apply(this._wrapped,
	arguments),this._chain)}});j.prototype.chain=function(){this._chain=!0;return this};j.prototype.value=function(){return this._wrapped}})();
}

// Understring
(function(k){if(typeof _!="undefined")var o=_().reverse,p=_.include;var q=String.prototype.trim,l=function(a,b){for(var c=[];b>0;c[--b]=a);return c.join("")},d=function(a){return function(){for(var b=Array.prototype.slice.call(arguments),c=0;c<b.length;c++)b[c]=b[c]==null?"":""+b[c];return a.apply(null,b)}},m=function(){function a(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}var b=function(){b.cache.hasOwnProperty(arguments[0])||(b.cache[arguments[0]]=b.parse(arguments[0]));
return b.format.call(null,b.cache[arguments[0]],arguments)};b.format=function(b,n){var d=1,e=b.length,f="",j=[],h,i,g,k;for(h=0;h<e;h++)if(f=a(b[h]),f==="string")j.push(b[h]);else if(f==="array"){g=b[h];if(g[2]){f=n[d];for(i=0;i<g[2].length;i++){if(!f.hasOwnProperty(g[2][i]))throw m('[_.sprintf] property "%s" does not exist',g[2][i]);f=f[g[2][i]]}}else f=g[1]?n[g[1]]:n[d++];if(/[^s]/.test(g[8])&&a(f)!="number")throw m("[_.sprintf] expecting number but found %s",a(f));switch(g[8]){case "b":f=f.toString(2);
break;case "c":f=String.fromCharCode(f);break;case "d":f=parseInt(f,10);break;case "e":f=g[7]?f.toExponential(g[7]):f.toExponential();break;case "f":f=g[7]?parseFloat(f).toFixed(g[7]):parseFloat(f);break;case "o":f=f.toString(8);break;case "s":f=(f=String(f))&&g[7]?f.substring(0,g[7]):f;break;case "u":f=Math.abs(f);break;case "x":f=f.toString(16);break;case "X":f=f.toString(16).toUpperCase()}f=/[def]/.test(g[8])&&g[3]&&f>=0?"+"+f:f;i=g[4]?g[4]=="0"?"0":g[4].charAt(1):" ";k=g[6]-String(f).length;i=
g[6]?l(i,k):"";j.push(g[5]?f+i:i+f)}return j.join("")};b.cache={};b.parse=function(a){for(var b=[],d=[],e=0;a;){if((b=/^[^\x25]+/.exec(a))!==null)d.push(b[0]);else if((b=/^\x25{2}/.exec(a))!==null)d.push("%");else if((b=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(a))!==null){if(b[2]){e|=1;var f=[],j=b[2],h=[];if((h=/^([a-z_][a-z_\d]*)/i.exec(j))!==null)for(f.push(h[1]);(j=j.substring(h[0].length))!=="";)if((h=/^\.([a-z_][a-z_\d]*)/i.exec(j))!==null)f.push(h[1]);
else if((h=/^\[(\d+)\]/.exec(j))!==null)f.push(h[1]);else throw"[_.sprintf] huh?";else throw"[_.sprintf] huh?";b[2]=f}else e|=2;if(e===3)throw"[_.sprintf] mixing positional and named placeholders is not (yet) supported";d.push(b)}else throw"[_.sprintf] huh?";a=a.substring(b[0].length)}return d};return b}(),e={isBlank:d(function(a){return/^\s*$/.test(a)}),stripTags:d(function(a){return a.replace(/<\/?[^>]+>/ig,"")}),capitalize:d(function(a){return a.charAt(0).toUpperCase()+a.substring(1).toLowerCase()}),
chop:d(function(a,b){for(var b=b*1||0||a.length,c=[],d=0;d<a.length;)c.push(a.slice(d,d+b)),d+=b;return c}),clean:d(function(a){return e.strip(a.replace(/\s+/g," "))}),count:d(function(a,b){for(var c=0,d,e=0;e<a.length;)d=a.indexOf(b,e),d>=0&&c++,e=e+(d>=0?d:0)+b.length;return c}),chars:d(function(a){return a.split("")}),escapeHTML:d(function(a){return a.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}),unescapeHTML:d(function(a){return a.replace(/&lt;/g,
"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}),escapeRegExp:d(function(a){return a.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1")}),insert:d(function(a,b,c){a=a.split("");a.splice(b*1||0,0,c);return a.join("")}),includes:d(function(a,b){return a.indexOf(b)!==-1}),include:function(a,b){return!p||/string|number/.test(typeof a)?this.includes(a,b):p(a,b)},join:d(function(a){var b=Array.prototype.slice.call(arguments);return b.join(b.shift())}),lines:d(function(a){return a.split("\n")}),
reverse:function(a){return!o||/string|number/.test(typeof a)?Array.prototype.reverse.apply(String(a).split("")).join(""):o.call(_(a))},splice:d(function(a,b,c,d){a=a.split("");a.splice(b*1||0,c*1||0,d);return a.join("")}),startsWith:d(function(a,b){return a.length>=b.length&&a.substring(0,b.length)===b}),endsWith:d(function(a,b){return a.length>=b.length&&a.substring(a.length-b.length)===b}),succ:d(function(a){var b=a.split("");b.splice(a.length-1,1,String.fromCharCode(a.charCodeAt(a.length-1)+1));
return b.join("")}),titleize:d(function(a){for(var a=a.split(" "),b,c=0;c<a.length;c++)b=a[c].split(""),typeof b[0]!=="undefined"&&(b[0]=b[0].toUpperCase()),c+1===a.length?a[c]=b.join(""):a[c]=b.join("")+" ";return a.join("")}),camelize:d(function(a){return e.trim(a).replace(/(\-|_|\s)+(.)?/g,function(a,c,d){return d?d.toUpperCase():""})}),underscored:function(a){return e.trim(a).replace(/([a-z\d])([A-Z]+)/g,"$1_$2").replace(/\-|\s+/g,"_").toLowerCase()},dasherize:function(a){return e.trim(a).replace(/([a-z\d])([A-Z]+)/g,
"$1-$2").replace(/^([A-Z]+)/,"-$1").replace(/\_|\s+/g,"-").toLowerCase()},trim:d(function(a,b){if(!b&&q)return q.call(a);b=b?e.escapeRegExp(b):"\\s";return a.replace(RegExp("^["+b+"]+|["+b+"]+$","g"),"")}),ltrim:d(function(a,b){b=b?e.escapeRegExp(b):"\\s";return a.replace(RegExp("^["+b+"]+","g"),"")}),rtrim:d(function(a,b){b=b?e.escapeRegExp(b):"\\s";return a.replace(RegExp("["+b+"]+$","g"),"")}),truncate:d(function(a,b,c){b=b*1||0;return a.length>b?a.slice(0,b)+(c||"..."):a}),words:function(a,b){return String(a).split(b||
" ")},pad:d(function(a,b,c,d){var e="",e=0,b=b*1||0;c?c.length>1&&(c=c.charAt(0)):c=" ";switch(d){case "right":e=b-a.length;e=l(c,e);a+=e;break;case "both":e=b-a.length;e={left:l(c,Math.ceil(e/2)),right:l(c,Math.floor(e/2))};a=e.left+a+e.right;break;default:e=b-a.length,e=l(c,e),a=e+a}return a}),lpad:function(a,b,c){return e.pad(a,b,c)},rpad:function(a,b,c){return e.pad(a,b,c,"right")},lrpad:function(a,b,c){return e.pad(a,b,c,"both")},sprintf:m,vsprintf:function(a,b){b.unshift(a);return m.apply(null,
b)},toNumber:function(a,b){var c;c=(a*1||0).toFixed(b*1||0)*1||0;return!(c===0&&a!=="0"&&a!==0)?c:Number.NaN},strRight:d(function(a,b){var c=!b?-1:a.indexOf(b);return c!=-1?a.slice(c+b.length,a.length):a}),strRightBack:d(function(a,b){var c=!b?-1:a.lastIndexOf(b);return c!=-1?a.slice(c+b.length,a.length):a}),strLeft:d(function(a,b){var c=!b?-1:a.indexOf(b);return c!=-1?a.slice(0,c):a}),strLeftBack:d(function(a,b){var c=a.lastIndexOf(b);return c!=-1?a.slice(0,c):a})};e.strip=e.trim;e.lstrip=e.ltrim;
e.rstrip=e.rtrim;e.center=e.lrpad;e.ljust=e.lpad;e.rjust=e.rpad;typeof module!=="undefined"&&module.exports?module.exports=e:typeof k._!=="undefined"?k._.mixin(e):k._=e})(this||window);

// Backbone 0.5.3
if (typeof Backbone === 'undefined') {
	(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);
}

// jQuery.ScrollTo - Easy element scrolling using jQuery.
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

jQuery.cookie=function(e,b,a){if(1<arguments.length&&"[object Object]"!==""+b){a=jQuery.extend({},a);if(null===b||void 0===b)a.expires=-1;if("number"===typeof a.expires){var d=a.expires,c=a.expires=new Date;c.setDate(c.getDate()+d)}b=""+b;return document.cookie=[encodeURIComponent(e),"=",a.raw?b:encodeURIComponent(b),a.expires?"; expires="+a.expires.toUTCString():"",a.path?"; path="+a.path:"",a.domain?"; domain="+a.domain:"",a.secure?"; secure":""].join("")}a=b||{};c=a.raw?function(a){return a}:decodeURIComponent;
return(d=RegExp("(?:^|; )"+encodeURIComponent(e)+"=([^;]*)").exec(document.cookie))?c(d[1]):null};


/*
 * Class Data jQuery Plugin
 */
(function(a){a.fn.classData=function(b,c){var e=a(this).classDataGlue();if(c==void 0||c==null||!c){var f=Array(this.length);b+=e;this.each(function(d){var c=a(this);a.each(c.attr("class").split(" "),function(a,c){if(c.substr(0,b.length)==b)return f[d]=decodeURIComponent(c.replace(b,"")),false})});if (f.length == 1) return f[0]; else return f;}else return this.each(function(){var d=a(this);d.removeClass(b+e+d.classData(b));d.addClass(b+e+encodeURIComponent(c))})};a.fn.classDataGlue=function(b){if(b!=void 0)return a.fn.classData.glue=b,
this;else{if(!a.fn.classData.glue)a.fn.classData.glue="_";return a.fn.classData.glue}}})(jQuery);// Generated by CoffeeScript 1.3.3
(function() {
  var $, Pane, Photo, Photos, Search, SlideToggleController, TT, Tab, Tabs, User, XCollection, XModel, XSelect, XSelectController, XTabs, XView, butter, d, pd, pdapi, slideToggle, slideToggleController, xselectController, _a, _d;

  XView = Backbone.View.extend({
    out: '',
    defaults: {
      output: false
    },
    render: function(output_type) {
      var html, outEl, tmpEl;
      html = this.out;
      switch (output_type) {
        case 'html':
          tmpEl = this.el;
          this.el = $('<div/>').html(html);
          this.rendered();
          outEl = this.el;
          this.el = tmpEl;
          return outEl.html();
        case 'replace':
          $(this.el).html(html);
          break;
        case 'append':
          $(this.el).append(html);
          break;
        case 'prepend':
          $(this.el).prepend(html);
      }
      return this.parent_rendered();
    },
    parent_rendered: function() {
      var tabs;
      tabs = new XTabs(this.el);
      return this.rendered();
    },
    rendered: function() {}
  });

  XModel = Backbone.Model.extend();

  XCollection = Backbone.Collection.extend({
    indexByCid: function(cid) {
      var index, model, _ref;
      _ref = this.models;
      for (index in _ref) {
        model = _ref[index];
        if (+model.cid === +cid) {
          return index;
        }
      }
      return false;
    },
    indexById: function(id) {
      var index, model, _ref;
      _ref = this.models;
      for (index in _ref) {
        model = _ref[index];
        if (+model.id === +id) {
          return index;
        }
      }
      return false;
    }
  });

  XSelect = XModel.extend({
    initialize: function() {
      this.set({
        'id': this.cid
      });
      return this.render();
    },
    render: function() {
      var $el, T, clone, curVal, options, slct, slctd;
      $el = this.get('el');
      slct = this.slct = $('<div class="xselect-shell">');
      T = this;
      clone = $el.clone().css('position', 'absolute').css('left', '-9999px').addClass('xselect-processed');
      curVal = $el.val();
      slctd = $('<a/>').attr('class', 'xselect-selected').attr('href', '#');
      options = $('<div/>').attr('class', 'xselect-options');
      slct.append($('<span>▼</span>').attr('class', 'xselect-arrow'));
      slct.append(slctd);
      slct.append(options);
      slct.append(clone);
      this.set({
        el: slct
      });
      $('option', $el).each(function() {
        var opt, option;
        opt = $(this);
        option = $('<a/>').html(opt.html()).data('value', opt.val()).attr('class', 'xselect-option').attr('href', '#');
        options.append(option);
        if (opt.val() === curVal) {
          option.addClass('xselect-selectedOption');
          return slctd.html(opt.html()).data('value', opt.val());
        }
      });
      $('.xselect-option', slct).click(function() {
        clone.val($(this).data('value')).change();
        T.sync();
        return false;
      });
      $('select', this.slct).focus(function() {
        return T.focus(slct);
      }).blur(function() {
        return T.blur(slct);
      });
      slct.mouseover(function() {
        return options.show();
      }).mouseout(function() {
        return options.hide();
      });
      this.slct.insertBefore($el);
      $el.remove();
      this.slct.data('id', this.id);
      return setTimeout(function() {
        return T.sync();
      }, 100);
    },
    sync: function() {
      var $el, curLabel, curVal, input, options;
      $el = this.get('el');
      input = $('select', $el);
      options = $('.xselect-option', $el);
      curVal = input.val();
      curLabel = this.getLabel(input, curVal);
      $('.xselect-selected', $el).html(curLabel).data('value', curVal);
      return options.removeClass('xselect-selectedOption').each(function() {
        if ($(this).data('value') === curVal) {
          return $(this).addClass('xselect-selectedOption');
        }
      });
    },
    getLabel: function(select, val) {
      var label;
      label = '';
      $('option', 'select').each(function() {
        if ($(this).val() === val) {
          return label = $(this).html();
        }
      });
      return label;
    },
    focus: function(sldr) {
      var shadow;
      shadow = '0 0 4px #0077F5';
      sldr.css('-moz-box-shadow', shadow).css('box-shadow', shadow).css('-webkit-box-shadow', shadow);
      return slideToggleController.focused = this;
    },
    blur: function(sldr) {
      sldr.css('-moz-box-shadow', '').css('box-shadow', '').css('-webkit-box-shadow', '');
      return slideToggleController.focused = false;
    },
    setFocus: function(sldr) {
      var inp;
      inp = $('input', sldr);
      return inp.focus();
    },
    toggle: function(sldr) {
      var inp;
      inp = $('input', sldr);
      if (inp.is(':checked')) {
        inp.attr('checked', false).attr('value', '0');
        this.animate(-1);
      } else {
        inp.attr('checked', true).attr('value', '1');
        this.animate(1);
      }
      inp.change();
      return false;
    }
  });

  XSelectController = XCollection.extend({
    model: XSelect,
    initialize: function() {},
    init: function() {
      var collection;
      collection = this;
      $('.xselect').each(function() {
        var newSelect;
        if (!$(this).hasClass('xselect-processed')) {
          newSelect = new XSelect({
            el: $(this)
          });
          return collection.add(newSelect);
        }
      });
      return this.initEvents();
    },
    initEvents: function() {},
    modelFromEl: function(el) {
      return this.get(el.data('id'));
    },
    syncAll: function(animate) {
      var select, _i, _len, _ref, _results;
      if (animate == null) {
        animate = true;
      }
      if ((this.models != null) && this.models.length) {
        _ref = this.models;
        _results = [];
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
          select = _ref[_i];
          _results.push(select.sync(animate));
        }
        return _results;
      }
    }
  });

  xselectController = new XSelectController();

  XTabs = (function() {

    function XTabs(el, show) {
      if (show == null) {
        show = false;
      }
      this.el = $(el);
      this.btns = $('.pdrp_inner_tab_buttons a', this.el);
      this.tabs = $('.pdrp_inner_tab', this.el);
      if (!show) {
        this.showByNum(1);
      }
      this.initEvents();
    }

    XTabs.prototype.initEvents = function() {
      var T;
      T = this;
      return this.btns.click('live', function() {
        return T.showTab($(this));
      });
    };

    XTabs.prototype.reset = function() {
      this.tabs.hide();
      return this.btns.removeClass('pdrp_inner_tab_button_active');
    };

    XTabs.prototype.showTab = function(btn) {
      var id;
      id = btn.classData('tab');
      return this.showById(id, btn);
    };

    XTabs.prototype.showById = function(id, btn) {
      this.reset();
      $('.xtab_btn-' + id, this.el).addClass('pdrp_inner_tab_button_active');
      return $('.xtab-' + id, this.el).show();
    };

    XTabs.prototype.showByNum = function(num) {
      num = num - 1;
      this.reset();
      this.btns.eq(num).addClass('pdrp_inner_tab_button_active');
      return this.tabs.eq(num).show();
    };

    return XTabs;

  })();

  _a = {};

  _a.ajax = {};

  _a.a = function(action, data, callback, opts) {
    var completed, silent, _ref, _ref1, _ref2, _ref3;
    if (callback == null) {
      callback = false;
    }
    completed = false;
    if (opts == null) {
      opts = {};
    }
    if ((_ref = opts.silent) == null) {
      opts.silent = false;
    }
    if ((_ref1 = opts.timeout) == null) {
      opts.timeout = 10000;
    }
    if ((_ref2 = opts.errFnc) == null) {
      opts.errFnc = false;
    }
    if ((_ref3 = opts.type) == null) {
      opts.type = 'POST';
    }
    silent = opts.silent;
    if (_a.ajax.onStart) {
      _a.ajax.onStart(opts);
    }
    data.action = _a.ajax.prefix + action;
    return jQuery.ajax({
      url: ajaxurl,
      data: data,
      type: opts.type,
      dataType: 'jsonp',
      complete: function(rsp, status) {
        var json, text;
        if (!completed) {
          clearTimeout(_a.ajax.errTimeout);
          if (rsp) {
            text = rsp.responseText;
            json = jQuery.parseJSON(text);
            if (text.indexOf('"suc"') > -1) {
              _a.ajax.success(json.msg, opts);
              if (callback) {
                callback(json);
              }
            } else {
              if (text.indexOf('"err"') > -1) {
                _a.ajax.error(json.msg, opts);
              } else {
                _a.ajax.mayBeError(opts);
              }
              if (opts.errFnc) {
                opts.errFnc();
              }
            }
          }
          return completed = true;
        }
      }
    });
    /*
    _a.ajax.startLoading = ->
    	_a.ajax.loading();
    	_a.ajax.msgId ?=_a.ajax.msg.attr('id');
    	_a.ajax.msg.remove();
    	jQuery('body').append('<div/>').attr('id', _a.ajax.msgId).html('Loading...');
    	_a.ajax.placeMsg();
    */

  };

  _a.ajax.loading = function(inout) {
    if (!(inout != null)) {
      _a.ajax.msg.fadeIn();
      inout = false;
    } else if (!inout) {
      _a.ajax.msg.animate({
        opacity: .6
      }, _a.ajax.speed);
      inout = true;
    } else {
      _a.ajax.msg.animate({
        opacity: 1
      }, _a.ajax.speed);
      inout = false;
    }
    return _a.ajax.loadingTimeout = setTimeout(function() {
      return _a.ajax.loading(inout);
    }, _a.ajax.speed + 10);
  };

  _a.ajax.success = function(msg, opts) {
    if (_a.ajax.onSuccess) {
      return _a.ajax.onSuccess(msg, opts);
    }
  };

  _a.ajax.mayBeError = function(opts) {
    if (_a.onMayBeError) {
      return _a.ajax.onMayBeError(opts);
      /*
      		clearTimeout(_a.ajax.loadingTimeout);
      		_a.ajax.msg.stop().html(msg).css('background','#E5F7E5').animate({opacity: 1}, _a.ajax.speed);
      		_a.ajax.placeMsg();
      		_a.ajax.reset(1500);
      */

    }
  };

  _a.ajax.error = function(msg, opts) {
    if (_a.ajax.onSuccess) {
      return _a.ajax.onSuccess(msg, opts);
    }
    /*
    		clearTimeout(_a.ajax.loadingTimeout);
    		_a.ajax.msg.stop().html(msg).css('background', '#F8E3E3').animate({opacity: 1}, _a.ajax.speed);
    		_a.ajax.placeMsg();
    		_a.ajax.reset(5000);
    */

  };

  _a.ajax.reset = function(s) {
    return setTimeout(function() {
      return _a.ajax.msg.fadeOut(750);
    }, s);
  };

  _a.ajax.placeMsg = function() {
    var dims;
    dims = jQuery(window).width();
    return _a.ajax.msg.css('left', px((dims / 2) - (_a.ajax.msg.outerWidth() / 2)));
  };

  _a.ajax.speed = 750;

  if (this._ != null) {
    this._.mixin(_a);
  } else {
    this._ = _a;
  }

  this._.ajax = _a.ajax;

  butter = {
    init: function() {
      return butter.labelize();
    },
    labelize: function() {
      return $('.butter_labelize').each(function() {
        var form, name;
        $(this).hide();
        name = $(this).attr('for');
        form = $(this).closest('form');
        $('input[name="' + name + '"]', form).labeledInput($(this).text());
        return $('textarea[name="' + name + '"]', form).labeledInput($(this).text());
      });
    }
  };

  (function($) {
    return $.fn.idData = function(opts) {
      var bits, obj;
      if (opts == null) {
        opts = {
          combine: false
        };
      }
      obj = $(this).attr('id');
      bits = obj.split('-');
      if (bits.length > 2 && opts.combine) {
        _d.rRemove(bits, 0);
        return bits.join('-');
      } else {
        return bits[1];
      }
    };
  })(jQuery);

  (function($) {
    return $.fn.labeledInput = function(val, opts) {
      var obj, _ref, _ref1, _ref2, _ref3;
      if (opts == null) {
        opts = {};
      }
      $(obj).unbind('focus').unbind('blur');
      if ((_ref = opts.focusText) == null) {
        opts.focusText = '';
      }
      if ((_ref1 = opts.init) == null) {
        opts.init = false;
      }
      if ((_ref2 = opts.activated) == null) {
        opts.activated = false;
      }
      if ((_ref3 = opts.cleared) == null) {
        opts.cleared = false;
      }
      if (typeof opts.focusText === 'function') {
        opts.focusText = opts.focusText();
      }
      obj = this;
      if (obj.val() === '' || opts.forceChange) {
        obj.val(val);
        obj.addClass('labeledInput-clear');
        if (opts.init) {
          opts.init();
        }
      }
      obj.setFocusFnc = function(fnc) {
        var existing;
        if (!(obj.focusFnc != null)) {
          obj.focusFnc = function() {};
        }
        existing = obj.focusFnc;
        return obj.focusFnc = function() {
          fnc();
          return existing();
        };
      };
      obj.setBlurFnc = function(fnc) {
        var existing;
        if (!(obj.blurFnc != null)) {
          obj.blurFnc = function() {};
        }
        existing = obj.blurFnc;
        return obj.blurFnc = function() {
          fnc();
          return existing();
        };
      };
      obj.setFocusFnc(function() {
        if (obj.val() === val) {
          obj.val(opts.focusText);
          obj.removeClass('labeledInput-clear');
          obj.addClass('labeledInput-active');
          if (opts.activated) {
            return opts.activated();
          }
        }
      });
      if (opts.focusFnc != null) {
        obj.setFocusFnc(opts.focusFnc);
      }
      obj.focus(obj.focusFnc);
      obj.setBlurFnc(function() {
        if (obj.val() === opts.focusText) {
          obj.val(val);
          obj.addClass('labeledInput-clear');
          obj.removeClass('labeledInput-active');
          if (opts.cleared) {
            return opts.cleared();
          }
        }
      });
      if (opts.blurFnc != null) {
        obj.setBlurFnc(opts.blurFnc);
      }
      obj.blur(obj.blurFnc);
      return this;
    };
  })(jQuery);

  (function($) {
    return $.fn.center = function(opts) {
      var $p, $t, p_height, p_width, t_height, t_width;
      if (opts == null) {
        opts = {};
      }
      opts = _.defaults(opts, {
        parent: 'body',
        horizontal: true,
        offsetX: 0,
        vertical: false,
        offsetY: 0,
        onresize: true
      });
      $p = $(opts.parent);
      $t = $(this);
      if (opts.parent === 'parent') {
        $p = $t.parent();
      }
      if (opts.horizontal) {
        p_width = $p.outerWidth();
        t_width = $t.show().outerWidth();
        $t.hide();
        $t.css('left', _.x((p_width / 2) - (t_width / 2) + opts.offsetX)).show();
      }
      if (opts.vertical) {
        p_height = $p.outerHeight();
        t_height = $t.outerHeight();
        $t.css('top', _.x((p_height / 2) - (t_height / 2) + opts.offsetY));
      }
      if (opts.onresize) {
        $t.data('onresize', function() {
          return $t.center(parent, opts);
        });
        $(window).resize(function() {
          if (($t.data('onresize') != null) && typeof $t.data('onresize') === 'function') {
            return $t.data('onresize')();
          }
        });
      }
      return this;
    };
  })(jQuery);

  (function($) {
    return $.fn.formToJson = $.fn.formToJSON = function(opts) {
      var $t, data, elm, form, _i, _len, _ref;
      if (opts == null) {
        opts = {};
      }
      $t = this;
      data = {};
      form = _.getForm($t.attr('id'));
      _ref = form.elements;
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        elm = _ref[_i];
        data[elm.name] = elm.value;
      }
      return data;
    };
  })(jQuery);

  d = function(data, id) {
    if (id == null) {
      id = false;
    }
    if (console) {
      if (id) {
        data = id + ': ' + data;
      }
      return console.log(data);
    }
  };

  $ = jQuery;

  _d = {};

  _d.ari = function(a, i) {
    return a[i];
  };

  _d.toMultiple = function(num, mult) {
    var out;
    if (num == null) {
      num = 0;
    }
    if (mult == null) {
      mult = 1;
    }
    out = 0;
    while (1.) {
      out += mult;
      if (out > num) {
        return out - mult;
      }
    }
  };

  _d.pulse = function(elem, duration, easing, props_to, props_from, stop) {
    return elem.animate(props_to, duration, easing, function() {
      if (stop() === false) {
        return _d.pulse(elem, duration, easing, props_from, props_to, stop);
      }
    });
  };

  _d.getForm = function(id) {
    var form, _i, _len, _ref;
    _ref = document.forms;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      form = _ref[_i];
      if (form.id === id) {
        return form;
      }
    }
  };

  _d.formToJson = function(id) {
    var data, form, i, _i, _len, _ref;
    data = {};
    form = _d.getForm(id);
    _ref = form.elements;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      i = _ref[_i];
      data[form.elements[i].name] = form.elements[i].value;
    }
    return data;
  };

  _d.unSlug = function(str) {
    var i, v;
    str = str.split('-');
    for (i in str) {
      v = str[i];
      str[i] = dpl.ucfirst(v);
    }
    return str.join(' ');
  };

  _d.slugify = function(str, whitespace_replacer) {
    var find;
    if (whitespace_replacer == null) {
      whitespace_replacer = '-';
    }
    find = new RegExp(/\ /g);
    return str.replace(find, whitespace_replacer).toLowerCase();
  };

  _d.rgbToHex = function(color) {
    var blue, digits, green, red, rgb;
    if (color.substr(0, 1) === '#') {
      return color;
      digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
      red = parseInt(digits[2]);
      green = parseInt(digits[3]);
      blue = parseInt(digits[4]);
      rgb = blue | (green << 8) | (red << 16);
    }
    rgb = rgb.toString(16);
    while (rgb.length < 6) {
      rgb = '0' + rgb;
    }
    return '#' + rgb;
  };

  _d.resizeStr = function(str, size, append) {
    if (append == null) {
      append = '...';
    }
    if (str.length > size) {
      str = str.substr(0, size) + append;
    }
    return str;
  };

  _d.x = function(str) {
    return str + 'px';
  };

  _d.templateSettings = {
    interpolate: /\{\{(.+?)\}\}/g
  };

  _d.pdrp_templates = {};

  _d.t = function(template, data) {
    var html;
    html = unescape(_d.pdrp_templates[template]);
    return _.template(html, data);
  };

  _d.addSlashes = function(str) {
    return (str + '').replace(/([\\"'])/g, "\\$1").replace(/\u0000/g, "\\0");
  };

  _d.stripSlashes = function(str) {
    return (str + '').replace(/\\(.?)/g, function(s, n1) {
      switch (n1) {
        case '\\':
          return '\\';
        case '0':
          return '\0';
        case '':
          return '';
        default:
          return n1;
      }
    });
  };

  _d.money = function(num, opts) {
    var _ref, _ref1, _ref2;
    if (opts == null) {
      opts = false;
    }
    if (!opts) {
      opts = [];
    }
    if ((_ref = opts.presign) == null) {
      opts.presign = '$';
    }
    if ((_ref1 = opts.postsign) == null) {
      opts.postsign = '';
    }
    if ((_ref2 = opts.div) == null) {
      opts.div = 100;
    }
    return opts.presign + ((num * 1) / opts.div).toFixed(2) + opts.postsign;
  };

  _d.readys = {};

  _d.whenReady = function(id, fnc) {
    return _d.ready(id, fnc);
  };

  _d.ready = function(id, fnc) {
    var existing;
    if (_.isUndefined(_d.readys[id])) {
      _d.readys[id] = {
        ready: false,
        fnc: false
      };
    }
    if (_.isFunction(_d.readys[id].fnc)) {
      existing = _d.readys[id].fnc;
      _d.readys[id].fnc = function() {
        fnc();
        return existing();
      };
    } else {
      _d.readys[id].fnc = function() {
        return fnc();
      };
    }
    if (_d.readys[id].ready) {
      return _d.doReady(id);
    }
  };

  _d.nowReady = function(id) {
    return _d.isReady(id);
  };

  _d.isReady = function(id) {
    if (!_.isUndefined(_d.readys[id])) {
      _d.readys[id].ready = true;
      return _d.doReady(id);
    } else {
      return _d.readys[id] = {
        ready: true,
        fnc: false
      };
    }
  };

  _d.doReady = function(id) {
    if ((_d.readys[id] != null) && (_d.readys[id].fnc != null) && typeof _d.readys[id].fnc === 'function') {
      _d.readys[id].fnc();
      return _d.readys[id].fnc = null;
    }
  };

  _d.hooks = {};

  _d.hook = function(action, fnc) {
    var params;
    if (!(typeof params !== "undefined" && params !== null)) {
      params = [];
    }
    if (!(_d.hooks[action] != null)) {
      _d.hooks[action] = [];
    }
    return _d.hooks[action].push(fnc);
  };

  _d.do_hook = function(action, params) {
    var fnc, _i, _len, _ref, _results;
    if (_d.hooks[action] != null) {
      _ref = _d.hooks[action];
      _results = [];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        fnc = _ref[_i];
        _results.push(fnc(params));
      }
      return _results;
    }
  };

  TT = this;

  _d._mixin = function() {
    if (TT._ != null) {
      TT._.mixin(_d);
    } else {
      TT._ = _d;
    }
    _.pdrp_templates = _d.pdrp_templates;
    _.templateSettings = _d.templateSettings;
    return _.readys = _d.readys;
  };

  _d._mixin();

  setTimeout(function() {
    return _d._mixin();
  }, 750);

  $(function() {
    _d._mixin();
    return setTimeout(function() {
      return _d._mixin();
    }, 750);
  });

  slideToggle = XModel.extend({
    initialize: function() {
      this.set({
        'id': this.cid
      });
      return this.render();
    },
    render: function() {
      var $el, T, clone, dflt, offLabel, onLabel, shift, sldr, _ref, _ref1, _ref2;
      $el = this.get('el');
      dflt = (_ref = $el.attr('value') === 'on') != null ? _ref : {
        "true": false
      };
      onLabel = (_ref1 = $el.classData('on')) != null ? _ref1 : 'ON';
      offLabel = (_ref2 = $el.classData('off')) != null ? _ref2 : 'OFF';
      this.sldr = $('<div class="pdrp_inp-sliderShell">');
      sldr = this.sldr;
      T = this;
      clone = $el.clone().css('position', 'absolute').css('left', '-9999px').addClass('pdrp_inp-slider-processed');
      this.sldr.append('\
			<a href="#" class="pdrp_inp-slider-block"></a>\
			<a href="#" class="pdrp_inp-slider-on pdrp_inp-slider-button">' + onLabel + '</a>\
			<a href="#" class="pdrp_inp-slider-off pdrp_inp-slider-button">' + offLabel + '</a>\
			<div class="clear"></div>\
		').append(clone);
      $('a', this.sldr).click(function() {
        return T.toggle(sldr);
      }).focus(function() {
        return T.setFocus(sldr);
      });
      $('input', this.sldr).focus(function() {
        return T.focus(sldr);
      }).blur(function() {
        return T.blur(sldr);
      });
      shift = 30;
      if ($('input', this.sldr).is(':checked')) {
        $('.pdrp_inp-slider-block', this.sldr).animate({
          left: '+=' + shift + 'px'
        });
        $('.pdrp_inp-slider-off', this.sldr).animate({
          textIndent: '+=' + shift + 'px'
        });
      } else {
        $('.pdrp_inp-slider-on', this.sldr).animate({
          textIndent: '-=' + shift + 'px'
        });
      }
      this.sldr.insertBefore($el);
      $el.remove();
      return this.sldr.data('id', this.id);
    },
    sync: function(animate) {
      var inp, slide;
      slide = $('.pdrp_inp-slider-block', this.sldr);
      inp = $('input', this.sldr);
      if (+inp.val() === 1) {
        inp.attr('checked', 'checked');
      }
      if (+inp.val() === 0) {
        inp.removeAttr('checked');
      }
      if (inp.is(':checked')) {
        if (parseInt(slide.css('left')) < 25) {
          return this.animate(1, animate);
        }
      } else {
        if (parseInt(slide.css('left')) > 25) {
          return this.animate(-1, animate);
        }
      }
    },
    animate: function(dir, duration) {
      var shift;
      if (duration == null) {
        duration = 400;
      }
      shift = 40;
      if (dir > 0) {
        $('.pdrp_inp-slider-block', this.sldr).animate({
          left: '+=' + shift + 'px'
        }, duration);
        $('.pdrp_inp-slider-off', this.sldr).animate({
          textIndent: '+=' + shift + 'px'
        }, duration);
        return $('.pdrp_inp-slider-on', this.sldr).animate({
          textIndent: '+=' + (shift - 13) + 'px'
        }, duration);
      } else {
        $('.pdrp_inp-slider-block', this.sldr).animate({
          left: '-=' + shift + 'px'
        }, duration);
        $('.pdrp_inp-slider-on', this.sldr).animate({
          textIndent: '-=' + (shift - 13) + 'px'
        }, duration);
        return $('.pdrp_inp-slider-off', this.sldr).animate({
          textIndent: '-=' + shift + 'px'
        }, duration);
      }
    },
    focus: function(sldr) {
      var shadow;
      shadow = '0 0 4px #0077F5';
      sldr.css('-moz-box-shadow', shadow).css('box-shadow', shadow).css('-webkit-box-shadow', shadow);
      return slideToggleController.focused = this;
    },
    blur: function(sldr) {
      sldr.css('-moz-box-shadow', '').css('box-shadow', '').css('-webkit-box-shadow', '');
      return slideToggleController.focused = false;
    },
    setFocus: function(sldr) {
      var inp;
      inp = $('input', sldr);
      return inp.focus();
    },
    toggle: function(sldr) {
      var inp;
      inp = $('input', sldr);
      d(inp);
      if (inp.is(':checked')) {
        inp.attr('checked', false).attr('value', '0');
        this.animate(-1);
      } else {
        inp.attr('checked', true).attr('value', '1');
        this.animate(1);
      }
      inp.change();
      return false;
    }
  });

  SlideToggleController = XCollection.extend({
    model: slideToggle,
    initialize: function() {},
    init: function() {
      var collection;
      collection = this;
      $('.pdrp_inp-slider').each(function() {
        var newSlider;
        if (!$(this).hasClass('pdrp_inp-slider-processed')) {
          newSlider = new slideToggle({
            el: $(this)
          });
          return collection.add(newSlider);
        }
      });
      return this.initEvents();
    },
    initEvents: function() {
      return $(document).keyup(function(e) {
        if (this.focused) {
          if (e.keyCode === 32) {
            this.focused.toggle();
            e.preventDefault();
            e.stopPropagation();
            return false;
          }
        }
      });
    },
    modelFromEl: function(el) {
      return this.get(el.data('id'));
    },
    syncAll: function(animate) {
      var slider, _i, _len, _ref, _results;
      if (animate == null) {
        animate = true;
      }
      if ((this.models != null) && this.models.length) {
        _ref = this.models;
        _results = [];
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
          slider = _ref[_i];
          _results.push(slider.sync(animate));
        }
        return _results;
      }
    }
  });

  slideToggleController = new SlideToggleController();

  $('html').addClass('jsOn');

  pd = {
    user: false,
    init: function() {
      _.isReady('pd');
      PDRP.ID = PDRP.ID.replace('&amp;', '&');
      pd.initDefaults();
      pd.initPane();
      pd.initTemplates();
      pd.initAjax();
      pd.domain = location.href.replace('http://', '').replace('https://', '').split('/');
      pd.domain = pd.domain[0];
      return _.isReady('pd_init');
    },
    initDefaults: function() {
      pd.defaults = JSON.parse($.cookie('photodropper_store'));
      if (!pd.defaults) {
        pd.defaults = {};
      }
      _.defaults(pd.defaults, {
        filters: {
          cc: '1',
          com: '0',
          recency: 'any',
          sort: 'relevance',
          galleryRatio: 50
        }
      });
      return this.saveDefaults;
    },
    initTemplates: function() {
      var tpl_url;
      if (typeof PDRP_REL !== "undefined" && PDRP_REL !== null) {
        tpl_url = "" + PDRP.APP + "/releases/" + PDRP_REL + "/templates/" + PDRP.ID + "&callback=?";
      } else {
        tpl_url = "" + PDRP.APP + "/templates/" + PDRP.ID + "&callback=?";
      }
      return $.getJSON(tpl_url, function(rsp) {
        _d.pdrp_templates = rsp;
        _.nowReady('templates');
        return $('#pdrp_modals').hide();
      });
    },
    initAjax: function() {
      return _.ajax.prefix = 'pdr_';
    },
    initEvents: function() {
      $('.pdrp_open').live('click', pd.open);
      $('#pdrp_attributionLocation').live('change', function() {
        return pd.tagHelp($(this));
      }).each(function() {
        return pd.tagHelp($(this));
      });
      return $('#pdrp_attributionExtended').live('change', function() {
        return pd.shareButtonsInMetabox($(this));
      }).each(function() {
        return pd.shareButtonsInMetabox($(this));
      });
    },
    initPane: function() {
      return _.whenReady('templates', function() {
        pd.Pane = new Pane();
        return pd.initEvents();
      });
    },
    tagHelp: function(select) {
      var val;
      val = $(select).val();
      if (val === 'tag') {
        return $('#pdrp_phpTagHelp').css('display', 'block');
      } else {
        return $('#pdrp_phpTagHelp').css('display', 'none');
      }
    },
    shareButtonsInMetabox: function(select) {
      var val;
      val = $(select).val();
      if (val === '0') {
        return $('#pdrp_shareButtonsInMetabox').css('display', 'block');
      } else {
        return $('#pdrp_shareButtonsInMetabox').css('display', 'none');
      }
    },
    saveDefaults: function() {
      return $.cookie('photodropper_store', JSON.stringify(pd.defaults), {
        expires: 365
      });
    },
    setDefault: function(name, value) {
      pd.defaults[name] = value;
      return this.saveDefaults();
    },
    open: function() {
      return pd.Pane.show();
    },
    tb: {
      frame: function() {
        return document.getElementById('TB_iframeContent').contentDocument;
      },
      open: function() {
        pd.tb.hide();
        return setTimeout(function() {
          if (($('#add_image').length)) {
            return $('#add_image').click();
          } else {
            return $('#content-add_media').click();
          }
        }, 400);
      },
      close: function() {
        $('#TB_window,#TB_overlay,#TB_load').remove();
        return $('#pdrp_hideTB').remove();
      },
      hide: function() {
        var tbstyles;
        $('#pdrp_hideTB').remove();
        tbstyles = $('<style>');
        $('body').append(tbstyles);
        tbstyles.attr('id', 'pdrp_hideTB').attr('type', 'text/css').html("					#TB_overlay { display:none !important; }					#TB_window {visibility:hidden !important; }					#TB_load {display:none !important; }				");
        return setTimeout(function() {
          return tbstyles.html("					#TB_overlay { display:none !important; }					#TB_window {display:none !important; }					#TB_load {display:none !important; }				");
        }, 1000);
      },
      show: function() {
        return $('#pdrp_hideTB').remove();
      },
      page: function(go, loaded) {
        $('#TB_iframeContent').unbind('load').load(function() {
          return loaded();
        });
        return document.getElementById('TB_iframeContent').contentWindow.location.href = $('#' + go + ' a', pd.tb.frame()).attr('href');
      },
      openMedia: function(mediaid, closePD) {
        if (closePD == null) {
          closePD = true;
        }
        if (document.getElementById('TB_iframeContent') != null) {
          return pd.tb.page('tab-library', function() {
            var frame;
            frame = pd.tb.frame();
            setTimeout(function() {
              $('#media-item-' + mediaid + ' .slidetoggle', frame).show();
              $('#media-item-' + mediaid + ' .describe-toggle-off', frame).show();
              $('#media-item-' + mediaid + ' .describe-toggle-on', frame).hide();
              return $('body', frame).scrollTo('#media-item-' + mediaid);
            }, 250);
            pd.tb.show();
            $('.pdrp_savingImageMsg').hide();
            if (closePD) {
              return $('#pdrp_pkg').hide();
            }
          });
        } else {
          $('.add_media', '#wp-content-media-buttons').click();
          wp.media.editor.get(wpActiveEditor).views._views[".media-frame-content"][0].views._views[""][1].collection.props.set({
            ignore: +(new Date())
          });
          setTimeout(function() {
            $('.media-router .media-menu-item').eq(1).click();
            return setTimeout(function() {
              return $('.attachments-browser .attachments .attachment-preview').eq(0).click();
            }, 800);
          }, 100);
          if (closePD) {
            return $('#pdrp_pkg').hide();
          }
        }
      }
    }
  };

  $(function() {
    butter.init();
    pd.init();
    return $('body').classDataGlue(':');
  });

  pd.adman = {
    init: function(ads) {
      var ad, _i, _len;
      pd.adman.all_ads = ads;
      pd.adman.ads_by_spot = {
        tab_bar: [],
        photo_side: []
      };
      for (_i = 0, _len = ads.length; _i < _len; _i++) {
        ad = ads[_i];
        if (pd.adman.ads_by_spot[ad.spot] != null) {
          pd.adman.ads_by_spot[ad.spot].push(ad);
        }
      }
      return this.changeTabBar();
    },
    changeTabBar: function() {
      var ad, el;
      el = $('#pdrp_bar_ad');
      ad = _.first(_.shuffle(pd.adman.ads_by_spot.tab_bar));
      $('span', el).fadeOut(200, function() {
        el.fadeTo(200, .8);
        el.attr('class', 'pdrp_ad adid:' + ad.adid);
        $(this).remove();
        el.html('<span style="opacity:0">' + ad.content + '</span>');
        return $('span', el).fadeTo(200, 1);
      });
      return setTimeout(function() {
        return pd.adman.changeTabBar();
      }, 120000);
    },
    track: function(event, adid) {
      return pdapi.get('adTrack', {
        event: event,
        adid: adid
      }, function(rsp) {});
    }
  };

  pdapi = {
    get: function(action, params, cb) {
      var bit, bits, bs, domain, _i, _len;
      bits = PDRP.ID.split('&');
      for (_i = 0, _len = bits.length; _i < _len; _i++) {
        bit = bits[_i];
        bs = bit.split('=');
        if (bs[0] === 'domain') {
          domain = bs[1];
        }
      }
      params.action = 'pdrp_' + action;
      params.domain = domain;
      return $.getJSON('http://photodropper.com/api?callback=?', params, function(rsp) {
        return cb(rsp);
      });
    }
  };

  _.whenReady('pd', function() {
    pd.modal = {
      opened: false,
      init: function() {
        return $('.pdrp_modal_close').live('click', function() {
          return pd.modal.close();
        });
      },
      open: function(name) {
        $('.pdrp_modal').hide();
        $('#pdrp_modal-' + name).show();
        $('#pdrp_modals').show();
        return pd.modal.opened = name;
      },
      close: function() {
        $('.pdrp_modal').hide();
        $('#pdrp_modals').hide();
        return pd.modal.opened = false;
      }
    };
    return pd.modal.init();
  });

  window.PDRP.txts = {
    insert_into_post: 'Insert into Post',
    insert_problem: "Hm - looks like there was a problem inserting that image. Try another time (you won't lose a credit).	If you still have trouble email help@photodropper.com. So sorry about that!"
  };

  pd.txt = function(txt) {
    var key, _ref;
    key = _.slugify(txt, '_');
    return (_ref = PDRP.txts[key]) != null ? _ref : txt;
  };

  Pane = XModel.extend({
    model: 'Pane',
    defaults: {
      tabs: [],
      activeTab: false
    },
    initialize: function(opts) {
      var tabs;
      if (opts == null) {
        opts = {};
      }
      pd.Pane = this;
      tabs = new Tabs();
      this.set({
        tabs: tabs
      });
      return this.build();
    },
    build: function() {
      var base, styles;
      base = _.t('pane', {});
      if (PDRP.ID === '?in=wordpress&domain=http://wp.tumblen') {
        pd.secure = 'http://photodropper.com/secure';
        styles = '<link rel="stylesheet" type="text/css" href="http://app.photodropper.com/templates/styles.css"/>';
        styles += '<link rel="stylesheet" type="text/css" href="http://app.photodropper.com/templates/gradients.css"/>';
      } else {
        pd.secure = 'https://photodropper.com/secure';
        styles = '<style type="text/css">' + _.t('styles', {}) + '</style>';
        styles += '<style type="text/css">' + _.t('gradients', {}) + '</style>';
      }
      $('body').append(base);
      this.pkg = $('#pdrp_pkg');
      this.pkg.append(styles);
      this.box = $('#pdrp_box');
      this.initEvents();
      this.newTab();
      this.checkLoggedIn();
      return this.showTab(1);
    },
    initEvents: function() {
      var pane,
        _this = this;
      pane = this;
      $('.pdrp_close').live('click', function() {
        return pane.hide();
      });
      $('.pdrp_logout_btn').live('click', function() {
        return pane.logout();
      });
      $('.pdrp_forgot_btn').live('click', function() {
        return pane.newTab().showForgot();
      });
      $('.pdrp_manage_account_btn').live('click', function() {
        return pane.newTab().showAccount();
      });
      $('.pdrp_photo_history_btn').live('click', function() {
        return pane.newTab().showHistory();
      });
      $('.pdrp_feedback').live('click', function() {
        return pane.newTab().showFeedback();
      });
      $('.pdrp_upgrade_btn').live('click', function() {
        return pane.newTab().showPlans();
      });
      $('.pdrp_user_settings').live('click', function() {
        return pane.newTab().showSettings();
      });
      $('.pdrp_ad').live('click', function() {
        var adid;
        adid = $(this).classData('adid');
        pd.adman.track('click', adid);
        return pane.newTab().showPlans();
      });
      $('.pdrp_new_tab').live('click', function() {
        return pane.newTab();
      });
      $('.pdrp_tab').live('click', function(e) {
        return pane.showTab_CLHandler(e, this, pane);
      });
      $('.pdrp_tab_close').live('click', function(e) {
        return pane.closeTab_CLHandler(this, pane);
      });
      $('.pdrp_contract_goto').live('click', function() {
        var id, shell;
        id = $(this).classData('goto');
        shell = $(this).closest('.pdrp_gotoshell');
        shell.scrollTo($('.pdrp_contract_section_' + id, shell));
        return false;
      });
      $('#pdrp_pxCancelAccount').live('click', function() {
        return pd.user.cancelSubscription();
      });
      return $(window).resize(function() {
        return pane.position();
      });
    },
    position: function() {
      var bh, bw, numHori, numVert, wh, ww;
      if ($('#pdrp_box').is(':visible')) {
        ww = $('body').width();
        wh = $('body').height() - $('#wpadminbar').height();
        this.box.css('width', ((_.toMultiple(ww - 40, 89)) + 34) + 'px').css('height', wh - 40 + 'px');
        bw = this.box.width();
        bh = this.box.height();
        this.box.css('left', (ww / 2) - (bw / 2) + 'px').css('top', ((wh / 2) - (bh / 2) + $('#wpadminbar').height()) + 'px');
        $('#pdrp_contentShell').css('height', _.x(bh - 60));
        pd.imgH = 89;
        pd.imgW = 89;
        numVert = Math.floor(($('#pdrp_box').innerHeight() - 83) / pd.imgH);
        numHori = Math.floor(($('#pdrp_contentShell').innerWidth()) / pd.imgW);
        pd.perPage = numVert * numHori;
        pd.numHori = numHori;
        pd.numVert = numVert;
        pd.contentWidth = $('#pdrp_box').width() - 26;
        pd.contentWidthWSide = pd.contentWidth - 300;
        $('#pdrp_primaryContentStyle').html('\
				.pdrp_primaryContent{\
					width: ' + _.x(pd.contentWidth) + ';\
				}\
				.pdrp_primaryContentWSide{\
					width: ' + _.x(pd.contentWidthWSide) + ';\
				}\
			');
        this.positionSearchSettings();
        this.positionStatus();
        $('.pdrp_searchSettings:visible').hide();
        if ((this.onPosition != null) && this.onPosition) {
          return this.onPosition();
        }
      }
    },
    positionStatus: function() {
      var $el;
      $el = $('.pdrp_statusIcons:visible');
      if ($('.pdrp_searchView:visible').length) {
        return $el.css('left', (($('#pdrp_box').width() / 2) - ($el.width() / 2)) + 'px');
      } else {
        return $el.hide();
      }
    },
    positionSearchSettings: function() {
      return $('.pdrp_searchSettings:visible').css('width', $('.pdrp_searchSettings:visible').parent().width() - 22 + 'px');
    },
    show: function() {
      this.pkg.show();
      this.sizeTabs();
      this.position();
      pd.tb.open();
      this.checkLoggedIn();
      return $.getJSON(PDRP.APP + '/api/?callback=?', {
        action: 'v',
        domain: pd.domain
      });
    },
    hide: function() {
      return this.pkg.hide();
    },
    newTab: function(name) {
      var newTab, tabs;
      if (name == null) {
        name = 'PhotoDropper Search';
      }
      newTab = new Tab({
        name: name,
        pane: this
      });
      this.lastNewTab = newTab;
      this.get('tabs').add(newTab);
      this.showTab(newTab.id);
      tabs = this.get('tabs');
      $('#pdrp_tabs').attr('class', 'pdrp_' + tabs.length + '_tabs');
      return newTab;
    },
    showTab: function(id) {
      pd.modal.close();
      $('.pdrp_tab').removeClass('pdrp_activetab');
      $('#pdrp_tab-' + id).addClass('pdrp_activetab');
      $('.pdrp_content').removeClass('pdrp_active_content');
      $('#pdrp_content-' + id).addClass('pdrp_active_content');
      return this.set({
        activeId: id,
        active: this.get('tabs').get(id)
      });
    },
    showTab_CLHandler: function(e, el, pane) {
      var id;
      id = $(el).idData();
      if (id != null) {
        return pane.showTab(id);
      }
    },
    closeTab: function(id) {
      var index, nextIndex, tabs;
      tabs = this.get('tabs');
      if (tabs.length > 1) {
        $('#pdrp_tabShell-' + id).hide().remove();
        $('#pdrp_content-' + id).remove();
        if (+id === +this.get('activeId')) {
          index = +tabs.indexById(id);
          nextIndex = index > 0 ? index - 1 : index + 1;
          this.showTab(tabs.at(nextIndex).id);
        }
        tabs.remove(id);
      }
      this.sizeTabs();
      return $('#pdrp_tabs').attr('class', 'pdrp_' + tabs.length + '_tabs');
    },
    closeTab_CLHandler: function(tab, pane) {
      return pane.closeTab($(tab).closest('.pdrp_tabShell').idData());
    },
    sizeTabs: function() {
      var newTabW, newW, numTabs, shellW, tab, tabW, tabs, _i, _len;
      shellW = $('#pdrp_tabs').width() - $('#pdrp_bar_buttons').width();
      tabs = $('.pdrp_aTab');
      numTabs = tabs.length;
      tabs.css('width', '');
      tabW = tabs.eq(0).width();
      newTabW = $('#pdrp_newTabShell').width();
      if (((tabW * numTabs) + newTabW) > shellW) {
        newW = Math.floor((shellW - newTabW) / numTabs) - 10;
        tabs.css('width', _.x(newW));
      } else {
        tabs.css('width', '');
      }
      for (_i = 0, _len = tabs.length; _i < _len; _i++) {
        tab = tabs[_i];
        tab = $(tab);
        tab.data('tab').fitTitle(tab.data('tab'), (newW != null ? newW : tabW));
      }
      return tabs.removeClass('pdrp_fresh_tab');
    },
    checkLoggedIn: function(cb) {
      var _this = this;
      if (cb == null) {
        cb = false;
      }
      return pdapi.get('isAuthd', {}, function(rsp) {
        if (rsp.authd) {
          if ((rsp.authd.sub != null) && (rsp.authd.sub.activesubid != null)) {
            $('.pdrp_ad').remove();
          }
          _this.updateUser(rsp.authd);
          _this.getHistory();
        } else {
          _.a('getAuth', {}, function(rsp) {
            if ((rsp.hash != null) && rsp.hash) {
              return pdapi.get('hashLogin', {
                hash: rsp.hash
              }, function(rsp) {
                if ((rsp.authd != null) && rsp.authd) {
                  return setTimeout(function() {
                    return pd.Pane.checkLoggedIn();
                  }, 750);
                }
              });
            }
          });
          pd.user = false;
          _this.updateUser();
        }
        if (rsp.ads != null) {
          pd.adman.init(rsp.ads);
        }
        if (cb) {
          return cb(rsp.authd);
        }
      });
    },
    logout: function() {
      var _this = this;
      return _.a('logout', {}, function(rsp) {
        return pdapi.get('logout', {}, function(rsp) {
          return _this.checkLoggedIn();
        });
      });
    },
    updateUser: function(user) {
      var crd_str, form, manage_plan, pane;
      if (user == null) {
        user = false;
      }
      pane = this;
      manage_plan = 'Manage Plan';
      if ((pd.trialstarted != null) && pd.trialstarted) {
        user.trial = 'active';
      }
      if (user) {
        pd.user = new User(user);
        if (user.trial === 'inactive') {
          manage_plan = 'Try Premium for $1';
        }
        crd_str = user.credits === 1 ? 'credit' : 'credits';
        $('.pdrp_user_panel_tab').html('\
				<img class="pdrp_user_av" src="http://www.gravatar.com/avatar/' + user.email_hash + '?s=24"/>' + user.first_name + ' ' + user.last_name + ' - ' + user.credits + ' ' + crd_str);
        $('#pdrp_user_signup').hide();
        $('#pdrp_user_settings').hide();
        return $('.pdrp_user_panel_content').html('\
				<a href="#" class="pdrp_user_panel_btn pdrp_manage_account_btn">Manage Account</a>\
				<a href="#" class="pdrp_user_panel_btn pdrp_photo_history_btn">Photo History</a>\
				<a href="#" class="pdrp_user_panel_btn pdrp_upgrade_btn">' + manage_plan + '</a>\
				<a href="#" class="pdrp_user_panel_btn pdrp_logout_btn">Logout</a>');
      } else {
        $('#pdrp_user_signup').show();
        form = $('#pdrp_user_login_form').html().replace('_TMP', '');
        $('.pdrp_user_panel_content').html(form);
        $('.pdrp_user_panel_tab').html('Login');
        return $('#pdrp_loginForm').unbind().submit(function() {
          form = $(this).formToJson();
          $('#pdrp_loginFormRsp').hide();
          pdapi.get('login', form, function(rsp) {
            if (rsp.err != null) {
              return $('#pdrp_loginFormRsp').html("Those credentials didn't work!").show();
            } else {
              pane.checkLoggedIn();
              if ((rsp.auth_hash != null) && (rsp.auth_id != null)) {
                _.a('updAuth', {
                  auth_hash: rsp.auth_hash,
                  auth_id: rsp.auth_id
                });
                rsp.auth_hash = null;
                return rsp.auth_id = null;
              }
            }
          });
          return false;
        });
      }
    },
    getHistory: function() {
      pd.history = {};
      return pdapi.get('getHistory', {}, function(rsp) {
        var pxobj, _i, _len, _ref;
        pd.history = rsp;
        pd.history.pxs = {};
        _ref = rsp.pxobjs;
        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
          pxobj = _ref[_i];
          pd.history.pxs[pxobj.id] = pxobj;
        }
        return _.isReady('history');
      });
    },
    openPopup: function(url, target, width, height) {
      var left, settings, top, x, y;
      x = 0;
      y = 0;
      if (window.screenX != null) {
        x = window.screenX;
        y = window.screenY;
      } else {
        x = window.screenLeft;
        y = window.screenTop;
      }
      top = y + ($(window).height() / 2) - (height / 2);
      left = x + ($(window).width() / 2) - (width / 2);
      settings = "width=" + width + ",height=" + height + ",location=1,scrollbars=1,top=" + top + ",left=" + left;
      window.popup = window.open(url, target, settings);
      return popup.focus();
    }
  });

  Photo = XModel.extend({
    model: 'Photo',
    initialize: function(opts) {
      if (opts == null) {
        opts = {};
      }
      if ((this.get('type')) === 'fk') {
        return this.set({
          flickrUrl: 'http://flickr.com/' + this.get('owner') + '/' + this.get('id')
        });
      } else {
        this.set({
          url_sq: this.get('thumbnail_110_url'),
          url_l: this.get('thumbnail_400_url'),
          url_s: this.get('thumbnail_400_url'),
          owner: this.get('creator_id')
        });
        return this.set({
          url_l: this.replaceWatermark(this.get('url_l')),
          url_s: this.replaceWatermark(this.get('url_s')),
          thumbnail_400_url: this.replaceWatermark(this.get('thumbnail_400_url'))
        });
      }
    },
    show: function() {
      return this.pkg.show();
    },
    getUrl: function(size) {
      var sizes, urlstr;
      if (size == null) {
        size = "small";
      }
      sizes = {
        square: '_sq',
        thumb: '_t',
        small: '_s',
        medium: '_m',
        bigger: '_z',
        large: '_l',
        original: '_o'
      };
      urlstr = 'url' + sizes[size];
      if (this.get(urlstr) != null) {
        return this.get(urlstr);
      } else {
        return false;
      }
    },
    replaceWatermark: function(url) {
      url = url.replace('http://', '').replace('_PXP', '').split('/');
      url[0] = 'wl.static.fotolia.com';
      url = 'http://' + url.join('/');
      return url;
    },
    optimalSaveUrl: function() {
      if (this.getUrl('large')) {
        return this.getUrl('large');
      } else if (this.getUrl('original')) {
        return 'http://app.photodropper.com/photo/?url=' + this.getUrl('original');
      } else if (this.getUrl('bigger')) {
        return this.getUrl('bigger');
      } else {
        return this.getUrl('medium');
      }
    },
    showSearch: function() {
      return changeView('listing');
    },
    preload: function(format, loaded) {
      var img;
      if (loaded == null) {
        loaded = false;
      }
      img = $('<img/>').attr('src', this.getUrl(format)).attr('id', format + '-pre-' + this.get('id')).load(function() {
        img.hide();
        if (loaded) {
          return loaded();
        }
      });
      if ((this.get('type') != null) && this.get('type') === 'px') {
        if (this.get('thumbnail_400_height') < this.get('thumbnail_400_width')) {
          img.css('width', 'auto').css('height', '85px');
        }
      }
      return $('#pdrp_preload').append(img);
    },
    addToGallery: function(tab, type, fade) {
      var gallery, img, thmbShell;
      if (type == null) {
        type = 'fk';
      }
      if (fade == null) {
        fade = false;
      }
      gallery = $('.pdrp_gallery_' + type, '#pdrp_content-' + tab);
      thmbShell = $('<div/>').addClass('pdrp_photo_thumbShell').hide();
      img = $('#square-pre-' + (this.get('id'))).clone().attr('class', 'pdrp_photo_thumb pdrp_photo_square').attr('id', 'thumbPhoto-' + (this.get('id'))).data('photo', this).show();
      thmbShell.append(img);
      if (fade) {
        gallery.append(thmbShell.fadeIn());
      } else {
        gallery.append(thmbShell.show());
      }
      return true;
    },
    startInsert: function(tab) {
      $('.pdrp_photoLoadingMsg').hide();
      if ((this.get('type')) === 'fk') {
        return this.saveFlickrPhoto(tab);
      } else if ((this.get('type')) === 'px') {
        if (pd.user) {
          if (pd.user.get('credits') > 0) {
            return pd.modal.open('pxInsertConfirmation');
          } else {
            return tab.showPlans({
              context: 'from_image',
              tab: tab
            });
          }
        } else {
          return tab.showSignup({
            context: 'from_image',
            tab: tab
          });
        }
      }
    },
    savePXPhoto: function(tab) {
      var btn, insertID, photoid, remoteID,
        _this = this;
      insertID = Math.floor((Math.random() * 1000) + 1);
      remoteID = 0;
      $('.pdrp_savingImageMsg', tab.get('el')).show().center({
        parent: '.pdrp_bigImgShell:visible',
        vertical: true
      });
      btn = $('#pdrp_pxInsertImage');
      btn.html('Authorizing...');
      photoid = this.get('id');
      $('.pdrp_modal_error').remove();
      return pdapi.get('useCreditOnPhoto', {
        photoid: photoid
      }, function(rsp) {
        var photo, user;
        user = rsp.user;
        if (rsp.err != null) {
          if (rsp.err_slug === 'not-enough-credits') {
            pd.modal.close();
            return model.showPlans({
              context: 'from_image',
              tab: model
            });
          }
        } else if (rsp.url != null) {
          btn.html('Saving Photo...');
          btn.removeClass('done');
          _.pulse(btn, 900, 'linear', {
            opacity: .6
          }, {
            opacity: 1
          }, function() {
            return btn.hasClass('done');
          });
          photo = {
            url: rsp.url,
            title: _this.get('title'),
            type: _this.get('type')
          };
          $.getJSON(PDRP.APP + '/api/?callback=?', {
            action: 'u',
            source: 'px',
            domain: pd.domain,
            image: photoid
          }, function(rsp) {
            remoteID = rsp.id;
            return _.nowReady('pd_insert' + insertID);
          });
          return _.a('saveImage', {
            photo: photo
          }, function(rsp) {
            var close;
            btn.addClass('done');
            btn.html('All Finished!');
            close = true;
            if (+user.credits === 0) {
              close = false;
              tab.showPlans({
                context: 'no_credits'
              });
              pd.modal.close();
            }
            pd.tb.openMedia(rsp.mediaid, close);
            pd.Pane.updateUser(user);
            setTimeout(function() {
              pd.modal.close();
              return btn.html('Insert Photo');
            }, 1000);
            return _.whenReady('pd_insert' + insertID, function() {
              return $.getJSON(PDRP.APP + '/api/?callback=?', {
                action: 'u',
                id: remoteID,
                domain: pd.domain
              });
            });
          }, {
            errFnc: function(rsp) {
              var $error;
              $error = $('<p/>').addClass('pdrp_modal_error').html(pd.txt('insert problem'));
              btn.html('Try Again');
              btn.addClass('done');
              return $('.pdrp_modalContent:visible').append($error);
            }
          });
        }
      });
    },
    saveFlickrPhoto: function(tab) {
      var insertID, photo, remoteID, url;
      insertID = Math.floor((Math.random() * 1000) + 1);
      remoteID = 0;
      $('.pdrp_savingImageMsg', tab.get('el')).show().center({
        parent: '.pdrp_bigImgShell:visible',
        vertical: true
      });
      url = this.optimalSaveUrl();
      photo = {
        url: url,
        flickrUrl: this.get('flickrUrl'),
        title: this.get('title'),
        owner: this.get('owner'),
        type: this.get('type')
      };
      $.getJSON(PDRP.APP + '/api/?callback=?', {
        action: 'u',
        source: 'flickr',
        domain: pd.domain,
        image: photo.flickrUrl
      }, function(rsp) {
        remoteID = rsp.id;
        return _.nowReady('pd_insert' + insertID);
      });
      return _.a('saveImage', {
        photo: photo
      }, function(rsp) {
        pd.tb.openMedia(rsp.mediaid);
        return _.whenReady('pd_insert' + insertID, function() {
          return $.getJSON(PDRP.APP + '/api/?callback=?', {
            action: 'u',
            id: remoteID,
            domain: pd.domain
          });
        });
      });
    }
  });

  Photos = (function() {

    Photos.prototype.photoFromUrl = function(url) {
      var bits;
      bits = url.split('/');
      bits = bits[bits.length - 1].split('_');
      return this.get(bits[0]);
    };

    function Photos(tab) {
      var typeObj, _ref;
      typeObj = {
        loaded: 1,
        insrtd: 0,
        loadedPage: 0
      };
      this.saveSizeTimo = 0;
      this.tab = tab;
      this.px = _.clone(typeObj);
      this.px.ps = [];
      this.px.byid = {};
      this.fk = _.clone(typeObj);
      this.fk.ps = [];
      this.fk.byid = {};
      this.pcntFk = (_ref = pd.defaults.pcntFk) != null ? _ref : 50;
      this.fk.hori = Math.floor(pd.numHori * (this.pcntFk / 100));
      this.px.hori = pd.numHori - this.fk.hori;
      this.sizeGalleries();
    }

    Photos.prototype.sizeGalleries = function() {
      var shell, width;
      shell = $('#pdrp_content-' + this.tab);
      width = $('.pdrp_gallery', shell).innerWidth();
      $('.pdrp_gallery_fkShell', shell).css('width', _.x(this.fk.hori * pd.imgW));
      $('.pdrp_gallery_pxShell', shell).css('width', _.x(this.px.hori * pd.imgW));
      this.fk.per = pd.numVert * this.fk.hori;
      return this.px.per = pd.numVert * this.px.hori;
    };

    Photos.prototype.resizeGalleries = function(event, ui) {
      var new_fk;
      new_fk = Math.floor(ui.offset.left / pd.imgW);
      return this.doResizeGalleries(new_fk);
    };

    Photos.prototype.doResizeGalleries = function(new_fk, save) {
      var new_px,
        _this = this;
      if (save == null) {
        save = true;
      }
      if (new_fk !== this.fk.hori) {
        this.fk.hori = new_fk;
        new_px = pd.numHori - new_fk;
        if (new_px > 1 && new_fk > 1) {
          this.fk.hori = new_fk;
          this.pcntFk = (this.fk.hori / pd.numHori) * 100;
          this.px.hori = new_px;
          this.sizeGalleries();
          this.syncGalleries();
          this.positionSlider();
          if (save) {
            clearTimeout(this.saveSizeTimo);
            return this.saveSizeTimo = setTimeout(function() {
              return _this.saveSize();
            }, 500);
          }
        } else {
          return false;
        }
      }
    };

    Photos.prototype.saveSize = function() {
      return pd.setDefault('pcntFk', this.pcntFk);
    };

    Photos.prototype.syncGalleries = function() {
      var count, diff, gallery, i, last, per, shell, thumb, thumbs, type, _i, _len, _ref, _results;
      shell = $('#pdrp_content-' + this.tab);
      _ref = ['fk', 'px'];
      _results = [];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        type = _ref[_i];
        gallery = $('.pdrp_gallery_' + type, shell);
        thumbs = $('.pdrp_photo_thumb', gallery);
        per = this[type].per;
        if (thumbs.length > per) {
          count = 0;
          _results.push((function() {
            var _j, _len1, _results1;
            _results1 = [];
            for (_j = 0, _len1 = thumbs.length; _j < _len1; _j++) {
              thumb = thumbs[_j];
              count++;
              if (count > per) {
                _results1.push($(thumb).parent().remove());
              } else {
                _results1.push(void 0);
              }
            }
            return _results1;
          })());
        } else if (thumbs.length < per) {
          diff = per - thumbs.length;
          last = this[type].byid[thumbs.last().data('photo').get('id')];
          _results.push((function() {
            var _j, _results1;
            _results1 = [];
            for (i = _j = 1; 1 <= diff ? _j <= diff : _j >= diff; i = 1 <= diff ? ++_j : --_j) {
              if (this[type].ps[last + i] != null) {
                this[type].ps[last + i].addToGallery(this.tab, type);
                _results1.push(this.showGallery());
              } else {
                _results1.push(void 0);
              }
            }
            return _results1;
          }).call(this));
        } else {
          _results.push(void 0);
        }
      }
      return _results;
    };

    Photos.prototype.showGallery = function() {
      var gallery;
      gallery = $('.pdrp_gallery', '#pdrp_content-' + this.tab);
      if (gallery.is(':hidden')) {
        gallery.show();
        return this.positionSlider();
      }
    };

    Photos.prototype.positionSlider = function() {
      var px, pxdims, shell, sl;
      shell = $('#pdrp_content-' + this.tab);
      px = $('.pdrp_gallery_pxShell', shell).css('width', _.x(this.px.hori * pd.imgW));
      pxdims = px.position();
      sl = $('.pdrp_gallerySlider ', shell);
      return sl.css('left', _.x(pxdims.left - sl.outerWidth() - 6)).css('top', _.x(pxdims.top - 16));
    };

    Photos.prototype.get = function(id, type) {
      if (type == null) {
        type = 'fk';
      }
      return this[type].ps[this[type].byid[id]];
    };

    Photos.prototype.getPage = function(type, page) {
      var end, i, out, start, _i;
      if (type == null) {
        type = 'fk';
      }
      if (page == null) {
        page = 1;
      }
      out = [];
      start = this[type].per * (page - 1);
      end = start + this[type].per - 1;
      for (i = _i = start; start <= end ? _i <= end : _i >= end; i = start <= end ? ++_i : --_i) {
        if (this[type].ps[i] != null) {
          out.push(this[type].ps[i]);
        }
      }
      return out;
    };

    Photos.prototype.havePage = function(type, page) {
      var end, start;
      if (type == null) {
        type = 'fk';
      }
      if (page == null) {
        page = 1;
      }
      start = this[type].per * (page - 1);
      end = start + this[type].per - 1;
      if ((this[type].ps[start] != null) && (this[type].ps[end] != null)) {
        return true;
      } else {
        return false;
      }
    };

    Photos.prototype.getLastPage = function(type) {
      var loaded, page;
      if (type == null) {
        type = 'fk';
      }
      loaded = Math.floor(this[type].loaded / 10) * 10;
      page = Math.ceil(loaded / this[type].per);
      return page;
    };

    Photos.prototype.addPhoto = function(photo, search, tab, srchpage, type) {
      var T, lastLoaded, loaded, page;
      if (type == null) {
        type = 'fk';
      }
      photo.type = type;
      photo = new Photo(photo);
      if (!(this[type].byid[photo.get('id')] != null)) {
        T = this;
        loaded = this[type].loaded;
        page = Math.ceil(loaded / this[type].per);
        lastLoaded = 0;
        this[type].ps.push(photo);
        this[type].byid[photo.get('id')] = T[type].ps.length - 1;
        return photo.preload('square', function() {
          var num, percent_done;
          num = $('.pdrp_photo_thumb', '#pdrp_content-' + tab + ' .pdrp_gallery_' + type).length;
          if (num < T[type].per) {
            photo.addToGallery(tab, type, true);
            T.showGallery();
            _.nowReady('listing-' + tab + '_' + srchpage);
          }
          T[type].loaded += 1;
          _.whenReady(type + '-loaded-' + tab + '_' + srchpage, function() {
            return photo.preload('small');
          });
          percent_done = ((T[type].loaded % T[type].per) / T[type].per) * 100;
          if (percent_done > 95) {
            if (T[type].loadedPage < page) {
              T[type].loadedPage = page;
              return _.nowReady(type + '-loaded-' + tab + '_' + srchpage);
            }
          }
        });
      } else {
        return _.nowReady(type + '-loaded-' + tab + '_' + srchpage);
      }
    };

    return Photos;

  })();

  Search = XModel.extend({
    model: 'Search',
    defaults: {
      query: '',
      page: 1,
      loadedPages: []
    },
    ready: false,
    initialize: function(opts) {
      if (opts == null) {
        opts = {};
      }
      this.photos = new Photos(this.getTab());
      this.initGallery();
      this.initViews();
      return this.initEvents();
    },
    initGallery: function() {
      var tab;
      tab = this.getTab();
      this.gallery_fk = $('.pdrp_gallery_fk', '#pdrp_content-' + tab);
      if (this.gallery_fk.length) {
        this.gallery_fk.empty();
      }
      this.gallery_px = $('.pdrp_gallery_px', '#pdrp_content-' + tab);
      if (this.gallery_px.length) {
        return this.gallery_px.empty();
      }
    },
    initEvents: function() {
      var T, el;
      T = this;
      el = this.get('tab').get('el');
      $('.pdrp_next', el).die().live('click', function() {
        return T.gotoNext(T);
      });
      $('.pdrp_prev', el).die().live('click', function() {
        return T.gotoPrev(T);
      });
      return $('.pdrp_gallerySlider', el).draggable({
        axis: "x",
        grid: [89, 0],
        drag: function(e, u) {
          return T.photos.resizeGalleries.call(T.photos, e, u);
        },
        stop: function(e, u) {
          return T.photos.resizeGalleries.call(T.photos, e, u);
        }
      });
    },
    getFilterVal: function(filter, shell) {
      var val;
      val = $('.pdrp_filter-' + filter, shell).val();
      if (val === "1" || val === "0") {
        val = parseInt(val);
      }
      return val;
    },
    getFilters: function() {
      var cc, com, filters, now, recencies, shell;
      now = Math.round(new Date().getTime() / 1000);
      recencies = {
        "any": 0,
        "year": 31556926,
        "month": 2629743,
        "week": 604800,
        "day": 86400
      };
      filters = {
        license: []
      };
      shell = $('#pdrp_content-' + pd.Pane.get('activeId'));
      cc = true;
      com = PDRP.COMMERCIAL;
      if (cc && !com) {
        filters.license.push([1, 2, 3]);
      }
      if (cc || com) {
        filters.license.push([4, 5, 6, 7]);
      }
      filters.license = filters.license.join(',');
      filters.max_taken_date = now - recencies[this.getFilterVal('recency', shell)];
      filters.sort = this.getFilterVal('sort', shell);
      return filters;
    },
    getTab: function() {
      return this.get('tab').id;
    },
    doSearch: function(page, preload, retry) {
      var T, q, tab,
        _this = this;
      if (page == null) {
        page = 0;
      }
      if (preload == null) {
        preload = 0;
      }
      if (retry == null) {
        retry = false;
      }
      T = this;
      tab = this.getTab();
      q = this.get('q');
      if (page < 0) {
        page = this.photos.getLastPage() + 1;
      } else {
        if (!page) {
          page = this.get('page');
        }
      }
      if (!preload) {
        this.updateStatus();
        this.gallery_fk.empty();
        this.gallery_px.empty();
      }
      this.searchViaPX(T, tab, q, page, preload, retry);
      setTimeout(function() {
        return _this.searchViaFlickr(T, tab, q, page, preload, retry);
      }, 200);
      return this.get('tab').setTitle(q);
    },
    searchViaFlickr: function(T, tab, q, srchpage, preload, retry) {
      var param, params, value;
      if (srchpage == null) {
        srchpage = 0;
      }
      if (preload == null) {
        preload = 2;
      }
      if (retry == null) {
        retry = false;
      }
      if (srchpage < 0) {
        srchpage = this.photos.getLastPage() + 1;
      }
      params = this.getFilters();
      params.method = 'flickr.photos.search';
      params.api_key = PDRP.FKEY;
      params.text = q;
      params.format = 'json';
      params.per_page = this.photos.fk.per;
      params.page = srchpage;
      params.extras = 'original_format,license,url_sq,url_t,url_s,url_m,url_z,url_l,url_o';
      for (param in params) {
        value = params[param];
        if (param !== 'page') {
          this.attributes[param] = value;
        }
      }
      return $.getJSON('http://api.flickr.com/services/rest?jsoncallback=?', params, function(rsp) {
        if (!rsp.photos.pages && !retry) {
          T.searchViaFlickr(T, tab, q, srchpage, preload, true);
          return false;
        }
        if (preload < 2) {
          _.whenReady('fk-loaded-' + tab + '_' + srchpage, function() {
            return T.searchViaFlickr(T, tab, q, -1, preload + 1, retry);
          });
        }
        T.loadPhotos(rsp.photos.photo, tab, srchpage, 'fk');
        T.checkPages(rsp.photos, preload);
        return T.updateStatus(false);
      });
    },
    searchViaPX: function(T, tab, q, srchpage, preload, retry) {
      var params;
      if (srchpage == null) {
        srchpage = 0;
      }
      if (preload == null) {
        preload = 2;
      }
      if (retry == null) {
        retry = false;
      }
      params = this.getFilters();
      params.q = q;
      params.per_page = this.photos.px.per;
      params.page = srchpage;
      return pdapi.get('searchPX', params, function(rsp) {
        var photos;
        if (preload < 2) {
          _.whenReady('px-loaded-' + tab + '_' + srchpage, function() {
            T.photos.positionSlider();
            return T.searchViaPX(T, tab, q, srchpage + 1, preload + 1, retry);
          });
        }
        photos = [];
        $.each(rsp.photos.premium, function(i, v) {
          v.type = 'px';
          return photos.push(v);
        });
        T.loadPhotos(photos, tab, srchpage, 'px');
        return T.updateStatus(false);
      });
    },
    updateStatus: function(status) {
      var tab, tabElm;
      if (status == null) {
        status = true;
      }
      tab = this.getTab();
      tabElm = $('#pdrp_content-' + tab);
      if (typeof status === "number" && status === -1) {
        status = false;
        $('#pdrp_startSearch').stop().css('z-index', '100000').fadeIn(200);
        $('.pdrp_previewShell', tabElm).html('<div class="pdrp_previewText">You can preview thumbnails here once you start a search</div>');
        $('.pdrp_searchStatus', tabElm).html('Start a Search').addClass('pdrp_searchStatus-disabled');
      }
      if (status) {
        $('#pdrp_searching').stop().css('z-index', '100000').fadeIn(200);
        $('#pdrp_startSearch').stop().fadeOut(200, function() {
          return $(this).css('z-index', '1');
        });
      } else {
        $('#pdrp_searching').stop().fadeOut(200, function() {
          return $(this).css('z-index', '1');
        });
      }
      pd.Pane.positionStatus();
      return false;
    },
    loadPhotos: function(photos, tab, srchpage, type) {
      var photo, _i, _len,
        _this = this;
      for (_i = 0, _len = photos.length; _i < _len; _i++) {
        photo = photos[_i];
        if ((typeof photo) === 'object') {
          this.photos.addPhoto(photo, this, tab, srchpage, type);
        }
      }
      return _.whenReady('listing-' + tab + '_' + srchpage, function() {
        if (!_this.ready) {
          return _this.ready = true;
        }
      });
    },
    checkPages: function(data, preload) {
      var tab, tabElm;
      tab = this.getTab();
      tabElm = $('#pdrp_content-' + tab);
      this.set({
        pages: parseInt(data.pages)
      });
      this.attributes.loadedPages.push(parseInt(data.page));
      if (!preload) {
        this.set({
          page: parseInt(data.page)
        });
        this.checkPageButtons();
        return ($('.pdrp_searchStatus', tabElm)).html('<span class="pdrp_onpage">' + data.page + '</span> of ' + data.pages).removeClass('pdrp_searchStatus-disabled');
      }
    },
    setPageNumber: function(page) {
      return $('.pdrp_onpage', '#pdrp_content-' + this.getTab()).html(page);
    },
    checkPageButtons: function(tab) {
      var tabElm;
      tab = this.getTab();
      tabElm = $('#pdrp_content-' + tab);
      if ((this.get('page')) < (this.get('pages'))) {
        $('.pdrp_next', tabElm).removeClass('pdrp_pageChange-disabled');
      } else {
        $('.pdrp_next', tabElm).addClass('pdrp_pageChange-disabled');
      }
      if ((this.get('page')) > 1) {
        return $('.pdrp_prev', tabElm).removeClass('pdrp_pageChange-disabled');
      } else {
        return $('.pdrp_prev', tabElm).addClass('pdrp_pageChange-disabled');
      }
    },
    gotoPage: function(page, force) {
      var fkphotos, photo, pxphotos, tab, tabElm, _i, _j, _len, _len1;
      if (force == null) {
        force = false;
      }
      tab = this.getTab();
      tabElm = $('#pdrp_content-' + tab);
      if (!page) {
        if (parseInt(this.get('page')) >= parseInt(this.get('pages'))) {
          return false;
        }
        page = (this.get('page')) + 1;
      } else if (page < 0) {
        if (!(this.get('page')) > 1) {
          return false;
        }
        page = (this.get('page')) - 1;
      }
      if ((this.photos.havePage('fk', page)) || force) {
        clearTimeout(this.nextSearchTimo);
        fkphotos = this.photos.getPage('fk', page);
        pxphotos = this.photos.getPage('px', page);
        this.gallery_fk.empty();
        this.gallery_px.empty();
        for (_i = 0, _len = fkphotos.length; _i < _len; _i++) {
          photo = fkphotos[_i];
          photo.addToGallery(tab, 'fk');
        }
        for (_j = 0, _len1 = pxphotos.length; _j < _len1; _j++) {
          photo = pxphotos[_j];
          photo.addToGallery(tab, 'px');
        }
        this.set({
          page: page
        });
        this.setPageNumber(page);
        this.checkPageButtons();
        if ((this.photos.getLastPage() - page) < 3) {
          if (!force) {
            return this.doSearch(-1, 1);
          }
        }
      } else {
        return this.doSearch(page);
      }
    },
    gotoNext: function() {
      return this.gotoPage(0);
    },
    gotoPrev: function() {
      return this.gotoPage(-1);
    },
    initViews: function() {
      var model;
      model = this;
      this.view = {};
      return this.view.SearchListing = XView.extend();
    }
  });

  Tab = XModel.extend({
    model: 'Pane',
    types: ['search', 'photo', 'welcome', 'card', 'account', 'signup', 'plan', 'settings', 'forgot', 'feedback', 'msg', 'trial', 'history'],
    defaults: {
      title: 'PhotoDropper Search',
      search: false
    },
    initialize: function(opts) {
      if (opts == null) {
        opts = {};
      }
      this.set({
        id: this.get('pane').get('tabs').useId()
      });
      this.initTabShell();
      this.initViews();
      this.Button = new this.view.Button({
        el: '#pdrp_tabs'
      });
      this.Content = this.showSearch('create');
      if (!parseInt(PDRP.WELCOMED)) {
        this.showWelcome();
      }
      this.initEvents();
      return slideToggleController.syncAll(0);
    },
    initTabShell: function() {
      var id, type, _i, _len, _ref, _results;
      id = this.get('id');
      $('#pdrp_contentShell').append($('<div/>').attr('id', "pdrp_content-" + id).attr('class', "pdrp_content"));
      this.set({
        el: $('#pdrp_content-' + id)
      });
      _ref = this.types;
      _results = [];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        type = _ref[_i];
        _results.push(this.get('el').append($('<div/>').attr('class', "pdrp_" + type + "View pdrp_tabView")));
      }
      return _results;
    },
    initEvents: function() {
      var T,
        _this = this;
      T = this;
      this.bind("change:title", this.setTitle);
      return $('#pdrp_user_signup').die().live('click', function() {
        return _this.showSignup();
      });
    },
    setTitle: function(str) {
      if (!(str != null)) {
        str = this.get('title');
      }
      str = _.resizeStr(str, 24);
      return $('#pdrp_tab-' + this.id + ' span').html(str);
    },
    fitTitle: function(tab, w) {
      var num;
      num = Math.floor((w - 8) / 9) - 1;
      return $('span', tab).html(_.truncate(tab.get('title'), num));
    },
    /*
    
    	These are sort of like controllers for the main views, feels like this is
    	not DRY
    */

    showView: function(name) {
      $('.pdrp_tabView, .pdrp_savingImageMsg', this.get('el')).hide();
      return $('.pdrp_' + name + 'View', this.get('el')).show();
    },
    showPhoto_CLHandler: function(photo, tab) {
      photo = $(photo).data('photo');
      return tab.showPhoto(photo);
    },
    showPhoto: function(photo) {
      var photoPage, photoView, search;
      if (photo == null) {
        photo = false;
      }
      if (!photo) {
        photo = this.get('selectedPhoto');
      }
      this.set({
        searchTitle: search = $('span', '#pdrp_tab-' + this.id).text(),
        selectedPhoto: photo
      });
      this.setTitle(photo.get('title'));
      photoPage = $('.pdrp_photoView', this.get('el'));
      photoView = new this.view.PhotoView({
        el: photoPage,
        photo: photo,
        search: search
      });
      return false;
    },
    showWelcome: function() {
      var welcomePage, welcomeView;
      this.setTitle('Welcome to PhotoDropper!');
      welcomePage = $('.pdrp_welcomeView', this.get('el'));
      welcomeView = new this.view.WelcomeView({
        el: welcomePage
      });
      return false;
    },
    showForgot: function() {
      var page, view;
      this.setTitle('Reset Your Password');
      page = $('.pdrp_forgotView', this.get('el'));
      view = new this.view.ForgotView({
        el: page
      });
      $('#pdrp_startSearch').hide();
      this.showView('forgot');
      return false;
    },
    showHistory: function() {
      var page, view;
      this.setTitle('Photo History');
      page = $('.pdrp_historyView', this.get('el'));
      view = new this.view.HistoryView({
        el: page
      });
      $('#pdrp_startSearch').hide();
      this.showView('history');
      return false;
    },
    showSettings: function() {
      var settingsPage, settingsView;
      this.setTitle('PhotoDropper Settings');
      settingsPage = $('.pdrp_settingsView', this.get('el'));
      settingsView = new this.view.SettingsView({
        el: settingsPage
      });
      $('#pdrp_startSearch').hide();
      return false;
    },
    showSignup: function(opts) {
      var signupPage, signupView;
      if (opts == null) {
        opts = false;
      }
      this.setTitle('Signup with PhotoDropper');
      signupPage = $('.pdrp_signupView', this.get('el'));
      signupView = new this.view.SignupView({
        el: signupPage,
        opts: opts
      });
      $('#pdrp_startSearch').hide();
      this.showView('signup');
      return false;
    },
    showAccount: function(opts) {
      var accountPage, accountView;
      if (opts == null) {
        opts = false;
      }
      this.setTitle('Edit Your Account');
      accountPage = $('.pdrp_accountView', this.get('el'));
      accountView = new this.view.AccountView({
        el: accountPage,
        opts: opts
      });
      $('#pdrp_startSearch').hide();
      this.showView('account');
      return false;
    },
    showPlans: function(opts) {
      var page, view;
      if (opts == null) {
        opts = false;
      }
      if (pd.user && pd.user.get('trial') !== 'inactive') {
        this.setTitle('Choose a Plan');
        page = $('.pdrp_planView', this.get('el'));
        view = new this.view.PlanView({
          el: page,
          opts: opts
        });
        $('#pdrp_startSearch').hide();
        this.showView('plan');
      } else if (pd.user) {
        this.showTrial(opts);
      } else {
        this.showSignup();
      }
      return false;
    },
    showTrial: function(opts) {
      var page, view;
      if (opts == null) {
        opts = false;
      }
      this.setTitle('Try Premium');
      page = $('.pdrp_trialView', this.get('el'));
      view = new this.view.TrialView({
        el: page,
        opts: opts
      });
      $('#pdrp_startSearch').hide();
      this.showView('trial');
      return false;
    },
    showMsg: function(title, message) {
      var page, view;
      if (title == null) {
        title = 'Hang-tight!';
      }
      if (message == null) {
        message = 'Loading';
      }
      this.setTitle(title);
      page = $('.pdrp_msgView', this.get('el'));
      view = new this.view.MsgView({
        el: page,
        title: title,
        msg: message
      });
      this.showView('msg');
      return false;
    },
    showFeedback: function() {
      var feedbackPage, feedbackView;
      this.setTitle('PhotoDropper Feedback');
      feedbackPage = $('.pdrp_feedbackView', this.get('el'));
      feedbackView = new this.view.FeedbackView({
        el: feedbackPage
      });
      $('#pdrp_startSearch').hide();
      return false;
    },
    showSearch: function(create) {
      var searchPage;
      if (create == null) {
        create = false;
      }
      if (create) {
        searchPage = $('.pdrp_searchView', this.get('el'));
        return new this.view.SearchView({
          el: searchPage
        });
      } else {
        return this.gotoSearchView(this);
      }
    },
    gotoSearchView: function(tab) {
      this.setTitle(this.get('searchTitle'));
      $('.pdrp_tabView', tab.get('el')).hide();
      return $('.pdrp_searchView', tab.get('el')).show();
    },
    initViews: function() {
      var model;
      model = this;
      this.view = {};
      _.do_hook('tab_view_init', model);
      return this.view.Button = XView.extend({
        initialize: function() {
          return this.prep('append');
        },
        prep: function(output) {
          var id;
          id = model.get('id');
          this.out = _.t('tab_button', {
            id: model.id,
            title: model.get('name')
          });
          return this.render(output);
        },
        rendered: function() {
          $('.pdrp_fresh_tab', '#pdrp_tabs').addClass('pdrp_aTab').show().data('tab', model);
          return pd.Pane.sizeTabs();
        }
      });
    }
  });

  Tabs = XCollection.extend({
    model: Tab,
    nextId: 1,
    useId: function() {
      var usedId;
      usedId = this.nextId;
      this.nextId += 1;
      return usedId;
    }
  });

  User = XModel.extend({
    model: 'User',
    initialize: function(opts) {
      if (opts == null) {
        opts = {};
      }
    },
    changePlan: function(plan, cb) {
      return pdapi.get('changePlan', {
        plan: plan
      }, function(rsp) {
        return cb(rsp);
      });
    },
    startTrial: function(cb) {
      return pdapi.get('startTrial', {}, function(rsp) {
        return cb(rsp);
      });
    },
    getSubscription: function() {
      if ((this.get('sub') != null) && (this.get('sub').plan_rank != null)) {
        return this.get('sub');
      } else {
        return false;
      }
    },
    cancelSubscription: function() {
      var btn;
      btn = $('#pdrp_pxCancelAccount');
      btn.html('Canceling...');
      return pdapi.get('cancelPlan', {}, function(rsp) {
        var tab;
        btn.html('Canceled!');
        tab = pd.Pane.get('active');
        tab.showMsg('Sorry to see you go!', "If there's anything we could have			done to improve your experience, please email team@photodropper.com");
        pd.modal.close();
        setTimeout(function() {
          return tab.showSearch();
        }, 2500);
        return pd.Pane.updateUser(rsp.user);
      });
    }
  });

  _.hook('tab_view_init', function(model) {
    return model.view.AccountView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('account_page', {});
        return this.render(output);
      },
      rendered: function() {
        var btn,
          _this = this;
        btn = $('.pdrp_flashyButton', this.el);
        pd.Pane.onPosition = function() {
          if ($('#pdrp_box').height() < 630) {
            return $('.pdrp_welcomeView', this.el).css('height', ($('#pdrp_box').innerHeight() - 70) + 'px').css('overflow', 'auto');
          } else {
            return $('.pdrp_welcomeView', this.el).css('height', '');
          }
        };
        $('.pdrp_user_email', this.el).val(pd.user.get('email'));
        $('.pdrp_user_first_name', this.el).val(pd.user.get('first_name'));
        $('.pdrp_user_last_name', this.el).val(pd.user.get('last_name'));
        $('.pdrp_accountForm', this.el).unbind().submit(function() {
          var email, first_name, last_name;
          email = $('.pdrp_user_email', _this.el).val();
          first_name = $('.pdrp_user_first_name', _this.el).val();
          last_name = $('.pdrp_user_last_name', _this.el).val();
          btn.val('Saving...');
          pdapi.get('changeUser', {
            email: email,
            first_name: first_name,
            last_name: last_name
          }, function(rsp) {
            btn.val('Saved!');
            pd.Pane.checkLoggedIn();
            return setTimeout(function() {
              return btn.val('Save');
            }, 1000);
          });
          return false;
        });
        $('.pdrp_passwordForm', this.el).unbind().submit(function() {
          var password;
          password = $('.pdrp_user_password', _this.el).val();
          btn.val('Saving...');
          pdapi.get('changePassword', {
            password: password
          }, function(rsp) {
            btn.val('Saved!');
            return setTimeout(function() {
              return btn.val('Save');
            }, 1000);
          });
          return false;
        });
        $('.pdrp_isCommercialCheck', this.el).val(PDRP.COMMERCIAL);
        setTimeout(function() {
          slideToggleController.init();
          return slideToggleController.syncAll();
        }, 50);
        pd.Pane.onPosition = function() {
          if ($('#pdrp_box').height() < 630) {
            return $('.pdrp_welcomeView', this.el).css('height', ($('#pdrp_box').innerHeight() - 70) + 'px').css('overflow', 'auto');
          } else {
            return $('.pdrp_welcomeView', this.el).css('height', '');
          }
        };
        return $('.pdrp_settingsForm').unbind().submit(function() {
          var comm;
          comm = $('.pdrp_isCommercialCheck', _this.el).val();
          btn.val('Saving...');
          PDRP.COMMERCIAL = +comm;
          _.a('setSettings', {
            commercial: comm,
            email: email
          }, function() {
            btn.val('Saved!');
            return setTimeout(function() {
              btn.val('Save');
              model.showSearch();
              $('#pdrp_startSearch').show();
              return pd.Pane.positionStatus();
            }, 500);
          });
          return false;
        });
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.FeedbackView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('feedback_page', {});
        return this.render(output);
      },
      rendered: function() {
        var btn;
        btn = $('.pdrp_flashyButton', this.el);
        model.showView('feedback');
        $('#pdrp_isCommercialCheck-yes_no').val(PDRP.COMMERCIAL);
        setTimeout(function() {
          slideToggleController.init();
          return slideToggleController.syncAll();
        }, 50);
        return $('#pdrp_feedbackForm').unbind().submit(function() {
          var email, msg;
          btn.val('Sending feedback...');
          msg = $('.pdrp_feedbackInp', this.el).val();
          email = $('.pdrp_user_nl_email', this.el).val();
          _.a('sendFeedback', {
            msg: msg,
            email: email
          }, function() {
            btn.val('You rock!');
            return setTimeout(function() {
              btn.val('Send');
              model.Content = new model.view.SearchView({
                el: '#pdrp_contentShell'
              });
              model.setTitle('PhotoDropper Search');
              $('#pdrp_startSearch').show();
              return pd.Pane.positionStatus();
            }, 500);
          });
          return false;
        });
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.ForgotView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('forgot_page', {});
        return this.render(output);
      },
      rendered: function() {
        var T,
          _this = this;
        T = this;
        return $('.pdrp_forgotForm', this.el).unbind().submit(function() {
          return T.submitForgot(T);
        });
      },
      submitForgot: function(T) {
        var btn, email,
          _this = this;
        btn = $('.pdrp_flashyButton', this.el);
        $('.pdrp_formErrors', this.el).remove();
        email = $('.pdrp_forgot_email', this.el).val();
        btn.val('Sending...');
        pdapi.get('resetPassword', {
          email: email
        }, function(rsp) {
          if (rsp.errs != null) {
            T.showFormErrors(rsp.errs);
            return btn.val('Try Again');
          } else {
            return model.showMsg('Password Reset Sent!', "Check your email to reset your password!");
          }
        });
        return false;
      },
      showFormErrors: function(errs) {
        var err, field, fieldErrs, html, type;
        html = '';
        for (field in errs) {
          fieldErrs = errs[field];
          html += '\
					<div class="pdrp_errs_shell">\
						<div class="pdrp_errs_field">' + _.capitalize(field) + '</div>';
          for (type in fieldErrs) {
            err = fieldErrs[type];
            if (type === 'isEmpty') {
              err = 'You have to fill this field out!';
            }
            html += '\
						<div class="pdrp_errs_msg">' + err + '</div>';
          }
          html += '</div>';
        }
        $('.pdrp_welcomeQuestionShell:visible').before($('<div/>').attr('class', 'pdrp_formErrors'));
        return $('.pdrp_formErrors', this.el).html(html);
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.HistoryView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('history_page', {});
        return this.render(output);
      },
      rendered: function() {
        var html, table;
        table = $('tbody', '#pdrp_historyTable');
        html = '';
        _.whenReady('history', function() {
          var date, id, photo, photoid, thumb, type, usage, _date, _i, _len, _ref, _results;
          pd.history.photos = {};
          _ref = pd.history.usages;
          _results = [];
          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
            usage = _ref[_i];
            if (usage.source === 'px') {
              type = usage.source === 'px' ? 'Premium' : 'Free';
              id = usage.image;
              if (pd.history.pxs[id] != null) {
                photo = pd.history.pxs[usage.image];
                photo.type = 'px';
                photo = new Photo(photo);
                photoid = photo.get('id');
                pd.history.photos[photoid] = photo;
                thumb = photo.getUrl('square');
                _date = new Date(usage.timestamp * 1000);
                date = (_date.getMonth() + 1) + '/' + (_date.getDate()) + '/' + _date.getFullYear();
                _results.push(html += '\
								<tr>\
									<td><div class="pdrp_photo_thumbShell"><img src="' + thumb + '"/></div></td>\
									<td>' + photo.get('title') + '</td>\
									<td>' + type + '</td>\
									<td>' + date + '</td>\
									<td><a class="pdrp_history_view photo:' + photoid + '" href="#">View Photo</a></td>\
								</tr>');
              } else {
                _results.push(void 0);
              }
            } else {
              _results.push(void 0);
            }
          }
          return _results;
        });
        table.html(html);
        return $('.pdrp_history_view', this.el).live('click', function() {
          var photo, photoid;
          photoid = $(this).classData('photo');
          photo = pd.history.photos[photoid];
          return pd.Pane.newTab().showPhoto(photo);
        });
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.MsgView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('msg_page', {});
        return this.render(output);
      },
      rendered: function() {
        $('.pdrp_msgTitle', this.el).html(this.options.title);
        return $('.pdrp_msgContent', this.el).html(this.options.msg);
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.PhotoView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id, img, photo;
        id = model.get('id');
        photo = this.options.photo;
        if (photo.get('url_l')) {
          img = photo.get('url_l');
        } else {
          img = photo.get('url_m');
        }
        this.out = _.t('photo_page', {
          img: img,
          imgLow: photo.get('url_s'),
          search: this.options.search,
          flickrUrl: photo.get('flickrUrl')
        });
        return this.render(output);
      },
      rendered: function() {
        this.initEvents();
        this.fitMainImage();
        return this.checkImageType();
      },
      initEvents: function() {
        var _this = this;
        $('.pdrp_backToSearch', this.el).die().live('click', (function() {
          return model.gotoSearchView(model);
        }));
        $('#pdrp_pxInsertImage').unbind().click(function() {
          return _this.options.photo.savePXPhoto(model);
        });
        $('.pdrp_useImage', this.el).die().live('click', function() {
          return model.get('selectedPhoto').startInsert(model);
        });
        return $('.pdrp_premiumOverlay', this.el).live('click', function() {
          if (pd.user) {
            return model.showPlans({
              context: 'from_image',
              tab: tab
            });
          } else {
            return model.showSignup({
              context: 'from_image',
              tab: model
            });
          }
        });
      },
      fitMainImage: function() {
        var bImg, bImgs, maxHeight, maxWidth, photo,
          _this = this;
        photo = this.options.photo;
        bImgs = $('.pdrp_bigImg', this.el).css('max-width', pd.contentWidth);
        maxHeight = ($('#pdrp_box').height() - 74) + 'px';
        maxWidth = pd.contentWidth;
        bImgs.css('height', maxHeight);
        bImg = $('.pdrp_lowQBigImg', this.el);
        $('.pdrp_imageMsg').hide();
        if ((photo.get('type')) === 'fk') {
          $('.pdrp_premiumOverlay', this.el).hide();
          bImg.load(function() {
            var newWidth;
            newWidth = bImg.width();
            if (newWidth > parseInt(maxWidth) - 20) {
              bImgs.css('height', 'auto').css('width', maxWidth);
            }
            return $('.pdrp_photoLoadingMsg', this.el).hide().center({
              parent: 'parent',
              vertical: true
            });
          });
          $('.pdrp_loadingBigImg', this.el).hide().load(function() {
            $('.pdrp_lowQBigImg:visible').hide();
            $(this).show().removeClass('prdp_loadingBigImg');
            return $('.pdrp_photoLoadingMsg:visible', this.el).hide();
          });
        } else {
          bImg.remove();
          bImg = $('.pdrp_bigImg', this.el);
          bImg.load(function() {
            var overlay;
            if ((!pd.user) || (+pd.user.get('credits') === 0)) {
              return overlay = $('.pdrp_premiumOverlay', _this.el).css('width', (bImg.width() - 40) + 'px').show();
            }
          });
        }
        $('.pdrp_tabView, .pdrp_savingImageMsg', model.get('el')).hide();
        return $('.pdrp_photoView', model.get('el')).show();
      },
      checkImageType: function() {
        var photo;
        photo = this.options.photo;
        if ((photo.get('type')) === 'px') {
          $('.pdrp_fk_button').hide();
          $('.pdrp_px_button').show();
          $('.pdrp_useImage', this.el).html(pd.txt('Insert into Post (1 Credit)'));
          $('.pdrp_resolutionNotice').show();
          if ((pd.history != null) && pd.history.pxs[photo.get('id')]) {
            return d(pd.history.pxs[photo.get('id')]);
          } else {
            return d('not-bought');
          }
        } else if ((photo.get('type')) === 'fk') {
          $('.pdrp_px_button').hide();
          $('.pdrp_fk_button').show();
          $('.pdrp_useImage', this.el).html(pd.txt('Insert into Post'));
          return $('.pdrp_resolutionNotice').hide();
        }
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.PlanView = XView.extend({
      checkTimo: 0,
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('plan_page', {});
        return this.render(output);
      },
      rendered: function() {
        var T, hasCard, next, oldplan, plan, plans, status, sub;
        T = this;
        hasCard = false;
        $('.pdrp_plans_context').hide();
        this.contextChanges();
        this.userChanges();
        pdapi.get('hasCard', {}, function(rsp) {
          if (rsp.hascard) {
            return hasCard = true;
          }
        });
        status = $('.pdrp_planStatus', this.el).hide();
        if (pd.user != null) {
          if (pd.user.attributes.trial === 'active') {
            next = pd.user.attributes.trial_end;
            status.html('You are currently in the PhotoDropper Premium Trial. You\'ll be \
					charged $15 on ' + next + '.');
          } else if (pd.user.attributes.sub && pd.user.attributes.sub.status !== 'canceled') {
            plans = {
              1: {
                name: 'Basic',
                price: '$15'
              },
              2: {
                name: 'Avid',
                price: '$25'
              },
              3: {
                name: 'Professional',
                price: '$50'
              }
            };
            sub = pd.user.attributes.sub;
            plan = plans[sub.productid];
            if (sub.pending === 'canceled') {
              status.html('You are currently on the ' + plan.name + ' plan but it will not renew.');
            } else {
              if (sub.pending.length) {
                oldplan = plans[sub.productid];
                plan = plans[sub.pending];
                status.html('You are currently on the ' + oldplan.name + ' plan but on\
							' + sub.next_str + ' you\'ll be charged ' + plan.price + ' for the ' + plan.name + '.');
              } else {
                plan = plans[sub.productid];
                status.html('You are currently on the ' + plan.name + ' plan. You\'ll be \
							charged ' + plan.price + ' on ' + sub.next_str + '.');
              }
            }
          } else {
            status.html('You aren\'t on any plan!');
            $('.pdrp_planButton-cancel').hide();
          }
          status.show();
        }
        $('.pdrp_planButton-free', this.el).die().live('click', function() {
          model.showSearch();
          if (T.options.opts.context === 'no_credits') {
            return pd.Pane.hide();
          }
        });
        $('.pdrp_planButton-ignore', this.el).die().live('click', function() {
          return pd.Pane.hide();
        });
        $('.pdrp_planButton-custom', this.el).die().live('click', function() {
          return model.showFeedback();
        });
        $('.pdrp_planButton-cancel', this.el).die().live('click', function() {
          return pd.modal.open('cancelConfirmation');
        });
        $('.pdrp_planButton', this.el).die().live('click', function() {
          var btn, id, newbtn;
          btn = $(this);
          id = btn.classData('plan');
          if (btn.data('onplan') != null) {
            return false;
          }
          newbtn = $('#pdrp_pxChangeAccount');
          newbtn.attr('class', 'pdrp_modalButton plan:' + id);
          return pd.modal.open('planChangeConfirmation');
        });
        return $('#pdrp_pxChangeAccount').die().live('click', function() {
          var btn, cardCheckInterval, changePlan, checkCard, id;
          btn = $(this);
          id = btn.classData('plan');
          btn.text('Hang tight...');
          setTimeout(function() {
            return pd.modal.close();
          }, 500);
          cardCheckInterval = 500;
          plans = {
            1: 1,
            2: 2,
            3: 3
          };
          plan = plans[id];
          changePlan = function() {
            model.showMsg('Hang Tight!', "We're setting up your account!");
            return pd.Pane.checkLoggedIn(function(authd) {
              if (authd) {
                return pd.user.changePlan(plan, function(rsp) {
                  if (rsp.no_card) {
                    model.showPlans();
                    return btn.click();
                  } else {
                    pd.Pane.updateUser(rsp.user);
                    return T.finish(rsp.status);
                  }
                });
              }
            });
          };
          checkCard = function() {
            if (popup.closed) {
              return pdapi.get('hasCard', {}, function(rsp) {
                if (rsp.hascard) {
                  return changePlan();
                } else {
                  return model.showPlans();
                }
              });
            } else {
              return setTimeout(function() {
                return checkCard();
              }, 500);
            }
          };
          clearTimeout(T.checkTimo);
          if (!hasCard) {
            model.showMsg('Enter Your Payment Info', 'A secure window will appear in a moment...');
            pd.Pane.openPopup(pd.secure, 'pdp', 580, 400);
            return setTimeout(function() {
              return checkCard();
            }, cardCheckInterval);
          } else {
            return changePlan(plan);
          }
        });
      },
      contextChanges: function() {
        var opts,
          _this = this;
        $('.pdrp_planButton-ignore').hide();
        opts = this.options.opts;
        if (opts && (opts.context != null)) {
          switch (opts.context) {
            case 'from_image':
              $('.pdrp_plans_from_image', this.el).show();
              $('.pdrp_backtoimage', this.el).unbind().click(function() {
                return opts.tab.showPhoto(opts.tab.get('selectedPhoto'));
              });
              return $('.pdrp_backtosearch', this.el).unbind().click(function() {
                return opts.tab.showSearch();
              });
            case 'no_credits':
              $('.pdrp_planButton-ignore').show();
              $('h2', this.el).html('You just used your last credit!');
              $('.pdrp_welcomeSubhead', this.el).html('Upgrade your Account to Get More Credits!');
              return $('.pdrp_planButton-free', this.el).html('Just continue to my image.');
          }
        }
      },
      userChanges: function() {
        var btn, i, plan, sub, _i, _results;
        sub = false;
        if ((pd.user != null) && (pd.user.getSubscription != null)) {
          sub = pd.user.getSubscription();
        }
        if (sub) {
          plan = +sub.plan_rank;
          $('.pdrp_planButton-free', this.el).html('Don\'t make any changes.');
          $('.pdrp_welcomeSubhead', this.el).html('We know you have specific needs so pick the plan that fits your goals!');
          _results = [];
          for (i = _i = 1; _i <= 3; i = ++_i) {
            btn = $('.pdrp_planChooseButton', $('.pdrp_planButton-' + i, this.el));
            if (i < plan) {
              _results.push(btn.html('Downgrade'));
            } else if (i > plan) {
              _results.push(btn.html('Upgrade!'));
            } else if (i === plan) {
              _results.push(btn.html('On this plan!').closest('.pdrp_planButton').data('onplan', 'true'));
            } else {
              _results.push(void 0);
            }
          }
          return _results;
        } else {
          return $('.pdrp_planButton-free', this.el).show();
        }
      },
      finish: function(status) {
        var _this = this;
        if (status === 'added') {
          model.showMsg('Welcome to PhotoDropper Premium!', "Your account is all setup - we're so excited to have you here! You'll be redirected in a moment.");
        } else if (status === 'changed') {
          model.showMsg("You're all set!", "You're plan has been changed");
        }
        return setTimeout(function() {
          if (_this.options.opts.context === 'no_credits') {
            pd.Pane.hide();
          }
          if (model.get('selectedPhoto') != null) {
            return model.showPhoto();
          } else {
            return model.showSearch();
          }
        }, 2250);
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.SearchView = XView.extend({
      initialize: function() {
        this.prep('append');
        this.formSettingsTimo = 0;
        return this.showFormSettingsTimo = 0;
      },
      prep: function(output) {
        this.out = _.t('search_page', {
          slider: 'pdrp_inp-slider',
          dropdown: 'pdrp_inp-dropdown'
        });
        return this.render(output);
      },
      rendered: function() {
        var id;
        id = model.get('id');
        this.initSearchBar();
        this.loadDefaults();
        xselectController.init();
        $('.pdrp_tabView', model.get('el')).hide();
        $('.pdrp_searchView', model.get('el')).show();
        $('.pdrp_searchSettings', model.get('el')).show();
        setTimeout(function() {
          return pd.Pane.positionSearchSettings();
        }, 50);
        return this.initEvents();
      },
      initSearchBar: function() {
        var id;
        id = model.get('id');
        return setTimeout(function() {
          return $('.pdrp_searchBox', '#pdrp_content-' + id).labeledInput('Type Here and Hit Enter to Search for Images', {
            cleared: function() {
              if (model.get('search') != null) {
                return model.get('search').updateStatus(-1);
              }
            }
          });
        }, 10);
      },
      initEvents: function() {
        var T,
          _this = this;
        T = this;
        $('.pdrp_searchForm', this.el).unbind().submit(function() {
          return _this.search_SHandler();
        });
        $('.pdrp_filter', this.el).live('change', function() {
          return _this.search_SHandler(model);
        }).live('change', function() {
          return _this.saveFilters(model);
        });
        $('.pdrp_photo_thumb', this.el).die().live('mouseover', function() {
          return T.showPreview(this);
        }).live('mouseout', function() {
          return T.hidePreview();
        }).live('click', function() {
          return model.showPhoto_CLHandler(this, model);
        });
        return $('.pdrp_showFormSettings', this.el).live('mouseover', function() {
          return _this.showFormSettings(model);
        }).live('mouseout', function() {
          return _this.hideFormSettings(model);
        });
      },
      showPreview: function(photo) {
        var T, tab;
        tab = model.id;
        T = model;
        if (!(pd.thmbTimo != null)) {
          pd.thmbTimo = 0;
        }
        if (!(pd.thmbTimo != null)) {
          pd.thmb2Timo = 0;
        }
        clearTimeout(pd.thmbTimo);
        clearTimeout(pd.thmb2Timo);
        return pd.thmb2Timo = setTimeout(function() {
          var $g, $p, $shell, photoObj, url;
          $p = $(photo);
          $shell = $('.pdrp_previewShell', $('#pdrp_content-' + tab));
          $g = $p.closest('.pdrp_gallery');
          if ($p.attr('src') != null) {
            photoObj = $p.data('photo');
            url = photoObj.getUrl('small');
            if (($p.attr('src') != null) && ((!(T.previewUrl != null)) || !(T.previewUrl === url))) {
              if ($p.hasClass('pdrp_photo_square')) {
                $shell.attr('id', 'prdp_preview-' + $p.idData());
              }
              $shell.data('photo', photoObj).hide().html('<div class="pdrp_previewInner"><img src="' + url + '" id="pdrp_previewImg"/></div>');
              return $('img', $shell).load(function() {
                var galDims, galHeight, galWidth, img, left, pDims, sHeight, sWidth, top;
                $shell.show();
                img = $(this);
                img.css('width', '240px');
                if (img.height() > 160) {
                  img.css('width', '');
                  img.css('height', '160px');
                }
                galWidth = $g.outerWidth();
                galHeight = $g.outerHeight();
                galDims = $g.offset();
                pDims = $p.offset();
                sWidth = $shell.outerWidth();
                sHeight = $shell.outerHeight();
                top = pDims.top + 10;
                left = pDims.left + 30;
                if (left + sWidth > galWidth + galDims.left) {
                  left = left - sWidth - 30;
                }
                if (top + sHeight > galHeight + galDims.top) {
                  top = top - sHeight;
                }
                top = top - $(window).scrollTop();
                $shell.css('top', _.x(top)).css('left', _.x(left)).show();
                return T.previewUrl = url;
              });
            } else {
              return $shell.show();
            }
          } else {
            return $shell.show();
          }
        }, 20);
      },
      hidePreview: function() {
        return pd.thmbTimo = setTimeout(function() {
          return $('.pdrp_previewShell').hide();
        }, 1000);
      },
      showFormSettings: function(tab) {
        clearTimeout(this.formSettingsTimo);
        return this.showFormSettingsTimo = setTimeout(function() {
          clearTimeout(this.formSettingsTimo);
          return $('.pdrp_searchSettings', tab.get('el')).fadeIn('fast');
        }, 500);
      },
      hideFormSettings: function(tab) {
        clearTimeout(this.showFormSettingsTimo);
        return this.formSettingsTimo = setTimeout(function() {
          return $('.pdrp_searchSettings', tab.get('el')).fadeOut('fast');
        }, 300);
      },
      loadDefaults: function() {
        var name, val, _ref, _results;
        _ref = pd.defaults.filters;
        _results = [];
        for (name in _ref) {
          val = _ref[name];
          _results.push($('.pdrp_filter-' + name, this.el).val(val));
        }
        return _results;
      },
      saveFilters: function(tab) {
        var name, val, _ref;
        _ref = pd.defaults.filters;
        for (name in _ref) {
          val = _ref[name];
          pd.defaults.filters[name] = $('.pdrp_filter-' + name, this.el).val();
        }
        return pd.saveDefaults();
      },
      startSearch: function(q) {
        var newSearch;
        newSearch = new Search({
          q: q,
          tab: model
        });
        model.set({
          search: newSearch
        });
        return model.get('search').doSearch();
      },
      search_SHandler: function() {
        var input, q;
        input = $('.pdrp_searchBox', this.el);
        if (input.hasClass('labeledInput-active')) {
          q = input.val();
          this.startSearch(q);
          $.getJSON(PDRP.APP + '/api/?callback=?', {
            action: 'q',
            q: q,
            domain: pd.domain
          });
        }
        return false;
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.SettingsView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var btn, id;
        id = model.get('id');
        this.out = _.t('settings_page', {});
        this.render(output);
        btn = $('.pdrp_flashyButton', this.el);
        model.showView('settings');
        $('#pdrp_isCommercialCheck-yes_no', this.el).val(PDRP.COMMERCIAL);
        setTimeout(function() {
          slideToggleController.init();
          return slideToggleController.syncAll();
        }, 50);
        pd.Pane.onPosition = function() {
          if ($('#pdrp_box').height() < 630) {
            return $('.pdrp_welcomeView', this.el).css('height', ($('#pdrp_box').innerHeight() - 70) + 'px').css('overflow', 'auto');
          } else {
            return $('.pdrp_welcomeView', this.el).css('height', '');
          }
        };
        $('.pdrp_user_email', this.el).val(PDRP.USEREMAIL);
        return $('.pdrp_settingsForm', this.el).unbind().submit(function() {
          var comm, email;
          comm = $('#pdrp_isCommercialCheck-yes_no', this.el).val();
          email = $('.pdrp_user_email', this.el).val();
          btn.val('Saving...');
          PDRP.COMMERCIAL = comm;
          _.a('setSettings', {
            commercial: comm,
            email: email
          }, function() {
            var params;
            if (email.length) {
              params = {
                email: email,
                meta_web_form_id: '1223567553',
                meta_split_id: '',
                listname: 'photodropper',
                redirect: 'http://www.aweber.com/thankyou-coi.htm?m=text',
                meta_adtracking: 'photodropper',
                meta_message: '1',
                meta_required: 'email',
                meta_tooltip: ''
              };
              $.post('http://www.aweber.com/scripts/addlead.pl', params, function() {});
            }
            btn.val('Saved!');
            return setTimeout(function() {
              btn.val('Save');
              model.Content = new model.view.SearchView({
                el: '#pdrp_contentShell'
              });
              model.setTitle('PhotoDropper Search');
              $('#pdrp_startSearch').show();
              return pd.Pane.positionStatus();
            }, 500);
          });
          return false;
        });
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.SignupView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('signup_page', {});
        return this.render(output);
      },
      rendered: function() {
        var T, opts,
          _this = this;
        T = this;
        opts = this.options.opts;
        $('.pdrp_signup_context').hide();
        if (opts && (opts.context != null)) {
          switch (opts.context) {
            case 'from_image':
              $('.pdrp_signup_from_image', this.el).show();
              $('.pdrp_backtoimage', this.el).unbind().click(function() {
                return opts.tab.showPhoto(opts.tab.get('selectedPhoto'));
              });
              $('.pdrp_backtosearch', this.el).unbind().click(function() {
                return opts.tab.showSearch();
              });
          }
        }
        $('#pdrp_user_email').val(PDRP.USEREMAIL);
        $('#pdrp_user_first_name').val(PDRP.USERFNAME);
        $('#pdrp_user_last_name').val(PDRP.USERLNAME);
        return $('#pdrp_signupForm').unbind().submit(function() {
          return T.submitSignup(T);
        });
      },
      submitSignup: function(T) {
        var btn, user,
          _this = this;
        btn = $('.pdrp_flashyButton', this.el);
        $('#pdrp_formErrors').remove();
        user = {
          first_name: $('#pdrp_user_first_name').val(),
          last_name: $('#pdrp_user_last_name').val(),
          email: $('#pdrp_user_email').val(),
          password: $('#pdrp_user_password').val()
        };
        btn.val('Signing you up!');
        pdapi.get('createUser', user, function(rsp) {
          var whenAuthd;
          if (rsp.errs != null) {
            T.showFormErrors(rsp.errs);
            return false;
          }
          if ((rsp.auth_hash != null) && (rsp.auth_id != null)) {
            _.a('updAuth', {
              auth_hash: rsp.auth_hash,
              auth_id: rsp.auth_id
            }, function(rsp) {
              rsp.auth_hash = null;
              return rsp.auth_id = null;
            });
          }
          btn.val('Done!');
          pd.user = 'created';
          whenAuthd = function() {
            return model.showPlans();
          };
          setTimeout(function() {
            var params;
            btn.val('Save');
            params = {
              name: user.first_name,
              email: user.email,
              meta_web_form_id: '1223567553',
              meta_split_id: '',
              listname: 'photodropper',
              redirect: 'http://www.aweber.com/thankyou-coi.htm?m=text',
              meta_adtracking: 'photodropper',
              meta_message: '1',
              meta_required: 'email',
              meta_tooltip: ''
            };
            return $.post('http://www.aweber.com/scripts/addlead.pl', params);
          }, 650);
          return pd.Pane.checkLoggedIn(whenAuthd);
        });
        return false;
      },
      showFormErrors: function(errs) {
        var err, field, fieldErrs, html, type;
        html = '';
        for (field in errs) {
          fieldErrs = errs[field];
          html += '\
					<div class="pdrp_errs_shell">\
						<div class="pdrp_errs_field">' + _.capitalize(field) + '</div>';
          for (type in fieldErrs) {
            err = fieldErrs[type];
            if (type === 'isEmpty') {
              err = 'You have to fill this field out!';
            }
            html += '\
						<div class="pdrp_errs_msg">' + err + '</div>';
          }
          html += '</div>';
        }
        $('.pdrp_welcomeQuestionShell:visible').before($('<div/>').attr('id', 'pdrp_formErrors'));
        return $('#pdrp_formErrors').html(html);
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.TrialView = XView.extend({
      checkTimo: 0,
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('trial_page', {});
        return this.render(output);
      },
      rendered: function() {
        var T, hasCard;
        T = this;
        hasCard = false;
        $('.pdrp_plans_context').hide();
        this.contextChanges();
        pdapi.get('hasCard', {}, function(rsp) {
          if (rsp.hascard) {
            return hasCard = true;
          }
        });
        $('.pdrp_trialButton', this.el).die().live('click', function() {
          return pd.modal.open('signupConfirmation');
        });
        return $('#pdrp_pxStartTrial').die().live('click', function() {
          var btn, cardCheckInterval, changePlan, checkCard, id;
          btn = $(this);
          if (btn.data('onplan') != null) {
            return false;
          }
          pd.modal.close();
          id = btn.classData('plan');
          cardCheckInterval = 500;
          changePlan = function() {
            model.showMsg('Hang Tight!', "We're setting up your account!");
            return pd.Pane.checkLoggedIn(function(authd) {
              if (authd) {
                return pd.user.startTrial(function(rsp) {
                  if (rsp.no_card) {
                    model.showPlans();
                    return btn.click();
                  } else {
                    pd.trialstarted = true;
                    pd.Pane.updateUser(rsp.user);
                    return T.finish(rsp.status);
                  }
                });
              }
            });
          };
          checkCard = function() {
            if (popup.closed) {
              return pdapi.get('hasCard', {}, function(rsp) {
                if (rsp.hascard) {
                  return changePlan();
                } else {
                  return model.showPlans();
                }
              });
            } else {
              return setTimeout(function() {
                return checkCard();
              }, 500);
            }
          };
          clearTimeout(T.checkTimo);
          if (!hasCard) {
            model.showMsg('Enter Your Payment Info', 'A secure window will appear in a moment...');
            pd.Pane.openPopup(pd.secure, 'pdp', 580, 400);
            return setTimeout(function() {
              return checkCard();
            }, cardCheckInterval);
          } else {
            return changePlan();
          }
        });
      },
      contextChanges: function() {
        var opts,
          _this = this;
        opts = this.options.opts;
        if (opts && (opts.context != null)) {
          switch (opts.context) {
            case 'from_image':
              $('.pdrp_plans_from_image', this.el).show();
              $('.pdrp_backtoimage', this.el).unbind().click(function() {
                return opts.tab.showPhoto(opts.tab.get('selectedPhoto'));
              });
              return $('.pdrp_backtosearch', this.el).unbind().click(function() {
                return opts.tab.showSearch();
              });
          }
        }
      },
      finish: function(status) {
        if (status === 'added') {
          model.showMsg('Welcome to PhotoDropper Premium!', "Your account is all setup - we're so excited to have you here! You'll be redirected in a moment.");
        } else if (status === 'changed') {
          model.showMsg("You're all set!", "You're plan has been changed");
        }
        return setTimeout(function() {
          if (model.get('selectedPhoto') != null) {
            return model.showPhoto();
          } else {
            return model.showSearch();
          }
        }, 2250);
      }
    });
  });

  _.hook('tab_view_init', function(model) {
    return model.view.WelcomeView = XView.extend({
      initialize: function() {
        return this.prep('replace');
      },
      prep: function(output) {
        var id;
        id = model.get('id');
        this.out = _.t('welcome_page', {});
        return this.render(output);
      },
      rendered: function() {
        var _this = this;
        model.showView('welcome');
        setTimeout(function() {
          return slideToggleController.init();
        }, 50);
        pd.Pane.onPosition = function() {
          if ($('#pdrp_box').height() < 630) {
            return $('.pdrp_welcomeView', this.el).css('height', ($('#pdrp_box').innerHeight() - 70) + 'px').css('overflow', 'auto');
          } else {
            return $('.pdrp_welcomeView', this.el).css('height', '');
          }
        };
        $('#pdrp_user_email').val(PDRP.USEREMAIL);
        return $('#pdrp_welcomeForm').unbind().submit(function() {
          var comm, descr, email;
          if (!(1 * $('.pdrp_acceptLegalese', _this.el).val())) {
            descr = $('.pdrp_legal_descr', _this.el);
            descr.attr('style', 'font-weight:bold; color:#c10');
            setTimeout(function() {
              return descr.attr('style', '');
            }, 250);
            return false;
          }
          comm = $('.pdrp_isCommercialCheck', _this.el).val();
          email = $('.pdrp_user_email', _this.el).val();
          _.a('setSettings', {
            commercial: comm,
            email: email
          }, function() {
            var params;
            if (email.length) {
              params = {
                email: email,
                meta_web_form_id: '1223567553',
                meta_split_id: '',
                listname: 'photodropper',
                redirect: 'http://www.aweber.com/thankyou-coi.htm?m=text',
                meta_adtracking: 'photodropper',
                meta_message: '1',
                meta_required: 'email',
                meta_tooltip: ''
              };
              $.post('http://www.aweber.com/scripts/addlead.pl', params);
            }
            return _.a('mark', {
              mark: 'welcome'
            }, function() {
              return PDRP.WELCOMED = 1;
            });
          });
          model.showSearch();
          $('#pdrp_startSearch').show();
          pd.Pane.positionStatus();
          return false;
        });
      }
    });
  });

}).call(this);
