function createXMLHttpRequest() {
//Attempts the xmlhttprequest in various browsers
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
	try { return new XMLHttpRequest(); } catch(e) {}
	alert("XMLHttpRequest not supported");
	return null;
}

function addTagField () {
//Adds additional tag fields on additem page.
	var linebreak = document.createElement("br");
	var input = document.createElement("input");
	numtags++;
	input.setAttribute("id","tag"+numtags);
	var tr = document.getElementById("tagfields");
	tr.appendChild(linebreak);
	tr.appendChild(input);
}

function addFriendField () {
//Adds additional friend fields on addgroup page.
	var linebreak = document.createElement("br");
	var input = document.createElement("input");
	numfriends++;
	input.setAttribute("id","friend"+numfriends);
	var tr = document.getElementById("friendfields");
	tr.appendChild(linebreak);
	tr.appendChild(input);
}

function getUserName() {
//Fills in the username at the top of the page. If a login expires or a user otherwise doesn't belong they are shunted to the front page.
	var req = createXMLHttpRequest();
	req.open("post", "/php/getusername.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		eval(req.responseText);
		if (success==true) {
			document.getElementById("disp_username").appendChild(document.createTextNode(username));
		} else if (loginfailure==true) location.href = "/index.html";
	};
	req.send("");
}

function getGroup () {
//Queries list of nodes to populate dropdown in additem
	var req = createXMLHttpRequest();
	req.open("post", "/php/getgroupbyuser.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		displayGroupInSelect(req.responseText);
	};
	
	req.send("");
}

function displayGroupInSelect(response) {
//Creates aforementioned dropdown option menu.
	var selectbox = document.getElementById("group");
	while(document.getElementById('group').hasChildNodes()) document.getElementById('group').removeChild(document.getElementById('group').firstChild);
	eval(response);
	for (var i=0; i<groupid.length; i++) {
		var option = document.createElement("option");
		option.setAttribute("value",groupid[i]);
		option.appendChild(document.createTextNode(grouptitle[i]));
		selectbox.appendChild(option);
	}
}

function logoutSubmit () {
//Queries server to indicate logout has occurred.
	var req = createXMLHttpRequest();
	req.open("post", "/php/logout.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		logoutActions(req.responseText);
	};
	req.send("logout=true");
}

function logoutActions (response) {
//After logout returns user to front page.
	eval(response);
	if(success) location.href = "/index.html";
}

function loginSubmit (form) {
//Queries server with login information. If valid server performs server-side login vitals.
	var username = document.getElementById("username").value;
	var password = document.getElementById("password").value;
	
	var req = createXMLHttpRequest();
	req.open("post", "/php/login.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		loginActions(req.responseText);
	};
	req.send("username=" + username + "&password=" + password);
}

function loginActions (response) {
//After login sends user to main workspace.
	eval(response);
	if (success==true) {
		location.href = "/snippity.html";
	} else handleLoginErrors(message);
}

function handleLoginErrors (message) {
//Alerts user of login errors in situ.
	document.getElementById("error").appendChild(document.createTextNode(message));
}

function addgroupSubmit () {
//Parses form data and sends to server to register new group.
	//get the values from the form
	var title = document.getElementById("title").value;
	var description = 'null'; //document.getElementById("description").value;
	var comment = 'null'; //document.getElementById("comment").value;
	var tags = "";
/*	for (var i=1; i<=numtags; i++) {
		if (i>1) tags += ",";
		tags += document.getElementById("tag"+i).value;
	} */
	var friends = "";
	for (var j=1; j<=numfriends; j++) {
		if (j>1) friends += ",";
		friends += document.getElementById("friend"+j).value;
	}
	
	var req = createXMLHttpRequest();
	req.open("post", "/php/addgroup.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		eval(req.responseText);
		if (success==true) {
			location.href = "/additem.html";
		} else alert(message);
	};
	req.send("title="+title+"&description="+description+"&comment="+comment+"&tags="+tags+"&members="+friends);
}

function additemSubmit () {
//Parses form data and sends to server to register new item.
	//get the values from the form
	var url = document.getElementById("url").value;
	var title = document.getElementById("title").value;
	var description = document.getElementById("description").value;
	var comment = document.getElementById("comment").value;
	var tags = "";
	for (i=1; i<=numtags; i++) {
		if (i>1) tags += ",";
		tags += document.getElementById("tag"+i).value;
	}
	var group = document.getElementById("group").value;

	var req = createXMLHttpRequest();
	req.open("post", "/php/additem.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		itemSubmitActions(req.responseText);
	};
	req.send("url="+url+"&title="+title+"&description="+description+"&comment="+comment+"&tags="+tags+"&user="+group+"&usertype=group");
}

function itemSubmitActions (response) {
//Reacts to item submission; on success alerts user in situ and resets form.
	eval(response);
	if (success) {
		var message_area = document.getElementById("item_message");
		while(message_area.hasChildNodes()) message_area.removeChild(message_area.firstChild);
		message_area.appendChild(document.createTextNode("Your snipp has been added."));
		document.getElementById("additem").reset();
	} else {
		var message_area = document.getElementById("item_message");
		while(message_area.hasChildNodes()) message_area.removeChild(message_area.firstChild);
		message_area.appendChild(document.createTextNode("There was a problem adding your snipp."));
	}
}

function signupSubmit () {
//Parses form data and sends to server to register new user.
	//get the values from the form
	var username = document.getElementById("username").value;
	var password = document.getElementById("password").value;
	var pconfirm = document.getElementById("confirm").value;
	var email = document.getElementById("email").value;

	var req = createXMLHttpRequest();
	req.open("post", "/php/signup.php", true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	
	req.onreadystatechange = function() {
		if (req.readyState != 4) { return; }
		eval(req.responseText);
		if (success==true) {
			location.href = "/addgroup.html";
		} else handleSignupErrors(errors);
	};
	
	req.send("username="+username+"&password="+password+"&confirm="+pconfirm+"&email="+email);
}

function handleSignupErrors(errors) {
//Receives errors from registration and displays in situ.
	for (var i=0; i<errors.length; i++) {
		var span = document.getElementById("error"+i);
		while(span.hasChildNodes()) span.removeChild(span.firstChild);
		span.appendChild(document.createTextNode(errors[i]));
	}
}