function $(id)
{
	return document.getElementById(id);
}

function toggle(id)
{
	$(id).style.display = $(id).style.display=='none'?"block":"none";
}

function testEmail(src) {
     var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
     var regex = new RegExp(emailReg);
     return regex.test(src);
}

function validateClientLoginForm() {
	var errMsg = "";
	var cbCount = 0;
	
	with(document.clientLoginForm) {
		if( emailAddress.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		else if( !testEmail( emailAddress.value ) ) errMsg += "\r\nYour email address is invalid.";
		if( password.value.length < 3 ) errMsg += "\r\nPlease enter your password.";
	}
	
	if( errMsg.length ){
		alert( "Missing some required information:\r\n" + errMsg );
		document.clientLoginForm.emailAddress.focus();
		return false;
	}
	return true;
}

function validateContactForm()
{
	var errMsg = "";
	with( document.contactUsForm )
	{
		if( contactName.value.length < 3 ) errMsg += "\r\nPlease enter your name.";
		if( contactEmail.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		else if( !testEmail( contactEmail.value ) ) errMsg += "\r\nYour email address is invalid.";
		if( contactPhone.value.length < 3 ) errMsg += "\r\nPlease enter your phone number.";
		if( yourEnquiry.value.length < 3 ) errMsg += "\r\nPlease provide a message.";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		return false;
	}
	return true;
}

function validateUnitEnquiryFormForm()
{
	var errMsg = "";
	with( document.unitEnquiryForm )
	{
		if( enquiryName.value.length < 3 ) errMsg += "\r\nPlease enter your name.";
		if( enquiryEmail.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		else if( !testEmail( enquiryEmail.value ) ) errMsg += "\r\nYour email address is invalid.";
		if( enquiryTelephone.value.length < 3 ) errMsg += "\r\nPlease enter your phone number.";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		return false;
	}
	return true;
}

function bookmark(){

	if (window.external) { window.external.AddFavorite(location.href, document.title); }
	else if (navigator.appName == "Netscape") {
    	window.sidebar.addPanel(title,url,"");
  	} else {
    	alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
  	}

}
function searchForCode( pageCode, arr )
{
	for( var i=0;i<arr.length;i++ )
	{
		if( arr[i].info[ navIndexes.code ] == pageCode ) return arr[i];
		if( arr[i].subNav )
		{
			var subSearch = searchForCode( pageCode, arr[i].subNav );
			if( subSearch != null ) return subSearch;
		}
	}
	return null;
}
function getNavStruct(pageCode)
{
	return searchForCode( pageCode, navData[0].subNav );
}
function init()
{
	var folderObj = new Object();
	folderObj.eventHandler = function(e) {
	

		var element = Event.element(e);
		liElement = element.parentNode;//move up from the a to li
		
		var lev = null;
		var listOfElementsToRemove = [];
		var liItems = liElement.parentNode.getElementsByTagName("li");

		for(var j = 0; j < liItems.length; j++)
		{
			if( liItems[j] == liElement )
			{
				c = liElement.classNames().toString();
				lev = c.charAt( c.indexOf("lev")+3 );

				if( j < liItems.length-1 )
				{
					c = liItems[j+1].className;
					nextLev = c.charAt( c.indexOf("lev")+3 );
					if( nextLev > lev )
					{
						Element.addClassName( liElement, "open");
						Element.removeClassName( liElement, "closed");
					}
					else{
						Element.addClassName( liElement, "closed");
						Element.removeClassName( liElement, "open");
					}
				}
			}
			else if( lev != null )//ok, we have a level so keep removing lower levels until it doesn't match anymore
			{
				//get the current level
				c = liItems[j].className;
				clev = c.charAt( c.indexOf("lev")+3 );
				if( clev > lev )
					listOfElementsToRemove.push( liItems[j] );
				else break;//finished finding sub items
			}
		}



		if( Element.hasClassName( liElement, "open") )
		{
			//mark as closed
			Element.removeClassName( liElement, "closed");

			//remove any elements in the list
			if( listOfElementsToRemove.length )
				for (var j = listOfElementsToRemove.length-1; j >= 0; j--)
					Element.remove( listOfElementsToRemove[j] );

		}
		else{

			//mark as opened
			Element.addClassName( liElement, "open");
			
			//Extract the page code
			url = element.toString();
			lastSlash = url.lastIndexOf("/");
			pageCode = url.substring( lastSlash+1, url.length );
			
			
			//Determine the next level
			c = liElement.classNames().toString();
			lev = parseInt( c.charAt( c.indexOf("lev")+3 ) );
			lev++;
			
			var subNavHTML = "";
			var currNavItem = getNavStruct(pageCode);

			if( currNavItem.subNav )
			{
				for( var i=0;i<currNavItem.subNav.length;i++ )
				{
					subNavHTML += "<li class='lev"+lev;
					if( currNavItem.subNav[i].info[navIndexes.IsFolder] )subNavHTML += " folder";
					subNavHTML += "'>";
					subNavHTML += "<a href=\"index.cfm/page/" +currNavItem.subNav[i].info[navIndexes.code]+ "\">" + currNavItem.subNav[i].info[navIndexes.name] + "</a>";
					subNavHTML += "</li>";
				}
			}
			
			try{
				new Insertion.After( liElement, subNavHTML );
			}catch(z){}
			
			//assign the event handler to any functions marked as class 'folder'
			var liFolders = document.getElementsByClassName("folder", $("navlist"));
			liFolders.each( function(item, index){ item.onclick = folderObj.eventHandler.bindAsEventListener(folderObj) } );

		}
				
		Event.stop(e);
	} 

	//assign the event handler to any functions marked as class 'folder'
	var liFolders = document.getElementsByClassName("folder", $("navlist"));
	liFolders.each( function(item, index){ item.onclick = folderObj.eventHandler.bindAsEventListener(folderObj) } );

}
