// Create a cookie
function createCookie(name, value, hours) {
	if (hours) {
		//var date = new Date();
		//date.setTime(date.getTime()+(hours*60*60*1000));
		//var expires = "; expires=0"+date.toGMTString();
	}
	else {
		//var expires = "";
	}
	 var exp = new Date(); 
	 exp.setTime(exp.getTime() + 1800000); 
	 // first write a test cookie 
	 setCookie(name, value, exp, "/", false, false); 
	//document.cookie = name+"="+value+expires+"; path=/";
}


	
	function setCookie(name, value, expires, path, domain, secure) { 
	 var curCookie = name + "=" + value + 
		((expires) ? "; expires=" + expires.toGMTString() : "") + 
	((path) ? "; path=" + path : "") + 
	((domain) ? "; domain=" + domain : "") + 
	((secure) ? "; secure" : ""); 
	document.cookie = curCookie; 
}


// Return the contents of the specified cookie
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

// Delete the specified cookie
function eraseCookie(name) {
	createCookie(name,"",-1);
}

// Returns the position of the firrst occurance of needle in the suplied array
function arrPos(arr, needle) {
	var length = arr.length;
	for (var i=0; i<length; i++) {
		if (arr[i] == needle) {
			return i;
		}
	}
	return -1;
}

// Switch the state of a node by showing/hiding its children
// When a node is opened it is also marked as opened in the openNodes cookie
// so that the menu can keep its state betwen page reloads etc. 
function switchNode(arg) {
	// Get arguments from arg
	var argarr = arg.split(":");
	var id = argarr[0];
	var group = argarr[1];

	id = id.substr(5, 6);						// remove the 'layer' prefix
	group = group.substr(11, 6);				// remove the 'groupparent' prefix
	var newNode = id + ':' + group;				// create the name of the node as it should be saved in the cookie

	if(document.getElementById(arg).style.display == 'none') {
		// Show the relevant layer and switch opened/closed indicator layer from closed to opened
		document.getElementById(arg).style.display = 'block';

		// inactivate previous active node
		if (id == group)
		{
		var activeNode = readCookie('activeNode');
		if (document.getElementById('table' + activeNode)) {
			document.getElementById('table' + activeNode).className = 'inactivetextdelimiter';
		} else if (document.getElementById('link' + activeNode)) {
			document.getElementById('link' + activeNode).className = 'inactivenode';
		}

		// activate new active node
		if (document.getElementById('table' + id)) {
			document.getElementById('table' + id).className = 'activetextdelimiter';
		} else if (document.getElementById('link' + id)) {
			document.getElementById('link' + id).className = 'activenode';
		}

		// save the new active node
		createCookie('activeNode', id, 1);
		}

		//document.getElementById(id + 'plus').style.display = 'none';
		//document.getElementById(id + 'minus').style.display = 'inline';

		// Add the clicked node swto the cookie of opened nodes
		var openNodes = readCookie('openNodes');	// load the cookie
		if (openNodes == null || openNodes.length == 0) {	// check if the openNodes cookie is empty
			openNodes = newNode;
		} else {
			var newGroup = 0;	// flag that is set to 1 if the clicked node happens to be of a new group
			var openNodesArr = openNodes.split(',');	// explode the opennodes cookie
			var openNodesNumber = openNodesArr.length;	// determine the number of open nodes
			for (var i=0; i<openNodesNumber; i++) {		// itterate over all open nodes
				var currentNodeArr = openNodesArr[i].split(':');	// explode current node into id and group
				var currentNodeGroup = currentNodeArr[1];			// save the group of the current node
				if (currentNodeGroup != group) {					// check if we clicked a node of a new group
					for (j=0; j<openNodesNumber; j++) {				// itterate over all open nodes in order to close them
						currentNodeArr = openNodesArr[j].split(':');// explode the current node into id and group
						currentNodeId = currentNodeArr[0];			// save the id of the current node
						currentNodeGroup = currentNodeArr[1];		// save the group of the current node
						if (document.getElementById('layer' + currentNodeId + ':' + 'groupparent' + currentNodeGroup))
							document.getElementById('layer' + currentNodeId + ':' + 'groupparent' + currentNodeGroup).style.display = 'none';	// hide the node in the menu
					}
					openNodes = newNode;							// save the newNode in the openNodes cookie
					newGroup = 1;									// a node of a new group has been klicked, new group flag is raised
					break;											// break the loop, we only need to find one node of a group that differs from those in openNodes
				}
			}
			if (newGroup == 0) {						// if the klicked node is of the same group as previous nodes just append the new node to the openNodes cookie
				openNodes = openNodes + ',' + newNode;	// add the clicked node to the cookie of clicked nodes (comma seperated)
			}
		}

		createCookie('openNodes', openNodes, 1);	// save the new array of clicked nodes as a cookie
	} else {
		if (id == group) {
		// inactivate previously active node if it is the clicked node
		var activeNode = readCookie('activeNode');
		if (id == activeNode) {
			if (document.getElementById('table' + activeNode)) {
				document.getElementById('table' + activeNode).className = 'inactivetextdelimiter';
			} else if (document.getElementById('link' + activeNode)) {
				document.getElementById('link' + activeNode).className = 'inactivenode';
			}
			eraseCookie('activeNode');
		}
		}

		// Hide the relevant layer and switch opened/closed indicator layer from opened to closed
		document.getElementById(arg).style.display = 'none';
		//document.getElementById(id + 'minus').style.display = 'none';
		//document.getElementById(id + 'plus').style.display = 'inline';

		// Remove the clicked node from the array of opened nodes
		var openNodes = readCookie('openNodes');	// load the cookie
		if ((openNodes != null) && (openNodes.length != 0)) {
			openNodes = openNodes.split(',');		// explode the string 
			var pos = arrPos(openNodes, newNode);// find out the position of the clicked node in our array of clicked nodes
			openNodes.splice(pos, 1);				// remove the clicked node from the array

			// Save the new cookie
			createCookie('openNodes', openNodes, 1);// save the new array of clicked nodes as a cookie
		}
	}
}

