/*

Form validation setup

requires MooTools 1.2.4

*/


window.addEvent('domready', function(){

	// class to assist form validation message display

	var ValidationHelper = new Class({
			Implements: [Options],
			list:[],
			options: {
				errorMsgClass: 'error-message',
				okMsgClass: 'value-valid',
				warnMsgClass: 'value-warn',
				dateFormat: 'dd/MM/yy',
				showErrorsInline: true,
				label: 'Please wait...'    	    	
			},
			initialize: function(options){
				this.setOptions(options);			
			}, //end initialize
	
			setMsg: function(el, msg){
				if(msg == undefined){
					msg = el.title + ' is required';
				}
				if(this.options.showErrorsInline){
					if(el.error == undefined){
						el.error = new Element('span').addClass(this.options.errorMsgClass).set('html',msg).inject(el,'after');
					}else{
						el.error.set('text',msg);
					}
				}
			}, // end setMsg
			
			setOk: function(el){
				this.clearBadge(el);
				el.badge = new Element('span').addClass(this.options.okMsgClass).set('html','&nbsp;').inject(el,'after');
			},
			
			setWarn: function(el){
				this.clearBadge(el);
				el.badge = new Element('span').addClass(this.options.warnMsgClass).set('html','&nbsp;').inject(el,'after');
			},
			
			
			clearBadge: function(el){
				if(el.badge != undefined){
					el.badge.dispose();
					el.badge = undefined;
				}		
			},
			
			clearMsg: function(el){
				if(el.error != undefined){
					el.error.dispose();
					el.error = undefined;
				}
			} // end clearMsg 
		
		}); // end ValidationHelper class



		// member-details form validation and ui helpers
			
		if($('memberDetailsForm')){
			
			vh = new ValidationHelper();
			
			// form validation
			var formValidator = new Form.Validator($('memberDetailsForm'), {
		    evaluateFieldsOnBlur: true,
		    evaluateFieldsOnChange: true,
		    stopOnFailure: true,
		    onElementFail: function(el, failures){vh.setWarn(el);},
		    onElementPass: function(el){vh.setOk(el);},
		    onFormValidate: function(passed, el, event){
		    	if(!passed){
		    		event.preventDefault();
		    		// scroll to validation failing element
		    		new Fx.Scroll(window).toElement(el);
		    	}
		    }
			});

			// show membership fee on membertype update
			if($('membertype')){
				var updateMemberFee = function(){
					var feeValue = membertypearray[$('membertype').value];
					var costdisp = $('membercostdisplay');
					if(($('membercostdisplay')) && (feeValue)){
						$('membercostdisplay').set('html', '&pound;' + feeValue);
					}
					else{
						$('membercostdisplay').set('html', 'N/A');
					}
				}
				$('membertype').addEvent('change', function(){
					updateMemberFee();
				});
				updateMemberFee();
			}
			
			// enable/disable 'Other Title' field on title update
			if(($('title')) && ($('alt_title'))){
				var updateTitle = function(){
					if($('title').value != 'other'){
						$('alt_title').disabled = 'disabled';
						$('alt_title').removeClass('required');
						$('alt_title').addClass('disabled');
						$('alt_title_label').addClass('disabled');
						vh.clearBadge($('alt_title'))
					}
					else{
						$('alt_title_label').removeClass('disabled');
						$('alt_title').removeClass('disabled');
						$('alt_title').removeClass('validation-failed');
						$('alt_title').addClass('required');
						$('alt_title').disabled = '';
						$('alt_title').focus();
					}
				}
				$('title').addEvent('change', function(){
					updateTitle();
				});
				updateTitle();
			}			
			
		}
		
	});