function copyElem(before, classN)
{
	var fields = $('fieldscont').getElementsByClassName(classN);

	if (fields.length > 0) {
		var data = fields[0].innerHTML;
		var rand = Math.round(Math.random() * 1000) + 3;
		var number = fields[0].id.substr(5);
		
		var newdata = data.replace(new RegExp('"v[0-9]+"', "ig"), '"v' + rand + '"');
		newdata = newdata.replace(new RegExp('"numbers[0-9]+"', "ig"), '"numbers' + rand + '"');
		newdata = newdata.replace(new RegExp("deleteFields\\([0-9]+\\)", "ig"), 'deleteFields(' + rand + ')');
		newdata = newdata.replace(new RegExp("'v[0-9]+'", "ig"), '\'v' + rand + '\'');
		newdata = newdata.replace(new RegExp("value[0-9]+", "ig"), 'value' + rand);
		newdata = newdata.replace(new RegExp("title[0-9]+", "ig"), 'title' + rand);
		newdata = newdata.replace(new RegExp("\[[0-9]+]", "ig"), '[' + rand + ']');

		new Insertion.Before(before, '<div id="field' + rand + '" class="' + classN + '">' + newdata + '</div>');
	} else {
		alert('Вы удалили все поля! Обновите страницу!');
	}
}

function getTitles(selectElem, id)
{
	var number = id.substr(1);
	if (selectElem.value == 2) {
		/* Скрываем textarea */
		$('value' + number).hide(); 
		/* получаем заголовки всех полей */	
		var elements = $('fieldscont').getElementsByClassName('title');
		/* и типы этих полей */	
		var types = $('fieldscont').getElementsByClassName('types');
		
		if ($('rootTitles' + number) == null) {
			var rootSelect = '<select class="rootTitles" name="rootTitles[' + number + ']" id="rootTitles' + number + '" onchange="printRootField(this)"><option value="-1">Выберите родительский элемент</option>'
			for(i = 0, j = elements.length; i < j; i++) {
				var titleId = elements[i].id.substr(5);
				/* поле не может быть "родителем" самого себя
				и зависимое поле не может быть родителем
				иначе логика будет просто ... */
				if (titleId != number && types[i].value == 1) {
					rootSelect += '<option value="' + titleId + '">' + elements[i].value + '</option>';
				}
			}
			rootSelect += '</select>';
			$(id).innerHTML += rootSelect;
		} else {
			$('rootTitles' + number).show();
			var subValue = $('fieldscont').getElementsByClassName('subValue' + number);
			var subValueSpan = $('fieldscont').getElementsByClassName('subValueSpan' + number);
			for (var i = 0, j = subValue.length; i < j; i++) {
				subValue[i].show();
				subValueSpan[i].show();
			}
		}
	} else {
		/* Показываем прежнее textarea */
		if ($('value' + number) != null) {
			$('value' + number).show();

			/*	И прячем все, что насоздавали вручную	*/
			/*	Поле выбора	*/
			$('rootTitles' + number).hide();
			/*	Поля ввода зависимых значений	*/
			var subValue = $('fieldscont').getElementsByClassName('subValue' + number);
			var subValueSpan = $('fieldscont').getElementsByClassName('subValueSpan' + number);
			for (var i = 0, j = subValue.length; i < j; i++) {
				subValue[i].hide();
				subValueSpan[i].hide();
			}
		} else {
			$('v' + number).innerHTML = '<label>Значения поля: <span style="color: red;">(по одному на строке, например, "Название пункта|значение")</span></label>';
			$('v' + number).innerHTML += '<textarea name="value[' + number + ']" id="value' + number + '" class="main_form" rows="7"></textarea>';
		}
		
		/*	Скрытые поля	*/
		$('parent' + number ).value = 0;
		$('type' + number ).value = 1;
	}
}

function printRootField(selectRootElem)
{
	if (selectRootElem.value >= 0) {
		var number = selectRootElem.id.substr(10);
		
		/* Разбиваем данные по строкам */
		var lines = $('value' + selectRootElem.value).value.split("\n");
		var names = [];
		for (i = 0, j = lines.length; i < j; i++) {
			if (lines[i] != '') {
				var tmp = lines[i].split("|");
				names.push(tmp[0]);
			}
		}
		
		var tmpString = '<br/><br/>';
		tmpString += '<input type="checkbox" name="field_hidden[' + number + ']" id="field_hidden' + number + '" value="1" /><label for="field_hidden' + number + '"><b>Сделать это поле скрытым</b></label>';
		tmpString += '<br/><small>(Примечание: в каждом поле ввода должно быть только по одному значению.)</small><br/><br/>';
		
		for (i = 0, j = names.length; i < j; i++) {
			tmpString += '<span class="subValueSpan' + number + '"><b>' + names[i] + '</b></span><br/><textarea name="subValue' + number + '[]" class="main_form subValue' + number + '" rows="7"></textarea><br/><br/>';
		}
		new Insertion.After(selectRootElem.id, tmpString);
		
		if ($('parent' + number ) != null) {
			$('parent' + number ).value = selectRootElem.value;
		} else {
			new Insertion.After($( 'field' + number ), '<input type="hidden" name="parent[' + number + ']" class="parent" id="parent' + number + '" value="' + selectRootElem.value + '" />');
		}
		
		if ($('type' + number ) != null) {
			$('type' + number ).value = 2;
		} else {
			new Insertion.After($( 'field' + number ), '<input type="hidden" name="type[' + number + ']" id="type' + number + '" value="2" />');
		}
	}
}

function deleteFields(fieldId)
{
	$('field' + fieldId).remove();
	var parent = $('fieldscont').getElementsByClassName('parent');
	for (i = 0, j = parent.length; i < j; i++) {
		if (parent[i]['value'] == fieldId) {
			var subId = parseInt(parent[i]['name'].substr(7));
			$('field' + subId).remove();
		}
	}
}

function validNumber()
{
	var lines = $('fieldscont').getElementsByClassName('types');
	for(i = 0, j = lines.length; i < j; i++) {
		if (lines[i].value == 2) {
			var currentIndex = lines[i].name.substr(5);
			currentIndex = parseInt(currentIndex);
			var rootIndex = $('rootTitles' + currentIndex).value;
			var currentNumber = parseInt($('numbers' + currentIndex).value) || 0;
			var rootNumber = parseInt($('numbers' + rootIndex).value) || 0;
			if (currentNumber <= rootNumber) {
				var tmp = $('numbers' + currentIndex).value = currentNumber + (rootNumber - currentNumber) + 1;
			}
		}
	}
}

function getTirazh()
{
	$('display_tirazh').innerHTML = parseInt($('tirazh').value) + ' экз.';
}

function copyFile(elemID)
{
	new Insertion.Before(elemID, '<input type="file" name="maket[]" /><br/>');
}
