var sendForm=function(elem, ajax, url, params)
{
	var qry={}, arr=[];
	arr.merge(elem.getElementsByTagName('INPUT'),elem.getElementsByTagName('TEXTAREA'),elem.getElementsByTagName('SELECT'))
	for(var i=0; i<arr.length; i++)
		if(arr[i].name)
			if(arr[i].type!='checkbox' || (arr[i].type=='checkbox' && arr[i].checked==true))
				qry[arr[i].name] = arr[i].value;
	var ajx=ajax || new Ajax();
	ajx.send(url || elem.action,qry, params);
	if(!ajax) delete ajax;
};

var CCalculator=new Class({
	'init': function(form)
	{
		this.form=form;
		this.id=form.formId.value;
		var fields=$$('.field', form);
		var evt,btn;
		for(var i=0; i<fields.length; i++)
		{
			if(fields[i].type=='checkbox') evt='click';
				else if(fields[i].type=='text') evt='keyup';
					else evt='change';
			if(fields[i].type=='hidden')
			{
				btn=document.createElement('INPUT');
				btn.type='button';
				btn.value='Выбрать';
				tool.addEvent(btn,'click', tool.bind(this.getLinkItems, this, [fields[i].name]));
				fields[i].parentNode.appendChild(btn);
			}
			tool.addEvent(fields[i],evt, tool.bind(this.result, this));
		}
	},
	'clear': function(text, parent)
	{
		if(!parent) parent=this.form;
		if(!parent.childNodes) return;
		for(var i=0; i< parent.childNodes.length; i++)
		{
			if(parent.childNodes[i].id && parent.childNodes[i].id.substr(0,4)=='out_')
				parent.childNodes[i].innerHTML=text;
			this.clear(text, parent.childNodes[i]);
		}
	},
	'getResultCallback': function()
	{
		//alert(this.ajax.response.text);
		this.clear('');
		var data=Ajax.JSON(this.ajax.response.text);
		for(var key in data)
			$('out_'+key).innerHTML=data[key];
	},
	'result': function(e, name)
	{
		this.fireEvent('change',[name || e.target.name]);
		this.ajax=new Ajax();
		this.ajax.addEvent('success', tool.bind(this.getResultCallback, this));
		this.clear('Подсчёт...');
		sendForm(this.form, this.ajax, '/netcat/modules/calculator/response.php', {'formId': this.id});
	},
	'getLinkItems': function(name)
	{
		var src=this.form[name+'_src'].value;
		win=window.open(src, '', 'width=800, height=600, location=no, scrollbars=yes, status=no, menubar=no, toolbar=no, resizable=yes');
		CCalculator.selectBind=tool.bind(CCalculator.select, this, [win,name]);
	}
});

CCalculator.select=function(win,name, id)
{
	this.form[name].value=id;
	var div=$$('.linkContent',this.form[name].parentNode)[0];
	div.innerHTML=win.document.getElementById('RowIDItem'+id).innerHTML;
	delete(this.win);
	this.result(false,name);
};

CCalculator.onLoad=function()
{
	var forms=$$('.calculatorForm');
	for(var i=0; i<forms.length; i++)
	{
		if(!forms[i].formId) continue;
		CCalculator[i]=new CCalculator(forms[i]);
		tool.loadScript('/netcat/modules/calculator/scripts/form'+CCalculator[i].id+'.js', tool.empty);
	}
};

tool.addEvent(window, 'load', CCalculator.onLoad);
