function submitForm(form, button) {
	if ($(button)) {
		disableButton(button);
	}

	var validator = new Validation(form);
	if (validator.validate()) {
		$(form).submit();
	} 
	else {
		if ($(button)) {
			enableButton(button);
		}
	}
}

function disableButton(button) {
	var button = $(button);
	if (button) {
		button.setStyle({opacity : .5});
		button.disabled = true;
	}
}

function enableButton(button) {
	var button = $(button);
	if (button) {
		button.setStyle({opacity : 1});
		button.disabled = false;
	}
}

function popWinGrimm(url, window_name, w, h, scroll, resize, center) {
	if (center) {
		var winPos = ',top=' + ((screen.height - h) / 2) + ',left=' + ((screen.width - w) / 2);
	}
	var scrollArg = (scroll == false) ? '' : ',scrollbars=1';
	var resizeArg = (resize == false) ? '' : ',resizable=1';
	flyout = window.open(url, window_name, "width=" + w + ",height=" + h + scrollArg + resizeArg + winPos);
	flyout.resizeTo(w, h);
	flyout.focus();
}

function closeWinGrimm() {
	window.close();
}

function printWinGrimm() {
	window.print();
}

// ********************************************************************************************************

/* Leasing-Angebot aus dem Popup senden. */

var Popup = Class.create();
Popup.prototype = {
	initialize : function () {
		this.loadWaiting = false;
		this.steps = ['send'];
	},

	ajaxFailure : function () {
		if (this.loadWaiting) {
			this.setLoadWaiting(false);
		}
		alert('Anfrage Rückmeldung:\n\n Whoops, die Anfrage ist fehlgeschlagen.\n Bitte versuchen Sie es nochmal.');
	},

	_disableEnableAll : function (element, isDisabled) {
		var descendants = element.descendants();
		for ( var k in descendants) {
			descendants[k].disabled = isDisabled;
		}
		element.disabled = isDisabled;
	},

	setLoadWaiting : function (step, keepDisabled) {
		if (step) {
			if (this.loadWaiting) {
				this.setLoadWaiting(false);
			}
			var container = $(step + '-buttons-container');
			container.setStyle({opacity : .5});
			this._disableEnableAll(container, true);
			$(step + '-please-wait').show();
		}
		else {
			if (this.loadWaiting) {
				var container = $(this.loadWaiting + '-buttons-container');
				var isDisabled = (keepDisabled ? true : false);
				if (!isDisabled) {
					container.setStyle({opacity : 1});
				}
				this._disableEnableAll(container, isDisabled);
				$(this.loadWaiting + '-please-wait').hide();
			}
		}
		this.loadWaiting = step;
	},

	setStepResponse : function (response) {
		if (response.update) {
			$('leasing-' + response.update.name + '-load').update(response.update.html);
			return true;
		}

		return false;
	}
}

var Leasing = Class.create();
Leasing.prototype = {

	initialize : function (form, submitUrl) {
		this.form = form;
		if ($(this.form)) {
			$(this.form).observe('submit', function (event) {
				this.send();
				Event.stop(event);
			}.bind(this));
		}
		this.submitUrl = submitUrl;
		this.onSend = this.nextStep.bindAsEventListener(this);
		this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
	},

	send : function () {
		if (popup.loadWaiting != false) {
			return;
		}

		var validator = new Validation(this.form);
		if (validator.validate()) {
			popup.setLoadWaiting('send');

			var request = new Ajax.Request(this.submitUrl, {
				method : 'post',
				onComplete : this.onComplete,
				onSuccess : this.onSend,
				onFailure : popup.ajaxFailure.bind(popup),
				parameters : Form.serialize(this.form)
			});
		}
	},

	resetLoadWaiting : function (transport) {
			popup.setLoadWaiting(false);
	},

	nextStep : function (transport) {
		if (transport && transport.responseText) {
			try {
				response = eval('(' + transport.responseText + ')');
			}
			catch (e) {
				response = {};
			}
		}

		if (response.error) {
			alert(response.message);
			return false;
		}

		popup.setStepResponse(response);
	}

}
