function debug(whattodebug) {
	// $('debug').innerHTML = $('debug').innerHTML + "<br>" + whatto//debug;
	// console.info(whattodebug);
}

var EasyEvent = {
	id : null,
	tempid : null,
	sid : null,
	idparam : null,
	events : new Array(),
	currevent : null,
	baseurl : null,
	userevent : null,
	lastResponse : null,
	tabs : null,
	page : null,
	defaultSubmit : null,
	onSubmit : null,
	submitted : false,
	keypressSubmitted : false,
	effectDuration : 0.25,
	dispatch : function(name, evt) {
		this.userevent = evt;
		this.currevent = name;
		ev = this.events[this.currevent];

		if (!ev)
			return;

		// mk:debug

		this.baseurl = '/index.php?sid=' + this.sid + "&" + this.idparam + "="
				+ this.id + "&a=" + this.currevent;
		if (this.page) {
			this.baseurl += '&page=' + this.page
		}
		;
		if (ev.onSubmit) {
			EasyEvent.onSubmit = ev.onSubmit;
		}
		ev.action(ev);
		return true;
	},
	fireEvents : function(ev) {
		if (ev.onComplete) {
			eventsToFire = ev.onComplete;
			for ( var j = 0; j < eventsToFire.length; j++) {
				if (Object.isString(eventsToFire[j])) {
					this.dispatch(eventsToFire[j]);
				} else if (Object.isFunction(eventsToFire[j])) {
					eventsToFire[j]();
				}
			}
		}
	},
	register : function(name, properties) {
		this.events[name] = properties;
		return true;
	},
	refresh : function(ev) {
		new Ajax.Request(EasyEvent.baseurl, {
			asynchronous : false,
			onSuccess : function(transport) {
				$(ev.source).update(transport.responseText);
				EasyEvent.displayStack(ev);
				EasyEvent.fireEvents(ev);
			},
			onFailure : function(transport) {
				EasyEvent.displayStack(ev);
			}
		});
		return true;
	},
	showPopup : function(ev) {
		if (ev.resetIdBefore) {
			EasyEvent.id = null;
		}
		target_div = ev.source;
		$(target_div).innerHTML = "";

		EasyEvent.refresh(ev);
		Element.show(target_div);
		// popupin paikka ja sivulla keskelle
		var dimensions = $(target_div).getDimensions();
		$(target_div).setStyle(
				"left:" + ((900 - dimensions.width) / 2) + "px;top:"
						+ ((650 - dimensions.height) / 2) + "px;");

		if (!ev.disableCloak) {
			Element.show('black_cloak');
		}
		return true;
	},
	hide : function(ev) {
		Element.hide(ev.source);
		EasyEvent.fireEvents(ev);
		return true;
	},
	show : function(ev) {
		Element.show(ev.source);
		EasyEvent.fireEvents(ev);
		return true;
	},
	submitRequest : function(ev) {
		source = ev.source;
		target_url = EasyEvent.baseurl;
		if (source && Object.isString(source)) {
			target_url += "&src=" + source;
		}
		new Ajax.Request(target_url, {
			method : 'get',
			asynchronous : false,
			onSuccess : function(transport) {
				EasyEvent.lastResponse = transport.responseText;
				EasyEvent.displayStack(ev);
				EasyEvent.fireEvents(ev);
			},
			onFailure : function(transport) {
				EasyEvent.displayStack(ev);
			}
		});
		return true;
	},
	submitConfirmationRequest : function(ev) {
		confirmation = ev.confirmation;
		if (window.confirm(confirmation)) {
			return EasyEvent.submitRequest(ev);
		}
	},
	submitConfirmationForm : function(ev) {
		confirmation = ev.confirmation;
		if (window.confirm(confirmation)) {
			return EasyEvent.submitForm(ev);
		}
	},
	switchLayers : function(ev) {
		toShow = ev.show;
		toHide = ev.hide;
		Element.hide(toHide);
		Element.show(toShow);
		EasyEvent.fireEvents(ev);
	},
	submitCustomRequest : function(ev) {
		req = ev.url;
		new Ajax.Request(req, {
			method : 'get',
			asynchronous : false,
			onSuccess : function(transport) {
				EasyEvent.displayStack(ev);
				EasyEvent.lastResponse = transport.responseText;
				EasyEvent.fireEvents(ev);
			},
			onFailure : function(transport) {
				EasyEvent.displayStack(ev);
			}
		});
		return true;
	},
	submitForm : function(ev) {
		$(ev.source).action = EasyEvent.baseurl;
		paramHash = new Hash();
		if (ev.xtra) {
			for (x = 0; x < ev.xtra.length; x++) {
				$(ev.source).appendChild(new Element('input', {
					'type' : 'hidden',
					'name' : ev.xtra[x],
					'value' : $(ev.xtra[x]).value
				}));
			}
		}

		$(ev.source).request({
			asynchronous : false,
			onSuccess : function(transport) {
				EasyEvent.displayStack(ev);
				EasyEvent.lastResponse = transport.responseText;
				EasyEvent.fireEvents(ev);
			},
			onFailure : function(transport) {
				EasyEvent.displayStack(ev);
			}
		});
		return true;
	},
	setActiveTab : function(newActive) {
		// debug('newActive:'+newActive);
		if (EasyEvent.tabs) {
			for (j = 0; j < EasyEvent.tabs.length; j++) {
				current = $(EasyEvent.tabs[j]);
				current.removeClassName('active');
				link = current.select('a')[0];
				link.removeClassName('active');
				if (EasyEvent.tabs[j] == newActive) {
					current.addClassName('active');
					link.addClassName('active');
				}
			}
		}
	},
	displayStack : function(ev) {
		if (ev.displayStack) {
			EasyEvent.dispatch('displaystack');
		}
	},
	checkKeyPress : function(event) {
		EasyEvent.submitted = false;
		if (window.event) {
			if (window.event.keyCode == 13) {
				EasyEvent.submitted = true;
			}
		} else if (event) {
			if (event.which == 13) {
				EasyEvent.submitted = true;
			}
		}
		if (EasyEvent.submitted && EasyEvent.onSubmit) {
			EasyEvent.dispatch(EasyEvent.onSubmit);
			EasyEvent.keypressSubmitted = true;
		}
	},
	checkEvent : function(event) {
		if (EasyEvent.submitted || EasyEvent.keypressSubmitted) {
			EasyEvent.submitted = false;
			if (event && event.preventDefault) {
				event.preventDefault();
			}
			return false;
		}
		return true;
	},
	cancelEvent : function(evt) {
		if (window.event)
			window.event.cancelBubble = true;
		else
			evt.cancelBubble = true;
	},
	welcomeScreen : function() {
		var targetDiv = 'popuplayer';
		$(targetDiv).innerHTML = "";
		var sourceDiv = 'version_info';
		$(targetDiv).innerHTML = $(sourceDiv).innerHTML;
		$(sourceDiv).innerHTML = "";

		Element.show('black_cloak');
		var dimensions = $(targetDiv).getDimensions();
		$(targetDiv).setStyle("left: 120px;top:25px;");
		Element.show(targetDiv);

	},
	ieDisabledFix : function(el) {
		var selectElement = el;
		var selectIndex = selectElement.selectedIndex;
		var disabled = selectElement.options[selectIndex].disabled;
		if (disabled) {
			for (j = 0; j < selectElement.options.length; j++) {
				if (!selectElement.options[j].disabled) {
					selectElement.selectedIndex = j;
					break;
				}
			}
		}
		return true;
	},
	inspectButtonEvent : function(formid, buttons) {
		formEl = $(formid).getInputs('checkbox', 'sel[]');
		var anySelected = false;
		formEl.each(function(elm) {
			if (!elm.disabled) {
				if (elm.checked) {
					anySelected = true;
				}
			}
		});
		for (j = 0; j < buttons.length; j++) {
			Event.stopObserving(buttons[j], 'click');
			if (anySelected) {
				Event.observe(buttons[j], 'click', function() {
					EasyEvent.dispatch(this.id);
				});
				$(buttons[j]).removeClassName('not_active');
				$(buttons[j] + "_img").removeClassName('no_active_img');
			} else {
				Event.observe(buttons[j], 'click', function() {
					return false;
				});
				$(buttons[j]).addClassName('not_active');
				$(buttons[j] + "_img").addClassName('no_active_img');
			}
		}
	}
}

