function focusLabels()
{
	if ( !document.getElementsByTagName ) return false;
	var labels = document.getElementsByTagName("label");
	for ( var i = 0; i < labels.length; i++ )
	{
		if ( !labels[i].getAttribute("for") ) continue;
		labels[i].onclick = function()
		{
			var id = this.getAttribute("for");
			if ( !document.getElementById(id) ) return false;
			var element = document.getElementById(id);
			element.focus();
		}
	}
}

function resetFields(whichForm)
{
	for ( var i = 0; i < whichForm.elements.length; i++ )
	{
		var element = whichForm.elements[i];
		if ( element.type == "submit" ) continue;
		if ( !element.defaultValue ) continue;
		element.onfocus = function()
		{
			if ( this.value == this.defaultValue )
			{
				this.value = "";
				this.className = "focus";
			}
		}
		element.onblur = function()
		{
			if ( this.value == "" )
			{
				this.value = this.defaultValue;
				this.className = "";
			}
		}
	}
}

function disableButtons(whichform)
{
	whichform.onsubmit = function()
	{
		for ( var i=0; i < whichform.elements.length; i++ )
		{
			var element = whichform.elements[i];
			if ( element.type == "submit" )
			{
				element.value = "Sending...";
				element.disabled = true;
			}
		}
	}
}

function prepareForms()
{
	for ( var i = 0; i < document.forms.length; i++ )
	{
		var thisform = document.forms[i];
		resetFields(thisform);
		disableButtons(thisform);
	}
}

addLoadEvent(focusLabels);
addLoadEvent(prepareForms);

//	Ajax stuff for email alert form

function addAjax()
{
	//	Using the DOM to add an input into the form so the $_POST['ajax'] can be picked up by the
	//	form processing page
	if ( !document.getElementById || !document.getElementsByTagName ) return false;
	if ( !document.getElementById("emailAlert") ) return;
	var alertForm = document.getElementById("emailAlert");
	
	//	create the element to insert into the form
	var ajaxInput = document.createElement("input");
	var ajaxValue = "true";
	var ajaxName = "ajax";
	var ajaxVisibility = "hidden";
	ajaxInput.setAttribute("type", ajaxVisibility);
	ajaxInput.setAttribute("name", ajaxName);
	ajaxInput.setAttribute("value", ajaxValue);
	
	// put the input into the form
	alertForm.appendChild(ajaxInput);
}

addLoadEvent(addAjax);


//	Set baseURL var
var baseURL = "http://whisperoftheblue.com/";

function prepEmailForm()
{
	if ( !document.getElementById )
	{
		return;
	}
	if ( !document.getElementById("emailAlert") )
	{
		return;
	}
	
	// set the form to it's default or null value
	
	document.getElementById("emailAlert").onsubmit = function()
	{
		var data = "";
		// build up the ajax submission
		for ( var i = 0; i < this.elements.length; i++ )
		{
			data+= this.elements[i].name;
			data+= "=";
			data+= escape(this.elements[i].value);
			data+= "&";
		}
		return !sendData(data);
	};
}

function sendData(data)
{
	var request = getHTTPObject();
	if ( request )
	{
		// maybe add this later when I can figure out
		// how to remove it when loading is finished
		//displayLoading(document.getElementById("emailAlert"));
		request.onreadystatechange = function()
		{
			parseResponse(request);
		};
		var requestURL = baseURL+"emailalert.php";
		request.open("POST", requestURL, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.send(data);
		return true;
	}
	else
	{
		return false;
	}
}

function parseResponse(request)
{
	if ( request.readyState == 4 )
	{
		if ( request.status == 200 || request.status == 304 )
		{
			var container = document.getElementById("emailAlertContainer");
			var theForm = document.getElementById("emailAlert");
			
			// check if the responseMessage already exists
			if ( document.getElementById("responseMessage") )
			{
				var currMessage = document.getElementById("responseMessage");
				container.removeChild(currMessage);
			}
			var message = document.createElement("p");
			message.setAttribute("id","responseMessage");
			message.setAttribute("class","highlight");
			var text = request.responseText;
			var result = document.createTextNode(text);
			message.appendChild(result);
			fadeUp(container.insertBefore(message,theForm), 255,255,100);
			prepEmailForm();
		}
	}
}

function getHTTPObject()
{
	var xhr = false;
	if ( window.XMLHttpRequest )
	{
		xhr = new XMLHttpRequest();
	}
	else if ( window.ActiveXObject )
	{
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				xhr = false;
			}
		}
	}
	return xhr;
}

function displayLoading(el)
{
	var loading = document.createElement("img");
	var loadingImg	= baseURL+"/images/loading.gif";
	loading.setAttribute("alt","loading...");
	loading.setAttribute("src",loadingImg);
	loading.setAttribute("id","loadingImage");
	loading.className = "loading";
	el.appendChild(loading);
}

function fadeUp(el, red, green, blue)
{
	if ( el.fade )
	{
		clearTimeout(el.fade);
	}
	
	el.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
	
	// fade is over
	if ( red == 255 && green == 255 && blue == 255 )
	{
		return;
	}
	
	// math out the fade
	var newRed = red + Math.ceil((255 - red)/20);
	var newGreen = green + Math.ceil((255 - green)/20);
	var newBlue = blue + Math.ceil((255 - blue)/20);
	var repeat = function()
	{
		fadeUp(el, newRed, newGreen, newBlue)
	};
	el.fade = setTimeout(repeat, 100);
}

function fadeOut(el, red, green, blue, fadeTime)
{
	if ( el.disappear )
	{
		clearTimeout(el.disappear);
	}
	
	el.style.color = "rgb("+red+","+green+","+blue+")";
	el.style.borderColor = "rgb("+red+","+green+","+blue+")";
	
	// fade is over
	if ( red == 255 && green == 255 && blue == 255 )
	{
		return;
	}
	
	// math out the fade
	var newRed		= red + Math.ceil((255 - red)/2);
	var newGreen	= green + Math.ceil((255 - green)/2);
	var newBlue		= blue + Math.ceil((255 - blue)/2);
	var repeat = function()
	{
		fadeOut(el, newRed, newGreen, newBlue, fadeTime);
	};
	el.fade = setTimeout(repeat, fadeTime);
}

addLoadEvent(prepEmailForm);