var reorder_status = false;
var reorder_src_node = null;

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

function menunode(myname,myid,myshow_children,myparent){
	var name, show_children, id;
	var children;
	var inherited_folding;
	var parent;
	
	this.parent = myparent;
	this.name   = myname;
	this.id     = myid;
	this.children = new Array();
	this.show_children = myshow_children;
}
function reorder(id_tag){
	if(reorder_status) reorder_commit(id_tag);
	else reorder_start(id_tag);
}

function reorder_start(id_tag){
	reorder_src_node = get_menu_node(id_tag, 0);
	var parent_node = get_menu_node(id_tag, 1);
	
	var node_id = ('reorder_' + reorder_src_node.id);
	var parent_node_id = ('reorder_' + parent_node.id);
	var children = parent_node.children;
		
	var menu_list = structure2array(menuroot.children[0]);

	for(var i=0, menu_item; menu_item = menu_list[i]; i++){
		if('reorder_'+menu_item.id == node_id){
			$('reorder_'+menu_item.id).className = 'reorder_src';
		} else {
			
			var found = false;		
			for(var c=0, child; child = children[c]; c++){
				if(menu_item.id == child.id){
					$('reorder_'+child.id).className = 'reorder_target';
					found=true;
					break;
				}
			}
			
			if(!found) $('reorder_'+menu_item.id).className = 'reorder_unreachable';
		}
	}
	reorder_status = true;
}

function reorder_commit(id_tag){
	var target_node = get_menu_node(id_tag);
	reorder_status=false;
	var menu_list = structure2array(menuroot.children[0]);
	
	var reorder_target_node = get_menu_node(id_tag);
	
	if($('reorder_'+target_node.id).className == 'reorder_target'){
		reorder_finish(id_tag.split("_")[0], reorder_src_node.id, reorder_target_node.id);
	}
	
	for(var i=0, menu_item; menu_item = menu_list[i]; i++){
		$('reorder_'+menu_item.id).className = 'reorder';
	}
	reorder_src_node = null;
	
}

function reorder_finish(table_index, from_id, to_id){
	location.href = '?menu_reorder='+table_index+','+from_id+','+to_id + '&folding='+(get_folding_string());
}

function delete_node(id_tag, confirm_message){
	var node = get_menu_node(id_tag);
	if(confirm(confirm_message)) location.href = '?menu_delete_node='+id_tag.split("_")[0]+','+node.id + '&folding='+(get_folding_string());
}

function create_node(id_tag){
	var node = get_menu_node(id_tag);
	location.href = '?menu_create_node='+id_tag.split("_")[0]+','+node.id + '&folding='+(get_folding_string());
}


function structure2array(struct){
	var children = struct.children;
	for(var i=0, child; child = struct.children[i]; i++){
		if(child.children.length > 0) children = children.concat(structure2array(struct.children[i]));
	}
	return children;
}


function get_menu_node(id_tag, levels2skip){
	var menu_path = id_tag.split("_");
	var node = menuroot;
	if(levels2skip == null) levels2skip = 0;
	
	for(var i = 0, current_path; current_path = menu_path[i]; i++){
		//alert(current_path);
		//node = node.children[current_path];
	}
	//alert('get_menu_node  skip: ' + levels2skip);
	for(var i = 0; i < ((menu_path.length) - levels2skip); i++){
		//alert(menu_path[i]);
		node = node.children[menu_path[i]];
	}
	//alert(node.name);
	return node;
}

function get_folding_string_recursive(node, inherited_show){
	// give a string telling which tr's to show
	var str=" ";
	//alert(node.name + ": " +node.show_children + " inherited_show: " + inherited_show);
	if(node.id && node.id != ""){
		str += node.id + ":"
		
	 	str += (!node.show_children || !inherited_show) ? '0' : '1';
		//str += (show) ? '1' : '0';
	}
	for(var i=0, child; child = node.children[i]; i++){
		var show_mode = ((!node.show_children || !inherited_show) && node.name != 'root') ? false : true;
		str += " "+get_folding_string_recursive(child, show_mode);
		//str += ""+get_folding_string_recursive(child);
	}
	return str;
}

