var self_url_prefix;
{
	var script_tags = document.getElementsByTagName("SCRIPT");
	for(var i=0; i<script_tags.length; i++) {
		var src=script_tags.item(i).src;
		if(!src) continue;
		var sup=src.replace(/\/includes\/scripts\/validations\.js$/, "");
		if(sup && sup != src) {
			self_url_prefix=sup;
			break;
		}
	}
	self_url_prefix=self_url_prefix||"";
}
function scan_for_inputs() {
	var inputs = document.getElementsByTagName("INPUT");
	function build_onchange(regexp, notification_area, existing_onchange) {
		return function() {
			if(existing_onchange) existing_onchange.call(this);
			if(notification_area && !notification_area.firstChild) {
				notification_area.appendChild(_mkel("img", {}, [], function(e) {
					e.style.marginLeft="1em";
					e.style.verticalAlign="middle";
				}));
				notification_area.appendChild(_mkel("span", {className: "errortxt"}, [" "]));
			}
			if(!this.value.match(regexp)) {
				// Cross
				this.style.borderColor = "red";
				this.style.borderStyle = "solid";
				if(notification_area) {
					notification_area.firstChild.src=self_url_prefix + "/images/content/cross_15x15_transparent.gif";
					notification_area.childNodes.item(1).firstChild.data=" this field must be completed";
				}
				return false;
			} else {
				// Tick
				this.style.borderColor = "rgb(156, 182, 64)";
				this.style.borderStyle = "solid";
				if(notification_area) {
					notification_area.firstChild.src=self_url_prefix + "/images/content/tick_15x15_transparent.gif";
					notification_area.childNodes.item(1).firstChild.data="";
				}
				return true;
			}
		}
	}
	function add_validation_to_input(input, i) {
		if(input.validation && input.validation.match(/^\/.*\/$/)) {
			if(!input.form.validateOnSubmit) {
				var os=input.form.onsubmit;
				input.form.onsubmit=function() {
					var e = this.elements;
					var first_invalid_element;
					for(var i=0; i<e.length; i++) {
						if(e.item(i).validation) {
							// Run onchange each time
							if(
								(!e.item(i).onchange()) && 
								(!first_invalid_element)
							) first_invalid_element=e.item(i);
						}
					}
					if(first_invalid_element) {
						first_invalid_element.focus();
						return false;
					}
					return os?os.call(this):true;
				};
				input.form.validateOnSubmit=1;
			}
			var regexp=new RegExp(input.validation.substring(1, input.validation.length-1));
			/* Only add a notification area if there's no chance of it reflowing
			 * left-to-right */
			var notification_area;
			var has_nonempty_following_siblings=false;
			for(var e=input.nextSibling; e; e=e.nextSibling)
				if(e.tagName || (e.data && e.data.match(/\S/)) ) {
					has_nonempty_following_siblings=true;
					break;
				}
			if(!has_nonempty_following_siblings) 
				notification_area = _mkel("span", {className: "notification-area"}, [], function(e) {
					//e.style.display="inline-block"; // not inline-block for MSIE
				});
			else notification_area = null;
			input.onchange=build_onchange(regexp, notification_area, input.onchange);
			if(!input.onblur) input.onblur=input.onchange;

			if(notification_area)
				input.parentNode.appendChild(notification_area);
		}
	}
	for(var i=0; i<inputs.length; i++) {
		var input = inputs.item(i);
		add_validation_to_input(input, i);
	}
	var textareas = document.getElementsByTagName("TEXTAREA");
	for(var i=0; i<textareas.length; i++) {
		var textarea = textareas.item(i);
		add_validation_to_input(textarea, i);
	}
}
scan_for_inputs();

