(function($) {
	$.showActionPanel = function() {
		$("#sitemap-pages").hide();
		$("#sitemap-action").fadeIn();
	};
})(jQuery);

(function($) {
	$.showPagePanel = function() {
		$("#sitemap-action").hide();
		$("#sitemap-pages").fadeIn();
	};
})(jQuery);

(function($) {
	$.clearValues = function() {
		$("#page-title, #page-id, #original-parent").val('');
		$("#parent").val(0);
	};
})(jQuery);

(function($) {
	$.populateSelectBox = function(ul_id, select_id, match_id) {
		var grandparent = 1;
		var parent = 1;
		var opts = '<option value="0">Home</option>';
		if(match_id == 0) opts = '<option value="0" selected="selected">Home</option>';
		var selected = '';
		if(match_id == -1) selected = ' selected="selected"';
		opts += '<option value="-1"' + selected + '>Utility Nav</option>';
		$(ul_id + " > li:not(.home)").each(function() {
			selected = '';
			if(match_id == grandparent) selected = ' selected="selected"';
			opts += '<option value="' + grandparent + '"' + selected + '>' + grandparent + '. ' + $(this).children("a").html() + '</option>';
			if($(this).children("ul").children("li").size() >= 1) { //IF GRANDPARENT HAS CHILDREN
				parent = 1;
				$(this).children("ul").children("li").each(function() { //LOOP THROUGH EACH PARENT
					parent_id = grandparent + '-' + parent;
					selected = '';
					if(match_id == parent_id) selected = ' selected="selected"';
					opts += '<option value="' + parent_id + '"' + selected + '>' + parent_id + '. ' + $(this).children("a").html() + '</option>';
					parent = parent + 1;
				});
			}
			grandparent = grandparent + 1;
		});
		$(select_id).html(opts);
		if(match_id == 0) $(".select").html("Home");
	};
})(jQuery);

(function($) {
	$.mirrorOverToList = function(ul_to_mirror, ul_destination, list_content, include_numbers, include_controls) {
		var grandparent = 1;
		var parent = 1;
		var child = 1;
		var list = list_content;
		var utility_list = '';
		var li_start = '<li>';
		var li_end = '</li>';
		var number_start = '<div class="num">';
		var number_end = '</div>';
		var controls = '<img class="handle" src="../images/generator-move.gif" /><img class="edit" src="../images/generator-edit.gif" /><img class="delete" src="../images/generator-delete.gif" /><div class="clear"></div>';
		var utility_num = 1;
		var sortable_class = '';
		if(include_controls == true) sortable_class = ' class="ui-sortable"';
		if(include_controls == true) list += '<ul class="ui-sortable">';
		$("li[alt='utility']").each(function() {
			utility_list += '<li class="-1-' + utility_num + '" rel="-1">';
			if(include_controls == true) list += '<li class="-1-' + utility_num + '" alt="utility" rel="-1">';
			//if(include_numbers == true) list += number_start + grandparent + '. ' + number_end;
			utility_list += '<a href="javascript:;">' + $(this).children("a").html() + '</a>';
			if(include_controls == true) list += '<a href="javascript:;">' + $(this).children("a").html() + '</a>';
			if(include_controls == true) list += controls;
			utility_list += li_end;
			if(include_controls == true) list += li_end;
			utility_num = utility_num + 1;
		});
		if(include_controls == true) list += '</ul>';
		$(ul_to_mirror + " > li:not(.home)").each(function() {
			if($(this).attr("rel") != "-1") {
				grandparent_id = grandparent;
				list += '<li class="' + grandparent_id + '" rel="0">';
				if(include_numbers == true) list += number_start + grandparent + '. ' + number_end;
				list += '<a href="javascript:;">' + $(this).children("a").html() + '</a>';
				if(include_controls == true) list += controls;
				if($(this).children("ul").children("li").size() >= 1) { //IF GRANDPARENT HAS CHILDREN
					list += '<ul' + sortable_class + '>';
					parent = 1;
					$(this).children("ul").children("li").each(function() { //LOOP THROUGH EACH PARENT
						parent_id = grandparent + '-' + parent;
						list += '<li class="' + parent_id + '" rel="' + grandparent_id + '">';
						if(include_numbers == true) list += number_start + parent_id + '. ' + number_end;
						list += '<a href="javascript:;">' + $(this).children("a").html() + '</a>';
						if(include_controls == true) list += controls;
						if($(this).children("ul").children("li").size() >= 1) { //IF PARENT HAS CHILDREN
							list += '<ul' + sortable_class + '>';
							child = 1;
							$(this).children("ul").children("li").each(function() { //LOOP THROUGH EACH CHILD
								child_id = grandparent + '-' + parent + '-' + child;
								list += '<li class="' + child_id + '" rel="' + parent_id + '">';
								if(include_numbers == true) list += number_start + child_id + '. ' + number_end;
								list += '<a href="javascript:;">' + $(this).children("a").html() + '</a>';
								if(include_controls == true) list += controls;
								list += li_end;
								child = child + 1;
							});
							list += '</ul>';
						}
						list += li_end;
						parent = parent + 1;
					});
					list += '</ul>';
				}
				grandparent = grandparent + 1;
			}
		});
		$("#utilityNav").html('').append(utility_list);
		$(ul_destination).html('');
		$(ul_destination).append(list);
		$("#pages, #pages ul, #pages ul ul").sortable({
			handle: ".handle",
			axis: "y",
			update: function() {
				jQuery.mirrorOverToList("#pages", "#primaryNav", '<li class="home 0"><a href="javascript:;">Home</a></li>', false, false);
				jQuery.mirrorOverToList("#primaryNav", "#pages", '', true, true);
			}
		});
	};
})(jQuery);

