
	// Check for a value in a form
	function check_for_value(id,msg)
	{
		if(!msg) msg = 'Missing information in form!';
		if( document.getElementById(id) && document.getElementById(id).value < 1 ) { 
			alert(msg);
			return false;
			}
		return true;
	}


	function safevalue(id) {
		if(document.getElementById(id)&&document.getElementById(id).value) return document.getElementById(id).value.replace(/#/g,'**');
		else return '';
		}
	
	function popup(url,h,w,ret) {
		if(!h) var h = screen.height * .75;
		if(!w) var w = screen.width * .75;
		var t = (screen.height/2)-(h/1.5);
		var l = (screen.width/2)-(w/2);
		window.open(url,'candlepower',
		'channelmode=0,directories=0,fullscreen=0,' +
		'height='+ h +',width='+ w +',left='+ l +',top='+ t +',' +
		'location=0,menubar=0,resizable=1,scrollbars=1,' +
		'status=0,titlebar=0,toolbar=0');
		if(!ret) return false;
		}


	function getCookie(name)
	{ var pos
	  var token = name + "=";
	  var tnlen = token.length;
	  var cklen = document.cookie.length;
	  var i = 0;
	  var j;
	  while (i < cklen)
	  { j = i + tnlen;
		if (document.cookie.substring(i, j) == token)
		{ pos = document.cookie.indexOf (";", j);
		  if (pos == -1)
			pos = document.cookie.length;
		  return unescape(document.cookie.substring(j, pos));
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	  } //End While
	  return null;
	}
	
	function setCookie(name, value)
	{ document.cookie = name + "=" + escape(value)
	}
	
	function deleteCookie(name)
	{ var exp = new Date();
	  exp.setTime (exp.getTime() - 1);
	  var cval = getCookie (name);
	  document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
	}

	function testCookie()
	{
		var gCookieName; 
		var gCookieValueRet;
		gCookieName="AVCOOKIETEST";
		gCookieValue="AV_TESTING_COOKIE";
		gCookieValueRet="???"
		var test=getCookie(gCookieName);
		if (test==null) {
		setCookie(gCookieName,gCookieValue,1);
		gCookieValueRet=getCookie(gCookieName);
		
		if (gCookieValueRet==null) {
			var warning = '<p style=\"padding: 10px 50px;\" class=\"error\"><strong>Warning!</strong><br />You must have cookies enabled for this page to operate. Enable your browsers cookies and <a href=\"'+window.location+'\">reload this page</a>.</p>';
			document.getElementById( 'maincolumn' ).innerHTML = warning; 
			//alert(warning);
			}
		}
	}


	var error = 0;

	// Check for a regular expression value in a form
	function pregcheck( id , exp , min , err )
	{
		var val;
		switch(exp)
		{
		case 'time':
			var hr = '' + document.getElementById(id + '_hour').value;
			var mn = '' + document.getElementById(id + '_minute').value;
			var ap = '' + document.getElementById(id + '_ampm').value;
			if(hr||mn||ap) val = hr + ':' + mn + ':' + ap; else val ='';
			exp = /^(01|02|03|04|05|06|07|08|09|10|11|12)\:([0-5]{1}[0-9]{1})\:(am|pm)$/ ; 
			err = 'Check your selection, there is missing information';
		break ;
		case 'filename': 
			var plainval = document.getElementById(id).value;

			if(plainval.indexOf('\\')>-1) val = plainval.substring( plainval.lastIndexOf('\\')+1 ); 
			else val = plainval.substring( plainval.lastIndexOf('/')+1 ); 

			var suggest = val.replace(/[^ a-zA-Z0-9_\.\\]/g,'_').toLowerCase();
			var fname = suggest.substring( 0 , suggest.lastIndexOf('.') ); 
			var extension = suggest.substring( suggest.lastIndexOf('.')+1 , suggest.lastIndexOf('.')+4 ); 
			suggest = fname + '.' + extension;
			exp = /^[ a-zA-Z0-9_\)\(\-\\]+(\.)([a-zA-Z0-9]{2,10})$/ ; 
			var suggesttext = '';
			if( (exp.test(suggest))) { suggesttext = 'Suggested new name: ' + suggest; }
			err = 'Filename ('+ val +') needs to be all alphabet, numbers and underscores ONLY, no funny characters. File extension should be 3 characters. '+suggesttext+'';
		break ;
		case 'email': 
			val = document.getElementById(id).value;
			exp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/ ; 
			err = 'Email address needs to be correct format, e.g. example@example.com';
		break ;
		case 'password': 
			val = document.getElementById(id).value;
			exp = /^[a-zA-Z0-9]{4,20}$/; 
			err = 'Passwords need to be 4-20 characters, all letters and numbers.';
		break ;
		case 'url': 
			val = document.getElementById(id).value;
			exp = /^(http|https|ftp):\/\/(.)+(\.)(.)+/ ; 
			err = 'Website address needs to be correct format, e.g. http://www.example.com';
		break ;
		case 'date': 
			val = document.getElementById(id).value;
			exp = /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/ ; 
			err = 'Date needs to be correct format, e.g. YYYY-MM-DD';
		break ;
		}
		if( val.length>0 && !(exp.test(val))) { 
			document.getElementById( id + '_error' ).innerHTML = err; 
			error++; 
			return;
			}
		else if( val.length < min ) { 
			document.getElementById( id + '_error' ).innerHTML = 'This is required, minimum length of ' + min + ' characters.'; 
			error++; 
			return;
			}
		else { 
			document.getElementById( id + '_error').innerHTML = ''; 
			return;
			}
	}

	function checkfiletype(id,types)
	{
		var val1 = document.getElementById(id).value;
		if(val1) {
			var val2 = val1.substring( val1.lastIndexOf('/')+1 ); 
			var extension = val2.substring( val2.lastIndexOf('.')+1 , val2.lastIndexOf('.')+4 ); 
			//types = types + ' , ' + types.toUpperCase();
			if(	!types.match(extension) ) {
				document.getElementById( id + '_error' ).innerHTML = 'Wrong file type. Must be the following: ' + types; 
				error++; 
				return;
				}
		}
	}
	
	// Check for a value in a form
	function valuecheck( id , min )
	{
		val = document.getElementById(id).value;
		if( val.length < min ) { 
			document.getElementById( id + '_error' ).innerHTML = 'This is required, minimum length of ' + min + ' characters.'; 
			error++; 
			return;
			}
		else { 
			document.getElementById( id + '_error').innerHTML = ''; 
			return;
			}
	}

	// Check for matching values in form
	function checkmatch(id,id2,min)
	{
		var val = document.getElementById(id).value;
		var val2 = document.getElementById(id2).value;
		var exp = /^[a-zA-Z0-9]{4,20}$/; 
		if( val.length > min && !(exp.test(val))) { 
			document.getElementById( id + '_error' ).innerHTML = 'Passwords need to be 4-20 characters, all letters and numbers.'; 
			error++; 
			return;
			}
		else if( val.length < min ) { 
			document.getElementById( id + '_error' ).innerHTML = 'This is required, minimum length of ' + min + ' characters.'; 
			error++; 
			return;
			}
		else if(val != val2) {
			document.getElementById( id + '_error' ).innerHTML = 'Values do not match.'; 
			error++; 
			return;
			}
		else { 
			document.getElementById( id + '_error').innerHTML = ''; 
			return;
			}
	}


	function checkradio(obj,id)
	{
		if(nonechecked(obj)) {
			document.getElementById( id + '_error' ).innerHTML = 'This is required. Please make a selection.'; 
			error++; 
			return;
			}
		else { 
			document.getElementById( id + '_error').innerHTML = ''; 
			return;
			}
	}

	function checkcheckboxes(id,count)
	{
		var test = true;
		for(i=0;i<count;i++) {
			istr = '' + i;
			if(document.getElementById(id+''+i).checked) test = false; 
		}
		if(test) {
			document.getElementById( id + '_error' ).innerHTML = 'This is required. Please make a selection.'; 
			error++; 
			return;
			}
		else { 
			document.getElementById( id + '_error').innerHTML = ''; 
			return;
			}
	}

	// Check for a selection in form
	function nonechecked(set)
	{
		for(i=0;i<set.length;i++) {
			if(set[i].checked) { return false; }
		}
		return true;
	}


	// Check for a selection in form
	function whichRadio(set)
	{
		for(i=0;i<set.length;i++) {
			if(set[i].checked) { return i; }
		}
		return false;
	}


	// Check for a selection in form
	function setRadio(set,num)
	{
		set[num].checked=true;
	}


	function uncheckRadioSet(id)
	{
		var set = document.getElementById(id);
		for(i=0;i<set.length;i++) {
			set[i].checked=false;
		}
	}


	// For safari, progress bar needs to be preloaded, I dont know why...
	function preload()
	{
		var img1 = new Image();
		img1.src = 'css/candlepower/processing.gif';
		img1.src = 'css/candlepower/buttons/processing.gif';
	}
	
	//	This kills the 'border' that firefox adds to an active link
		function nb(object) { if(object.blur) object.blur(); }
	
		function killLinkBorder()
		{
			var links = document.links;			
			for (var i=0; i<links.length; i++) {
					links[i].onfocus=function() { nb(this); }
			}
		}
	
	//	Internet Explorer Drop Down Menu
		function IEHoverPseudo() {
		
			if(document.getElementById("drop-down")) {

			var navItems = document.getElementById("drop-down").getElementsByTagName("li");
			
			for (var i=0; i<navItems.length; i++) {
				if(navItems[i].className == "parent") {
					navItems[i].onmouseover=function() { this.className += " over"; }
					navItems[i].onmouseout=function() { this.className = "parent"; }
				}
			}
		
			}
		
		}


	//	Toggle display of a page element
		function toggle(object)
		{
			vis = document.getElementById( object ).style.display;
			if(vis == 'none') document.getElementById( object ).style.display = 'block';
			else if(vis == 'block') document.getElementById( object ).style.display = 'none';
			return false;
		}


	//	Toggle display of a page element
		function toggle_i(object)
		{
			vis = document.getElementById( object ).style.display;
			if(vis == 'none') document.getElementById( object ).style.display = 'inline';
			else if(vis == 'inline') document.getElementById( object ).style.display = 'none';
			return false;
		}


	// Image Fade effects
	
		function initImage(source) {
		imageId = 'thephoto';
		image = document.getElementById(imageId);
		if(image) {
		setOpacity(image, 0);
		image.style.visibility = 'visible';
		fadeIn(imageId,0);
		return false;
		}
		}
		
		function setOpacity(obj, opacity) {
		opacity = (opacity == 100)?99.999:opacity;
		
		// IE/Win
		obj.style.filter = "alpha(opacity:"+opacity+")";
		
		// Safari<1.2, Konqueror
		obj.style.KHTMLOpacity = opacity/100;
		
		// Older Mozilla and Firefox
		obj.style.MozOpacity = opacity/100;
		
		// Safari 1.2, newer Firefox and Mozilla, CSS3
		obj.style.opacity = opacity/100;
		}
		
		function fadeIn(objId,opacity) {
		if (document.getElementById) {
		obj = document.getElementById(objId);
		if (opacity <= 100) {
		setOpacity(obj, opacity);
		opacity += 10;
		window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 200);
		}
		}
		}
		

		function checkUncheckAll(theElement) 
		{
			var theForm = theElement.form, z = 0;
			for(z=0; z<theForm.length;z++)
			{
				if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall')
				{
					theForm[z].checked = theElement.checked;
				}
			}
		}
		

		function togRow(id) {
			objRow = document.getElementById(id);
			if (navigator.appName == 'Opera') {
				if (objRow.style.display == 'table-row') {
					objRow.style.visibility = 'hidden';
					objRow.style.display = 'none';
					objRow.style.position = 'absolute';
				}else{
					objRow.style.visibility = 'visible';
					objRow.style.display = 'table-row';
					objRow.style.position = 'relative';
				}
			}else{
				if (objRow.style.visibility == 'visible') {
					objRow.style.visibility = 'hidden';
					objRow.style.display = 'none';
					objRow.style.position = 'absolute';
				}else{
					objRow.style.visibility = 'visible';
					objRow.style.display = '';
					objRow.style.position = 'relative';
				}
			}
		}



		function hideBorderOnInputs()
		{
			var butts ;
	
			butts = document.getElementsByTagName('input');
	
			for(i=0;i<butts.length;i++)
			{
				if( butts[i].getAttribute('type')=='submit' || butts[i].getAttribute('type')=='image' )
				{
					butts[i].onfocus=function() { nb(this); }
				}
			}
		}


		function findAutoRollImages()
		{
			var imgs,i;
			// Loop through all images, and check if their classes contain the class roll
			imgs=document.getElementsByTagName('img');
			for(i=0;i<imgs.length;i++) 
			{
				if(/roll/.test(imgs[i].className))
				{
					// add the function roll to the parent Element of the image
					//imgs[i].parentNode.onmouseover=function(){roll(this);};
					//imgs[i].parentNode.onmouseout=function(){roll(this);};
					//imgs[i].parentNode.onfocus=function(){roll(this);};
					//imgs[i].parentNode.onblur=function(){roll(this);};
					imgs[i].onmouseover=function(){imageRoll(this);};
					imgs[i].onmouseout=function(){imageRoll(this);};
					imgs[i].onfocus=function(){imageRoll(this);};
					imgs[i].onblur=function(){imageRoll(this);};
				}
			}
		}
		
		function imageRoll(o)
		{
			src = o.src;
			ftype = src.substring(src.lastIndexOf('.'), src.length);
			if(/_on/.test(src))
			{
				newsrc = src.replace('_on','');
			}else{
				newsrc = src.replace(ftype, '_on'+ftype);
			}
			o.src=newsrc;
		}
		
		function roll(o)
		{
			var i,isnode,src,ftype,newsrc,nownode;
			// loop through all childNodes
			for (i=0;i<o.childNodes.length;i++)
			{
				nownode=o.childNodes[i];
				// if the node is an element and an IMG set the variable and exit the loop
				if(nownode.nodeType==1 && /img/i.test(nownode.nodeName))
				{
					isnode=i;
					break;
				}
			}
			// check src and do the rollover
			src = o.childNodes[isnode].src;
			ftype = src.substring(src.lastIndexOf('.'), src.length);
			if(/_on/.test(src))
			{
				newsrc = src.replace('_on','');
			}else{
				newsrc = src.replace(ftype, '_on'+ftype);
			}
			o.childNodes[isnode].src=newsrc;
		}

	var googleMapPage = false;

	//	Onload events
		window.onload = function() 
		{
			hideBorderOnInputs();
			killLinkBorder();
			IEHoverPseudo();
			preload();
			//initImage();
			findAutoRollImages();
			if(googleMapPage) { GoogleMap(); }
		}



function getElementByClass(oElm, strTagName, oClassNames){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var arrRegExpClassNames = new Array();
	if(typeof oClassNames == "object"){
		for(var i=0; i<oClassNames.length; i++){
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		}
	}
	else{
		arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
	}
	var oElement;
	var bMatchesAll;
	for(var j=0; j<arrElements.length; j++){
		oElement = arrElements[j];
		bMatchesAll = true;
		for(var k=0; k<arrRegExpClassNames.length; k++){
			if(!arrRegExpClassNames[k].test(oElement.className)){
				bMatchesAll = false;
				break;
			}
		}
		if(bMatchesAll){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}


function tellAfriend()
{
	var strSubject = "This may interest you...";
	var strBody = "Someone thought you may be interested in this webpage:\n"+window.location;
	window.location = "mailto:?subject="+strSubject+"&body="+strBody;
}
