
function WSSubmitIndicator (options) {
	this.options = options;
	this.delayedIndicateEvent = null;
	if (this.options.form) {
		this.attachTo(this.options.form);
	}
	if (this.options.validation) {
		this.formValidSet = false;
		this.options.validation.options.onFormValidate = this.setValidationResult.bind(this);
	} else {
		this.formValid = true;
		this.formValidSet = true;
	}
}

WSSubmitIndicator.prototype.setValidationResult = function (result) {
	this.formValid = result;
	this.formValidSet = true;
	if (this.delayedIndicateEvent) {
		this.indicate(this.delayedIndicateEvent);
	}
};

WSSubmitIndicator.prototype.indicate = function (event) {
	if (this.formValidSet) {
		if (this.formValid) {
			var conditionMet;
			switch (typeof this.options.condition) {
			case "function":
				conditionMet = this.options.condition();
				break;
			case "boolean":
			case "number":
				conditionMet = this.options.condition;
				break;
			case "string":
				conditionMet = eval(this.options.condition);
				break;
			default:
				conditionMet = true;
			}
			if (conditionMet) {
				var form = event.element();
				form.getElements().each(function (control) { control.blur(); });
				var formContainer = $(form.parentNode);
				formContainer.makePositioned();
				var formContainerDimensions = formContainer.getDimensions();
				var overlay = new Element('div', { style: 'position: absolute; top: 0; left: 0; margin: 0; padding: 0; width: ' + formContainerDimensions.width + 'px; height: ' + formContainerDimensions.height + 'px; background-color: white; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0);' });
				var indicatorImage;
				if (this.options.image) {
					indicatorImage = new Element('img', { src: this.options.image, style: 'border: none; position: absolute; bottom: 20px; right: 50px;' });
					overlay.insert(indicatorImage);
				}
				formContainer.insert(overlay);
				if (this.options.image) {
					new Ajax.Request(this.options.image, { asynchronous: false });
					var overlayDimensions = overlay.getDimensions();
					var indicatorImageDimensions = indicatorImage.getDimensions();
					indicatorImage.style.top = ((overlayDimensions.height - indicatorImageDimensions.height) / 2) + "px";
					indicatorImage.style.left = ((overlayDimensions.width - indicatorImageDimensions.width) / 2) + "px";
				}
				new Effect.Opacity(overlay, { to: 0.67, duration: 0.1 });
				// DEBUG: event.stop();
			}
		}
	} else {
		this.delayedIndicateEvent = event;
	}
};

WSSubmitIndicator.prototype.attachTo = function (formID) {
	Event.observe($(formID), 'submit', this.indicate.bind(this));
};

