function createRequestObj()
{
	var xmlhttp = false;
	
	try
	{
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	}
	catch(e)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e)
		{
			xmlhttp = false;
		}
	}
	
	
	if(!xmlhttp && typeof XMLHttpRequest != 'undefined')
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch(e)
		{
			xmlhttp = false;
		}
	}
	if(!xmlhttp && window.createRequest)
	{
		try
		{
			xmlhttp = window.createRequest();
		}
		catch(e)
		{
			xmlhttp = false;
		}
	}

	return xmlhttp;
}

function fillChildren(el, response)
{
	while(el.childNodes.length > 0)
		el.removeChild(el.childNodes[0]);
	if(document.importNode)
	{
		for(var node = response.responseXML.documentElement.childNodes[0]; node != null; node = node.nextSibling)
		{
			el.appendChild(document.importNode(node, true));
		}
	}
	else if(el.outerHTML)
	{
		el.outerHTML = response.responseText.replace(/<\?.*\?>/g, '');
	}
	else
	{
		//unsupported?
	}

	if(el.innerHTML)
	{
		//moz bug
		el.innerHTML = el.innerHTML + "";
	}
}

function fill(el, response)
{
	while(el.childNodes.length > 0)
		el.removeChild(el.childNodes[0]);
	if(document.importNode)
	{
		el.appendChild(document.importNode(response.responseXML.documentElement, true));
		
	}
	else if(el.outerHTML)
	{
		el.innerHTML = response.responseText.replace(/<\?.*\?>/g, '');
	}
	else
	{
		//unsupported?
	}

	if(el.innerHTML)
	{
		//moz bug
		el.innerHTML = el.innerHTML + "";
	}
}

var currentError = null;

function createError(el, msgNode, msgText)
{
	//alert("Making error block");
	var errorElement = document.createElement("div");
	errorElement.className = "formError";
	//errorElement.style.display = "none";
	errorElement.style.mozOpacity = "0.0";
	errorElement.style.opacity = "0.0";
	errorElement.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
	
	if(msgNode.xml && errorElement.innerHTML)
	{
		errorElement.innerHTML = msgNode.xml;
	}
	else if(document.importNode)
	{
		for(n = 0; n < msgNode.childNodes.length; n++)
			errorElement.appendChild(document.importNode(msgNode.childNodes[n], true));
	}
	else if(errorElement.innerHTML)
	{
		errorElement.innerHTML = msgText;
	}
	else
	{
		//unsupported?
	}
	
	if(errorElement.innerHTML) //moz bug
		errorElement.innerHTML = errorElement.innerHTML + ""
	
	if(el.childNodes.length > 0)
	{
		el.insertBefore(errorElement, el.childNodes.item(0));
	}
	else
	{
		el.appendChild(errorElement);
	}
	//alert("Added error block");
	if(currentError)
	{
		currentError.parentNode.removeChild(currentError);
	}
	new Effect.Appear(errorElement, { duration: 1.0 });
	currentError = errorElement;
	
}

function createSuccess(el, msgNode, msgText)
{
	//alert("Making error block");
	var errorElement = document.createElement("div");
	errorElement.className = "formSuccessMsg";
	//errorElement.style.display = "none";
	errorElement.style.mozOpacity = "0.0";
	errorElement.style.opacity = "0.0";
	errorElement.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
	
	if(msgNode.xml && errorElement.innerHTML)
	{
		errorElement.innerHTML = msgNode.xml;
	}
	else if(document.importNode)
	{
		for(n = 0; n < msgNode.childNodes.length; n++)
			errorElement.appendChild(document.importNode(msgNode.childNodes[n], true));
	}
	else if(errorElement.innerHTML)
	{
		errorElement.innerHTML = msgText;
	}
	else
	{
		//unsupported?
	}
	
	if(errorElement.innerHTML)	//moz bug
		errorElement.innerHTML = errorElement.innerHTML + "";
	
	if(el.childNodes.length > 0)
	{
		el.insertBefore(errorElement, el.childNodes.item(0));
	}
	else
	{
		el.appendChild(errorElement);
	}
	//alert("Added error block");
	
	if(currentError && currentError.parentNode)
		currentError.parentNode.removeChild(currentError);
	new Effect.Appear(errorElement, { duration: 1.0 });
	
	errorElement.style.marginTop = (-1 * Math.round(errorElement.offsetHeight / 2)) + "px";
	
	
	currentError = errorElement;
	
}

