// Добавить объект в таблицу

// Очистка формы по клику в поле
var need_clear = new Array();
// this_elem - указатель на объект
// условное имя
function clearfield (uid, mark)
{
	if (need_clear[mark]==undefined)
	{
		var elem = select_object(uid);
		need_clear[mark]=1;
		elem.value="";
	}
}




// РАБОТА С КАРТИНКАМИ

// Содержит список пар id имя файла
var img_array = new Array();

// Загрузить список - ргументы это пары id и img_array
function image_preload()
{
	for(i=0; i<arguments.length; i=i+2 ) {
		img = new Image();
		img.src = arguments[i+1];
		img_array[arguments[i]] = img;
	}
}
// Заменить картинку по id
// img_id - uid картинки
// pic_id - имя из списка img_array (если пусто, то используется img_id)
function image_swap (img_uid, pic_id)
{
	elem = select_object(img_uid);
	pic_id = pic_id || elem.id;
	
	if (elem!=undefined && img_array[pic_id]!=undefined) {
		// Заменяем, старую подвешиваем на tmp_src
		if (!elem.tmp_src) {
			elem.tmp_src = elem.src;
			elem.src = img_array[pic_id].src;
		}
	}
}
// Востановить замененную картинку
function image_restore (img_uid) 
{
	elem = select_object(img_uid);
	if (elem!=undefined) {
		// Возвращаем из tmp_src
		if (elem.tmp_src) {
			elem.src = elem.tmp_src;
			elem.tmp_src = undefined;
		}
	}
}



// ФУНКЦИИ 2 РЕДАКЦИИ

// Перейти по адресу
// url
// confirm_text - текст запроса
function link_confirm(url, confirm_text) 
{
	var result=0;
	result=confirm(confirm_text);
	if (result) {
		return link(url);
	}
	return false;
}

// Перейти по адресу
// url
function link(url) 
{
	document.location = url;
	return true;
}

// Установить скрытые поля и отправить форму с запросом
// formname - имя формы
// confirm_text - текст запроса
// change_elem - array(пары "поле, значение")
function form_submit_confirm(formname, change_elem, confirm_text) 
{
	var result=0;
	result=confirm(confirm_text);
	if (result) {
		form_submit(formname, change_elem);
		return true;
	}
	return false;
}
// Установить скрытые поля и отправить форму с запросом
// formname - имя формы
// confirm_text - текст запроса
// change_elem - array(пары "поле, значение")
function form_submit(form_uid, change_elem) 
{
	var elem = select_object(form_uid);
	if(change_elem != undefined) {
		for (var i=0; change_elem.length>i; i+=2) {		
			if (elem.elements[change_elem[i]]) {
				elem.elements[change_elem[i]].value=change_elem[i+1];
			}
			else {
				inp  = document.createElement('INPUT');
				inp.setAttribute("type", "hidden");
				inp.setAttribute ("id", change_elem[i]);
				inp.setAttribute("name", change_elem[i]);
				inp.setAttribute("value", change_elem[i+1]);
				elem.appendChild(inp);
			}
		}
	}
	elem.submit();
	return true;
}

// Выбор элементов по значению
// elem_uid - Имя элементов
// arg - значение, элемент с которым нужно выбрать
function form_select (elem_uid, arg) 
{
	if(arg == '')
		return false;
		
	var elem = select_object(elem_uid);

	if (elem.length) {
		// Если нет значения - первый
		if(arg == '') {
				if (elem[0].type=="checkbox" || elem[0].type=="radio")
						elem[0].checked=true;
					else
						elem[0].select=true;
		}
		else {
			for (var item=0; elem.length>item; item++ ) {
				if (elem[item].value==arg.toString()) {
					if (elem[item].type=="checkbox" || elem[item].type=="radio")
						elem[item].checked=true;
					else
						elem[item].select=true;
				}
			}
		}
		
	}
	else {
		if (elem.value==arg) {
				if (elem.type=="checkbox" || elem[item].type=="radio")
					elem.checked=true;
				else
					elem.selected=true;
		}
	}
}

