function autofill( el ) {

	switch (el) {
	
		case 'display_name' :
			var firstname = document.getElementById('firstname');
			var lastname = document.getElementById('lastname');
			var display_name = document.getElementById('display_name');
			display_name.value = firstname.value + ' ' + lastname.value;
			break;
		
		case 'studio_tel' :
			var home_tel = document.getElementById('home_tel');
			var studio_tel = document.getElementById('studio_tel');
			studio_tel.value = home_tel.value;
			break;
			
		case 'studio_email' :
			var home_email = document.getElementById('home_email');
			var studio_email = document.getElementById('studio_email');
			studio_email.value = home_email.value;
			break;
		
		case 'studio_address' :
			var home_address_1 = document.getElementById('home_address_1');
			var home_address_2 = document.getElementById('home_address_2');
			var home_address_3 = document.getElementById('home_address_3');
			var home_town = document.getElementById('home_town');
			var home_post_code = document.getElementById('home_post_code');

			var studio_address_1 = document.getElementById('studio_address_1');
			var studio_address_2 = document.getElementById('studio_address_2');
			var studio_address_3 = document.getElementById('studio_address_3');
			var studio_town = document.getElementById('studio_town');
			var studio_post_code = document.getElementById('studio_post_code');			
		
			studio_address_1.value = home_address_1.value;
			studio_address_2.value = home_address_2.value;
			studio_address_3.value = home_address_3.value;
			studio_town.value = home_town.value;
			studio_post_code.value = home_post_code.value;
			break;
	
	}

}


// Password strength meter v2.0
// Matthew R. Miller - 2007
// www.codeandcoffee.com
// Based off of code from:
//  http://www.intelligent-web.co.uk
//  http://www.geekwisdom.com/dyn/passwdmeter

/*
	Password Strength Algorithm:
	
	Password Length:
		5 Points: Less than 4 characters
		10 Points: 5 to 7 characters
		25 Points: 8 or more
		
	Letters:
		0 Points: No letters
		10 Points: Letters are all lower case
		20 Points: Letters are upper case and lower case

	Numbers:
		0 Points: No numbers
		10 Points: 1 number
		20 Points: 3 or more numbers
		
	Characters:
		0 Points: No characters
		10 Points: 1 character
		25 Points: More than 1 character

	Bonus:
		2 Points: Letters and numbers
		3 Points: Letters, numbers, and characters
		5 Points: Mixed case letters, numbers, and characters
		
	Password Text Range:
	
		>= 90: Very Secure
		>= 80: Secure
		>= 70: Very Strong
		>= 60: Strong
		>= 50: Average
		>= 25: Weak
		>= 0: Very Weak
		
*/


// Settings
// -- Toggle to true or false, if you want to change what is checked in the password
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "!@#$%^&*?_~"

// Check password
function checkPassword(strPassword)
{
	// Reset combination count
	var nScore = 0;
	
	// Password length
	// -- Less than 4 characters
	if (strPassword.length < 5)
	{
		nScore += 5;
	}
	// -- 5 to 7 characters
	else if (strPassword.length > 4 && strPassword.length < 8)
	{
		nScore += 10;
	}
	// -- 8 or more
	else if (strPassword.length > 7)
	{
		nScore += 25;
	}

	// Letters
	var nUpperCount = countContain(strPassword, m_strUpperCase);
	var nLowerCount = countContain(strPassword, m_strLowerCase);
	var nLowerUpperCount = nUpperCount + nLowerCount;
	// -- Letters are all lower case
	if (nUpperCount == 0 && nLowerCount != 0) 
	{ 
		nScore += 10; 
	}
	// -- Letters are upper case and lower case
	else if (nUpperCount != 0 && nLowerCount != 0) 
	{ 
		nScore += 20; 
	}
	
	// Numbers
	var nNumberCount = countContain(strPassword, m_strNumber);
	// -- 1 number
	if (nNumberCount == 1)
	{
		nScore += 10;
	}
	// -- 3 or more numbers
	if (nNumberCount >= 3)
	{
		nScore += 20;
	}
	
	// Characters
	var nCharacterCount = countContain(strPassword, m_strCharacters);
	// -- 1 character
	if (nCharacterCount == 1)
	{
		nScore += 10;
	}	
	// -- More than 1 character
	if (nCharacterCount > 1)
	{
		nScore += 25;
	}
	
	// Bonus
	// -- Letters and numbers
	if (nNumberCount != 0 && nLowerUpperCount != 0)
	{
		nScore += 2;
	}
	// -- Letters, numbers, and characters
	if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
	{
		nScore += 3;
	}
	// -- Mixed case letters, numbers, and characters
	if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
	{
		nScore += 5;
	}
	
	
	return nScore;
}
 