/**
 * Registering generic events
 */

EasyEvent.register('hidepopup', {
	action : function() {
		Element.hide('popuplayer');
		Element.hide('black_cloak');
		EasyEvent.dispatch('restoresubmit');
	}
});
EasyEvent.register('restoresubmit', {
	action : function() {
		EasyEvent.onSubmit = EasyEvent.defaultSubmit;
	}
});
EasyEvent.register('resetid', {
	action : function() {
		EasyEvent.id = null;
	}
});
EasyEvent.register('refreshview', {
	action : function() {
		window.location.replace(window.location.href);
	}
});
EasyEvent.register('displaystack', {
	action : function(ev) {
		new Ajax.Request('/easyscripts/message_stack.php', {
			onComplete : function(transport) {
				var responseText = transport.responseText.replace(/^\s+|\s+$/g,
						"");
				if (responseText != 'false') {
					$('message_stack').update(transport.responseText);
					Effect.Appear('message_stack', {
						duration : EasyEvent.effectDuration
					});
					setTimeout("Effect.DropOut('message_stack');", 10000);
				}
			}
		});
	}
});

var inputObserver = {
	checkSubmit : function(event) {
		var submitted = false;
		if (event.which && event.which == 13) {
			submitted = true;

		} else if (event.keyCode && event.keyCode == 13) {
			submitted = true;
		}
		return submitted;
	},
	observeEnter : function(event) {
		submitted = inputObserver.checkSubmit(event);
		if (submitted) {
			event.stop();
		}
		return !submitted;
	},
	attachEvents : function(inputList) {
		for ( var m = 0; m < inputList.length; m++) {
			var el = $(inputList[m]);
			if (el) {
				el.observe('keypress', inputObserver.observeEnter);
			}
		}
	}

}

