var sorting_elements;
window.addEventListener("load", prepare_to_sort, false);

function prepare_to_sort() {
	sorting_elements = new Array();
	var sorting_buttons_up_one = document.getElementsByClassName("sorting_element_up_one");
	var sorting_buttons_up_max = document.getElementsByClassName("sorting_element_up_max");
	var sorting_buttons_down_one = document.getElementsByClassName("sorting_element_down_one");
	var sorting_buttons_down_max = document.getElementsByClassName("sorting_element_down_max");
	while(sorting_buttons_up_one.length > 0) {sorting_buttons_up_one[0].parentNode.removeChild(sorting_buttons_up_one[0]);}
	while(sorting_buttons_up_max.length > 0) {sorting_buttons_up_max[0].parentNode.removeChild(sorting_buttons_up_max[0]);}
	while(sorting_buttons_down_one.length > 0) {sorting_buttons_down_one[0].parentNode.removeChild(sorting_buttons_down_one[0]);}
	while(sorting_buttons_down_max.length > 0) {sorting_buttons_down_max[0].parentNode.removeChild(sorting_buttons_down_max[0]);}
	var sorting_elements_all = document.getElementsByClassName("sorting_element");
	for(var i = 0; i < sorting_elements_all.length; i++) {
		if(sorting_elements_all[i].getElementsByClassName("sorting_element_up_one").length == 0) {
			var sorting_elements_sub = sorting_elements_all[i].parentNode.getElementsByClassName("sorting_element");
			sorting_elements[sorting_elements.length] = new Array();
			for(var ii = 0; ii < sorting_elements_sub.length; ii++) {
				if(sorting_elements_sub[ii].parentNode == sorting_elements_all[i].parentNode) {
					sorting_elements[sorting_elements.length - 1][sorting_elements[sorting_elements.length - 1].length] = sorting_elements_sub[ii];
					var up_one = sorting_elements_sub[ii].appendChild(document.createElement("a"));
					var up_max = sorting_elements_sub[ii].appendChild(document.createElement("a"));
					var down_one = sorting_elements_sub[ii].appendChild(document.createElement("a"));
					var down_max = sorting_elements_sub[ii].appendChild(document.createElement("a"));
					up_one.className = "sorting_element_up_one";
					up_max.className = "sorting_element_up_max";
					down_one.className = "sorting_element_down_one";
					down_max.className = "sorting_element_down_max";
					up_one.addEventListener("click", function() {sort_it(this.parentNode, -1);}, false);
					up_max.addEventListener("click", function() {sort_it(this.parentNode, 0 - Infinity);}, false);
					down_one.addEventListener("click", function() {sort_it(this.parentNode, 1);}, false);
					down_max.addEventListener("click", function() {sort_it(this.parentNode, Infinity);}, false);
				}
			}
		}
	}
	for(var i = 0; i < sorting_elements.length; i++) {
		if(sorting_elements[i].length == 1) {
			sorting_elements[i][0].className += " sorting_element_single";
		} else {
			for(var ii = 0; ii < sorting_elements[i].length; ii++) {
				sorting_elements[i][ii].className = sorting_elements[i][ii].className.replace(" sorting_element_single", "");
			}
		}
	}
}
function sort_it(sorting_element, sorting_value) {
	var sorting_family_index = -1;
	var sorting_element_index = -1;
	for(var i = 0; i < sorting_elements.length; i++) {sorting_element_index = sorting_elements[i].indexOf(sorting_element); if(sorting_element_index != -1) {sorting_family_index = i; break;}}
	if(sorting_family_index > -1 && sorting_element_index > -1) {
		var sorting_element_index_new = Math.min(sorting_elements[sorting_family_index].length - 1, Math.max(sorting_element_index + sorting_value, 0));
		sorting_element.parentNode.insertBefore(sorting_element, sorting_elements[sorting_family_index][sorting_element_index_new]);
		if(sorting_value > 0) {sorting_element.parentNode.insertBefore(sorting_elements[sorting_family_index][sorting_element_index_new], sorting_element);}
		sorting_elements[sorting_family_index].splice(sorting_element_index, 1);
		sorting_elements[sorting_family_index].splice(sorting_element_index_new, 0, sorting_element);
	}
}
