// БЫСТРОЕ РЕДАКТИРОВАНИЕ
function edit_item (row, url, time)
{
	close_edit_window();
	var q_table = create_element ('TBODY');		
	var q_header = create_element ('TH', {colspan: '2'}, "Параметры");
	q_header = create_element('TR', null, q_header);
	q_table.appendChild(q_header);
	
	var q_field;
	
	for(var field in row) {
				
		var q_field_title = create_element('TD', {className: 'title'}, row[field][0]+":");
		
		if (!row[field][2]) {
			var param_struct = {name: field, value: row[field][1] || "", type: 'text'};
		}
		else if(row[field][2]=="file") {
			var param_struct = {name: field, type: 'file'};
		}
		else if(row[field][2]=="hidden") {
			var param_struct = {name: field, type: 'hidden', value: row[field][1] || ""};
		}
			
		var q_field_value = create_element('input', param_struct);
		q_field_value = create_element('TD', null, q_field_value);
					
		q_field = create_element ('TR', null, [q_field_title, q_field_value]);
		if(row[field][2]=="hidden")
			q_field.style.display = 'none';
			
		q_table.appendChild(q_field);
	}
	
	var q_submit = create_element ('INPUT', {type: 'submit', value: 'Сохранить', className: 'button'});
	q_submit =create_element('TH', {colspan: 2}, q_submit);
	q_submit = create_element('TR', null, q_submit);
	q_table.appendChild(q_submit);

	q_table = create_element ('TABLE', {border: '0', cellspacing: '0', cellpadding: '0', className: 'edit format'}, q_table);
	var q_form =  create_element ('FORM', {name: 'quick_form', method: 'post', action: url, enctype: 'multipart/form-data'}, q_table);
	
	var q_close = create_element('A', {className: 'close_button', href: 'javascript: void(0)'}, "X");
	
	if(typeof attachEvent != "undefined") 
		q_close.attachEvent("onclick", close_edit_window);
	else
		q_close.addEventListener("click", close_edit_window, false);
							
	var container = create_element ('DIV', {id: 'quick_edit', className: 'quick_edit'}, [q_close, create_element("BR"), q_form]);
	if(BrowserDetect.browser=="Explorer") {
		var height = window.screenTop +(document.body.clientHeight/2);
	}
	else {
		var height = window.pageYOffset +(document.body.clientHeight/2);
	}
	container.style.top = height+'px';
	document.body.insertBefore(container, document.body.firstChild);
}
function close_edit_window ()
{
	var open_object = select_object('quick_edit');
	if(open_object)	
		open_object.parentNode.removeChild(open_object);
}

// РАБОТА С КАРТИНКАМИ