function switchLayer(id) {
	if(document.getElementById(id).style.display == 'none') {
		// Show the layer
		document.getElementById(id).style.display = 'inline';
	} else {
		// Hide the layer
		document.getElementById(id).style.display = 'none';
	}
}

function resetMenu() {
	var openNodes = readCookie('openNodes');	// load the cookie

	if ((openNodes != null) && (openNodes.length != 0)) {	// check if the openNodes cookie is empty
		openNodes = openNodes.split(',');
		var len = openNodes.length;

		for (var i=0; i<len; i++) {
			document.getElementById('layer' + openNodes[i]).style.display = 'none';
			//document.getElementById('layer' + openNodes[i] + 'plus').style.display = 'inline';
			//document.getElementById('layer' + openNodes[i] + 'minus').style.display = 'none';
		}
		eraseCookie('openNodes');
	}
}

function openParentURL(id, url) {
	if(document.getElementById(id).style.display != 'none') {
		if (url != '#') {
			location.href = url;
		}
	}
}

function changeLanguage(refer_to, form_name) {
	box = document.getElementById(form_name);
	language = box.options[box.selectedIndex].value;
	
	// Check if the language has an override link
	function successHandler(obj) {
		if (obj.responseText == '') {
			eraseCookie('openNodes');
			location.href = 'changelanguage.php?language=' + language + '&refer_to=' + refer_to;
		} else {
			location.href = obj.responseText;
		}
	}

	function failureHandler(obj) {
		alert("Request failed (" + obj.statusText + ")");
	}

	if (language) {
		YAHOO.util.Connect.asyncRequest('GET', 'getoverrideurl.php?language=' + language, {success:successHandler, failure:failureHandler});
	}
}


function switchNodeForms() {
	box = document.getElementById('swapForms');
	selected = box.options[box.selectedIndex].value;
	if (selected == 'non_image_form') {
		non_image_form.style.display = 'block';
		image_form.style.display = 'none';
	} else {
		non_image_form.style.display = 'none';
		image_form.style.display = 'block';
	}
}

function _popup(url, window_name, width, height) {
	window.open(url, window_name, 'width=' + width + ',height=' + height);
}

function popup_map() {
	_popup('bot-map/index.php?m=map&p=show&display=1&id=1&language=82', 'bot_maps', 1000, 780);
}

function popup(url, window_name, width, height) {
	_popup(url, window_name, width, height);
}