// Runs password through check and then updates GUI 
function runPassword(strPassword, strFieldID) 
{

	// Check password
	var nScore = checkPassword(strPassword);
	
	 // Get controls
    	var ctlBar = document.getElementById(strFieldID + "_bar"); 
    	var ctlText = document.getElementById(strFieldID + "_text");
    	if (!ctlBar || !ctlText)
    		return;
    	
    	// Set new width
    	ctlBar.style.width = nScore + "%";

 	// Color and text
	// -- Very Secure
 	if (nScore >= 90)
 	{
 		var strText = "Very Secure";
 		var strColor = "#020EBF";
 	}
 	// -- Secure
 	else if (nScore >= 80)
 	{
 		var strText = "Secure";
 		var strColor = "#01536C";
	}
	// -- Very Strong
 	else if (nScore >= 70)
 	{
 		var strText = "Very Strong";
 		var strColor = "#018533";
	}
	// -- Strong
 	else if (nScore >= 60)
 	{
 		var strText = "Strong";
 		var strColor = "#449101";
	}
	// -- Average
 	else if (nScore >= 50)
 	{
 		var strText = "Average";
 		var strColor = "#8A9600";
	}
	// -- Weak
 	else if (nScore >= 25)
 	{
 		var strText = "Weak";
 		var strColor = "#B57001";
	}
	// -- Very Weak
 	else
 	{
 		var strText = "Very Weak";
 		var strColor = "#EE0B00";
	}
	ctlBar.style.backgroundColor = strColor;
	ctlText.innerHTML = "<span style='color: " + strColor + ";'>" + strText + "</span>";
}
 
// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{ 
	// Declare variables
	var nCount = 0;
	
	for (i = 0; i < strPassword.length; i++) 
	{
		if (strCheck.indexOf(strPassword.charAt(i)) > -1) 
		{ 
	        	nCount++;
		} 
	} 
 
	return nCount; 
} 
 

function validate_application() {

	var labels = document.getElementsByTagName("label");
	
	var errors = 0;
	var error_message = '<div class="message_negative"><p>Some of the required information appears to be missing:</p><ul>';
	var error_container = document.getElementById('error_container');
	error_container.innerHTML = '';
	
	for ( var i = 0; i < labels.length; i++ ) {
		
		if ( labels[i].className == 'required_field' ) {

			var field = labels[i].getAttribute('for');
			var field_obj = document.getElementById(field);
			if ( field.value == '' ) {
		
				error_message += '<li>You have not entered your <a href="#' + field + '" title="Jump to ' + labels[i].innerHTML + '">' + labels[i].innerHTML + '</a></li>';
				errors = 1;
				
			}
			
			
		}
	
	}
	
	var captcha = document.getElementById('security_code');
	if ( captcha.value == '' ) {
		error_message += '<li>You have not entered the security check code (above).<br />This is required to deter spammers and malicious programmes.</li>';
		errors = 1;
	}
	
	if ( errors == 1 ) {
		error_message += '</ul></div>';
		error_container.innerHTML = error_message;
		return false;
	} else {
		return true;
	}
		
}

function get_label(field) {
	
	var labels = document.getElementsByTagName("label");
	
	for ( var i = 0; i < 2; i++ ) {
	
//		alert( labels[i].getAttribute('for') );
//		alert( labels[i].innerHTML );
	
		if ( labels[i].getAttribute('for') == field ) {
	
			return labels[i].innerHTML;
		
		}
	
	}
	
}


String.prototype.wordWrap = function(m, b, c){
	var i, j, l, s, r;
	if(m < 1)
		return this;
	for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
		for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
			j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length
			|| c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
	return r.join("\n");
};