// Содержит список пар 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 = images_original+arguments[i+1];
		img_array[arguments[i]] = img;
	}
}
// Заменить картинку по id
// img_id - uid картинки
// pic_id - имя из списка img_array (если пусто, то используется img_id)
// actor_uid - кто вызвал смену картинки, если при наведении на саму же картинку - можно пропустить
function image_swap (img_uid, actor_uid, pic_id)
{
	elem_pic = select_object(img_uid);
	
	actor_uid = actor_uid || img_uid;
	elem_actor = select_object(actor_uid);
	
	pic_id = pic_id || elem_pic.id;
	
	if (elem_pic!=undefined && img_array[pic_id]!=undefined && img_array[pic_id].src!=elem_pic.src) {
		// Заменяем, старую подвешиваем на tmp_src
		if (elem_pic.tmp_src==undefined) {
			elem_pic.tmp_src = elem_pic.src;
			elem_pic.src = img_array[pic_id].src;
			
			// Привязываем id вызываемой картинки картинку
			elem_actor.bind_id = elem_pic.id;
			add_event(actor_uid, "mouseout", image_restore, false);
		}
	}
}
// Востановить замененную картинку
function image_restore (evt) 
{
	var elem_actor = select_target(evt);
	var pic = elem_actor.bind_id || elem_actor.id;
	var elem_pic = select_object(pic);
	
	if (elem_actor!=undefined) {
		delete_event(elem_actor, "mouseout", image_restore);
		// Возвращаем из tmp_src
		if (elem_pic.tmp_src!=undefined) {
			elem_pic.src = elem_pic.tmp_src;
			elem_pic.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(form_uid, change_elem, confirm_text) 
{
	var result=0;
	result=confirm(confirm_text);
	if (result) {
		form_submit(form_uid, 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(elem) {
		form_element_build (form_uid, change_elem);
		elem.submit();
		return true;
	}
}

// Создать или присвоить
function form_element_build (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 {
				var param = {type: "hidden", name:change_elem[i], value:change_elem[i+1]};
				var inp = create_element ("INPUT", param);
				elem.appendChild(inp);
			}
			return elem;
		}
	}	
}
// Создать элемент
// tag - имя тега
// param - объект с параметрами
// inner_element - Вложеный элемент (может быть массивом или текстом)
function create_element (tag, param, inner_element)
{
	inner_element = inner_element || null;
	
	var elem;
	if(typeof(tag) == "string")
		elem  = document.createElement(tag);
	else
		elem = tag;
			
	if (param) {
		for(var key in param) {
			switch (key) {
				case "inner":
						var html = param[key];
					break;
				case "class":
				case "className":
					if(BrowserDetect.browser=="Explorer") 
						elem.setAttribute("className", param[key]);
					else
						elem.setAttribute("class", param[key]);
					break;
				case "name":
						elem.setAttribute("name", param[key]);
					break;
				case "enctype":
						elem.setAttribute("enctype", param[key]);
						elem.setAttribute("encoding", param[key]);					
					break;
				case "colspan":
					if(BrowserDetect.browser=="Explorer") 
						elem.setAttribute("colSpan", param[key]);
					else
						elem.setAttribute("colspan", param[key]);
					break;
				default:
						elem.setAttribute(key, param[key]);
					break;
			}
		}
	}
	
	if (inner_element) {
		if(typeof(inner_element) == "string")
			elem.appendChild(create_text_element(inner_element));
		else if(is_array(inner_element))
			for(var i=0; i<inner_element.length; i++)
				elem.appendChild(inner_element[i]);
		else
			elem.appendChild(inner_element);
	}
	
	if(html!=undefined) {
		elem.innerHTML = html;
	}
	
	return elem;
}
// Создать текстовый элемент
function create_text_element (text_inner)
{
	var elem;
	elem = document.createTextNode(text_inner);
	return elem;
}

// Скопировать поля
// Первый аргумент - имя формы куда перенести элемент
// Второй аргумент имя формы из которой берется элемент
// Дальше повторяются имена полей для переноса
function element_copy (form_from, form_to, elem_array) 
{
	var inp;
	var elem_source = select_object(form_from);
	var elem_insert = select_object(form_to);
	
	for (var i=0; elem_array.length>i; i+=1) {		
		if (elem_insert.elements[elem_array[i]]) {
			elem_insert.elements[elem_array[i]].value=elem_source.elements[elem_array[i]].value;
		}
		else {
			inp  = document.createElement('INPUT');
			inp.setAttribute("type", "hidden");
			inp.setAttribute("name", elem_array[i]);
			inp.setAttribute("value", elem_source.elements[elem_array[i]].value);
			elem_insert.appendChild(inp);
		}
	}

	return false;
}
// Выбор элементов по значению
// elem_uid - Имя элементов
// arg - массив значений, элемент с которым нужно выбрать
function form_element_select (elem_uid, arg) 
{
	if(!arg)
		return false;
		
	var elem = select_object(elem_uid);

	if (elem.length) {
		
		for (var item=0; elem.length>item; item++ ) {
			var val = get_value(elem[item]);

			for (var arg_item=0; arg.length>arg_item; arg_item++) {
				if (val==arg[arg_item])
					set_select(elem[item]);
			}
		}			
	}
}

// Изменить 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 - имя формы, 
// В форме проверяется все, что содержит атрибут needcheck, как название используется атрибут needchecktitle
// имя email Всегда вызывает проверку по типу email
function form_check(form_uid) 
{
	var err_string="";
	var elem = select_object(form_uid);
	
	if(!elem)
		return false;
	
	elem = elem.elements;
			
	for (var i=0; elem.length > i; i++) {
		var needcheck = get_attribute (elem[i], "needcheck");
		if(needcheck) {
			if(elem[i].name=='email') {
				reg_mail=/[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i;
				if (reg_mail.test(elem[i].value)==false) {
						var needchecktitle = get_attribute (elem[i], "needchecktitle");
						err_string=err_string+"- "+needchecktitle+" \n"; 
				}
			}
			else {
				if (get_value(elem[i])=="") {// Для текстовых полей и select
					var needchecktitle = get_attribute (elem[i], "needchecktitle");
					err_string = err_string+"- "+needchecktitle+" \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)
		return false;
		
	if (elem.length) {
		for (var i=0; i < elem.length; i++) {
	 		elem[i].checked=make_var;
		}
	}
	else {
		elem.checked=make_var;
	}
}


// ДИНАМИКА ОБЪЕКТОВ

// Dыбрать элемент
// Только один список
var select_item_last = null;
function select_item(uid, effect_type, effect, effect_default)
{
	var elem = select_object(uid);
	if(!elem)
		return false;
		
	if (select_item_last && select_item_last==elem)
		return false;
		
	switch (effect_type) 
	{
		case "color":
				if (select_item_last!=null)
					select_item_last.style.color = effect_default;
				elem.style.color = effect;
			break;
		default: 
				
			break;	
	}
	select_item_last = elem;
}
// Показать один из элементов, остальные скрыты
// elem_baseid - базовое имя элемента (к нему прибавляется номер, начиная с 0)
// elem_index - номер элемента для показа (undefined  - скрыть все)
function display_one (elem_baseid, elem_index)
{ 
	var current_index=0;
	var elem = select_object(elem_baseid+current_index);
	// Скрыть все
	while ( elem ) {
		elem.style.display="none";
		current_index++;
		elem = select_object(elem_baseid+current_index);
	}
	// Открыть один
	if(elem_index!=undefined) {
		elem = elem = select_object(elem_baseid+elem_index);
		if (elem)
			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)
{ 
	var elem = select_object(uid);
	
	if(elem==undefined)
		return false;
		
	var 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';

	if(!is_array(elem_array)) {
		elem_array = [elem_array];
	}
	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, after){
	var clone_point = select_object(clone_elem);
	var insert_point = select_object(insert_place);
	var clone_node;
	var after = after || 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(after)
			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;
}


// РАБОТА С ОКНАМИ

// url, pic_width, pic_height, new_win, win_scroll, win_toolbar
function win(param)
{
	param = win_param_default (param);
	if(param==false)
		return false;
	
	var NewWin=window.open("", param.win_name,'width='+param.win_width+',height='+param.win_height+',resizable=yes,menubar='+param.win_toolbar+',toolbar='+param.win_toolbar+',scrollbars='+param.win_scroll+',status=no,location=no');
	NewWin.document.open();
	NewWin.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
	NewWin.document.write('<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><title>Галерея</title></head><body style="margin:0px;padding:0px">');
	NewWin.document.write('<a href="javascript:self.close()"><img src=upload/'+param.url+' border=0></a>');
	NewWin.document.write('</body></html>');
	NewWin.document.close();
}

function win_page(param) 
{
	param = win_param_default (param);
	if(param==false)
		return false;

	var NewWin=window.open(param.url, param.win_name,'width='+param.win_width+',height='+param.win_height+',resizable=yes,menubar='+param.win_toolbar+',toolbar='+param.win_toolbar+',scrollbars='+param.win_scroll+',status=no,location=no');
}

// Установить параметры по умолч
function win_param_default (param)
{
	if(param && param.url)
	{
		param.win_width  = param.win_width || 600; 
		param.win_height  = param.win_height || 400; 
		param.new_win = param.new_win || 1;
		param.win_scroll  = param.win_scroll || 'no';
		param.win_toolbar  = param.win_toolbar || 'no';  
		
		if (param.new_win) 
			param.win_name = (Math.floor(Math.random()*1000) ).toString();
		else 
			param.win_name = 'default';
			
		return param;
	}

	return false;	
}


// ПРОЧЕЕ
function generate_password(field, size) 
{
	size = size || 8;
	var digit = new Array("0","1","2","3","4","5","6","7","8","9")
	var symbol_b = new Array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","Y","Z")
	var symbol_l = new Array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","y","z")

	var password = "";

	for (var i= 0; i<size; i++)
	{
		var rand = Math.random();
		if ( (rand - 1.0/3.0) < 0.0)
		{
			rand = Math.floor(Math.random() * 9);
			password += digit[rand]
 		}
		else if ( (rand - 2.0/3.0) < 0.0)
		{
			rand = Math.floor(Math.random() * 24);
			password += symbol_b[rand]
 		}
		else
		{
			rand = Math.floor(Math.random() * 24);
			password += symbol_l[rand]
		}
	}
	
	elem = select_object(field);
	elem.value = password;
}



function bind_function(uid, event_name, function_pointer, execute)
{
	var elem = select_object(uid);
	if(elem) {
		if(!elem.length)
			elem = new Array(elem);
		execute = execute || false;
		for(var i=0; i< elem.length; i++) {
			if(typeof attachEvent != "undefined") 
				elem[i].attachEvent("on"+event_name, function_pointer );
			else
				elem[i].addEventListener(event_name, function_pointer, false);
			if(execute) { // Выполнить для первого объекта
				function_pointer(elem[i]);
				execute = false;
			}
		}
	}
}

function select_target(evt)
{
	var evt = evt || false;
	
	if(window.event) {
		return window.event.srcElement;
	}
	else if(evt) {
		if(typeof(Event)!="undefined" && evt instanceof Event) {
			return evt.target; 
		}
		else {
			return evt;
		}
	}
	else {
		return false;
	}
		
}