if ( !self.SMM ) self.SMM = new Object();
self.SMM.form = {
 setup: function () {
	var o = this;
	o.form = document.getElementById( 'emailform' );
	o.h2 = document.getElementById( 'sendemail' );
	if ( !o.form || !o.h2 ) return;
	o.n = o.form.name;
	o.e = o.form.email;
	o.p = o.form.phone;
	o.m = o.form.message;
	o.insbef = document.getElementById( 'submit' );
	if ( !o.n || !o.e || !o.p || !o.m || !o.form.insertBefore || !o.insbef ) return;
	o.n.setAttribute( 'aria-required', 'true' );
	o.e.setAttribute( 'aria-required', 'false' );
	o.p.setAttribute( 'aria-required', 'false' );
	o.m.setAttribute( 'aria-required', 'true' );
	var base = self.SMM.base;
	o.erdiv = base.cElt( 'div', '', 'error' );
	o.erdiv.setAttribute( 'role', 'alert' );
	o.erdiv.tabIndex = -1;
	o.erdiv.appendChild( base.cElt( 'h3', '', '', 'Error' ) );
	o.n.onblur = o.onblur_checkname;
	o.e.onblur = o.onblur_checkemail;
	o.p.onblur = o.onblur_checkphone;
	o.m.onblur = o.onblur_checkmessage;
	o.form.onsubmit = o.onsubmit_checkform;
 },
 checkname: function ( nv ) {
	if ( !nv ) { return [ 'Missing name' ]; }
	var er = new Array();
	if ( !nv.match( /[a-zA-Z]/ ) ) er[ er.length ] = 'Invalid name';
	if ( nv.length > 128 ) er[ er.length ] = 'Name too long';
	return er;
 },
 checkemail: function ( ev ) {
	var er = new Array();
	if ( ev ) {
		if ( !ev.match( /.\@([a-z0-9-]+\.)+[a-z]+$/ ) ) er[ er.length ] = 'Invalid email address';
	}
	return er;
 },
 checkphone: function ( pv ) {
	var er = new Array();
	if ( pv ) {
		if ( pv.length < 9 ) er[ er.length ] = 'Phone number too short';
		if ( pv.length > 64 ) er[ er.length ] = 'Phone number too long';
		if ( pv.match( /[^ 0-9\(\)+.x-]/ ) ) er[ er.length ] = 'Phone number contains invalid characters';
	}
	return er;
 },
 checkmessage: function ( mv ) {
	if ( !mv ) { return [ 'Missing message text' ]; }
	if ( mv.length > 5000 ) { return [ 'Enquiry message too long' ] };
	return [];
 },
 clearalert: function () {
	var o = this;
	if ( o.erdiv.parentNode ) o.erdiv.parentNode.removeChild( o.erdiv );
	var lc = o.erdiv.lastChild;
	if ( lc && lc.tagName.toLowerCase() == 'ul' ) o.erdiv.removeChild( lc );
 },
 openalert: function ( title, er, insbef ) {
	var o = this;
	var base = self.SMM.base;
	var h3 = o.erdiv.firstChild;
	h3.firstChild.data = title;
	var ul = base.cElt( 'ul' );
	for ( var i = 0; i < er.length; i++ ) ul.appendChild( base.cElt( 'li', '', '', er[i] ) );
	o.erdiv.appendChild( ul );
	insbef.parentNode.insertBefore( o.erdiv, insbef );
	if ( o.erdiv.scrollIntoView ) o.erdiv.scrollIntoView( false );
 },
 onblur_checkname: function () {
	var er = self.SMM.form.checkname( this.value );
	if ( er.length ) this.setAttribute( 'aria-invalid', 'true' );
	else this.setAttribute( 'aria-invalid', 'false' );
 },
 onblur_checkemail: function () {
	var er = self.SMM.form.checkemail( this.value );
	if ( er.length ) this.setAttribute( 'aria-invalid', 'true' );
	else this.setAttribute( 'aria-invalid', 'false' );
 },
 onblur_checkphone: function () {
	var er = self.SMM.form.checkphone( this.value );
	if ( er.length ) this.setAttribute( 'aria-invalid', 'true' );
	else this.setAttribute( 'aria-invalid', 'false' );
 },
 onblur_checkmessage: function () {
	var er = self.SMM.form.checkmessage( this.value );
	if ( er.length ) this.setAttribute( 'aria-invalid', 'true' );
	else this.setAttribute( 'aria-invalid', 'false' );
 },
 onsubmit_checkform: function () {
	var o = self.SMM.form;
	var er = o.checkname( o.n.value );
	var ev = o.e.value;
	var pv = o.p.value;
	if ( !ev && !pv ) er[ er.length ] = 'You need to specify either an email address or a phone number';
	var erev = o.checkemail( o.e.value );
	var erpv = o.checkphone( o.p.value );
	var ermv = o.checkmessage( o.m.value );
	er = er.concat( erev, erpv, ermv );
	if ( !er.length ) return true;
	o.clearalert();
	var title = 'Form Error';
	if ( er.length > 1 ) title = title + 's';
	o.openalert( title, er, o.insbef );
	return false;
 }
};

