
(function($){var hasPlaceholder='placeholder'in document.createElement('input');var isOldOpera=$.browser.opera&&$.browser.version<10.5;$.fn.placeholder=function(options){var options=$.extend({},$.fn.placeholder.defaults,options),o_left=options.placeholderCSS.left;return(hasPlaceholder)?this:this.each(function(){var $this=$(this),inputVal=$.trim($this.val()),inputWidth=$this.width(),inputHeight=$this.height(),inputClass=$this.attr('class'),inputId=(this.id)?this.id:'placeholder'+(+new Date()),placeholderText=$this.attr('placeholder'),placeholder=$('<label for='+inputId+' class="'+inputClass+'">'+placeholderText+'</label>');options.placeholderCSS['width']=inputWidth;options.placeholderCSS['height']=inputHeight;options.placeholderCSS.left=(isOldOpera&&(this.type=='email'||this.type=='url'))?'11%':o_left;placeholder.css(options.placeholderCSS);if(!inputVal){$this.wrap(options.inputWrapper);$this.attr('id',inputId).after(placeholder);};$this.focus(function(){if(!$.trim($this.val())){$this.parent().find('label[for='+$(this).attr('id')+']').hide();};});$this.blur(function(){if(!$.trim($this.val())){$this.val('');$this.parent().find('label[for='+$(this).attr('id')+']').show();};});});};$.fn.placeholder.defaults={inputWrapper:'<div class="placeholder_wrapper pr"></div>',placeholderCSS:{}};})(jQuery);(function(){var root=this;var previousUnderscore=root._;var breaker={};var ArrayProto=Array.prototype,ObjProto=Object.prototype;var slice=ArrayProto.slice,unshift=ArrayProto.unshift,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty;var
nativeForEach=ArrayProto.forEach,nativeMap=ArrayProto.map,nativeReduce=ArrayProto.reduce,nativeReduceRight=ArrayProto.reduceRight,nativeFilter=ArrayProto.filter,nativeEvery=ArrayProto.every,nativeSome=ArrayProto.some,nativeIndexOf=ArrayProto.indexOf,nativeLastIndexOf=ArrayProto.lastIndexOf,nativeIsArray=Array.isArray,nativeKeys=Object.keys;var _=function(obj){return new wrapper(obj);};if(typeof module!=='undefined'&&module.exports){module.exports=_;_._=_;}else{root._=_;}
_.VERSION='1.1.3';var each=_.each=_.forEach=function(obj,iterator,context){var value;if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context);}else if(_.isNumber(obj.length)){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===breaker)return;}}else{for(var key in obj){if(hasOwnProperty.call(obj,key)){if(iterator.call(context,obj[key],key,obj)===breaker)return;}}}};_.map=function(obj,iterator,context){if(nativeMap&&obj.map===nativeMap)return obj.map(iterator,context);var results=[];each(obj,function(value,index,list){results[results.length]=iterator.call(context,value,index,list);});return results;};_.reduce=_.foldl=_.inject=function(obj,iterator,memo,context){var initial=memo!==void 0;if(nativeReduce&&obj.reduce===nativeReduce){if(context)iterator=_.bind(iterator,context);return initial?obj.reduce(iterator,memo):obj.reduce(iterator);}
each(obj,function(value,index,list){if(!initial&&index===0){memo=value;}else{memo=iterator.call(context,memo,value,index,list);}});return memo;};_.reduceRight=_.foldr=function(obj,iterator,memo,context){if(nativeReduceRight&&obj.reduceRight===nativeReduceRight){if(context)iterator=_.bind(iterator,context);return memo!==void 0?obj.reduceRight(iterator,memo):obj.reduceRight(iterator);}
var reversed=(_.isArray(obj)?obj.slice():_.toArray(obj)).reverse();return _.reduce(reversed,iterator,memo,context);};_.find=_.detect=function(obj,iterator,context){var result;any(obj,function(value,index,list){if(iterator.call(context,value,index,list)){result=value;return true;}});return result;};_.filter=_.select=function(obj,iterator,context){if(nativeFilter&&obj.filter===nativeFilter)return obj.filter(iterator,context);var results=[];each(obj,function(value,index,list){if(iterator.call(context,value,index,list))results[results.length]=value;});return results;};_.reject=function(obj,iterator,context){var results=[];each(obj,function(value,index,list){if(!iterator.call(context,value,index,list))results[results.length]=value;});return results;};_.every=_.all=function(obj,iterator,context){iterator=iterator||_.identity;if(nativeEvery&&obj.every===nativeEvery)return obj.every(iterator,context);var result=true;each(obj,function(value,index,list){if(!(result=result&&iterator.call(context,value,index,list)))return breaker;});return result;};var any=_.some=_.any=function(obj,iterator,context){iterator=iterator||_.identity;if(nativeSome&&obj.some===nativeSome)return obj.some(iterator,context);var result=false;each(obj,function(value,index,list){if(result=iterator.call(context,value,index,list))return breaker;});return result;};_.include=_.contains=function(obj,target){if(nativeIndexOf&&obj.indexOf===nativeIndexOf)return obj.indexOf(target)!=-1;var found=false;any(obj,function(value){if(found=value===target)return true;});return found;};_.invoke=function(obj,method){var args=slice.call(arguments,2);return _.map(obj,function(value){return(method?value[method]:value).apply(value,args);});};_.pluck=function(obj,key){return _.map(obj,function(value){return value[key];});};_.max=function(obj,iterator,context){if(!iterator&&_.isArray(obj))return Math.max.apply(Math,obj);var result={computed:-Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value;computed>=result.computed&&(result={value:value,computed:computed});});return result.value;};_.min=function(obj,iterator,context){if(!iterator&&_.isArray(obj))return Math.min.apply(Math,obj);var result={computed:Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value;computed<result.computed&&(result={value:value,computed:computed});});return result.value;};_.sortBy=function(obj,iterator,context){return _.pluck(_.map(obj,function(value,index,list){return{value:value,criteria:iterator.call(context,value,index,list)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}),'value');};_.sortedIndex=function(array,obj,iterator){iterator=iterator||_.identity;var low=0,high=array.length;while(low<high){var mid=(low+high)>>1;iterator(array[mid])<iterator(obj)?low=mid+1:high=mid;}
return low;};_.toArray=function(iterable){if(!iterable)return[];if(iterable.toArray)return iterable.toArray();if(_.isArray(iterable))return iterable;if(_.isArguments(iterable))return slice.call(iterable);return _.values(iterable);};_.size=function(obj){return _.toArray(obj).length;};_.first=_.head=function(array,n,guard){return n&&!guard?slice.call(array,0,n):array[0];};_.rest=_.tail=function(array,index,guard){return slice.call(array,_.isUndefined(index)||guard?1:index);};_.last=function(array){return array[array.length-1];};_.compact=function(array){return _.filter(array,function(value){return!!value;});};_.flatten=function(array){return _.reduce(array,function(memo,value){if(_.isArray(value))return memo.concat(_.flatten(value));memo[memo.length]=value;return memo;},[]);};_.without=function(array){var values=slice.call(arguments,1);return _.filter(array,function(value){return!_.include(values,value);});};_.uniq=_.unique=function(array,isSorted){return _.reduce(array,function(memo,el,i){if(0==i||(isSorted===true?_.last(memo)!=el:!_.include(memo,el)))memo[memo.length]=el;return memo;},[]);};_.intersect=function(array){var rest=slice.call(arguments,1);return _.filter(_.uniq(array),function(item){return _.every(rest,function(other){return _.indexOf(other,item)>=0;});});};_.zip=function(){var args=slice.call(arguments);var length=_.max(_.pluck(args,'length'));var results=new Array(length);for(var i=0;i<length;i++)results[i]=_.pluck(args,""+i);return results;};_.indexOf=function(array,item){if(nativeIndexOf&&array.indexOf===nativeIndexOf)return array.indexOf(item);for(var i=0,l=array.length;i<l;i++)if(array[i]===item)return i;return-1;};_.lastIndexOf=function(array,item){if(nativeLastIndexOf&&array.lastIndexOf===nativeLastIndexOf)return array.lastIndexOf(item);var i=array.length;while(i--)if(array[i]===item)return i;return-1;};_.range=function(start,stop,step){var args=slice.call(arguments),solo=args.length<=1,start=solo?0:args[0],stop=solo?args[0]:args[1],step=args[2]||1,len=Math.max(Math.ceil((stop-start)/step),0),idx=0,range=new Array(len);while(idx<len){range[idx++]=start;start+=step;}
return range;};_.bind=function(func,obj){var args=slice.call(arguments,2);return function(){return func.apply(obj||{},args.concat(slice.call(arguments)));};};_.bindAll=function(obj){var funcs=slice.call(arguments,1);if(funcs.length==0)funcs=_.functions(obj);each(funcs,function(f){obj[f]=_.bind(obj[f],obj);});return obj;};_.memoize=function(func,hasher){var memo={};hasher=hasher||_.identity;return function(){var key=hasher.apply(this,arguments);return key in memo?memo[key]:(memo[key]=func.apply(this,arguments));};};_.delay=function(func,wait){var args=slice.call(arguments,2);return setTimeout(function(){return func.apply(func,args);},wait);};_.defer=function(func){return _.delay.apply(_,[func,1].concat(slice.call(arguments,1)));};var limit=function(func,wait,debounce){var timeout;return function(){var context=this,args=arguments;var throttler=function(){timeout=null;func.apply(context,args);};if(debounce)clearTimeout(timeout);if(debounce||!timeout)timeout=setTimeout(throttler,wait);};};_.throttle=function(func,wait){return limit(func,wait,false);};_.debounce=function(func,wait){return limit(func,wait,true);};_.wrap=function(func,wrapper){return function(){var args=[func].concat(slice.call(arguments));return wrapper.apply(wrapper,args);};};_.compose=function(){var funcs=slice.call(arguments);return function(){var args=slice.call(arguments);for(var i=funcs.length-1;i>=0;i--){args=[funcs[i].apply(this,args)];}
return args[0];};};_.keys=nativeKeys||function(obj){if(_.isArray(obj))return _.range(0,obj.length);var keys=[];for(var key in obj)if(hasOwnProperty.call(obj,key))keys[keys.length]=key;return keys;};_.values=function(obj){return _.map(obj,_.identity);};_.functions=_.methods=function(obj){return _.filter(_.keys(obj),function(key){return _.isFunction(obj[key]);}).sort();};_.extend=function(obj){each(slice.call(arguments,1),function(source){for(var prop in source)obj[prop]=source[prop];});return obj;};_.clone=function(obj){return _.isArray(obj)?obj.slice():_.extend({},obj);};_.tap=function(obj,interceptor){interceptor(obj);return obj;};_.isEqual=function(a,b){if(a===b)return true;var atype=typeof(a),btype=typeof(b);if(atype!=btype)return false;if(a==b)return true;if((!a&&b)||(a&&!b))return false;if(a.isEqual)return a.isEqual(b);if(_.isDate(a)&&_.isDate(b))return a.getTime()===b.getTime();if(_.isNaN(a)&&_.isNaN(b))return false;if(_.isRegExp(a)&&_.isRegExp(b))
return a.source===b.source&&a.global===b.global&&a.ignoreCase===b.ignoreCase&&a.multiline===b.multiline;if(atype!=='object')return false;if(a.length&&(a.length!==b.length))return false;var aKeys=_.keys(a),bKeys=_.keys(b);if(aKeys.length!=bKeys.length)return false;for(var key in a)if(!(key in b)||!_.isEqual(a[key],b[key]))return false;return true;};_.isEmpty=function(obj){if(_.isArray(obj)||_.isString(obj))return obj.length===0;for(var key in obj)if(hasOwnProperty.call(obj,key))return false;return true;};_.isElement=function(obj){return!!(obj&&obj.nodeType==1);};_.isArray=nativeIsArray||function(obj){return!!(obj&&obj.concat&&obj.unshift&&!obj.callee);};_.isArguments=function(obj){return!!(obj&&obj.callee);};_.isFunction=function(obj){return!!(obj&&obj.constructor&&obj.call&&obj.apply);};_.isString=function(obj){return!!(obj===''||(obj&&obj.charCodeAt&&obj.substr));};_.isNumber=function(obj){return!!(obj===0||(obj&&obj.toExponential&&obj.toFixed));};_.isNaN=function(obj){return toString.call(obj)==='[object Number]'&&isNaN(obj);};_.isBoolean=function(obj){return obj===true||obj===false;};_.isDate=function(obj){return!!(obj&&obj.getTimezoneOffset&&obj.setUTCFullYear);};_.isRegExp=function(obj){return!!(obj&&obj.test&&obj.exec&&(obj.ignoreCase||obj.ignoreCase===false));};_.isNull=function(obj){return obj===null;};_.isUndefined=function(obj){return obj===void 0;};_.noConflict=function(){root._=previousUnderscore;return this;};_.identity=function(value){return value;};_.times=function(n,iterator,context){for(var i=0;i<n;i++)iterator.call(context,i);};_.mixin=function(obj){each(_.functions(obj),function(name){addToWrapper(name,_[name]=obj[name]);});};var idCounter=0;_.uniqueId=function(prefix){var id=idCounter++;return prefix?prefix+id:id;};_.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g};_.template=function(str,data){var c=_.templateSettings;var tmpl='var __p=[],print=function(){__p.push.apply(__p,arguments);};'+'with(obj||{}){__p.push(\''+
str.replace(/\\/g,'\\\\').replace(/'/g,"\\'").replace(c.interpolate,function(match,code){return"',"+code.replace(/\\'/g,"'")+",'";}).replace(c.evaluate||null,function(match,code){return"');"+code.replace(/\\'/g,"'").replace(/[\r\n\t]/g,' ')+"__p.push('";}).replace(/\r/g,'\\r').replace(/\n/g,'\\n').replace(/\t/g,'\\t')
+"');}return __p.join('');";var func=new Function('obj',tmpl);return data?func(data):func;};var wrapper=function(obj){this._wrapped=obj;};_.prototype=wrapper.prototype;var result=function(obj,chain){return chain?_(obj).chain():obj;};var addToWrapper=function(name,func){wrapper.prototype[name]=function(){var args=slice.call(arguments);unshift.call(args,this._wrapped);return result(func.apply(_,args),this._chain);};};_.mixin(_);each(['pop','push','reverse','shift','sort','splice','unshift'],function(name){var method=ArrayProto[name];wrapper.prototype[name]=function(){method.apply(this._wrapped,arguments);return result(this._wrapped,this._chain);};});each(['concat','join','slice'],function(name){var method=ArrayProto[name];wrapper.prototype[name]=function(){return result(method.apply(this._wrapped,arguments),this._chain);};});wrapper.prototype.chain=function(){this._chain=true;return this;};wrapper.prototype.value=function(){return this._wrapped;};})();var Mustache=function(){var Renderer=function(){};Renderer.prototype={otag:"{{",ctag:"}}",pragmas:{},buffer:[],pragmas_implemented:{"IMPLICIT-ITERATOR":true},context:{},render:function(template,context,partials,in_recursion){if(!in_recursion){this.context=context;this.buffer=[];}
if(!this.includes("",template)){if(in_recursion){return template;}else{this.send(template);return;}}
template=this.render_pragmas(template);var html=this.render_section(template,context,partials);if(in_recursion){return this.render_tags(html,context,partials,in_recursion);}
this.render_tags(html,context,partials,in_recursion);},send:function(line){if(line!=""){this.buffer.push(line);}},render_pragmas:function(template){if(!this.includes("%",template)){return template;}
var that=this;var regex=new RegExp(this.otag+"%([\\w-]+) ?([\\w]+=[\\w]+)?"+
this.ctag);return template.replace(regex,function(match,pragma,options){if(!that.pragmas_implemented[pragma]){throw({message:"This implementation of mustache doesn't understand the '"+
pragma+"' pragma"});}
that.pragmas[pragma]={};if(options){var opts=options.split("=");that.pragmas[pragma][opts[0]]=opts[1];}
return"";});},render_partial:function(name,context,partials){name=this.trim(name);if(!partials||partials[name]===undefined){throw({message:"unknown_partial '"+name+"'"});}
if(typeof(context[name])!="object"){return this.render(partials[name],context,partials,true);}
return this.render(partials[name],context[name],partials,true);},render_section:function(template,context,partials){if(!this.includes("#",template)&&!this.includes("^",template)){return template;}
var that=this;var regex=new RegExp(this.otag+"(\\^|\\#)\\s*(.+)\\s*"+this.ctag+"\n*([\\s\\S]+?)"+this.otag+"\\/\\s*\\2\\s*"+this.ctag+"\\s*","mg");return template.replace(regex,function(match,type,name,content){var value=that.find(name,context);if(type=="^"){if(!value||that.is_array(value)&&value.length===0){return that.render(content,context,partials,true);}else{return"";}}else if(type=="#"){if(that.is_array(value)){return that.map(value,function(row){return that.render(content,that.create_context(row),partials,true);}).join("");}else if(that.is_object(value)){return that.render(content,that.create_context(value),partials,true);}else if(typeof value==="function"){return value.call(context,content,function(text){return that.render(text,context,partials,true);});}else if(value){return that.render(content,context,partials,true);}else{return"";}}});},render_tags:function(template,context,partials,in_recursion){var that=this;var new_regex=function(){return new RegExp(that.otag+"(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?"+
that.ctag+"+","g");};var regex=new_regex();var tag_replace_callback=function(match,operator,name){switch(operator){case"!":return"";case"=":that.set_delimiters(name);regex=new_regex();return"";case">":return that.render_partial(name,context,partials);case"{":return that.find(name,context);default:return that.escape(that.find(name,context));}};var lines=template.split("\n");for(var i=0;i<lines.length;i++){lines[i]=lines[i].replace(regex,tag_replace_callback,this);if(!in_recursion){this.send(lines[i]);}}
if(in_recursion){return lines.join("\n");}},set_delimiters:function(delimiters){var dels=delimiters.split(" ");this.otag=this.escape_regex(dels[0]);this.ctag=this.escape_regex(dels[1]);},escape_regex:function(text){if(!arguments.callee.sRE){var specials=['/','.','*','+','?','|','(',')','[',']','{','}','\\'];arguments.callee.sRE=new RegExp('(\\'+specials.join('|\\')+')','g');}
return text.replace(arguments.callee.sRE,'\\$1');},find:function(name,context){name=this.trim(name);function is_kinda_truthy(bool){return bool===false||bool===0||bool;}
var value;if(is_kinda_truthy(context[name])){value=context[name];}else if(is_kinda_truthy(this.context[name])){value=this.context[name];}
if(typeof value==="function"){return value.apply(context);}
if(value!==undefined){return value;}
return"";},includes:function(needle,haystack){return haystack.indexOf(this.otag+needle)!=-1;},escape:function(s){s=String(s===null?"":s);return s.replace(/&(?!\w+;)|["'<>\\]/g,function(s){switch(s){case"&":return"&amp;";case"\\":return"\\\\";case'"':return'&quot;';case"'":return'&#39;';case"<":return"&lt;";case">":return"&gt;";default:return s;}});},create_context:function(_context){if(this.is_object(_context)){return _context;}else{var iterator=".";if(this.pragmas["IMPLICIT-ITERATOR"]){iterator=this.pragmas["IMPLICIT-ITERATOR"].iterator;}
var ctx={};ctx[iterator]=_context;return ctx;}},is_object:function(a){return a&&typeof a=="object";},is_array:function(a){return Object.prototype.toString.call(a)==='[object Array]';},trim:function(s){return s.replace(/^\s*|\s*$/g,"");},map:function(array,fn){if(typeof array.map=="function"){return array.map(fn);}else{var r=[];var l=array.length;for(var i=0;i<l;i++){r.push(fn(array[i]));}
return r;}}};return({name:"mustache.js",version:"0.3.1-dev",to_html:function(template,view,partials,send_fun){var renderer=new Renderer();if(send_fun){renderer.send=send_fun;}
renderer.render(template,view,partials);if(!send_fun){return renderer.buffer.join("\n");}}});}();(function(){var Backbone;if(typeof exports!=='undefined'){Backbone=exports;}else{Backbone=this.Backbone={};}
Backbone.VERSION='0.3.3';var _=this._;if(!_&&(typeof require!=='undefined'))_=require("underscore")._;var $=this.jQuery||this.Zepto;Backbone.emulateHTTP=false;Backbone.emulateJSON=false;Backbone.Events={bind:function(ev,callback){var calls=this._callbacks||(this._callbacks={});var list=this._callbacks[ev]||(this._callbacks[ev]=[]);list.push(callback);return this;},unbind:function(ev,callback){var calls;if(!ev){this._callbacks={};}else if(calls=this._callbacks){if(!callback){calls[ev]=[];}else{var list=calls[ev];if(!list)return this;for(var i=0,l=list.length;i<l;i++){if(callback===list[i]){list.splice(i,1);break;}}}}
return this;},trigger:function(ev){var list,calls,i,l;if(!(calls=this._callbacks))return this;if(list=calls[ev]){for(i=0,l=list.length;i<l;i++){list[i].apply(this,Array.prototype.slice.call(arguments,1));}}
if(list=calls['all']){for(i=0,l=list.length;i<l;i++){list[i].apply(this,arguments);}}
return this;}};Backbone.Model=function(attributes,options){attributes||(attributes={});if(this.defaults)attributes=_.extend({},this.defaults,attributes);this.attributes={};this._escapedAttributes={};this.cid=_.uniqueId('c');this.set(attributes,{silent:true});this._previousAttributes=_.clone(this.attributes);if(options&&options.collection)this.collection=options.collection;this.initialize(attributes,options);};_.extend(Backbone.Model.prototype,Backbone.Events,{_previousAttributes:null,_changed:false,initialize:function(){},toJSON:function(){return _.clone(this.attributes);},get:function(attr){return this.attributes[attr];},escape:function(attr){var html;if(html=this._escapedAttributes[attr])return html;var val=this.attributes[attr];return this._escapedAttributes[attr]=escapeHTML(val==null?'':val);},set:function(attrs,options){options||(options={});if(!attrs)return this;if(attrs.attributes)attrs=attrs.attributes;var now=this.attributes,escaped=this._escapedAttributes;if(!options.silent&&this.validate&&!this._performValidation(attrs,options))return false;if('id'in attrs)this.id=attrs.id;for(var attr in attrs){var val=attrs[attr];if(!_.isEqual(now[attr],val)){now[attr]=val;delete escaped[attr];if(!options.silent){this._changed=true;this.trigger('change:'+attr,this,val,options);}}}
if(!options.silent&&this._changed)this.change(options);return this;},unset:function(attr,options){options||(options={});var value=this.attributes[attr];var validObj={};validObj[attr]=void 0;if(!options.silent&&this.validate&&!this._performValidation(validObj,options))return false;delete this.attributes[attr];delete this._escapedAttributes[attr];if(!options.silent){this._changed=true;this.trigger('change:'+attr,this,void 0,options);this.change(options);}
return this;},clear:function(options){options||(options={});var old=this.attributes;var validObj={};for(attr in old)validObj[attr]=void 0;if(!options.silent&&this.validate&&!this._performValidation(validObj,options))return false;this.attributes={};this._escapedAttributes={};if(!options.silent){this._changed=true;for(attr in old){this.trigger('change:'+attr,this,void 0,options);}
this.change(options);}
return this;},fetch:function(options){options||(options={});var model=this;var success=function(resp){if(!model.set(model.parse(resp),options))return false;if(options.success)options.success(model,resp);};var error=wrapError(options.error,model,options);(this.sync||Backbone.sync)('read',this,success,error);return this;},save:function(attrs,options){options||(options={});if(attrs&&!this.set(attrs,options))return false;var model=this;var success=function(resp){if(!model.set(model.parse(resp),options))return false;if(options.success)options.success(model,resp);};var error=wrapError(options.error,model,options);var method=this.isNew()?'create':'update';(this.sync||Backbone.sync)(method,this,success,error);return this;},destroy:function(options){options||(options={});var model=this;var success=function(resp){if(model.collection)model.collection.remove(model);if(options.success)options.success(model,resp);};var error=wrapError(options.error,model,options);(this.sync||Backbone.sync)('delete',this,success,error);return this;},url:function(){var base=getUrl(this.collection);if(this.isNew())return base;return base+(base.charAt(base.length-1)=='/'?'':'/')+this.id;},parse:function(resp){return resp;},clone:function(){return new this.constructor(this);},isNew:function(){return!this.id;},change:function(options){this.trigger('change',this,options);this._previousAttributes=_.clone(this.attributes);this._changed=false;},hasChanged:function(attr){if(attr)return this._previousAttributes[attr]!=this.attributes[attr];return this._changed;},changedAttributes:function(now){now||(now=this.attributes);var old=this._previousAttributes;var changed=false;for(var attr in now){if(!_.isEqual(old[attr],now[attr])){changed=changed||{};changed[attr]=now[attr];}}
return changed;},previous:function(attr){if(!attr||!this._previousAttributes)return null;return this._previousAttributes[attr];},previousAttributes:function(){return _.clone(this._previousAttributes);},_performValidation:function(attrs,options){var error=this.validate(attrs);if(error){if(options.error){options.error(this,error);}else{this.trigger('error',this,error,options);}
return false;}
return true;}});Backbone.Collection=function(models,options){options||(options={});if(options.comparator){this.comparator=options.comparator;delete options.comparator;}
this._boundOnModelEvent=_.bind(this._onModelEvent,this);this._reset();if(models)this.refresh(models,{silent:true});this.initialize(models,options);};_.extend(Backbone.Collection.prototype,Backbone.Events,{model:Backbone.Model,initialize:function(){},toJSON:function(){return this.map(function(model){return model.toJSON();});},add:function(models,options){if(_.isArray(models)){for(var i=0,l=models.length;i<l;i++){this._add(models[i],options);}}else{this._add(models,options);}
return this;},remove:function(models,options){if(_.isArray(models)){for(var i=0,l=models.length;i<l;i++){this._remove(models[i],options);}}else{this._remove(models,options);}
return this;},get:function(id){if(id==null)return null;return this._byId[id.id!=null?id.id:id];},getByCid:function(cid){return cid&&this._byCid[cid.cid||cid];},at:function(index){return this.models[index];},sort:function(options){options||(options={});if(!this.comparator)throw new Error('Cannot sort a set without a comparator');this.models=this.sortBy(this.comparator);if(!options.silent)this.trigger('refresh',this,options);return this;},pluck:function(attr){return _.map(this.models,function(model){return model.get(attr);});},refresh:function(models,options){models||(models=[]);options||(options={});this._reset();this.add(models,{silent:true});if(!options.silent)this.trigger('refresh',this,options);return this;},fetch:function(options){options||(options={});var collection=this;var success=function(resp){collection.refresh(collection.parse(resp));if(options.success)options.success(collection,resp);};var error=wrapError(options.error,collection,options);(this.sync||Backbone.sync)('read',this,success,error);return this;},create:function(model,options){var coll=this;options||(options={});if(!(model instanceof Backbone.Model)){model=new this.model(model,{collection:coll});}else{model.collection=coll;}
var success=function(nextModel,resp){coll.add(nextModel);if(options.success)options.success(nextModel,resp);};return model.save(null,{success:success,error:options.error});},parse:function(resp){return resp;},chain:function(){return _(this.models).chain();},_reset:function(options){this.length=0;this.models=[];this._byId={};this._byCid={};},_add:function(model,options){options||(options={});if(!(model instanceof Backbone.Model)){model=new this.model(model,{collection:this});}
var already=this.getByCid(model);if(already)throw new Error(["Can't add the same model to a set twice",already.id]);this._byId[model.id]=model;this._byCid[model.cid]=model;model.collection=this;var index=this.comparator?this.sortedIndex(model,this.comparator):this.length;this.models.splice(index,0,model);model.bind('all',this._boundOnModelEvent);this.length++;if(!options.silent)model.trigger('add',model,this,options);return model;},_remove:function(model,options){options||(options={});model=this.getByCid(model)||this.get(model);if(!model)return null;delete this._byId[model.id];delete this._byCid[model.cid];delete model.collection;this.models.splice(this.indexOf(model),1);this.length--;if(!options.silent)model.trigger('remove',model,this,options);model.unbind('all',this._boundOnModelEvent);return model;},_onModelEvent:function(ev,model){if(ev==='change:id'){delete this._byId[model.previous('id')];this._byId[model.id]=model;}
this.trigger.apply(this,arguments);}});var methods=['forEach','each','map','reduce','reduceRight','find','detect','filter','select','reject','every','all','some','any','include','invoke','max','min','sortBy','sortedIndex','toArray','size','first','rest','last','without','indexOf','lastIndexOf','isEmpty'];_.each(methods,function(method){Backbone.Collection.prototype[method]=function(){return _[method].apply(_,[this.models].concat(_.toArray(arguments)));};});Backbone.Controller=function(options){options||(options={});if(options.routes)this.routes=options.routes;this._bindRoutes();this.initialize(options);};var namedParam=/:([\w\d]+)/g;var splatParam=/\*([\w\d]+)/g;_.extend(Backbone.Controller.prototype,Backbone.Events,{initialize:function(){},route:function(route,name,callback){Backbone.history||(Backbone.history=new Backbone.History);if(!_.isRegExp(route))route=this._routeToRegExp(route);Backbone.history.route(route,_.bind(function(fragment){var args=this._extractParameters(route,fragment);callback.apply(this,args);this.trigger.apply(this,['route:'+name].concat(args));},this));},saveLocation:function(fragment){Backbone.history.saveLocation(fragment);},_bindRoutes:function(){if(!this.routes)return;for(var route in this.routes){var name=this.routes[route];this.route(route,name,this[name]);}},_routeToRegExp:function(route){route=route.replace(namedParam,"([^\/]*)").replace(splatParam,"(.*?)");return new RegExp('^'+route+'$');},_extractParameters:function(route,fragment){return route.exec(fragment).slice(1);}});Backbone.History=function(){this.handlers=[];this.fragment=this.getFragment();_.bindAll(this,'checkUrl');};var hashStrip=/^#*/;_.extend(Backbone.History.prototype,{interval:50,getFragment:function(loc){return(loc||window.location).hash.replace(hashStrip,'');},start:function(){var docMode=document.documentMode;var oldIE=($.browser.msie&&(!docMode||docMode<=7));if(oldIE){this.iframe=$('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo('body')[0].contentWindow;}
if('onhashchange'in window&&!oldIE){$(window).bind('hashchange',this.checkUrl);}else{setInterval(this.checkUrl,this.interval);}
return this.loadUrl();},route:function(route,callback){this.handlers.push({route:route,callback:callback});},checkUrl:function(){var current=this.getFragment();if(current==this.fragment&&this.iframe){current=this.getFragment(this.iframe.location);}
if(current==this.fragment||current==decodeURIComponent(this.fragment))return false;if(this.iframe){window.location.hash=this.iframe.location.hash=current;}
this.loadUrl();},loadUrl:function(){var fragment=this.fragment=this.getFragment();var matched=_.any(this.handlers,function(handler){if(handler.route.test(fragment)){handler.callback(fragment);return true;}});return matched;},saveLocation:function(fragment){fragment=(fragment||'').replace(hashStrip,'');if(this.fragment==fragment)return;window.location.hash=this.fragment=fragment;if(this.iframe&&(fragment!=this.getFragment(this.iframe.location))){this.iframe.document.open().close();this.iframe.location.hash=fragment;}}});Backbone.View=function(options){this._configure(options||{});this._ensureElement();this.delegateEvents();this.initialize(options);};var selectorDelegate=function(selector){return $(selector,this.el);};var eventSplitter=/^(\w+)\s*(.*)$/;_.extend(Backbone.View.prototype,Backbone.Events,{tagName:'div',$:selectorDelegate,initialize:function(){},render:function(){return this;},remove:function(){$(this.el).remove();return this;},make:function(tagName,attributes,content){var el=document.createElement(tagName);if(attributes)$(el).attr(attributes);if(content)$(el).html(content);return el;},delegateEvents:function(events){if(!(events||(events=this.events)))return;$(this.el).unbind();for(var key in events){var methodName=events[key];var match=key.match(eventSplitter);var eventName=match[1],selector=match[2];var method=_.bind(this[methodName],this);if(selector===''){$(this.el).bind(eventName,method);}else{$(this.el).delegate(selector,eventName,method);}}},_configure:function(options){if(this.options)options=_.extend({},this.options,options);if(options.model)this.model=options.model;if(options.collection)this.collection=options.collection;if(options.el)this.el=options.el;if(options.id)this.id=options.id;if(options.className)this.className=options.className;if(options.tagName)this.tagName=options.tagName;this.options=options;},_ensureElement:function(){if(this.el)return;var attrs={};if(this.id)attrs.id=this.id;if(this.className)attrs["class"]=this.className;this.el=this.make(this.tagName,attrs);}});var extend=function(protoProps,classProps){var child=inherits(this,protoProps,classProps);child.extend=extend;return child;};Backbone.Model.extend=Backbone.Collection.extend=Backbone.Controller.extend=Backbone.View.extend=extend;var methodMap={'create':'POST','update':'PUT','delete':'DELETE','read':'GET'};Backbone.sync=function(method,model,success,error){var type=methodMap[method];var modelJSON=(method==='create'||method==='update')?JSON.stringify(model.toJSON()):null;var params={url:getUrl(model),type:type,contentType:'application/json',data:modelJSON,dataType:'json',processData:false,success:success,error:error};if(Backbone.emulateJSON){params.contentType='application/x-www-form-urlencoded';params.processData=true;params.data=modelJSON?{model:modelJSON}:{};}
if(Backbone.emulateHTTP){if(type==='PUT'||type==='DELETE'){if(Backbone.emulateJSON)params.data._method=type;params.type='POST';params.beforeSend=function(xhr){xhr.setRequestHeader("X-HTTP-Method-Override",type);};}}
$.ajax(params);};var ctor=function(){};var inherits=function(parent,protoProps,staticProps){var child;if(protoProps&&protoProps.hasOwnProperty('constructor')){child=protoProps.constructor;}else{child=function(){return parent.apply(this,arguments);};}
ctor.prototype=parent.prototype;child.prototype=new ctor();if(protoProps)_.extend(child.prototype,protoProps);if(staticProps)_.extend(child,staticProps);child.prototype.constructor=child;child.__super__=parent.prototype;return child;};var getUrl=function(object){if(!(object&&object.url))throw new Error("A 'url' property or function must be specified");return _.isFunction(object.url)?object.url():object.url;};var wrapError=function(onError,model,options){return function(resp){if(onError){onError(model,resp);}else{model.trigger('error',model,resp,options);}};};var escapeHTML=function(string){return string.replace(/&(?!\w+;)/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');};})();(function(){var Spine=window.Spine={};_.extend(Spine,Backbone);Spine.Model=Backbone.Model.extend({type:null,methods:{"create":"create","update":"edit","delete":"delete","read":"info"},constructor:function(attributes,options){attributes||(attributes={});if(options&&options.parse){attributes=this.parse(attributes);}
this.dirty=[];this.bind("error",this._onError);this.bind("change",this._onChange);Backbone.Model.call(this,attributes,options);},prepare:function(attributes){return attributes;},sync:function(method,model,success,error){var methodName=model.type+"."+model.methods[method],data={};if("create"===method||"update"===method){var errors=model.validate&&model.validate(model.attributes,true);if(errors){error(errors);return;};data=model.prepare(model.toJSON());delete data.id;}
if(model.id){data[model.type+"_id"]=model.id;}
top10.api.call(methodName,data,function(response){if(response&&1===response.ok){success(response[model.type]);}else{error([{message:response.message,code:response.code}]);}});},save:function(attrs,options){options||(options={});if(attrs&&!this.set(attrs,options))return false;return Backbone.Model.prototype.save.call(this,null,options);},_onError:function(model,errors,options){_.each(errors,function(error){if(error&&error.attribute){if(_.indexOf(model.dirty,error.attribute)===-1){model.dirty.push(error.attribute);}
model.trigger("error:"+error.attribute,model,error.attribute,error.message);}else if(error&&error.message){model.trigger("modelerror",model,error.message);}});},_onChange:function(model,options){var args=[model.dirty];_.each(model.dirty,function(v,k){if(model.hasChanged(v)){args.push(v);}});model.dirty=_.without.apply(_,args);}});var eventSplitter=/^(\w+)\s*(.*)$/;Spine.View=Backbone.View.extend({mustache:function(template,view,partials,send_fun){return Mustache.to_html(template||this.template,view||{},partials,send_fun);},incrementViewCount:function(type,id){top10.xd.call("post",["/v2/view/"+type+"/"+id,{}],function(response){});},delegateEvents:function(events){if(!(events||(events=this.events)))return;$(this.el).unbind();for(var key in events){var methodNames=events[key];var match=key.match(eventSplitter);var eventName=match[1],selector=match[2];if(!_.isArray(methodNames)){methodNames=[methodNames];}
for(var i=0,l=methodNames.length,methodName=methodNames[i];i<l;methodName=methodNames[++i]){var method=_.bind(this[methodName],this);if(selector===''){$(this.el).bind(eventName,method);}else{$(this.el).delegate(selector,eventName,method);}}}}});})();(function($){$.fn.error=function(msg,hint){if($(this).hasClass('item_name')){$(this).focus();}
$('.field_msg').remove();var pos=$(this).position();var size=$(this).outerWidth();var delta=(($(this).offset().left+size+220)<$(window).width())?"red_arrow_left":"red_arrow_right";var side=(($(this).offset().left+size+220)<$(window).width())?(pos.left+size+14):(pos.left-180);var hint=(hint)?' hint':'';var c_class=(hint)?' val_hint':'val_error';if(pos){$(this).addClass(c_class).before('<div class="field_msg error_msg '+delta+hint+' t_secondary" style="top: '+(pos.top-8)+'px; left: '+side+'px">'+msg+'</div>');}
$(this).bind('keyup.errorTooltip blur.errorTooltip',function(){$(this).unbind('keyup.errorTooltip blur.errorTooltip').removeClass('val_hint').removeClass('val_error');$('.field_msg').remove();});return this;}
$.fn.avatarTooltip=function(options){var img=$(this);var id=new Date().getTime();var offset=img.offset();var aClass=(img.hasClass('large_stack'))?'t10_tooltip':'ava_tooltip';var name=$(this).attr('title').split("'",1);$(this).attr('title','');if(options==0){$('body').append('<div id="avatar_'+id+'" class="'+aClass+' tt" style="top: -9999px; left: -9999px"><span>'+name+'</span></div>');var el=$('#avatar_'+id);var height=el.outerHeight();var width=el.outerWidth();var top0=offset.top;var top1=Math.round(offset.top-16-height);var left=Math.round(offset.left+(img.outerWidth()/2)-(width/2));el.css({visibility:'visible',opacity:0,'top':top0+'px','left':left+'px'}).animate({top:top1,opacity:1},250,function(){$(this).css('filter','');});}else{var tt=$('.tt:last');var topPx=parseFloat(tt.css('top'))+16;tt.animate({top:topPx,opacity:0},150,function(){$(this).remove();});$(this).attr('title',$(this).attr('alt'));}};})(jQuery);(function($){$.fn.autoGrow=function(options){var $this=$(this);if($('.autoGrow').length){$('.autoGrow').empty();}else{$('<div></div>').css({position:'absolute',top:-10000,left:-10000,resize:'none'}).attr('class','autoGrow').appendTo(document.body);}
this.filter('textarea').each(function(){var update=function(){var element=$('.autoGrow');element.empty().removeAttr('style').css({position:'absolute',top:-10000,left:-10000,height:Math.max($(this).css('height'),$(this).css('min-height')),width:$(this).width()-parseInt($this.css('paddingLeft'))-parseInt($this.css('paddingRight')),fontSize:$this.css('fontSize'),fontFamily:$this.css('fontFamily'),lineHeight:$this.css('lineHeight'),resize:'none'});var times=function(string,number){for(var i=0,r='';i<number;i++)r+=string;return r;};var val=this.value.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/&/g,'&amp;').replace(/\n$/,'<br/>&nbsp;').replace(/\n/g,'<br/>').replace(/ {2,}/g,function(space){return times('&nbsp;',space.length-1)+' '});element.html(val);$(this).css('height',element.height()+20);}
$(this).change(update).keyup(update).keydown(update);update.apply(this);});return this;}})(jQuery);(function($){$.fn.expander=function(options){var opts=$.extend({},$.fn.expander.defaults,options);var delayedCollapse;return this.each(function(){var $this=$(this);var o=$.meta?$.extend({},opts,$this.data()):opts;var cleanedTag,startTags,endTags;var allText=$this.html();var startText=allText.slice(0,o.slicePoint).replace(/\w+$/,'');startTags=startText.match(/<\w[^>]*>/g);if(startTags){startText=allText.slice(0,o.slicePoint+startTags.join('').length).replace(/\w+$/,'');}
if(startText.lastIndexOf('<')>startText.lastIndexOf('>')){startText=startText.slice(0,startText.lastIndexOf('<'));}
var endText=allText.slice(startText.length);if(!$('span.details',this).length){if(endText.replace(/\s+$/,'').split(' ').length<o.widow){return;}
if(endText.indexOf('</')>-1){endTags=endText.match(/<(\/)?[^>]*>/g);for(var i=0;i<endTags.length;i++){if(endTags[i].indexOf('</')>-1){var startTag,startTagExists=false;for(var j=0;j<i;j++){startTag=endTags[j].slice(0,endTags[j].indexOf(' ')).replace(/(\w)$/,'$1>');if(startTag==rSlash(endTags[i])){startTagExists=true;}}
if(!startTagExists){startText=startText+endTags[i];var matched=false;for(var s=startTags.length-1;s>=0;s--){if(startTags[s].slice(0,startTags[s].indexOf(' ')).replace(/(\w)$/,'$1>')==rSlash(endTags[i])&&matched==false){cleanedTag=cleanedTag?startTags[s]+cleanedTag:startTags[s];matched=true;}};}}}
endText=cleanedTag&&cleanedTag+endText||endText;}
$this.html([startText,'<span class="read-more">',o.expandPrefix,'<a href="#" class="show_more small_text a">',o.expandText,'</a>','</span>','<span class="details">',endText,'</span>'].join(''));}
var $thisDetails=$('span.details',this),$readMore=$('span.read-more',this);$thisDetails.hide();$readMore.find('a').click(function(){$readMore.hide();if(o.expandEffect==='show'&&!o.expandSpeed){o.beforeExpand($this);$thisDetails.show();o.afterExpand($this);delayCollapse(o,$thisDetails);}else{o.beforeExpand($this);$thisDetails[o.expandEffect](o.expandSpeed,function(){$thisDetails.css({zoom:''});o.afterExpand($this);delayCollapse(o,$thisDetails);});}
return false;});if(o.userCollapse){$this.find('span.details').append('<span class="re-collapse">'+o.userCollapsePrefix+'<a href="#" class="show_more small_text a">'+o.userCollapseText+'</a></span>');$this.find('span.re-collapse a').click(function(){clearTimeout(delayedCollapse);var $detailsCollapsed=$(this).parents('span.details');reCollapse($detailsCollapsed);o.onCollapse($this,true);return false;});}});function reCollapse(el){el.hide().prev('span.read-more').show();}
function delayCollapse(option,$collapseEl){if(option.collapseTimer){delayedCollapse=setTimeout(function(){reCollapse($collapseEl);option.onCollapse($collapseEl.parent(),false);},option.collapseTimer);}}
function rSlash(rString){return rString.replace(/\//,'');}};$.fn.expander.defaults={slicePoint:130,widow:4,expandText:'More&hellip;',expandPrefix:'&hellip; ',collapseTimer:0,expandEffect:'fadeIn',expandSpeed:'',userCollapse:true,userCollapseText:'Less&hellip;',userCollapsePrefix:' ',beforeExpand:function($thisEl){},afterExpand:function($thisEl){},onCollapse:function($thisEl,byUser){}};})(jQuery);(function(jQuery,top10){var $=jQuery;if(($.browser.webkit&&parseFloat($.browser.version)<533)||($.browser.opera&&parseFloat($.browser.version)<10.5)||($.browser.msie&&parseFloat($.browser.version)<8)||($.browser.mozilla&&parseFloat($.browser.version)<1.9)){if(!isiPhone()){$('body').prepend('<div id="flash_messages">'+'<div id="ie_msg" class="page_msg pr level_system">'+'<p class="h_tertiary strong">Warning! You\'re using an old browser that doesn\'t work with Top10.</p>'+'<p class="t_secondary">You can browse Top10s but to get the full experience you need to upgrade your browser.</p><a href="http://browsehappy.com/" target="_blank" class="btn btn_galaxy">Upgrade your browser</a>'+'</div>'+'</div>');return;}}
if(navigator.userAgent.substr(navigator.userAgent.search(/Chrome\//)+7,2)<14||navigator.userAgent.search(/Safari\//)==100){$('html').addClass('chrome13');}
if(isiPhone()){$('body').append('<script type="text/javascript" src="http://c759326.r26.cf2.rackcdn.com/js/lib/jquery.ui.touch.js"></script>');}else{$.fn.addTouch=function(){return this;};}
var views={}
top10.events.connect('auth:signout',function(){if(document.location.host.search(/dev/i)==-1){window.location=document.location.protocol+'//'+document.location.host}else{location.reload(true);}});jQuery(':input[placeholder]:not(.noplaceholder)').placeholder();jQuery('.btn.inactive').live('click',function(e){e.preventDefault()});jQuery.fn.shakeAnimate=function(){var className=($(this).is("input"))?'pr val_error':'pr';$(this).addClass(className).stop().animate({'left':'-'+3+'px'},75).animate({'left':3+'px'},75).animate({'left':'-'+3+'px'},75).animate({'left':3+'px'},75).animate({'left':'-'+3+'px'},75).animate({'left':0},75)
return this;};jQuery.extend(jQuery.expr[':'],{focus:function(element){return element==document.activeElement;}});$.getScript=function(url,callback,cache){$.ajax({type:"GET",url:url,success:callback,dataType:"script",cache:(cache===false)?false:true});};function getParameterByName(name,url)
{name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var location=(url)?url:window.location.href;var results=regex.exec(location);if(results==null)
return"";else
return decodeURIComponent(results[1].replace(/\+/g," "));}
$('.page_msg .close_msg').live('click',function(e){$('.tear_border').fadeOut(msg_fade_speed);$(this).parent('.page_msg').animate({opacity:0},msg_fade_speed,function(){$(this).slideUp(msg_fade_speed,function(){$(this).remove();});});e.preventDefault();});$('.ava_tt').live('mouseover mouseout',function(event){if(event.type=='mouseover'){$(this).avatarTooltip(0);}else{$(this).avatarTooltip(1);}});$('.page_total').bind('click.pagination',function(){$(this).unbind('click.pagination');$(this).parent().addClass('page_flip');});var msg_fade_speed=500;function imageUrl(url,state,size,placeholder){size=size||135;placeholder=placeholder||"default";if(url&&"exists"===state){return url.replace("full",size);}
if("processing"===state){return"/media/img/placeholder/processing-"+size+".gif";}
return"/media/img/placeholder/blank.gif";}
function isoDateToTimestamp(string)
{var regexp="([0-9]{4})(-([0-9]{2})(-([0-9]{2})"+"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?"+"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";var d=string.match(new RegExp(regexp));var offset=0;var date=new Date(d[1],0,1);if(d[3]){date.setMonth(d[3]-1);}
if(d[5]){date.setDate(d[5]);}
if(d[7]){date.setHours(d[7]);}
if(d[8]){date.setMinutes(d[8]);}
if(d[10]){date.setSeconds(d[10]);}
if(d[12]){date.setMilliseconds(Number("0."+d[12])*1000);}
if(d[14]){offset=(Number(d[16])*60)+Number(d[17]);offset*=((d[15]=='-')?1:-1);}
offset-=date.getTimezoneOffset();time=(Number(date)+(offset*60*1000));return time/1000;}
function timestampToIsoDate(timestamp){var date=new Date(timestamp*1000);function pad(n){return n<10?'0'+n:n;}
return date.getUTCFullYear()+'-'+pad(date.getUTCMonth()+1)+'-'+pad(date.getUTCDate())+'T'+
pad(date.getUTCHours())+':'+pad(date.getUTCMinutes())+':'+pad(date.getUTCSeconds())+'Z';}
function timeSince(timestamp){var date=new Date(),delta=Math.floor(((new Date()).getTime()/1000)-timestamp),days=Math.floor(delta/86400),suffix=["th","st","nd","rd"],months=["January","February","March","April","May","June","July","August","September","October","November","December"];date.setTime(timestamp*1000);var actDate=date.getDate();var actMod=actDate%10;if(actDate===11||actDate===12||actDate===13){actMod=0;}
return days<=0&&(delta<60&&"a moment ago"||delta<120&&"1 minute ago"||delta<3600&&Math.floor(delta/60)+" minutes ago"||delta<7200&&"1 hour ago"||delta<86400&&Math.floor(delta/3600)+" hours ago")||days==1&&"Yesterday"||days<6&&days+" days ago"||(date.getDate()+(suffix[actMod]||"th")+" "+
months[date.getMonth()]+" "+date.getFullYear());}
function updateTimeSince(){$('span.datetime').each(function(){var timestamp=$(this).data("timestamp");if(!timestamp){timestamp=isoDateToTimestamp($(this).attr("data-datetime"));$(this).data("timestamp",timestamp);}
$(this).text(timeSince(timestamp));});setTimeout(updateTimeSince,30000);};jQuery(function(){updateTimeSince();});function getHash(){var hash=window.location.hash;return hash.substring(1);}
function isiPhone(){return((navigator.platform.indexOf("iPhone")!=-1)||(navigator.platform.indexOf("iPod")!=-1)||(navigator.platform.indexOf("iPad")!=-1));}
function iPhoneModal(){if(isiPhone()){$('.popup-overlay').addClass('iOS_modal').css('height',$(document).height());var top=$(document).scrollTop()+(window.innerHeight/2);$('#image_chooser, .popup-container').css('top',top);}else{return;}}
function stripCrazyChars(q){var char=[/[\u2018|\u2019|\u201A]/gi,/[\u201C|\u201D|\u201E]/gi,/\'/gi,/"/gi,/\+/gi,/[\u2013|\u2014]/gi];var char_replace=["\\'",'\"',"\\'",'\\"','%20','-'];$.each(char,function(i,v){q=q.replace(char[i],char_replace[i]);});return q;}
function removeOnboard(instant){if(instant){$('.onboarding').remove();}else{$('.onboarding').animate({opacity:0},200).slideUp(function(){$(this).remove();});}}
$.support.transition=(function(){var thisBody=document.body||document.documentElement,thisStyle=thisBody.style,support=thisStyle.transition!==undefined||thisStyle.WebkitTransition!==undefined||thisStyle.MozTransition!==undefined||thisStyle.MsTransition!==undefined||thisStyle.OTransition!==undefined;return support;})();jQuery.extend(jQuery.easing,{easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4;}
else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;}});function getInfo(id,options){var class_=this,type=this.prototype.type,data={};if(type=="top10"){data["id"]=id;}else{data[type+"_id"]=id;}
top10.api.call(type+(type=="top10"||type=="contribution"?".info":".getInfo"),data,function(response){if(response&&1===response.ok){options.success(new class_(response[type],{parse:true}));}else{options.error(response.message);}});}
var User=Spine.Model.extend({type:"user"},{getInfo:getInfo,getCurrent:function(options){var session=top10.auth.getSession();if(session&&session.uid){User.getInfo(session.uid,options);return true;}
return false;}});User.Collection=Spine.Collection.extend({model:User});var Top10=Spine.Model.extend({type:"top10",initialize:function(attributes,options){attributes=attributes||{};this.items=new ContributionItem.Collection(attributes.items);this.items.each(_.bind(function(v){v.parent=this;},this));this.items.sort({silent:true});},parse:function(response){if(response.items){_.map(response.items,function(item){return new ContributionItem(item,{parse:true,parent:this});});}
if(response.user){response.user=new User(response.user);}
return response;},prepare:function(attributes){return{name:attributes.name};}},{getInfo:getInfo});Top10.Collection=Spine.Collection.extend({model:Top10});var Item=Spine.Model.extend({type:"item",prepare:function(attributes){return{name:attributes.name};}},{getInfo:getInfo});Item.Collection=Spine.Collection.extend({model:Item});var Contribution=Spine.Model.extend({type:"contribution",initialize:function(attributes,options){attributes=attributes||{};this.items=new ContributionItem.Collection(attributes.items);this.items.each(_.bind(function(v){v.parent=this;},this));this.items.sort({silent:true});},parse:function(response){if(response.items){response.items=_.map(response.items,function(item){return new ContributionItem(item,{parse:true,parent:this});});}
if(response.user){response.user=new User(response.user);}
return response;},set:function(attributes,options){var result=Spine.Model.prototype.set.call(this,attributes,options);if(result){if(attributes.items){if(!this.items){this.items=new ContributionItem.Collection(attributes.items);}else{}
this.items.each(_.bind(function(v){v.parent=this;},this));this.items.sort({silent:true});}
if(attributes.user){this.user=new User(attributes.user);}
return this;}
return false;},prepare:function(attributes){attributes.items=[];this.items.each(function(v){if(v.attributes.name){attributes.items.push(v.prepare(v.toJSON()));}})
attributes.contribution_id=attributes.id;if(attributes.contribution_id){delete attributes.is_remix;delete attributes.parent_id;}
if("is_draft"in attributes){attributes.is_draft=0+(!!attributes.is_draft)}
if("is_remix"in attributes){attributes.is_remix=0+(!!attributes.is_remix)}
delete attributes.id;delete attributes.image;delete attributes.image_state;delete attributes.image_x;delete attributes.image_y;delete attributes.image_size;delete attributes.image_source;delete attributes.is_featured;delete attributes.top10_id;delete attributes.user_id;delete attributes.created_at;delete attributes.updated_at;delete attributes.permissions;delete attributes.user;delete attributes.slug;delete attributes.score;delete attributes.url;delete attributes.contribution_count;delete attributes.saveItem;delete attributes.contribution_tag_count;delete attributes.contribution_item_count;delete attributes.is_mine;delete attributes.current_user_is_contributor;delete attributes.total_contributors;delete attributes.contributors;delete attributes.tags;delete attributes.saveItemComplete;delete attributes.state;delete attributes.view_count;delete attributes.spotify_playlist_uri;delete attributes.spotify_position;delete attributes.application;return attributes;},toJSON:function(){data=Spine.Model.prototype.toJSON.call(this);data.items=this.items.toJSON();if(data.user){data.user=data.user.toJSON();}
return data;},validate:function(attributes,saving){var errors=[];if(saving){attributes.name=jQuery.trim(attributes.name);if(!attributes.name){errors.push({attribute:"name",message:"Please enter a name for your Top10"});}else{if(attributes.name.length>60){errors.push({attribute:"name",message:"This value cannot be more than 60 characters"});}}
if(attributes.description){if(attributes.description.length>1000){errors.push({attribute:"description",message:"This value cannot be more than 1000 characters"});}}
if(this.items.length==1&&jQuery.trim(this.items.models[0].attributes.name).length==0){errors.push({attribute:"no_items",message:"You haven’t added any items to your Top10."});}
var x={};var i=0;this.items.each(_.bind(function(item){var itemError=item.validate(item.attributes,true);if(itemError){item.trigger('error',item,itemError);x[i]={message:[itemError[0].message,itemError[0].message1],field:itemError[0].attribute,position:item.attributes.position}
errors.push({attribute:"items",errors:x});i++;}},this));window.checking_items_1_to10=[];}else{if(attributes.name){if(attributes.name.length>60){errors.push({attribute:"name",message:"This value cannot be more than 60 characters"});}}
if(attributes.description){if(attributes.description.length>1000){errors.push({attribute:"description",message:"This value cannot be more than 1000 characters"});}}}
return errors.length?errors:false;},addItem:function(attributes,options){var model
attributes=attributes||{};options=options||{};if(!attributes.position){attributes.position=this.items.length+1;}
options.parent=this;model=new ContributionItem(attributes,options);if(options.silent){this.items.add(model,{silent:true});}else{this.items.add(model);}
_.defer(_.bind(function(){this.items.each(function(item){item.trigger("redraw",item,item.collection);});},this));return model;}},{getInfo:getInfo});Contribution.Collection=Spine.Collection.extend({model:Contribution});var ContributionItem=Spine.Model.extend({initialize:function(attributes,options){if(options&&options.parent){this.parent=options.parent;}},parse:function(response){return response;},prepare:function(attributes){attributes.item_id=attributes.id;if(attributes.contribution&&attributes.contribution.id!==this.parent.id){attributes.contribution_id=attributes.contribution.id;delete attributes.description;delete attributes.image;delete attributes.image_x;delete attributes.image_y;delete attributes.image_size;delete attributes.image_source;delete attributes.link;}
if(attributes.image&&attributes.image.search(/(http|https):\/\//i)==-1){delete attributes.image;delete attributes.image_x;delete attributes.image_y;delete attributes.image_size;delete attributes.image_source;}
delete attributes.id;delete attributes.item_id;delete attributes.image_state;delete attributes.image_source;delete attributes.img_offset;delete attributes.img_searchTerm;delete attributes.orig_img;delete attributes.created_at;delete attributes.updated_at;delete attributes.permissions;delete attributes.replace;delete attributes.contribution;delete attributes.slug;delete attributes.position;delete attributes.score;delete attributes.contribution_count;delete attributes.url;delete attributes.img_publish;delete attributes.img_select;delete attributes.my_item;delete attributes.saveItem;delete attributes.saveItemComplete;delete attributes.state;delete attributes.contribution_item_id;return attributes;},validate:function(attributes,saving){var errors=[];if(saving){attributes.name=jQuery.trim(attributes.name);if(attributes.name){if(attributes.name.length>100){errors.push({attribute:"name",message:"Your title for \""+attributes.name+"\" is over 100 characters long.",message1:"Please write a shorter title."});}}
if(attributes.description){if(attributes.description.length>1000){errors.push({attribute:"description",message:"Your description for \""+attributes.name+"\" is over 1,000 characters long.",message1:"Please write a shorter description."});}}
if(!attributes.name&&attributes.description){errors.push({attribute:"name",message:"Please enter an name for item "+attributes.position,message1:""});}
if(!attributes.name&&attributes.link){errors.push({attribute:"name",message:"Please enter an name for item "+attributes.position,message1:""});}
if(attributes.link){if(attributes.link.length>250){errors.push({attribute:"link",message:"Your link for \""+attributes.name+"\" is over 250 characters long.",message1:"Please enter a shorter link."});}
var re=new RegExp(/^(http|https):\/\/(\w+:{0,1}\w*)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%!\-\/]))?/);if(!attributes.link.match(re)){errors.push({attribute:"link",message:"Your link for \""+attributes.name+"\" isn't a properly formatted link",message1:"Please check and try again"});}}
if(attributes.name){window.checking_items_1_to10=(window.checking_items_1_to10)?window.checking_items_1_to10:[];if(jQuery.inArray(attributes.name.toLowerCase(),window.checking_items_1_to10)!=-1){errors.push({attribute:"name",message:"You’ve added “"+attributes.name+"” more than&nbsp;once.",message1:"Please list each item only once."});}
window.checking_items_1_to10[attributes.position-1]=attributes.name.toLowerCase();}}else{if(attributes.name){if(attributes.name.length>100){errors.push({attribute:"name",message:"This value cannot be more than 100 characters"});}}
if(attributes.description){if(attributes.description.length>1000){errors.push({attribute:"description",message:"This value cannot be more than 1000 characters"});}}}
return errors.length?errors:false;}});ContributionItem.Collection=Spine.Collection.extend({model:ContributionItem,initialize:function(attributes,options){_.bindAll(this,"_onChangePosition","_onRemove");this.bind("change:position",this._onChangePosition);this.bind("add",this._onChangePosition);this.bind("remove",this._onRemove);},_onChangePosition:function(model,collection){var previous=model.previous("position"),min=_.min([previous,model.get("position")]),max=_.max([previous,model.get("position")]),delta=previous===min?-1:1;this.each(function(item){var pos=item.get("position");if(item!==model&&pos<=max&&pos>=min){item.set({position:pos+delta},{silent:true});item._previousAttributes=_.clone(item.attributes);item._changed=false;}
_.defer(function(){item.trigger("redraw",item,item.collection);});});this.sort();},_onRemove:function(model,collection){var previous=model.get("position");this.each(function(item){var pos=item.get("position");if(pos>=previous){item.set({position:pos-1},{silent:true});item._previousAttributes=_.clone(item.attributes);item._changed=false;}
_.defer(function(){item.trigger("redraw",item,item.collection);});});},comparator:function(model){return model.get("position");}});(function($){$.fn.removeItemModal=function(msg,fixed_pos,btn_msg,callback){var fixed_pos=(fixed_pos)?' style="position: fixed; top: 0; bottom: 0;"':'';var btn_msg=(btn_msg)?btn_msg:'Remove';btn_style1=btn_style2=btn_style3='';if(msg!='Remove Item?'){btn_style1='btn_red';btn_style2='small_text';btn_style3='h_secondary';}
$(this).append('<div class="item_modal_overlay"'+fixed_pos+'><div class="item_modal item_remove">'+'<span class="fl '+btn_style3+'">'+msg+'</span><a class="confirm_remove '+btn_style1+' mrm mll" href="#" title="'+btn_msg+'">'+btn_msg+'</a><a class="cancel '+btn_style2+'" href="#" title="Don\'t remove the item">Cancel</a>'+'</div>'+'</div>');if(msg=='Remove Item?'){var width='90%';$('.item_modal_overlay').css({left:0,right:0});var left='5%';}else{$('.item_modal_overlay').css({left:-9999,right:-9999}).show();var width=$('.item_modal').show().css({width:'auto'}).outerWidth()/2;$('.item_modal_overlay').css({left:0,right:0});$('.item_modal').css({'margin-left':-width});var left='50%';}
$(this).find('.item_modal_overlay').fadeIn('100');$('.item_modal').fadeIn('100').animate({left:left},{queue:false,duration:300,easing:'easeOutElastic'});$(this).find('.item_modal').click(function(e){e.stopPropagation();});$(this).find('.item_modal_overlay, .cancel').click(function(e){e.preventDefault();var modal=($(e.currentTarget).hasClass('item_modal_overlay'))?$(e.currentTarget):$(e.currentTarget).parents('.item_modal_overlay');modal.find('.item_modal').animate({left:'75%'},{queue:false,duration:200,easing:'easeOutBack'}).fadeOut(function(){$(this).parent().remove();});callback&&callback(false);});$(this).find('.confirm_remove').click(function(e){var modal=$(e.currentTarget).parent().parent();modal.fadeOut(function(){});callback&&callback(true);e.preventDefault();});return this;};})(jQuery);var HeaderView=Spine.View.extend({el:$('.hd'),account:null,model:null,template:'{{#user}}<a class="account_info" href="/{{ username }}"><span class="fl"><img src="{{image}}" height="30" width="30" class="avatar"/> <span class="first_name">{{ first_name }}</span></span></a><div class="dropdown">'+'<ul>'+'<li><a href="/{{ username }}">Activity</a></li>'+'<li><a href="/{{ username }}/top10s">Your Top10s</a></li>'+'<li><a href="/{{ username }}/following">Your friends</a></li>'+'<li><a href="/settings" title="My Account Settings">Settings</a></li>'+'<li><a class="signout" title="Sign out" href="">Sign out</a></li>'+'</ul>'+'<span></span></div>{{/user}}{{^user}}<a href="#" class="signin_btn hd_btn fr">Join now</a><a href="#" class="signin_btn mrm signin fr">Sign in</a>{{/user}}',events:{'click .signin_btn':'signIn','click .signout':'signOut'},initialize:function(options){_.bindAll(this,'signin','signout','toggleDropdown','render');session=top10.auth.getSession();top10.events.connect('auth:signin',_.bind(function(session){if(session&&session.uid){this.getUserInfo(session,function(user){_gaq.push(['_setCustomVar',3,'number of top10s',user.contribution_count,3]);_gaq.push(['_trackEvent','sign_in',window.logInService,window.location.pathname]);});}},this));top10.events.connect('auth:signout',function(session){this.model=null;if(this.render)this.render();$('#superuser').remove();});if(session&&session.uid){this.getUserInfo(session);}
if(this.el){this.account=$(this.make('div',{'class':'user fr'}));this.el.append(this.account);if(!session){this.render();}else{$(this.account).addClass('logged_in');}}},render:function(){var user=this.model&&this.model.toJSON()||null;if(user){if(user.image){user.image=imageUrl(user.image,user.image_state,30,'user');}
if(!user.image){user.image='/media/img/placeholder/user-30.gif';}
$('.my_top10 img').attr('src',user.image);}
if(user&&user.first_name){user.first_name=(user.first_name.length>20)?user.first_name.substring(0,17)+'...':user.first_name;}
this.account.html(this.mustache(this.template,{user:user}));$(this.account).css('max-width',$(this.account).width());},getUserInfo:function(session,cb){top10.api.call('user.getInfo',{user_id:session.uid},_.bind(function(data){if(data.ok){this.model=new User(data.user);this.render();if(data.user&&data.user.is_superuser==true&&$('body').data('id')){views.superUser=new SuperUserView({user:data.user,kind:$('body').attr('id'),identity:$('body').data('id')});$('body').append(views.superUser.el);}
if(cb){cb(data.user);}}},this));},signIn:function(e){var homepage=$('.bd').is('.homepage');var login=new LoginView.prompt({action:'Sign In',success:_.bind(function(){_.defer(_.bind(function(){if(homepage){top10.api.call('user.getInfo',{'user_id':top10.auth.getSession().uid},function(result){var slug='/'+result.user.username+'/activity';window.location=slug;});}},this));},this)});e.preventDefault();},signOut:function(e){top10.auth.signOut(_.bind(function(){this.model=null;this.render();},this));$(this.account).css('max-width','none');e.preventDefault();}});views.Header=new HeaderView;var PopupView=window.PopupView=Spine.View.extend({className:"popup",popupTemplate:"<div class=\"popup-overlay\"></div>"+"<div class=\"popup-container{{{extraClass}}}\">"+"<div class=\"popup-header\">"+"{{#state}}<div class=\"sec_title no_wrap\">{{{title}}}</div>{{/state}}"+"{{#canClose}}<div class=\"popup-close\">&times;</div>{{/canClose}}"+"{{#headerExtra}}{{{headerExtra}}}{{/headerExtra}}"+"</div>"+"<div class=\"popup-content\">{{{content}}}</div>"+"<div class=\"popup-shadow\">"+"<div class=\"popup-shadow-left\"></div>"+"<div class=\"popup-shadow-right\"></div>"+"</div>"+"</div>",popupEvents:{'click .popup-overlay':'close','click .popup-content .btn_cancel':'close','click .popup-close':'close','focus #fb_message textarea':'fbEditMsg'},constructor:function(options){if(!options||!("canClose"in options&&!options.canClose)){this.events=_.extend(this.events||{},this.popupEvents);}
Spine.View.apply(this,arguments);},initialize:function(options){options=options||{};_.bindAll(this,"render","close");this.action=options.action||'';this.extraClass=options.extraClass||"";this.content=options.content||"";this.title=options.title||"Alert";this.showTitle=(options.title=='hide')?null:true;this.headerExtra=options.headerExtra;this.canClose=!("canClose"in options&&!options.canClose);if(options.close){this.bind("close",options.close);}
if(this.canClose){this.events=_.extend(this.popupEvents,this.events);}
if(this.el){this.render();}},fbEditMsg:function(e){var typeTimer,typeInterval;typeInterval=1000;$(e.currentTarget).keyup(function(){typeTimer=setTimeout(doneTyping,typeInterval);});$(e.currentTarget).keydown(function(){clearTimeout(typeTimer);});function doneTyping(e){var msgText=$('#fb_message textarea').val();$('#fb_msg_text').text(msgText);}},render:function(){$(this.el).html(this.mustache(this.popupTemplate,{extraClass:this.extraClass,content:this.content,title:this.title,canClose:this.canClose,headerExtra:this.headerExtra}));_.defer(function(){iPhoneModal();$('.popup-container').css({'margin-top':'+=40','opacity':0}).animate({'margin-top':'-=40','opacity':1},'fast');});$(document).bind('keyup.imgChoose',_.bind(function(e){if(e.keyCode==27){$(document).unbind('keyup.imgChoose');this.close();}},this));},close:function(){this.trigger("close",this);$('.popup-container').animate({'margin-top':'-=40'},'fast');if(jQuery.support.transition){$('.popup').addClass('popup_away');$('.popup').bind("transitionend webkitTransitionEnd",_.bind(_.throttle(function(){this.remove();},100),this));}else{$(this.el).fadeOut('fast',_.bind(function(){this.remove();},this));}}},{prompt:function(options){var view=new PopupView(options);$('.popup').remove();$('body').append(view.el);var popupHeight=$('.popup-container').outerHeight();$('.popup-container').css('margin-top',-(popupHeight/2));return view;}});var AutoSuggestResultsView=Spine.View.extend({tagName:'div',className:'suggest',parent:null,count:0,total:0,query:"",results:[],index:null,images:true,events:{"mouseover .suggest_item":"itemMouseover","mousedown .suggest_item":"itemMousedown"},template:'<div class="suggest_close newtop10icon"><span>&times;</span></div>'+'<ul>'+'{{#results}}'+'<li class="suggest_item{{#selected}} suggest_selected{{/selected}}" data-index="{{index}}">'+'<a href="#" tabindex="0"><span class="suggest_text nowrap inline_block">{{text}}</span> <img class="fr avatar" height="30" width="30" src="{{image_uri}}"> <span class="fr suggest_count">{{num}}</span></a>'+'</li>'+'{{/results}}'+'</ul>',initialize:function(){_.bindAll(this,"process","itemMouseover","itemMousedown","up","down","go","show","hide","focus");if(this.options.query){this.query=this.options.query;}
if(this.options.results){this.results=this.options.results;}
if(this.options.total){this.total=this.options.total;}
if(this.options.count){this.count=this.options.count;}
if(this.options.callback){this.callback=this.options.callback;}
if(this.options.keyup){this.keyup=this.options.keyup;}
if(this.options.type){this.type=this.options.type;}
this.el=$(this.el);this.el.width(this.options.width);this.render();},process:function(obj,index){var s=(obj.score>1)?'s':'';return{text:obj.text,image_uri:imageUrl(obj.image_uri,obj.image_state,30),selected:index===this.index,index:index,num:(this.type=='item')?'in '+obj.score+' Top10'+s:obj.score+' contributor'+s};},render:function(){this.el.html(this.mustache(this.template,{results:_.map(this.results,this.process)}));},up:function(){if(this.index===null){this.focus(this.count-1);}
else{if(0!==this.index){this.focus(this.index-1);}
else{this.focus(null);}}},down:function(){if(this.index===null){this.focus(0);}
else{if(this.index<this.count-1){this.focus(this.index+1);}
else{this.focus(null);}}},go:function(){if(this.callback){this.callback(this.results[this.index]);}},show:function(){this.el.show();},hide:function(){this.el.hide();this.$('input').removeClass('suggest_loading');},focus:function(index){if(this.index!==index){this.$('li').eq(this.index).removeClass('suggest_focus');this.index=index;if(null!==this.index){this.$('li').eq(this.index).addClass('suggest_focus');}}},itemMouseover:function(e){this.focus($(e.currentTarget).attr('data-index'));},itemMousedown:function(e){this.go();}});var AutoSuggestView=Spine.View.extend({updating:false,query:"",resultClass:AutoSuggestResultsView,type:null,callback:null,events:{"focus input":"inputFocus","blur input":"inputBlur","keydown input":"inputKeydown","keyup input":"inputKeyup"},initialize:function(options){_.bindAll(this,"inputFocus","inputBlur","inputKeydown","inputKeyup","inputClick","update","updateCallback","resultCallback");this.el=$(this.el);if(this.options.type){this.type=this.options.type;}
if(this.options.resultClass){this.resultClass=this.options.resultClass;}
if(this.options.callback){this.callback=this.options.callback;}
if(this.options.keyup){this.keyup=this.options.keyup;}},inputFocus:function(){if(this.results){if(this.results.count){this.results.show();}}
else{this.update();}},inputBlur:function(){if(this.results){this.updating=false;this.results.hide();this.$("input").removeClass('suggest_loading');}},inputKeydown:function(e){if(e.keyCode==40){if(this.results){this.updating=false;if(this.results){this.results.show();this.results.down();}}
return false;}
if(e.keyCode==38){if(this.results){this.results.up();}
return false;}
if(e.keyCode==13){if(this.results){this.results.go();}
return false;}
if(e.keyCode==27){if(this.results){this.results.hide();this.$("input").removeClass('suggest_loading');}
return false;}
return true;},inputKeyup:function(e){var query=this.$("input").val();if(this.query!==query){this.query=query;if(!this.updating){this.update();}}
this.keyup(e,query);return false;},resultCallback:function(result){resultText=result.text;if(!this.$('input').hasClass('item_name')){resultText=resultText.slice(7);}
this.$('input').val(resultText);if(this.callback){this.callback(result);}
this.updating=false;this.results.hide();this.$("input").removeClass('suggest_loading');},update:function(){var data;if(!this.updating){this.updating=true;this.updateStart=(new Date()).getTime();this.$("input").addClass('suggest_loading');data={"query":this.query,"count":5};top10.api.call(this.type+".autosuggest",data,this.updateCallback);}},updateCallback:function(response){var time=(new Date()).getTime(),msg;if(0===response.ok){this.updating=false;return;}
if(this.updating){this.updating=false;response.parent=this;response.callback=this.resultCallback;response.width=this.$('input').outerWidth();if(this.results){this.results.remove();}
response.type=this.type;this.results=new this.resultClass(response);this.el.after(this.results.el);if(this.results.count){this.results.show();}
else{this.results.hide();}
this.$("input").removeClass('suggest_loading');if(this.results.query!==this.query){this.update();}
this.results.focus(0);}}});var CommonView=Spine.View.extend({commonEvents:{"click  .save_publish:not('.inactive')":"save","keyup  .list_name, .list_description":"change","focus .list_name, .list_description":"removeError","click .top10_placeholder":"focusTitle","click .add_to, .c_bd:not('.editing') .add_item":"addingItem","click .save_item, .editing .add_item":"saveItem",'click a[rel*=external]':'trackExternal'},constructor:function(options){this.events=_.extend(this.events||{},this.commonEvents);Spine.View.apply(this,arguments);},initialize:function(){_.bindAll(this,'save','_save','_onAdd','_onChange','_onError','change','_saveSuccess','_saveError','removeError','populateYourMiniList','autoSave','saveItem','_pseudoSaveSuccess','newItem');this.model.bind('change',this._onChange);this.model.bind('error',this._onError);this.model.items.bind('add',this._onAdd);this.model.items.bind('change:position',this.autoSave);this.model.items.bind('remove',this.autoSave);this.model.items.bind('remove',this.newItem);this.model.bind('change:autoSave',this.autoSave);this.model.bind('newItem',this.newItem);if(typeof myTop10=='undefined'||myTop10!=true){this.clone=(typeof user_top10!='undefined')?new Contribution(user_top10,{parse:true}):null;}
this.model.bind("change:populateYourMiniList",this.populateYourMiniList);},render:function(){this.newItem();},_onChange:function(model,options){if(this.$(".list_name").val()!==model.get("name")){this.$(".list_name").val(model.get("name"));}
if(this.$(".list_description").val()!==model.get("description")){this.$(".list_description").val(model.get("description"));}},_onError:function(model,errors,options){_.each(errors,function(error){if(error&&error.attribute!="items"){if(error.code==1103){return;}
if(error.code==1110){$('.list_item').eq(0).find('input.item_name').error('Please create an item');}else if(error.code==1107){$('input.list_name').error('Please enter a valid title');}else if(error.attribute=='description'){$('textarea.list_description').error(error.message);}else if(error.attribute=='name'){$('input.list_name').error(error.message);}}});},_onAdd:function(model){var m=this.model;var state=(model.get('state'))?model.get('state'):'edit';model.unset('state');var view=new ItemView({model:model,state:state});$(view.el).hide().css('opacity','0');if(1===model.get('position')){this.$('.main_list').prepend(view.el);}else{this.$('.list_item').eq(model.get('position')-2).after(view.el);}
if(!this.triggerSocial){$(view.el).slideDown(function(){$(this).animate({opacity:1},300,function(){$(this).removeAttr('style');});});}else{$(view.el).show();setTimeout(function(){$('#sharing .invite_header').click();$(view.el).fadeTo(500,1);},100);delete this.triggerSocial;}
$('input[placeholder]',view.el).placeholder();$('textarea[placeholder]',view.el).placeholder();$('.remove_item').removeClass('inactive');if(1===this.model.items.length){$('.remove_item').addClass('inactive');}
var ids=this.model.items.pluck('id');if(this.model.items.length==1&&ids[0]=='empty'){}else{$('.minilist_suggestions').addClass('mtl');}},change:function(e){var values={};if($(e.currentTarget).is("input.list_name")){values["name"]=$(e.currentTarget).val();}
if($(e.currentTarget).is("textarea.list_description")){values["description"]=$(e.currentTarget).val();}
this.model.set(values);},autoSuggest:_.debounce(function(e){if($(e.currentTarget).hasClass('list_name')){if(jQuery.trim($(e.currentTarget).val())!=''){document.title='Top 10 '+jQuery.trim($(e.currentTarget).val())+' (created by you) | Top10';}else{document.title='Create a Top10 | Top10';}}},400),save:function(e,status,model){if(e){e.preventDefault();}
_gaq.push(['_setCustomVar',1,'create top 10 - done',window.location.pathname,3]);_gaq.push(['_trackEvent','create top 10','done']);var stat=(status)?status:false;return this._save(stat,model);},_save:function(status,model){if(this.model.items.at(0).get('name')==''){top10.log('no_items');return;}
if(!top10.auth.getSession()){var login=new LoginView.prompt({action:'Save',title:'Sign in to save your Top10',success:_.bind(function(){_.defer(_.bind(function(){this._save(status,model);},this));},this)});return;}else{var title=this.model.get('name');title=title.replace('Top 10 ','');this.model.set({'name':title});if(status=='draft'){var element=this.$('.status_info');element.html('Saving&hellip;').fadeIn('fast');var model=(this.clone)?this.clone:this.model;model.save({is_draft:false},{success:this._saveSuccess,error:this._saveError});return;}else if(status=='addTo'){model.save({is_draft:draft},{success:this._pseudoSaveSuccess,error:this._saveError});return;}else{PublishingView.prompt({draft:draft});var draft=(status=='draft')?true:false;var model=(this.clone&&typeof this.clone!=null)?this.clone:this.model;model.save({is_draft:draft},{success:this._saveSuccess,error:this._saveError});}}},_saveSuccess:function(model,response){if(window.location.hash){window.location.hash="";}
var element=this.$('.status_info');var draft=this.autoSaveStatus;this.autoSaveStatus=null;if(draft==true){element.text('Saved!').addClass('green');savedTime=Math.floor((new Date().getTime())/1000);element.attr('data-saved-time',savedTime);setTimeout(function(){var html="Saved <span class='datetime' data-datetime='"
+timestampToIsoDate(savedTime)+"'>"
+timeSince(savedTime)+"</span>";element.html(html).removeClass('green save_draft').prev().show();},2000);var ids=this.model.items.pluck('ids');var index=jQuery.inArray('empty',ids);ids.splice(index,1);var n=parseFloat(ids.length);if($('.list_info').filter(':first').hasClass('startTop10')){$('#bubble_items').attr('class','start_bubble newtop10icon');switch(n){case 0:$('#bubble_items').addClass('bubble_item1');this.triggerSocial=true;break;case 1:$('#bubble_items').addClass('bubble_item2');break;case 2:$('#bubble_items').addClass('completed');}
removeOnboard();}
if($('.saving_overlay').length){var index=$('.main_list li').index($('.saving_overlay').parents('.list_item'));var el=$('.saving_overlay').parents('.list_item');if(this.model.items.at(index).get('id')=='empty'){$('.minilist .hidden').css('opacity',0).removeClass('hidden').fadeTo('fast',1);}
var a=function(){setTimeout(_.bind(function(){this.newItem();},this),500);this.model.items.at(index).set({'saveItemComplete':this.model.items.at(index)});this.model.items.at(index).unset('saveItemComplete',{silent:true});};a=_.bind(a,this);if(el.find('h3').length){el.find('.number').fadeOut('fast');el.find('h3').slideUp('fast',_.bind(function(){a();},this));}else{a();}}else{if(n==1){$('#sharing .invite_header').click();}}
return;}
var id=(this.clone&&typeof this.clone!=null)?this.clone.get('id'):model.id;top10.api.call("contribution.info",{"contribution_id":id},function(result){var slug='/'+result.contribution.slug+'/'+result.contribution.user.username;if(slug==window.location.pathname){window.location=slug+'#success';location.reload(true);}else{window.location=slug+'#success';}});},_saveError:function(model,errors){var session=top10.auth.getSession();model.trigger("error",model,errors);$('.saving_overlay').fadeOut('fast',function(){$(this).remove();$('.suggest').hide();});var element=this.$('.status_info');$('.add_loading').removeClass('add_loading').addClass('btn_green ava_tt').attr('title','Add to your version').parent().find('.master_points').attr('style','');var sorry='We\'re sorry, your Top10 could not be saved.';var general_msg='<p class="bottom_msg small_text">Please check for errors and try again.<br/>If you’re still experiencing problems please post a comment on our <a href="http://feedback.top10.com/" class="a" target="_blank">feedback site</a>.</p>';if(errors.length>1||errors[0].code!=1103){if(errors[0].code){if(errors[0].code==1107){PopupView.prompt({title:sorry,content:'<p class="modal_msg" data-code="1107">Your title doesn’t seem to be valid</p>'+general_msg});}else{var msg=(errors[0].message)?errors[0].message:'There’s been an error!';var code=(errors[0].code)?errors[0].code:'unknown';PopupView.prompt({title:sorry,content:'<p class="modal_msg" data-code="'+code+'">'+msg+'</p>'+general_msg});}}else{if(errors[0].attribute=="name"){PopupView.prompt({title:sorry,content:'<p class="modal_msg">Please add a title for your Top10.</p>'+general_msg});}else if(errors[0].attribute=="no_items"){PopupView.prompt({title:sorry,content:'<p class="modal_msg">You haven’t added any items to your Top10.<br/>Please add at least one item and then publish.</p>'+general_msg});}else if(errors[0].errors){if(errors[0].errors[0].field=='no_items'){PopupView.prompt({title:sorry,content:'<p class="modal_msg">You haven’t added any items to your Top10.<br/>Please add at least one item and then publish.</p>'+general_msg});}else if(errors[0].errors[0].message[1]!='Please list each item only once.'){PopupView.prompt({title:sorry,content:'<p class="modal_msg h_secondary">'+errors[0].errors[0].message[0]+'</p>'+'<p class="h_secondary modal_sub">'+errors[0].errors[0].message[1]+'</p>'+general_msg});}}else{PopupView.prompt({title:sorry,content:'<p class="modal_msg" data-code="unknown">There’s been an error!</p>'+general_msg});}}
var draft=model.get("is_draft");if(draft){var element=this.$('.status_info');element.text('Error saving draft').addClass('red');setTimeout(function(){var msg='Error: Top10 could not be saved';if(errors[0]&&errors[0].errors&&errors[0].errors[0].message[1]){msg='Error: '+errors[0].errors[0].message[1];}else if(errors[0].message){msg='Error: '+errors[0].message;}
element.text(msg).removeClass('red save_draft').prev().show();},2000);clearInterval(window.status_timer);}
return;}
if(typeof top10_data!='undefined'){top10.api.call("contribution.info",{user_id:session.uid,top10_id:top10_data.top10_id},_.bind(function(result){OverwriteView.prompt({name:result.contribution.name,url:'/'+result.contribution.slug+'/'+result.contribution.user.username,created_at:timeSince(result.contribution.created_at),confirm:_.bind(function(){this.autoSaveStatus=false;this.model.set({"id":result.contribution.id});this._save(result.contribution.is_draft);},this)});},this));}else{var name=(this.clone!=null)?this.clone:this.model;var name=(name.get('name'))?name.get('name'):name.attributes.name;top10.api.call("top10.findbyname",{name:name},_.bind(function(result){top10.api.call("contribution.info",{user_id:session.uid,top10_id:result.top10.id},_.bind(function(result){OverwriteView.prompt({name:result.contribution.name,url:'/'+result.contribution.slug+'/'+result.contribution.user.username,created_at:timeSince(result.contribution.created_at),confirm:_.bind(function(){this.autoSaveStatus=false;this.model.set({"id":result.contribution.id});this._save(result.contribution.is_draft);},this)});},this));},this));}},_pseudoSaveSuccess:function(model){RemixView.prototype.userContributionExists();$('#sb_your_version').empty().attr('id','sb_your_ml');_.delay(_.bind(function(){this.populateYourMiniList();},this),500);_.delay(function(){$('#sb_your_version_hd').not('.sb_active').click();},500);},populateYourMiniList:function(){if(this.model&&this.model.get('populateYourMiniList')){var clone=this.model.get('populateYourMiniList');this.model.unset('populateYourMiniList',{silent:true});}
if($("#sb_your_ml").length==0){$("#sb_your_version").attr('id','sb_your_ml').fadeTo('fast',0,function(){$(this).fadeTo('fast',1);});}
if(this.model.get('user')&&this.model.get('user').get('id')==top10.auth.getSession().uid){this.minilist=new MinilistView({model:this.model,el:$("#sb_your_ml")});this.model.items.each(_.bind(function(v){var newMinilistItem=new MinilistItemView({model:v});this.$('.minilist').append(newMinilistItem.el);},this));$('#sb_your_version_hd').click();}else{var model=(this.clone!=null)?this.clone:this.model;if(!model.get('id')&&top10.auth.getSession()){var x={top10_id:model.get('top10_id'),user_id:top10.auth.getSession().uid};}else{var x={contribution_id:model.get('id')};}
top10.api.call("contribution.info",x,_.bind(function(result){if(result.ok==1){this.clone=new Contribution(result.contribution,{parse:true});var model=this.clone;this.minilist=new MinilistView({model:model,el:$("#sb_your_ml"),pseudo:true});model.items.each(_.bind(function(v){var newMinilistItem=new MinilistItemView({model:v});this.$('.minilist').append(newMinilistItem.el);},this));this.minilist.model.items.bind("change:position",_.bind(function(){this.autoSaveStatus=true;this.clone=this.minilist.model;this.save(null,'draft',this.clone);},this));this.minilist.model.items.bind("remove",_.bind(function(){this.autoSaveStatus=true;this.clone=this.minilist.model;this.save(null,'draft',this.clone);},this));this.minilist.model.items.bind("add",_.bind(function(){this.autoSaveStatus=true;this.clone=this.minilist.model;this.save(null,'draft',this.clone);},this));this.populateAddtoMyList();}},this));}},updateMinilistTime:function(time){var element=$('.action_update span');$('.action_update span').html('Saved');savedTime=Math.round((new Date().getTime())/1000);element.attr('data-saved-time',savedTime);window.status_timer;clearInterval(window.status_timer);window.status_timer=setTimeout(function(){element.html("Saved <span class='datetime' data-datetime='"+timestampToIsoDate(savedTime)+"'>"+timeSince(savedTime)+"</span>");},10000);},getClassName:function(el){var classes=$(el).attr('class').split(/\s+/);return classes[0];},removeError:function(e){$(e.currentTarget).removeClass('val_error');},focusTitle:function(e){$(e.currentTarget).next().focus();},populateAddtoMyList:function(e){var bd=$('.c_bd');if(bd.hasClass('editing')){return;}
var top10_id=(bd.hasClass('top10'))?true:false;$('.add_to').remove();$('.ava_tooltip').remove();if(this.clone){var ids=this.clone.items.pluck('id');$('.in_list').remove();$('master_add_to').removeClass('master_add_to');$('.list_item').not('.item_form').each(function(i){$(this).find('.btn_pink').remove();$(this).find('.remove_item').remove();var id=$(this).attr('data-item-id');var pos=jQuery.inArray(id,ids);if(id&&pos==-1){$(this).append('<a href="#" class="add_to btn_blue newtop10icon ava_tt" title="Add to my Top10" alt="Add to my Top10"></a>');if(top10_id){$(this).addClass('master_add_to');}}else{var nth_text=['st','nd','rd','th'];var nth_num=(pos>3)?3:pos;$(this).find('.add_to').remove();$(this).append('<span class="in_list h_secondary">'+(pos+1)+nth_text[nth_num]+'<em>in your<br/>version</em></span>');}});}},autoSave:_.debounce(function(item_model){var model=this.model;var session=top10.auth.getSession();if(session&&session.uid){this.autoSaveStatus=true;this._save('draft',model);}},1000),saveItem:function(e){e.preventDefault();if(!top10.auth.getSession()){var login=new LoginView.prompt({action:'Save Item',title:'Sign in to save your Top10',success:_.bind(function(){_.defer(_.bind(function(){this.saveItem(e);},this));},this)});return;}else{if($(e.currentTarget).hasClass('save_description')){this.change($('textarea.list_description'));RemixView.prototype.toggleDescrip(e);$('p.list_description').html(this.model.get('description').replace(/\n$/,'<br/>&nbsp;').replace(/\n/g,'<br/>'));$('.extra_descrip').html('<a href="#" class="editDesc newtop10icon">Edit description</a> <a href="#" class="remixClick useBio newtop10icon">Use your bio</a>');}else{var index=$('.list_item').index($(e.currentTarget).parents('.list_item'));this.model.items.at(index).set({'saveItem':true});this.model.items.at(index).unset('saveItem',{silent:true});if(typeof this.model.items.at(index).get('name')=='undefined'||this.model.items.at(index).get('name')==''){return;}}
this.autoSave(this.model.items.at(index));removeOnboard();}},addingItem:function(e){if(e){e.preventDefault();}
var model=(this.clone)?this.clone:this.model;var isClone=(this.clone)?true:false;if($(e.currentTarget).hasClass('add_item')){if(typeof user_top10=='undefined'){this.clone=new Contribution(this.model.attributes,{parse:true});}else{this.clone=new Contribution(this.clone.attributes,{parse:true});}
if(this.clone.items.models[this.clone.items.length-1].get('name')==''||typeof this.clone.items.models[this.clone.items.length-1].get('name')=='undefined'){$(e.currentTarget).parents('.list_item').find('input.item_name').error('Enter the name of the item you want to suggest');return;}
if(isClone){this.clone.addItem(this.model.items.models[this.model.items.length-1]);this.clone.items.at(model.items.length-1).set({'position':1});if(model.items.length>10){model.items.remove(model.items.models[10]);}}else{for(i=(model.items.length-1);i>=0;i--){this.clone.items.remove(model.items.models[i]);}
this.clone=this.stripForAdd(this.clone);this.clone.addItem(this.model.items.models[this.model.items.length-1]);}
this.clone.unset('description');this.save(e,'pseudo',this.clone);}else if($(e.currentTarget).hasClass('add_to')){$(e.currentTarget).addClass('add_loading').removeClass('btn_green ava_tt');$(e.currentTarget).parent().find('.master_points').hide();if(!top10.auth.getSession()){var login=new LoginView.prompt({action:'Add Item',title:'Sign in to save your Top10',extras:{call:'<p class="msg_text mbs">To <strong>Publish</strong> your Top10;</p>'},success:_.bind(function(){_.defer(_.bind(function(){$(e.currentTarget).parent().find('.master_points').hide();this.addToComplete(e);},this));},this),"close":_.bind(function(){this.populateAddtoMyList();},this),error:_.bind(function(){this.populateAddtoMyList();},this)});return;}else{this.addToComplete(e);}}},addToComplete:function(e){e.preventDefault();var add_btn=$(e.currentTarget);if(!this.clone){var m=this.model;var clone=new Contribution(m.attributes,{parse:true});var id=add_btn.parent().attr('data-item-id');var ids=clone.items.pluck('id');var num=jQuery.inArray(id,ids);var total=clone.items.length;var array=[];$('.ava_tooltip').fadeOut('fast',function(){$(this).remove();});for(var i=0;i<total;i++){if(i!=num){array.push(clone.items.models[i]);}}
clone.items.remove(array);clone=this.stripForAdd(clone);clone.unset('description');this.clone=clone;this.save(e,'addTo',clone);}else{if(this.clone.items.length>=10){var items=this.clone.items.pluck('name');var ids=this.clone.items.pluck('id');var opt='';$.each(items,function(i,v){opt=opt+'<option value="'+ids[i]+'">'+(i+1)+'. '+v+'</option>';});var id=$(e.currentTarget).parent().attr('data-item-id');var ids=this.model.items.pluck('id');var replace_id_new=jQuery.inArray(id,ids);var popup=PopupView.prompt({title:'Please choose an item to replace',content:'<p class="h_secondary modal_msg">You’ve already got 10 items in your version!</p>'+'<p class="h_secondary modal_sub">Which item would you like to replace?</p>'+'<p class="mbl mtl"><select id="replace_item" class="mtm item_dd">'+opt+'</select></p>'+'<a class="btn fl" title="Cancel" href="#">Cancel</a>'+'<a class="btn btn_pink btn_cancel fr" title="Add item" href="#">Replace</a>',extraClass:' item_replace'});$('.pseudo_replace').bind('click',_.bind(function(e){var id=$('#replace_item').val();var ids=this.clone.items.pluck('id');var replace_id_old=jQuery.inArray(id,ids);PopupView.prototype.close.call(popup);var new_item=this.model.items.at(replace_id_new).attributes;new_item.position=this.clone.items.at(replace_id_old).get('position');this.clone.items.at(replace_id_old).clear().set(new_item);var ts=Math.round(new Date().getTime());$('.minilist li').eq(replace_id_old).attr('id','ml-'+ts);try{ItemView.prototype.miniList(ts,$('.list_item').eq(replace_id_new).find(".item_img"),'replace');}catch(e){top10.log('Canvas error');}
this.save(e,'addTo',this.clone);e.preventDefault();},this));}else{var id=$(e.currentTarget).parent().attr('data-item-id');var ids=this.model.items.pluck('id');var replace_id_new=jQuery.inArray(id,ids);var new_item=this.model.items.at(replace_id_new).attributes;new_item.position=this.clone.items.length+1;$('.ava_tooltip').fadeOut('fast',function(){$(this).remove();});this.clone.addItem(new_item);this.save(e,'addTo',this.clone);}}},stripForAdd:function(clone){clone.set({is_remix:true});clone.set({is_draft:0});clone.set({parent_id:clone.get('id')});clone.unset('id');clone.unset('top10_id');delete clone.id;return clone;},newItem:function(e){if($('.no_edit').length){return;}
if(this.model.items.length<=1){$('.list_item .remove_item').addClass('hidden');$('.minlist li .remove_item').addClass('hidden');}else{$('.list_item .remove_item').removeClass('hidden');$('.minlist li .remove_item').removeClass('hidden');}
var empty=(typeof this.model.items.get('empty')=='undefined')?null:this.model.items.get('empty').id;if(parseFloat(this.model.items.length)>=10){$('#full_top10').remove();var text=($('.c_bd').hasClass('editing')||typeof myTop10=='boolean')?'<div id="full_top10" class="full_top10 clearfix pr"><h6 class="h_secondary newtop10icon">Your Top10 is full</h6>Remove an item above if you want to add something new</div>':'<div id="full_top10" class="full_top10 clearfix pr"><h6 class="h_secondary newtop10icon">Agree? Disagree?</h6><a href="#" class="start_btn full_top10_start">Start your own version</a> of this Top10</div>';$('.main_list').after(text);$('#full_top10').css('opacity',0).fadeTo('fast',1);return;}
if(parseFloat(this.model.items.length)<10&&empty!='empty'){$('#full_top10').fadeOut('fast',function(){$(this).remove();});setTimeout(_.bind(function(){this.model.addItem({id:'empty'});},this),250);}
$('.bump_up').removeClass("inactive");$('.bump_down').removeClass("inactive");$('.main_list .bump_down').removeClass("inactive");$('.main_list .bump_down:last').addClass("inactive");},trackExternal:function(e){var itemName=$(e.currentTarget).parents('.item_content_wrapper').find('.item_name').text();var itemURL=$(e.currentTarget).attr('href');_gaq.push(['_setCustomVar',1,'outbound link',itemName,3]);_gaq.push(['_trackEvent', 'outbound link',itemURL,window.location.pathname]);},placeholder:function(){if(!'placeholder'in document.createElement('input')){console.log('No placeholder');}}});var FlashView=Spine.View.extend({el:$('#flash_messages'),messages:{'101':'Your email address has been successfully verified','102':'<p class="h_tertiary strong">You need to verify your email address.</p>'+'<p class="t_secondary">Check your inbox for an email titled “Verify your email”</p>'+'<button class="resend_verification btn btn_galaxy">Resend your verification email</button>','103':'You need to change your password'},initialize:function(options){_.bindAll(this,'closeFlash');var session=top10.auth.getSession();if(session&&session.uid){top10.api.call('user.flashMessages',{},_.bind(function(response){if(response.messages){for(i in response.messages){var message=response.messages[i];var messageText=this.messages[message.code];if(messageText){$(this.el).append('<div class="page_msg pr level_'+message.level+'" id="flash_message_'+message.code+'">'+messageText+'<a class="close_msg" title="Close this message">×</a>').find('.page_msg').hide().delay(200).fadeTo('slow',1);}}}},this));}},events:{'click .close_msg':'closeFlash','click .resend_verification':'resendVerification'},closeFlash:function(e){$(e.currentTarget).remove();},resendVerification:function(e){e.preventDefault();top10.api.call('user.resendVerify',{},_.bind(function(result){if(result&&1===result.ok){$('#flash_message_102').fadeTo('slow',0,function(){$(this).slideUp('slow',function(){$(this).remove();});});}},this));return false;}});views.Flash=new FlashView;var FriendsChooserView=Spine.View.extend({el:$("#friends_chooser"),serviceFriends:{},template_friend:'{{#user}}<li class="clearfix list_item pr friend_item" id="user_{{id}}">'+'<a href="{{link}}" title="{{username}}" class="friend_details fl">'+'<img class="fl avatar mr_15" src="{{image_link}}" width="28" height="28" alt="{{username}}" title="{{username}}" />'+'<h3 class="sec_title mbn">{{first_name}} {{last_name}}</h3>'+'<p class="tiny_text">{{contribution_count}} Top10s</p>'+'</a>'+'<div>'+'<p class="friend_bio fl">{{ bio }}</p>'+'</div>'+'<div class="user_{{id}}_btn user_follow"></div>'+'</li>{{/user}}',template_to_follow:'{{#user}}<p class="following">Follow</p><p class="tiny_text"><a class="unfollow" data-id="{{id}}">Stop Following</a></p>{{/user}}',template_to_unfollow:'{{#user}}<a class="btn btn_blue btn_wide follow_btn follow_link" data-id="{{id}}">Follow</a>{{/user}}',save_button:"<a href='#' id='save_friends'>Save Friends</a>",no_new_friends:"<p>Sorry. We couldn't find any new friends</p>",initialize:function(options){options=options||{};_.bindAll(this,"toggleFriend","saveFriends");},events:{'click .follow_btn':'followFriend','click .unfollow':'unfollowFriend','click #save_friends':'saveFriends'},unfollowFriend:function(e){e.preventDefault();var $clicked=$(e.target);var userId=$clicked.attr("data-id");for(var followId in this.serviceFriends){if(userId==this.serviceFriends[followId].user.id){this.serviceFriends[followId].follow=false;var $div=$clicked.parent().parent();$div.empty();$div.append(this.mustache(this.template_to_unfollow,{user:this.serviceFriends[followId].user}));}}},followFriend:function(e){e.preventDefault();var $clicked=$(e.target);var userId=$clicked.attr("data-id");for(var followId in this.serviceFriends){if(userId==this.serviceFriends[followId].user.id){this.serviceFriends[followId].follow=true;var $div=$clicked.parent();$clicked.remove();$div.append(this.mustache(this.template_to_follow,{user:this.serviceFriends[followId].user}));}}},saveFriends:function(e){e.preventDefault();var toFollow=[];var toUnfollow=[];for(var followId in this.serviceFriends){if(this.serviceFriends[followId].follow){toFollow.push(this.serviceFriends[followId].user.id);}else{toUnfollow.push(this.serviceFriends[followId].user.id);}}
if(toFollow.length>0){top10.api.call('user.bulkFollow',{'followed_user_ids':toFollow});}
if(toUnfollow.length>0){top10.api.call('user.bulkUnfollow',{'unfollowed_user_ids':toUnfollow});}},render:function(){var $user_friends=$('#user_friends');$("#loading_friends").remove();var friendCount=0;for(var friendId in this.serviceFriends){friendCount++;var $friend=$(this.mustache(this.template_friend,{user:this.serviceFriends[friendId].user}));var $followDiv=$friend.find(".user_follow");if(this.serviceFriends[friendId].follow){$followDiv.append(this.mustache(this.template_to_follow,{user:this.serviceFriends[friendId].user}));}else{$followDiv.append(this.mustache(this.template_to_unfollow,{user:this.serviceFriends[friendId].user}));}
$user_friends.append($friend);}
if(friendCount>0){$('#friends_chooser').append(this.save_button);}else{$('#friends_chooser').append(this.no_new_friends);}}});var FacebookFriendsChooserView=FriendsChooserView.extend({initialize:function(options){window.fbAsyncInit=_.bind(function(){FB.init({appId:'156677901008976',status:true,cookie:true,xfbml:true,oauth:true});FB.getLoginStatus(_.bind(function(response){if(response.authResponse){FB.api('/me/friends',_.bind(function(response){var friends=response.data;var friendIds=[];$.each(friends,function(i,friend){friendIds.push($(friend).attr('id'));});top10.api.call('user.lookupUnfollowedProfiles',{'service':'facebook','ids':friendIds,'extended':true},_.bind(function(result){if(result.profiles){this.serviceFriends=result.profiles;$.each(this.serviceFriends,_.bind(function(i,friend){friend.follow=!friend.user.current_user_removed_follow;friend.user.link='/'+friend.user.username;friend.user.image_link=friend.user.image?imageUrl(friend.user.image,friend.user.image_state,30,'blank'):'/media/img/placeholder/user-30.gif';},this));}
this.render();},this));},this));}else{$("#loading_friends").remove();$('#friend_chooser_error').append("<p>Sorry. We couldn't find any friends from facebook.</p>");}},this));},this);$.getScript(document.location.protocol+'//connect.facebook.net/en_US/all.js');FriendsChooserView.prototype.initialize.call(this,options);}});var TwitterFriendsChooserView=FriendsChooserView.extend({initialize:function(options){top10.api.call('user.lookupUnfollowedProfiles',{'service':'twitter','extended':true},_.bind(function(result){if(result.profiles){this.serviceFriends=result.profiles;$.each(this.serviceFriends,_.bind(function(i,friend){friend.follow=!friend.user.current_user_removed_follow;friend.user.link='/'+friend.user.username;friend.user.image_link=friend.user.image?imageUrl(friend.user.image,friend.user.image_state,30,'blank'):'/media/img/placeholder/user-30.gif';},this));}
this.render();},this));FriendsChooserView.prototype.initialize.call(this,options);}});if($('#friends_chooser.facebook_chooser').length>0){views.fb_friends=new FacebookFriendsChooserView();}else if($('#friends_chooser.twitter_chooser').length>0){views.twitter_friends=new TwitterFriendsChooserView();};var ImageChooserView=Spine.View.extend({tagName:"div",className:"image_chooser",id:"image_chooser",template:'<div class="chooser_header">'+'<a class="img_tab tab current" href="#img_search">Image Search</a>'+'<a class="img_tab tab" href="#img_url">Image URL</a>'+'<span class="close_chooser popup-close">&times;</span>'+'</div>'+'<div class="img_search img_content pr"><input id="input_image" class="fl rounded_input h_tertiary" value="" name="q" autocomplete="off" /><button class="btn btn_pink">Search</button><div class="chooser_main clearfix t_secondary"></div></div>'+'<div class="img_url img_content hidden pr"><input id="input_image_url" class="fl rounded_input h_tertiary" value="" name="q" autocomplete="off" /><button class="btn btn_pink inactive">Get Image</button><p>Enter the URL of an image and select \'Get Image\'.<br/>You can crop the image in the next step.</p></div>'+'<div class="chooser_footer clearfix"><a href="#" class="left_message no_image t_secondary">Don\'t display an image for this item</a></div>',events:{"click .close_chooser":"closeChooser","keyup #input_image":"searchValue","keyup #input_image_url":"removeError","click .img_url button":"searchURL","click .img_search button":"searchClick","hover .YQLresult img":"imgHover","click .YQLresult img":"openJcrop","click .publish_img_btn":"publishImg","click .go_back_chooser":"goBack","click .moreYQL:not(.inactive)":"YQLpagination","click .lessYQL:not(.inactive)":"YQLpagination","click .no_image":"noImage","click .img_tab:not(.current)":"imgTabs","click .img_tab.current":"preventDefault"},initialize:function(options){_.bindAll(this,"render","openChooser","closeChooser","searchValue","openJcrop","publishImg","noImage","imgTabs");this.render();if(!jQuery.Jcrop){$.getScript('http://c759326.r26.cf2.rackcdn.com/js/lib/jquery.Jcrop.min.js');}},render:function(){$('#image_chooser').remove();$(this.el).html(this.template).appendTo('body');_.defer(function(){iPhoneModal();$('#image_chooser').css({'margin-top':'+=40','opacity':0}).animate({'margin-top':'-=40','opacity':1},'fast');});this.model.set({img_offset:0});this.openChooser();return this;},openChooser:function(){$('.chooser_main').empty();$('.publishImg').remove();$('div.popup').remove();$(document).bind('keyup.imgChoose',_.bind(function(e){if(e.keyCode==27){$(document).unbind('keyup.imgChoose');this.closeChooser(e,false);}},this));var pos=this.model.get('position')-1;if($('.list_item').eq(pos).find('input.item_name').length){var val=(typeof this.model.get('img_searchTerm')=='undefined')?$('.list_item').eq(pos).find('input.item_name').val():this.model.get('img_searchTerm');}else{return false;}
if(val){$('.chooser_main').empty().addClass('YQLloading').removeClass('YQLNoResults').append('<em>Searching for images</em>');$('#input_image').val(unescape(val));$('body').append('<div class="popup popup-dialog"><div class="popup-overlay"></div></div>');$('.popup-overlay').click(_.bind(function(){this.closeChooser();},this));$(this.el).fadeIn();iPhoneModal();this.callYQL(val);}},closeChooser:function(e,publish){$('#image_chooser').animate({'margin-top':'-=40',opacity:0},'fast',function(){$(this).remove();});if(jQuery.support.transition){$('.popup').addClass('popup_away');$('.popup').bind("transitionend webkitTransitionEnd",_.throttle(function(){$(this).remove();},100));}else{$(this.el).fadeOut('fast',_.bind(function(){this.remove();},this));$('.popup').fadeOut('fast',function(){$(this).remove();});}
if(e){e.preventDefault();}
if(!publish&&typeof this.model.attributes.orig_img!='undefined'){var style=(typeof this.model.attributes.orig_img.style=='undefined')?'':this.model.attributes.orig_img.style;var orig=(this.model.attributes.orig_img.url=='/media/img/placeholder/blank.gif')?'/media/img/placeholder/default-135.gif':this.model.attributes.orig_img.url;this.model.set({'image':orig});$('.item_img').eq(this.model.get('position')-1).attr('src',orig).attr('style',style);}
this.unSet();},noImage:function(e){this.closeChooser();this.model.unset('image');this.model.unset('image_size');this.model.unset('image_x');this.model.unset('image_y');var pos=this.model.get('position')-1;$('.item_img').eq(pos).attr('src','/media/img/placeholder/default-135.gif').removeAttr('style');$('.minilist li').eq(pos).find('img').remove().end().find('canvas').remove().end().prepend('<img width="30" height="30" src="/media/img/placeholder/blank.gif" class="absolute avatar">');this.model.set({'img_publish':Math.round(new Date().getTime())});if(e){e.preventDefault();}},searchValue:function(e){this.model.set({'img_offset':0});var liveValue=escape($(e.currentTarget).val().replace('"',"'"));var parentThis=this;setTimeout(function(){input=escape($(e.currentTarget).val().replace('"',"'"));if(liveValue==input){$('.chooser_main').empty().addClass('YQLloading').removeClass('YQLNoResults').append('<em>Searching for images</em>');parentThis.model.set({img_searchTerm:liveValue});parentThis.callYQL(input);}
if(input==''){this.$('.img_search .btn_brown').addClass('inactive');}else{this.$('.img_search .btn_brown').removeClass('inactive');}},500);},searchClick:function(e){this.callYQL($('#input_image').val());e.preventDefault();},callYQL:function(q){var o=this.model.get('img_offset')*21;var YQLresult;var parentThis=this;$('.moreYQL, .lessYQL').remove();$('.chooser_footer').append('<a href="#" class="fr moreYQL btn inactive"></a><a href="#" class="fr lessYQL btn inactive"></a>');q=unescape(q);q=stripCrazyChars(q);var YQLurl='/image.php?q='+escape(q.toLowerCase())+'&offset='+o+'&callback=?';$.ajax({url:YQLurl,cache:true,dataType:'jsonp',jsonp:'callback',jsonpCallback:'cbfunc',success:function(data){if(data.error){data.query={count:0};parentThis.publishYQL(data);}else{if($('.img_search').is(":visible")){parentThis.publishYQL(data);if(data.query.count==22&&o<=126){$('.moreYQL').removeClass('inactive');}
if(o>0){$('.lessYQL').removeClass('inactive');}}}}});function cbfunc(data){}},publishYQL:function(data){if(data.query.count==0){$('.chooser_main').empty().removeClass('YQLloading').addClass('YQLNoResults').append('<em>No images found. Try a different search term.</em>');}else{$('.chooser_main').empty().removeClass('YQLloading YQLNoResults').append('<ul class="YQLresult"></ul>');imgdata=(data.query.count==1)?data.query.results:data.query.results.ImageResult;$.each(imgdata,function(index,v){if(index==21){return false;}
$('.chooser_main ul').append('<li class="fl">'+'<img data-imageid="'+index+'" data-imageurl="'+v.MediaUrl+'" data-imageheight="'+v.Height+'" data-imagewidth="'+v.Width+'"src="'+v.Thumbnail.Url+'" height="'+v.Thumbnail.Height+'" width="'+v.Thumbnail.Width+'"/>'+'</li>');});}},openJcrop:function(e){this.jCrop($(e.currentTarget).attr('data-imageurl'),this.model.get('position'),$(e.currentTarget).attr('data-imagewidth'),$(e.currentTarget).attr('data-imageheight'));$('#input_image, .img_search button').remove();$('.chooser_header').html('<em class="h_quarternary">Select a part of the image to use</em><span class="close_chooser popup-close">&times;</span>');$('.moreYQL, .lessYQL').remove();},publishImg:function(e){var pos=this.model.get('position')-1;var img=$(".item_img").eq(pos);img.parent().find('.change_img').remove();img.attr('data-img-source','selected').removeAttr('data-img-name');if($('.minilist li').length>0){this.miniList(pos,img);}
this.model.unset('image_state');this.model.set({'img_publish':Math.round(new Date().getTime())});this.closeChooser(null,true);e.preventDefault();},jCrop:function(imgURL,pos,imageWidth,imageHeight){this.model.set({orig_img:{url:$('.item_img').eq(pos-1).attr('src'),style:$('.item_img').eq(pos-1).attr('style')}});var thisElem=this;$('.chooser_main').addClass('jCropLoading').html('<div class="img_choice" >'+'<em>Preparing image</em>'+'<img src="/media/img/placeholder/blank.gif" id="jcrop_target" />'+'</div>');var img=new Image();img.onerror=function(){thisElem.imgErr();}
img.onload=function(){if(imageWidth!='unknown'&&imageHeight!='unknown'){if(imageHeight!=img.height||imageWidth!=img.width){thisElem.imgErr();return;}}else{imageHeight=img.height,imageWidth=img.width;if(imageHeight<135||imageWidth<135){thisElem.imgErr(1);return;}}
$('.chooser_main').find('em').remove().end().find('img').attr('src',imgURL);setTimeout(function(){$('.chooser_main').removeClass('jCropLoading');},2000);thisElem.triggerCrop(imgURL,pos,imageWidth,imageHeight);$('.chooser_footer').append('<a href="#" class="btn_pink fr publish_img_btn">Add image</a>');$('.left_message').html('&laquo; Go back and choose another image').removeClass('close_chooser no_image').addClass('go_back_chooser');}
img.src=imgURL;return false;},imgErr:function(tooSmall){var msg=(tooSmall)?'Oh no! That image is too small.':'This image is not available.';var link_msg=(tooSmall)?'Choose another image':'Return to search results'
var classes=(tooSmall)?'go_back_url':'go_back_search';$('.chooser_main:visible').empty().removeClass('YQLloading jCropLoading').addClass('YQLNoResults').html('<em>'+msg+'<br/><a href="#" class="go_back_chooser '+classes+'">&laquo; '+link_msg+'</a></em>');},triggerCrop:function(imgURL,pos,imageWidth,imageHeight){var chosen_image={};var thisModel=this.model;$("li.list_item").eq(pos-1).find('.item_img').attr('src',imgURL);if(parseInt(imageHeight)<parseInt(imageWidth)){var cy=0;var cy2=imageHeight;var size=imageHeight;var cx=(imageWidth/2)-(size/2);var cx2=(imageWidth/2)+(size/2);}else{var cx=0;var cx2=imageWidth;var size=imageWidth;var cy=(imageHeight/2)+(size/2);var cy2=(imageHeight/2)-(size/2);}
setTimeout(function(){$('#jcrop_target').Jcrop({minSize:[135,135],aspectRatio:1,setSelect:[cx,cy,cx2,cy2],boxWidth:540,boxHeight:220,trueSize:[imageWidth,imageHeight],bgColor:"white",onSelect:showCoords,onChange:showCoords});},250);var cropping_coord={h:200,w:200,x:0,x2:200,y:0,y2:200}
chosen_image.crop=0;chosen_image.imgurl=0;chosen_image.crop=cropping_coord;chosen_image.imgurl=imgURL;function showCoords(coords){cropping_coord=coords;chosen_image.crop=cropping_coord;chosen_image.imgurl=imgURL;chosen_image.imageWidth=imageWidth;chosen_image.imageHeight=imageHeight;var rx=135/coords.w;var x=(chosen_image.crop.x<0)?0:chosen_image.crop.x;var y=(chosen_image.crop.y<0)?0:chosen_image.crop.y;var size=(chosen_image.crop.w<chosen_image.crop.h)?chosen_image.crop.w:chosen_image.crop.h;size=(size<135)?135:size;size=(size>imageHeight)?imageHeight:size;size=(size>imageWidth)?imageWidth:size;thisModel.set({image:chosen_image.imgurl,image_size:size,image_x:x,image_y:y});$("li.list_item").eq(pos-1).find('.item_img').css({width:Math.round(rx*imageWidth)+'px',height:Math.round(rx*imageHeight)+'px',marginLeft:'-'+Math.round(rx*coords.x)+'px',marginTop:'-'+Math.round(rx*coords.y)+'px'});}},miniList:function(pos,img,model){var m=(model)?model:this.model;if(document.createElement('canvas').getContext){var ts=Math.round(new Date().getTime());$('.minilist li').eq(pos).find('canvas').remove().end().prepend('<canvas id="mini-canvas-'+ts+'" class="mini_canvas absolute avatar" width="30" height="30"></canvas>').find('img').remove();var ctx=document.getElementById('mini-canvas-'+ts).getContext('2d');ctx.drawImage(img[0],m.get('image_x'),m.get('image_y'),m.get('image_size'),m.get('image_size'),0,0,30,30);}else{$('.minilist li').eq(pos).find('img').attr('src',$(img[0]).attr('src'));}},goBack:function(e){$(this.el).html(this.template);this.openChooser();if(this.model.attributes.orig_img.url){var style=(typeof this.model.attributes.orig_img.style=='undefined')?'':this.model.attributes.orig_img.style;var orig=(this.model.attributes.orig_img.url=='/media/img/placeholder/blank.gif')?'/media/img/placeholder/default-135.gif':this.model.attributes.orig_img.url;$('.item_img').eq(this.model.get('position')-1).attr('src',orig).attr('style',style);}
if($(e.currentTarget).hasClass('go_back_url')){$('.img_tab:eq(1)').click();}
e.preventDefault();},YQLpagination:function(e){$('.chooser_main').empty().addClass('YQLloading').removeClass('YQLNoResults').append('<em>Searching for images</em>');if($(e.currentTarget).hasClass('moreYQL')){var o=this.model.get('img_offset')+1;this.model.set({'img_offset':o});}else{var o=this.model.get('img_offset')-1;this.model.set({'img_offset':o});}
var pos=this.model.get('position')-1;var val=$('#input_image').val();this.callYQL(val);e.preventDefault();},unSet:function(){this.model.unset('img_searchTerm');this.model.unset('img_offset');this.model.unset('orig_img');},imgTabs:function(e){$('.img_search').hide();$('.img_url').hide();$('.img_tab').removeClass('current');$(e.currentTarget).addClass('current');$('.chooser_main').removeClass('YQLloading');var i=$('.img_tab').index(e.currentTarget);if(i==0){$(this.el).html(this.template);this.openChooser();}else if(i==1){$('.moreYQL, .lessYQL').remove();}
$('.img_content').eq(i).show();e.preventDefault();},removeError:function(e){var input=jQuery.trim($(e.currentTarget).val());if(input==''){this.$('.img_url .btn').addClass('inactive');}else{this.$('.img_url .btn').removeClass('inactive');}},searchURL:function(e){e.preventDefault();var btn=$('#input_image_url');$('.chooser_main').removeClass('YQLloading');if(btn.val().length>0){$(e.currentTarget).attr({'data-imageurl':btn.val(),'data-imagewidth':'unknown','data-imageheight':'unknown'});this.openJcrop(e);$('.img_url').remove();$('.img_search').show();}else{$('.img_url em').remove();$('.img_url p').before('<em>This doesn\'t seem to be a valid image URL</em>');}},preventDefault:function(e){e.preventDefault();},imgHover:function(e){if(e.type=="mouseenter"){var left='-'+(parseFloat($(e.currentTarget).attr('width'))/2-27)+'px';var top='-'+(parseFloat($(e.currentTarget).attr('height'))/2-27)+'px';$(e.currentTarget).css({'left':left,'top':top});}else{$(e.currentTarget).attr('style','');}}});var LoginView=PopupView.extend({className:'popup popup-dialog',template:'{{{ call }}}'+'<p class="modal_sub h_secondary">{{title}}</p>'+'<a href="#fb" class="new_fb fl">Sign in with Facebook</a>'+'<a href="#twt" class="new_twt signin_btn fr">Sign in with Twitter</a>'+'<p class="bottom_msg t_small">No Twitter or Facebook? <a href="#nat" class="new_native">Sign in with your email</a> instead</p>',events:{'click .new_fb':'onLoginClick','click .new_twt':'onLoginClick','click .new_native':'onLoginClick'},initialize:function(options){options=options||{};options.action=options.action||'unknown';options.title=options.title||'How would you like to sign in?';options.call=options.call||{call:'Save or Publish'};options.extraClass=' login_modal';options.content=options.content||this.mustache(this.template,{title:options.title});_.bindAll(this,'onLoginClick');PopupView.prototype.initialize.call(this,options);if(options.success){this.bind('success',options.success);_gaq.push(['_setCustomVar',1,'generate_sign_in',options.action,3]);_gaq.push(['_trackPageview','/sign_in/start']);}
if(options.error){this.bind('error',options.error);}},onLoginClick:function(e){var services={'fb':'facebook','twt':'twitter','nat':'top10'};var call=$(e.currentTarget).attr('href');if(call){window.logInService=services[call.substr(1)];top10.auth.signIn(_.bind(function(session){if(session){this.remove();this.trigger('success',session);}},this),services[call.substr(1)]);e.preventDefault();_gaq.push(['_trackPageview','/sign_in/details/'+services[call.substr(1)]]);}}},{prompt:function(options){var view=new LoginView(options);$('.popup').remove();$('body').append(view.el);return view;}});var MinilistView=Spine.View.extend({events:{"click .minilist_save":'minilistSave',"click .minilist_cancel":'minilistCancel',"click .add_suggest":'addSuggest',"click .sugg_title a":"refreshSuggested"},template:'<ol class="clear_b minilist sb_ml"></ol>'+'<p class="action_update pr">'+'<span class="status_info small_text">{{ state }}</span>'+'<a href="{{{ slug }}}" class="btn_pink save_publish" title="I\'m done!">I\'m done!</a>'+'</p>',add_btn:'<a href="#add" class="minilist_add fl" title="Add item">+ Add new item</a>',suggested_template:'<li class="add_suggest pr" data-id="{{ id }}">'+'<img width="30" height="30" src="{{ img }}" class="absolute avatar">'+'<p class="fl">'+'<span class="item_name nowrap">{{ name }}</span>'+'<span class="suggest_num block t_secondary f_12">in {{ count }} Top10{{ s }}</span>'+'</p>'+'<a href="#" class="btn" title="Add item">+</a>'+'</li>',initialize:function(options){_.bindAll(this,"render","itemAdded","itemRemoved","populateSuggested","addSuggest","sortable");var m=(options.model)?options.model:this.model;m.items.bind("remove",this.itemRemoved);m.items.bind("add",this.itemAdded);this.render(options.pseudo);if(jQuery.ui){this.sortable(m);}else{$.getScript('http://c759326.r26.cf2.rackcdn.com/js/lib/jquery-ui-1.8.16.custom.min.js',_.bind(function(data,textStatus){this.sortable(m);},this));}},sortable:function(m){var previous;this.$('.minilist').sortable({opacity:0.7,placeholder:'ml_placeholder',forcePlaceholderSize:true,revert:200,tolerance:'pointer',items:"li:not(.hidden)",start:function(e,ui){$('#sb_your_version').addClass('single_item');previous=$(ui.item).index()},stop:_.bind(function(e,ui){m.items.at(previous).set({'position':$(ui.item).index()+1});$('.minilist').removeClass('single_item');},this)}).addTouch();},render:function(pseudo){var thisEl=this;var data={state:'Not saved'};data.slug=(typeof this.model.get('user')=='undefined')?'/'+this.model.get('slug'):'/'+this.model.get('slug')+'/'+this.model.get('user').get('username');$(this.el).html(thisEl.mustache(thisEl.template,data));this.populateSuggested();},itemAdded:function(model){var newMinilistItem=new MinilistItemView({model:model,pseudo:this.options.pseudo});this.$('.minilist').append(newMinilistItem.el);var suggest=($('.add_suggest[data-id="'+model.get('id')+'"]').length)?$('.add_suggest[data-id="'+model.get('id')+'"]'):$('.add_suggest:visible').eq(-1);suggest.animate({opacity:0},200,function(){suggest.css('min-height','0').slideUp();});if(this.model.items.length>=10){setTimeout(function(){$('.minilist_suggestions').fadeOut();},400);}},populateSuggested:function(isCreate,offset){if(typeof top10_data=='undefined'&&!isCreate){return;}
var top10_id,thisEl=this;var ids=this.model.items.pluck('id');if(!isNaN(offset)&&this.suggested){var os=this.suggested.get('slots')*offset;if(this.suggested.get('total')-os<1){os=0;this.suggested.set({'offset':1});}}else{var os=0;}
if(isCreate){top10.api.call("top10.findByName",{"name":this.model.get('name')},function(result){if(1===result.ok&&result.top10&&!isNaN(result.top10.id)){top10_id=result.top10.id;getTop10();}
if(0===result.ok){setTimeout(function(){$('.minilist_suggestions').fadeOut();},400);}});}else{var top10_id=(top10_data.top10_id)?top10_data.top10_id:top10_data.id;getTop10();}
function getTop10(){var x={"top10_id":top10_id,'ids':ids,'count':10,"offset":os};top10.api.call("top10.getSuggestedItems",x,function(result){thisEl.suggested=new Contribution(result,{parse:true});if(thisEl.model.items.length<10){thisEl.renderSuggested();}});}},renderSuggested:function(){if(this.model.items.length<10&&this.suggested&&this.suggested.items.length>0){var exists=$('.minilist_suggestions').length;$('.minilist_suggestions').remove();var slots=10-this.model.items.length;var existing_items=this.model.items.pluck('id');var new_items=this.suggested.items.pluck('id');var matches=0;this.suggested.set({'slots':slots});$.each(new_items,_.bind(function(i,v){if(matches>=slots){return false;}
var in_arr=jQuery.inArray(v,existing_items);if(in_arr!=-1){return;}
if(matches===0){$('.minilist').after('<div class="minilist_suggestions hidden"><p class="sugg_title t_secondary">Suggestions</p><ul class="suggestions_ul mts sb_ml"></ul></div>');}
var s_item=this.suggested.items.get(v);var data={id:s_item.get('id'),img:imageUrl(s_item.get('image'),s_item.get('image_state'),30),name:s_item.get('name'),count:s_item.get('contribution_count'),s:(s_item.get('contribution_count')>1)?'s':''}
$('.suggestions_ul').append(this.mustache(this.suggested_template,data));matches++;},this));if(this.suggested.get("total")>slots){$('.sugg_title').append('<a title="Get more Top10s" href="#" class="fr pr get_more">Get more</a>');}
if(exists>0){$('.minilist_suggestions').show();}else{$('.minilist_suggestions').fadeIn();}}},addSuggest:function(e){_gaq.push(['_trackEvent', 'edit', 'add suggestion', window.location.pathname]);var id=$(e.currentTarget).attr('data-id');var item=this.suggested.items.get(id);item.set({position:this.model.items.length+1});item=new ContributionItem(item.attributes);item.set({'state':'pre_edit'});$('body').css('height',$('body').height());removeOnboard(1);this.model.addItem(item);$('body').removeAttr('style');this.model.set({'autoSave':true});this.model.unset('autoSave',{silent:true});if(this.model.items.get('empty')){this.model.items.get('empty').set({'position':this.model.items.length});}
e.preventDefault();},refreshSuggested:function(e){$(e.currentTarget).addClass('sugg_loading');if(this.suggested.get('offset')){this.suggested.set({'offset':(this.suggested.get('offset')+1)});}else{this.suggested.set({'offset':1});}
this.populateSuggested(true,this.suggested.get('offset'));e.preventDefault();},itemRemoved:function(model){this.populateSuggested();}})
var MinilistItemView=Spine.View.extend({tagName:'li',className:'pr',template:'<img class="absolute avatar" src="{{ image }}" width="30" height="30" />'+'<p class="nowrap"><span class="ml_pos" data-pos="{{position}}"></span>. <span class="item_name" title="{{name}}">{{name}}</span></p>'+'{{^remove}}<a title="Remove item" class="btn_red remove_item" href="#">&times;</a>{{/remove}}',events:{"drag  .minilist li":"dragItem","click .minilist .remove_item":"delete"},initialize:function(options){_.bindAll(this,"render","nameChange","positionChange","redraw","itemRemoved");this.model.bind("change:position",this.positionChange);this.model.bind("change:name",this.nameChange);this.model.bind("redraw",this.redraw);this.model.parent.items.bind("remove",this.itemRemoved);this.pseudo=options.pseudo;if(this.el){this.render();}},render:function(){var model=this.model.toJSON();if(model.image){model.image=imageUrl(model.image,model.image_state,30);}else{model.image='/media/img/placeholder/blank.gif';}
$(this.el).html(this.mustache(this.template,model));if(this.model.get('id')=='empty'){$('.minilist .hidden').removeClass('hidden');$(this.el).addClass('hidden');}
this.redraw(this.model);return this;},nameChange:function(){if(this.model.get('name')){this.$('.item_name').text(this.model.get('name'));}
else{this.$('.item_name').empty();}},positionChange:function(model){var pos=this.model.get('position'),prev=this.model.previous('position'),method=pos>prev?'after':'before',other=$('.minilist li').eq(pos-1);if($('.minilist li').get(pos-1)!==this.el){$(this.el).hide().css('opacity',0);if(!$('.minilist').is('.new_item')){$(this.el).animate({opacity:0},100,function(){$(this).slideUp('200',function(){other[method](this);$(this).slideDown(function(){$(this).animate({opacity:1},100,function(){$(this).removeAttr('style');});});});});}
else{other[method](this.el);$(this.el).slideDown(function(){$(this).animate({opacity:1},300);});}}},redraw:function(model){this.$('.ml_pos').text(model.get('position'));if(parseFloat(this.model.parent.items.length)==1){$('.minilist').addClass('single_item');}},itemRemoved:function(model){if(model===this.model){var mi=this;$(this.el).animate({opacity:0},300,function(){$(this).slideUp(function(){mi.remove();});});}},"delete":function(e){var thisEl=this;$(this.el).removeItemModal('Remove Item?',null,null,_.bind(function(removed){m=this.model;if(removed){if(parseFloat(this.model.parent.items.length)==1){$('.minilist').addClass('single_item');}
$(this.el).animate({opacity:0},200,function(){$(this).css('min-height','0').slideUp(function(){m.parent.items.remove(m);});});}
else{}},this));e.preventDefault();}});var OverwriteView=window.OverwriteView=PopupView.extend({template:'<p class="modal_msg h_secondary">You already started a version of {{name}} on {{created_at}}</p>'+'<p class="h_secondary modal_sub">What would you like to do?</p>'+'<a href="#" class="btn go_back mrl">Cancel</a>'+'<a href="#" class="btn btn_red save_publish warning" data-id="{{id}}">Overwrite existing version</a>'+'<p class="t_small bottom_msg"><a href="{{url}}" target="_blank">See your existing version</a> (opens in a new window)</p>',events:{"click .go_back":"close","click .save_publish":"confirm"},initialize:function(options){options=options||{};options.canClose=true;options.title=options.title||" ";options.content=options.content||this.mustache(this.template,{name:options.name||'',url:options.url||'',created_at:options.created_at});options.canClose=(options.canClose)?true:false;PopupView.prototype.initialize.call(this,options);if(options.confirm){this.bind("confirm",options.confirm);}
if(options.render){options.render();}},confirm:function(e){if(e){e.preventDefault();}
this.trigger("confirm");this.remove();}},{prompt:function(options){var view=new OverwriteView(options);$('.popup').remove();$('body').append(view.el);return view;}});var PublishingView=PopupView.extend({className:'popup popup-dialog',template:'<p class="modal_msg h_secondary">Saving your Top10</p>'+'<p class="big_loader"></p>'+'<p class="bottom_msg t_small"><span>Experiencing problems? Try again or post a comment on our <a href="http://feedback.top10.com/" target="_blank">feedback site</a>.</span></p>',initialize:function(options){options=options||{}
options.title=options.title||' ';options.content=options.content||this.mustache(this.template,options);options.canClose=false;options.extraClass=' publish_modal';PopupView.prototype.initialize.call(this,options);}},{prompt:function(options){var view=new PublishingView(options);$('.popup').remove();$('body').append(view.el);return view;},close:function(options){$('.popup').remove();}});var RemixView=CommonView.extend({el:$('body'),events:{'click .editable:not(.no_edit) .main_list .item_name, .editable:not(.no_edit) .main_list .item_desc, .editable:not(.no_edit) .main_list .item_img_wrapper, .editable:not(.no_edit) .text_descrip_cont, .editable:not(.no_edit) .input_descrip_cont, .editing .itemlink':'remixClick','click .remix_btn':'remixClick','click .edit_btn':'editClick','click .my_list .edit_descrip':'editClick','click .start_btn':'startClick','click .my_list .item_name, .my_list .item_desc, .my_list .item_img_wrapper, .editing .itemlink':'editClick','click .edit_descrip, .cancel_list_description, .useBio':'toggleDescrip'},initialize:function(options){_.bindAll(this,'render','remixClick','editClick','startClick','apiSignIn','toggleDescrip');var model=new Contribution(top10_data,{parse:true});this.model=model;CommonView.prototype.initialize.apply(this,arguments);var itemviews=this.itemviews=[],state=this.initialItemState;$('.list_item').each(function(k,v){var newItem=new ItemView({model:model.items.at(k),el:this,state:state});itemviews.push(newItem);});top10.events.connect('auth:signin',this.apiSignIn);var session=top10.auth.getSession();if(session&&session.uid){this.apiSignIn(session);}else{this.populateAddtoMyList();}
var hash=getHash();window.location.hash="";if(hash.length==0){this.editMethod='start';}else{this.editMethod=hash;};if(top10_data.items.length==0){if(session&&this.model.get('user')&&this.model.get('user').get('id')==session.uid){var list_info=$('.list_info').filter(':first');list_info.html('<ul>'+'<li class="start_bubble completed newtop10icon no_sel" id="bubble_top10">Top10 started</li>'+'<li class="start_bubble newtop10icon no_sel" id="bubble_items">Add a few items</li>'+'<li class="start_bubble omega newtop10icon no_sel" id="bubble_friends">Invite friends</li>'+'</ul>');if(top10_data.contribution_count>0){list_info.after('<div class="onboarding newtop10icon clearfix pr no_sel">'+'Choose items to<br/>add to your version'+'</div>');}}}
if(hash=='modal'){setTimeout(function(){$('.list_item .item_name').filter(':first').click().focus();},500);}else if(hash=='remix'){this.remixClick();}else if(hash=='edit'){this.editClick();}
if(hash=='success'){$('.c_hd').before('<div class="page_msg page pr">'+'<h2 class="h_quarternary"><strong>Success!</strong> Your Top10 is live. <a href="#fb" class="new_fb small_share">Share it on Facebook</a><a href="http://twitter.com/intent/tweet?text=Check+out+my+'+this.model.get('name')+'+on+Top10&url='+this.model.get('url')+'&via=Top10" class="new_twt small_share twt_share">Share it on Twitter</a></h2>'+'<a class="close_msg" href="#" title="Close this message">&times;</a>'+'</div>');$('.page_msg').css('opacity',0).delay(750).fadeTo('slow',1);$('.page_msg .new_fb').bind('click.FBshare',_.bind(function(e){e.preventDefault();this.pageTop=$(window).scrollTop();SharingView.prototype.addOverlay();var n=this.model.get('name');var l=this.model.get('url');var p=(this.model.get('image_state')=='exists')?imageUrl(this.model.get('image'),this.model.get('image_state'),135):window.location.protocol+'//'+window.location.hostname+'/media/img/fb-placeholder.png';var d=this.model.get('description');d='Discover, create &amp; share Top 10 lists about the stuff you love.'
FB.ui({method:'feed',name:n,link:l,picture:p,description:d,display:'dialog'},_.bind(function(response){_gaq.push(['_trackSocial','facebook','feed',window.location.pathname]);SharingView.prototype.removeOverlay();},this));},this));var stop_refresh=false;$.each(top10_data.items,function(i,v){stop_refresh=(v.image_state=='processing'||v.image_state=='exists')?true:false;if(stop_refresh==true){return false;}});if(stop_refresh==true){window.refresh_img=self.setInterval(function(){top10.api.call("contribution.info",{contribution_id:top10_data.id},_.bind(function(data){stop_refresh=true;$.each(data.contribution.items,function(i,v){if(v.image_state=='exists'){if(v.image){$('.list_item').eq(v.position-1).find('.item_img').fadeOut(200).attr({'src':imageUrl(v.image,v.image_state,135),'data-img-source':'selected'}).hide().delay(500).fadeIn(400);model.items.at(v.position-1).set({image:v.image,image_size:v.image_size,image_x:v.image_x,image_y:v.image_y});}}else if(v.image_state!='processing'){if(v.image==null){$('.list_item').eq(v.position-1).find('.item_img_wrapper').prev().remove();$('.list_item').eq(v.position-1).find('.item_img_wrapper').remove();}else{stop_refresh=false;}}});if(stop_refresh==true){window.refresh_img=window.clearInterval(refresh_img);}
window.top10_data=data.contribution;},this));},6000);}}
var model_type="top10";if(this.model.get("id")){model_type="contribution";this.incrementViewCount(model_type,this.model.get("id"));}else{this.incrementViewCount(model_type,this.model.get("top10_id"));}
this.render();},userContributionExists:function(username){if(top10_data&&top10_data.user){var owner=(top10_data.user.attributes)?top10_data.user.attributes.id:top10_data.user.id;}else{var owner=null;}
var session=top10.auth.getSession();m=this.model;if(typeof username=='undefined'||!isNaN(username)){top10.api.call('user.getInfo',{user_id:top10.auth.getSession().uid},function(response){changeTabs(response.user.username,this);username=response.user.username;});}else{changeTabs(username,this);}
function changeTabs(username,thisEl){var url=document.location.pathname.split("/");var url='/'+url[1]+'/'+username;$('.tab.my_top10').empty().html('<a href="'+url+'" class="stretched" alt="Your version" title="Your version">Your version</a>');if(owner==session.uid){thisEl.editModeTabs();}}
return username;},editModeTabs:function(){$('.tab').removeClass('current');$('.tab.my_top10').addClass('current').empty().text('Your version');var text=$('.user_top10_tab').text();if(!top10_data.id){$('.tab.master_tab').html('<a href="'+document.location.href+'" class="stretched"><span class="top10_tab">The Top10</span></a>');$('.user_top10_tab').addClass('nowrap').html('<a href="'+document.location.href.replace(/#/g,'')+'/contributions" class="stretched" alt="'+text+'" title="'+text+'">'+text+'</a>');}else if(text=='Contributions'){}else{$('.user_top10_tab').addClass('nowrap').html('<a href="'+document.location.href+'" class="stretched" alt="'+text+'" title="'+text+'">'+text+'</a>');}},apiSignIn:function(session){var items=0;if(typeof user_top10!='undefined'&&this.model){var username=(user_top10.user.attributes)?user_top10.user.attributes.username:user_top10.user.username;this.userContributionExists(username);this.model.set({'populateYourMiniList':true});items=user_top10.items.length;}else{var top10_id=(top10_data.top10_id)?top10_data.top10_id:this.model.get('top10_id');top10.api.call("contribution.info",{top10_id:top10_id,user_id:session.uid},_.bind(function(response){if(1===response.ok){this.userContributionExists(response.contribution.user.username);if(this.model){this.model.set({'populateYourMiniList':true});items=response.contribution.items.length;}}else{this.populateAddtoMyList();}},this));}
if($('.c_bd').hasClass('editing')){this.notifications();}},render:function(){CommonView.prototype.render.call(this);return this;},editMode:function(index){var customVarVal='create top 10 - '+this.editMethod;_gaq.push(['_setCustomVar',1,customVarVal,window.location.pathname,3]);_gaq.push(['_trackEvent', 'create top 10','initialise',this.editMethod]);$('.remix_btn').removeClass('remix_btn');$('.c_bd').addClass('editing');$('.add_to').remove();if(this.target&&this.target.hasClass('btn_pink')){_.each(this.itemviews,_.bind(function(v){v.changeState('pre_edit');},this));}else{_.each(this.itemviews,_.bind(function(v,i){if(i==index){v.oldModel=v.model.clone();v.changeState('edit');}else{v.changeState('pre_edit');}},this));}
delete this.target;if(this.delete_item||this.delete_item===0){$('.list_item').eq(this.delete_item).find('.remove_item').click();delete this.delete_item;}
if(typeof this.minilist=='undefined'){$('#c_secondary').fadeTo('slow',0,_.bind(function(){$('#sidebar').html('<h6 id="sb_your_version_hd" class="sb_header h_tertiary sb_inactive">Your version</h6>'+'<div id="sb_your_ml" class="sb_content open_panel" style="height: auto; max-height: none">'+'<div></div>'+'</div>');this.minilist=new MinilistView({model:this.model,el:$("#sb_your_ml div")});this.model.items.each(_.bind(function(v){var newMinilistItem=new MinilistItemView({model:v});this.$('.minilist').append(newMinilistItem.el);},this));$('#c_secondary').fadeTo('slow',1);},this));}
this.editModeTabs();this.notifications();if(this.model.id){var listDescription=this.model.get('description');}else{var listDescription='';}
$('.list_description').remove();},remixClick:function(e){$('.editable').removeClass('editable');this.prepareModel();this.model.unset('description');if(e){e.preventDefault();if($(e.currentTarget).hasClass('remove_item')){this.delete_item=$('.list_item').index($(e.currentTarget).parents('.list_item'));}
this.edit_descrip=$(e.currentTarget).hasClass('edit_descrip');this.target=$(e.currentTarget);}
try{this.editMode($('.list_item').index($(e.currentTarget).parents('.list_item')));}catch(e){this.editMode();}},editClick:function(e){$('.my_list').removeClass('my_list');m=this.model;this.$('.page_title').parent().prepend('<div class="mtt mlm input_wrapper pr titlefont"><span class="top10_placeholder">Top 10</span><input class="list_name edit" maxlength="61" name="list_name" value="'+$('.page_title').text().substr(7)+'"></div>');this.$('.page_title').remove();if(e){e.preventDefault();if($(e.currentTarget).hasClass('remove_item')){this.delete_item=$('.list_item').index($(e.currentTarget).parents('.list_item'));}}
this.target=$(e.currentTarget);this.edit_descrip=$(e.currentTarget).hasClass('edit_descrip');this.editMode($('.list_item').index($(e.currentTarget).parents('.list_item')));},startClick:function(e){if(!top10.auth.getSession()){var login=new LoginView.prompt({action:'Start Your Version',title:'Sign in to start your Top10',success:_.bind(function(){_.defer(_.bind(function(){this.startClick(e);},this));},this)});return;}
if(e){e.preventDefault();if($(e.currentTarget).hasClass('full_top10_start')){$(e.currentTarget).parents('.full_top10').addClass('full_top10_create').html('<h6 class="h_secondary newtop10icon">Creating&hellip;</h6>');}else{$(e.currentTarget).removeClass('btn_pink').text('Creating...');}}
var name=$('.c_hd h1').text();top10.api.call('contribution.create',{name:name},_.bind(function(result){if(result&&1===result.ok&&result.contribution&&result.contribution.id){var count=0;var stop=false;var timer=setInterval(_.bind(function(){if(!stop){top10.api.call('contribution.info',{contribution_id:result.contribution.id},function(result){if(result&&1===result.ok&&result.contribution&&result.contribution.user&&result.contribution.user.username&&result.contribution.slug){stop=true;clearInterval(timer);window.location="/"+result.contribution.slug+"/"+result.contribution.user.username;}
count=count+1;});}
if(count>10){stop=true;clearInterval(timer);}},this),500);}},this));},setupModel:function(){throw new Error("not implemented: setupModel");},notifications:function(e){if(!$('.list_info').filter(':first').hasClass('startTop10')){var session=top10.auth.getSession();var descrip_status=(this.edit_descrip)?'':' hidden';var bio_status=(this.edit_descrip)?' hidden':'';if(this.model.get('description')){var extra_descrip=($('.c_bd').hasClass('editing'))?'<a href="#" class="editDesc newtop10icon">Edit description</a> <a href="#" class="remixClick useBio newtop10icon">Use your bio</a>':'';}else{var extra_descrip=($('.c_bd').hasClass('editing'))?'<a href="#" class="addDesc newtop10icon">Add a description<a/>':'';}
var list_description=(this.model.get('description'))?this.model.get('description'):'';list_description='<div class="input_descrip_cont'+descrip_status+'">'+'<textarea name="list_description" rows="2" cols="10" class="list_description edit" placeholder="Describe your Top10">'+list_description+'</textarea>'+'<a title="Save" class="fr btn_pink save_item save_description" href="#">Save</a>'+'<a title="Cancel" class="cancel_list_description fr" href="#">Cancel</a>'+'</div>';if(session&&session.uid){$('.list_info').eq(0).empty();top10.api.call('user.getInfo',{user_id:session.uid},_.bind(function(data){var img=(data.user.image_state='exists')?imageUrl(data.user.image,data.user.image_state,60):'/media/img/placeholder/user-60.gif';var description='<div class="text_descrip_cont'+bio_status+' edit_descrip">'+'<p class="list_description f_14 galaxy_70">';if(this.model.get('user')&&this.model.get('user').get('id')==top10.auth.getSession().uid&&this.model.get('description')){description+=this.model.get('description');}else{description+=(data.user.bio.length)?data.user.bio:data.user.first_name+' hasn\'t added a bio yet.';}
description+='</p>'+'<div class="extra_descrip">'+extra_descrip+'</div>';description+='</div>';$('.list_info').eq(0).css('opacity',0).fadeTo('slow',1).html('<a href="/'+data.user.username+'"><img width="60" height="60" src="'+img+'" class="fl mrm avatar" alt="'+data.user.first_name+' '+data.user.last_name+'" title="'+data.user.first_name+' '+data.user.last_name+'"></a>'+'<h4 class="h_tertiary strong">By '+data.user.first_name+' '+data.user.last_name+'</h4>'+
description+
list_description);$('.list_description').placeholder().autoGrow();},this));}else{$('.list_info').eq(0).css('opacity',0).fadeTo('slow',1).html('<div class="page_msg h_quarternary"><strong>Your Top10 is not saved!</strong>&nbsp;&nbsp;<a href="#login" class="signin_btn">Sign in</a> to save your changes.</div>'+
list_description);$('.list_info').eq(0).find('.signin_btn').click(_.bind(function(e){e.preventDefault();var login=new LoginView.prompt({action:'Remix Save'});},this));$('.list_description').placeholder().autoGrow();}}},toggleDescrip:function(e){var x=$('.input_descrip_cont').is(':visible');var el=(x)?$('.input_descrip_cont'):$('.text_descrip_cont');var ot=(x)?$('.text_descrip_cont'):$('.input_descrip_cont');if(this.model){if(!x){this.old_descrip=this.model.get('description');}
if($(e.currentTarget).hasClass('useBio')){$('.text_descrip_cont').fadeOut(_.bind(function(){this.model.unset('description');this.model.set({'autoSave':true});setTimeout(_.bind(function(){this.edit_descrip=false;this.notifications();},this),0);},this));return;}
if($(e.currentTarget).hasClass('cancel_list_description')){$('textarea.list_description').val(this.old_descrip);this.model.set({'description':this.old_descrip});}else{this.model.set({'autoSave':true});}}
el.fadeOut(_.bind(function(){ot.fadeIn();},this));}});var SettingsView=Spine.View.extend({el:$('#user_settings'),action_notification:'<div class="page_msg inpage_msg pr">'+'<h2 class="h_quarternary">{{title}}</h2>'+'<p class="t_small galaxy_70">{{message}}</p>'+'<a class="close_msg" href="#" title="Close this message">&times;</a>'+'</div>',success_connect_html:{'facebook':'<h2 class="h_tertiary strong mbs">Facebook</h2>'+'<p class="t_secondary galaxy_50 mbm">Connecting with Facebook lets you share and create Top10s with your friends really easily! We’ll never post anything to Facebook without your permission.</p>'+'<a href="#fb" class="new_fb bbox" data-service="facebook">Connect with Facebook</a>','twitter':'<h2 class="h_tertiary strong mbs">Twitter</h2>'+'<p class="t_secondary galaxy_50 mbm">Connecting with Twitter allows quick and easy sharing with your followers. We never tweet anything without your permission.</p>'+'<a href="#twt" class="new_twt bbox" data-service="twitter">Connect with Twitter</a>'},success_disconnect_html:'<h2 class="h_tertiary strong mbs">{{serviceName}}</h2>'+'<p class="connected t_secondary galaxy_50">Connected<br><a class="setting_disconnect {{serviceType}}_disconnect" href="#" data-service="{{serviceType}}">Disconnect from {{serviceName}}</a></p>'+'<span class="btn_connected mtm inactive">You’re connected</span>',template_create_pwd:'<h2 class="h_tertiary strong mbm">Create password</h2>'+'<ul>'+'<li>'+'<label class="f_14" for="pwd_new">New password</label>'+'<input id="pwd_new" class="h_tertiary" name="pwd_new" type="password">'+'</li>'+'<li>'+'<label class="f_14" for="pwd_new2">Repeat new password</label>'+'<input id="pwd_new2" class="h_tertiary" name="pwd_new2" type="password">'+'</li>'+'</ul>',template_old_pwd:'<label class="f_14" for="pwd_old">Old password</label>'+'<input id="pwd_old" class="h_tertiary" name="pwd_old" type="password">',events:{'click .setting':'clearNotificationSaved','click .user_sync_friends_setting':'toggleSyncSetting','click .save_notifications:not(.inactive)':'saveNotifications','click .resend_verification':'resendVerification','click .new_fb, .new_twt':'connectClick','click .facebook_disconnect, .twitter_disconnect':'disconnectClick','click .delete_account a':'deleteAccount','click .save_emailpwd':'saveEmailPwd','click #create_pwd':'showCreatePwd'},initialize:function(options){options=options||{};_.bindAll(this,'deleteAccount','clearNotificationSaved','saveNotifications','toggleSyncSetting','resendVerification','connectClick','waitForProfileConnectSuccess','disconnectClick','showCreatePwd');var session=top10.auth.getSession();if(!session){top10.auth._updateSession(function(s){session=s;});}},clearNotificationSaved:function(e){$('#notification_setting_saved').remove();$('.save_notifications').removeClass('inactive');},toggleSyncSetting:function(e){e.preventDefault();var setting=$(e.currentTarget);var enabled=setting.is(':checked');top10.api.call("user.edit",{'sync_friends':enabled,'user_id':top10.auth.getSession().uid},_.bind(function(result){if(result&&1===result.ok){setting.prop("checked",enabled);}},this));},saveNotifications:function(e){e.preventDefault();$('#notification_setting_saved').remove();var settingsParams={};$('.setting').each(_.bind(function(i,clicked){var $setting=$(clicked);var activityType=$setting.attr('value');var enabled=$setting.is(':checked');settingsParams[activityType.replace(/:/g,"_")]=enabled;},this));var parts=window.location.pathname.match(/^\/settings\/notifications\/(.+)\/(.+)$/);if(parts&&parts.length==3){settingsParams["i"]=parts[1];settingsParams["n"]=parts[2];}
top10.api.call('user.setSubscriptions',settingsParams,_.bind(function(result){$(this.el).append('<p id="notification_setting_saved" class="connected h_quarternary galaxy_50">Saved</p>');$('.save_notifications').addClass('inactive');},this));return false;},resendVerification:function(e){e.preventDefault();top10.api.call('user.resendVerify',{},_.bind(function(result){if(result&&1===result.ok){var noteTitle='We’ve re-sent your verification email';var noteMsg='Please check your inbox for an email titled ‘Welcome to Top 10’. Click the link contained within to&nbsp;finish.';this.showNotification(noteMsg,noteTitle);}},this));return false;},connectClick:function(e){e.preventDefault();var service=$(e.currentTarget).data('service');new LoginView({action:'Connect Social Service',title:'Sign in to connect your account',success:_.bind(function(){this.waitForProfileConnectSuccess(service);},this)}).onLoginClick(e);return;},disconnectClick:function(e){e.preventDefault();var service=$(e.currentTarget).data('service');top10.api.call('user.removeProfile',{'service':service},_.bind(function(result){if(result&&1===result.ok){$('#connect_'+service).html(this.mustache(this.success_connect_html[service]));}},this));return;},waitForProfileConnectSuccess:function(service){var count=0;var stop=false;var timer=null;timer=setInterval(_.bind(function(){if(!stop){top10.api.call('user.getInfo',{'user_id':session.uid},_.bind(function(result){if(result&&1===result.ok&&result.user['has_'+service+'_service']){stop=true;clearInterval(timer);$('#connect_'+service).html(this.mustache(this.success_disconnect_html,{serviceName:service.charAt(0).toUpperCase()+service.slice(1),serviceType:service}));}
count=count+1;},this));}
if(count>10){stop=true;clearInterval(timer);}},this),500);},deleteAccount:function(e){OverwriteView.prompt({canClose:true,confirm:function(){top10.api.call("user.delete",{"user_id":user_data},function(result){top10.auth.signOut(function(){OverwriteView.prompt({render:function(){setTimeout(function(){window.location='http://'+window.location.hostname;},4000);},title:"Account Deleted",content:'<p class="msg_text mbm mtm">Your account has been deleted</p>'+'<div class="message_info small_text mbm">Click here to go to <a href="/">'+window.location.hostname+'</a></div>'});},true);});},title:"Delete Account",content:'<p class="h_secondary">Are you sure you want to delete your account?</p>'+'<a title="Cancel" href="#" class="btn mrm go_back">Cancel</a>'+'<a title="Delete my account" href="#" class="btn btn_red save_publish confirm_delete_account warning">Delete my account</a>'+'<p class="t_small bottom_msg">All of your Top10s will be archived. If you change your mind, sign in again and we\'ll reinstate your account.</p>',extraClass:' delete-account'});e.preventDefault();},saveEmailPwd:function(e){$('#emailpwd_saved').remove();var email=$('#email').val();var oldPassword=$('#pwd_old');var password=$('#pwd_new').val();var password2=$('#pwd_new2').val();var details={user_id:session.uid};if(email&&email.length>0){var reg=(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);if(!email.match(reg)){$('#email').addClass('val_error').error('You must provide a valid email address');e.preventDefault();return false;}
details['email']=email;}else{$('#email').removeClass('val_error');}
if(password&&password.length>0){if(password!=password2){$('#pwd_new2').addClass('val_error').error('You must validate your new passsword');e.preventDefault();return false;}
details['password']=password;if($(oldPassword).length>0){details['old_password']=$(oldPassword).val();}}else{$('#pwd_old').removeClass('val_error');$('#pwd_new2').removeClass('val_error');}
if(details['email']||details['password']){top10.api.call('user.edit',details,_.bind(function(result){if(result&&1===result.ok){var noteTitle,noteMsg;$('.val_error').removeClass('val_error');if(email){$('#email').val('');$('#email_title').html(email);noteTitle='You’ve changed your email address';noteMsg='Please check your inbox for an email titled ‘Welcome to Top 10’. Click the link contained within to&nbsp;finish.';}
if(password){var changePwd=$('#change_pwd');$(changePwd).find('input').val('');if($(oldPassword).length===0){$(changePwd).find('h2').after(this.template_old_pwd);}
noteTitle='Password set!';noteMsg='You can now sign in using the email address '+$('#update_emailpwd .email').text()+' and the password you just&nbsp;chose';}
this.showNotification(noteMsg,noteTitle);}else{if(result.message&&result.message.indexOf('Invalid parameter')!=-1){if(result.message.indexOf('email')!=-1){$('#email').addClass('val_error').error('You must provide a valid email address that hasn\'t already been used');}else if(result.message.indexOf('oldPassword')!=-1){$('#pwd_old').addClass('val_error').error('You must provide a correct password');}}}},this));}
e.preventDefault();return false;},showCreatePwd:function(e){e.preventDefault();$('#change_pwd').html(this.template_create_pwd);},showNotification:function(noteMsg,noteTitle){$('html, body').animate({scrollTop:0},'slow');$('#user_settings').prepend(this.mustache(this.action_notification,{title:noteTitle,message:noteMsg}));$('.page_msg').css('opacity',0).delay(750).fadeTo('slow',1);}});if($('#user_settings').length>0){views.settings=new SettingsView();}
var StartView=PopupView.extend({className:'popup popup-dialog start_modal',template:'<h2>Enter a title for your Top10:</h2>'+'<div class="input_wrapper q_inactive pr">'+'<form action="" method="get" autocomplete="off">'+'<input class="list_name rounded_input" maxlength="61" name="list_name" id="contribution_name" autocomplete="off" />'+'<button class="btn_pink inactive" type="submit" id="start_contribution">Start</button>'+'</form>'+'</div>'+'<p class="strong">Or choose a popular topic:<a class="fr pr get_more" href="#" title="Get more Top10s">Get more</a></p>'+'<ul id="start_featured"></ul>',events:{'click #start_contribution':'startContribution','click #start_featured a':'startContribution','click .get_more':'promotedTop10s'},initialize:function(options){options=options||{};options.title='hide';options.content=this.mustache(this.template);_.bindAll(this,'startContribution','promotedTop10s');PopupView.prototype.initialize.call(this,options);},render:function(){PopupView.prototype.render.call(this);setTimeout(_.bind(function(){this.promotedTop10s();},this),0);this.autosuggest=new AutoSuggestView({el:this.$('.list_name').closest('.input_wrapper'),type:'top10',keyup:function(e,query){if(query==''){$('#start_contribution').addClass('inactive');$('.start_modal .input_wrapper').addClass('q_inactive');}else{$('#start_contribution').removeClass('inactive');$('.start_modal .input_wrapper').removeClass('q_inactive');}}});setTimeout(function(){$('input#contribution_name').focus();$('input#contribution_name').bind('blur.removeQ focus.removeQ',function(e){if($(this).val()==''||e.type=='blur'){$('.start_modal .input_wrapper').addClass('q_inactive');}else{$('.start_modal .input_wrapper').removeClass('q_inactive');}});},250);},promotedTop10s:function(){$('#start_featured').empty().addClass('start_loading');top10.api.call('contribution.featured',{count:4},function(data){$('#start_featured').empty().removeClass('start_loading');$.each(data.contributions,function(i,v){var contributors=(v.contribution_count>2);if(contributors===true){contributors='<p class="clearfix">'+v.contribution_count+' contributors</p>';}else{contributors='';}
var m=((i+1)%2==0)?' omega':'';$('#start_featured').append('<li class="pr '+m+'">'+'<a href="/'+v.slug+'">'+'<img alt="'+v.name+'" class="med_stack absolute" height="60" src="'+imageUrl(v.image,v.image_state,60)+'" width="60">'+'<h3>'+v.name+'</h3>'+contributors+'</a></li>');});});},startContribution:function(e){e.preventDefault();var name=$('#contribution_name').val();if($(e.currentTarget).parents('#start_featured').length){name=$(e.currentTarget).find('h3').text().substring(7);}
$('.start_err').remove();if(name){top10.api.call('contribution.create',{name:name},_.bind(function(result){if(result&&1===result.ok&&result.contribution&&result.contribution.id){var count=0;var stop=false;var timer=setInterval(_.bind(function(){if(!stop){top10.api.call('contribution.info',{contribution_id:result.contribution.id},function(result){if(result&&1===result.ok&&result.contribution&&result.contribution.user&&result.contribution.user.username&&result.contribution.slug){stop=true;clearInterval(timer);window.location="/"+result.contribution.slug+"/"+result.contribution.user.username+'#modal';}
count=count+1;});}
if(count>10){stop=true;clearInterval(timer);}},this),500);}else if(result.code&&result.code=='1103'){var session=top10.auth.getSession();if(session&&session.uid){top10.api.call('contribution.findByName',{name:name,user_id:session.uid},function(result){$('#contribution_name').error('<strong>You\'ve already created a Top 10 '+name+'</strong><a href="/'+result.contribution.slug+'/'+result.contribution.user.username+'">Update your version</a>').shakeAnimate();});}}},this));}
return false;}},{prompt:function(options){if(!top10.auth.getSession()){var login=new LoginView.prompt({action:'Start Contribution',title:'Sign in to start your Top10',success:_.bind(function(){_.defer(_.bind(function(){var view=new StartView(options);$('.popup').remove();$('body').append(view.el);return view;},this));},this)});return;}
var view=new StartView(options);$('.popup').remove();$('body').append(view.el);return view;}});var SuperUserView=Spine.View.extend({tagName:"div",className:"superuser hideSuper",id:"superuser",template:'{{#featured}}'+'<a href="#" class="fr omega btn_white btn mrl btn_square_big unfeature top10icon" title="Unfeature" data-kind="{{kind}}">X</a>'+'{{/featured}}'+'{{#unfeatured}}'+'<a href="#" class="fr omega btn_white btn mrl btn_square_big feature top10icon" title="Feature" data-kind="{{kind}}">h</a>'+'{{/unfeatured}}'+'{{#admin}}'+'<a class="btn btn_white fl" href="{{admin}}" title="Item Admin" data-kind="{{kind}}">Item Admin</a>'+'{{/admin}}'+'{{#edit}}'+'<a class="btn btn_white edit_btn fl" href="#" title="Edit this Top10" data-kind="{{kind}}">Edit</a>'+'{{/edit}}'+'{{#ban}}'+'{{#banned}}'+'<a href="#" class="fr omega btn mrl btn_green btn_square_big unban_user" title="Unban" data-kind="{{kind}}"><span class="top10icon" style="font-size: 20px;">&hearts;</span></a>'+'{{/banned}}'+'{{^banned}}'+'<a href="#" class="fr omega btn mrl btn_red btn_square_big ban_user" title="Ban" data-kind="{{kind}}"><span class="top10icon">X</span></a>'+'{{/banned}}'+'{{/ban}}'+'{{#delete}}'+'<a href="#" class="fr omega btn mrl btn_red btn_square_big remove_item newtop10icon" title="Delete" data-kind="{{kind}}"></a>'+'{{/delete}}'+'{{#banned}}'+'<div class="clear_b"><span class="sec_title tiny_text">This user is banned</div>'+'{{/banned}}'+'{{#impersonate}}'+'<a href="/admin/impersonate/{{impersonateId}}" class="fr omega btn mrl btn_red btn_square_big impersonate_user" title="Impersonate" data-kind="{{kind}}"><span class="top10icon">ಠ_ಠ</span></a>'+'{{/impersonate}}',events:{"click #superuser .edit_btn":"edit","click #superuser .remove_item":"delete","click #superuser .ban_user":"ban","click #superuser .unban_user":"unban","click #superuser .feature":"feature","click #superuser .unfeature":"unfeature"},models:{"top10":Top10,"contribution":Contribution,"user":User,"item":Item},initialize:function(options){_.bindAll(this,'render','edit','delete','ban');this.kind=options.kind;this.identity=options.identity;this.render();},render:function(){if($('#superuser').length!=0){return;}
this.models[this.kind].getInfo(this.identity,{error:this.error,success:_.bind(function(model){this.model=model;context={};if(_.include(["contribution","user"],this.kind)){context["delete"]=true;}
if("user"===this.kind){context.ban=true;context.banned=!!this.model.get("is_banned");var session=top10.auth.getSession();if(session.uid!=this.identity){context.impersonate=true;context.impersonateId=this.identity;}}
if(_.include(["contribution","top10","item"],this.kind)){context.edit=true;context.admin="http://"+top10._endpoint+"/v1/admin/top10/"+this.model.get("slug")+"/items/";}
if(_.include(["contribution","top10"],this.kind)){model.items.each(function(v,k){var el=$("li[data-item-id="+v.id+"] h3.item_name");el.append(' <a href="'+v.get("url")+'">&rarr;</a>');})
context.featured=window.top10_data&&top10_data.is_featured;context.unfeatured=!context.featured;}
$(this.el).html(this.mustache(this.template,context)).appendTo('body');},this)});},error:function(model,error){alert(error[0].message);},edit:function(e){if("contribution"===this.kind){views.contribution.editClick();}
if("top10"===this.kind||"item"===this.kind){var name=prompt("Rename",this.model.get("name"));if(name&&this.model.get("name")!==name){this.model.save({"name":name},{error:this.error,success:_.bind(function(model){this.models[this.kind].getInfo(model.id,{error:this.error,success:_.bind(function(model){location.href=model.get("url");},this)});},this)});}}
e.preventDefault();},"delete":function(e){var params={};if(confirm("Delete?")){params[this.kind+"_id"]=this.identity;top10.api.call(this.kind+".delete",params,function(){location.href="/";});}},ban:function(e){if(confirm("Ban?")){top10.api.call("user.ban",{user_id:this.identity},function(){location.reload();});}},unban:function(e){if(confirm("Unban?")){top10.api.call("user.unban",{user_id:this.identity},function(){location.reload();});}},feature:function(e){var data={};if("contribution"===this.kind){data={contribution_id:top10_data.id};}else if("top10"===this.kind){data={top10_id:top10_data.top10_id};}
top10.api.call(this.kind+".feature",data,_.bind(function(data){$(e.currentTarget).addClass('unfeature').removeClass('feature').text('X').attr('title','Unfeature');},this));},unfeature:function(e){var data={};if("contribution"===this.kind){data={contribution_id:top10_data.id};}else if("top10"===this.kind){data={top10_id:top10_data.top10_id};}
top10.api.call(this.kind+".unfeature",data,_.bind(function(data){$(e.currentTarget).addClass('feature').removeClass('unfeature').text('h').attr('title','Feature');},this));}});var TagsView=Spine.View.extend({el:$(".top10_tags"),tags_template:'<ul>'+'{{#tags}}'+'<li>'+'<div class="tag_bar"></div>'+'<p class="tag_details {{#user_tagged}}user_tagged_true{{/user_tagged}}{{#count}} has_tags{{/count}}"><a href="#" class="plus_1 {{#user_tagged}}btn newtop10icon{{/user_tagged}}{{^user_tagged}}btn_yellow{{/user_tagged}}">{{^user_tagged}}+1{{/user_tagged}}</a><span class="tag_name" rel="tag">{{name}}</span><span class="tag_count fr" data-count="{{count}}">{{falsecount}}</span></p>'+'</li>'+'{{/tags}}'+'</ul>',default_tags:{'Funny':{'count':0,user_tagged:false},'Well-written':{'count':0,user_tagged:false},'Controversial':{'count':0,user_tagged:false},'Awesome':{'count':0,user_tagged:false},'Informative':{'count':0,user_tagged:false},'Balderdash':{'count':0,user_tagged:false},'NSFW':{'count':0,user_tagged:false},'Gross':{'count':0,user_tagged:false},'Fail':{'count':0,user_tagged:false}},tags:_.clone(this.default_tags),contributionId:undefined,initialize:function(options){options=options||{};this.contributionId=options.contribution_id;_.bindAll(this,"addTag");if(this.contributionId){top10.api.call("contribution.tags",{'contribution_id':this.contributionId},_.bind(function(result){if(result.contribution_tags){var updated_tags=_.clone(this.default_tags);_.map(result.contribution_tags,function(tag){if(updated_tags[tag.name]){updated_tags[tag.name]={'count':parseInt(tag.count),'user_tagged':tag.user_tagged};}});this.tags=updated_tags;this.render();}},this));}},events:{'click .tag_details':'addTag'},stretchWidth:function(){},addTag:function(e){e.preventDefault();var session=top10.auth.getSession();if(!session){new LoginView.prompt({action:'Tag',title:'Sign in to tag this contribution',success:_.bind(function(){_.defer(_.bind(function(){this.addTag(e);},this));},this)});return;}
var plus1=$(e.currentTarget).children('.plus_1');var tag_name=plus1.parent().children('.tag_name').text().replace(/\d/g,'');if(this.contributionId&&tag_name&&this.tags[tag_name]){var tag=this.tags[tag_name];if(!tag.count){tag.count=0;}
plus1.addClass('tag_active');plus1.parent().children('.tag_name').addClass('tag_active');if(tag.user_tagged){top10.api.call("contribution.untag",{'contribution_id':this.contributionId,tag_name:tag_name},_.bind(function(result){if(result&&1===result.ok){this.tags[tag_name]={'count':parseInt(tag.count)-1,'user_tagged':false};this.render();}},this));}else{top10.api.call("contribution.tag",{'contribution_id':this.contributionId,tag_name:tag_name},_.bind(function(result){if(result&&1===result.ok){this.tags[tag_name]={'count':parseInt(tag.count)+1,'user_tagged':true};_gaq.push(['_trackEvent', 'tag', tag_name, window.location.pathname]);this.render();}},this));}}},render:function(){var keys=_.keys(this.tags);$(this.el).html(this.mustache(this.tags_template,{tags:_.map(keys,function(key){if(this.tags[key]){var tag=this.tags[key];var falsecount=tag.count;if(falsecount===0){falsecount='-';}
return{'name':key,'count':tag.count,'falsecount':falsecount,'user_tagged':(tag.user_tagged==false)?null:tag.user_tagged.toString()};}},this)}));var allCount,eachCount,maxCount,thisCount,stretch;Array.max=function(array){return Math.max.apply(Math,array);};allCount=new Array();eachCount=$('.tag_count').each(function(){thisCount=$(this).data('count');allCount.push(thisCount);});maxCount=Array.max(allCount);$('.top10_tags li').each(function(){thisCount=parseInt($(this).find('.tag_count').text());stretch=(thisCount/maxCount)*100;$(this).find('.tag_bar').css({'width':stretch+'%'});});}});var ItemView=Spine.View.extend({tagName:"li",className:"list_item pr",template:'{{#message}}<h3 class="h_secondary mbs">{{message}}</h3>{{/message}}'+'<div class="item_img_wrapper grid_1 alpha mrm pr">'+'<div class="img_overflow">'+'<img class="item_img pr" src="{{#image}}{{image}}{{/image}}{{^image}}/media/img/placeholder/default-135.gif{{/image}}" height="135" width="135" alt="{{name}}" {{#style}}style="{{style}}"{{/style}} {{#img_select}}data-img-source="selected"{{/img_select}} />'+'<img src="/media/img/edit-overlay.png" class="edit-overlay"/>'+'</div>'+'</div>'+'{{#state}}'+'<div class="grid_2 item_content_wrapper">'+'<div class="item_content mbs">'+'<h3 class="item_name h_secondary">{{ name }}</h3>'+'{{#description }}'+'{{^mine}}<blockquote cite="{{ slug }}">{{/mine}}<p class="item_desc pr">{{{ description }}}</p>{{^mine}}</blockquote>{{/mine}}'+'{{/description }}'+'</div>'+'{{#link}}'+'<div class="item_meta small_text mbs nowrap">'+'<a rel="nofollow" title="{{ link }}" target="_blank" href="{{ link }}" class="itemlink nowrap">{{ link }}</a>'+'</div>'+'{{/link}}'+'<div class="item_meta small_text nowrap">'+'<p class="att_from">{{#description}}Written {{/description}}{{^description}}Chosen {{/description}} by {{ from }}</p>'+'<a class="fl btn_edit newtop10icon small_text att_link" href="#">{{#mine}}{{#description}}Edit your {{/description}}{{^description}}Add a {{/description}}description{{/mine}}{{^mine}}Share your own opinion{{/mine}}</a>'+'</div>'+'</div>'+'{{/state}}'+'{{^state}}'+'<div class="grid_2 fr">'+'<div class="item_content">'+'<div class=\"item_name_wrap\"><input class="item_name edit" maxlength="101" placeholder="Enter your item title" value="{{name}}" /></div>'+'<textarea class="item_description edit" rows="2" cols="58" placeholder="Enter your item description">{{#description}}{{{description}}}{{/description}}</textarea>'+'</div>'+'<div class="url fl pr {{#link}}has_link{{/link}}">'+'<input class="item_link edit" maxlength="251" placeholder="e.g. http://www.top10.com" value="{{link}}" />'+'{{^link}}'+'<a class="add_link newtop10icon" href="#">Add a web link</a>'+'{{/link}}'+'</div>'+'<a href="#" class="fr btn_pink save_item{{#inactive}} inactive{{/inactive}}" title="{{#pseudo}}Add it{{/pseudo}}{{^pseudo}}Save{{/pseudo}}">{{#pseudo}}Add it{{/pseudo}}{{^pseudo}}Save{{/pseudo}}</a>'+'{{^pseudo}}'+'<a href="#" class="cancel_edit_btn fr" title="Revert">Cancel</a>'+'{{/pseudo}}'+'</div>'+'{{/state}}'+'{{#pseudo}}'+'<span class="number">+</span>'+'{{/pseudo}}'+'{{^pseudo}}'+'<a href="#" class="btn_pink bump_up newtop10icon"></a>'+'<a href="#" class="btn_pink bump_down newtop10icon"></a>'+'<a href="#" class="btn_grey remove_item info_btn" title="Delete item">&times;</a>'+'{{/pseudo}}',events:{"keyup  input, textarea":"change","change input, textarea":"change","blur   input, textarea":"change","blur   .item_name":"suggestImg","click  .bump_up":"bumpUp","click  .bump_down":"bumpDown","click  .remove_item":"delete","click  .edit-overlay":"openImageChooser","click  .add_link":"showLink","click  .btn_edit":"editClick","click .pre_edit .item_img_wrapper":"editClick","click  .cancel_edit_btn":"cancelEditClick","change .item_dd":"change","click .list_item.pre_edit .item_name":"editClick","click .list_item.pre_edit .item_desc":"editClick","click .list_item.pre_edit .itemlink":"editClick"},initialize:function(options){this.state=options.state;_.bindAll(this,"_onChange","_onError","_onDelete");_.bindAll(this,"bumpUp","bumpDown","delete","redraw","openImageChooser","YQLimage","showLink","cancelEditClick","editClick","saveItem","lightUp","removeContrib","saveItemComplete","deleteBtn");this.model.bind("change",this._onChange);this.model.bind("error",this._onError);this.model.parent.items.bind("remove",this._onDelete);this.model.bind("change:description",this.removeContrib);this.model.bind("redraw",this.redraw);this.model.bind("change:saveItem",this.saveItem);this.model.bind("change:saveItemComplete",this.saveItemComplete);if(this.el){this.changeState(this.state);}},_onChange:function(model){if(this.$(".item_name").val()!==model.get("name")){this.$(".item_name").val(model.get("name"));}
if(this.$(".item_description").val()!==model.get("description")){this.$(".item_description").val(model.get("description"));}
if(this.$(".item_link").val()!==model.get("link")){this.$(".item_link").val(model.get("link"));}
if(model.hasChanged("position")){var pos=model.get("position"),prev=model.previous("position"),method=pos>prev?"after":"before",other=$(".main_list .list_item").eq(pos-1);other.removeClass('yellow_light');if($(".main_list .list_item").get(pos-1)!==this.el){if(!$(this.el).is('.item_added')&&model.get('id')!='empty'){if(jQuery.support.opacity){other[method](this.el);var bumped=$(this.el);var moved=$(".main_list .list_item").eq(prev-1);var speed=Math.abs(prev-pos);bumped.clone().appendTo('body').addClass('item_clone speed'+speed).css({'left':moved.offset().left,'top':moved.offset().top}).attr('id','bumped');moved.clone().appendTo('body').addClass('item_clone speed'+speed).css({'left':bumped.offset().left,'top':bumped.offset().top}).attr('id','moved');$('#bumped').addClass('enlarge');$('#moved').addClass('shrink');bumped.css('opacity',0);moved.css('opacity',0);if(jQuery.support.transition){$('#bumped').bind("transitionend webkitTransitionEnd",_.throttle(function(){$('#bumped').addClass('item_move').css('top',bumped.offset().top);$('#bumped').bind("transitionend webkitTransitionEnd",_.throttle(function(){$('#bumped').removeClass('enlarge');bumped.attr('style','');$('#bumped').remove();},100));},100));$('#moved').bind("transitionend webkitTransitionEnd",_.throttle(function(){$('#moved').addClass('item_move').css('top',moved.offset().top);$('#moved').bind("transitionend webkitTransitionEnd",_.throttle(function(){$('#moved').removeClass('shrink');moved.attr('style','');$('#moved').remove();},100));},100));}else{var speed=(speed==10)?1:'0.'+speed;speed=(speed<0.3)?0.3:speed;$('#bumped').addClass('item_move').animate({top:bumped.offset().top},parseFloat(speed*1000),function(){$('#bumped').removeClass('enlarge');bumped.attr('style','');$('#bumped').remove();});$('#moved').addClass('item_move').animate({top:moved.offset().top},parseFloat(speed*1000),function(){$('#moved').removeClass('shrink');moved.attr('style','');$('#moved').remove();});}}else{setTimeout(_.bind(function(){var bumped=$(this.el);var moved=$(".main_list .list_item").eq(prev-1);bumped.append('<div class="ie_fade"></div>');moved.append('<div class="ie_fade"></div>');$('.ie_fade').fadeIn(750,_.bind(function(){other[method](this.el);this.redraw();$('.ie_fade').fadeOut(750,function(){$('.ie_fade').remove();});},this));},this),0);}}else{other[method](this.el);}}}},_onError:function(model,errors,options){$('.saving_overlay').fadeOut('fast',function(){$(this).remove();});_.each(errors,function(error){var el=$('.list_item').eq(model.attributes.position-1);if(error&&error.attribute&&!el.hasClass('pre_edit')){if(errors[0].attribute=='description'){el.find('textarea.item_'+error.attribute).error(error.message);}else{el.find('input.item_'+error.attribute).error(error.message);}}});},_onDelete:function(model){if(model===this.model){this.remove();}},change:function(e){var values={},el=$(e.currentTarget);if($(el).hasClass('item_dd')){this.model.set({'replace':$(el).val()});return;}
if(el.is(".item_name")){values["name"]=this.$('.item_name').val();if(this.model.get("name")!=''){this.$('.save_item').removeClass('inactive');}else{this.$('.save_item').addClass('inactive');}}
if(el.is(".item_description")){values["description"]=this.$('.item_description').val();}
if(el.is(".item_link")){values["link"]=this.$('.item_link').val();}
this.model.set(values);},changeState:function(state){var previousState=this.state;this.state=state;this.autosuggest=null;var data=this.model.toJSON();if(this.model.get("image_state")=='exists'){data.image=imageUrl(this.model.get("image"),this.model.get("image_state"),135);}else{data.style=$(this.el).find('.item_img').attr('style');}
var session=top10.auth.getSession();try{this.my_item=(this.my_item)?this.my_item:(session&&session.uid&&this.model.get('contribution')&&this.model.get('contribution').user.id==session.uid);}catch(e){top10.log(e);}
switch(state){case'edit':if(data.description){data.description=data.description.replace(/\n$/,'&#13;&nbsp;').replace(/\n/g,'&#13;');}
if(data.image){data.img_select=true;}
if(this.oldModel){data.cancel=true;}
if(this.model.get('id')=='empty'||this.model.get('id')=='pseudoItem'){data.pseudo=true;if($('.c_bd').hasClass('editing')||typeof myTop10=='boolean'&&myTop10==true){data.message='Add a new item';}else{data.message='What\'s missing from this Top10?';}}
if(this.my_item!=true){this.model.set({"description":"","link":""});data.description=null;data.link=null;}
if(!this.model.get('name')){data.inactive=true;}
this.preEditHtml=$(this.el).html();var call=$(this.el).addClass('edit').removeClass('pre_edit').html(this.mustache(this.template,data));var finish_edit=_.bind(function(){if(data.pseudo){$(this.el).addClass('item_form');}
$(this.el).find('.item_description').autoGrow();if(data.name){$(this.el).find('.item_description').focus();}
this.redraw(this.model);this.autosuggest=new AutoSuggestView({el:this.$(".item_name").closest(".item_name_wrap"),type:"item",callback:_.bind(function(d){var img=$(this.el).find('.item_img');this.model.set({"name":d.text});if(img.attr('data-img-source')!='selected'){var thisEl=this;img.attr({'data-img-source':'suggest','src':imageUrl(d.image_uri,d.image_state,135),'data-img-name':escape(d.text.toLowerCase())}).removeAttr('style').hide().delay(450).fadeIn(function(){thisEl.model.set({image:d.image_uri,image_size:d.image_size,image_x:d.image_x,image_y:d.image_y,image_state:'exists'});var pos=thisEl.model.get('position');var ts=Math.round(new Date().getTime());$('.minilist li').eq(pos-1).attr('id','ml-'+ts);thisEl.miniList(ts,$('.item_img').eq(pos-1));});}},this),keyup:_.bind(function(e,query){if(query==''){this.$('.save_item').addClass('inactive');}else{this.$('.save_item').removeClass('inactive');}},this)});},this);call;_.delay(finish_edit,100);break;case'pre_edit':data.state=true;if(data.description){data.description=data.description.replace(/\n$/,'<br/>&nbsp;').replace(/\n/g,'<br/>');}
if(this.model.get("contribution")){var name=this.model.get("contribution").user.first_name+' '+this.model.get("contribution").user.last_name;var name=(name.length>16)?name.substring(0,16)+'&hellip;':name;var session=top10.auth.getSession();if(session&&session.uid&&this.model.get('contribution').user.id==session.uid){var name='you';data.mine=true;}
data.from=name;}
if(this.my_item===true||typeof this.model.get('contribution')=='undefined'){data.from='you';data.mine=true;this.my_item=true;}
if(this.model.get('id')=='empty'||this.model.get('id')=='pseudoItem'){data.pseudo=true;}
var call=$(this.el).removeClass('edit').addClass('pre_edit').html(this.mustache(this.template,data));var finish_pre=_.bind(function(){this.redraw(this.model);},this);call;_.delay(finish_pre,100);$(this.el).removeClass('item_form').removeClass('social_open').removeAttr('style');break;}
this.deleteBtn();this.$('.item_desc').expander();return;},cancelEditClick:function(e){var current_pos=this.model.get('position');if(this.oldModel&&this.oldModel.attributes){this.oldModel.set({'position':current_pos});this.model.set(this.oldModel.attributes);this.changeState('pre_edit');}else{this.changeState('edit');}
e.preventDefault();},editClick:function(e){this.oldModel=this.model.clone();this.changeState('edit');e.preventDefault();},"delete":function(e){e.preventDefault();if($(e.currentTarget).hasClass('inactive')){return;}
$(this.el).removeItemModal('Remove this item?',null,null,_.bind(function(removed){m=this;if(removed){$(this.el).animate({opacity:0},200,function(){$(this).css('min-height','0').slideUp(function(){m.model.parent.items.remove(m.model);m.deleteBtn();});});}},this));},bumpUp:function(e){e.preventDefault();if($(e.currentTarget).hasClass('inactive')){return;}
this.model.set({position:this.model.get("position")-1});},bumpDown:function(e){e.preventDefault();if($(e.currentTarget).hasClass('inactive')){return;}
this.model.set({position:this.model.get("position")+1});},redraw:function(model){$('.bump_up').removeClass("inactive");$('.bump_down').removeClass("inactive");$('.main_list .bump_up:first').addClass("inactive");$('.main_list .bump_down:last').addClass("inactive");},openImageChooser:function(e){if(typeof this.model.get('name')=='undefined'||this.model.get('name')==''){this.$('.item_name').error('<strong>Enter an item title</strong>Before selecting an image',1).shakeAnimate();return;}
setTimeout(_.bind(function(){var ImageChooser=new ImageChooserView({model:this.model,element:this.el});},this),100);if(e){e.preventDefault();}},suggestImg:function(e){var pos=this.model.get('position')-1;var img=$('.item_img').eq(pos);var thisEl=this;var ts=Math.round(new Date().getTime());$('.minilist li').eq(pos).attr('id','ml-'+ts);setTimeout(function(){var val=this.$('input.item_name').val().toLowerCase();if(val){if($(img).data('img-source')=='selected'){return false;}
if(!$(img).data('img-source')&&$(img).data('img-name')==escape(val)){return false;}
if($(img).data('img-source')=='suggest'&&$(img).data('img-name')==escape(val)){return false;}
$(img).attr('src','/media/img/placeholder/blank.gif').addClass('loadingYQLplaceholder');thisEl.YQLimage(e);}else{var ts=Math.round(new Date().getTime());$('.minilist li').eq(pos).attr('id','ml-'+ts);img.attr('src','/media/img/placeholder/default-135.gif').removeAttr('style').removeAttr('data-img-name').removeAttr('data-img-source');setTimeout(function(){thisEl.miniList(ts,img,'suggest');},750);}},200);},YQLimage:function(e,o,data,total){var pos=this.model.get('position')-1;var img=$('.list_item').eq(pos).find('.item_img');var val=$('.list_item').eq(pos).find('input.item_name').val().toLowerCase();var thisEl=this;var total;if($(img).attr('data-img-source')=='selected'){return false}
if($(img).attr('data-img-source')=='suggest'&&$(img).attr('data-img-name')==escape(val)){return false}
var ts=Math.round(new Date().getTime());$('.minilist li').eq(pos).attr('id','ml-'+ts);if(val!=''){$(img).attr('src','/media/img/placeholder/blank.gif').addClass('loadingYQLplaceholder').removeAttr('data-img-source').removeAttr('data-img-source');}
var o=(!o)?0:o;if(!data){var YQLurl='http://ajax.googleapis.com/ajax/services/search/images?v=1.0&q='+escape(val)+'%20&imgsz=medium|large&rsz=8&key=ABQIAAAARd3sD4pHCOcHbD0YzHplNhRaAoKtOd5PotSNQONqRUYWOJ34aBTY0JIksYe2RN0dqv82AAvOtC_egQ'
$.ajax({url:YQLurl,cache:true,dataType:'jsonp',jsonp:'callback',jsonpCallback:'as_cbfunc',success:function(data){if(data.responseData.results.length==0){img.attr('src','/media/img/placeholder/default-135.gif').removeAttr('style');setTimeout(function(){thisEl.miniList(ts,img,'suggest');},750);return false;}else{total=data.responseData.results.length;data=data.responseData.results;loadImg(o,data,total);}}});function as_cbfunc(data){}}else{loadImg(o,data,total)}
function loadImg(o,data,total){var dataResult=data[o];objImage=new Image();objImage.onerror=function(){o++;if(o<=15){if(o<total){thisEl.YQLimage(e,o,data,total);}else{img.attr('src','/media/img/placeholder/default-135.gif').removeAttr('style');setTimeout(function(){thisEl.miniList(ts,img,'suggest');},750);}}else{img.attr('src','/media/img/placeholder/default-135.gif').removeAttr('style');setTimeout(function(){thisEl.miniList(ts,img,'suggest');},750);}
return false;}
objImage.onload=function(){if(dataResult.height!=objImage.height||dataResult.width!=objImage.width){o++;thisEl.YQLimage(e,o,data,total);return false;}
if(parseInt(dataResult.height)>parseInt(dataResult.width)){var widththumb=135;var heightthumb=Math.round(dataResult.height*(135/dataResult.width));var marginLeft=0;var marginTop=(heightthumb-135)/2;var realSize=parseInt(dataResult.width);var realX=0;var realY=(dataResult.height-dataResult.width)/2;}else{var widththumb=Math.round(dataResult.width*(135/dataResult.height));var heightthumb=135;var marginLeft=(widththumb-135)/2;var marginTop=0;var realSize=parseInt(dataResult.height);var realX=(dataResult.width-dataResult.height)/2;var realY=0;}
if($(img).attr('data-img-source')=='selected'){return false;}
if(!$(img).attr('data-img-source')&&$(img).attr('data-img-name')==escape(val)){return false;}
if($(img).attr('data-img-source')=='suggest'&&$(img).attr('data-img-name')==escape(val)){return false;}
$(img).attr('src',dataResult.unescapedUrl).css({width:widththumb+'px',height:heightthumb+'px',marginLeft:'-'+marginLeft+'px',marginTop:'-'+marginTop+'px'}).hide().fadeIn(400).removeClass('loadingYQLplaceholder').attr('data-img-name',escape(val));thisEl.model.set({image:dataResult.unescapedUrl,image_size:realSize,image_x:realX,image_y:realY});thisEl.model.set({'img_publish':true});thisEl.miniList(ts,img);}
objImage.src=dataResult.unescapedUrl;}},miniList:function(pos,img,i,model){var m=(this.model)?this.model:model;if(document.createElement('canvas').getContext){var thisEl=this;if(img.attr('src')&&img.attr('src').search(/(http|https):\/\//i)!=-1){var ts=Math.round(new Date().getTime());$('#ml-'+pos).find('canvas').remove().end().prepend('<canvas id="mini-canvas-'+ts+'" class="mini_canvas absolute avatar" width="30" height="30"></canvas>').find('img').remove();}else{$('#ml-'+pos).find('canvas').remove().end().find('img').remove().end().prepend('<img width="30" height="30" src="/media/img/placeholder/blank.gif" class="absolute avatar">');}
if(!document.getElementById('mini-canvas-'+ts)){return;}
var ctx=document.getElementById('mini-canvas-'+ts).getContext('2d');if(i=='replace'||i=='suggest'){ctx.drawImage(img[0],0,0,135,135,0,0,30,30);return;}
try{ctx.drawImage(img[0],m.get('image_x'),m.get('image_y'),m.get('image_size'),m.get('image_size'),0,0,30,30);}catch(err){if(!i){var i=0}
i=i+1;if(i<=5){setTimeout(function(){thisEl.miniList(pos,img,i,m)},1000);}}}else{$('#ml-'+pos).find('img').attr('src',$(img[0]).attr('src'));}},showLink:function(e){$(e.currentTarget).remove();this.$('.item_link').show().focus();e.preventDefault();},saveItem:function(e){if(!this.model.get('name')){this.$('.item_name').error('Please enter an item title');return;}
$(this.el).append('<div class="item_modal_overlay saving_overlay" style="left: 0px; right: 0px; "><span>Saving&hellip;</span></div>');this.my_item=true;},saveItemComplete:function(model,item){var thisEl=this;if(this.model.get('id')=='empty'){this.model.unset('id');this.model.id=null;}
if(model.name!=item.name){this.model.set({'name':item.name});}
this.changeState('pre_edit');},removeContrib:function(e){this.model.set({contribution:null});},deleteBtn:function(m){var m=(m)?m:this.model;var ids=m.parent.items.pluck('id');var idx=jQuery.inArray('empty',ids);if(idx!=-1){ids.splice(idx,1);}
if(ids.length<=1){$('.list_item:first .remove_item').addClass('hidden');setTimeout(function(){$('.minilist li:first .remove_item').addClass('hidden');},1000);}else{$('.list_item .remove_item').removeClass('hidden');$('.minilist .remove_item').removeClass('hidden');}
return ids.length;}});var ProfileView=Spine.View.extend({el:$('.bodywrap'),no_bio:'<p class="h_quarternary">Boring! You have no bio. <span class="edit-details" id="edit-bio">Add one now</span></p>',bio_view:'<p class="h_quarternary">{{bio}} <span class="edit-details" id="edit-bio">Edit</span></p>',profile_edit:'<form class="clear_l mbs mtm" action="#" id="edit-bio-form" onsubmit="return false">'+'<fieldset>'+'<label for="edit_first_name">First name</label>'+'<input class="titlefont fl" id="edit_first_name" name="edit_first_name" type="text" placeholder="First name" value="{{first_name}}" />'+'<label for="edit_last_name">Last name</label>'+'<input class="titlefont fr" id="edit_last_name" name="edit_last_name" type="text" placeholder="Last name" value="{{last_name}}" />'+'</fieldset>'+'<fieldset>'+'<label for="edit_bio">Bio</label>'+'<textarea id="edit_bio" maxlength="140" name="edit_bio" placeholder="You don&#8217;t have a public profile yet">{{bio}}</textarea>'+'</fieldset>'+'<fieldset class="edit_submit">'+'<p class="more_settings t_secondary fl"><a href="/settings">More settings&hellip;</a></p>'+'<p class="edit-details t_secondary mrm" id="edit_revert">Cancel</p>'+'<button class="omega btn btn_white btn_mwide btn_save" id="edit_profile_save"><span class="newtop10icon">Save</span></button>'+'</fieldset>'+'</form>',events:{'click .delete_top10':'deleteContribution','click #edit-bio':'editProfile','click #edit_revert':'revertEdit','click #edit_profile_save':'saveProfile'},initialize:function(){_.bindAll(this,"render","signOut","deleteContribution","editProfile","revertEdit","saveProfile","makeLinks","removeTop10s");top10.events.connect('auth:signin',_.bind(function(session){this.removeTop10s();},this));this.removeTop10s();if(user_data){this.incrementViewCount("user",user_data);}},editProfile:_.throttle(function(e){if($('#edit-bio-form').length==0){var session=top10.auth.getSession();if(!session){new LoginView.prompt({action:'Edit Profile',title:'Sign in to edit your profile',success:_.bind(function(){_.defer(_.bind(function(){this.follow(e);},this));},this)});return;}
User.getInfo(session.uid,{error:_.bind(function(model){throw new Exception('Unable to get info for user: '+session.uid);},this),success:_.bind(function(model){$('h1.h_primary').hide();var user_bio=$('div.user_bio');user_bio.hide();user_bio.after(this.mustache(this.profile_edit,{'first_name':model.attributes.first_name,'last_name':model.attributes.last_name,'username':model.attributes.username,'bio':model.attributes.bio}));},this)});}},1000),revertEdit:function(e){$('#edit-bio-form').remove();$('h1.h_primary, div.user_bio').show();e.preventDefault();},saveProfile:function(e){var session=top10.auth.getSession();if(!session){new LoginView.prompt({action:'Save Profile',title:'Sign in to save your profile',success:_.bind(function(){_.defer(_.bind(function(){this.follow(e);},this));},this)});return;}
$(".error_message").remove();var firstName=$("#edit_first_name").val();var lastName=$("#edit_last_name").val();var error=false;var noFirstName=!firstName||firstName.length===0;var noLastName=!lastName||lastName.length===0;if(noFirstName||noLastName){var noName;if(noFirstName){noName='first';}
if(noLastName){noName='last';}
$('#edit_'+noName+'_name').addClass('val_error').error('You must supply a '+noName+' name');error=true;}
if(error){e.preventDefault();return false;}
var bio=$('#edit_bio').val();top10.api.call("user.edit",{user_id:session.uid,'first_name':firstName,'last_name':lastName,bio:bio},_.bind(function(result){if(result&&1===result.ok){$('span.first_name').html(firstName);$('span.last_name').html(lastName);var user_bio=(!bio||0===bio.length)?this.mustache(this.no_bio,{first_name:firstName}):this.mustache(this.bio_view,{bio:bio});$('div.user_bio').html(user_bio);this.makeLinks();this.revertEdit(e);}},this));e.preventDefault();return false;},makeLinks:function(){var exp,userBio,bioText;exp=/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;userBio=$('div.user_bio');bioText=$(userBio).html();bioText=bioText.replace(exp,'<a href="$1">$1</a>');var bioURL=$(bioText).find('a').text();bioURL=bioURL.replace('http://','');$(userBio).html(bioText).find('a').text(bioURL);},removeTop10s:function(){var session=top10.auth.getSession();if(session&&session.uid&&$('.bd').hasClass('top10s')){if(user_data==session.uid){$('.result .datetime').wrap('<div class="delete_top10_wrap">');$('.result .datetime').parent().append('<a href="#" class="delete_top10 t_small">Delete this Top10</a>');}}},deleteContribution:function(e){var thisEl=this;$(e.currentTarget).parents('.result').removeItemModal('Delete this Top10?',null,null,_.bind(function(removed){if(removed){$('.c_primary').addClass('pr').append('<div class="item_modal_overlay modal_loading" style="display:block"></div>');var id=$(e.currentTarget.offsetParent).parent().attr('data-id');if(id!==undefined){top10.api.call("contribution.delete",{"contribution_id":id},function(result){if(1==result.ok){location.reload(true);}});}}else{}}),this);e.preventDefault();}});if($('.bd').hasClass('theuser')){views.Profile=new ProfileView;}
var HomeView=Spine.View.extend({el:$('.create_btn_wrap'),events:{'click .create_btn':'startModal'},initialize:function(options){_.bindAll(this,"startModal");},startModal:function(e){if(e){e.preventDefault();}
StartView.prompt();}});if($('.create_btn').length){views.Home=new HomeView();if(location.hash.indexOf('start')!=-1){views.Home.startModal();}}
var FriendsView=ProfileView.extend({el:$('.bd'),template_pagination:'<p class="fl">Page</p>'+'<ul class="fl clearfix pr">'+'{{#prev_hellip}}'+'<li><a href="{{prev_hellip}}" rel="nofollow"><span>&hellip;</span></a></li>'+'{{/prev_hellip}}'+'{{#pages}}'+'<li{{#this_page}} class="current"{{/this_page}}><a href="{{url}}"><span>{{ num }}</span></a></li>'+'{{/pages}}'+'{{#next_hellip}}'+'<li><a href="{{next_hellip}}" rel="nofollow"><span>&hellip;</span></a></li>'+'{{/next_hellip}}'+'{{#total}}'+'<li><a href="{{last}}" rel="nofollow"><span>{{total}}</span></a></li>'+'{{/total}}'+'</ul>'+'<p class="pag_nav fr">'+'{{#prev}}'+'&laquo; <a href="{{prev}}" rel="nofollow" class="prev">Prev</a>'+'{{/prev}}'+'{{#pipe}}'+'|'+'{{/pipe}}'+'{{#next}}'+'<a href="{{next}}" rel="nofollow" class="next">Next</a> &raquo;'+'{{/next}}'+'</p>',template_friend:'{{#user}}<li class="clearfix list_item pr" id="user_{{id}}">'+'<a href="{{link}}" data-id="{{id}}" title="{{username}}" class="friend_details fl">'+'<img class="fl avatar mr_15" src="{{image_link}}" width="28" height="28" alt="{{username}}" title="{{username}}" />'+'<h3 class="sec_title mbn">{{first_name}} {{last_name}}</h3>'+'<p class="tiny_text">XX Top10s</p>'+'</a>'+'<div>'+'<p class="friend_bio fl">{{ bio }}</p>'+'</div>'+'<div class="user_{{id}}_btn user_follow">'+'<p class="you_follow">That\'s you!</p>'+'</div>'+'</li>{{/user}}',template_unfollow:'<p class="following newtop10icon strong"><span>Following</span> '+'<a class="unfollow t_small" data-id="{{user_id}}">Stop Following</a></p>',template_follow_button:'<a class="btn btn_pink follow_btn follow_link nowrap" data-id="{{ user_id }}">Follow {{ username }}</a>',template_following_button:'<a class="btn btn_following nowrap" data-id="{{ user_id }}">Following</a>',template_unfollow_button:'<a class="btn btn_brown btn_unfollow nowrap" data-id="{{ user_id }}">Stop Following</a>',template_follow:'<a class="btn follow_btn follow_link nowrap" data-id="{{user_id}}">Follow</a>',template_this_is_you:'<p class="you_follow t_secondary" data-id="{{user_id}}">That&#8217;s you!</p>',template_user_tab:'{{first_name}}&#8217;s Friends',template_top10er:'{{first_name}}&#8217;s been',template_sb_friends:'<h6 class="sb_header sb_inactive" id="sb_friends_hd">Friends</h6>'+'<div class="sb_wrapper">'+'<div class="sb_content" id="sb_friends">'+'<div id="follow_status" class="user_follow user_1905_btn">'+'<a data-id="1905" class="btn btn_blue follow_btn btn_wide follow_link">Follow</a>'+'</div>'+'</div>'+'</div>',events:{'click .follow_btn':'follow','click .unfollow':'unfollow','click .btn_unfollow':'unfollow','mouseenter #follow_status .btn_following':'follow_toggle','mouseleave #follow_status .btn_unfollow':'follow_toggle','click #edit-bio':'editProfile','click #edit_revert':'revertEdit','click #edit_profile_save':'saveProfile'},state:'followers',totalFollowers:0,totalFollows:0,currentUserId:null,initialize:function(options){options=options||{};if(options.state){this.state=options.state;}
var path=window.location.pathname;var username=path.substring(path.indexOf('/')+1,path.lastIndexOf('/f'));var page=getParameterByName('page');page=(page)?parseFloat(page):1;var offset=null;if(page&&page!=1){offset=(page-1)*10;offset=(offset==0)?10:offset;}
_.bindAll(this,"render","follow","unfollow","editProfile","revertEdit","saveProfile");if($('.total_followers')[0]){var num=parseInt($('.total_followers').first().text());num=(isNaN(num))?0:num;this.totalFollowers=num;}
if($('.total_follows')[0]){var num=parseInt($('.total_followers').first().text());num=(isNaN(num))?0:num;this.totalFollows=parseInt($('.total_follows').first().text());}
if($('#user_friends')[0]){this.currentUserId=$('#user_friends').first().attr('data-id');}
this.pageUserId=$('body').data('id');top10.events.connect('auth:signin',_.bind(function(session){if(session&&session.uid){var url=this.state=='followers'?'user.getFollowers':'user.getFollows';var key=this.state=='followers'?'followers':'follows';top10.api.call(url,{'username':username,'offset':offset},_.bind(function(result){if(result&&1===result.ok){_.each(result[key].users,function(user){var template=this.template_follow;if(user.is_current_user){template=this.template_this_is_you;}else if(user.current_user_follows){template=this.template_unfollow;}
$(".result > .user_"+user.id+"_btn").html(this.mustache(template,{user_id:user.id}));},this);}},this));top10.api.call('user.getInfo',{'username':username},_.bind(function(result){if(result&&1===result.ok){var user=result.user;if(user.current_user_follows){$(".user_"+user.id+"_btn").html(this.mustache(this.template_unfollow,{user_id:user.id}));}else if(user.is_current_user){$('.list_header > .user_'+user.id+'_btn > .follow_btn').remove();$('#sb_friends_hd, #sb_friends_hd + .sb_wrapper').remove();$('#sb_stats .sb_top10er').html('You&#8217;ve been');$('.user_friends_tab .sec_title').text('Your friends');}}},this));}},this));top10.events.connect('auth:signout',_.bind(function(session){if(session==null){_.each($('.you_follow, .unfollow'),function(element){var userId=$(element).data('id');if(userId){$('.user_'+userId+'_btn').html(this.mustache(this.template_follow,{user_id:userId}));}},this);var thisUserBtn=$('.user_follow .btn');var thisUserId=$(thisUserBtn).data('id');$(thisUserBtn).parent().html(this.mustache(this.template_follow_button,{user_id:thisUserId}));var firstName=$('.page_title .first_name').text();$('.user_friends_tab .sec_title').html(this.mustache(this.template_user_tab,{first_name:firstName}));if($('#sb_friends_hd').length===0){$('#sidebar').prepend(this.mustache(this.template_sb_friends));}
$('.sb_stats .sb_top10er').html(this.mustache(this.template_top10er,{first_name:firstName}));}},this));},follow_toggle:function(e){var button=$(e.currentTarget);var userId=button.data('id');if(button.hasClass('btn_following')){button.replaceWith(this.mustache(this.template_unfollow_button,{user_id:userId}));}else{button.replaceWith(this.mustache(this.template_following_button,{user_id:userId}));}},follow:function(e){var session=top10.auth.getSession();if(!session){new LoginView.prompt({action:'Follow',title:'Sign in to follow this person',success:_.bind(function(){_.defer(_.bind(function(){this.follow(e);},this));},this)});return;}
var button=$(e.currentTarget);var userId=button.data('id');if(!userId){throw"Unable to find userId to follow";}
top10.api.call('user.follow',{followed_user_id:userId},_.bind(function(result){if(result&&1===result.ok){var isSidebar=button.parents('#follow_status').length>0;if(isSidebar){var template=this.mustache(this.template_following_button,{user_id:userId});}else{var template=this.mustache(this.template_unfollow,{user_id:userId});}
$('.user_'+userId+'_btn').html(template);if(userId==this.pageUserId){this.totalFollowers++;$('.total_followers').html(this.totalFollowers);}else if(session.uid==this.pageUserId){this.totalFollows++;$('.total_follows').html(this.totalFollows);}
if(this.state=='followers'&&!$('.user_'+session.uid)[0]&&isSidebar){User.getCurrent({success:_.bind(function(data){var user=data.toJSON();user.link='/'+user.username;user.image_link=user.image?imageUrl(user.image,user.image_state,30,'blank'):'/media/img/placeholder/user-30.gif';var item_header=$('#user_friends').children('.list_header');if(item_header[0]){$('.profile_no_results').remove();item_header.first().after(this.mustache(this.template_friend,{user:user}));}},this)});}}},this));},unfollow:function(e){var session=top10.auth.getSession();if(!session){throw"Unlogged in users shouldn't be given the option to unfollow anyone";}
var button=$(e.currentTarget);var userId=button.data('id');if(!userId){throw"Unable to find userId";}
top10.api.call('user.unfollow',{followed_user_id:userId},_.bind(function(result){if(result&&1===result.ok){if(button.parent('#follow_status')){$('.user_'+userId+'_btn').html(this.mustache(this.template_follow_button,{user_id:userId}));}else{$('.user_'+userId+'_btn').html(this.mustache(this.template_follow,{user_id:userId}));}
var totalRelations=this.totalFollowers+this.totalFollows;totalRelations=totalRelations>0?totalRelations-1:0;if(totalRelations===0){$('.user_friends_tab .tiny_text').html('No relationships yet');}else{$('.total_relations').text(totalRelations);}
if(userId==this.pageUserId){this.totalFollowers=this.totalFollowers>0?this.totalFollowers-1:0;var num=(this.totalFollowers==0)?'-':this.totalFollowers;$('.total_followers').html(num);$('span.total_followers').html(this.totalFollowers);}else if(session.uid==this.pageUserId){this.totalFollows=this.totalFollows>0?this.totalFollows-1:0;var num=(this.totalFollows==0)?'-':this.totalFollows;$('.total_follows').html(num);}
if(this.state=='followers'){var list_item=$("#user_"+session.uid);if(list_item[0]){list_item.remove();}}}},this));}});var profileEl=$('.bd');if($(profileEl).hasClass('following')){views.friends=new FriendsView({state:'following'});}else if($(profileEl).hasClass('followers')){views.friends=new FriendsView({state:'followers'});}else if($(profileEl).hasClass('top10s')||$(profileEl).hasClass('activity')){views.friends=new FriendsView();}
var HomepageView=Spine.View.extend({el:$('.homepage'),startAuthedTemplate:'',startAuthedTemplate:'',fruitMachineTemplate:'<ul class="how_list">'+'<li class="how1">'+'<h3 class="h_secondary">Pick a topic and add<br /> the stuff you love</h3>'+'<h4 class="transition">{{title}}</h4>'+'<ol>{{#possibles}}<li{{#isIncomplete}} class="incomplete"{{/isIncomplete}}><span>{{title}}{{#isIncomplete}}<em>&nbsp;</em>{{/isIncomplete}}</span></li>{{/possibles}}</ol>'+'</li>'+'<li class="how2">'+'<h3 class="h_secondary">Invite friends to make their version</h3>'+'<ol>{{#remix}}<li{{#isRemix}} class="remixing" data-newitem="{{update}}"{{/isRemix}}><span>{{title}}</span></li>{{/remix}}</ol>'+'</li>'+'<li class="how3">'+'<h3 class="h_secondary">Everyone&#8217;s contribution builds The Top10</h3>'+'<img alt="{{title}}" class="transition" height="186" src="/media/{{image}}" width="196">'+'</li>'+'</ul>'+'<div class="how_selected">'+'<h3 class="h_primary">Get started with:</h3><a href="{{link}}" class="btn btn_pink btn_large"><span>{{title}}</span></a>'+'</div>',fruitMachine:[{"title":"Top 10 Pixar Movies","possibles":[{"title":"Toy Story 3"},{"title":"Cars"},{"title":"Finding N","isIncomplete":true}],"remix":[{"title":"Toy Story 2","update":"Finding Nemo","isRemix":true},{"title":"Cars"},{"title":"WALL-E"}],"image":"img/how/nemo.png","link":"/top-10-pixar-movies"},{"title":"Top 10 Albums of All Time","possibles":[{"title":"Sticky Fingers"},{"title":"Blonde on Blonde"},{"title":"Pet Soun","isIncomplete":true}],"remix":[{"title":"Sticky Fingers","update":"Blonde on Blonde","isRemix":true},{"title":"Pet Sounds"},{"title":"Remain In Light"}],"image":"img/how/dylan.png","link":"/top-10-albums-of-all-time"},{"title":"Top 10 Gadgets","possibles":[{"title":"Amazon Kindle"},{"title":"iPad"},{"title":"iPhon","isIncomplete":true}],"remix":[{"title":"Amazon Kindle","update":"iPad","isRemix":true},{"title":"iPhone 4"},{"title":"Nintendo 3DS"}],"image":"img/how/ipad.png","link":"/top-10-gadgets"},{"title":"Top 10 Sports Heroes","possibles":[{"title":"David Beckham"},{"title":"Michael Jordan"},{"title":"Derek Je","isIncomplete":true}],"remix":[{"title":"David Beckham","update":"Michael Jordan","isRemix":true},{"title":"Derek Jeter"},{"title":"Tiger Woods"}],"image":"img/how/jordan.png","link":"/top-10-sports-heroes"},{"title":"Top 10 iPhone Games","possibles":[{"title":"Cut the Rope"},{"title":"Angry Birds"},{"title":"MGS Tou","isIncomplete":true}],"remix":[{"title":"Cut the Rope","update":"Angry Birds","isRemix":true},{"title":"MGS Touch"},{"title":"FlickKick Football"}],"image":"img/how/angrybird.png","link":"/top-10-iphone-games"},{"title":"Top 10 Romantic Cities","possibles":[{"title":"Dubrovnik"},{"title":"Rome"},{"title":"New Orle","isIncomplete":true}],"remix":[{"title":"Dubrovnik","update":"Rome","isRemix":true},{"title":"New Orleans"},{"title":"Venice"}],"image":"img/how/rome.png","link":"/top-10-romantic-cities"},{"title":"Top 10 Drama Shows","possibles":[{"title":"Twin Peaks"},{"title":"The Wire"},{"title":"Mad Me","isIncomplete":true}],"remix":[{"title":"Twin Peaks","update":"The Wire","isRemix":true},{"title":"The Sopranos"},{"title":"Mad Men"}],"image":"img/how/wire.png","link":"/top-10-drama-shows"},{"title":"Top 10 Designer Brands","possibles":[{"title":"Chanel"},{"title":"Prada"},{"title":"Calvin Kl","isIncomplete":true}],"remix":[{"title":"Chanel","update":"Prada","isRemix":true},{"title":"Calvin Klein"},{"title":"Dior"}],"image":"img/how/prada.png","link":"/top-10-designer-brands"},{"title":"Top 10 Video Games","possibles":[{"title":"Half Life"},{"title":"Mario Kart"},{"title":"Tetr","isIncomplete":true}],"remix":[{"title":"Half Life","update":"Mario Kart","isRemix":true},{"title":"Tetris"},{"title":"Halo"}],"image":"img/how/mario.png","link":"/top-10-video-games"},{"title":"Top 10 Poets","possibles":[{"title":"T.S. Eliot"},{"title":"William Shakespeare"},{"title":"Sylvia Pla","isIncomplete":true}],"remix":[{"title":"T.S. Eliot","update":"William Shakespeare","isRemix":true},{"title":"Sylvia Plath"},{"title":"Allen Ginsberg"}],"image":"img/how/shakespeare.png","link":"/top-10-poets"}],toggleButtonTemplate:'<div class="home_overlay"><a href="" class="btn btn_home_toggle">{{ btnText }}</a></div>',events:{'click .home_overlay .btn':'openPanel'},initialize:function(options){_.bindAll(this,'openPanel');top10.events.connect('auth:signin',_.bind(function(session){if(session&&session.uid){this.updateStartButton(true);}else{this.updateStartButton(false);}},this));this.render();},render:function(){$('.home_how .home_overlay').hide();$('.home_explore').addClass('home_closed');function sortmyway(data_A,data_B){return 0.5-Math.random();}
var tmpArray=this.fruitMachine;tmpArray=tmpArray.sort(sortmyway);var noArrayItems=this.fruitMachine.length;var template=this.mustache(this.fruitMachineTemplate,this.fruitMachine[0]);var htmlTarget=$('#how_items');$(htmlTarget).html(template).after('<ul id="item_controls" />');var itemControls=$('#item_controls');for(i=0;i<noArrayItems;i++){var isOmega=(i==(noArrayItems-1))?' class="omega"':'';$(itemControls).append('<li data-itemcount="'+i+'"'+isOmega+' title="'+this.fruitMachine[i].title+'">'+i+'</li>');}
$(itemControls).find('li').first().addClass('selected');$(itemControls).find('li').bind('click',_.bind(function(e){if(!$(e.currentTarget).hasClass('selected')){$(e.currentTarget).addClass('selected').siblings('.selected').removeClass('selected');var itemNo=$(e.currentTarget).data('itemcount');var newTemplate=this.mustache(this.fruitMachineTemplate,this.fruitMachine[itemNo]);if(jQuery.support.transition){$(htmlTarget).addClass('fadeout');$(htmlTarget).find('.btn span').bind('transitionend webkitTransitionEnd',function(){$(htmlTarget).html(newTemplate);setTimeout(function(){$('#how_items').removeClass('fadeout').find('.btn span').unbind('transitionend webkitTransitionEnd');},0);});}else{$(htmlTarget).fadeOut(250,function(){$(htmlTarget).html(newTemplate).fadeIn(250);});}
var itemTitle=$(e.currentTarget).attr('title');_gaq.push(['_trackEvent', 'home change item',itemTitle]);}},this));},updateStartButton:function(signedIn){if(signedIn){$('#home_start_button').text('Start a Top10');}else{$('#home_start_button').text('Sign in and get started');}},openPanel:function(e){e.preventDefault();var other=$('.home_panel').not('.home_closed');var thisPanel=$(e.currentTarget).parents('.home_closed');$('.home_overlay').show();if(jQuery.support.transition){$(thisPanel).removeClass('home_closed');other.addClass('home_closed');$(e.currentTarget).parents('.home_panel').bind('transitionend webkitTransitionEnd',_.debounce(function(){$('.home_panel').not('.home_closed').find('.home_overlay').hide();$('.home_panel').unbind('transitionend webkitTransitionEnd');},500));}else{$(e.currentTarget).parents('.home_panel').animate({height:558},500,function(){$(this).removeClass('home_closed');});$(e.currentTarget).parent().fadeOut(500);other.animate({height:295},500,function(){$(this).addClass('home_closed');});other.find('.home_overlay').fadeIn(500);}
thisPanel=$(thisPanel).attr('class');thisPanel=thisPanel.replace('home_panel','').replace('home_closed','').replace(/ /g,'');_gaq.push(['_trackEvent', 'toggle_home',thisPanel]);return;}});if($('body').is('#home')){views.Homepage=new HomepageView;}
var ImpersonateView=Spine.View.extend({el:$("#impersonate"),initialize:function(options){var session=top10.auth.getSession();if(!session||!session.uid){top10.auth._updateStatus(function(session){if(session&&session.uid){top10.api.call("user.getInfo",{user_id:session.uid},function(data){$('div#impersonate').append("<a href='../../"+data.user.username+"'><img src='"+data.user.image+"'></a>");$('div#impersonate').append("<p>You sneaky devil!  You are now impersonating <a class='h_tertiary strong' href='/"+data.user.username+"'>"+data.user.first_name+" "+data.user.last_name+" ("+data.user.username+")</a>.  "+""+"You'll be viewing Top10 as if you were that user until you log out or your credentials expire.  Please be careful!</p><p><a class='h_tertiary strong' href='/"+data.user.username+"'>"+data.user.first_name+"'s Top10s</a></p>");});}});}}});if($('#impersonate').length>0){views.impersonate=new ImpersonateView();}
var LandingView=Spine.View.extend({el:$("#landing_page"),initialize:function(options){options=options||{};var redirectUri=this.getParam('r','/settings');var session=top10.auth.getSession();if(!session||!session.uid){top10.auth._updateStatus(function(session){if(!session||!session.uid){new LoginView.prompt({action:'Settings',title:'Sign in to view and edit your settings',success:_.bind(function(){_.defer(_.bind(function(){window.location=redirectUri;},this));},this)});}else{window.location=redirectUri;}});}else{window.location=redirectUri;}},getParam:function(name,defaultVal){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);if(results==null){return defaultVal;}else{return decodeURIComponent(results[1].replace(/\+/g," "));}}});if($('#landing_page').length>0){views.landing=new LandingView();}
var Top10View=RemixView.extend({initialItemState:'contribution',prepareModel:function(){this.model.set({'is_remix':true});this.model.set({"id":null});},remixClick:function(e){RemixView.prototype.remixClick.call(this,e);}});if($('.bd').is('.master')){top10_data.top10_id=top10_data.id;delete top10_data.id;views.top10=new Top10View();}
var SharingView=Spine.View.extend({el:$("#sharing"),template:'<div class="list_action invite_header">'+'<h2>Need help? <u>Invite friends</u> to add to the Top10</h2>'+'</div>'+'<div class="tab-holder">'+'<div class="tab-panel" id="invite_fb">'+'<div id="jfmfs-panel"></div>'+'</div>'+'<div class="tab-panel" id="invite_top10">'+'<div id="t10fs-panel">'+'<div id="t10fs-friend-selector">'+'<div id="t10fs-inner-header">'+'<span><input placeholder="Start typing a name" type="text" id="t10fs-friend-filter-text"></span>'+'</div>'+'<div id="t10fs-friend-container">'+'</div>'+'<div class="t10fs-actions">'+'<p id="t10fs-filter-selected" class="strong">0 friends selected</p>'+'<button class="btn btn_pink" id="t10_send_invites">Invite and finish</button>'+'<p id="t10fs-preview" class="t_secondary f_12 galaxy_100">Preview your message</p>'+'</div>'+'</div>'+'</div>'+'</div>'+'<div class="tab-panel" id="invite_email">'+'<div class="tab-inner">'+'<h3 class="f_18">Enter your friends’ email addresses to invite them</h3>'+'<div class="email_form">'+'<ul class="bbox f_12" id="email_form">'+'<li><input type="email" class="bbox" id="email_input"></li>'+'</ul>'+'<textarea class="bbox">Hi guys,\n\nI’ve started a Top10 and need your help to finish it.</textarea>'+'<button class="btn btn_pink" id="email_send_invites">Invite and finish</button>'+'</div>'+'</div>'+'</div>'+'</div>'+'<ul class="invite_tabs">'+'<li class="invite_fb current"><a class="newtop10icon" href="#invite_fb">Facebook</a></li>'+'<li class="invite_top10"><a class="newtop10icon" href="#invite_top10">Top10</a></li>'+'<li class="invite_email"><a class="newtop10icon" href="#invite_email">Email</a></li>'+'</ul>'+'</div>',jfmfs_invite_btn:'<div class="jfmfs-actions">'+'<p id="jfmfs-filter-selected" class="strong">0 friends selected</p>'+'<button class="btn btn_pink inactive" id="jfmfs_send_invites">Invite and finish</button>'+'</div>',template_t10friend:'<div class="t10fs-friend" id="native-{{id}}">'+'<img alt="{{username}}" class="avatar" height="50" src="{{image}}" width="50">'+'<p class="friend-name">{{first_name}} {{last_name}}</p>'+'</div>',template_fbSuccess:'<div class="invite_done">'+'<p class="newtop10icons f_22">{{friends}} friends invited</p>'+'<p class="f_18">Continue to add items to your Top10 or invite more friends</p>'+'<a class="btn_pink">Invite more people</a>'+'</div>',events:{'click .invite_tabs li':'inviteTabs','keypress #invite_twttr textarea':'charCount','keyup #email_input':'emailInput','blur #email_input':'emailInput','click .email_ok span':'removeAddr','click #t10fs-preview':'previewMessage','click #t10_send_invites:not(.inactive)':'inviteTop10','click #jfmfs_send_invites:not(.inactive)':'inviteFacebook','click #email_send_invites':'inviteEmail','click .new_fb':'clickFb','click .invite_header':'openSocial','click .jfmfs-friend':'friendClick'},message:null,initialize:function(options){CommonView.prototype.initialize.apply(this,arguments);_.bindAll(this,'render','dontLeave','populateTop10FriendPicker','populateEmailForm','fbEditMsg','inviteTop10','inviteEmail','friendPicker','populateFbInvite','moveToTop','openSocial','fireFB','friendClick');top10.events.connect('auth:signin',_.bind(function(){if(this.el){this.friendPicker();this.populateTop10FriendPicker();this.populateEmailForm();}},this));if(this.el){this.friendPicker();this.populateTop10FriendPicker();this.populateEmailForm();this.socialOpen=false;}
$('#t10_send_invites').addClass('inactive');$('#jfmfs_send_invites').addClass('inactive');$('#email_send_invites').addClass('inactive');},friendClick:function(e){$('#jfmfs_send_invites').removeClass('inactive');},inviteFacebook:function(e){e.preventDefault();this.pageTop=$(window).scrollTop();this.addOverlay();var n=this.model.get('name');var l=this.model.get('url');var p=(this.model.get('image_state')=='exists')?imageUrl(this.model.get("image"),this.model.get("image_state"),135):window.location.protocol+'//top10.com/media/img/fb-placeholder.png';var fbids=[];$('.jfmfs-friend.selected').each(function(i){var id=$(this).attr('id');if(id){fbids.push(id);}});FB.getLoginStatus(_.bind(function(response){if(response.authResponse){FB.ui({method:'send',name:n,link:l,picture:p,display:'dialog',to:fbids.join(',')},_.bind(function(response){this.removeOverlay();if(response){var contributionId=this.model.id;$('.jfmfs-friend.selected').each(function(index){var elem=$(this);elem.removeClass('selected');var id=elem.attr('id');if(id){var invite={contribution_id:contributionId,service:'facebook',identity:id};top10.api.call('user.invite',invite,_.bind(function(response){if(response&&response.ok===1){elem.addClass('invited');$('#bubble_friends').addClass('completed');$('#jfmfs-filter-selected').fadeOut('fast',function(){$(this).html('0 friends selected');});$('#jfmfs_send_invites').addClass('inactive');}},this));}});}},this));}},this));},inviteTop10:function(e){var contributionId=this.model.id;if(contributionId){var message=this.message;$('.t10fs-friend.selected').each(function(index){var elem=$(this);var userId=elem.attr('id').replace('native-','');if(userId){var invite={contribution_id:contributionId,service:'native',identity:userId};if(message){invite['message']=message;}
top10.api.call('user.invite',invite,_.bind(function(response){if(response&&response.ok===1){elem.removeClass('selected');elem.addClass('invited');$('#bubble_friends').addClass('completed');$('#t10fs-filter-selected').fadeOut('fast',function(){$(this).html('0 friends selected');});$('#t10_send_invites').addClass('inactive');}},this));}});}},inviteEmail:function(e){var contributionId=this.model.id;if(contributionId){var body=$('#invite_email').find('textarea.bbox').val();var recipients=[];$('#email_form li.email_ok').each(function(index){recipients.push($(this).text());});top10.api.call('contribution.sendInviteEmail',{'contribution_id':contributionId,'recipients':recipients,'body':body},_.bind(function(response){var $message=$("<p id='email_sent_message'>Your invites have been sent</p>");if(response&&response.ok===1){$("#invite_email").append($message);$('#email_form li.email_ok').remove();$('#email_send_invites').addClass('inactive');}else{$message=$("<p id='email_sent_message'>Your invites could not be sent.  Please try again</p>");$("#invite_email").append($message);}
$("#email_input").focus();$message.fadeOut(3000);},this));}},lastSelected:null,clickFb:function(e){new LoginView({action:'Invite Facebook Friends',title:'Sign in to invite your friends',success:_.bind(function(){FB.init({appId:'156677901008976',status:true,cookie:true,xfbml:true,oauth:true});FB.getLoginStatus(_.bind(function(response){if(response.authResponse&&top10.auth.getSession()){$.getScript('http://c759326.r26.cf2.rackcdn.com/js/lib/jquery.facebook.multifriend.select.min.js',_.bind(function(data,textStatus){this.populateFbInvite();},this));}},this));},this)}).onLoginClick(e);},friendPicker:function(){$(this.el).html(this.mustache(this.template,{}));if($('#sharing_wrap').length===0){$('#sharing').wrap('<div id="sharing_wrap"/>');}
if(this.tabTarget){$('.invite_tabs li').eq(this.tabTarget).addClass('current').siblings().removeClass('current');}
if(typeof FB=='undefined'){$.getScript(document.location.protocol+'//connect.facebook.net/en_US/all.js',_.bind(function(){this.fireFB();},this));}else{this.fireFB();}},fireFB:function(){FB.init({appId:'156677901008976',status:true,cookie:true,xfbml:true,oauth:true});FB.getLoginStatus(_.bind(function(response){if(response.authResponse&&top10.auth.getSession()){$.getScript('http://c759326.r26.cf2.rackcdn.com/js/lib/jquery.facebook.multifriend.select.min.js',_.bind(function(data,textStatus){this.populateFbInvite();},this));}else{$('#jfmfs-panel').addClass('noFB').append('<a class="new_fb" href="#fb">Sign in with Facebook</a>');var login=new LoginView({action:'Facebook Friends',success:_.bind(function(){$.getScript('http://c759326.r26.cf2.rackcdn.com/js/lib/jquery.facebook.multifriend.select.min.js',_.bind(function(data,textStatus){this.populateFbInvite();},this));},this)});}},this));},populateTop10FriendPicker:function(){var session=top10.auth.getSession();if(session&&session.uid){top10.api.call('user.getFollows',{'user_id':session.uid,'count':'100'},_.bind(function(result){if(result.follows&&result.follows.users){var container=$('#t10fs-friend-container');for(var i in result.follows.users){var user=result.follows.users[i];container.append(this.mustache(this.template_t10friend,{id:user.id,first_name:user.first_name,last_name:user.last_name,username:user.username,image:imageUrl(user.image,user.image_state,60)}));}
if(this.model&&this.model.id){top10.api.call('user.invited',{'service':'native','contribution_id':this.model.id},_.bind(function(result){if(result.identities){for(var i in result.identities){var friend=$('#native-'+result.identities[i]);friend.addClass('invited');}}},this));}
$('.t10fs-friend').live('click',function(event){if(!$(this).hasClass('invited')){$(this).toggleClass('selected');$(this).removeClass('hover');if($(this).hasClass('selected')){if(!this.lastSelected){this.lastSelected=$(this);}
else{if(event.shiftKey){var selIndex=$(this).index();var lastIndex=lastSelected.index();var end=Math.max(selIndex,lastIndex);var start=Math.min(selIndex,lastIndex);for(var i=start;i<=end;i++){var aFriend=$($('.t10fs-friend')[i]);if(!aFriend.hasClass('hide-non-selected')&&!aFriend.hasClass('hide-filtered'))
$($('.t10fs-friend')[i]).addClass('selected');}}}}
this.lastSelected=$(this);var selectedCount=$('.t10fs-friend.selected').length;var btnActive=$('#t10_send_invites');var filterText=$('#t10fs-filter-selected');if(selectedCount>0){var plural;selectedCount===1?plural='':plural='s';$(filterText).html(selectedCount+' friend'+plural+' selected').delay(200).fadeTo('fast',0.4);$(btnActive).removeClass('inactive');}else{$(filterText).fadeOut('fast',function(){$(this).html('0 friends selected');});$(btnActive).addClass('inactive');}}});$("#t10fs-filter-selected").live('click',function(){$(".t10fs-friend").not(".selected").addClass("hide-non-selected");$(".filter-link").removeClass("selected");$(this).addClass("selected");});$("#t10fs-filter-all").live('click',function(){$(".t10fs-friend").removeClass("hide-non-selected");$(".filter-link").removeClass("selected");$(this).addClass("selected");});$(".t10fs-button").hover(function(){$(this).addClass("t10fs-button-hover");},function(){$(this).removeClass("t10fs-button-hover");});$('#t10fs-friend-filter-text').keyup(function(){var filter=$(this).val();if(filter==''){$('.t10fs-friend').removeClass('hide-filtered');}
else{$('#t10fs-friend-container').find('.friend-name:not(:Contains('+filter+'))').parent().addClass('hide-filtered');$('#t10fs-friend-container').find('.friend-name:Contains('+filter+')').parent().removeClass('hide-filtered');}});$(".t10fs-friend:not(.selected)").live('hover',function(ev){if(ev.type=='mouseover'){$(this).addClass("hover");}
if(ev.type=='mouseout'){$(this).removeClass("hover");}});}},this));}},populateEmailForm:function(){var url=this.model.get('url');var user=this.model.get('user');var session=top10.auth.getSession();if(session&&session.uid){top10.api.call('user.getInfo',{user_id:session.uid},_.bind(function(response){var firstname=response.user.first_name;var lastname=response.user.last_name;$('#invite_email').find('textarea.bbox').val('Hi guys,\n\nI’ve started a Top10 and need your help to finish it.\n\nHead over to '+url+' to get started!\n\n'+firstname);},this));}else{$('#invite_email').find('textarea.bbox').val('Hi guys, I’ve started a Top10 and need your help to finish it.\n\nHead over to '+url+' to get started!');}},populateFbInvite:function(){var jfmfsContainer=$('#jfmfs-panel');jfmfsContainer.removeClass().jfmfs();var count=0;var actionsSet=false;var timer=setInterval(_.bind(function(){var selector=$('#jfmfs-friend-selector');if(selector.length>0&&actionsSet==false){actionsSet=true;selector.append(this.jfmfs_invite_btn);}
var friends=$('.jfmfs-friend');if(friends.length>0){clearInterval(timer);var friendIds=[];$.each(friends,function(i,friend){friendIds.push($(friend).attr('id'));});top10.api.call('user.lookupProfiles',{'service':'facebook','ids':friendIds},_.bind(function(result){if(result.profiles){for(var friendId in result.profiles){var userId=result.profiles[friendId].user_id;var friend=$('#'+friendId);friend.attr('data-id',userId);friend.addClass('has_profile');}}},this));if(this.model&&this.model.id){top10.api.call('user.invited',{'service':'facebook','contribution_id':this.model.id},_.bind(function(result){if(result.identities){for(var i in result.identities){var friend=$('#'+result.identities[i]);friend.addClass('invited');}}},this));}}else if(count>10){clearInterval(timer);}
count=count+1;},this),100);},previewMessage:function(e){e.preventDefault();var name=this.model.get('name');var messageView=new MessageView().prompt({title:' ',message:this.message,top10_name:name,success:_.bind(function(result){this.message=result;},this)});},inviteTabs:function(e){e.preventDefault();var currentClass,emailFocus,tabTarget;currentClass='current';tabTarget=$(e.currentTarget).find('a').attr('href');this.tabTarget=$('.invite_tabs li').index($(e.currentTarget));if(tabTarget==='#invite_top10'||tabTarget==='#invite_email'){var session=top10.auth.getSession();if(!session){new LoginView.prompt({action:'Invite Top10 Friends',title:'Sign in to invite your friends',success:_.bind(function(){_.defer(_.bind(function(){this.inviteTabs(e);},this));},this)});return;}}
$('.tab-panel').removeClass(currentClass).filter(tabTarget).addClass(currentClass);$(e.currentTarget).addClass(currentClass).siblings().removeClass(currentClass);emailFocus=$('#email_input');if(tabTarget==='#invite_email'){$(emailFocus).focus();}else{$(emailFocus).blur();}},charCount:function(e){var charCount,charsErr,charsWarn,twttrChars;charCount=$(e.currentTarget).val().length;charCount=140-charCount;charsErr='chars_err';charsWarn='chars_warn';twttrChars=$(e.currentTarget).prev('#twttr_chars');$(twttrChars).text(charCount);if(charCount<10){if($(twttrChars).hasClass(charsWarn)){$(twttrChars).removeClass(charsWarn);}
if(!$(twttrChars).hasClass(charsErr)){$(twttrChars).addClass(charsErr);}}else if(charCount>=10&&charCount<20){if($(twttrChars).hasClass(charsErr)){$(twttrChars).removeClass(charsErr);}
if(!$(twttrChars).hasClass(charsWarn)){$(twttrChars).addClass(charsWarn);}}else{if($(twttrChars).hasClass(charsErr)||$(twttrChars).hasClass(charsWarn)){$(twttrChars).removeClass(charsErr).removeClass(charsWarn);}}},emailInput:function(e){if(e.keyCode===13||e.keyCode===32||e.keyCode===188||e.type=="focusout"){var emailAddr,emailOK,isValid,reg;emailAddr=$(e.currentTarget).val();if(emailAddr==''){return;}
if(e.keyCode!==13&&e.type!=="focusout"){emailAddr=emailAddr.substr(0,emailAddr.length-1);}
reg=(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);isValid=emailAddr.match(reg);if(isValid){$(e.currentTarget).parent().before('<li class="email_ok">'+emailAddr+'<span class="newtop10icon"></span></li>').end().val('').css('width','auto');$('#email_send_invites').removeClass('inactive');}else{top10.log('Not an email address');}}else{var formWidth,inputWidth;formWidth=$(e.currentTarget).parents('.email_form').width();inputWidth=$(e.currentTarget).width();if(e.keyCode===8){if($(e.currentTarget).val().length>0){inputWidth=inputWidth-7;}}else{if(inputWidth<(formWidth-20)){inputWidth=inputWidth+7;}}
$(e.currentTarget).width(inputWidth);}},removeAddr:function(e){var itemsContainer=$(e.currentTarget).parent().parent();$(e.currentTarget).parent().remove();if(itemsContainer.find(".email_ok").length===0){$('#email_send_invites').addClass('inactive');}},fbCallback:function(){var invitedCount=0;$('#invite_fb').html(this.mustache(this.template_fbSuccess,{friends:invitedCount}));},openSocial:function(e){if($(e.currentTarget).hasClass('s_animating')||$(e.currentTarget).hasClass('s_inactive')){return;}
var form=$('.item_form');var sharing=$('#sharing_wrap');sharing.find('.invite_header').addClass('s_inactive');form.find('h3').addClass('s_inactive');form.find('h3').addClass('s_animating');sharing.find('.invite_header').addClass('s_animating');form.css('height',form.css('height'));if(this.socialOpen==false){var s_pos=$('#sharing').offset().top;var i_pos=(form.length)?form.offset().top:0;var dis=(form.length)?s_pos-i_pos-82:0;sharing.css('top','-'+dis+'px').addClass('s_before');sharing.find('.invite_header h2').text('Invite a friend to join in!');this.socialOpen=true;form.find('h3').removeClass('s_inactive');}else{sharing.css('top',0).removeClass('s_before');sharing.find('.invite_header h2').html('Need help? <u>Invite friends</u> to add to the Top10');this.socialOpen=false;sharing.find('.invite_header').removeClass('s_inactive');}
$('#sharing').toggleClass('social_open');form.toggleClass('social_open');form.find('h3').unbind('click.social');form.find('h3').bind("click.social",_.bind(function(e){var fn=this.openSocial(e);_.debounce(fn,200);},this));if(jQuery.support.transition){$('#sharing').bind("transitionend webkitTransitionEnd",_.throttle(function(){$('.item_form h3').removeClass('s_animating');sharing.find('.invite_header').removeClass('s_animating');},100));}else{form.find('h3').removeClass('s_animating');sharing.find('.invite_header').removeClass('s_animating');}},removeOverlay:function(){$('html').removeClass('overflow');FB.Dialog.remove(FB.Dialog._active);$(window).scrollTop(this.pageTop);$('.popup-overlay').fadeOut('fast',function(){$('.popup-overlay').remove();});},addOverlay:function(){$('body').append('<div class="popup-overlay hidden"></div>');$('html').addClass('overflow');$(window).scrollTop(0);$('.popup-overlay').fadeIn('fast');$(document).bind('keyup.modalEsc',_.bind(function(e){if(e.keyCode==27){this.removeOverlay();$(document).unbind('keyup.modalEsc');}},this));$('.popup-overlay').bind('click.fbDialog',_.bind(function(){$('.popup-overlay').unbind('click.fbDialog');this.removeOverlay();},this));}});if($('#sharing').length){if(top10_data.items.length<4){var model=new Contribution(top10_data,{parse:true});views.sharing=new SharingView({model:model});}else{setTimeout(function(){var px=$('#sharing').offset().top-$(window).height()-400;$(window).bind('scroll.sharing',function(){var top=$(document).scrollTop();if(top>px){var model=new Contribution(top10_data,{parse:true});views.sharing=new SharingView({model:model});$(window).unbind('.sharing');}});},0);}}
var MessageView=PopupView.extend({className:"popup popup-dialog",template:'{{{ call }}}'+'<p class="from_to"><span>From:</span> {{first_name}} {{last_name}}</p>'+'<p class="from_to"><span>Subject:</span> {{top10_name}}</p>'+'<textarea id="message_text">{{#message}}{{message}}{{/message}}{{^message}}I’ve started {{top10_name}} on Top10.com. Come and add in your ideas too!\n\n&ndash;{{first_name}}{{/message}}</textarea>'+'<a href="#" class="btn_pink fr" id="submit_message">Continue</button>',events:{'click #submit_message':'messageText'},initialize:function(options){options=options||{};_.bindAll(this,'messageText');options.title='Invitation';options.extraClass=' top10_friends';if(options.message){this.message=options.message;}
if(options.top10_name){this.top10_name=options.top10_name;}
if(top10.auth.getSession()&&top10.auth.getSession().uid){top10.api.call('user.getInfo',{user_id:top10.auth.getSession().uid},_.bind(function(response){if(1===response.ok&&response.user){options.content=this.mustache(this.template,{'first_name':response.user.first_name,'last_name':response.user.last_name,'top10_name':this.top10_name,'message':this.message});PopupView.prototype.initialize.call(this,options);if(options.success){this.bind("success",options.success);}}},this));}},messageText:function(e){e.preventDefault();this.message=$('#message_text').val();this.remove();this.trigger("success",this.message);},prompt:function(options){var view=new MessageView(options);$(".popup").remove();$("body").append(view.el);return view;}});var SpotifyView=Spine.View.extend({el:$('.spotify_link'),events:{'click .spotify_confirm':'spotifyConfirmed','click .shut':'openPhoneSlider','click .close':'closePhoneSlider'},initialize:function(options){options=options||{};_.bindAll(this,'spotifyConfirmed','setCookie','progressBars','redirect');this.render();},render:function(){this.progressBars();var isDev=false;var appURL=isDev?"spotify:app:top10dev:":"spotify:app:top10:";if($("#pageType").attr("value")=="contribution"){var model=new Contribution(top10_data,{parse:true});this.model=model;this.spotifyURL=appURL+"contribution/"+this.model.get("top10_id")+"/"+this.model.get('user').get('id');}else if($("#pageType").attr("value")=="top10"){var model=new Top10(top10_data,{parse:true});this.model=model;this.spotifyURL=appURL+"top10/"+this.model.get("id");}else{var model=new User(top10_data,{parse:true});this.model=model;this.spotifyURL=appURL+"user/"+this.model.get("id");}
if(window.location.search&&window.location.search!==""){this.spotifyURL+=window.location.search;}else{this.spotifyURL+='?utm_medium=social%20media%20campaign&utm_campaign=spotify&utm_source=insterstitial';}
if($(".slider").css('display')=='none'){if(document.cookie&&document.cookie.indexOf('top10_has_spotify')>=0){var t=setTimeout(this.redirect,1000);return;}}},redirect:function(){document.location.href=this.spotifyURL;},spotifyConfirmed:function(e){e.preventDefault();var url=$(e.target).parent().hasClass('mobile_open')?e.target.href:this.spotifyURL;this.setCookie('top10_has_spotify','yes','/','.top10.com',false);top10.log(url);var previousUrl=document.location.href;document.location.href=url;setTimeout(function(){document.location.href=previousUrl;},1000);},openPhoneSlider:function(e){$('.slider .shut').css('display','none');$('.slider .open, .slider .module-content, .slider .module-footer').css('display','block');$('.slider').css('bottom','0px');},closePhoneSlider:function(e){e.preventDefault();$('.slider .shut').css('display','block');$('.slider .open, .slider .module-content, .slider .module-footer').css('display','none');$('.slider').css('bottom','-112px');},progressBars:function(){this.animate=false;var allCount,maxCount,progressBar,thisCount,stretch;Array.max=function(array){return Math.max.apply(Math,array);};allCount=new Array();progressBar=$('.progress-bar');progressBar.each(function(){thisCount=$(this).data('score');allCount.push(thisCount);});maxCount=Array.max(allCount);progressBar.each(function(){thisCount=$(this).data('score');stretch=(thisCount/maxCount)*100;$(this).find('div').css({'width':stretch+'%'});});},setCookie:function(name,value,path,domain,secure){document.cookie=name+"="+escape(value)+";expires=Fri, 01 Jan 2038 17:14:16 GMT"+
((path)?";path="+path:"")+
((domain)?";domain="+domain:"")+
((secure)?";secure":"");}});if($('.spotify_link').length>0){views.spotify=new SpotifyView();}
var spotifyPromoView=Spine.View.extend({el:$('.bodywrap.spotify-promo'),events:{'click #spotify-trigger li:not(.active)':'swapStage1','transitionend .screen-holder img.screen-2.stage-1':'swapStage2','transitionend .screen-holder img.screen-2.stage-2':'swapStage3','webkitTransitionEnd .screen-holder img.screen-2.stage-1':'swapStage2','webkitTransitionEnd .screen-holder img.screen-2.stage-2':'swapStage3','MSTransitionEnd .screen-holder img.screen-2.stage-1':'swapStage2','MSTransitionEnd .screen-holder img.screen-2.stage-2':'swapStage3','oTransitionEnd .screen-holder img.screen-2.stage-1':'swapStage2','oTransitionEnd .screen-holder img.screen-2.stage-2':'swapStage3'},triggerTemplate:'<ol id="spotify-trigger">'+'<li data-screen="screen-1" class="active">1</li>'+'<li data-screen="screen-2">2</li>'+'<li data-screen="screen-3">3</li>'+'<li data-screen="screen-4">4</li>'+'</ol>',initialize:function(options){if(jQuery.support.transition){this.preLoadImages('/media/img/spotify-screens/screen-1.png','/media/img/spotify-screens/screen-2.png','/media/img/spotify-screens/screen-3.png','/media/img/spotify-screens/screen-4.png');$('.screen-holder').addClass('dynamic').after(this.mustache(this.triggerTemplate));}},swapStage1:function(e){var screen2img=$(e.currentTarget).data('screen');$(e.currentTarget).addClass('active').siblings().removeClass('active');$('.screen-holder img.screen-2').attr('src','/media/img/spotify-screens/'+screen2img+'.png').addClass('stage-1');},swapStage2:function(e){$('.screen-holder img').removeClass('stage-1').addClass('stage-2');},swapStage3:function(e){var screen1=$('.screen-holder img.screen-1');var screen2=$('.screen-holder img.screen-2');screen1.attr('class','screen-2');screen2.attr('class','screen-1');this.endSwap();},endSwap:function(){var screen1=$('.screen-holder img.screen-1');var screen2=$('.screen-holder img.screen-2');screen2.detach();screen1.after(screen2);},preLoadImages:function(){var cache=[];var args_len=arguments.length;for(var i=args_len;i--;){var cacheImage=document.createElement('img');cacheImage.src=arguments[i];cache.push(cacheImage);}}});if($('.bodywrap.spotify-promo').length>0){views.spotifyPromo=new spotifyPromoView;}
var ContributionView=RemixView.extend({initialItemState:'contribution',prepareModel:function(){this.model.set({'parent_id':this.model.id});this.model.set({'is_remix':true});this.model.set({"id":null});},userContributionExists:function(id){RemixView.prototype.userContributionExists.apply(this,arguments);},apiSignOut:function(){RemixView.prototype.apiSignOut.apply(this,arguments);},remixClick:function(e){RemixView.prototype.remixClick.call(this,e);},render:function(){RemixView.prototype.render.call(this);views.tags=new TagsView({contribution_id:this.model.id});return this;}});if($(".bd").is(".top10")){views.contribution=new ContributionView();}
if($(".bd").is(".contributors")){var contSignIn=function contSignIn(){var session=top10.auth.getSession();if(session&&session.uid){RemixView.prototype.apiSignIn(session);}}
contSignIn();top10.events.connect("auth:signin",contSignIn);}
setTimeout(function(){$.getScript(document.location.protocol+'//platform.twitter.com/widgets.js',function(){twttr.events.bind('tweet',function(event){if(event){if(top10_data){if(top10_data.id){var params={network:'twitter','id':top10_data.id};top10.api.call('contribution.recordShare',params,function(response){});}}
_gaq.push(['_trackSocial','twitter','tweet',window.location.pathname]);}});});if($('.g-plusone').length){$.getScript(document.location.protocol+'//apis.google.com/js/plusone.js');}
if(typeof FB=='undefined'){$.getScript(document.location.protocol+'//connect.facebook.net/en_US/all.js',function(){window.fbAsyncInit=function(){FB.init({appId:'156677901008976',status:true,cookie:true,xfbml:true,oauth:true});var targetUrl=window.location.pathname;FB.Event.subscribe('edge.create',function(){if(top10_data){if(top10_data.id){var params={network:'facebook','id':top10_data.id};top10.api.call('contribution.recordShare',params,function(response){});}}
_gaq.push(['_trackSocial','facebook','like',targetUrl]);});FB.Event.subscribe('message.send',function(targetUrl){_gaq.push(['_trackSocial','facebook','send',targetUrl]);});}});}
$.getScript('/media/js/favicon.js');},2000);})(jQuery,top10);