function copy_display_name() {
	var firstname = document.getElementById('firstname');
	var lastname = document.getElementById('lastname');
	var display_name = document.getElementById('display_name');
	display_name.value = firstname.value + " " + lastname.value;
}

function copy_studio_address() {
	var home_address_1 = document.getElementById('home_address_1');
	var home_address_2 = document.getElementById('home_address_2');
	var home_address_3 = document.getElementById('home_address_3');
	var home_town = document.getElementById('home_town');
	var home_post_code = document.getElementById('home_post_code');

	var studio_address_1 = document.getElementById('studio_address_1');
	var studio_address_2 = document.getElementById('studio_address_2');
	var studio_address_3 = document.getElementById('studio_address_3');
	var studio_town = document.getElementById('studio_town');
	var studio_post_code = document.getElementById('studio_post_code');
	
	studio_address_1.value = home_address_1.value;
	studio_address_2.value = home_address_2.value;
	studio_address_3.value = home_address_3.value;
	studio_town.value = home_town.value;
	studio_post_code.value = home_post_code.value;
	
}

function copy_studio_tel() {
	var home_tel = document.getElementById('home_tel');
	var studio_tel = document.getElementById('studio_tel');
	studio_tel.value = home_tel.value;
}

function copy_studio_email() {
	var home_email = document.getElementById('home_email');
	var studio_email = document.getElementById('studio_email');
	studio_email.value = home_email.value;
}

function copy_username() {
	var username = document.getElementById('username');
	var home_email = document.getElementById('home_email');
	var firstname = document.getElementById('firstname');
	var lastname = document.getElementById('lastname');
	if ( home_email.value == '' || ! (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(home_email.value)) ) {
		new_value = firstname.value + " " + lastname.value;
	} else {
		new_value = home_email.value;
	}			
	username.value = new_value;
}

function populate_hint(el) {
	var display_container = document.getElementById(el);
	var new_value = '';
	switch ( el ) {
		
		case 'username_value' :
			var home_email = document.getElementById('home_email');
			var firstname = document.getElementById('firstname');
			var lastname = document.getElementById('lastname');
			
			if ( home_email.value == '' || ! (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(home_email.value)) ) {
				new_value = firstname.value + " " + lastname.value;
			} else {
				new_value = home_email.value;
			}			
			new_value = new_value.wordWrap(20, "<br />", true );
			break;


		case 'display_name_value' :
			var firstname = document.getElementById('firstname');
			var lastname = document.getElementById('lastname');
			new_value = firstname.value + " " + lastname.value;
			new_value = new_value.wordWrap(20, "<br />", true );
			break;
	
		case 'studio_address_value' :
			var address1 = document.getElementById('home_address_1');
			var town = document.getElementById('home_town');
			var post_code = document.getElementById('home_post_code');
			new_value = address1.value + ", " + town.value + ", " + post_code.value + "&hellip;";
			new_value = new_value.wordWrap(20, "<br />", true );
			break;
			
		case 'studio_tel_value' :
			var tel = document.getElementById('home_tel');
			new_value = tel.value.wordWrap(20, "<br />", true );
			break;
	
		case 'studio_email_value' :
			var email = document.getElementById('home_email');
			new_value = email.value.wordWrap(20, "<br />", true );
			break;
	
	}
	display_container.innerHTML = new_value;
}



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

function strip_text(str) {

	var str;
	
	str = str.toLowerCase();
	str = str.replace(' ', '');
	str = str.replace('.', '');
	str = str.replace(',', '');
	str = str.replace('&', '');
	str = str.replace('Ž', 'e');
	str = str.replace('š', 'o');
	
	return str;	

}

