var inputs_cnt = 0;
var selectedInputContainer;
var input2move = "";

//*****************************************
function galleryUpdateTitleWin(frame, imgName, hasTitle, btn)
{
	if(!windows.galleryTitle)
		return;
	var imgTD = btn.parentNode.previousSibling;
	var img = imgTD.children[0];
	var titleVisibility = (hasTitle > 0) ? "" : " display: none;"
	var hidden = (img.alt == 0) ? "" : "checked='checked'";
	// не понятно как передать ссылку на картинку
	// как временный вариант - передаем позицию таблицы картинки в текущей галереи
	var imgTable = imgTD.parentNode.parentNode.parentNode;
	var galleryTable = imgTable.parentNode;
	var pos;
	for (pos = 0; pos < galleryTable.children.length; pos++)
		if(imgTable == galleryTable.children[pos])
			break;
	//********************************************
	var input = "<form><div style='text-align: center;'><input type='text' value='" + img.title + "' name='title' class='text fileloader' style='margin: 3px;" + titleVisibility + "'/><br/><input type='checkbox' value='1' name='hidden' " + hidden + " /> не отображать на сайте<br/><input type='button' value='Изменить данные' onclick='galleryUpdateData(\"" + frame + "\", \"" + imgName + "\", " + pos + ", this.form.title.value, (this.form.hidden.checked) ? 1 : 0);' class='button' /></div></form>";
	windows.galleryTitle.setContent(imgTD.innerHTML + input);
	windows.galleryTitle.setWidth('400');
	windows.galleryTitle.show();
	windows.galleryTitle.setPos_parent(btn);
}
//*****************************************
function galleryUpdateData(frameName, imgName, imgTablePos, title, hidden)
{
	var frame = getElem("iLoader_" + frameName);
	if (!frame)
		return false;
	var galleryTable = getElem(frameName + "_gallery");
	var imgTable;
	if ( galleryTable && (imgTable = galleryTable.children[imgTablePos]) )
	{
		var img = imgTable.children[0].children[0].children[0].children[0];
		if ( (title != img.title) || (hidden != img.alt) )
		{
			var iDoc = (isIE) ? frame.contentWindow.document : frame.contentDocument;
			var formID = iDoc.getElementById('iLoaderForm').form.value;
			var gallery = iDoc.getElementById('iLoaderForm').name.value;
			var parentID = iDoc.getElementById('iLoaderForm').id.value;
			ajax("/admin/ajax_functions.php", "function=updateGalleryImgData&formid=" + formID + "&gallery=" + gallery + "&parentid=" + parentID + "&img=" + imgName + "&title=" + title + "&hidden=" + hidden, 
				function(result)
				{
					if (result['debug'])
						alert(result['debug']);
					if (result['error'])
						alert(result['error']);
					else
					{
						/*img.alt =*/ img.title = title;
						img.alt = hidden;
						windows.galleryTitle.close();
					}
				}
			);
		}
	}
}
//*****************************************
function iLoaderFavouriteImg(frame, imgName, btn)
{
	if (!frame)
		return false;
	var imgTable = btn.parentNode.parentNode.parentNode.parentNode;
	var iDoc = (isIE) ? frame.contentWindow.document : frame.contentDocument;
	var formID = iDoc.getElementById('iLoaderForm').form.value;
	var gallery = iDoc.getElementById('iLoaderForm').name.value;
	var parentID = iDoc.getElementById('iLoaderForm').id.value;
	var firstImg = imgTable.parentNode.children[0];
	if (firstImg != imgTable)
	{
		ajax("/admin/ajax_functions.php", "function=favouriteGalleryImg&formid=" + formID + "&gallery=" + gallery + "&parentid=" + parentID + "&img=" + imgName, 
				function(result)
				{
					if (result['debug'])
						alert(result['debug']);
					if (result['error'])
						alert(result['error']);
					else
					{
						imgTable.parentNode.insertBefore(imgTable, imgTable.parentNode.children[0]);
						btn.style.display = "none";
						firstImg.children[0].children[0].children[1].children[0].style.display = "";
					}
				}
			);
	}
}
//*****************************************
function iLoaderDelImg(frame, imgName, btn)
{
	if (!frame)
		return false;
	var imgTable = btn.parentNode.parentNode.parentNode.parentNode;
	var iDoc = (isIE) ? frame.contentWindow.document : frame.contentDocument;
	var formID = iDoc.getElementById('iLoaderForm').form.value;
	var gallery = iDoc.getElementById('iLoaderForm').name.value;
	var parentID = iDoc.getElementById('iLoaderForm').id.value;
	ajax("/admin/ajax_functions.php", "function=delGalleryImg&formid=" + formID + "&gallery=" + gallery + "&parentid=" + parentID + "&img=" + imgName, 
				function(result)
				{
					if (result['debug'])
						alert(result['debug']);
					if (result['error'])
						alert(result['error']);
					else
					{
						if ( (imgTable.parentNode.children > 1) && (imgTable.parentNode.children[0] == imgTable) ) // удаляем первое (основное) изображение
						{
							var newMainImgTable = imgTable.parentNode.children[1];
							newMainImgTable.children[0].children[0].children[1].children[0].style.display = "none";
						}
						imgTable.parentNode.removeChild(imgTable);
					}
				}
		);
}
//*****************************************
function iLoaderResult(frame, galleryID)
{
	if (!frame)
		return false;
	var iDoc = (isIE) ? frame.contentWindow.document : frame.contentDocument;
	var error = (iDoc.getElementById('error')) ? iDoc.getElementById('error').value : false;
	var img_path = (!error && iDoc.getElementById('img_file_name')) ? iDoc.getElementById('img_file_name').value : "";
	var galleryName = (!error && iDoc.getElementById('name')) ? iDoc.getElementById('name').value : "";
	var hasTitle = (!error && iDoc.getElementById('hasTitle')) ? iDoc.getElementById('hasTitle').value : 0;
	var title = (!error && hasTitle && iDoc.getElementById('img_title')) ? iDoc.getElementById('img_title').value : "";
	var visibility = (!error && hasTitle && iDoc.getElementById('img_visibility')) ? iDoc.getElementById('img_visibility').value : 0;
	if (error)
		alert(error);
	else
	{
		var gallery;
		if (gallery = getElem(galleryID))
		{
			//var editTitle = (hasTitle > 0) ? "<img src='/img/icons/edit.gif' style='' class='img_link' title='Редактировать подпись' onclick='galleryUpdateTitleWin(\"" + galleryName + "\", \"" + img_path + "\", this);'/>" : "";
			var editTitle = "<img src='/img/icons/edit.gif' style='' class='img_link' title='Редактировать' onclick='galleryUpdateTitleWin(\"" + galleryName + "\", \"" + img_path+ "\", \"" + hasTitle + "\", this);'/>";
			var favouriteVisible = (gallery.children.length) ? "" : "display : none;";
			gallery.innerHTML += "<table class='gallery_tbl little_margin'><tr><td><img src='/get_img.php?h=50&file=" + img_path + "' class='img_link' title='" + title + "' alt='" + title + "' dir='" + visibility + "' onclick='setImg(\"/get_img.php?file=" + img_path + "\", \"\", event, this);'/></td><td><img src='/img/icons/favourite.png' style='" + favouriteVisible + "' class='img_link' title='Сделать основным' onclick='if(confirm(\"Сделать изображение основным?\")) iLoaderFavouriteImg(getElem(\"" + frame.id + "\"), \"" + img_path + "\", this);'/><br/>" + editTitle + "<br/><img src='/img/icons/drop.gif' class='img_link' title='Удалить' onclick='if(confirm(\"Удалить изображение?\")) iLoaderDelImg(getElem(\"" + frame.id + "\"), \"" + img_path + "\", this);'/></td></tr></table>";
		}
	}
}
//*****************************************
//*****************************************
function loadForm(container, params, act, form)
{
	if (form)
	{
		for (var i = 0; i < form.length; i++)
		{
			if ( ( (form[i].type != 'button') && (form[i].type != 'submit') && (form[i].type != 'checkbox') ) ||
				 ( (form[i].type == 'checkbox') && form[i].checked ) )
			{
				params += "&" + form[i].name + "=" + encodeURIComponent(form[i].value);
			}
		}
	}
	if ( container && (act != "delete") )
		container.innerHTML = "<img src='/img/loading.gif' />";
	ajax("/admin/ajax_functions.php", params, 
				function(result)
				{
					if (result['debug'])
						alert(result['debug']);
					act = result['act'];
					if (container)
					{
						if (result['selOnEmpty'])
							container.parentNode.parentNode.parentNode.innerHTML = result['resultText'];
						else
						{
							if (act == "delete")
							{								
								if (result['success']) 
									container.parentNode.removeChild(container);
							}
							else
							{
								if ( (act == "select") || (act == "view") )
								{
									container.innerHTML = result['resultText'];
								}
								else
								{
									var form = createElement('form', act);
									var resultArr = result['resultText'].split(/\<\/?script.*?\>/); //выбираем что находится в теге <script> и сразу выполняем
									var textArr = new Array();
									var evalArr = new Array();
									for (var i = 0; i < resultArr.length; i++)
									{
										if (i % 2)
											evalArr.push(varsToGlobal(resultArr[i]));
										else
											textArr.push(resultArr[i]);
									}
									form.innerHTML = textArr.join('');
									container.innerHTML = "";//"<form name='" + act + "' id='" + act + "'>" + textArr.join('') + "</form>";
									
									container.appendChild(form);
									for (var i = 0; i < evalArr.length; i++)
										eval(evalArr[i]);
								}
							}
						}
					}
					if (result['success'] && result['onAjaxSubmit'])
						eval(result['onAjaxSubmit']);
				}
			);
}
//*****************************************
function varsToGlobal(str)
{
	return str.replace(/var\s+/g, "window.");
}
//*****************************************
function saveForm(form)
{
	if (form.form_name.value)
	{
		var paramsStr = "";
		for (var i = 0; i < form.length; i++)
		{
			if ( ( (form[i].type != 'button') && (form[i].type != 'submit') && (form[i].type != 'checkbox') && (form[i].type != 'radio') ) ||
				 ( (form[i].type == 'checkbox') && form[i].checked ) ||
				 ( (form[i].type == 'radio') && form[i].checked ))
			{
				paramsStr += "&" + form[i].name + "=" + encodeURIComponent(form[i].value);
			}
		}
		ajax("/admin/ajax_functions.php", "function=save_form" + paramsStr, 
				function(result)
				{
					if (result['debug'])
						alert(result['debug']);
					if (result['formid'])
						form.formid.value = result['formid'];
					if (result['resultText'])
						alert(result['resultText']);
				}
			);
	}
}
//*****************************************
function switchDays(form, dateName)
{
	var daysList, monthList, yearList, selected;
	if ( (daysList = form[dateName + '_D']) && (monthList = form[dateName + '_M']) && (yearList = form[dateName + '_Y']) )
	{
		var daysCnt = day_in_month(monthList.value - 1, yearList.value);
		var selectedDay = (daysList.value) ? daysList.value : 1;
		selectedDay = Math.min(selectedDay, daysCnt);
		daysList.options.length = 0;
		for (var i = 1; i <= daysCnt; i++)
		{
			selected = (i == selectedDay);
			daysList[i] = new Option(i, i, false, selected);
		}
	}
}
//*****************************************
function day_in_month(month, year)
{
	if (month < 0)
	{
		month = 12 + month;
		year--;
	}
	var myDate = new Date();
	myDate.setFullYear(year, month + 1, 0);
	return myDate.getDate();
}
//*****************************************
//*****************************************
function add_input(type, name, templateBlock, updateSelect)
{
	type = (type) ? type : "";
	name = (name) ? name : "";
	templateBlock = (templateBlock) ? templateBlock : 0;
	updateSelect = (updateSelect) ? updateSelect : true;
	var input_container;
	var container = getElem('inputs_container');
	var propertiesContainer = getElem('inputs_properties_container');
	propertiesContainer.style.display = "";
	if (!container)
		return;
	var inputs_container = createElement('div', 'inputs_container_' + inputs_cnt);
	inputs_container.className = 'inputs_container';
	Event.add(inputs_container, "mouseover", 
			function(e) 
			{ 
				if(input2move)
				{
					this.style.backgroundColor = '#775757';
					this.style.cursor = 'pointer';
					this.style.cursor = 'hand';
				}
			});
	Event.add(inputs_container, "mouseout", 
			function(e) 
			{ 
				if(input2move)
				{
					this.style.backgroundColor = '';
					this.style.cursor = 'default';
				}
			});
	Event.add(inputs_container, "click", 
			function(e) 
			{ 
				if(input2move)
				{
					if (input2move != this.id)
					{
						var parent;
						if (getElem(input2move) && (parent = getElem(input2move).parentNode) )
						{
							parent.insertBefore(getElem(input2move), this);
							setInputTypesPos(getElem(input2move));
						}
						input2move = "";
						this.style.backgroundColor = '';
						this.style.cursor = 'default';
					}
				}
			});
	//******input label*********************
	var label = createElement('div');
	label.className = "input_label";
	label.appendChild(document.createTextNode((name) ? name + ' ' : "Элемент " + (inputs_cnt + 1) + ' '));
	var img_drop = createElement('img');
	img_drop.src = '/img/icons/drop_small.gif';
	img_drop.className = 'img_link';
	img_drop.title = 'Удалить элемент';
	Event.add(img_drop, "click", 
			function(e) 
			{ 
				if (confirm('Действительно удалить элемент?'))
				{
					var container = this.parentNode.parentNode;
					var isThisSelected = (selectedInputContainer == container);
					var parentContainer = container.parentNode;
					parentContainer.removeChild(container);
					if (isThisSelected && parentContainer.children.length)
						selectedInputContainer = parentContainer.children[0];
					if (parentContainer.children.length)
						select_row(selectedInputContainer);
					else
						getElem('inputs_properties_container').style.display = "none";
				}
			});
	var img_move = createElement('img');
	img_move.src = '/img/icons/move_small.gif';
	img_move.className = 'img_link';
	img_move.title = 'Переместить элемент';
	Event.add(img_move, "click", 
			function(e) 
			{ 
				if (input2move == this.parentNode.parentNode.id)
					input2move = "";
				else
					if (confirm('Укажите элемент, перед которым разместится выбранный'))
					{
						input2move = this.parentNode.parentNode.id;
					}
			});
	label.appendChild(img_drop);
	label.appendChild(img_move);
	inputs_container.appendChild(label);
	Event.add(label, "click", function(e) { select_row(this.parentNode);	 });
	//******input table*********************
	var table = createElement('table');
	table.className = "info_tbl";
	var tbody = createElement('tbody', 'input_table_' + inputs_cnt);
	table.appendChild(tbody);
	//******input types*********************
	var input_types_list = getElem('input_types');
	var input_types = createElement('select', 'Type_' + inputs_cnt, 'Type[val_' + inputs_cnt + ']');
	copySelectOption(input_types, input_types_list);
	if (type)
		input_types.selectedIndex = getIndexByValue(input_types, type);
	Event.add(input_types, "change", function(e) { loadSelect("function=load_inputs_properties&type=" + this.value, getElem('inputs_properties'));	 });
	input_types.className = "select";
	insertRow(tbody, new Array(document.createTextNode("Type: "), input_types));
	//******input name*********************
	var input_name = createElement('input', 'Name_' + inputs_cnt, 'Name[val_' + inputs_cnt + ']');
	input_name.type = "text";
	input_name.className = "text short";
	if (name)
		input_name.value = name;
	Event.add(input_name, "blur", function(e) { check_double_value(this.form, this, 'Name');	 });
	Event.add(input_name, "keyup", 
			function(e) 
			{
				var label = selectedInputContainer.children[0];
				if (this.value)
					label.childNodes[0].data = this.value + " ";
				else
					label.childNodes[0].data = "Элемент " + (new Number(selectedInputContainer.id.match(/\d+/)) + 1) + " ";
			});
	insertRow(tbody, new Array(document.createTextNode("Name: "), input_name));
	//******input template*********************
	var input_templates_list = getElem('form_template');
	var input_template_blocks_list = getElem('input_template_blocks');
	var input_template = createElement('select', 'Template_' + inputs_cnt, 'TemplateBlock[val_' + inputs_cnt + ']');
	copySelectOption(input_template, input_template_blocks_list);
	input_template.selectedIndex = getIndexByValue(input_template, templateBlock);
	input_template.className = "select";
	insertRow(tbody, new Array(document.createTextNode("Template: "), input_template));
	tbody.lastChild.style.display = (input_templates_list.value > 0) ? "" : "none";
	//****************************************
	inputs_container.appendChild(table);
	container.appendChild(inputs_container);
	selectedInputContainer = inputs_container;
	select_row(selectedInputContainer, updateSelect);
	if (!name) //зря не будем прокручивать - только при ручном добавлении, а то опера глючит что-то
		table.scrollIntoView(true);
	inputs_cnt++;
}
//*****************************************
function get_template_blocks(templateID)
{
	var input_template_blocks_list = getElem('input_template_blocks');
	if (!input_template_blocks_list)
		return;
	if (!templateID)
		update_template_blocks();
	else
		ajax("/admin/ajax_functions.php", "function=load_template_blocks&template_id=" + templateID, 
			function(result)
			{
				if (result['debug'])					
					alert(result['debug']);
				if (result['success'])
				{
					input_template_blocks_list.options.length = 0;
					var list = result['list'];
					input_template_blocks_list[0] = new Option("-", "", false, true);
					for (var i = 0; i < list.length; i++)
						input_template_blocks_list[i + 1] = new Option(list[i].text, list[i].value, false, false);
					input_template_blocks_list.selectedIndex = 0;					
					update_template_blocks();
				}
			}
		);
}
//*****************************************
function update_template_blocks()
{
	var input_template_blocks_list = getElem('input_template_blocks');
	var elements = getElem('new_form');
	var input_templateID = getElem('form_template').value;
	for (var i = 0; i < elements.length; i++)
	{
		if (elements[i].id.match(/Template_(\d+)/))
		{
			elements[i].options.length = 0;
			copySelectOption(elements[i], input_template_blocks_list);
			elements[i].parentNode.parentNode.style.display = (input_templateID > 0) ? "" : "none";
		}
	}		
}
//*****************************************
function select_row(input_container, updateSelect)
{
	updateSelect = (updateSelect) ? updateSelect : 1;
	if (!input_container)
		return;
	var containers = input_container.parentNode.children;
	var cnt = input_container.id.match(/\d+/);
	var selected = "";
	enableElements(cnt);
	selectedInputContainer = input_container;
	if (updateSelect > 0)
		loadSelect("function=load_inputs_properties&type=" + getElem('Type_' + cnt).value, getElem('inputs_properties'));
	for (var i = 0; i < containers.length; i++)
	{
		selected = (containers[i] == input_container) ? "_selected" : "";
		containers[i].className = "inputs_container" + selected;
		containers[i].children[0].className = "input_label" + selected;
	}	
}
//*****************************************
function enableElements(id) // передаем тот id, который нужно сделать доступным
{
	var elements = getElem('new_form');
	var elemID;
	for (var i = 0; i < elements.length; i++)
	{
		if (elemID = elements[i].name.match(/\[val_(\d+)\]/))
			elements[i].disabled = (elemID[1] != id);
	}
}
//*****************************************
function check_double_value(form, elem, name, inputType)
{
	inputType = (inputType) ? inputType : 'input';
	if (elem.value)
	{
		var pattern = new RegExp(name + '\\[val_\\d+\\]');
		var elements = form.getElementsByTagName(inputType);
		for (var i = 0; i < elements.length; i++)
		{
			if (elements[i].name.match(pattern))
				if( (elements[i].name != elem.name) && (elements[i].value == elem.value) )
					drawHint(elem, "Такое значение уже существет!");
		}
	}
}
//*****************************************
function insertRow(table, tds)
{
	if (table && tds.length)
	{
		var tr = createElement('tr');
		var td;
		for (var i = 0; i < tds.length; i++)
		{
			td = createElement('td');
			td.appendChild(tds[i]);
			tr.appendChild(td);
		}
		table.appendChild(tr);
	}
}
//*****************************************
function createElement(type, id, name)
{
	var element;
	if (isIE)
		element = document.createElement("<" + type + ( (id) ? " id='" + id + "'" : "") + ( (name) ? " name='" + name + "'" : "") + ">");
	else
	{
		element = document.createElement(type);
		if (id)
			element.id = id;
		if (name)
			element.name = name;
	}
	return element;
}
//*****************************************
function copySelectOption(newSelect, parentSelect)
{
	if (parentSelect.length)
	{
		for (var i = 0;  i < parentSelect.length; i++)
			newSelect[i] = new Option(parentSelect[i].text, parentSelect[i].value, false, parentSelect[i].selected);
	}
}
//*****************************************
function loadSelect(str, select)
{
	if (!str || !select)
		return;
	ajax("/admin/ajax_functions.php", str, 
			function(result)
			{
				if (result['debug'])					
					alert(result['debug']);
				if (result['success'])
				{
					select.multiple = true;
					select.options.length = 0;
					var list = result['list'];
					for (var i = 0; i < list.length; i++)
						select[i] = new Option(list[i].text, list[i].value, false, false);
					select.selectedIndex = 0;
					select.size = select.length;					
					setInputTypesPos(selectedInputContainer);
				}
			}
		);
}
//***************************************
function insertInput(propertyID, text, inputContainer, value)
{
	if (!propertyID || !inputContainer)
		return;
	var cnt = inputContainer.id.match(/\d+/);
	if (getElem(text + '_' + cnt))
		return;
	var tbody = inputContainer.children[1].children[0];
	ajax("/admin/ajax_functions.php", "function=load_input_property_info&property_id=" + propertyID, 
		function(result)
		{
			if (result['debug'])					
				alert(result['debug']);
			if (result['success'])
			{
				var list = result['list'];
				var input_type;
				var type;
				if ( (list.HTMLtype == 'textarea') || (list.HTMLtype == 'select') )
				{
					input_type = list.HTMLtype;
					type = '';
				}
				else
				{
					input_type = 'input';
					type = list.HTMLtype;
				}
				var input = createElement(input_type, list.Name + '_' + cnt, list.Name + '[val_' + cnt + ']');
				input.className = list.ClassName;
				if (type)
					input.type = type;
				input.value = (value) ? value : '';
				if (list.HTMLtype == 'textarea')
				{
					Event.add(input, "blur", function(e) { this.className = "textarea middle small" });
					Event.add(input, "focus", function(e) { this.className = "textarea middle" });
				}
				insertRow(tbody, new Array(document.createTextNode(list.Name + ":"), input));
				if (list.HTMLtype == "checkbox")
				{
					input.value = 1;
					input.checked = 1;//(value) ? 1 : "";
				}
				setInputTypesPos(inputContainer);
			}
		}
	);
}
//***************************************
function deleteInput(property)
{
	if (!property || !selectedInputContainer)
		return;
	var cnt = selectedInputContainer.id.match(/\d+/);
	var input;
	if ( !(input = getElem(property[property.selectedIndex].text + '_' + cnt)) )
		return;
	var tr = input.parentNode.parentNode;
	tr.parentNode.removeChild(tr);
}
//***************************************
function setInputTypesPos(input_container)
{
	var inputTypesTable = getElem('inputs_properties_container');
	var pos = getElementPos(input_container);
	var center = input_container.offsetTop + input_container.offsetHeight/2;
	var top = center - inputTypesTable.offsetHeight/2;
	if (center - inputTypesTable.offsetHeight/2 < 0) 
		top = 3;
	else
	{
		if (center + inputTypesTable.offsetHeight/2 > input_container.parentNode.offsetHeight)
			top = input_container.parentNode.offsetHeight - inputTypesTable.offsetHeight - 3;
	}
	inputTypesTable.style.top = top + 'px';
}
//***************************************
function getIndexByValue(list, value)
{
	value = (value) ? value : 0;
	for (var i = 0; i < list.length; i++)
		if (list[i].value == value)
			return i;
	return 0;
}
//***************************************
function show_checked(formID, img)
{
	var form;
	if (form = getElem(formID))
	{
		for (var i = 0; i < form.length; i++)
			if(form[i].type == "checkbox")
				form[i].style.display = (form[i].style.display) ? "" : "none";
		img.className = (img.className == "delmulty") ? "delmulty_cancle" : "delmulty";
		img.title = (img.className == "delmulty") ? "Отметить для удаления" : "Отменить";
		img.nextSibling.style.display = (img.nextSibling.style.display) ? "" : "none";
		img.nextSibling.nextSibling.style.display = (img.nextSibling.nextSibling.style.display) ? "" : "none";
	}
}
//***************************************
function check_all(formID, checked)
{
	var form;
	if (form = getElem(formID))
	{
		for (var i = 0; i < form.length; i++)
			if(form[i].type == "checkbox")
				form[i].checked = checked;
	}
}