function handleForm(form)
{
	var xmlhttp = createRequestObj();
	
	var data = Form.serialize(form) + "&ajax=true";
	
	form.className = "working";
	
	xmlhttp.open("POST", "/action/handle", true);
	
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			

			text = xmlhttp.responseText;
			//alert(text);
			doc = xmlhttp.responseXML;
			if(!doc)
			{
				//alert("Comm error");
				//document.body.innerHTML = text;
				createError(form, null, "Parse error");
				form.className = "";
			}
			else if((errs = doc.documentElement.getElementsByTagName("error")).length != 0)
			{
				//alert("Server sent error message: " + errs[0]);
				createError(form, errs[0], text);
				form.className = "";
			}
			else
			{
				//alert(doc.getElementsByTagName("error").length);
				//alert("Success I think");
				form.className = "success";
				form.style.height = form.offsetHeight + "px";
				form.style.width = form.offsetWidth + "px";
				//form.innerHTML = "";
				createSuccess(form, doc.documentElement.getElementsByTagName("success")[0], text);
				if(form.id == "LoginForm")
				{
					ReloadMenu();
					document.getElementById("LoginForm").style.height = "40px";
					document.getElementById("LoginForm").style.width = "200px";
					setTimeout("Effect.SlideUp('LoginFormBox', {duration: 1.0})", 2000);
				}
				
			}
			

		}
	}
	
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.send(data);
}

var loginShowing = false;

function ShowLogin()
{
	var loginBox = document.getElementById("LoginFormBox");
		if(loginBox && loginBox.style)
			loginBox.style.display = "block";
	
	loginShowing = true;
}

function hideLogin()
{
	Effect.SlideUp('LoginFormBox', {afterFinish: function() { document.getElementById("LoginForm").parentNode.removeChild(document.getElementById("LoginForm")); loginShowing = false}});
}

function ReloadMenu()
{
	var xmlhttp = createRequestObj();
	
	xmlhttp.open("POST", "/components/menu", true);
	
	
	
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			//alert(xmlhttp.responseText);
			fillChildren(document.getElementById("navlinks"), xmlhttp);
		}
	}
	
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.send("currentPage=" + currentPage);


}

function inPlaceEdit(el)
{
	if(el.className.indexOf("editing") != -1)
		return;
	spanText = el.getElementsByTagName("span")[0].childNodes[0].nodeValue;
	el.getElementsByTagName("input")[0].value = spanText;
	el.className += " editing";
	el.getElementsByTagName("input")[0].focus();
}

function inPlaceUpdate(el, f_action, f_operation, updateFrom)
{
	el.parentNode.getElementsByTagName("span")[0].childNodes[0].nodeValue = el.value;
	
	el.parentNode.className = el.parentNode.className.replace(" editing", "");
	
	var xmlhttp = createRequestObj();
	
	xmlhttp.open("POST", "/action/handle");
	
	var data = "action=" + f_action + "&operation=" + f_operation + "&" + el.name + "=" + el.value.replace("&", "%26") + "&updateFrom=" + updateFrom;
	//alert(data);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			new Effect.Highlight(el.parentNode);
			//alert(xmlhttp.responseText);
		}
	}
	
	xmlhttp.send(data);
	
	
}

function setRating(el, id, rating)
{
	var xmlhttp = createRequestObj();
	
	xmlhttp.open("POST", "/action/handle");
	
	var data = "action=Blogebrity&operation=setRating&id=" + id + "&rating=" + rating;
	
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			//alert(xmlhttp.responseText);
			pn = el.parentNode;
			for(i = 0; i < pn.childNodes.length; i++)
			{
				if(pn.childNodes[i].className == "adminCurrentLetterGrade")
					pn.childNodes[i].className = "adminLetterGrade";
				
			}
			el.className = "adminCurrentLetterGrade";
		}
	}
	
	xmlhttp.send(data);
}