// Simulates PHP's date function
Date.prototype.format = function(format) {
	var returnStr = '';
	var replace = Date.replaceChars;
	for (var i = 0; i < format.length; i++) {
		var curChar = format.charAt(i);
		if (replace[curChar]) {
			returnStr += replace[curChar].call(this);
		} else {
			returnStr += curChar;
		}
	}
	return returnStr;
};
Date.replaceChars = {
	shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
	longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
	longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
	// Day
	d: function() { return (this.getDate() < 10 ? '0' : '') + this.getDate(); },
	D: function() { return Date.replaceChars.shortDays[this.getDay()]; },
	j: function() { return this.getDate(); },
	l: function() { return Date.replaceChars.longDays[this.getDay()]; },
	N: function() { return this.getDay() + 1; },
	S: function() { return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th'))); },
	w: function() { return this.getDay(); },
	z: function() { return "Not Yet Supported"; },
	// Week
	W: function() { return "Not Yet Supported"; },
	// Month
	F: function() { return Date.replaceChars.longMonths[this.getMonth()]; },
	m: function() { return (this.getMonth() < 11 ? '0' : '') + (this.getMonth() + 1); },
	M: function() { return Date.replaceChars.shortMonths[this.getMonth()]; },
	n: function() { return this.getMonth() + 1; },
	t: function() { return "Not Yet Supported"; },
	// Year
	L: function() { return "Not Yet Supported"; },
	o: function() { return "Not Supported"; },
	Y: function() { return this.getFullYear(); },
	y: function() { return ('' + this.getFullYear()).substr(2); },
	// Time
	a: function() { return this.getHours() < 12 ? 'am' : 'pm'; },
	A: function() { return this.getHours() < 12 ? 'AM' : 'PM'; },
	B: function() { return "Not Yet Supported"; },
	g: function() { return this.getHours() % 12 || 12; },
	G: function() { return this.getHours(); },
	h: function() { return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12); },
	H: function() { return (this.getHours() < 10 ? '0' : '') + this.getHours(); },
	i: function() { return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes(); },
	s: function() { return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds(); },
	// Timezone
	e: function() { return "Not Yet Supported"; },
	I: function() { return "Not Supported"; },
	O: function() { return (this.getTimezoneOffset() < 0 ? '-' : '+') + (this.getTimezoneOffset() / 60 < 10 ? '0' : '') + (this.getTimezoneOffset() / 60) + '00'; },
	T: function() { return "Not Yet Supported"; },
	Z: function() { return this.getTimezoneOffset() * 60; },
	// Full Date/Time
	c: function() { return "Not Yet Supported"; },
	r: function() { return this.toString(); },
	U: function() { return this.getTime() / 1000; }
};



// 	retrieve a url parameter
	function get_url_parameter( name ) {
		name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
		var regexS = "[\\?&]"+name+"=([^&#]*)";
		var regex = new RegExp( regexS );
		var results = regex.exec( window.location.href );
		if( results == null ) {
			return "";
		} else {
			return results[1];
		}
	}

//	preload images
	function preload_images () {
		arImageSrc = new Array ();
		arImageList = new Array ();
		for (counter in arImageSrc) {
			arImageList[counter] = new Image();
			arImageList[counter].src = arImageSrc[counter];
		}
	}

//	convert date and time to unixtimestamp
	function date_to_unixtime(target_field, month_el, day_el, year_el, hour_el, minute_el) {
		var target = document.getElementById(target_field);
		var year = document.getElementById(year_el).value;
		var month = document.getElementById(month_el).value;
		var day = document.getElementById(day_el).value;
		var hour = document.getElementById(hour_el).value;
		var minute = document.getElementById(minute_el).value;
		var second = '01';
		
		var errors = 0;
		var error_message = 'The following elements appear to be missing or incorrect' + "\n";
		if ( year.length != 4 ) {
			error_message += ' - you must enter a 4 digit year' + "\n";
			errors = 1;
		}
		if ( month > 12 ) {
			error_message += ' - the month must be between 1 and 12' + "\n";
			errors = 1;
		}
		if ( day > 31 ) {
			error_message += ' - the day must be between 1 and 31' + "\n";
			errors = 1;
		}
		if ( hour > 24 ) {
			error_message += ' - the hour must be 24 hour (e.g. 13 = 1pm)' + "\n";
			errors = 1;
		}
		if ( minute > 59 ) {
			error_message += ' - the minutes must be between 0 and 59' + "\n";
			errors = 1;
		}
		if ( errors == 1 ) {
			alert( error_message );
		} else {
			var humDate = new Date(Date.UTC(year, (nozeros(month)-1), nozeros(day), nozeros(hour), nozeros(minute), nozeros(second))); 
			target.value = (humDate.getTime()/1000.0);
		}
	
	}