// Изменить Action формы
// action_path - ('' - востановит путь)
function form_action (uid, action_path)
{
	var elem = select_object(uid);

	if(elem) {
		if (action_path=="" && elem.back_action)
			elem.action = elem.back_action;
		else {
			if(!elem.back_action)
				elem.back_action = elem.action;
			elem.action = action_path;
		}
		return true;
	}
	return false;
}

// Проверка заполнения
// form_name - имя формы, 
// parametr - повторяются пары "поле, описание ошибки если пустое"
// имя email Всегда вызывает проверку по типу email
function form_check(form_uid, parametr) 
{
	var err_string="";
	var elem = select_object(form_uid);
	
	for (var i=0; parametr.length > i; i+=2) {	
		if (parametr[i]=='email') {
			reg_mail=/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i;
			if (reg_mail.test(elem.elements['email'].value)==false) {
					err_string=err_string+"- "+parametr[i+1]+" \n"; 
			}
		}
		else {
			elem_type = elem.elements[parametr[i]].type || "";
			if(elem_type=="checkbox") { // Для чекбоксов
				if (elem.elements[parametr[i]].checked==false) { 
						err_string=err_string+"- "+parametr[i+1]+" \n"; 
				}
			}
			else {
				if (get_value(elem.elements[parametr[i]])=="") { // Для текстовых полей
						err_string=err_string+"- "+parametr[i+1]+" \n"; 
				}
			}
		}
	}
	
	if (err_string!="") {
		err_string="Неправильно заполнены следующие поля: \n"+err_string;
		alert(err_string);
		return false;
	}
	return true;
}

// Отметить все Checkbox
// elem_uid - имя чекбоксов
// invers - если 1 - то убрать выделение
function form_mark_field(elem_uid, invers)
{
	invers = invers || 0;
	
	if (invers==0)
		make_var = true;
	else
		make_var = false;
		
	var elem = select_object(elem_uid);
		
	if (elem.length) {
		for (var i=0; i < elem.length; i++) {
	 		elem[i].checked=make_var;
		}
	}
	else {
		elem.checked=make_var;
	}
}

// Показать один из элементов, остальные скрыты
// elem_baseid - базовое имя элемента (к нему прибавляется номер, начиная с 1)
// elem_index - номер элемента для показа (0  - скрыть все)
function display_one (elem_baseid, elem_index)
{ 
	var current_index=1;
	var elem = document.getElementById(elem_baseid + current_index);
	// Скрыть все
	while ( elem!=null ) {
		elem.style.display="none";
		current_index++;
		elem = document.getElementById(elem_baseid + current_index);
	}
	// Открыть один
	if(elem_index!=0) {
		elem = document.getElementById(elem_baseid + elem_index);
		if (elem!=null)
			elem.style.display="";
	}
}

//!


// Показать элемент в зависимости от того поставлен флажок checkbox или нет
// uid - элемент чекбокс
// show_uid - показываемый объект
function display_condition (uid, show_uid)
{ 
	elem = select_object(uid);
	showelem = select_object(show_uid);
	
	if(elem==undefined || showelem==undefined)
		return false;

	if(elem.checked==true)
		show = '';
	else
		show = 'none';
		
	showelem.style.display = show;
}

