function XcmAutoValidation(form){

	function GetLabel( el ){
		var labels = document.getElementsByTagName('LABEL');
		var i=0;
		for(i;i<labels.length;i++)
			if(labels[i].getAttribute("for") == el.id)	
				return labels[i];
		return false;
	};

	function Validate( el ){
		var reText = el.getAttribute("validate");
		if(reText){
			var re = new RegExp(reText,'i');
			if(!re.test(el.value)){	Failed[Failed.length] = el.getAttribute("ErrorMessage");
				if(XcmAutoValidation.highLightElement) XcmAutoValidation.highLightElement(el, GetLabel(el));
			}else if(XcmAutoValidation.resetElement) XcmAutoValidation.resetElement(el,GetLabel(el));
		};
	};

	var Failed = [];
	var l = form.elements.length;
	var i = 0;
	var el;

	for(i;i<l;i++){
		el = form.elements[i];
		if(el.tagName == 'INPUT'){
			switch(el.type){
				case 'text':
				case 'password':
				case 'hidden':
					Validate( el );
					break;
				case 'checkbox':
					if(el.getAttribute("validate") && !el.checked) 
						Failed[Failed.length] = el.getAttribute("ErrorMessage");
					break;
				case 'radio':
					if(el.getAttribute("validate") && !el.checked) {
						var name = el.name;
						var siblings = [];
						var checked = false;
						for(var j=0;j<l;j++){
							if(form.elements[j].name == name){
								if(form.elements[j].checked){
									checked = true;
									break;
								};
							};
							if(form.elements[j] != el && el.getAttribute("validate"))
								el.setAttribute("validate","");
						};
						if(!checked){
							Failed[Failed.length] = el.getAttribute("ErrorMessage");
						};
					};
			};
		}else if (el.tagName == 'TEXTAREA') Validate( el );
	};
	if(Failed.length > 0){
		alert('Sorry but this form can\'t be submitted because\n\n\t- ' + Failed.join('\n\t- ') + '\n\nPlease fix these problems and try again');
		return false;
	};
	return true;
};
function top(){
	if(String(window.location).indexOf("#top") < 0)
		window.location = window.location+'#top';
	else
		//handle subsequent clicks of the top link
		window.location = window.location;
}