function notify(error)
{
	var e = document.createElement("blockquote");
	e.className = "error notification";
	var strong = document.createElement('span');
	strong.appendChild(document.createTextNode(error.childNodes[0].nodeValue));
	e.appendChild(strong);
	document.body.insertBefore(e, document.body.childNodes[0]);
	e.style.display = "block";
	e.id = "ErrorMsg";
	new Effect.Pulsate(e, {
		duration: 2.0,
		afterFinish: function()
		{
			setTimeout(
				function() { new Effect.DropOut("ErrorMsg", {
					afterFinish: function() { document.getElementById("ErrorMsg").parentNode.removeChild(document.getElementById("ErrorMsg")); }});
				}, 2000);
		}
	});
}

function setMyRating(el, id, rating)
{
	var xmlhttp = createRequestObj();
	
	xmlhttp.open("POST", "/action/handle");
	
	var data = "action=Blogebrity&operation=setMyRating&id=" + id + "&rating=" + rating;
	
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			/*var pre = document.createElement("pre");
			pre.appendChild(document.createTextNode(xmlhttp.responseText));
			document.body.appendChild(pre);*/
			var doc = xmlhttp.responseXML;
			if(doc && doc.documentElement && doc.documentElement.childNodes[0] && doc.documentElement.childNodes[0].tagName == "error")
			{
				notify(doc.documentElement.childNodes[0]);
				return;
			}
			
			pn = el.parentNode;
			for(i = 0; i < pn.childNodes.length; i++)
			{
				if(pn.childNodes[i].className == "adminCurrentLetterGrade")
					pn.childNodes[i].className = "adminLetterGrade";
				
			}
			el.className = "adminCurrentLetterGrade";
				
		}
	}
	
	xmlhttp.send(data);
}

function approve(el, id)
{
	var xmlhttp = createRequestObj();
	xmlhttp.open("POST", "/action/handle");
	var data = "action=Blogebrity&operation=approve&id=" + id;
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			while(el.tagName.toLowerCase() != "tr")
				el = el.parentNode;

			new Effect.Fade(el, {duration: 1.0});
		}
	}

	xmlhttp.send(data);
}

function destroy(el, id)
{
	if(!confirm("Delete this blog?"))
		return;
	var xmlhttp = createRequestObj();
	xmlhttp.open("POST", "/action/handle");
	var data = "action=Blogebrity&operation=destroy&id=" + id;
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			while(el.tagName.toLowerCase() != "tr")
				el = el.parentNode;

			new Effect.Fade(el, {duration: 1.0});
			//alert(xmlhttp.responseText);
		}
	}

	xmlhttp.send(data);
}

function getLetterGrade(gpa)
{
	if(gpa >= 3.5)
		return "A";
	if(gpa >= 2.5)
		return "B";
	if(gpa >= 1.5)
		return "C";
	if(gpa >= 0.5)
		return "D";
	return "F";
}

function createBlogebrity(obj, rank)
{
	var outer = document.createElement("div");
	outer.className = "blogebrity " + getLetterGrade(obj["average_user_rating"]).toLowerCase() + "-list created";
	outer.id = "blogebrity" + obj["id"];

	var rankingDiv = document.createElement("div");
	rankingDiv.className = "ranking";
	rankingDiv.appendChild(document.createTextNode("#\n"));

	var rankDiv = document.createElement("div");
	rankDiv.className = "rank";
	rankDiv.appendChild(document.createTextNode(rank));

	var gradeDiv = document.createElement("div");
	gradeDiv.className = "grade";
	gradeDiv.appendChild(document.createTextNode(getLetterGrade(obj["average_user_rating"]) + "-Lister"));

	var myRankDiv = document.createElement("div");
	myRankDiv.className = "myrank";



	rankingDiv.appendChild(rankDiv);
	rankingDiv.appendChild(gradeDiv);

	var nameDiv = document.createElement("div");
	nameDiv.className = "name";
	nameDiv.appendChild(document.createTextNode(obj["author_firstname"] + " " + obj["author_lastname"]));

	var siteDiv = document.createElement("div");
	siteDiv.className = "site";

	var siteLink = document.createElement("a");
	siteLink.target = "_blank";
	siteLink.href = obj["blog_url"];
	siteLink.appendChild(document.createTextNode(obj["title"]));

	siteDiv.appendChild(siteLink);

	outer.appendChild(rankingDiv);
	outer.appendChild(nameDiv);
	outer.appendChild(siteDiv);
	return outer;
}