// Показать элемент в зависимости от значения
// uid - элемент чекбокс
// status_table - массив какие элементы к какому знач привязаны [[знач, элементб элемент], ]
function display_condition_value (uid, status_table)
{ 
	elem = select_object(uid);
	
	if(elem==undefined)
		return false;
		
	elem_value = elem.value;

	// Сброс всей видимости
	for(var i=0; i<status_table.length; i++){
		elem_array = status_table[i];
		
		elem_change_status (array_shift(elem_array), 0);	
	}
	
	for(i=0; i<status_table.length; i++){
		elem_array = status_table[i];
	
		if (elem_array[0]==elem_value && elem_array.length>1) {
			elem_change_status (array_shift(elem_array), 1);
		}
	}
	
}
// elem_array - [uid,]
// elem_status - (0 - не виден, 1 - виден, 2 - инвертировать)
function elem_change_status (elem_array, elem_status)
{
	if(elem_status)
		show = '';
	else
		show = 'none';

	for(var i=0; i<elem_array.length; i++){
		elem_current = select_object(elem_array[i]);
		if(elem_status==1)
			show = '';
		else if (elem_status==2) {
			if (elem_current.style.display!="none")
				show = 'none';
			else
				show = '';
		}
		else
			show = 'none';
		if(elem_current)
			elem_current.style.display =  show;
	}
}

// Добавить объект в таблицу
// clone_elem - название клонируемого объекта 
// name_insert - место вставки

// inputs - Число ввставок
// max_inputs - Максимальное число вставок
var inputs = Array();
var max_inputs = Array();

function row_insert(clone_elem, insert_place, before){
	var clone_point = select_object(clone_elem);
	var insert_point = select_object(insert_place);
	var clone_node;
	var before = before || 0;
	clone_node = clone_point.cloneNode(true);
	
	clone_node.setAttribute("id", "new_"+inputs);
	//clone_node.style.display="";
	if (inputs[insert_place]==undefined || max_inputs[insert_place]==undefined || max_inputs[insert_place]==0 || inputs[insert_place]<max_inputs[insert_place]) {
		if(before)
			insert_point.parentNode.insertBefore(clone_node,insert_point.nextSibling);
		else
			insert_point.parentNode.insertBefore(clone_node,insert_point);
		if (inputs[insert_place]==undefined)
			inputs[insert_place]=0;
		else
			inputs[insert_place]++;
	}
}
// выставить максимум элементов для вставки
function row_max(insert_place, count) {
	max_inputs[insert_place]=count;
}
// выставить текущее число элементов
function row_current(insert_place, count) {
	inputs[insert_place]=count;
}
// выставить текущее число элементов
function row_decrease(insert_place, count) {
	count = count || 1;
	if (inputs[insert_place]!=undefined)
		inputs[insert_place]=inputs[insert_elem] - count;
	else
		inputs[insert_place] = 0;
}



// Выбор объекта
// На входе структура 
//  	form: [form_name, elem_name],
//		id:,
//   	pointer: 
function select_object(uni_id)
{
	var elem;
	if(typeof( uni_id ) == 'string') {
		uni_id = {id: uni_id};
	}
		
	if (uni_id.form){
		if ( is_array(uni_id.form) )
			form_name = uni_id.form[0];
		else
			form_name = uni_id.form;
		
		elem = document.forms[form_name];

		if (is_array(uni_id.form) && uni_id.form[1])
			elem = elem.elements[uni_id.form[1]];

	}
	
	else if (uni_id.id) {
		elem = document.getElementById(uni_id.id);
	}
	
	else if (uni_id.pointer) {
		elem = uni_id.pointer;
	}
	else
		elem = undefined;	

	return elem;
}
// Получить текст или свойство объекта формы
// elem_pointer - Ссылка на объект
function get_value(elem_pointer) 
{
	if (elem_pointer==undefined)
		return NULL;
		
	var elem_value;

	if (elem_pointer.text!=undefined)
		elem_value = elem_pointer.text;
	else if(elem_pointer.value!=undefined)
		elem_value = elem_pointer.value;
		
	return elem_value;
}
// Системные команды
function is_array( mixed_var ) {   
 
    return ( mixed_var instanceof Array );
}
function array_shift( elem_array ) {    
 
    var tmp_arr = [];
 
    // input sanitation
    if( !elem_array || !elem_array.length ){
        return null;
    }
 	
 	for (var i=1; i<elem_array.length; i++) {
 		tmp_arr[i-1]=elem_array[i];
 	}
 	
    return tmp_arr;
}
