var active, subActive, inform = false, state = 1;

jQuery(function(){

	jQuery(document).keypress(function(e){
		if ( inform && e.keyCode == 13 ) {
			jQuery("#msgform").submit();
		}

		if ( !active || inform || e.keyCode < 37 || e.keyCode > 40 ) return;

		// DOWN
		if ( e.keyCode == 40 ) {
			if ( state == 1 ) {
				active.next("div").setActive();
			} else if ( state == 2 ) {
				subActive.next().subActive();
			}
		}
		
		// UP
		if ( e.keyCode == 38 ) {
			if ( state == 1 ) {
				active.prev().setActive();
			} else if ( state == 2 ) {
				subActive.prev().subActive();
			}
		}
		
		// RIGHT
		if ( e.keyCode == 39 ) {
			state++;

			if ( state == 1 ) {
				active.removeClass("ignore");
				jQuery("#arrows").removeClass("left right").addClass("center");
			} else if ( state == 2 ) {
				jQuery("#msg").addClass("active");
				showMsg();
			} else if ( state == 3 ) {
				activateSub();
			}
		}
		
		// LEFT
		if ( e.keyCode == 37 ) {
			state--;

			if ( state == -1 ) {
				removeActive();
			} else if ( state == 0 ) {
				active.addClass("ignore");
				jQuery("#arrows").removeClass("center right").addClass("left");
			} else if ( state == 1 ) {
				jQuery("#msg, #msg li").removeClass("active");
				active.removeClass("subactive");
				jQuery("#arrows").removeClass("left right").addClass("center");
			}
		}
		
		return false;
	});

	function activateSub(){
		if ( subActive.is(".custom") ) {
			jQuery("#status").focus();
		} else if ( subActive.is(".canned") ) {
			jQuery("#status").val( subActive.text() );
			jQuery("#msgform").submit();
			//subActive.find("li").eq(0).cannedActive();
		} else {
			jQuery("#status").val( subActive.find( subActive.find("span").length ? "span" : "p").text() );
			jQuery("#msgform").submit();
		}
	}

	function removeActive(skip_ignore){
		var next = active.next();
        
        if(!skip_ignore) {
            var msgid = active.get(0).id.replace(/^recmsg_/,"");
            jQuery.post("/message/"+msgid+"/ignore/");
        }

		active.animate({height:"hide", marginTop:"hide", marginBottom:"hide"}, "slow", function(){

			jQuery(this).remove();
			active = next.setActive();
		});
		state = 1;
	}

	function showMsg(){
		jQuery("#msg").addClass("active")
			.find("textarea").val('').end()
			.find("li.retweet").find("span").html("From @" + jQuery.trim(active.find(".original_text").text())).end()
				.subActive();
	}

	jQuery("#msgform").submit(function(){
		inform = false;
		jQuery("#msgform :input").attr("disabled", "disabled");

		var name = subActive.is(".retweet") ? "" : "@" + active.find("b").text() + " ";

		jQuery.post("/message/send/", {
                status: name + jQuery("#status").val(),
                in_response_to: active.attr("id").replace(/^recmsg_/,""),
            }, function(){
                jQuery("#msgform :input").attr("disabled", "");
                jQuery("#msg, #msg li").removeClass("active");
                active.removeClass("subactive");
                removeActive(true);
                state = 1;
		});

		return false;
	});

	jQuery("#status").focus(function(){
		inform = true;
	}).blur(function(){
		inform = false;
	});

	jQuery("#items").click(function(e){
		var elem = jQuery(e.target);
		var item = elem.is(".item") ? elem : elem.parents(".item");
		if ( item.length ) {
			state = 2;
			item.setActive();
			showMsg();
		}
	});

	jQuery("#msg").click(function(e){
		var elem = jQuery(e.target);
		var item = elem.is("li") ? elem : elem.parents("li");
		if ( item.length ) {
			item.subActive();
			activateSub();
		}
	});
	
	jQuery.fn.removeItem = function(parent, getURL){
		return this.click(function(e){
			var self = e.target;
			
			if ( jQuery(self).is("img") ) {
				jQuery(self).parent().block({
					message: "<b>Remove?</b> <a href=''>Yes</a> <a href=''>No</a>",
					css: { border: "0px", left: "0px", textAlign: "left", width: "100%", top: "0px" },
					overlayCSS: { backgroundColor: "#fff" }
				});
			} else if ( jQuery(self).text() == "Yes" ) {
				jQuery.post(getURL(self), function(){
					jQuery(self).parents(parent).unblock().slideUp("slow");
				});
				return false;
			} else if ( jQuery(self).text() == "No" ) {
				jQuery(self).parents(parent).unblock();
				return false;
			}
		});
	};
	
	jQuery("ul.watchlist").removeItem("li", function(self){
		jQuery(self).parents("li").find("a").attr("href") + "inactivate/"
	});
	
	jQuery("div.canned img").removeItem("div.canned", function(self){
		jQuery(self).parents("div.canned").attr("id") + "remove/"
	});
	
	jQuery("#items div:first").setActive();
});

jQuery.fn.setActive = function(){
	if ( this.length ) {
		active = this;
	
		jQuery("#msg").removeClass("active");
		jQuery("#arrows").removeClass("left right").addClass("center");
	
		this.siblings(".active")
			.removeClass("active")
		.end()
		.addClass("active");
	
		var offset = this.offset(), pos = offset.top - 166;
		jQuery("html,body").stop().animate({scrollTop: pos});
		jQuery("#msg").css({top: pos});
		jQuery("#arrows").css({top: pos + 88, left: offset.left });
	}

	return this;
};

jQuery.fn.subActive = function(){
	if ( this.length ) {
		subActive = this;
		
		jQuery("#arrows").removeClass("left center").addClass("right");
		
		active.addClass("subactive");
	
		this.siblings(".active")
			.removeClass("active")
		.end()
		.addClass("active");
	}

	return this;
};