(function($) {
	$.removeEmptyUls = function(ul_id) {
		$(ul_id).children("ul:empty").remove();
	};
})(jQuery);

(function($) {
	$.deletePage = function(page_id, ul_id) {
		$("." + page_id).remove();
		jQuery.removeEmptyUls(ul_id);
		jQuery.mirrorOverToList(ul_id, "#pages", '', true, true);
		jQuery.mirrorOverToList("#pages", ul_id, '<li class="home 0"><a href="javascript:;">Home</a></li>', false, false);
		var num_of_lis = Math.max($(ul_id + " > li").size() - 1, 4);
		$(ul_id).removeClass().addClass("col" + num_of_lis);
	};
})(jQuery);

(function($) {
	$.addPage = function(ul_id, parent, page_title) {
		var parent_selector = ul_id + " ." + parent;
		var add_to_map = '<li><a href="javascript:;">' + page_title + '</a></li>';
		if(page_title.length >= 1) {
			if(parent == -1) {
				var map_selector = "#utilityNav";
				add_to_map = '<li alt="utility"><a href="javascript:;">' + page_title + '</a></li>';
			}
			else if(parent == 0) {
				var map_selector = ul_id;
			}
			else if($(parent_selector).children("ul").length >= 1) {
				var map_selector = $(parent_selector + " > ul");
			}
			else {
				var map_selector = $(parent_selector);
				add_to_map = '<ul>' + add_to_map + '</ul>';
			}
			$("#home").removeClass("no-bg");
			$(map_selector).append(add_to_map);
			var num_of_lis = Math.max($(ul_id + " > li").size() - 1, 4);
			$(ul_id).removeClass().addClass("col" + num_of_lis);
			jQuery.mirrorOverToList(ul_id, "#pages", '', true, true);
			jQuery.mirrorOverToList("#pages", ul_id, '<li class="home 0"><a href="javascript:;">Home</a></li>', false, false);
			jQuery.showPagePanel();
			jQuery.clearValues();
			jQuery.populateSelectBox("#primaryNav", "#parent", parent);
		}
	};
})(jQuery);

(function($) {
	$.editPage = function(ul_id, page_id, original_parent, new_parent, page_title) {
		$("." + page_id + " > a").html(page_title);
		if(original_parent != new_parent && new_parent != page_id) { //MOVE LI TO NEW PARENT IF PARENT HAS CHANGED
			$("." + page_id).remove();
			jQuery.addPage(ul_id, new_parent, page_title);
		}
		jQuery.showPagePanel();
		jQuery.clearValues();
	};
})(jQuery);

