
var FormChangeWatcher = new Class({
	Implements: [Options],

	options: {
		watchChangeOnEventAttached: false,
		watchChangeOn: false
	},

	initialize: function() {
		this.options.watchChangeOn = false;
		
		$(document.body).getElements('form[rel=watchchange]').each( function(formelement) {
			formelement.getElements('input').addEvent('keydown', function(event) {
				this.options.watchChangeOn = true;
				this.setWatchChangeOn();
			}.bind(this));
			formelement.getElements('select').addEvent('keydown', function(event) {
				this.options.watchChangeOn = true;
				this.setWatchChangeOn();
			}.bind(this));
			formelement.getElements('textarea').addEvent('keydown', function(event) {
				this.options.watchChangeOn = true;
				this.setWatchChangeOn();
			}.bind(this));
		}.bind(this));
	},

	setWatchChangeOn: function() {
		if (this.options.watchChangeOnEventAttached) return;

		$(document.body).getElements('a').each( function(aelement) {
			if (this.applyWatchOn(aelement)) {
				aelement.addEvent('click', function(el) {
					return this.getConfirmation();
				}.bind(this));
			}
		}.bind(this));

		this.options.watchChangeOnEventAttached = true;
	},

	applyWatchOn: function(aelement) {
		if (aelement.id.substr(0, 4) == "cke_") return false;
		if (aelement.className.substr(0, 10) == "cke_dialog") return false;
		if (aelement.href.substr(0, 11) == "javascript:") return false;
		//
		return true;
	},

	getConfirmation: function() {
		if (this.options.watchChangeOn) {
			return confirm("In einem Formular auf dieser Seite wurde der Inhalt geändert. Wollen Sie wirklich fortfahren ohne zu speichern?");
		}
		return true;
	}

});

var formChangeWatcher;
window.addEvent("domready", function() {
	formChangeWatcher = new FormChangeWatcher();
});

