var CONSTANTS={};CONSTANTS.SHOW_INFO_INTERVAL=3000;CONSTANTS.ENTER_KEYCODE=13;CONSTANTS.ESCAPE_KEYCODE=27;CONSTANTS.DEFAULT_COMPLETED_TASKS=3;CONSTANTS.LIST_ORDER_INCREMENT=1000;CONSTANTS.TASK_ORDER_INCREMENT=1000;var AnalyticsManager=function(){};AnalyticsManager.prototype.track_event=function(a,b){if(a&&b){pageTracker._trackEvent(a,b)}};var analytics=new AnalyticsManager();var MessageManager=function(){};MessageManager.prototype.show_info=function(c,a){var b=this;$("#app_status").addClass("ui-state-highlight");$("#app_status").addClass("ui-corner-all");$("#app_status").html(c);if(a===undefined){a=true}if(a){window.setTimeout(function(){b.hide_info()},CONSTANTS.SHOW_INFO_INTERVAL)}};MessageManager.prototype.hide_info=function(){$("#app_status").removeClass("ui-state-highlight");$("#app_status").removeClass("ui-corner-all");$("#app_status").html("")};var message=new MessageManager();var UndoManager=function(){this.actions=[]};UndoManager.prototype.register_action=function(a){this.actions.push(a)};UndoManager.prototype.undo_action=function(){if(this.actions.length>0){var a=this.actions.pop();if(a.type==="remove_list"){var d=a.list_id;var j=a.list_name;var l=a.list_is_visible;var g=lists.get_max_list_order()+CONSTANTS.LIST_ORDER_INCREMENT;lists.create(d,j,l,g);tasks.load_list_tasks(j,d,l);$.getJSON("/services/unremove_list/",{list_id:d},function(m){$.getJSON("/services/edit_list/",{list_id:d,order:g})});analytics.track_event("Undo","Remove List")}if(a.type==="remove_task"){var h=a.task_id;var i=a.task_description;var b=a.task_order;var f=a.task_checked;var k=a.task_completed;var d=a.list_id;$.getJSON("/services/unremove_task/",{task_id:h});if(f){var e=new Task();k=e.get_current_utc_date_string();$.getJSON("/services/complete_task/",{task_id:h})}else{var c=$("#list_"+d).find(".task_items");b=tasks.get_max_task_order(c)+CONSTANTS.TASK_ORDER_INCREMENT;$.getJSON("/services/edit_task/",{task_id:h,order:b})}tasks.create(h,i,b,f,k,d);analytics.track_event("Undo","Remove Task")}}};var undo=new UndoManager();var ListManager=function(){this.lists=[]};ListManager.prototype.get=function(a){return this.lists[a]};ListManager.prototype.create=function(e,d,c,b){var a=new List();a.create(e,d,c,b);this.lists[e]=a};ListManager.prototype.create_new=function(a){var b=this;$.getJSON("/services/add_list/",{name:a},function(c){b.create(c.list_id,a,true,c.order);tasks.load_list_tasks(a,c.list_id,true)});analytics.track_event("Lists","Add")};ListManager.prototype.remove=function(c){$("#list_item_"+c).remove();$("#list_"+c).remove();message.show_info("Deleted list. <a id='undo_link' href=''>Undo</a>");var b=this.lists[c];var a={};a.type="remove_list";a.list_id=c;a.list_name=b.name;a.list_is_visible=b.is_visible;a.list_order=b.order;undo.register_action(a);delete this.lists[c];$.getJSON("/services/remove_list/",{list_id:c});analytics.track_event("Lists","Remove")};ListManager.prototype.load=function(){var b=this;$("#nav_lists").html("");$("#tasks").html("");$.getJSON("/services/get_lists/",function(e){for(var d=0;d<e.length;d++){var c;if(e[d].is_visible==="true"){c=true}else{c=false}b.create(e[d].list_id,e[d].name,c,e[d].order);tasks.load_list_tasks(e[d].name,e[d].list_id,c)}});var a=new List();a.add_list_drop_support($("#nav_lists_bottom"))};ListManager.prototype.get_max_list_order=function(){var a=0;for(var b in this.lists){if(this.lists[b].order>a){a=this.lists[b].order}}return a};ListManager.prototype.sorted_list_keys_by_order=function(){var d=this;var b=0;var c=Array();for(var a in this.lists){c[b]=a;b++}c.sort(function(f,e){return d.lists[f].order-d.lists[e].order});return c};var lists=new ListManager();var List=function(){};List.prototype.create=function(d,c,b,a){this.id=d;this.name=c;this.is_visible=b;this.order=a;this.render_list()};List.prototype.edit=function(a){this.name=a;$("#list_item_"+this.id).html(this.render_list_body());$("#list_"+this.id).find(".task_list_title").text(a);$.getJSON("/services/edit_list/",{list_id:this.id,name:a});analytics.track_event("Lists","Edit")};List.prototype.toggle_visible=function(){if(this.is_visible){this.is_visible=false;$("#list_"+this.id).hide();$.getJSON("/services/edit_list/",{list_id:this.id,is_visible:false});analytics.track_event("Lists","Hide")}else{this.is_visible=true;$("#list_"+this.id).show();$.getJSON("/services/edit_list/",{list_id:this.id,is_visible:true});analytics.track_event("Lists","Show")}};List.prototype.render_list=function(b){var c=$("#nav_lists");var a="<div class='list_item' id='list_item_"+this.id+"'>"+this.render_list_body()+"</div>";if(b){b.before(a)}else{c.append(a)}this.add_list_drag_support();$("#list_item_"+this.id).data("list_id",this.id)};List.prototype.render_list_body=function(){var a="<div class='list_item_options'><a class='list_item_option list_item_edit' style='display:none;margin-right:2px;' href=''><img height=16px width=16px src='/media/tasks/images/edit.jpg' border='0'/></a><a class='list_item_option list_item_remove' style='display:none' href=''><img  src='/media/tasks/images/trash2.gif' height=16px width=16px border='0'/></a></div><div style='float:left; width:18px;'><input class='list_item_toggle' type='checkbox'";if(this.is_visible){a+=" checked"}a+="/></div><div style='padding-left:18px;' class='list_item_select'>"+this.name+"</div><div style='clear:both'></div>";return a};List.prototype.add_list_drag_support=function(){element=$("#list_item_"+this.id);element.draggable({helper:"original",revert:"invalid",start:function(){$(".list_item").die("mouseover");$(this).removeClass("hover");$(this).find(".list_item_option").hide()},stop:function(){$(".list_item").live("mouseover",list_item_mouseover)}});this.add_list_drop_support()};List.prototype.add_list_drop_support=function(a){a=a||$("#list_item_"+this.id);a.droppable({accept:".list_item",over:function(){$(this).addClass("list_item_drop_hover")},out:function(){$(this).removeClass("list_item_drop_hover")},drop:function(c,o){$(this).removeClass("list_item_drop_hover");var k=o.draggable.data("list_id");var n=jQuery.trim(o.draggable.text());if(o.draggable.find(".list_item_toggle").attr("checked")){var f=true}else{var f=false}o.draggable.remove();$(".list_item").live("mouseover",list_item_mouseover);if($(this).attr("id")==="nav_lists_bottom"){lists.get(k).render_list()}else{lists.get(k).render_list($(this))}if($(this).attr("id")==="nav_lists_bottom"){var d=lists.get_max_list_order();var g=d+CONSTANTS.LIST_ORDER_INCREMENT}else{var b=$(this).data("list_id");var m=lists.get(b).order;var q=0;var h=$(this).prev().prev();if(h.length!==0){var l=h.data("list_id");q=lists.get(l).order}var g=parseInt((m-q)/2)+q;if(g===q){var e=CONSTANTS.LIST_ORDER_INCREMENT;var p=lists.sorted_list_keys_by_order();for(var j in p){lists.get(p[j]).order=e;$.getJSON("/services/edit_list/",{list_id:p[j],order:e});e+=CONSTANTS.LIST_ORDER_INCREMENT}m=lists.get(b).order;q=lists.get(l).order;g=parseInt((m-q)/2)+q}}lists.get(k).order=g;tasks.load_list_tasks_all();$.getJSON("/services/edit_list/",{list_id:k,order:g});analytics.track_event("Lists","Reorder")}})};var TaskManager=function(){this.tasks=[];this.new_tasks=[];this.cur_max_new_task_id=0};TaskManager.prototype.get=function(a){return this.tasks[a]};TaskManager.prototype.create=function(h,e,a,d,b,g,f){var c=new Task();if(f){c.hidden=true}c.create(h,e,a,d,b,g);this.tasks[h]=c};TaskManager.prototype.create_new=function(c,e){var b=this;var a=new Task();a.unpersisted=true;a.new_id=this.cur_max_new_task_id;this.cur_max_new_task_id++;var d=a.create(undefined,c,undefined,false,null,e);$("#"+d).removeClass("task_item");$("#"+d).find(".task_item_toggle").attr("disabled",true);$("#list_"+e).find(".task_items_bottom").droppable("disable");this.new_tasks[a.new_id]=a;$.getJSON("/services/add_task/",{task:c,list_id:e},function(f){b.upgrade_task(a.new_id,f.task_id,f.order)});analytics.track_event("Tasks","Add")};TaskManager.prototype.upgrade_task=function(b,d,a){var c=this.new_tasks[b];c.id=d;c.order=a;this.tasks[d]=c;delete this.new_tasks[b];$("#new_task_"+b).attr("id","task_"+d);$("#task_"+d).data("task_id",d);$("#task_"+d).addClass("task_item");$("#task_"+d).find(".task_item_toggle").attr("disabled",false);c.add_task_drag_support();$("#list_"+c.list_id).find(".task_items_bottom").droppable("enable");delete c.unpersisted;delete c.new_id};TaskManager.prototype.remove=function(c){var a=this.tasks[c];$("#task_"+c).remove();message.show_info("Deleted task. <a id='undo_link' href=''>Undo</a>");var b={};b.type="remove_task";b.task_id=c;b.task_description=a.description;b.task_order=a.order;b.task_checked=a.checked;b.task_completed=a.completed;b.list_id=a.list_id;undo.register_action(b);delete this.tasks[c];$.getJSON("/services/remove_task/",{task_id:c});analytics.track_event("Tasks","Remove")};TaskManager.prototype.load_list_tasks_all=function(){$("#tasks").html("");var b=lists.sorted_list_keys_by_order();for(var a in b){this.load_list_tasks(lists.get(b[a]).name,b[a],lists.get(b[a]).is_visible)}};TaskManager.prototype.load_list_tasks=function(d,g,b){var f=this;var e="list_"+g;var c="<div class='task_list' id='"+e+"'>";c+="<div class='task_list_title'>"+d+"</div>";c+="</div>";$("#tasks").append(c);$("#list_"+g).data("list_id",g);$("#list_"+g).append("<div class='task_items'/>");$("#list_"+g).append("<div class='task_items_bottom'/>");$("#list_"+g).append("<div class='task_add'><a class='task_add_link' href=''>Add task</a></div>");$("#list_"+g).append("<div class='task_items_completed'/>");$("#list_"+g).append("<div class='task_items_completed_hidden'/>");if(!b){$("#list_"+g).hide()}$.getJSON("/services/get_list_tasks/",{list_id:g},function(l){for(var h=0;h<l.tasks.length;h++){f.create(l.tasks[h].task_id,l.tasks[h].description,l.tasks[h].order,false,null,g)}var k=$("#list_"+g).find(".task_items_completed");for(var h=0;h<l.completed_tasks.length;h++){f.create(l.completed_tasks[h].task_id,l.completed_tasks[h].description,l.completed_tasks[h].order,true,l.completed_tasks[h].completed,g)}if(l.completed_tasks_count>CONSTANTS.DEFAULT_COMPLETED_TASKS){l.completed_tasks_hidden.reverse();lists.get(g).completed_tasks_hidden=l.completed_tasks_hidden;var j=$("#list_"+g).find(".task_items_completed_hidden");j.append("<a class='task_items_completed_hidden_link' href=''>View "+(l.completed_tasks_count-CONSTANTS.DEFAULT_COMPLETED_TASKS)+" remaining tasks</a>")}});var a=new Task();a.add_task_drop_support($("#list_"+g).find(".task_items_bottom"))};TaskManager.prototype.get_max_task_order=function(b){var a=0;if(b.find(".task_item").length>0){var c=b.find(".task_item:last").data("task_id");a=this.tasks[c].order}return a};var tasks=new TaskManager();var Task=function(){};Task.prototype.create=function(f,d,a,c,b,e){this.id=f;this.description=d;this.order=a;this.checked=c;this.completed=b;this.list_id=e;return this.render_task()};Task.prototype.edit=function(a){this.description=a;$("#task_"+this.id).html(this.render_task_body());$.getJSON("/services/edit_task/",{task_id:this.id,description:this.description});analytics.track_event("Tasks","Edit")};Task.prototype.toggle_completed_state=function(){var a=this;var c=$("#list_"+this.list_id).find(".task_items");var b=$("#list_"+this.list_id).find(".task_items_completed");if(this.checked){this.checked=false;this.completed=null;$("#task_"+this.id).remove();this.order=tasks.get_max_task_order(c)+CONSTANTS.TASK_ORDER_INCREMENT;this.render_task();$.getJSON("/services/uncomplete_task/",{task_id:this.id},function(d){$.getJSON("/services/edit_task/",{task_id:a.id,order:a.order})});analytics.track_event("Tasks","Uncomplete")}else{this.checked=true;this.completed=this.get_current_utc_date_string();$("#task_"+this.id).remove();this.render_task();$.getJSON("/services/complete_task/",{task_id:this.id},function(d){a.completed=d.completed});analytics.track_event("Tasks","Complete")}};Task.prototype.render_task=function(d){var b=$("#list_"+this.list_id);var e=b.find(".task_items");var c=b.find(".task_items_completed");if(this.unpersisted){var a="new_task_"+this.new_id}else{var a="task_"+this.id}var f="<div class='task_item' ";f+="id='"+a+"'>";f+=this.render_task_body();f+="</div>";if(!this.checked){if(d){d.before(f)}else{e.append(f)}if(!this.unpersisted){this.add_task_drag_support()}}else{if(this.hidden){c.append(f)}else{c.prepend(f)}}if(!this.unpersisted){$("#"+a).data("task_id",this.id)}return a};Task.prototype.get_current_utc_date_string=function(){var b=new Date();var a=this.month_names_full[b.getUTCMonth()]+" "+b.getUTCDate()+", "+b.getUTCFullYear()+" "+b.getUTCHours()+":"+b.getUTCMinutes()+":"+b.getUTCSeconds();return a};Task.prototype.render_task_body=function(){var a="<div class='task_item_options'><a class='task_item_option task_item_remove' style='margin-right: 2px;display:none' href=''><img  src='/media/tasks/images/trash2.gif' height=16px width=16px border='0'/></a><a class='task_item_option task_item_edit' style='display:none' href=''><img height=16px width=16px src='/media/tasks/images/edit.jpg' border='0'/></a></div>";a+="<input class='task_item_toggle' type='checkbox'";if(this.checked){a+=" checked"}a+="/>";if(this.completed!=null){a+="<span class='task_completed_date'>"+this.formatted_completion_date()+"</span>"}a+=this.description;return a};Task.prototype.month_names_full=function(){var a=[];a[a.length]="January";a[a.length]="February";a[a.length]="March";a[a.length]="April";a[a.length]="May";a[a.length]="June";a[a.length]="July";a[a.length]="August";a[a.length]="September";a[a.length]="October";a[a.length]="November";a[a.length]="December";return a}();Task.prototype.month_names=function(){var a=[];a[a.length]="Jan";a[a.length]="Feb";a[a.length]="Mar";a[a.length]="Apr";a[a.length]="May";a[a.length]="Jun";a[a.length]="Jul";a[a.length]="Aug";a[a.length]="Sep";a[a.length]="Oct";a[a.length]="Nov";a[a.length]="Dec";return a}();Task.prototype.formatted_completion_date=function(){var a=new Date(this.completed);var b=new Date(a.getTime()-a.getTimezoneOffset()*60000);return this.month_names[b.getMonth()]+" "+b.getDate()};Task.prototype.add_task_drag_support=function(){element=$("#task_"+this.id);element.draggable({helper:"original",revert:"invalid",start:function(){$(".task_item").die("mouseover");$(this).find(".task_item_option").hide()},stop:function(){$(".task_item").live("mouseover",task_item_mouseover)}});this.add_task_drop_support()};Task.prototype.add_task_drop_support=function(a){a=a||$("#task_"+this.id);a.droppable({accept:".task_item",over:function(){$(this).addClass("task_item_drop_hover")},out:function(){$(this).removeClass("task_item_drop_hover")},drop:function(b,m){$(this).removeClass("task_item_drop_hover");var j=m.draggable.data("task_id");var l=$(this).closest(".task_list").find(".task_items");var c=tasks.get_max_task_order(l);var h=$(this).closest(".task_list").data("list_id");m.draggable.remove();$(".task_item").live("mouseover",task_item_mouseover);if(tasks.get(j).list_id!==h){tasks.get(j).list_id=h;$.getJSON("/services/edit_task/",{task_id:j,list_id:h});analytics.track_event("Tasks","Reorder Different List")}else{analytics.track_event("Tasks","Reorder Same List")}if($(this).hasClass("task_items_bottom")){tasks.get(j).render_task()}else{tasks.get(j).render_task($(this))}if($(this).hasClass("task_items_bottom")){var f=c+CONSTANTS.TASK_ORDER_INCREMENT}else{var e=$(this).data("task_id");var i=tasks.get(e).order;var n=0;var g=$(this).prev().prev();if(g.length!==0){var k=g.data("task_id");n=tasks.get(k).order}var f=parseInt((i-n)/2)+n;if(f===n){var d=CONSTANTS.TASK_ORDER_INCREMENT;l.children().each(function(){var o=$(this).data("task_id");tasks.get(o).order=d;$.getJSON("/services/edit_task/",{task_id:o,order:d});d+=CONSTANTS.TASK_ORDER_INCREMENT});f=tasks.get(j).order}}$.getJSON("/services/edit_task/",{task_id:j,order:f},function(o){tasks.get(j).order=f})}})};
