var BurtsBill = Class.create();	
BurtsBill.prototype = {
	initialize: function() {
		this.message = $("burtsBillMessage");
		if( this.message ) {
			this.check = $("burtsBillCustom");
			this.check.onclick = this.toggleMessage( this ).bindAsEventListener( this );
		}
		
		// Check for burt's bill e-spot form errors in global scope
		if( burtsBillErrors ) {
			
			this.firstName = this.createField( $("firstName") );
			this.lastName = this.createField( $("lastName") );
			this.zipCode = this.createField( $("zipCode") );
			this.email = this.createField( $("email") );
			this.jointhehive = this.createField( $("jointhehive") );
			
			this.populateField( this.firstName, burtsBillErrors.firstName );
			this.populateField( this.lastName, burtsBillErrors.lastName );
			this.populateField( this.zipCode, burtsBillErrors.zipCode );
			this.populateField( this.email, burtsBillErrors.email );
			this.populateField( this.jointhehive, burtsBillErrors.jointhehive );
			
		}
    },
	
	populateField: function( field, data ) {
		field.setValue( data.value );
		field.clearError();
		if( data.hasError ) {
			field.setError( data.error );
		}
		if( data.hasSelected ) {
			field.addSelected( data.value, data.selected );
		}
	},
	
	createField: function( formField ) {
		var type = formField.nodeName.toLowerCase();
		var retval = {
			element: formField,
			container: formField.parentNode,
			type: type,
			setError: function( msg ) {
				this.errors = Builder.node( 'p', {}, msg );
				this.container.appendChild( this.errors );
				Element.addClassName( this.container, "error" );
			},
			clearError: function() {
				if( this.hasError() ) {
					this.container.removeChild( this.errors );
					Element.removeClassName( this.container, "error" );
				}
			},
			hasError: function() {
				return Element.hasClassName( this.container, "error" );
			},
			show: function() {
				Element.show( this.container );
			},
			hide: function() {
				Element.hide( this.container );
			},
			setValue: function( value ) {
				switch( this.type ) {
					case 'input':
						if( this.element.type == "checkbox" ) {
							this.element.removeAttribute( "checked" );
							if( value == 'true' ) {
								this.element.setAttribute( "checked", "checked" );
							}
						} else {
							this.element.value = value;
						}
						break;
					case 'select':
						if( value && value != '' ) {
							var options = this.element.getElementsByTagName("option");
							var len = options.length;
							for( var i = 0; i < len; i++ ) {
								var option = options[i];
								if( option.value == value ) {
									this.element.selectedIndex = i;
									break;
								}
							}
						}
				}
			},
			addSelected: function( value, title ) {
				var opt = Builder.node( "option", { value: value }, title );
				if( this.element.firstChild ) {
					this.element.insertBefore( opt, this.element.firstChild );
				} else {
					this.element.appendChild( opt );
				}
				this.element.selectedIndex = 0;
			},
			resetOptions: function() {
				var elem = this.element;
				new Ajax.Updater( elem, "AjaxCMSAvailablePages", { parameters: { type: elem.name }, asynchronous: false } );
			}
		}
		
		return retval;
	},
    
    toggleMessage: function( me ) {
    	return function(e) {
    		if( $F(me.check) == 'true' ) {
    			Form.Element.enable( me.message );
    		} else {
    			Form.Element.disable( me.message );
    		}
    	}
    }
};

var burtsBill;
Event.observe( 
	window, 
	"load", 
	function(e){ burtsBill = new BurtsBill(); } 
);