/*
	General helpers
-----------------------
*/

// addLoadEvent(func) Source: http://simonwillison.net/2004/May/26/addLoadEvent/
function addLoadEvent(func) 
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
		window.onload = func;
	else 
	{
		window.onload = function() {
			if (oldonload)
				oldonload();
			func();
		}
	}
}

// Source: Jeremy Keith - DOM Scripting
function insertAfter( newElement, targetElement )
{
	var parent = targetElement.parentNode;
	if ( parent.lastChild == targetElement )
		parent.appendChild( newElement );
	else
		parent.insertBefore( newElement, targetElement.nextSibling );
}

function addClass( element, value )
{
	if ( !element.className )
		element.className = value;
	else
	{
		newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}

function highlightPage()
{
	if ( !document.getElementsByTagName ) 
		return false;
	if ( !document.getElementById )
		return false;
	if ( !document.getElementById( "navigation" ) )
		return false;
	var nav = document.getElementById( "navigation" );
	var links = nav.getElementsByTagName( "a" );
	for ( var i=0; i<links.length; i++ )
	{
		var linkurl = links[i].getAttribute( "href" );
		var currenturl = window.location.href;
		if ( currenturl.indexOf( linkurl ) != -1 )
		{
			links[i].className = "here";
			var linktext = links[i].lastChild.nodeValue.toLowerCase();
			document.body.setAttribute( "id", linktext );
		}
	}
}

/* 
	Contact Form 
--------------------
*/

//Source: Jeremy Keith - DOM Scripting chapter 11
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 = "";
	    }
	    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("required") != -1 )
		{
			if ( !isFilled( element ) )
			{
				alert("Please fill in the "+element.name+" field.");
				return false;
			}
	    }
	    if ( element.className.indexOf( "email" ) != -1 )
		{
			if ( !isEmail( element ) )
			{
		        alert( "The "+element.name+" field must be a valid email address." );
				return false;
		    }
	    }
	}
	return true;
}

function isFilled( field ) 
{
	if ( field.value.length < 1 || field.value == field.defaultValue )
		return false;
	else
		return true;
}

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);
		}
	}
}

/*
	Add Load Events
-----------------------
*/
addLoadEvent( highlightPage );
addLoadEvent( focusLabels );
addLoadEvent( prepareForms );