function contact() {
	this.emailLinkObservers = function(altclass) {
		if (altclass) {
			var searchclass = altclass;
		}
		else {
			var searchclass = 'email';
		}

		$$('#pagecontent .' + searchclass).each(function(o) {
			o.stopObserving('click');
			o.observe('click', function(e) {
				e.stop();
				contact.invokeModalbox(o);
			});
		});		
	}
	
	this.invokeModalbox = function(o, alturl, callback) {
		if (o) {
			var shortname = o.title;			
		}
		var refpage = window.location.href;	
		if (document.location.hash) {
			var usehash = document.location.hash.replace(/^#/,'');
		}
		else if (window.location.hash) {
			var usehash = window.location.hash.replace(/^#/,'');
		}
		else {
			var usehash = '';
		}
		if (alturl) {
			var url = alturl;
		}
		else {
			var url = '/nm_webkit/templates/contactform_template.php';
		}
		var mbparams = 'shortname=' + shortname + '&hash=' + usehash + '&refpage=' + refpage;
		if (typeof webkit.jsondata !== "undefined" && webkit.jsondata.contactblurb) {
			mbparams += '&contactblurb=' + webkit.jsondata.contactblurb;
		}
		if (typeof webkit.jsondata !== "undefined" && webkit.jsondata.sendbuttontext) {
			mbparams += '&sendbuttontext=' + webkit.jsondata.sendbuttontext;
		}
		Modalbox.show(url, { params:mbparams, title: 'Send email message', method:'post', width:650, overlayClose:false, afterLoad:function() {
			if (typeof callback !== "undefined") {
				callback();				
			}
			contact.emailFormObservers();
			
			// add scrollbars, if necessary
			webkit.MBscrollbars();
			
			// map shortname to full name, print to titlebar
			new Ajax.Updater('MB_caption', '/nm_webkit/templates/contactform_template.php', {
				method:'post',
				parameters:'returnname=true&findshortname=' + shortname
			})
		}});
	}
	
	this.emailFormObservers = function() {
		if ($('contacttextarea')) {
			var defaultmessage = $('contacttextarea').getValue();
			var enteredcontent = false;								
			$('contacttextarea').observe('focus', function() {
				if ($('contacttextarea').getValue() == defaultmessage) {
					$('contacttextarea').value = "";
					enteredcontent=true;
				}
			});			
		}
		
		if ($('sendbutton')) {
			$('sendbutton').observe('click', function(e) {
				e.stop();
				if (!$('submitby').getValue().match(/^.+?@.+?\..+?/)) {
					// invalid email address
					$('contactformfeedback').update('ERROR: invalid email address');
					new Effect.Pulsate('contactformfeedback', { duration:2, pulses:3});
				}
				else if (!$('name').getValue()) {
					$('contactformfeedback').update('ERROR: please enter your name');
					new Effect.Pulsate('contactformfeedback', { duration:2, pulses:3});
				}
				else if (!$('contacttextarea').getValue() || !enteredcontent) {
					$('contactformfeedback').update('ERROR: please enter a message');
					new Effect.Pulsate('contactformfeedback', { duration:2, pulses:3});
				}
				else {
					$('contactformfeedback').update('');
					new Ajax.Request('/nm_webkit/templates/contactform_template.php', {
						method:'post',
						parameters:'email=' + $('submitby').getValue() + '&name=' + $('name').getValue() + '&content=' + $('contacttextarea').getValue() + '&shortname=' + $('shortname').getValue() + '&refpage=' + $('refpage').getValue() + '&refhash=' + $('refhash').getValue() + '&contactsubmit=1',
						onComplete:function() {
							// empty fields
							$('name').value = '';
							$('submitby').value = '';
							$('contacttextarea').value = '';
							
							if ($('MB_content')) {
								$('MB_content').update('Success! Your email has been sent...');													
								Modalbox.resizeToContent();								
								setTimeout("Modalbox.hide()", 2000);								
							}						
							else {
								$('sendsuccessful').removeClassName('displaynone');
								$('sendsuccessfultext').update('Success! Your email has been sent...');																						
								new Effect.ScrollTo('sendsuccessful', { duration:0.5, afterFinish:function() {
									new Effect.Pulsate('sendsuccessfultext', { duration:2, pulses:3} );
								}});
							}
						}
					})

				}
			});	
		}
		
		if ($('cancelbutton') && $('MB_content')) {
			$('cancelbutton').observe('click', function() {
				Modalbox.hide();
			})
		}
		else if ($('cancelbutton')) {
			// inline form, hide cancel button
			$('cancelbutton').addClassName('displaynone');
		}
		
	}
	
	this.initObservers = function() {
		contact.emailLinkObservers();
		contact.emailFormObservers();
	}
}

var contact = new contact();