function get_folding_string(){
	/*
	var folding_str = "";
	for(var i=0, rootchild; rootchild = menuroot.children[i]; i++){
		folding_str += get_folding_string_recursive(rootchild);
		//for(var j=0, child; child = rootchild.children[j]; j++){
			//folding_str += get_folding_string_recursive(child);
		//}
	}
	return trim(folding_str).replace(/\s+/g, ",");
	*/
	return trim(get_folding_string_recursive(menuroot, true)).replace(/\s+/g, ",");
}


function load_targets(menu_table_id, child_id, target_id){
	
	var url = 'menu_table_id=' + menu_table_id + '&id=' + child_id;
	if(target_id) url += '&target_id=' + target_id;
	
	//location.href=url+ "&folding="+get_folding_string();
	$('logo').src = ew_version + '/resources/image/ew_anim.gif';
	$('targets').style.display = 'none';
	$('mainpage').style.display = 'none';
	$('targets').className = 'target_bkg';
	//id = url.replace(/.*\&id=(\d*).*/,"$1"),
	var complete_url = "index.php?" + url + "&loadtargets=1&folding="+get_folding_string();

	window.status = "Loading...";
	new Ajax.Request(complete_url,
	  {
	    method:'get',
	    onSuccess: function(transport){

				var response = transport.responseText || "no response text";
				$('targets').innerHTML = response;
			
				var param = response.match(/<!-- load_page_script_param\((.*)\) -->/);
				window.status = "Loading done";
				new Effect.Appear($('targets'), {duration: 0.3});
				load_pagecontent(param[1]);
				
				window.setTimeout('set_static_logo()', 800);
	    },
	    onFailure: function(){ 
				alert('Something went wrong...');
				set_static_logo();
				window.status = "Loading failed";
			}
	  });


	//$('targets').style.display = '';

}

function set_static_logo(){
	$('logo').src = ew_version + '/resources/image/dcms.gif';
}

function set_folding(box, id_tag){
	var node = get_menu_node(id_tag);
		
	if(node.children != null && node.children.length > 0){
		// set the value to the opposite to the current one
		node.show_children     = !node.show_children;
		node.inherited_folding = !node.show_children;
		
		if(box.nodeName != 'IMG'){
			box = $(box).previous();
		}
		
		if(node.show_children){
			box.src = 'resources/icon/minus.gif';
		} else {
			box.src = 'resources/icon/plus.gif';
		}
		
		var first_level_node = node;
		while(first_level_node.parent && first_level_node.parent.name != 'root'){
			first_level_node = first_level_node.parent;
		}
		
		// set all other first-level-menus's folding boxes to plus
		for(var i=0, child; child = menuroot.children[i]; i++){
			if(child != first_level_node){
				if(child.show_children){
					var box_id = 'box' + child.id;
					$(box_id).src = 'resources/icon/plus.gif';
				}
				child.show_children = false;
				child.inherited_folding = true;
				
			}
			set_folding_recursive(child);
		}
		
		//set_folding_recursive(node);
		
	}
}

function set_folding_and_load(box, id_tag, url){
	set_folding(box, id_tag);
	//id = child_id;
	//var url = 'index.php?menu_table_id=' + menu_table_id + '&id=' + id;
	//load_targets(menu_table_id, child_id);
	url += "&menu_folding=" + get_folding_string();
	location.href = url;
}

function set_folding_recursive(virtual_node){
	for(var i=0, virtual_child_node; virtual_child_node = virtual_node.children[i]; i++){
		virtual_child_node.inherited_folding = virtual_node.inherited_folding;
		
		var node = document.getElementById('menu_row_'+virtual_child_node.id);
		node.style.display = (virtual_node.show_children && !virtual_child_node.inherited_folding) ? '' : 'none';
		set_folding_recursive(virtual_child_node);
	}
	return;
}