//	get the current page
	function get_current_page() {
		var fullpath = location.pathname;
		var patharray = fullpath.split('/');
		var folderposition = patharray.length - 1;
		var filename = patharray[folderposition];
		var filearray = filename.split('.');
		var nav = filearray[0];
		return nav;
	}

//	open external links in a new window - replaces target="_blank"
	function externalLinks () { 
		if ( ! document.getElementsByTagName ) return; 
		var anchors = document.getElementsByTagName("a"); 
		for ( var i=0; i < anchors.length; i++ ) { 
			var anchor = anchors[i]; 
			if ( anchor.getAttribute("href") && anchor.getAttribute("rel") == "external" ) anchor.target = "_blank"; 
		} 
	} 

//	add given page to favourites (bookmark)
	function setBookmark ( url, str ) {
		if ( str == '' ) str = url;
		if ( document.all ) window.external.AddFavorite( url, str );
		else alert( 'Sorry, this function only works in Internet Explorer.\n\nPlease press CTRL and D to add a bookmark to \n"' + str + '".' );
	}

//	toggle a given elements visibility
	function toggle (el) {
		if ( document.getElementById(el) == undefined ) return false;
		if ( document.getElementById(el).style.display == 'none' ) {
			document.getElementById(el).style.display = '';
		} else {
			document.getElementById(el).style.display = 'none';
		}
	}

//	show a given element
	function show (el) {
		if ( document.getElementById(el) != undefined ) document.getElementById(el).style.display = '';
	}

//	hide a given element
	function hide (el) {
		if ( document.getElementById(el) != undefined ) document.getElementById(el).style.display = 'none';
	}

//	manage the show/hide buttons
	function showhide( source_el, target_el ) {
		var source = document.getElementById(source_el);
		var target = document.getElementById(target_el);
		toggle(target_el);
		if ( target.style.display == 'none' ) {
			source.innerHTML = 'Show &darr;';
			source.className = 'showhide';
		} else {
			source.innerHTML = 'Hide &uarr;';
			source.className = 'hideshow';
		}
	}

	function search_focus() {
		var search = document.getElementById('search');
		if ( search.value == 'Search' ) search.value = '';
	}
	
	function search_blur() {
		var search = document.getElementById('search');
		if ( search.value == '' ) search.value = 'Search';		
	}

//	activate the correct navigation
	function activate_nav() {
		var nav = get_current_page();
		if ( nav == '' ) {
			nav = 'index';
		}
		if ( nav == 'search' || nav == 'email' ) {
			nav = 'blank';
		}
		var parent_page = nav;
		switch ( nav ) {
		
		}
		if ( document.getElementById('nav_' + parent_page) != undefined ) {
			document.getElementById('nav_' + parent_page).className = 'selected';
		}
	}

//	make a textarea grow
	function extend_textarea(el) {
		var el = document.getElementById(el);
		var current_height = parseInt(el.style.height);
		var line_count = ( el.value.split(/\n/g).length - 1 ) + (el.value.length / 60);
		if ( line_count > 4 ) {
			el.style.height = "auto";
			el.rows = line_count + 2;
		}
	}

//	populate a business card
	function populate_business_card(card_id,card_type) {
		xmlHttp = initiate_ajax();
		xmlHttp.onreadystatechange=function() {
			if(xmlHttp.readyState==4) {
				document.getElementById('business_card_content').innerHTML=xmlHttp.responseText;
			}
		}
		xmlHttp.open("GET","business_card.php?card_id=" + card_id + "&card_type=" + card_type,true);
		xmlHttp.send(null);
	}



//	initialise an httpRequest object
	function initiate_ajax() {
		var xmlHttp;
		try {

			// Firefox, Opera 8.0+, Safari
			xmlHttp=new XMLHttpRequest();
		}
		catch (e) {

			// Internet Explorer
			try {
				xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e) {
				try {
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) {
					alert("Your browser does not support AJAX!");
					return false;
				}
			}
		}
		return xmlHttp;
	}


//	perform the following functions when the page loads
	window.onload = function(e) {
		externalLinks();
		activate_nav();
		initiate_ajax();
	}