function updateMostActive()
{
	var xmlhttp = createRequestObj();
	if(!xmlhttp)
		return;
	xmlhttp.open("POST", "/util/topten.json.php");
	var data = "random=" + Math.random();
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			var topten = eval('(' + xmlhttp.responseText + ')');
			
			var blogebrities = document.getElementById("MostActive");

			var nextBlogebrity = blogebrities.childNodes[0];

			//account for whitespace text nodes
			while(nextBlogebrity.nextSibling && nextBlogebrity.nodeType != 1)
				nextBlogebrity = nextBlogebrity.nextSibling;
			var rank = 1;
			for(var b_id in topten)
			{
				var existing = document.getElementById("blogebrity" + b_id);
				if(existing && existing != nextBlogebrity)
				{
					blogebrities.insertBefore(blogebrities.removeChild(existing), nextBlogebrity);
					new Effect.Highlight('blogebrity' + b_id);
					//alert(nextBlogebrity.id + " " + existing.id);
					nextBlogebrity = existing;
				}
				else if(!existing)
				{
					var created = createBlogebrity(topten[b_id], rank);
					blogebrities.insertBefore(created, nextBlogebrity);
					nextBlogebrity = created;
				}

				nextBlogebrity = nextBlogebrity.nextSibling;
				while(nextBlogebrity && nextBlogebrity.nextSibling && nextBlogebrity.nodeType != 1)
					nextBlogebrity = nextBlogebrity.nextSibling;
				
				rank++;
			}

			while(nextBlogebrity)
			{
				var next = nextBlogebrity.nextSibling;
				blogebrities.removeChild(nextBlogebrity);
				nextBlogebrity = next;
			}

			setTimeout(updateMostActive, 5000);
		}
	}

	xmlhttp.send(data);
}

//setTimeout(updateMostActive, 5000);

function loadSidebarRss(url)
{
	var xmlhttp = createRequestObj();
	xmlhttp.open("POST", "/util/rss.json.php", true);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	var container = document.getElementById("BlogebrityTalkin");
	while(container.childNodes.length > 0)
		container.removeChild(container.childNodes[0]);
	xmlhttp.onreadystatechange = function()
	{
		if(xmlhttp.readyState == 4)
		{
			
			var result = eval('(' + xmlhttp.responseText + ')');
			for(var entry = 0; entry < result.length && entry < 10; entry++)
			{
				var li = document.createElement("li");
				var a = document.createElement("a");
				a.href = result[entry].link;
				a.appendChild(document.createTextNode(result[entry].title));
				li.appendChild(a);
				container.appendChild(li);
			}
			container.className = "";
		}
	}
	container.className = "loading";
	xmlhttp.send("url=" + escape(url));
	
}

function rssSidebarLink(el)
{
	for(var sibling = 0; sibling < el.parentNode.parentNode.childNodes.length; sibling++)
	{
		if(el.parentNode.parentNode.childNodes[sibling].nodeType != 1)
			continue;
		if(el.parentNode.parentNode.childNodes[sibling].className == "active" && el.parentNode.parentNode.childNodes[sibling].childNodes[0] == el)
			return false;
		el.parentNode.parentNode.childNodes[sibling].className = el.parentNode.parentNode.childNodes[sibling].className.replace(/\s*active\s*/g, '');
	}

	el.parentNode.className += " active";

	loadSidebarRss(el.href);
	return false;
}
