/**
 * A set of javascript functions (held together by the "Group" namespace),
 * that deal with creating and managing groups of users for the ajax gui.
 */

var Groups = new function() {

	var commandRun = false;
	// var command = null;  // Command to run on first time groups are closed

	this.manageGroups = function() {
		setVisibility("AppletDiv", false);
		
		setDisplay("ComponentsDiv", false);
		setDisplay("GroupsDiv", true);
		setDisplay("manageGroupsSpan", false);
		expandGroupDiv();
		layoutGroupManager();  // This is created in the GWT code
	}

	function expandGroupDiv() {
		var groupsE = document.getElementById("GroupsDiv");
		  
		var dim = getFrameDimensions();
		if(dim == null || dim.frameWidth == -1 || dim.frameHeight == -1) {
			return;
		}
		var frameWidth = dim.frameWidth;
		var frameHeight = dim.frameHeight;
		  
		if (groupsE) {
			groupsE.style.position = 'absolute';
		  	groupsE.style.top = 0 + "px";
		  	groupsE.style.left =  0 + "px";
		  	groupsE.style.width =  frameWidth + "px";
		  	groupsE.style.height = frameHeight + "px";
		}	
	}
	
	this.setCommand = function(c) {
		// command = c; 
	}
	
	this.closeGroups = function() {
		if (!commandRun) {
			//eval(command);
			commandRun = true;
		}

		setVisibility("AppletDiv", true);

		setDisplay("GroupsDiv", false);
		setDisplay("ComponentsDiv", true);

		setDisplay("manageGroupsSpan", true);
	}
	
	this.getGroupInfo = function(gid) {
		var url = "login?operation=getgroupinfo&gid=" + gid;

		var request = newXMLRequest();
		request.open('GET', url , false);
		request.send(null);

		if(request.readyState == 4) {
			if(request.status == 200) {
				var xmldoc = request.responseXML;
				var resultN = xmldoc.getElementsByTagName('result')[0];
				
				if (resultN) {
					return resultN; 
				}
				else {
					return null;
				}
			}
		}
	}
	
	this.layoutLoginSpans = function(gid) {
		var resultN = this.getGroupInfo(gid);

		if (resultN) {
			var groupname = resultN.getAttribute("name");
			var gid = resultN.getAttribute("gid");
			var leaderuid = resultN.getAttribute("leaderuid");
			
			var groupNameLoginSpanE = document.getElementById("groupNameLoginSpan");
			var groupNameSignupSpanE = document.getElementById("groupNameSignupSpan");
			
			this.clearChildren(groupNameLoginSpanE);
			this.clearChildren(groupNameSignupSpanE);
			
			groupNameLoginSpanE.appendChild(document.createTextNode(" for " + groupname)); 
			groupNameSignupSpanE.appendChild(document.createTextNode(" for " + groupname)); 
		}
		else {
			alert("The group your are trying to access is invalid.  Check the URL and try again.");
		}
	}

	this.clearChildren = function(e) {
		while(e.childNodes && e.childNodes.length > 0) {
			e.removeChild(e.childNodes[0]);
		}
	}

	function setDisplay(elementID, value) {
		try {
			var display = (value) ? '' : 'none';
			var elementE = document.getElementById(elementID);
			elementE.style.display = display;
		}
		catch (e) {
			alert("Error displaying " + elementID);
		}
	}
	
	function setVisibility(elementID, value) {
		try {
			var visible = (value) ? 'visible' : 'hidden';
			var elementE = document.getElementById(elementID);
			
			if (elementE) {
				elementE.style.visibility = visible;
			}
		}
		catch (e) {
			alert("Error setting visibility on " + elementID + " " + e);
		}
	}
}