/**
 * Устанавливает скроллбар в положение, чтобы текущая фотография была по центру
 */
function scrollCenter()
{
	document.getElementById('photoPreviewsPane').scrollLeft = 0;
	// Позиция картинки в px (+56 - половина ширинки картинки)
	var foto_position = $("div.selected").offset().left - $("div.photoPreviewsPane").offset().left + 56;
	// Определили середину:
	var mover_center = Math.round($("div.photoPreviewsPane").width()/2);
	// Если фотография находится дальше центра, перемещаем скролл до позици картинки.
	if (mover_center < foto_position)
	{
		// Передвигаем скролл, чтобы картинка была по центру
		document.getElementById('photoPreviewsPane').scrollLeft = foto_position - mover_center;
	}
}

/**
 * Инициализация органайзера
 */
function init_organize()
{
	menu 			= new Menu();
	var tabs			= new Tabs();
	var tabs_editPhoto 	= new Tabs();
	var draganddrop 	= new DragAndDrop();

	var groupfoto 		= new GroupFoto();
	var foto 			= new Foto();

	// Нижняя панель списка фотографий
	$('#dragAllPhoto').click(function(){
		$('#user_photo_list > div').addClass('selected');
		return false;
	});

	$('#dragAllPhoto_cancel').click(function(){
		$('#user_photo_list > div').removeClass('selected');
		return false;
	});

	// Увелечение фото
	$('#currentPhoto_full_url').click(function(){
		var src = $(this).attr('href');
		
		ajax.setPositionDiv('#ajax_loading');
		$('#ajax_loading').fadeIn(500);
			
		var fullfoto = new Image();
		fullfoto.src = src;		
		fullfoto.onload = function()
		{
			var html = '';
			html += '<div style="padding:3px;background-color:#fff;border:7px solid #ccc;">';
			html += '<a style="padding-left:10px;" href="'+src.replace('600','original')+'" target="_blank" title="Откроется в новом окне">Открыть оригинал</a>';
			html += '<img class="closeWin" onclick="ajax.complete(\' \')" style="top:12px;right:12px;cursor:pointer;" alt="Закрыть" src="http://1nsk.net/i/v7/icons/closeTab.gif" />';
			html += '<center><img style="cursor:pointer;" src="'+src+'" onclick="ajax.complete(\' \')" /></center>';
			html += '</div>';
			
			ajax.complete(html);
		}
		fullfoto.onerror = function()
		{
			var html = '';
			html += '<div style="padding:50px 0px;background-color:#fff;border:7px solid #ccc;">';
			html += '<img class="closeWin" onclick="ajax.complete(\' \')" style="top:12px;right:12px;cursor:pointer;" alt="Закрыть" src="http://1nsk.net/i/v7/icons/closeTab.gif" />';
			html += '<center style="font-weight:bold;">Произошла непредвиденна ошибка, скорее всего файл повреждён или его не существует.</center>';
			html += '</div>';
			
			ajax.complete(html);
		}
		
		return false;
	});
	
	// Передаём ссылки на объекты
	foto.init(tabs_editPhoto, draganddrop);

	// Объявляем событие всем фотографиям - при двойнём щелчке откроется окно редактирования этой фотографии
	foto.init_dblclick('#user_photo_list > div');

	// Оъявляем событие для переключения табов
	tabs.init('#tabs', '#tabs > li > a');
	tabs_editPhoto.init('#tabs_editPhoto', '#tabs_editPhoto > li > a', {current_tab: '#editPhotoNames', ClassSelected: 'a-tab-selected'});

	// Создание/редактирование альбомов
	groupfoto.save(tabs, draganddrop, tabs, foto);
	groupfoto.init_groups('div.showAlbum', draganddrop, tabs, foto);

	// Окно редактирования фотографий
	$('#editPhotoDelete').click(function(){
		// проверим, существуют ли связи с этой фото
		if ($('#location_notchange').css('display') != 'none')
			menu.confirm('#deleteOnePhotoLinked');
		else
			menu.confirm('#deleteOnePhoto', function(){ foto.remove( $('#editPhotoList > .ui-selected').attr('fid') ); }, function(){ menu.confirm.hide(); } );
	});
    $('#editPhotoSubmit').click(function(){ foto.set_info(); });
    $('#rotate_change > :radio').mousedown(function(){ foto.rotate_preview_src($(this).attr('value')); });
	$('#pub').change(function(e){ foto.accessToggle(e.target.value); });
	$('#location_domain').change(function(e){ foto.locationToggle(e.target.value); });
	$('#location_change_album').change(function(e){ foto.location_albumToggle(e.target.value); });
	
	// Объявляем событие для кнопок, при наведении на которые происходит смена класса
	menu.hover('div.button');

	// Меню для таба Редактирование
	menu.select('#editPhoto_menu', {
		editDate_menu: function(){
			var foto_list = foto.get_onpane('#editPhotoPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#editDate', function(){ foto.set_info_group('date', foto_list, foto.input2datetime()); }, function(){ajax.stop();} );
		},
		editTags_menu: function(){
			var foto_list = foto.get_onpane('#editPhotoPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#editTags', function(){ foto.set_info_group('tags', foto_list, $('#editTags > input').attr('value')); }, function(){ajax.stop();} );
		},
		editAccess_menu: function(){
			var foto_list = foto.get_onpane('#editPhotoPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#editAccess', function(){ foto.set_info_group('access', foto_list, foto.radio_value('#editAccess > :radio')); }, function(){ajax.stop();} );
		},
		editPhoto_deletes: function()
		{
			var foto_list = foto.get_onpane('#editPhotoPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#deleteAllPhoto', function(){ajax.start(); foto.remove_array('#editPhotoPane', foto_list); }, function(){ ajax.stop(); });
		}
	});

	// Меню для таба Альбомы
	menu.button('#createAlbum_menu', function(){ if (tabs.add('#createAlbum', 'Создание альбома')){groupfoto.album_clear();draganddrop.eraseFlag('flag_editAlbumPane');} });
	menu.button('#deleteAlbum_menu', function(){ ajax.start();menu.confirm('#deleteAllAlbum', function(){ groupfoto.delete_selected('#albumsPane', 'album', draganddrop, tabs, foto);$('#deleteAlbum_menu').hide(); }, function(){ ajax.stop(); }); });
    
	// Меню таба Создание/Редактирование Альбомов
	menu.select('#editPhoto_album', {
		editPhoto_album_empty: function(){
			draganddrop.erasePane('#editAlbumPane', foto);
			$('#album_preview_id').attr('value', '');
			$('#album_preview').attr('src', URL_IMG+'foto/album_preview.jpg');
		},
		editDate_album: function(){
			var foto_list = foto.get_onpane('#editAlbumPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#editDate', function(){ foto.set_info_group('date', foto_list, foto.input2datetime()); }, function(){ajax.stop();} );
		},
		editTags_album: function(){
			var foto_list = foto.get_onpane('#editAlbumPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#editTags', function(){ foto.set_info_group('tags', foto_list, $('#editTags > input').attr('value')); }, function(){ajax.stop();} );
		},
		editAccess_album: function(){
			var foto_list = foto.get_onpane('#editAlbumPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();

			menu.confirm('#editAccess', function(){ foto.set_info_group('access', foto_list, foto.radio_value('#editAccess > :radio')); }, function(){ajax.stop();} );
		},
		editPhoto_album_deletes: function()
		{
			var foto_list = foto.get_onpane('#editAlbumPane > div.photoPreview');
			if (!foto_list) return false;

			ajax.start();
			menu.confirm('#deleteAllPhoto', function(){ $('#album_preview').attr('src', URL_IMG+'foto/album_preview.jpg'); foto.remove_array('#editAlbumPane', foto_list); }, function(){ ajax.stop(); });
		}
	});

	menu.button('#editPhoto_album_properts', function(){ tabs_editPhoto.select('#editPhotoNames'); foto.get_info($('#editAlbumPane > div.photoPreview'), '#editAlbumPane'); });
	menu.select('#editSort_album', {
		sort_alphabit: function(){ groupfoto.update_sort(1, '#sort_alphabit'); },
		sort_alphabit2: function(){ groupfoto.update_sort(2, '#sort_alphabit2'); },
		sort_upload_date: function(){ groupfoto.update_sort(3, '#sort_upload_date'); },
		sort_photo_date: function(){ groupfoto.update_sort(4, '#sort_photo_date'); }
	});

	// Указываем элемент который будем таскать
	draganddrop.drag('div.photoDrag', foto);

	draganddrop.drop({
		flag_editPhotoPane: true,
		flag_editAlbumPane: true,
		flag_editSetPane: true,
		from: ['#user_photo_list'],
		target: ['#editPhotoPane', '#editAlbumPane', '#editSetPane'],
		drop: function(dragbbale_source, dragPane, dropPane)
		{

			if (dragbbale_source.length > 1)
			{
				dragbbale_source.each(function(){
					// Если фотка не существует, добавляем её
					if (!dropPane.children('.photoPreview[fid='+$(this).attr('fid')+']').length)
					{
						dropPane.append($(this).removeClass('selected'));
					}
				});

			}
			else
			{
				// Если фотка не существует, добавляем её
				if (!dropPane.children('.photoPreview[fid='+dragbbale_source.attr('fid')+']').length)
				{
					dropPane.append(dragbbale_source.removeClass('selected'));
				}
			}
			// Изменяем длину
            foto.rewidth_list('#user_photo_list', $('#user_photo_list > div.photoPreview').length);

			// Действия выполняются только один раз
			if (this.flag_editPhotoPane && dropPane.attr('id') == 'editPhotoPane')
			{
				dropPane.children('.PaneMessage').hide();
				this.flag_editPhotoPane = false;
			}
			else if (this.flag_editAlbumPane && dropPane.attr('id') == 'editAlbumPane')
			{
				// Устанвливаем обложку для альбома и записывам в input
				var attr_preview = $('#editAlbumPane > .photoPreview').children();
				$('#album_preview_id').attr('value', attr_preview.parent().attr('fid'));
				$('#album_preview').attr('src', attr_preview.attr('src'));
				//$('#album_preview_contener').show();

				dropPane.children('.PaneMessage').hide();
				this.flag_editAlbumPane = false;
			}

            $('#user_photo_list > div').removeClass('selected');
		}
	});

	draganddrop.drop({
		from: ['#editPhotoPane', '#editAlbumPane', '#editSetPane'],
		target: ['#photoTrashPane', '#photoAlbumPreview', '#photoSetPreview'],
		start: function(dragPane)
		{
			$('#photoTrashPane').addClass('photoTrashPaneActive');
			if (dragPane == '#editAlbumPane'){ $('#photoAlbumPreview').addClass('photoTrashPaneActive');}
			else if (dragPane == '#editSetPane'){ $('#photoSetPreview').addClass('photoTrashPaneActive');}
		},
		drop: function(dragbbale_source, dragPane, dropPane)
		{
            var dropPane_id = dropPane.attr('id');
			$('#photoTrashPane').removeClass('photoTrashPaneActive');

			// Изменяем длину
            foto.rewidth_list('#user_photo_list', $('#user_photo_list > div.photoPreview').length + 1);

			// НАЧАЛИ ТАЩИТЬ ИЗ АЛЬБОМОВ
			if (dragPane == '#editAlbumPane')
			{
				$('#photoAlbumPreview').removeClass('photoTrashPaneActive');

				// Если пользователь бросает на превью, то выставляем превью, и записываем его в переменную
				if (dropPane_id == 'photoAlbumPreview')
				{
					$('#album_preview').attr('src', dragbbale_source.children().attr('src'));
					$('#album_preview_id').attr('value', dragbbale_source.attr('fid'));
				}
				// Иначе если брасают на удаление фотки, проверяем, выбрана ли она в качестве обложки,
				// если да, то выставляем в превью первую фотографию
				// если фоток нет, то закрываем панель
				// и удаляем эту фотку из альбома
				else if (dropPane_id == 'photoTrashPane')
				{
                    dragbbale_source.appendTo($('#user_photo_list'));
					var photo_list = $(dragPane).children();
					// Если фотографии ещё остались, устанавливаем первую как превью
					if (photo_list.length-1 > 0)
					{
						var photo_option = $(photo_list[1]);
						$('#album_preview').attr('src', photo_option.children().attr('src'));
						$('#album_preview_id').attr('value', photo_option.attr('fid'));
						return 1;
					}
					else
					{
						$('#album_preview_id').attr('value', '');
						$('#album_preview').attr('src', URL_IMG+'foto/album_preview.jpg');
						$(dragPane).children('.PaneMessage').show();
						draganddrop.eraseFlag('flag_editAlbumPane');
					}
				}

			}

			// НАЧАЛИ ТАЩИТЬ ИЗ РЕДАКТИРОВАНИЯ ФОТОК
			if (dragPane == '#editPhotoPane')
			{
				//dragbbale_source.remove();
				dragbbale_source.appendTo($('#user_photo_list'));
				var photo_list = $(dragPane).children();
				// Если фотографии ещё остались, устанавливаем первую как превью
				if (photo_list.length-1 <= 0)
				{
					$(dragPane).children('.PaneMessage').show();
					draganddrop.eraseFlag('flag_editPhotoPane');
				}
			}
		},
		stop: function(dragPane, dropPane)
		{
			$('#photoTrashPane').removeClass('photoTrashPaneActive');
			if (dragPane == '#editAlbumPane'){ $('#photoAlbumPreview').removeClass('photoTrashPaneActive');}
			else if (dragPane == '#editSetPane'){ $('#photoSetPreview').removeClass('photoTrashPaneActive');}
		}
	});

	// Панель списка фотографий
	$('#searchPane_display').change(function(){
		//console.log($('#searchPane_display').attr('value'));
		$('#user_photo_list').html('<p style="color:#ccc;font-size:30px;margin:0px;padding-top:45px;width:550px;">Идёт загрузка списка фотографий...</p>');
		foto.get_photo_list($('#searchPane_display').attr('value'));
		$('#uploadPhotoStart').show();
		$('#uploadPhotoStop').hide();
	});
}

// Класс работы с меню
var Menu = function()
{
	// При наведении на меню добавляем класс buttonHover, при отведении удаляем
	this.hover = function(id)
	{
		$(id).hover(
		function(){$(this).addClass("buttonHover");},
		function(){$(this).removeClass("buttonHover");}
		);
	}

	// Метод присваевает элементу с id функцию function_handler, которая запуститься при клике по этому меню.
	this.button = function(id, function_handler)
	{
		// Если событие произошло, то запускается нижследующая функция
		$(id).mousedown(function(){

			// Эмклируем событие mousedown для document
			$(document).trigger('mousedown');

	        // Меняем вид кнопки на нажатую, добавляя класс buttonClicked
	        $(this).parent().addClass('buttonClicked');

	        // Событие при котором вид кнопки восстановиться
	        $(document).one('mouseup', function(){
	        	$('div.button').removeClass('buttonClicked');
			});

			return false;
		});

		// Если кликнули по меню, меняем вид кнопки на вид по уммолчанию,
		// т.е. удаляем лишнии классы, и вызываем пользовательскую функцию
		$(id).click(function(){

	        $(this).parent().removeClass('buttonClicked');

			function_handler();

			return false;
		});
	}

	// Создаём событие для выпадающего меню
	this.select = function(id, select_menu)
	{
		// При mousedown на кнопке, раскрываем/скрываем выпадающее меню
		$(id).mousedown(function(e)
		{

			// Если оно скрыто, то показываем
			if ($(id + ' + ul').css('display') == 'none')
			{
				// Меняем вид на нажатый
				$(this).parent().addClass('buttonClicked');
				$(id + ' + ul').fadeIn(250);

				// Объявляем событие, при котором будет вызвана пользовательская фнкция
				$(document).one('mousedown', function(e){
					// Если функция для этого пункта менюсуществует, запускаем её
					if (select_menu[e.target.id]) select_menu[e.target.id]();
		        	$(id + ' + ul').hide();
		        	$('div.button').removeClass('buttonClicked');
				});

				return false;
			}
			// иначе скрываем
			else
			{
				$(this).parent().removeClass('buttonClicked');
				$(id + ' + ul').hide();
			}
		});
	}

	var confirm_oldid = '';
	this.confirm = function(id, click_yes, click_no, click_ok)
	{
        if (confirm_oldid) $(confirm_oldid).hide();
        $(id).fadeIn(800);
        ajax.complete('#confirm');

		if (!click_yes && !click_no)
		{
			$('#confirm_two_button').hide();
			$('#confirm_one_button').show();
			$("#confirm_ok").bind('click', function() {
				$("#confirm_ok").unbind('click');
				$('#confirm').hide();
                click_ok();
			});
		}
		else
		{
			$('#confirm_two_button').show();
			$('#confirm_one_button').hide();
			
			$("#confirm_yes").bind('click', function() {
				$("#confirm_yes").unbind('click');
				$("#confirm_no").unbind('click');
				click_yes();
			});
	
			$("#confirm_no").bind('click', function(){
				$("#confirm_yes").unbind('click');
				$("#confirm_no").unbind('click');
				if (click_no) click_no();
			});
		}

		confirm_oldid = id;
	}

	this.confirm.hide = function()
	{
		$('#confirm').hide();
	}
}

// Класс работы с табами
var Tabs = function()
{
	var ClassSelected = 'ui-tabs-selected';
	var current_tab = '#album';
	var previous_tab = current_tab;
	var template_ticket = '<li class="albumTab"><a class="albumTab" rel="#{rel}">{tags}</a><img src="/i/v7/icons/closeTab.gif" alt="x" class="closeWin" style="top: 8px; right: 7px;" /></li>';

	var contener_ticket_id; // Ид на UL табов
	var contener_ticket_obj; // OBJ на UL табов

	this.get_current_tab = function()
	{
		return current_tab;
	}

	this.init = function(tab_contener_ticket_id, ticket_id, Setting)
	{
		contener_ticket_id = tab_contener_ticket_id;
        contener_ticket_obj = $(contener_ticket_id);

		if (Setting)
		{
			previous_tab = current_tab = Setting.current_tab;
			ClassSelected = Setting.ClassSelected
		}

		// Создаём событие для табов
		init_event($(ticket_id));
	}

	// Метод открытия таба
	var select = this.select = function(tab_id, tab_ticket_obj)
	{
		// Если открывают уже открытый таб, выходим из функции
		if (current_tab == tab_id) return;

		// Если объект tab_ticket_obj не передан, ищем этот объект по атрибуту href="tab_id"
		if (tab_ticket_obj == 'close')
		{
			get_tickect(current_tab).parent().remove();
		}
		if (!tab_ticket_obj || tab_ticket_obj == 'close') tab_ticket_obj = get_tickect(tab_id);

		/* Работа с тикетами */
		// Удаляем класс для текущего открытого тикета
		$('li.'+ClassSelected).removeClass();
		// Присваевыем класс
		tab_ticket_obj.parent().addClass(ClassSelected);

		// скрываем текущий таб, и открываем новый tab_id
		$(current_tab).hide();
		$(tab_id).show();

		previous_tab = current_tab; // Сохраняем текущий таб как предыдущим
		current_tab = tab_id; // Сохраняем новый таб как текущий
	}

	var get_tickect = function(tab_id)
	{
		//console.log(contener_ticket_id, tab_id, $(contener_ticket_id+' > li > a[rel='+tab_id+']').length);
		return $(contener_ticket_id+' > li > a[rel='+tab_id+']');
	}

	// Создание таба
	this.add = function(tab_id, tab_name)
	{

		var tickect = get_tickect(tab_id);

		// Если тикет таба уже существует, то закрываем его и открываем новый
		if (tickect.length)
		{
			tickect.next().trigger('mousedown');
		}

		// Добавляем по шаблону новый таб
		//console.log(template_ticket);
		template_ticket_append = template_ticket.replace('#{rel}', tab_id).replace('{tags}', tab_name);
		$(template_ticket_append).appendTo(contener_ticket_obj);
        //console.log(tickect.length, tickect.attr('class'));

		var tickect = get_tickect(tab_id);
        //console.log(tickect);
		// Объявляем событие для картинки для закрытия таба
		tickect.next().mousedown(function (){
			$(this).parent().remove(); // Удаляем таб

			var close_tab_id = $(this).prev().attr('rel');

			if (close_tab_id == '#createAlbum' && $('#album_id').attr('value') == '0')
			{
				var foto_from = $('#editAlbumPane > div.photoPreview');
				var foto_to = $('#user_photo_list > div.photoPreview');
				$('#user_photo_list').css('width', (foto_from.length+foto_to.length) * (107+10) + 'px');
				//$('#user_photo_list').append(foto_from); // Возвращаем картинки
			}

			// открываем предыдущий, если закрывается текущий таб
			if (close_tab_id == current_tab)
			{
				if (close_tab_id == '#createAlbum') select('#album');
				else if (close_tab_id == '#createSet') select('#set');
			}
		});

		// Добавляем событие для нового таба
		//console.log(tickect, tickect.attr('id'));
		init_event(tickect);

		// Открываем новый таб
		select( tab_id, tickect );
		return true;
	}

	var init_event = function(tickect)
	{
		// Создаём событие для табов
		tickect.mousedown(function (){
			// Открываем таб, на который щёлкнули
			var tab = $(this);
			select( tab.attr('rel'), tab );
		});

		tickect.click(function (){return false;});
	}
}

// Класс для переноса фотографий
var DragAndDrop = function()
{
	var drag_element;// = new Array();
	var dragHelper2 = document.getElementById('dragHelper');
	var dropSettings = new Array();
	var count_ds = 0;

	var dragbbale_source; // Оригинал объекта который в данный мемент тянут
	var dragbbale_pane; // Объект из которого вытащили картинку

	var drop_settings; // Будет содержать в себе объект в который объкт будет бросаться

	var dragHelper = $('#dragHelper');
	var foto;

	this.erasePane = function(tab_id, foto)
	{
		foto.rewidth_list('#user_photo_list', $('#user_photo_list > div.photoPreview').length + $(tab_id+' > div.photoPreview').length);
		$(tab_id+' > div.photoPreview').appendTo('#user_photo_list');
		$(tab_id+' > div.PaneMessage').show();

		eraseFlag('flag_'+tab_id.substr(1,tab_id.length));
	}

	var eraseFlag = this.eraseFlag = function(flag)
	{
		switch(flag)
		{
			case 'flag_editPhotoPane': dropSettings[0].flag_editPhotoPane = true; break
			case 'flag_editAlbumPane': dropSettings[0].flag_editAlbumPane = true; break
			case 'flag_editSetPane': dropSettings[0].flag_editSetPane = true; break
		}
	}

	this.drop = function(drop_settings_in)
	{
		dropSettings[count_ds++] = drop_settings_in;
	}

	var drop = function(mouseX, mouseY)
	{
		dragHelper.hide();
		$(document).unbind('mousemove').unbind('mouseup');

		// В цикле пробегаем
		for(key in drop_settings.target)
		{
			var dropPane = $(drop_settings.target[key]);
			var dropPane_offset = dropPane.offset();

			if ( ( mouseX >= dropPane_offset.left && mouseX <= dropPane_offset.left+dropPane.width() )  &&  ( mouseY >= dropPane_offset.top && mouseY <= dropPane_offset.top+dropPane.height() ) )
			{
				drop_settings.drop(dragbbale_source, dragbbale_pane, dropPane);
				redrag();
				return 1;
			}
		}

		if (drop_settings.stop) drop_settings.stop(dragbbale_pane, dropPane);

		drop_settings = null;
	}

	this.redrag = redrag = function()
	{
		$(drag_element).unbind('mousedown');
		drag();
	}

	this.drag = function(dragelm, foto_obj)
	{

		drag_element = dragelm;
		foto = foto_obj;
		drag();
	}

	var drag = function()
	{
		$(drag_element).mousedown(function(e){

			// Получаем ID контенера из которого берёться картинка
			var from = $(this).parent().attr('id');

			// Ищём объёкт куда будем бросать взятую картинку
			for(key in dropSettings)
			{
				for(key2 in dropSettings[key].from)
				{
					if (dropSettings[key].from[key2] == '#'+from)
					{
						dragbbale_pane = dropSettings[key].from[key2];
						drop_settings = dropSettings[key];
						break;
					}
				}
			}

			// Если объект не найден, выходим
			if (!drop_settings) return 0;


			$(this).bind('click', function(e){
				$(document).unbind('mousemove');
				$(this).unbind('click');
				// Если клик происходит по картинке находящейся в списке фотографий
				if (dragbbale_pane == '#user_photo_list')
				{
					// Если класс уже есть, удаляем его
					if ($(this).hasClass('selected'))
					{
						if($('#user_photo_list > div.selected').length > 1 && !e.ctrlKey)
						{
							$(drag_element).removeClass('selected');
							$(this).addClass('selected');
						}
						else $(this).removeClass('selected');
					}
					// Иначе если нажат шифт
					/*else if (e.shiftKey)
					{

					}*/
					// Иначе если класса нет
					else
					{
						// и не зажата кнопка CTRL удаляем класс
						if (!e.ctrlKey) $(drag_element).removeClass('selected');
						$(this).addClass('selected');
					}
				}
				// иначе если зажата кнопка CTRL, возвращаем картинки обратно в панель
				else if (e.ctrlKey)
				{
					$(this).unbind('dblclick');
					// Удаляем объект
					foto.rewidth_list('#user_photo_list', $('#user_photo_list > div.photoPreview').length + 1);
					$(this).appendTo($('#user_photo_list'));
					return false;
				}
			});

			// Копируем картинку в div, которому потом будем изменять координаты
			$('#dragHelper_img').attr('src', $(e.target).attr('src'));

			dragbbale_source =  $(this).hasClass('selected') ? $('#user_photo_list > div.selected') : $(this);

			// Вычесляем смещение для хелпера
			var offset = $('#bothSide').offset();
			var offsetX = offset.left + e.pageX - $(this).offset().left-18;
			var offsetY = offset.top + e.pageY - $(this).offset().top-4;

			var TimeStartDrag = setTimeout(function(){ $(document).trigger('mousemove'); }, 400);

			// Устанавливаем начальные координаты
			dragHelper.css({left: e.pageX-offsetX, top: e.pageY-offsetY});

			$(document).bind('mousemove', function(){
				clearTimeout(TimeStartDrag);
				$(document).unbind('mousemove');
				$(this).unbind('click').unbind('dblclick');

			    // Запускаем переданную функцию при событии start
				if (drop_settings.start) drop_settings.start(dragbbale_pane);

				// Показываем хелпер
                dragHelper.show();

				// инициализирцем событие для document, получаем координаты курсора и присваеваем dragHelper
				$(document).bind('mousemove', function(e){
					//dragHelper.css({left: e.pageX-offsetX, top: e.pageY-offsetY})
					dragHelper2.style.left = e.pageX-offsetX+'px';
                    dragHelper2.style.top = e.pageY-offsetY+'px';
					//return false;
				});

				// Событие при котором пользователь бросает объект
				$(document).bind('mouseup', function(e){
					drop(e.pageX, e.pageY); // Запускаем функцию drop
					//return false;
				});

				return false;
			});

			return false;
		});
	}
}

/**
 * Класс для работы с альбомами
 */
var GroupFoto = function()
{
	/**
	 * Устанавливает собития
	 */
	var init_groups = this.init_groups = function(obj, draganddrop, tabs, foto)
	{
		// Выделение альбома
		$(obj).toggle(
			function()
			{
				$('#deleteAlbum_menu').show();
				$(this).children().addClass('selected');
			},
			function()
			{
				$(this).children().removeClass('selected');
				if (!$('div.showAlbum').children('.selected').length)
					$('#deleteAlbum_menu').hide();
			}
		);

		
		// Двойной клик на альбом, открываем его редактирвоание
		$(obj).dblclick(function(){
			album_load($(this).attr('aid'), draganddrop, tabs, foto);
			draganddrop.eraseFlag('flag_editAlbumPane');
		});
	}

	/**
	 * Отмечает выбранную сортировку в меню. (делает жирным выделенный пункт)
	 */
	var sort = this.sort = function(sort_num, sort_id)
	{
		$('#editSort_album + ul > li > a').css('font-weight', 'normal');
		if (!sort_id) {$('#editSort_album + ul > li > a[href=#'+sort_num+']').css('font-weight', 'bold');}
		else $(sort_id).css('font-weight', 'bold');
		$('#album_sort').attr('value', sort_num);
	}
	
	this.update_sort = function(sort_num, sort_id)
	{
		// Подгружам данные открываемого альбома
		$.ajax({url: '/foto/organize.html?group&act=sort&aid='+$('#album_id').val()+'&typeSort='+sort_num,
			success: function(data){
				// Если фотографии есть, добавляем их
				if (data['html']) $('#editAlbumPane').html(data['html']);
			}
		});
		
		sort(sort_num, sort_id);	
	}

	var reinit_groups = this.reinit_groups = function(obj, draganddrop, tabs, foto)
	{
		$('div.showAlbum').unbind('toggle').unbind('dblclick');
		init_groups(obj, draganddrop, tabs, foto);
	}

	/**
	 * Сбрасывает данные в форме на дефолтовые, при создании нового альбома
	 */
	this.album_clear = function()
	{
		group_insert_info('#editAlbumPane', 'album', {id:'create', preview_id:0, sort:1, preview_src: URL_IMG+'foto/album_preview.jpg', name:'Название альбома', desc:'Описание', tags:'Таги', preview: 'hide', message: 'show'});
	}
	
	/**
	 * Подгружам данные открываемого альбома
	 */
	var album_load = function(aid, draganddrop, tabs, foto)
	{
		ajax.start();
		var type = 'album';
		var createTab = '#createAlbum';
		var contener = '#editAlbumPane';
		
		// Подгружам данные открываемого альбома
		$.ajax({url: '/foto/organize.html?group&act=get_info',
			data: {aid:aid},
			success: function(data){

				if (data['group_info'][type+'_preview'] != '0') var foto_path = URL_DATA+'foto/'+data['group_info'][type+'_preview_path_folder']+'/105/'+data['group_info'][type+'_preview_path_name']+'.jpg';
				else var foto_path = URL_IMG+'foto/album_preview.jpg';

				group_insert_info(contener, type,
					{id: aid,
					preview_id: data['group_info'][type+'_preview'],
					preview_src: foto_path,
					name: data['group_info'][type+'_name'],
					desc: data['group_info'][type+'_desc'],
					sort: data['group_info'][type+'_sort'],
					message: 'hide',
					photo: data['html']}
				);

				draganddrop.redrag();
				var name = data['group_info'][type+'_name'];
				if (name.length > 30) name = name.substring(0,30)+'...';
                tabs.add(createTab, name);

                foto.init_dblclick(contener+' > div.photoPreview');

				ajax.stop();
			}
		});
	}

	/**
	 * Вставляем в форму полученные данные об альбоме
	 */
	var group_insert_info = function(contener, type, data)
	{
		// Удаляем текущие фотографии
		$(contener).children('.photoPreview').remove();

		// Если фотографии есть, добавляем их
		if (data.photo) $(contener).append(data.photo);
		// Если фотографий нет, то показываем дефолтное сообщение в табе
        else data.message = 'show';

		if (data.message == 'hide') $(contener).children('.PaneMessage').hide();
		else{ $(contener).children('.PaneMessage').show();}

		$('#'+type+'_preview').attr('src', data.preview_src);

		$('#'+type+'_id').attr('value', data.id);
		$('#'+type+'_preview_id').attr('value', data.preview_id);
		$('#'+type+'_name').attr('value', data.name);
		$('#'+type+'_desc').attr('value', data.desc);
		$('#'+type+'_tags').attr('value', data.tags);
		sort(data.sort);
	}

	/**
	 * Отправляем форму либо на создание альбома либо на редактивароние
	 */
	this.save = function(tabs, draganddrop, tabs, foto)
	{
		  $("#AlbumForm_submit").click(function()
		  {
				ajax.start();

				var act = 'create';
				if ($("#album_id").attr("value") != "create") act = 'update';

				var data = serialize(get_photo("#editAlbumPane"));
				if (!data) data = '&photo_array[]=';

				$.ajax({url: '/foto/organize.html?group&act='+act+'&type=album',
					data: $("#album_form").serialize() + data,
					success: function(data){
						get_album('#albumsPane', 'album', draganddrop, tabs, foto);
						tabs.select('#album', 'close');
					}
				  });

				  //load_list('album');
		  });
	}

	/**
	 * Приводит двумерный массив [{a:1,b:2},{a:123,b:321}] к виду &0[a]=1&0[b]=2&1[a]=123&1[b]=321
	 * @param array arr массив или объект
	 * @return string строка вида &0[a]=1&0[b]=2&1[a]=123&1[b]=321
	 */
	var serialize = function(arr)
	{
		var result = '';
		for(key in arr)
		{
			if (typeof arr[key] == 'object')
			{
				for(key2 in arr[key])
				{
					result += '&'+key+'['+key2+']='+arr[key][key2];
				}
			}
			else
			{
				result += '&photo_array[]='+arr[key];
			}
		}

		return result;
	}

	/**
	 * Функция возвращяет массив фотографий из указаное панели
	 * @param int id_panel ID панели
	 * @return array массив с фотками находящимися в панели
	 */
	var get_photo = function(id_panel)
	{
		var photos_list = new Object();
		var i = 0;
		$(id_panel).children("div.photoPreview").each(
			function(elm)
			{
				photos_list[i++] = $(this).attr("fid");
			}
		);

		return photos_list;
	}

	/**
	 * Получаем список альбомов
	 */
	var get_album = function(contener, type, draganddrop, tabs, foto)
	{
		$.ajax({
			url: '/foto/organize.html?group&act=get&type='+type,
			data: {},
			success: function(data)
			{
				$(contener).empty().html(data['html']);
				reinit_groups('div.showAlbum', draganddrop, tabs, foto);
				ajax.stop();
			}
		});
	}

	/**
	 * Удаляет выделенные альбомы
	 */
	this.delete_selected = function(contener, type, draganddrop, tabs, foto)
	{
		groups_selected = get_onpane(contener+' > .showAlbum > .selected');
		if (!groups_selected) return false;

		ajax.start();
		$.ajax({url: '/foto/organize.html?group&act=delete_array&type='+type,
			data: groups_selected,
			success: function(data)
			{
				get_album(contener, type, draganddrop, tabs, foto);
				foto.get_photo_list($('#searchPane_display').attr('value'));
			}
		});
	}

	/**
	 * Функция возвращяет массив выделенных альбомов
	 * @param int id_panel ID панели
	 * @return array массив с фотками находящимися в панели
	 */
	var get_onpane = function(id_panel)
	{
		var selected_list = new Object();
		var i = 0;
		$(id_panel).each(
			function(elm)
			{
				selected_list[i++] = $(this).parent().attr("aid");
			}
		);

		if (i == 0) return 0;
		return selected_list;
	}
}

/**
 * Класс для работы с фотографиями
 */
var Foto = function()
{
	var photo_info;
	var set_photo_info = new Object();
	var photo_preview_src = new Object();
	var tabs_editPhoto = new Object();
	var draganddrop = new Object();

	this.init = function(tabs_editPhoto_inside, draganddrop_inside)
	{
		tabs_editPhoto = tabs_editPhoto_inside;
		draganddrop = draganddrop_inside;
	}

	var init_dblclick = this.init_dblclick = function(photo_list)
	{
		$(photo_list).dblclick(function(){
			tabs_editPhoto.select('#editPhotoNames');
			get_info($(this), {0:$(this).attr('fid')});
		});
	}

	this.get_photo_list = function(get_list)
	{
		$.ajax({
				url: '/foto/organize.html?photo&act=get&get='+get_list,
				data: {},
				success: function(data)
				{
					$('#user_photo_list').empty().html(data['html']);

					// Обнавляем счётчик
					var text_option = $('#searchPane_display > option[value='+get_list+']').text();
					$('#searchPane_display > option[value='+get_list+']').text(text_option.substr(0, text_option.lastIndexOf('(')) + '('+data.photo_count+')');

                    // Изменяем ширину дива, что актуализирует скрол бар
					rewidth_list('#user_photo_list', $('#user_photo_list').children().length);
					draganddrop.redrag();
					init_dblclick('#user_photo_list > div');
					ajax.stop();
				}
		});
	}

	var rewidth_list = this.rewidth_list = function(sroll_id, foto_count)
	{
		$(sroll_id).css('width', foto_count * (107+10) + 'px');
	}

	var get_info = this.get_info = function(photoPreviewPane, foto_id)
	{
		var foto_onpane = typeof foto_id == 'object' ? foto_id : get_onpane(foto_id+' > div.photoPreview');
		if (!foto_onpane) return false;

		// Если был передан параметр foto_id фотографии, значит будет редактироваться одна фотография, скрываем список остальных фотографий, иначе показываем.
		if (typeof foto_id == 'object'){ $('#photoToEdit').hide();}
		else $('#photoToEdit').show();

		ajax.start(); // Затемняем экран

        $("#editphoto_id").attr("value", "0");

		var photoPreview_contener = $("#editPhotoList");

		rewidth_list('#editPhotoList', photoPreviewPane.length);

		// Копируем фото из div.photoPane в div.photoMover
		photoPreview_contener.html(photoPreviewPane.clone());
		photoPreview = photoPreview_contener.children("div.photoPreview");

		photoPreview.click(function(){
			photoPreview_contener.children('.ui-selected').removeClass('ui-selected');
			$(this).addClass('ui-selected');
			insert_photoinfo( $(this).attr('fid') );
		});

		$.ajax({url: '/foto/organize.html?photo&act=get_info',
		data: foto_onpane,
		success: function(data)
			{
				if (data['photo_option'] == 0)
                {
                    menu.confirm('#editPhoto_noAccess', 0, 0, function(){ajax.stop();} );
                    return;
                }

                $('#editPhotoList > .photoPreview').each(function(){
                    if (data['photo_option'][ $(this).attr('fid') ] == undefined)
                        $(this).remove();
                });

                photo_info = data['photo_option'];
				set_photo_info = new Object();
				ajax.complete('#editPhoto');
				$('#editPhotoList > .photoPreview').eq(0).addClass("ui-selected");
				insert_photoinfo($('#editPhotoList > .photoPreview').eq(0).attr('fid'));
			}
		});
	}

	this.set_info = function()
	{
		check_diff();
        var data = serialize(set_photo_info);
        // Если массив пустой, закрываем окно и выходим из функции
        if (!data)
        {
			ajax.stop();
			return 0;
        }

        ajax.start();
		$.ajax({url: '/foto/organize.html?photo&act=update',
				data: data,
				success: function(data){

					var album_preview_id = $('#album_preview_id').attr('value');

					// Получаем массив новых имён для фотографий
					for (key in data['photo_new_name'])
					{
						// Находим нужную картинку
						var obj_preview = $('div[fid='+key+'] > img');
						// Варезаем текущий путь до фотки, без имени файла, например из  пути http://2nsk.ru/data/foto/0/105/59d848f3eb.jpg делаем http://2nsk.ru/data/foto/0/105/
						// Далее подставляем новое имя файла содержащееся в data['photo_new_name'][key]
						var new_src = obj_preview.attr('src').substring(0, obj_preview.attr('src').lastIndexOf('/')+1) + data['photo_new_name'][key] + '.jpg';
						// Меняем src у самой фотки
						obj_preview.attr('src', new_src);

						// Если ID совпадает с обложкой альбома, то меняем обложе src
						if (album_preview_id == key) $('#album_preview').attr('src', new_src);
					}
					ajax.stop();
				}
		});

		set_photo_info = new Object();
	}

	// Обработка групового редактирования фотографий
	this.input2datetime = function()
	{
		var date_inputs = new Array(); // Массив в который запишим значения :input полей
		$('#editDate > :input').each(function(key){ date_inputs[key] = $(this).attr('value'); });// Записываем значения
		return date_inputs[2]+'-'+date_inputs[1]+'-'+date_inputs[0]+' '+date_inputs[3]+':'+date_inputs[4]+':00'; // Вормируем поле datetime
	}

	var radio_value = this.radio_value = function(id, value)
	{
		var access=1;
		$(id).each(function(){
			if (value)
			{
				if ($(this).attr('value') == value)
				{
					$(this).attr('checked', 'checked');
					return value;
				}
			}
			else if ($(this).attr('checked'))
			{
				access = $(this).attr('value');
			}
		});

		return access;
	}

	this.set_info_group = function(upd, foto_onpane, value)
	{
		if (!value)
		{
			ajax.stop();
			return false;
		}

		ajax.start();
		$.ajax({url: '/foto/organize.html?photo&act=update_fotos&upd='+upd,
				data: serializeObj({foto:foto_onpane, value:value}),
				success: function(data){
					ajax.stop();
				}
		});

		return true;
	}

	this.remove = function(photo_id)
	{
		// Получаем ID текущей фотки и отправляем запрос на удаление
		ajax.start();
		$.ajax({url: '/foto/organize.html?photo&act=delete', data: {id: photo_id}, success: function(data){
			$('#editPhotoList > .ui-selected').remove();
			$('#editPhotoPane > .photoPreview').each(function(){
				if (photo_id == $(this).attr('fid')) $(this).remove();
			});

			$('#user_photo_list > .photoPreview').each(function(){
				if (photo_id == $(this).attr('fid')) $(this).remove();
			});

			var count_rest = $('#editPhotoList').children().length;
			rewidth_list('#editPhotoList', count_rest);
			rewidth_list('#user_photo_list', $('#user_photo_list').children().length);

			$('#editPhotoList').children().eq(0).trigger('click');

			$("#confirm").hide();
			if (count_rest > 0) ajax.complete('#editPhoto');
			else ajax.stop();

			$("#confirm_yes").unbind('click');
			$("#confirm_no").unbind('click');
		}});

	}

	this.remove_array = function(panel_id, foto_list)
	{
		// Получаем ID текущей фотки и отправляем запрос на удаление
		$.ajax({url: '/foto/organize.html?photo&act=delete_array', data: foto_list,
			success: function(data)
			{
				$(panel_id+' > .photoPreview').remove();
				$('#user_photo_list > .photoPreview').each(function()
				{
						for (key in foto_list)
						{
							if (foto_list[key] == $(this).attr('fid')) $(this).remove();
						}
				});
                rewidth_list('#user_photo_list', $('#user_photo_list').children().length);
				ajax.stop();
			}
		});
	}

	/**
	 * Вписывает данные из массива photo_info в поля, этим определяется момент переключения фотографий.
	 * @param int photo_id ID фотографии данные которой надо вписать в поля формы
	 */
	var insert_photoinfo = this.insert_photoinfo = function(photo_id)
	{
		check_diff();
		var photo = photo_info[photo_id];

		$("#currentPhoto").attr("src", (photo_preview_src[photo_id] != undefined ? photo_preview_src[photo_id] : URL_DATA+'foto/'+photo['filepath_dir']+'/240/'+photo['filepath_name']+'.jpg'));
		$("#currentPhoto_full_url").attr("href", (photo_preview_src[photo_id] ? photo_preview_src[photo_id] : URL_DATA+'foto/'+photo['filepath_dir']+'/600/'+photo['filepath_name']+'.jpg'));

		$("#editphoto_id").val(photo_id); // Записываем текущий FID фотографии
		$("#editphoto_name").val(photo['item_name']);
		$("#editphoto_desc").val(photo['item_desc']);
		reInsertTagsData(photo['item_tags']);

		// Если дата снимка по нулям, значит она нам не известна.
		if (photo['exif_datetime'].substring(0,16) == '0000-00-00 00:00')
		{
			$('#exif_datetime_no').show();
			$('#exif_datetime').hide();
		}
		// Иначе парсим дату снимка
		else
		{
			$('#exif_datetime_no').hide();
			$('#exif_datetime').show();
		}
			
		// Разбираем дату снимка 
		var photo_datetime = photo['exif_datetime'].split(" ");
		var photo_date = photo_datetime[0].split("-");
		var photo_time = photo_datetime[1].split(":");
			
	    // Устанавливаем значения в select
		$('#editPhotoDates_day').val(photo_date[2]);
		$('#editPhotoDates_mounth').val(photo_date[1]);
		if (photo_date[0] == '0000') $('#editPhotoDates_year').val('');
		else $('#editPhotoDates_year').val(photo_date[0]);
	
		$('#editPhotoDates_hour').val(photo_time[0]);
		$('#editPhotoDates_min').val(photo_time[1]);
		$('#editPhotoDates_sec').val(photo_time[2]);
		
		
		// Разбираем дату загрузки
		var photo_upload_date = photo['date_create'].split("-");
		$("#editphoto_upload_date_0").val(photo_upload_date[0]);
		$("#editphoto_upload_date_1").val(photo_upload_date[1]);
	
		// Устанавливаем права доступа
		$('#pub').val(photo['is_public']).change();
		$('#access').val(photo['access']);
		$('#is_comment').val(photo['is_comment']);
		$('#is_rating').val(photo['is_rating']);

		// Устанавливаем тукущий альбом
		$('#location_album').text(photo['album_name']);
		
		// Сбрасываем место нового расположения
		$('#location_change_album').val(0);
		$('#location_domain').val(0).change();
		
		// Если фото имеет привязку к какой либо сущности, 
		// пишем что не возможно изменить расположение фото и даём ссылки на эти сущности
		if (photo['link'].length > 0)
		{
			var links = '';
			for(link_item in photo['link'])
				links += '<li><a href="'+photo['link'][link_item]+'" target="_blank">'+photo['link'][link_item]+'</a></li>';
			
			$('#location_links').html(links);
			$('#location_notchange').show();
			$('#location_domain_table').hide();

            $('#retate_links').html(links);
			$('#rotate_notchange').show();
			$('#rotate_change').hide();
		}
		else
		{
			$('#location_notchange').hide();
			$('#location_domain_table').show();
			// Если места были определны, устаналиваем их
			if (photo['location_domain'] != undefined)
			{
				$('#location_domain').val(photo['location_domain']).change();
				$('#location_domain_album').val(photo['location_domain_album']);
			}
			
			if (photo['location_change_album'] != undefined)
			{
				$('#location_change_album').val(photo['location_change_album']).change();
			}
		
            $('#rotate_notchange').hide();
			$('#rotate_change').show();
            // Повернуть
            radio_value('#rotate_change > :radio', photo['item_rotate']);
            switch(photo['item_rotate'])
            {
                case 'N': var position = '0px 0px'; break;
                case 'E': var position = '100px 0px'; break;
                case 'S': var position = '100px 100px'; break;
                case 'W': var position = '0px 100px'; break;
            }
            $('#preview_rotate').css('background-position', position);
        }
	}

	/**
	 * Проверяет текущие данные, если они были изменены, то записываем их в массив, который потом отправим на сервер
	 */
	var check_diff = function()
	{
		// Получаем ID фото
		before_id = $("#editphoto_id").attr("value");
		
		// Если не удалось определить ИД, выходим из функции
		if (!parseInt(before_id)) return 0;
		
		// Если в массиве который будем отправлять на серевер нету данных о этой фотографии
		// то создаём новый объект
	    if (set_photo_info[before_id] == undefined) set_photo_info[before_id] = new Object();

        // Это дефолтовые данные которые пришли с сервера
		var before_photo = photo_info[before_id];

        // Переписываем ID
        set_photo_info[before_id]['id'] = before_photo['id'];

		// ***
		// Сравниваем input'ы с дефолтовыми данными
		
		// Название
		if ($('#editphoto_name').val() != before_photo['item_name'])
		{
			set_photo_info[before_id]['item_name'] = 
			photo_info[before_id]['item_name'] = 
			$('#editphoto_name').val();
		}
		
		// Описание
		if ($('#editphoto_desc').val() != before_photo['item_desc'])
		{
			set_photo_info[before_id]['item_desc'] = 
			photo_info[before_id]['item_desc'] = 
			$('#editphoto_desc').val();
		}

        // Таги
        /*for (var i in selectedTags)
        {
            // Если какой-то таг не найден в текущих, обнавляем спсиок. 
            if (!InArray(before_photo['item_tags'], selectedTags[i]))
            {*/
                set_photo_info[before_id]['item_tags'] =
                photo_info[before_id]['item_tags'] =
                selectedTags;
      /*          break;
            }
        }*/
		
		// Дата съёмки
		var year = $('#editPhotoDates_year').val() ? $('#editPhotoDates_year').val() : '0000';
		var exif_datetime = year+'-'+
							$('#editPhotoDates_mounth').val()+'-'+
							$('#editPhotoDates_day').val()+' '+
							$('#editPhotoDates_hour').val()+':'+
							$('#editPhotoDates_min').val()+':'+
							$('#editPhotoDates_sec').val();
				
		if (exif_datetime != before_photo['exif_datetime'])
		{
			set_photo_info[before_id]['exif_datetime'] = 
			photo_info[before_id]['exif_datetime'] = 
			exif_datetime;
		}
		
		// Права доступа
		if ($('#pub').val() != before_photo['is_public'])
		{
			set_photo_info[before_id]['is_public'] = 
			photo_info[before_id]['is_public'] = 
			$('#pub').val();
		}
		if ($('#access').val() != before_photo['access'])
		{
			set_photo_info[before_id]['access'] = 
			photo_info[before_id]['access'] = 
			$('#access').val();
		}
		if ($('#is_comment').val() != before_photo['is_comment'])
		{
			set_photo_info[before_id]['is_comment'] = 
			photo_info[before_id]['is_comment'] = 
			$('#is_comment').val();
		}
		if ($('#is_rating').val() != before_photo['is_rating'])
		{
			set_photo_info[before_id]['is_rating'] = 
			photo_info[before_id]['is_rating'] = 
			$('#is_rating').val();
		}
		
		// Расположение фото
		if ($('#location_change_album').val() != '0')
		{
			photo_info[before_id]['location_change_album'] =
			set_photo_info[before_id]['location_change_album'] = 
			$('#location_change_album').val();
		}
		
		if ($('#location_domain').val() != '0')
		{
			photo_info[before_id]['location_change_album'] =
			set_photo_info[before_id]['location_change_album'] = '0';
			
			photo_info[before_id]['location_domain'] =
			set_photo_info[before_id]['location_domain'] = 
			$('#location_domain').val();
			
			photo_info[before_id]['location_domain_album'] =
			set_photo_info[before_id]['location_domain_album'] = 
			$('#location_domain_album').val();
		}	
		
		// Повернуть фото
		var angle = radio_value('#rotate_change > :radio');
		if (before_photo['item_rotate'] != angle)
		{
			photo_info[before_id]['item_rotate'] =
			set_photo_info[before_id]['item_rotate'] = 
			angle;
		}
	}

	this.rotate_preview_src = function(angle)
	{
		var currentPhoto_src = $('#currentPhoto').attr('src'); // Сохраняем текущий путь, чтобы в случае ошибки вставть его.

		switch(angle)
		{
			case 'N': var position = '0px 0px'; break;
			case 'E': var position = '100px 0px'; break;
			case 'S': var position = '100px 100px'; break;
			case 'W': var position = '0px 100px'; break;
		}
		$('#preview_rotate').css('background-position', position);

		$('#currentPhoto').attr('src', URL_IMG+'ajax/loading.gif');

		var photo_id = $("#editphoto_id").attr("value");
		var src = "/foto/organize.html?photo&act=rotate&angle="+angle+"&fid="+photo_id;
		photo_preview_src[photo_id] = src;

		// Загружаем фотку
		var IMG = new Image();
		IMG.src = src;
		IMG.onload = function(){ $("#currentPhoto").attr("src", src); }
		IMG.onerror = function(){ $("#currentPhoto").attr("src", currentPhoto_src); }
	}

	// Функция: serialize(arr)
	// Описание: Приводит двумерный массив [{a:1,b:2},{a:123,b:321}] к виду &0[a]=1&0[b]=2&1[a]=123&1[b]=321
	// Вход: arr - массив или объект
	// Выход: строка вида &0[a]=1&0[b]=2&1[a]=123&1[b]=321
	var serialize = function(arr)
	{
		var result = '';
		for(key in arr)
		{
			if (typeof arr[key] == 'object')
			{
				for(key2 in arr[key])
				{
					result += '&'+key+'['+key2+']='+arr[key][key2];
				}
			}
			else
			{
				result += '&photo_array[]='+arr[key];
			}
		}

		return result;
	}

	var serializeObj = function(arr)
	{
		var result = '';
		for(key in arr)
		{
			if (typeof arr[key] == 'object')
			{
				for(key2 in arr[key])
				{
					result += '&'+key+'['+key2+']='+arr[key][key2];
				}
			}
			else
			{
				result += '&'+key+'='+arr[key];
			}
		}

		return result;
	}
	
	/**
	* Включает или отключает дополнительные парметры полей доступа
	*
	*/
	this.accessToggle = function(val)
	{
		if (val == 1)
		{
			$('#access').val('all').attr('disabled', 'true');
			$('#is_comment').val('all').attr('disabled', 'true');
			$('#is_rating').val('all').attr('disabled', 'true');
		}
		else
		{
			$('#access').removeAttr('disabled');
			$('#is_comment').removeAttr('disabled');
			$('#is_rating').removeAttr('disabled');
		}
	}
	
	
	this.location_albumToggle = function(val)
	{
		if (val != 0) $('#location_domain').val(0).change();
	}
	
	this.locationToggle = function(val)
	{
		if (val == 0)
		{
			$('#location_domain_album').html('<option value="0">- - -</option>').attr('disabled', 'true');
			return;
		}
		$('#location_change_album').val(0).change();
		$('#location_domain_album').removeAttr('disabled');
		
		var opt_html = '';
		for (album_id in albums_clubs[val])
		{
			opt_html += '<option value="'+album_id+'">'+albums_clubs[val][album_id]+'</option>';
		}
		$('#location_domain_album').html(opt_html);
	}

	// Функция: get_onpane
	// Описание: Функция возвращяет массив выделенных альбомов или подборок
	// Вход: id_panel - ID панели
	// Выход: массив с фотками находящимися в панели
	var get_onpane = this.get_onpane = function(id_panel)
	{
		var selected_list = new Object();
		var i = 0;
		$(id_panel).each(
			function(elm)
			{
				selected_list[i++] = $(this).attr("fid");
			}
		);

		if (i == 0) return 0;
		return selected_list;
	}
}