function create_input_text(button, input_name)
{
var name = document.createElement('p');
name.innerHTML = input_name + '';
var new_input = document.createElement('input');
new_input.setAttribute('type', 'text');
new_input.setAttribute('readonly', 'readonly');
button.appendChild(name);
button.appendChild(new_input);
}
// add textarea
function create_input_textarea(button, input_name)
{
var name = document.createElement('p');
name.innerHTML = input_name + '';
var new_input = document.createElement('textarea');
new_input.setAttribute('rows', '10');
new_input.setAttribute('cols', '50');
new_input.setAttribute('readonly', 'readonly');
button.appendChild(name);
button.appendChild(new_input);
}
//add dropdown box
function create_input_select(button, input_name, array_of_items )
{
var name = document.createElement('p');
name.innerHTML = input_name + '';
var new_input = document.createElement('select');
var number_of_items = array_of_items.length;
for (var i = 0; i < number_of_items; i++)
{
var new_option = document.createElement('option');
new_option.appendChild(document.createTextNode(array_of_items[i]));
new_input.appendChild(new_option);
}
button.appendChild(name);
button.appendChild(new_input);
}
//add radio button
function create_input_radio(button, input_name, array_of_items)
{
var new_div = document.createElement('div');
button.appendChild(new_div);
var name = document.createElement('p');
name.innerHTML = input_name + '';
new_div.appendChild(name);
for (var i = 0; i < array_of_items.length; i++)
{
new_div.innerHTML += '' + array_of_items[i] + ' ';
}
}
// add checkbox
function create_input_checkbox (button, input_name, array_of_items )
{
var new_div = document.createElement('div');
button.appendChild(new_div);
var name = document.createElement('p');
name.innerHTML = input_name + '';
new_div.appendChild(name);
for (var i = 0; i < array_of_items.length; i++)
{
new_div.innerHTML += '' + array_of_items[i] + ' ';
}
}
// add calendar
function create_input_date(button, input_name)
{
var name = document.createElement('p');
name.innerHTML = input_name + '';
var new_input = document.createElement('input');
new_input.setAttribute('type', 'date');
button.appendChild(name);
button.appendChild(new_input);
}
//add input for editing text and textarea input's names
function create_input_for_text_name_editing (button)
{
var new_div = document.createElement('div');
button.parentNode.parentNode.getElementsByClassName('Value')[0].appendChild(new_div);
var name = document.createElement('p');
var name_text = 'Введите название заголовка:';
name.innerHTML = name_text + '';
var new_input = document.createElement('input');
new_div.appendChild(name);
new_div.appendChild(new_input);
}
//add input for editing dropdown box input
function create_input_for_select_editing (button)
{
var new_div = document.createElement('div');
button.parentNode.parentNode.getElementsByClassName('Value')[0].appendChild(new_div);
var name = document.createElement('p');
var name_text = 'Введите данные для редактирования:';
name.innerHTML = name_text + '';
var new_input = document.createElement('textarea');
new_input.setAttribute('rows', '10');
new_input.setAttribute('cols', '50');
var tip = 'Заголовок \n\Вариант выбора №1 \n\Вариант выбора №2 \n\Вариант выбора №3';
new_input.setAttribute('placeholder', tip);
new_div.appendChild(name);
new_div.appendChild(new_input);
}
//add input for editing radio input
function create_input_for_radio_editing (button)
{
var new_div = document.createElement('div');
button.parentNode.parentNode.getElementsByClassName('Value')[0].appendChild(new_div);
var name = document.createElement('p');
var name_text = 'Введите данные для редактирования:';
name.innerHTML = name_text + '';
var new_input = document.createElement('textarea');
new_input.setAttribute('rows', '10');
new_input.setAttribute('cols', '50');
var tip = 'Заголовок \n\Вариант выбора №1 \n\Вариант выбора №2 \n\Вариант выбора №3';
new_input.setAttribute('placeholder', tip);
new_div.appendChild(name);
new_div.appendChild(new_input);
}
//add input for editing checkbox input
function create_input_for_checkbox_editing (button)
{
var new_div = document.createElement('div');
button.parentNode.parentNode.getElementsByClassName('Value')[0].appendChild(new_div);
var name = document.createElement('p');
var name_text = 'Введите данные для редактирования:';
name.innerHTML = name_text + '';
var new_input = document.createElement('textarea');
new_input.setAttribute('rows', '10');
new_input.setAttribute('cols', '50');
var tip = 'Заголовок \n\Вариант выбора №1 \n\Вариант выбора №2 \n\Вариант выбора №3';
new_input.setAttribute('placeholder', tip);
new_div.appendChild(name);
new_div.appendChild(new_input);
}
function delete_input_form(button)
{
button.parentNode.parentNode.getElementsByTagName('form')[0].remove();
}
function get_array_of_items (array_of_inputs) // получить массив значений из инпутов
{
var array_of_items = [];
for (var k = 0; k < array_of_inputs.length; k++ )
{
if(array_of_inputs[k].type != 'button')
array_of_items.push(array_of_inputs[k].value);
}
return array_of_items;
}
function removeAllChilds_besides_buttons(el)
{
while( el.childNodes[el.childNodes.length-1] && el.childNodes[el.childNodes.length-1].id != 'preview_button' && el.childNodes[el.childNodes.length-1].id != 'addToDBButton')
while( el.childNodes[el.childNodes.length-1] && el.childNodes[el.childNodes.length-1].id != 'preview_button' && el.childNodes[el.childNodes.length-1].id != 'add_to_db_button' && el.childNodes[el.childNodes.length-1].id != 'addToDBButton')
{
el.removeChild(el.childNodes[el.childNodes.length-1]);
}
}
function show_afm_after_editing() // отображение того, как будет выглядеть исследование на странице после редактирования
{
// предварительно удаляет старый вывод таблицы
var isComplete = prooveIsTableComplete();
if(isComplete != 0 )
{
var msg = 'Error: Для корректного предпросмотра';
createErrorAlert(isComplete, msg);
return;
}
var div_preview = document.getElementById('preview');
removeAllChilds_besides_buttons(div_preview);
// показывает новый вывод таблицы
var button = document.getElementById('preview');
var table = document.getElementById('editableTable');
var number_of_elements = table.rows.length / 2;
var current_type;
for (var i = 1; i < number_of_elements; i++)
{
var array_of_selects = table.rows[i * 2 - 1].getElementsByTagName('td')[3].getElementsByTagName('select')[0];
current_type = array_of_selects.options[array_of_selects.selectedIndex].value;
switch (current_type)
{
case 'Text area': // textarea
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
create_input_textarea(button, input_name);
break;
case 'Select': // select
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
create_input_select(button, input_name, array_of_items);
break;
case 'Radio': // radio
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
create_input_radio(button, input_name, array_of_items);
break;
case 'Check Box': // checkbox
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
create_input_checkbox(button, input_name, array_of_items);
break;
case 'Input': // input
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
create_input_text(button, input_name);
break;
}
}
}
function get_data_for_db() // считывание данных из таблицы-редактора для записи их в БД
{
// формирование строки для передачи в бд в виде (имя поля, тип поля, значения полей)
var data = "";
var table = document.getElementById('editableTable');
var number_of_elements = table.rows.length / 2;
var current_type;
for (var i = 1; i < number_of_elements; i++)
{
var array_of_selects = table.rows[i * 2 - 1].getElementsByTagName('td')[3].getElementsByTagName('select')[0];
current_type = array_of_selects.options[array_of_selects.selectedIndex].value;
switch (current_type)
{
case 'Text area': // textarea
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
data += input_name; data += '$';
data += '1'; data += '$';
data += ' '; data += '$';
break;
case 'Select': // select
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data += input_name; data += '$';
data += '2'; data += '$';
for (var j = 0; j < array_of_items.length - 1; ++j)
{
data += array_of_items[j]; data += '|';
}
data += array_of_items[j]; data += '$';
break;
case 'Radio': // radio
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data += input_name; data += '$';
data += '3'; data += '$';
for (var j = 0; j < array_of_items.length - 1; ++j)
{
data += array_of_items[j]; data += '|';
}
data += array_of_items[j]; data += '$';
break;
case 'Check Box': // checkbox
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data += input_name; data += '$';
data += '4'; data += '$';
for (var j = 0; j < array_of_items.length - 1; ++j)
{
data += array_of_items[j]; data += '|';
}
data += array_of_items[j]; data += '$';
break;
case 'Input': // input
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
data += input_name; data += '$';
data += '5'; data += '$';
data += ' '; data += '$';
break;
}
}
var sel = document.getElementById('typeeq_id');
var typeeq_id = sel.options[sel.selectedIndex].value;
if (typeeq_id == '-1')
{
var name_of_new_typeeq = document.getElementById('name_of__typeeq').value;
document.getElementById('name_of_new_typeeq').setAttribute('value', name_of_new_typeeq);
}
document.getElementById('typeeq_data_for_db').setAttribute('value', typeeq_id);
document.getElementById('data_for_db').setAttribute('value', data);
}
function prooveIsTableComplete()
{
var error = 0;
var table = document.getElementById('editableTable');
var number_of_elements = table.rows.length / 2;
var current_type ;
if(number_of_elements > 1)
{
for (var i = 1; i < number_of_elements; i++)
{
var array_of_selects = table.rows[i * 2 - 1].getElementsByTagName('td')[3].getElementsByTagName('select')[0];
current_type = array_of_selects.options[array_of_selects.selectedIndex].value;
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
if( input_name === "")
{
error = 1;
return error;
}
if(current_type!= "Text area" && current_type!= "Input")
{
if( array_of_items.length === 0 )
{
error = 2;
return error;
}
for (var j = 0; j < array_of_items.length; ++j)
{
if( array_of_items[j] === "")
{
error = 3;
return error;
}
}
}
}
}
else
{
error = 4;
return error;
}
return error;
}
/*
* error types:
* 1 - empty name field
* 2 - empty value list
* 3 - empty value name
* 4 - empty table
* 5 - empty typeeq name
*
*/
function createErrorAlert(errorType, msg)
{
switch (errorType)
{
case 1:
alert(msg +' необходимо заполнить все поля имен описаний.');
break;
case 2:
alert(msg +' необходимо добавить хотя бы одно значение для перечислимых типов.');
break;
case 3:
alert(msg +' необходимо заполнить все поля имен значений.');
break;
case 4:
alert(msg +' необходимо добавить хотя бы одну строчку.');
break;
case 5:
alert(msg +' необходимо ввести имя отдела.');
break;
}
}
function getDataForDB() // считывание данных из таблицы-редактора для записи их в БД (ajax - version)
{
var data = {};
var sel = document.getElementById('typeeq_id');
var typeeq_id = sel.options[sel.selectedIndex].value;
data['typeeqName'] = document.getElementById('name_of__typeeq').value;
if(data['typeeqName'] === "")
{
var msg = 'Error: Для отправки изменений в базу данных';
data['error'] = 5;
createErrorAlert(data['error'], msg);
return data;
}
var isComplete = prooveIsTableComplete();
if(isComplete != 0 )
{
var msg = 'Error: Для отправки изменений в базу данных';
createErrorAlert(isComplete, msg);
data['error'] = isComplete;
return data;
}
data['error'] = 0;
// формирование строки для передачи в бд в виде (имя поля, тип поля, значения полей)
var emptyString = "";
var table = document.getElementById('editableTable');
var number_of_elements = table.rows.length / 2;
var current_type;
for (var i = 1; i < number_of_elements; i++)
{
var array_of_selects = table.rows[i * 2 - 1].getElementsByTagName('td')[3].getElementsByTagName('select')[0];
current_type = array_of_selects.options[array_of_selects.selectedIndex].value;
var input_name = table.rows[i * 2 - 1].getElementsByTagName('td')[1].getElementsByTagName('textarea')[0].value;
switch (current_type)
{
case 'Text area': // textarea
data['field' + i + 'description'] = input_name;
data['field' + i + 'type'] = 1;
data['field' + i + 'values'] = "";
break;
case 'Select': // select
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data['field' + i + 'description'] = input_name;
data['field' + i + 'type'] = 2;
data['field' + i + 'values'] = createStringFromArray(array_of_items);
break;
case 'Radio': // radio
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data['field' + i + 'description'] = input_name;
data['field' + i + 'type'] = 3;
data['field' + i + 'values'] = createStringFromArray(array_of_items);
break;
case 'Check Box': // checkbox
var array_of_inputs = table.rows[i * 2 - 1].getElementsByTagName('td')[4].getElementsByTagName('input');
var array_of_items = get_array_of_items (array_of_inputs);
data['field' + i + 'description'] = input_name;
data['field' + i + 'type'] = 4;
data['field' + i + 'values'] = createStringFromArray(array_of_items);
break;
case 'Input': // input
data['field' + i + 'description'] = input_name;
data['field' + i + 'type'] = 5;
data['field' + i + 'values'] = "";
break;
}
}
for (var i = number_of_elements; i <= 10; i++)
{
data['field' + i + 'description'] = "";
data['field' + i + 'type'] = "";
data['field' + i + 'values'] = "";
}
return data;
}
$('body').off('click','#addToDBButton').on('click','#addToDBButton', function(){
var data = getDataForDB();
if(data['error']!=0)
return;
if(confirm("Вы уверены, что хотите внести изменения в базу данных? Некоторые изменения могут сильно повлиять на работоспособность системы заявок."))
{
//var rc_id = $('#rc_id').children(':selected')[0].value;
var rc_id = document.getElementById('rc_id_for_js').value;
var typeeq_id = $('#typeeq_id').children(':selected')[0].value;
$.post("EditForm_databaseChanger.php?rc_id="+rc_id+"&typeeq_id="+typeeq_id, data , function(o){
if(o != "База данных успешно обновлена.")
{
alert("Непредвиденная ошибка при обновлении базы данных.");
}
else
{
var tablePlace = $('#editableTablePlace');
//var rc_id = $('#rc_id').children(':selected')[0].value;
var rc_id = document.getElementById('rc_id_for_js').value;
$('#editableTablePlace').empty();
$('#type_selectorPlace').empty();
$('#type_selectorPlace').load('editForm_typePicker.php?rc_id='+rc_id);
alert(o);
}
});
}
});
function createStringFromArray(array)
{
var string = "";
for(var i = 0 ; i < array.length ; i++)
{
string += array[i];
if(i