	function validate_field(field, pattern){
		field.className = '';
		if (field.value.search(pattern) == -1){
			field.className = 'error';
			valid = 0;
		}
	}

	function disableButtons(frm){
		var buttons = frm.getElementsByTagName('button');
		for (var i = 0; i < buttons.length; i++){
			buttons[i].disabled = true;
		}
	}

	function getPath(v, id, host){
		ID(id).innerHTML = host + '/' + v;
	}

	function loadSelect(value, select, hash){
		select = ID(select);
		while(select.length > 0){
			select.remove(0);
		}
		for (var v in hash[value]){
			var item = document.createElement('option');
			item.value = v;
			item.text = hash[value][v];
			try {
				select.add(item, null);
			} catch(ex) {
				select.add(item);
			}
		}
	}

	function copyFields(btn, count){
		var dt = document.getElementsByTagName("DT");
		var dd = document.getElementsByTagName("DD");
		var dl = btn.parentNode.parentNode;
		var insertPoint = btn.parentNode.previousSibling;
		var i = 0;
		while(insertPoint != dt[i]){
			i++;
		}
		var counter = btn.previousSibling;
		counter.value++;
		for (var j = i - count; j < i; j++){
			dl.insertBefore(dt[j].cloneNode(1), insertPoint);
			var newdd = dd[j].cloneNode(1);
			newdd.innerHTML = newdd.innerHTML.replace(/name="([\w\_]+)\_([0-9]+)"/ig, 'name="$1_' + counter.value + '"');
			newdd.innerHTML = newdd.innerHTML.replace(/show_calendar\(\'frm\.([\w\_]+)\_([0-9]+)\'\)/ig, 'show_calendar(\'frm.$1_' + counter.value + '\')');
			dl.insertBefore(newdd, insertPoint);
		}
	}

	var image = 0;
	function addImage(el, name){
		image++;
		var div = document.createElement('DIV');
		var img = document.createElement('INPUT');
		img.className = 'image';
		img.type = 'file';
		img.name = name + '[' + image + ']';
		div.appendChild(img);
		var a = document.createElement('A');
		a.href = '#delete';
		a.innerHTML = 'удалить';
		a.onclick = function(){deleteImage(this.parentNode)};
		div.appendChild(a);
		el.parentNode.insertBefore(div, el);
	}

	function deleteImage(el){
		el.parentNode.removeChild(el);
	}