(function($) {
	$.showTooltip = function(right_px, popup_id) {
		$(popup_id).css("right", right_px).fadeIn();
		setTimeout(
			function() {
				$(popup_id).fadeOut();
			},
			3000
		);
	};
})(jQuery);


/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////

$(document).ready(function() {
	jQuery.populateSelectBox("#primaryNav", "#parent", 0);
	$("#sitemap-title").keyup(function() {
		$("#project-info h4").html($(this).val());
	});
	$("#sitemap-version").keyup(function() {
		$("#project-info h5").html($(this).val());
	});
	$("#utilityNav li").attr("alt", "utility");
	jQuery.mirrorOverToList("#primaryNav", "#pages", '', true, true); //If a sitemap is loaded via $_GET['id'], this mirrors to Pages List
	jQuery.mirrorOverToList("#pages", "#primaryNav", '<li class="home 0"><a href="javascript:;">Home</a></li>', false, false); //If a sitemap is loaded via $_GET['id'], this mirrors to Pages List
	
	$("#send-message").click(function() {
		var rand = Math.round(Math.random()*999999);
		$.ajax({
			type: "POST",
			url: "ajax/send-link.php",
			data: 'subject=' + $("#subject").val() + '&recipient=' + $("#recipient").val() + '&message=' + $("#message").html() + '&rand=' + rand,
			success: function(msg) {
				$("#TB_ajaxContent .col-1, #TB_ajaxContent .col-2").fadeOut();
				$("#TB_ajaxContent").append(msg);
			}
		});
	});
	
	$("#pages, #pages ul, #pages ul ul").sortable({
		handle: ".handle",
		axis: "y",
		update: function() {
			jQuery.mirrorOverToList("#pages", "#primaryNav", '<li class="home 0"><a href="javascript:;">Home</a></li>', false, false);
			jQuery.mirrorOverToList("#primaryNav", "#pages", '', true, true);
		}
	});
	
	$("#home").addClass("no-bg");
	
	$("#add-new").click(function() {
		$("#edit-submit").hide();
		$("#add-submit").show();
		jQuery.showActionPanel();
		$("#page-title").focus();
	});
	
	$("#add-submit").click(function() {
		jQuery.addPage("#primaryNav", $("#parent").val(), $("#page-title").val());
	});
	
	$('#page-title').keyup(function(e) {
		if(e.keyCode == 13) {
			if($("#add-submit").is(":visible")) {
				jQuery.addPage("#primaryNav", $("#parent").val(), $("#page-title").val());
			}
			else {
				jQuery.editPage("#primaryNav", $("#page-id").val(), $("#original-parent").val(), $("#parent").val(), $("#page-title").val());
			}
		}
	});	
	
	$(".edit, #pages li a").live("click", function() { //Bring up edit form
		$("#add-submit").hide();
		$("#edit-submit").show();
		$("#page-id").val($(this).parent().attr("class"));
		$("#original-parent").val($(this).parent().attr("rel"));
		$("#page-title").val($(this).parent().children("a").html());
		jQuery.showActionPanel();
		$("#page-title").focus().select();
		$("#parent").val($(this).parent().attr("rel"));
		jQuery.populateSelectBox("#primaryNav", "#parent", $(this).parent().attr("rel"));
	});
	
	$("#edit-submit").click(function() { //Edit form is submitted
		jQuery.editPage("#primaryNav", $("#page-id").val(), $("#original-parent").val(), $("#parent").val(), $("#page-title").val());
	});
	
	$("#cancel").click(function() {
		jQuery.showPagePanel();
		jQuery.clearValues();
	});
	
	$(".delete").live("click", function() {
		if($(this).parent().attr("rel") == "-1") {
			var page_id = $(this).parent().attr("class");
			$("." + page_id).remove();
		}
		else {
			jQuery.deletePage($(this).parent().attr("class"), "#primaryNav");
		}
		jQuery.populateSelectBox("#primaryNav", "#parent", 0);
	});
});