ShowHideElement = function(elementTo){
	elementTo = $(elementTo);
	if (elementTo.hasClassName('open')){
		elementTo.removeClassName('open');
		elementTo.addClassName('hidden');
	}
	else {
		elementTo.removeClassName('hidden'); 
		elementTo.addClassName('open');
	};
}

var ToolTips = new Class.create();
ToolTips.prototype = {
	initialize: function(containerId){
		if (!$(containerId)) return;
		thisToolTip = this;
		$(containerId).getElementsBySelector('a').each(function(elementTo){
			Event.observe(elementTo, 'mouseover', thisToolTip.eventsForElement.elementOver.bindAsEventListener(thisToolTip));
			Event.observe(elementTo, 'mouseout', thisToolTip.eventsForElement.elementOut.bindAsEventListener(thisToolTip));
			Event.observe(elementTo, 'mousemove', thisToolTip.eventsForElement.elementMouseMove.bindAsEventListener(thisToolTip));
		});
		
		if (!$('__tool_tip')){
			divToolTip = document.createElement('DIV');
			divToolTip.id = '__tool_tip';
			if (Prototype.Browser.IE) document.body.insertBefore(divToolTip, document.body.firstChild);
			else document.body.insertBefore(divToolTip, document.body.down());
			this.toolTipDiv = $('__tool_tip');
			this.toolTipDiv.innerHTML = '<div class="wrap"><div class="wrap"><div class="wrap __last">&nbsp;</div></div></div>';
			this.toolTipDiv.setStyle({
				display: 'none',
				position: 'absolute'
			});
			this.toolTipDiv.addClassName('tooltip');
		}
		else this.toolTipDiv = $('__tool_tip');
	},
	
	eventsForElement: {
		elementOver: function(event){
			elementTo = Event.element(event);
			this.toolTipDiv.setStyle({
				display: 'block',
				left: Event.pointerX(event) + 12 + 'px',
				top: Event.pointerY(event) + 12 + 'px'
			});
			this.toolTipDiv.down('.__last').innerHTML = elementTo.innerHTML;
		},
		
		elementOut: function(event){
			this.toolTipDiv.setStyle({
				display: 'none'
			});			
		},
		
		elementMouseMove: function(event){
			this.toolTipDiv.setStyle({
				display: 'block',
				left: Event.pointerX(event) + 12 + 'px',
				top: Event.pointerY(event) + 12 + 'px'
			});
		}
	}
}

var SelectListUpdater = new Class.create();
SelectListUpdater.prototype = {
	initialize: function(responserLocation){
		this.option = Object.extend({
			arguments: {
				option: '',
				Itemid: ''
			},
			children: new Array(),
			changeElement: ''
		}, arguments[1] || {});
		this.responserLocation = responserLocation;
		if (!$(this.option.changeElement)) return;
		Event.observe($(this.option.changeElement), 'change', this.eventForChangeElement.bindAsEventListener(this));
		//Event.observe($(this.option.changeElement), 'keydown', this.eventForKeyDownElement.bindAsEventListener(this));
		this.argumentsString = '?';
		for (var prop in this.option.arguments) this.argumentsString += prop + '=' + this.option.arguments[prop] + '&';
	},
	
	eventForChangeElement: function(event){
		elementTo = Event.element(event);
		responserLocation = this.responserLocation;	
		argumentsString = this.argumentsString;
		for (i = 0; i < this.option.children.size(); i++){
			elementChange = this.option.children[i];
			new Ajax.Request(responserLocation, {
				method: 'post',
				parameters: argumentsString + 'from[' + elementTo.id + ']=' + elementTo.options[elementTo.selectedIndex].id + '&' + 'change=' + elementChange,
				onComplete: function(transport){
					elementToChange = transport.responseText.evalJSON();
					if ($(elementToChange.change)) {
						if (elementToChange.innerHTML){
							Form.Element.enable($(elementToChange.change));
							if (Prototype.Browser.IE){ 
								divWithSelect = document.createElement('DIV');
								divWithSelect.id = '__temporary_div';
								document.body.insertBefore(divWithSelect, document.body.firstChild);
								divWithSelect = $(divWithSelect.id);
								divWithSelect.innerHTML = '<SELECT>' + elementToChange.innerHTML + '</SELECT>';
								selectElement = divWithSelect.down('select');
								$(elementToChange.change).options.length = 0;
								for (i = 0; i < selectElement.options.length; i++){
									addedOption = document.createElement('option');
									addedOption.id = selectElement.options[i].id;
									addedOption.value = selectElement.options[i].value;
									addedOption.text = selectElement.options[i].text;
									$(elementToChange.change).options.add(addedOption);
								}
								divWithSelect.remove();
							}
							else $(elementToChange.change).innerHTML = elementToChange.innerHTML;
						}
						else {
							$(elementToChange.change).innerHTML = '';
							Form.Element.disable($(elementToChange.change));
						}
					};
				}
			});
		}
	},
	
	eventForKeyDownElement: function(event){
		if (event.keyCode == Event.KEY_DOWN || event.keyCode == Event.KEY_UP || 
			event.keyCode == Event.KEY_LEFT || event.keyCode == Event.KEY_RIGHT)
			this.eventForChangeElement(event);
	}
}

