var xmlhttp;

function doVote(id, ud) {
	xmlhttp = GetXmlHttpObject();

	if (xmlhttp == null) {
		alert("Your browser does not support XMLHTTP!");
		return;
	}

	// Update Page
	var rating = document.getElementById(id + "-rating");
	var updown = document.getElementById(id + "-updown");

	// Update Rating
	if (rating) {
		if (ud == "u") {
			var intval = 1;
		} else {
			var intval = -1;
		}

		var curValue = parseInt(rating.innerHTML);

		rating.innerHTML = curValue + intval;
	}

	// Remove up/down symbols
	if (updown) {
		updown.innerHTML = "";
	}

	var url = "/page-post-inc/qdb_src.php";
	url = url + "?vote=1&id=" + id;
	url = url + "&ud=" + ud;
	url = url + "&rand=" + Math.random();

	xmlhttp.open("GET", url, true);
	xmlhttp.send(null);
}

function doPreview(quoteText, regex) {
	if (quoteText.length < 5) {
		alert("Quotes must be at least 5 characters in length");
	}
	else {
		xmlhttp = GetXmlHttpObject();
	
		if (xmlhttp == null) {
			alert("Your browser does not support XMLHTTP!");
			return;
		}
	
		// Get preview of quoteText
		var params = "regex=" + escape(regex) + "&quote_text=" + escape(quoteText);
	
		xmlhttp.open('POST', "/page-post-inc/qdb_src.php?preview", true);
		xmlhttp.setRequestHeader("Content-type",
				"application/x-www-form-urlencoded");
		xmlhttp.setRequestHeader("Content-length", params.length);
		xmlhttp.setRequestHeader("Connection", "close");
	
		xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				// Basic Layout
				var html = "<div align=\"center\" style=\"margin-bottom: 15px;\"><h2><u>Quote Preview</u></h3></div><div style=\"text-align: left; margin: 0; border: 1px solid black; padding: 5px;\">"
						+ xmlhttp.responseText + "</div>";
	
				// Fade submit box
				fade("quoteBox", function() {
					// Set preview div contents
					document.getElementById("quotePreview").innerHTML = html;

					// Show preview div
					document.getElementById("quotePreview").style.display = 'block';

					// Hide the pre submit buttons
					document.getElementById("pre-submit-buttons").style.display = 'none';

					// Show the submit buttons
					document.getElementById("submit-buttons").style.display = 'block';
				});
			}
		}
	}

	xmlhttp.send(params);
}

function doEdit() {
	fade("quotePreview", function() {
		// Set preview div contents
		document.getElementById("quotePreview").innerHTML = "";

		// Hide preview div
		document.getElementById("quotePreview").style.display = 'none';

		// Show the edit box
		document.getElementById("quoteBox").style.display = 'block';

		// Show the pre submit buttons
		document.getElementById("pre-submit-buttons").style.display = 'block';

		// Hide the submit buttons
		document.getElementById("submit-buttons").style.display = 'none';
		
		// Untick the boxes
		document.qdb_addquote.funny.checked = false;
		document.qdb_addquote.ts.checked = false;
		document.qdb_addquote.ircquote.checked = false;
		document.qdb_addquote.context.checked = false;
	});
}

function enableSubmit() {
	if (document.qdb_addquote.funny.checked
			&& document.qdb_addquote.context.checked && document.qdb_addquote.funny2.checked
			&& document.qdb_addquote.ts.checked && document.qdb_addquote.ircquote.checked) {
		document.qdb_addquote.submit.disabled = false;
	} else {
		document.qdb_addquote.submit.disabled = true;
	}
}

function doSubmit(quoteText, regex) {
	if (document.qdb_addquote.funny.checked && document.qdb_addquote.funny2.checked	&& document.qdb_addquote.context.checked && document.qdb_addquote.ts.checked && document.qdb_addquote.ircquote.checked) {
		if (quoteText.length < 5) {
			alert("Quotes must be at least 5 characters in length");
		}
		else {
			document.qdb_addquote.submit.disabled = true;
			document.qdb_addquote.edit.disabled = true;
			
			xmlhttp = GetXmlHttpObject();
	
			if (xmlhttp == null) {
				alert("Your browser does not support XMLHTTP!");
				return;
			}
	
			// Get preview of quoteText
			var params = "regex=" + escape(regex) + "&submit=1&quote_text=" + escape(quoteText);
	
			xmlhttp.open('POST', "/page-post-inc/qdb_src.php?submit", true);
			xmlhttp.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded");
			xmlhttp.setRequestHeader("Content-length", params.length);
			xmlhttp.setRequestHeader("Connection", "close");
	
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					fade("fullContent", function() {
						document.getElementById("fullContent").innerHTML = xmlhttp.responseText;
						document.getElementById("fullContent").style.display = 'block';
					});
				}
			}
		}

		xmlhttp.send(params);
	}
}

function delQuote(id) {
	xmlhttp = GetXmlHttpObject();

	if (xmlhttp == null) {
		alert("Your browser does not support XMLHTTP!");
		return;
	}

	if (confirm("Are you sure you want to delete quote ID " + id
			+ "? This cannot be undone!")) {
		// Update Page
		fade(id + "-wholequote", function() {
		});

		var url = "/page-post-inc/qdb_src.php";
		url = url + "?delete=1&id=" + id;
		url = url + "&rand=" + Math.random();

		xmlhttp.open("GET", url, true);
		xmlhttp.send(null);
	}
}

function GetXmlHttpObject() {
	if (window.XMLHttpRequest) {
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}

	if (window.ActiveXObject) {
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}

	return null;
}

/*
 * Following code taken from
 * http://www.switchonthecode.com/tutorials/javascript-tutorial-simple-fade-animation
 * Code modified to make fit for purpose by Phil
 */
var TimeToFade = 1000.0;

function fade(eid, A) {
	var element = document.getElementById(eid);
	if (element == null)
		return;

	if (element.FadeState == null) {
		if (element.style.opacity == null || element.style.opacity == ''
				|| element.style.opacity == '1') {
			element.FadeState = 2;
		} else {
			element.FadeState = -2;
		}
	}

	if (element.FadeState == 1 || element.FadeState == -1) {
		element.FadeState = element.FadeState == 1 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
	} else {
		element.FadeState = element.FadeState == 2 ? -1 : 1;
		element.FadeTimeLeft = TimeToFade;

		setTimeout(function() {
			animateFade(new Date().getTime(), eid, A);
		}, 33);
	}
}

function animateFade(lastTick, eid, A) {
	var curTick = new Date().getTime();
	var elapsedTicks = curTick - lastTick;

	var element = document.getElementById(eid);

	if (element.FadeTimeLeft <= elapsedTicks) {
		element.style.opacity = element.FadeState == 1 ? '1' : '0';
		element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100'
				: '0') + ')';
		element.FadeState = element.FadeState == 1 ? 2 : -2;

		element.style.display = 'none';
		element.style.opacity = 1; // Make it full opacity again
		element.FadeState = null; // Reset it

		// This is a user defined method on the call to this method
		// It does post fade stuffs
		A();

		return;
	}

	element.FadeTimeLeft -= elapsedTicks;
	var newOpVal = element.FadeTimeLeft / TimeToFade;
	if (element.FadeState == 1)
		newOpVal = 1 - newOpVal;

	element.style.opacity = newOpVal;
	element.style.filter = 'alpha(opacity = ' + (newOpVal * 100) + ')';

	setTimeout(function() {
		animateFade(curTick, eid, A);
	}, 33);
}

