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 validateRecommendAFriendForm() {
	var validated=true;
	var errMsg="";
	
	var fieldArray = new Array("yourName","yourEmail","friendsName","friendsEmail");

	for(i=0;i<fieldArray.length;i++)
	{
		if(document.getElementById(fieldArray[i]).value.length==0)
		{

			switch( fieldArray[i] )
			{
				case "yourName": errMsg += "\nPlease provide your name."; break;
				case "yourEnquiry": errMsg += "\nPlease provide your enquiry or message."; break;
			}
		  	validated=false;
			document.getElementById(fieldArray[i]+"Desc").style.color="red";
		}
		else document.getElementById(fieldArray[i]+"Desc").style.color="black";
	}
	
	if( document.getElementById("yourEmail").value.indexOf("@")==-1 || document.getElementById("yourEmail").value.indexOf(".")==-1 )
	{
		errMsg += "\nYour email address is invalid.";
		validated=false;
		document.getElementById("yourEmailDesc").style.color="red";
	}
	
	if( document.getElementById("friendsEmail").value.indexOf("@")==-1 || document.getElementById("friendsEmail").value.indexOf(".")==-1 )
	{
		errMsg += "\nYour friends email address is invalid.";
		validated=false;
		document.getElementById("friendsEmailDesc").style.color="red";
	}
		
	if(validated) document.recommendAFriendForm.submit();
	else alert("Please ammend the items below and try again.\n"+errMsg);
}

function validateClientLoginForm() {
	var errMsg = "";
	var cbCount = 0;
	
	with(document.clientLoginForm) {
		if( emailAddress.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		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 validateContactDetailsFormForm() {
	var errMsg = "";
	with( document.contactDetailsForm )
	{
		if( memberTelephone.value.length < 3 ) errMsg += "\r\nPlease enter your telephone number.";
		if( memberEmail.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		else if( !testEmail( memberEmail.value ) ) errMsg += "\r\nYour email address is invalid.";
		if( memberAddress1.value.length < 3 ) errMsg += "\r\nPlease enter your address.";
		if( memberCity.value.length < 3 ) errMsg += "\r\nPlease provide the city you live in.";
		if( memberCountry.value.length < 3 ) errMsg += "\r\nPlease provide the country you live in.";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		return false;
	}
	return true;
}

function validateProfileForm() {
	var errMsg = "";
	with( document.profileForm )
	{
		if( memberProfile.value.length < 200 ) errMsg += "\r\nPlease enter your profile for the member directory. (200 chars or more)";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		return false;
	}
	return true;
}

function validateCategoriesForm() {
	var cNumberSelected=0;
	var cCheckboxes = document.getElementsByTagName("input");
	for(i=0;i<cCheckboxes.length;i++) {
		if(cCheckboxes[i].type=="checkbox" && cCheckboxes[i].checked) {
			cNumberSelected++;
		}
	}
	
	if(cNumberSelected==0) {
		alert("Please choose at least one category for your profile.");
		return false;
	}else if(cNumberSelected>3) {
		alert("You can choose a maximum of 3 categories");
		return false;
	} else {
		return true;
	}
}

function validateMyDetailsFormForm() {
	var errMsg = "";
	with( document.myDetailsForm )
	{
		if( memberFirstName.value.length < 3 ) errMsg += "\r\nPlease enter your first name.";
		if( memberLastName.value.length < 3 ) errMsg += "\r\nPlease enter your last name.";
		if( memberPassword.value.length < 0 ) errMsg += "\r\nPlease enter a password.";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		return false;
	}
	return true;
}


function validateAddProfileForm() {
	var errMsg = "";
	with( document.addProfileForm )
	{
		if( memberFirstName.value.length < 3 ) errMsg += "\r\nPlease enter your first name.";
		if( memberLastName.value.length < 3 ) errMsg += "\r\nPlease enter your last name.";
		if( memberPassword.value.length < 0 ) errMsg += "\r\nPlease enter a password.";
		if( memberEmail.value.length < 3 ) errMsg += "\r\nPlease enter your email address.";
		else if( !testEmail( memberEmail.value ) ) errMsg += "\r\nYour email address is invalid.";
	}
	if( errMsg.length )
	{
		alert( "Missing some required information:\r\n" + errMsg );
		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) } );

}