var Request = Class.create();
Request.prototype = {
	initialize: function(reqIdent)
	{
		this.ident = reqIdent;
		this.param = "";
		
	},
	init_form: function(form)
	{
		this.form = form;
		this.form_asyncronRequest();
		this.form_createObserving();
	},
	init_container: function(container)
	{
		this.container = container;
	},
	form_asyncronRequest: function()
	{
		/*
		$$('form#' + this.form).each(function(form)
		{
			alert("got id");
			form.setAttribute('action', 'javascript:void(0)')
		});
		*/
		forms = document.getElementsByTagName('form');
		for(i=0;forms.length > i; i++)
		{
			if(forms[i].id != this.form) continue;
			forms[i].action = 'javascript:void(0)';
		}
	},
	form_createObserving: function()
	{
		forms = document.getElementsByTagName('form');
		for(i=0;forms.length > i; i++)
		{
			if(forms[i].id != this.form) continue;
			try
			{
				Event.observe(forms[i], 'submit', this.post.bind(this));
			}
			catch(e)
			{
				alert("fail");
				for(err in e)
				{
					alert(err+' + '+e[err]);
				}
			}
		}
	},
	container_replaceHtmlFade: function(html, container, config)
	{
		minHeight = false;
		if(typeof(config) == 'object') {
			config.minHeight ? minHeight = config.minHeight : '';
		}
		if(!container) container = this.container;
		new Effect.Opacity(
			container,
			{
				from: 1,
				to: 0,
				duration: 0.7,
				afterFinish: function()
				{
					containerOldDimension = $(container).getDimensions();
					$(container).hide();
					containerTempId = container + 'TEMP';
					styleFloat = $(container).getStyle("float");
					if(!styleFloat) styleFloat = 'none';
					$(container).insert({before: '<div id="' + containerTempId + '" style="position:relative;width'+containerOldDimension.width+'px;height:'+containerOldDimension.height+'px;float:'+styleFloat+';">&nbsp;</div>'});
					$(container).innerHTML = html;
					containerNewDimension = $(container).getDimensions();
					if(minHeight && containerNewDimension.height < minHeight) containerNewDimensionHeight = minHeight;
					else containerNewDimensionHeight = containerNewDimension.height;
					new Effect.Morph(
						containerTempId,
						{
							style: 'height:'+containerNewDimensionHeight+'px',
							duration: 0.7,
							afterFinish: function() 
							{
								$(containerTempId).remove();
								$(container).show();
								new Effect.Opacity(
									container,
									{
										from: 0,
										to: 1,
										duration: 0.7
									}
								);
							}
						}
					);
				}
			}
		);
		//$(container).innerHTML = html;
	},

	container_replaceHtml: function(html, container)
	{
		if(!container) container = this.container;
		$(container).innerHTML = html;
	},
	post_setParam: function(param)
	{
		if(this.param) this.param += "&";
		this.param += param;
	},
	post_getParam: function()
	{
		//if there is no parameter set
		if(!this.param) return;
		//generate request
		postParam = '?ident=' + this.ident + '&' + this.param;
		this.param = "";
		return postParam;
	},
	post : function(postEvent)
	{
		this[this.ident].beforeCreate(this, postEvent);
		postParam = this.post_getParam();
		new Ajax.Request(
			'/ajax/',
			{
				method:	'post',
				parameters:	postParam,
				onSuccess: this[this.ident].onSuccess.bind(this),
				onCreate: this[this.ident].onCreate.bind(this)
			}
		);
	}
}
