function addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}

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 firstInput()
{
	if (!document.getElementsByTagName) return false;
	var inputs = document.getElementsByTagName("input");
	if (!inputs)
		inputs[0].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 = "";
     }
    }
    element.onblur = function()
	{
      if (this.value == "") {
        this.value = this.defaultValue;
      }
    }
  }
}

function validateForm(whichform)
{
  for (var i=0; i<whichform.elements.length; i++)
  {
    var element = whichform.elements[i];
    if (element.className.indexOf("validate") != -1)
	{
      if (!isFilled(element)) {
	  	var label = element.previousSibling.previousSibling.firstChild.nodeValue;
        alert("Please fill in the "+label+" field.");
		element.focus();
        return false;
      }
    }
	if (element.className.indexOf("phone") != -1)
	{
      if (!isNumeric(element)) {
	  	var label = element.previousSibling.previousSibling.firstChild.nodeValue;
        alert("The "+label+" field must be a valid telephone number.");
		element.focus();
        return false;
      }
    }
    if (element.className.indexOf("email") != -1)
	{
      if (!isEmail(element))
	  {
		var label = element.previousSibling.previousSibling.firstChild.nodeValue;
		alert("The "+label+" field must be a valid email address.");
		element.focus();
        return false;
      }
    }
  }
  return true;
}

function isFilled(field)
{
  if (field.value.length < 1 || field.value == field.defaultValue)
  {
    return false;
  }
  else
  {
    return true;
  }
}

function isNumeric(field)
{
	var numericExpression = /^[0-9]+$/;
	if(field.value.match(numericExpression))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function isEmail(field)
{
  if (field.value.indexOf("@") == -1 || field.value.indexOf(".") == -1)
  {
    return false;
  }
  else
  {
    return true;
  }
}

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

addLoadEvent(firstInput);
addLoadEvent(focusLabels);
addLoadEvent(prepareForms);

function formLink()
{
	var anchors = getElementsByTagName("a");
	if (anchors.href == "#sponsor_form")
	{
		anchors.onclick = function()
		{
			firstInput();
		}
	}
}