CheckAndSubmit = function(idForm, params){
	if ($(idForm)){
		for (var prop in params){
			if ($(prop)){
				if (!$(prop).value){ alert(params[prop]); return; }
			}
		}
		$(idForm).submit();
	}
}

AddCopyElement = function(idParent){
	parentElement = $(idParent);
	if (!parentElement) return;
	cloneChild = parentElement.down().cloneNode(true);
	parentElement.appendChild(cloneChild);
	cloneChild.getElementsBySelector('[id="]').each(function(elementTo){
		if (elementTo.id){
			newId = elementTo.id + '_clone_' + Math.random();
			while ($(newId)) newId = elementTo.id + '_clone_' + Math.random();
			elementTo.id = newId;
			elementTo.value = '';
			if (elementTo.name) elementTo.name = newId;
		}
	});
}

CreateWindow = function(locationAjax, parametersString){
	if ($('__div_window')) $('__div_window').remove();
	divWindow = document.createElement('DIV');
	divWindow.id = '__div_window';
	if (Prototype.Browser.IE) document.body.insertBefore(divWindow, document.body.firstChild);
	else document.body.insertBefore(divWindow, document.body.down());
	divWindow = $('__div_window');
	divWindow.setStyle({
		disaplay: 'none',
		zIndex: 100000,
		position: 'absolute'
	});
	new Ajax.Request(locationAjax, {
		method: 'post',
		parameters: parametersString,
		onComplete: function(transport){
			parametersFromAjax = transport.responseText.evalJSON();
			if (parametersFromAjax){
				scrollOffset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;				
				divWindow.setStyle({
					width: parametersFromAjax.width + 'px',
					height: parametersFromAjax.height + 'px',
					display: 'block',
					top: scrollOffset + 50 + 'px',
					left: '50%',
					marginLeft: (-0.5) * parametersFromAjax.width + 'px',
					border: '1px solid #dedede',
					padding: '10px',
					background: 'white'
				});
				divWindow.innerHTML = '<a href="javascript://" onclick="CloseTopWindow();" class="window_close">закрыть</a><img src="' + parametersFromAjax.src + '" alt="" />';
				if (Prototype.Browser.IE){
					$('article').getElementsBySelector('select').each(function(elementTo){
						elementTo.setStyle({
							visibility: 'hidden'
						});
					});
				}
			}
		}
	});
}

CloseTopWindow = function(){
	$('__div_window').remove();
	if (Prototype.Browser.IE){
		$('article').getElementsBySelector('select').each(function(elementTo){
			elementTo.setStyle({
				visibility: 'visible'
			});
		});
	}
}