(function($) { // поддержать, голосовать против
	$(document).ready(function() {
		$('div.dmk-donate-problem-upDown').toggle(
			function () {
				$(this).css('background-position','7px -34px');
				$('#dmk-dpOn').hide();
				$('.dmk-donate-problem').css('margin-left',(parseFloat($('.dmk-donate-problem').css('margin-left'))-1)+'px');
				$('.dmk-donate-voteAgainst').css('border-left','1px solid #221E1F');
				$('#dmk-dpOf').show();
			},
			function () {
				$(this).css('background-position','7px 12px');
				$('#dmk-dpOf').hide();
				$('.dmk-donate-problem').css('margin-left',(parseFloat($('.dmk-donate-problem').css('margin-left'))+1)+'px');
				$('.dmk-donate-voteAgainst').css('border-left','none');
				$('#dmk-dpOn').show();
			}
		);
	});
})(jQuery);

deleteProblem = function(problemId) { (function($) {
    if (confirm('Если уничтожить проблему, то все записи по ней будут потеряны!')) {
        $.ajax({
            type: 'POST',
            url: '/s/rest/problem/delete',
            async : false,
            data: ({
                'problemId'        : problemId
            }),
            success: function (data, status, xhr) {
                window.location.href = '/';
            },
            error: function(jqXHR, textStatus, errorThrown) {
                alert('Произошла при удалении проблемы \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта.');
            }
        });
    }
})(jQuery);};

hideProblem = function(problemId) { (function($) {
     if (confirm('Не показывать в последних, уверены?')) {
        $.ajax({
            type: 'POST',
            url: '/s/rest/problem/hide',
            async : false,
            data: ({
                'problemId'        : problemId
            }),
            success: function (data, status, xhr) {
                window.location.reload();
            },
            error: function(jqXHR, textStatus, errorThrown) {
                alert('Произошла при скрытии проблемы \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта.');
            }
        });
     }

})(jQuery);};

promoteProblem = function(problemId, sign) { (function($) {
        var ctrl = Seam.Component.newInstance("problemCtrl");
        ctrl.promote(problemId, sign,
            function() {
                window.location.reload();
            }, function(e) {
                alert(e.getMessage());
            });
        return false;
})(jQuery);};

function attachSimpleAutocomplete(searchUrl, inputJqe) {
	jQuery(document).ready(function() {
		jQuery(inputJqe).autocomplete({
			source: searchUrl,
			select: function(event, ui) {
				selectedOrganization = ui.item.id;
				jQuery(inputJqe).val(ui.item.value);
				return false;
			}
		});
	});
}
function dontSubmit(event) {
	return !(event.keyCode == 13);
}

/*
 * 2010.12.20 panasenko
 * Закрытие голосования на ответ
 */
function closeResponse(responseId) {
	var ctrl = Seam.Component.getInstance("requestWorkflowCtrl");
	var newStatus = jQuery("#responseStatus").val();
	ctrl.closeResponse(responseId, newStatus, function(result){
		window.location.reload();
	}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
	});
}


/*
 * 2010.09.21 panasenko
 * Обрабока получения ответа на обращение/отправки обращения/перенаправления и пр.
 */
function publishWorkflow(requestId, context) {
	var text = jQuery('#workflowText').val();
	if ((text == null || text.replace(/\s/g,"") == "") && (attach.length == 0)) {
		return;
	}
	
	var attach = new Array;	
	jQuery(".addWorkflowImage input[name='attachment']").each(function(n,element) {
		attach[n] = jQuery(element).val();
	});
	
	var dto = new Seam.Remoting.Map();	
	dto.put("innerNumber", jQuery('#requestInnerNumber').val());
	//dto.put("isPublishNew" ,jQuery('#chPublishNew').attr('checked'));
	dto.put("isPublishEmail" ,jQuery('#chSentEmail').attr('checked'));
	dto.put("requestId", requestId);
	dto.put("text", jQuery('#workflowText').val());
	//dto.put("newsText", jQuery('#newsText').val());
	dto.put("emailText", jQuery('#emailText').val());
	dto.put("emailSubject", jQuery('#emailSubject').val());
	dto.put("actionDate", jQuery('#actionDate').val());
	try{dto.put("organizationId", selectedOrganization);}catch(e){}
	
	
	var ctrl = Seam.Component.getInstance("requestWorkflowCtrl");
	ctrl.publishWorkflowAction(dto, context, attach, function(result){
		ctrl.changeRequestStatus(requestId,  context, function(data) {
			try {
				window.location.reload();
			} catch(e) {
				alert(e);
			}
		});
	}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
	});

}

function requestAction(actionString) {
	var splinters = actionString.split(',');
	var action = splinters[0];
	switch (action) {
		case 'changeRS': {
			changeRequestStatus(
					Number(splinters[1]),
					splinters[2]
			);
			break;
		}
		case 'createNR': {
			createNewRequest(
					Number(splinters[1]),
					Number(splinters[2]),
					splinters[3] == 'null' ? null : Number(splinters[3])
			);
			break;
		}
	}
}

/*
 * 2010.10.07 panasenko
 * Обработчик изменения статуса обращения
 */
function changeRequestStatus(requestId, newStatus){	
	var ctrl = Seam.Component.getInstance("requestWorkflowCtrl");
	if (newStatus=="ANSWERED" || newStatus=="SENT" || newStatus=="REDIRECTED") {
		jQuery.ajax({ //вызов и показ формы редактирования (ответа/скана о приемке)
			url: "/problem/requestWorkflow.seam",
			data: {requestId: requestId, templateContext : newStatus},
			cache: false,
			dataType: 'html',
			success: function(data){
				var workflowEditForm = jQuery(data).find('.workflowEdit').html();				
				showModal(workflowEditForm);								
				jQuery("#actionDate").datepicker();
				attachSimpleAutocomplete('/s/rest/interest/search?type=o', '#ii-org');
		        jQuery("#workflowText, #newsText, #emailText").elastic();
			},
			error: function(){Alert("Нет доступа к данным на сервере");}
		});	
		return;
	}	
    ctrl.changeRequestStatus(requestId,  newStatus,
    		function(data) {
    			try {
					window.location.reload();
				} catch(e) {
					alert(e);
				}
    		});
}

/*
 * 2010.10.07 panasenko
 * Изменение текстов шаблонов при выборе в селекте
 */
function refreshWorkflowTemplates(requestId, context){
	var templateId = jQuery("#templateSelector").val();
	jQuery.ajax({
		url: "/problem/requestWorkflow.seam",
		data: {requestId: requestId, templateId : templateId, templateContext : context},
		dataType: 'html',
		cache: false,
		success: function(data){
			jQuery("#workflowText").html(jQuery(data).find('#workflowText').html())
				.elastic();
			jQuery("#newsText").html(jQuery(data).find('#newsText').html())
				.elastic();
			jQuery("#emailText").html(jQuery(data).find('#emailText').html())
				.elastic();
			jQuery("#emailSubject").val(jQuery(data).find('#emailSubject').val());
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

/*
 * TODO: перенести функцию в другой файл
 * 2010.08.30 panasenko
 * Переключение видимости/невидимости элементов под div-ом
 */
function toggleBlocks(parentDiv, elementsToShow, elementsToHide) {	
	for(i=0; i < elementsToHide.length; i++) {			
		jQuery(parentDiv).find(elementsToHide[i]).hide();
	}
	for(i=0; i < elementsToShow.length; i++) {		
		jQuery(parentDiv).find(elementsToShow[i]).show();
	}
}

/*
 * TODO: перенести функцию в другой файл
 * 2010.08.30 panasenko
 * Функция реализует логику активации полей редактирования на странице
 * 	- подключение слушателя событий;
 *  - автоматическое переключение видимости/невидимости отображаемого
 *    и редактируемого полей с кнопками.
 *  Активируемые поля должны быть под div-ами .editableField
 *  	поле вывода 			- .editableOutput
 *  	ссылка "редактировать"  - .editableEditRef
 *  	поле редактирования 	- .editableInput
 *  	кнопка "сохранить"		- .editableSave
 *  	кнопка "отменить"		- .editableCancel
 */
function initEditFields() {

	staticBaseUrl = dmk.staticBase;
	var editableFields = jQuery("div .editableField");

	for(i=0; i < editableFields.length; i++) {
		currentEditableId = jQuery(editableFields[i]).attr("id");

		if (jQuery(editableFields[i]).data("enabled") !="true"){
			jQuery(editableFields[i]).find(".editableEditRef")
					.bind('click', function(){
						Alert('Редактирование доступно' + (d_r.isVoted !='false' ? ',': ' для поддержавших проблему и') + ' если документ открыт для редактирования'
							+ (d_r.isModerator=='false' ? '; некоторые поля доступны для модератора' : ''), 9);
					});
			}else{

			//ссылка- иконка "редактировать"
			jQuery(editableFields[i]).find(".editableEditRef")
				.css("border-bottom", "transparent")
				.find("img").addClass("change")
				.attr("src", staticBaseUrl+"/images/txt_16.png")
				.click(function() {
					var parentDiv = jQuery(this).parents(".editableField");
					if (jQuery(parentDiv).data("isVersionText")) {
						var ctrl = Seam.Component.getInstance(jQuery(parentDiv).data("controller"));
						var versionId = jQuery("#versionSelector").val();
						ctrl.getVersionText(versionId, function(data) {
							jQuery(parentDiv).find(".editableInput").val(data);
						});
					} else {
						var outputText = jQuery(parentDiv).find(".editableOutput").html();
						jQuery(parentDiv).find(".editableInput").val(outputText);
					}
					jQuery(".b-dlSelect table.edit").toggle();
					toggleBlocks(parentDiv,
							[".editableInput", ".editableSave", ".editableCancel"],
							[".editableEditRef", ".editableOutput"]);
					//отметка о редактировании
					//d_r.editingDocField =outputText;
					jQuery(this).parents('.view').next().find('textarea').elastic();
				});

			//кнопка "сохранить"
			jQuery(editableFields[i]).find(" .editableSave")
				.click(function(){
					var parentDiv = jQuery(this).parents(".editableField");
					inputText = jQuery(parentDiv).find(".editableInput").val();
					toggleBlocks(parentDiv,
						[".editableEditRef", ".editableOutput"],
						[".editableInput", ".editableSave", ".editableCancel"]);
					//сохранение в базе
					var ctrl = Seam.Component.getInstance(jQuery(parentDiv).data("controller"));
					var entityId  = jQuery(parentDiv).data("entityId");
					var fieldName = jQuery(parentDiv).attr("id");

					//TODO: заплатка
					if (jQuery(parentDiv).data("isVersionText")) {
						publishNewVersion(entityId);
					}else{
						ctrl.updateField(entityId, fieldName, inputText, function(data) {
							jQuery(parentDiv).find(".editableOutput").html(data);
							});
					}
					//снять (если было изменение) отметку о редактировании
					if(d_r.editingDocField != inputText)
						d_r.editingDocField =null;
				});
			//кнопка отменить
			jQuery(editableFields[i]).find(" .editableCancel")
				.click(function() {
					var parentDiv = jQuery(this).parents(".editableField");
					toggleBlocks(parentDiv,
						[".editableEditRef", ".editableOutput"],
						[".editableInput", ".editableSave", ".editableCancel"]);
				});
				//снять отметку о редактировании
				d_r.editingDocField =null;
		}

	}
	//включение по умолчанию
	jQuery(".editableEditRef").show();
	jQuery(".editableOutput").show();
	jQuery(".editableInput").hide();
	jQuery(".editableSave").hide();
	jQuery(".editableCancel").hide();
}


/* плюсики и минусики на коментарии */
function problemCommentUp(document, up) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		var parentDiv = jQuery(document).parents(".editableComment");
		var commentId = jQuery(parentDiv).attr("id");
		ctrl.upComment(commentId, up, function(result){
            jQuery(parentDiv).find(".commentRating").html(result);
			colorUp();
		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
}

function colorUp () {
	var findMinus = /^-/;
	var rep = jQuery('.commentRatingBlock').find('.commentRating');
	for (var i=0; i < rep.length; i++ ) {
		if (findMinus.test(rep.eq(i).html())) {
			rep.eq(i).css('color','red');
		} else if (rep.eq(i).html()>0) {
			rep.eq(i).css('color','green');
		} else rep.eq(i).css('color','gray');
	}
}
jQuery(document).ready(function (){
	colorUp();
});


spamCommentf = function(document)  { (function($) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		var parentDiv = $(document).parents(".editableComment");
		var commentId = $(parentDiv).attr("id");
		ctrl.spamComment(commentId, function(result){
            $(parentDiv).find(".commentSpamRating").html('('+result+')');
		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
})(jQuery);};

addComment = function(problemId)  { (function($) {
    var ctrl = Seam.Component.getInstance("problemCtrl");
    var commentText = $("#commentText").val();
    var isAdmin    = $("#chAdmin").attr("checked");
    if (isAdmin==null || isAdmin=='') {
        isAdmin = false;
    }
	if (commentText!='') {
		ctrl.addComment(problemId, commentText, isAdmin, function(result){
				window.location.assign(window.location.pathname);
				//window.location.reload(true);
			}, function(e){
				alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
			});
	} else {
		$("#commentTextEmpty").show();
	}
})(jQuery);};


unSimilarProblem = function(problemId, similarProblemId)  { (function($) {
    var ctrl = Seam.Component.getInstance("problemCtrl");
    ctrl.unSimilarProblem(problemId, similarProblemId, function(result){
             if (result==null || result=="") {
                window.location.reload();
             }  else {
                $("#similarErrorText").text(result);
             }

		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
})(jQuery);};

similarProblem = function(problemId)  { (function($) {
    var ctrl = Seam.Component.getInstance("problemCtrl");
    var similarProblemId = $("#similarProblemNum").val();
    //проверить правильность идентификатора
    ctrl.similarProblem(problemId, similarProblemId, function(result){
             if (result==null || result=="") {
                window.location.reload();
             }  else {
                $("#similarErrorText").text(result);
             }

		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
})(jQuery);};

function problemCommentDelete(document) {
	if (confirm("Удалить комментарий?")) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		var parentDiv = jQuery(document).parents(".editableComment");
		var commentId = jQuery(parentDiv).attr("id");
		var prblm = jQuery(parentDiv).find(".problemContent");
		var val = prblm.html();
		ctrl.editComment(commentId, val, true, false, function(result){
			 //prblm.html("<Комментарий удален>");
			 window.location.reload();
		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
	}
}

function problemCommentImportant(document, important) {
    var questionText = '';
    if (important) {
        questionText = "Сделать комментарий важным?";
    } else {
        questionText = "Убрать комментарий из важных?";
    }
	if (confirm(questionText)) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		var parentDiv = jQuery(document).parents(".editableComment");
		var commentId = jQuery(parentDiv).attr("id");
		ctrl.importantComment(commentId, important, function(result){
		    window.location.reload();
		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
	}
}

function problemCommentEdit(document) {
	var ctrl = Seam.Component.getInstance("problemCtrl");
	var parentDiv = jQuery(document).parents(".editableComment");
	var textareaHeight = jQuery(document).parents('td').outerHeight();
	var commentId = jQuery(parentDiv).attr("id");
	var prblm = jQuery(parentDiv).find(".problemContentEdit");
	var val = prblm.html();
	var edit = jQuery(parentDiv).find(".commentEditDelete");
	var txt = jQuery("<textarea>",{
		val: val,
		"class": "style-textarea",
		"height": textareaHeight
	});
	var save = jQuery("<input>",{
		type: "button",
		"val": "Сохранить",
		"class": "style-input-button",
		"click": function() {
			ctrl.editComment(commentId, txt.val(), false, false, function(result){
				prblm.html(result).show();
				txt.remove();
				save.remove();
				cancel.remove();
				//edit.show();
			}, function(e){
				alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
			});
		}
	});
	var cancel = jQuery("<input>", {
		type: "button",
		"val": "Отмена",
		"class": "style-input-button",
		"click": function() {
			prblm.show();
			txt.remove();
			save.remove();
			cancel.remove();
			//edit.show();
		}
	});
	par = jQuery(parentDiv).find('.problemDescription');
	par.prepend(save).prepend(cancel).prepend(txt);
	prblm.hide();
	edit.hide();
}



function problemUpdateDelete(id, document) {
	if (confirm("Удалить дополнение?")) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		var parentDiv = jQuery(document).parents(".editableUpdate");
		var updateIndex = jQuery(parentDiv).attr("id");
		var prblm = jQuery(parentDiv).find(".problemContent");
		ctrl.editUpdate(id, "", updateIndex, true, function(result){
			 prblm.html("<Дополнение удалено>");
		}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
		});
	}
}

function problemUpdateEdit(id, document) {		
	var ctrl = Seam.Component.getInstance("problemCtrl");
	var parentDiv = jQuery(document).parents(".editableUpdate");
	var textareaHeight = jQuery(parentDiv).find('.problemContent').height();
	var updateIndex = jQuery(parentDiv).attr("id");
	ctrl.getEditText(id, updateIndex, function(val){
		var prblm = jQuery(parentDiv).find(".problemContent");
		var edit = jQuery(parentDiv).find(".problemUpdateEdit");
		var eDelete = jQuery(parentDiv).find(".problemUpdateDelete");
		var txt = jQuery("<textarea>",{
			val: val,
			"class": "style-textarea",
			"height": textareaHeight
		});
		var save = jQuery("<input>",{
			type: "button",
			"class": "style-input-button",
			"val": "Сохранить",
			"click": function() {
				ctrl.editUpdate(id, txt.val(), updateIndex, false, function(result){
					prblm.html(result).show();
					txt.remove();
					save.remove();
					cancel.remove();
					edit.show();
					eDelete.show();
				}, function(e){
					alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
				});
			}
		});
		var cancel = jQuery("<input>", {
			type: "button",
			"class": "style-input-button",
			"val": "Отмена",
			"click": function() {
				prblm.show();
				txt.remove();
				save.remove();
				cancel.remove();
				edit.show();
				eDelete.show();
			}
		});
		par = jQuery(parentDiv).find('.problemDescription');
		par.prepend(save).prepend(cancel).prepend(txt);
		prblm.hide();
		edit.hide();
		eDelete.hide();
	});
}


/*
 * 2010.30.09 panasenko
 * Вызов и показ email уведомления о проблеме (в виде обращения)
 */
function refreshEmailData(requestId) {
	jQuery.ajax({ //вызов и показ ответа на обращение
		url: "/problem/cardResponse.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){
			var emailViewForm = jQuery(data).find('.requestEmailView').html();
			navigateAnchor('email', requestId);
			showModal(emailViewForm);
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

/*
 * 2010.09.09 panasenko
 * Вызов и показ ответа на обращение
 */
function refreshResponseData(requestId) {
	jQuery.ajax({ //вызов и показ ответа на обращение
		url: "/problem/cardResponse.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){
			var responseViewForm = jQuery(data).find('.responseView').html();
			navigateAnchor('answer', requestId);
			showModal(responseViewForm);
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

/*
 * 2010.10.08 panasenko
 * Вызов и показ скана с уведомлением о перенаправлении обращения
 */
function refreshRedirectedData(requestId) {
	jQuery.ajax({
		url: "/problem/cardResponse.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){
			var requestRedirectForm = jQuery(data).find('.redirectView').html();
			navigateAnchor('redirect', requestId);
			showModal(requestRedirectForm);
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

/*
 * 2010.09.22 panasenko
 * Вызов и показ скана с отметкой о приеме документа
 */
function refreshRequestScanData(requestId) {
	jQuery.ajax({
		url: "/problem/cardResponse.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){ 
			var requestScanViewForm = jQuery(data).find('.requestScanView').html();
			navigateAnchor('check', requestId);
			showModal(requestScanViewForm);
			jQuery('div.dmk-tab-status-posting td').find('a').wrapInner('<span class="del-a"></span>');
			jQuery('div.dmk-tab-status-posting span.del-a').unwrap();
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

function initProblemDocumentsTab() { (function($) {
	var $addresseePicker = $('#addresseePicker');
	$addresseePicker.dmkOrgTreePicker({});
})(jQuery); }

/*
 * 2010.08.30 panasenko
 * Вызов и показ документа со списком версий
 */
function refreshRequestData(requestId, callVersion, versionId) { (function($) {
	$.ajax({ //вызов и показ документа (и списка версий)
		url: "/problem/cardVersionNew.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){
			showModal(data);
	        $("div .editableField")
	        	.data("entityId", requestId)
	        	.data("controller", "requestCtrl")
	        	.data("isVersionText", false);

	        $("div #bodyText").data("isVersionText", true);
	        $("div .editableField").data("enabled", "false");
			
	        if (d_r.adminEditAllowed) {
	        	$("div .editableField").data("enabled", "true");
			} else {
	        	$(".editableEditRef img").css("opacity", "0.4");
	        }
	        	
	        if (d_r.editAllowed) {
	        	$("#bodyText img").css("opacity", "1.0");
	        	$("div #bodyText").data("enabled", "true");
	        }	        
	        if (d_r.authorEditAllowed) {
	        	$("#addressee img").css("opacity", "1.0");
	        	$("div #addressee").data("enabled", "true");
	        }  else  {
	            $("div #addressee a").attr("href", "#");
	        }

	        $(".alwaysAllowed img").css("opacity", "1.0");
	        $("div .alwaysAllowed").data("enabled", "true");

	        initEditFields();

			var $addresseePicker = $('#addresseePicker');
			$addresseePicker
					.dmkOrgTreePicker('onSelect',
						function(event, ui) {
							$.ajax({
								url: '/s/appeal/updateorg',
								data: { id: requestId, org: ui.id },
								success: function() {
									$addresseePicker.dmkOrgTreePicker('close');
									refreshRequestData(requestId, callVersion, versionId);
								}
							});
						}
					);
			$('#docEdit-addressee').click(function() {
				if (!d_r.adminEditAllowed && !d_r.authorEditAllowed) {
					return false;
				}
				$addresseePicker.dmkOrgTreePicker('open');
				return false;
			});

	        var lh = location.hash.toString();
	        if(!/(doc\/?\d*)/.test(lh))
	        	location.hash = lh + (/[#\/]$/.test(lh) || lh==''?'':'/')+'doc/' + requestId; //дописать параметр-якорь (номер документа)
	        else
	        	location.hash = lh.replace(/(doc\/?\d*)/, "doc/"+ requestId); //заменить параметр-якорь
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
})(jQuery); }
	
function refreshVersionText(requestId, versionId){
	if (versionId ==null) versionId = jQuery("#versionSelector").val();
	jQuery.ajax({
		url: "/problem/cardVersionNew.seam",
		data: {requestId: requestId, versionId : versionId},
		dataType: 'html',
		cache: false,
		success: function(data){
			var d = jQuery(data).find('.userRequestText').html();
			jQuery(".userRequestText").html(d);
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
}

function createNewRequest(problemId, sourceRequestId, templateId) {

	// Повторное обращение
	if (templateId == 3) {
		var ctrl = Seam.Component.getInstance("problemCtrl");
		ctrl.createNewRequest(problemId, sourceRequestId, templateId, true, refreshRequestData);
		d_r.isNewDoc = 1; //для последующего рефреша страницы
		return;
	}

	var newRequestUrl = '/s/newappeal?problemId=' + problemId;
	if (sourceRequestId!=null && sourceRequestId!="") {
        newRequestUrl = newRequestUrl + '&sourceRequestId=' + sourceRequestId;
	}
	window.location.href = newRequestUrl + '&templateId=' + templateId;

}

function publishNewVersion(requestId) {
	var ctrl = Seam.Component.getInstance("requestCtrl");
	ctrl.publishNewVersion(requestId, jQuery("#requestVersionEdit").val(),refreshVersionsList);
}

function refreshVersionsList(requestId) {

	jQuery.ajax({
		url: "/problem/cardVersionNew.seam",
		data: {requestId: requestId},
		dataType: 'html',
		cache: false,
		success: function(data){
			var d = jQuery(data).find('#versionsList').html();
			jQuery("#versionsList").html(d);
			d = jQuery(data).find('.userRequestText').html();
			jQuery(".userRequestText").html(d);
			jQuery.each(jQuery(data).find(".updateWithVersion"), function(index, value) {				
				var divId = jQuery(value).attr("id");
				d = jQuery(value).find('.editableOutput').html();
				jQuery("#"+divId).find(".editableOutput").html(d);
			});			
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});

}

$closeProblemDialog = null;

function openCloseProblemDialog(problemId) { (function($) {

	if (!$closeProblemDialog) {
		$closeProblemDialog = $('#dmk-close-dialog');

		var $statusText              = $closeProblemDialog.find('#dmk-close-fStatusText');
		var $newSubStatus            = $closeProblemDialog.find('#dmk-close-fNewSubStatus');

		$closeProblemDialog.dmkEntityDialog({
			mode: 'edit',
			showDeleteButton: false,
			progressIndicator: '.activity',
			applyButton: 'Закрыть проблему',
			applyAjax: function() {
				return {
				    type: 'POST',
				    url: '/s/rest/problem/close-problem',
					data: ({
						'problemId'          : problemId,
						'newSubStatus'       : $newSubStatus.val(),
						'statusText'         : $statusText.val()
					}),
					success: function (){
						document.location.reload();
					}
				}
			},
			dialogOptions: {
				minWidth: 600
			}
		});
		$closeProblemDialog.find('input[type="text"], textarea').addClass('ui-widget-content ui-corner-all');
		$closeProblemDialog.find('input[type="text"]').addClass('pdd-itext');
	}
	$closeProblemDialog.dialog('open');
})(jQuery);};

$changeStatusDialog = null;

function changeSubStatusDialogSelectValueChanged() { (function($) {

    var $newSubStatus = $changeStatusDialog.find('#dmk-changeStatus-fNewSubStatus');

    var $divStoppingFields   = $changeStatusDialog.find('#stopping-problem');
    var $divDoubleFields     = $changeStatusDialog.find('#double-problem');
    $divStoppingFields.children("input").attr("disabled", "disabled");
    $divDoubleFields.children("input").attr("disabled", "disabled");

    if  ($newSubStatus.val()=='DOUBLE') {
        $divDoubleFields.children("input").removeAttr("disabled");
    }
    if  ($newSubStatus.val()=='STOPPED') {
        $divStoppingFields.children("input").removeAttr("disabled");
    }
})(jQuery);};

function changeStatusDialogSelectValueChanged() { (function($) {

    var $newStatus = $changeStatusDialog.find('#dmk-changeStatus-fNewStatus');
    var $newSubStatus = $changeStatusDialog.find('#dmk-changeStatus-fNewSubStatus');
    $.ajax({
      url: '/s/rest/problem/sub-statuses?status=' + $newStatus.val(),
      dataType: 'json',
      async : false,
      success: function (data, status, xhr) {
        $newSubStatus.find('option').remove();
        $.each(data, function(index, subStatus) {
            $newSubStatus.append('<option value=' + subStatus.id + '>' + subStatus.name + '</option>');
        });
    }
    });

    changeSubStatusDialogSelectValueChanged();
})(jQuery);};

function openChangeProblemStatusDialog(problemId) { (function($) {

	if (!$changeStatusDialog) {
		$changeStatusDialog = $('#dmk-changeStatus-dialog');

		var $newStatus               = $changeStatusDialog.find('#dmk-changeStatus-fNewStatus');
		var $statusText              = $changeStatusDialog.find('#dmk-changeStatus-fStatusText');
		var $newSubStatus            = $changeStatusDialog.find('#dmk-changeStatus-fNewSubStatus');
		var $stopPeriod              = $changeStatusDialog.find('#dmk-changeStatus-fStopPeriod');
		var $doubleProblemNum        = $changeStatusDialog.find('#dmk-changeStatus-fDoubleProblemNum');
		var $fMoveVotes              = $changeStatusDialog.find('#dmk-changeStatus-fMoveVotes');

		$changeStatusDialog.dmkEntityDialog({
			mode: 'edit',
			showDeleteButton: false,
			progressIndicator: '.activity',
			applyButton: 'Поменять статус',
			applyAjax: function() {
				return {
				    url: '/s/rest/problem/update-status',
					data: ({
						'problemId'          : problemId,
						'newStatus'          : $newStatus.val(),
						'newSubStatus'       : $newSubStatus.val(),
						'statusText'         : $statusText.val(),
						'stopPeriod'         : $stopPeriod.val(),
						'doubleProblemNum'   : $doubleProblemNum.val(),
						'moveVotes'          : $fMoveVotes.attr('checked')
					}),
					success: function (){
						document.location.reload();
					}
				}
			},
			dialogOptions: {
				minWidth: 600
			}
		});
		$changeStatusDialog.find('input[type="text"], textarea').addClass('ui-widget-content ui-corner-all');
		$changeStatusDialog.find('input[type="text"]').addClass('pdd-itext');
	}
	$changeStatusDialog.dialog('open');
	changeStatusDialogSelectValueChanged();
})(jQuery);};

function updateProblemAnnotation(problemId) {
	var text = jQuery(".probTxtShortEdit").val();
	Seam.Component.getInstance('problemCtrl').updateProblemAnnotation(problemId, text);
	jQuery(".probTxtShort").html(text);
}

function authorUpdate(problemId, defaultText) {
	var appendix = jQuery('#appendixText');
	text = appendix.val();
	var array = document.getElementsByName('attachment');
	var attach = new Array;
	//TODO: здесь похоже ошибка, последний элемент в цикл не попадает!
	for(i=0; i < array.length-1; i++) {
		attach[i] = array[i].value;
	}
	if ((text == null || text == defaultText || text.replace(/\s/g,"") == "") && (attach.length == 0)) {
		return;
	}
	Seam.Component.getInstance('problemTextCtrl').update(problemId, appendix.val(), attach,
			function(dto) {
		try {
			window.location.reload();
			/*
			var block = jQuery('#updateItemTemplate').clone();
			block.removeAttr('id');
			jQuery('#updateText', block).html(dto.text);
			block.insertBefore('.jsUpdateControls');
			imgItems = jQuery(".jsImageList").clone();
			jQuery(".jsImageList").hide();
			jQuery(".jsImageList").html('');
			imgItems.removeClass('jsImageList');
			imgItems.append("<div class='clear'></div");
			imgItems.show();
			jQuery(".deleteLink", imgItems).remove();
			jQuery(".jsImage", imgItems).lightBox();
			block.append(imgItems);
			*/
		} catch(e) {
			alert(e);
		}
	});
	appendix.val(defaultText);
}

//открытие документа для печати
function openPrintableDoc(requestId){
	jQuery.ajax({ //загрузка документа
		url: "/problem/cardVersionNew.seam",
		data: {requestId: requestId},
		cache: false,
		dataType: 'html',
		success: function(data){
            window.document.write(
                    '<html><head><title>Для печати - "Файл—Печать", для просмотра - "Файл—Предварительный просмотр"</title>'
                + '<link rel="stylesheet" href="' + host + dmk.staticBase + '/style/styles-' + d_r.cssVersion + '.css"' +
                            ' type="text/css" media="screen">'
                + '<style>' +
                            'body{' +
                            'margin: 12px 101px 0;}@media print{ body{margin: 0;}}.b-fullPrint .view{border-top: 0!important;} .editableField input{display: none;} .editableField textarea{display: none;} .editableEditRef img{display: none;}</style>'
                + '</head><body>'
                + jQuery(data).find('.b-viewList').html().replace(/\/staticContent/g, host +"/staticContent")
                + mz
                + '</body></html>');
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});
	var host = 'http://' + location.host;
	var mz = $.browser.mozilla ? '<script>window.stop();</script>' : '';

}

function loadDoc2win(){ //загрузка копии документа в новое окно для последующей печати
	//self.wPrintDoc.document.title = 'Для печати - "Файл'+emdash+'Печать", для просмотра - "Файл'+emdash+'Предварительный просмотр"';
	var host = 'http://' + location.host;
	var mz = $.browser.mozilla ? '<script>window.stop();</script>' : '';
	window.wPrintDoc.document.write(
			'<html><head><title>Для печати - "Файл—Печать", для просмотра - "Файл—Предварительный просмотр"</title>'
		+ '<link rel="stylesheet" href="' + host + dmk.staticBase + '/style/styles-' + d_r.cssVersion + '.css"' +
					' type="text/css" media="screen">'
		+ '<style>' +
					'body{' +
					'margin: 12px 101px 0;}@media print{ body{margin: 0;}}.b-fullPrint .view{border-top: 0!important;} .editableEditRef img{display: none;} </style>'
		+ '</head><body>'
		+ jQuery('.b-viewList').html().replace(/\/staticContent/g, host +"/staticContent")
		+ mz 
		+ '</body></html>');
}
function loadDoc2win2(){ //загрузка копии документа в новое окно для последующей печати
	//self.wPrintDoc.document.title = 'Для печати - "Файл'+emdash+'Печать", для просмотра - "Файл'+emdash+'Предварительный просмотр"';
	var host = 'http://' + location.host;
	var mz = $.browser.mozilla ? '<script>window.stop();</script>' : '';
	window.wPrintDoc.document.write(
			'<html><head><title>Для печати - "Файл—Печать", для просмотра - "Файл—Предварительный просмотр"</title>'
			+ '<link rel="stylesheet" href="' + host + dmk.staticBase + '/style/styles-' + d_r.cssVersion + '.css"'
			+ ' type="text/css" media="screen">'
			+ '<style>'
			+ 'body{'
			+ 'margin: 12px 101px 0;}@media print{ body{margin: 0;}}.b-fullPrint .view{border-top: 0!important;}.editableEditRef img{display: none;}</style>'
			+ '</head><body>'
			+ '<table cellspacing="0" cellpadding="0" style="width: 100%;"><tr>'
			+ '<td style="width: 50%; text-align: center; vertical-align: top; font-size: 10pt;"><b>ООО «Демократор»</b><br>'
			+ '101000, Москва, Большой Златоустинский переулок, дом 6Б,<br>'
			+ 'тел. +7 (495) 745-75-33<br>'
			+ 'ИНН 7718718182, КПП 771801001,<br>'
			+ 'р/с 40702810200090001161 в АКБ «Московский<br>'
			+ 'Индустриальный банк» (ОАО), БИК 044525600,<br>'
			+ 'к/с 30101810300000000600,<br>'
			+ 'www.democrator.ru</td>'
			+ '<td style="width: 50%; vertical-align: top;">'
			+ '<img width="325" height="47" src="http://static.democrator.ru/i/logoPrintPaper.png"><br/>'
			+ 'Информационная система общего пользования'
			+ '</td></tr></table><br/>'
			+ '<br/>'
			+ '<br/>'
			+ '<br/>'
			+ '<br/>'
			+ jQuery('#reqAddressing').text() + '!<br/><br/>'
			+ '<p>В поддержку усилий руководства страны по демократизации российского общества, ООО «Демократор» разработало и в феврале 2010 года запустило универсальную информационную систему общего пользования «Демократор.ру» (www.democrator.ru).<p/>'
			+ '<p>Сайт «Демократор» - это первая в России интернет-площадка для формирования индивидуальных и коллективных открытых и публичных обращений граждан и организаций в органы государственной власти и местного самоуправления, политические партии, общественные организации и другие структуры по жизненно важным для населения проблемам с целью их решения.<p/>'
			+ '<p>В настоящее время постоянными пользователями портала являются более 150 000 граждан. Ежедневно сайт посещает свыше 14 000 человек.<p/>'
			+ '<p>Информационная система «Демократор» строит свою работу в контексте выполнения мероприятий, заложенных в государственной программе Российской Федерации «Информационное общество (2011-2020 годы)» и  программ  информатизации,  формируемых  в  субъектах  РФ.<p/>'
			+ '<p>В проведенном в 2010 году конкурсе издательской  группой  Comnews  при  поддержке  Министерства  связи  и  массовых  коммуникаций  Российской  Федерации  проект «Демократор»  занял первое  место как «Лучший ИТ-проект для госсектора».<p/>'
			+ '<p>Предлагаем активнее использовать возможности информационной системы «Демократор» и зарегистрировать Вашей организации и подведомственным Вам структурам электронные «Служебные кабинеты», которые позволят более эффективно выявлять и своевременно решать проблемы людей, открыто реагировать на публичные обращения граждан.<p/>'
			+ '<p>Для регистрации электронных служебных кабинетов необходимо заполнить анкету по адресу http://www.democrator.ru/orgregister. <p/>'
			+ '<br/>'
			+ '<br/>'
			+ 'Генеральный директор<br/>'
			+ ' ООО «Демократор» 	<br/>'
			+ 'А.В. Богданов<br/>'
			+ '<br/>'
			+ '<br/>'
			+ mz
			+ '</body></html>'
	);
}
closeSubDoc = function(docs){ //"Закрыть" субдокумент: очищает якоря от док./верс.
	if(d_r.isChanged && !confirm("Изменения документа будут потеряны. Закрыть документ?"))
		{d_r.isChanged =null; return;}
	d_r.isChanged =null;
	if(docs ==null || docs.type =='click')
		docs = d_r.allDocTypes; //по умолчанию - закрыть любой из суб-документов системы
	jQuery('.b-modal').dequeue().animate({"opacity": "hide"}, 250, function(){jQuery(this).css({opacity: 0.6})});
	jQuery('.b-modal_body').dequeue().animate({"opacity": "hide"}, 250, function(){jQuery(this).css({opacity: 1})});
	navigateAnchor(docs, -1);
	if(d_r.isNewDoc){
		d_r.isNewDoc = 0;
		location.reload();
	}
}
jQuery(function(){//====================== ready ===========================
emdash = jQuery('.emdash').html(); //для title
//***проверяем, какие в URL якоря и что по ним надо открыть (документ, версию, позицию select)
jQuery('.b-modal_body #closeModal1').live('click', closeSubDoc);
jQuery('.b-modal_body #printDoc1').live('click', function() { //окно для печати документа
	var bb = ($.browser.opera || $.browser.msie) ? 'opener.loadDoc2win()' : 'setTimeout("opener.loadDoc2win();", 1)';
	window.wPrintDoc = window.open(
			'javascript: ' + bb + ';',
			'printDoc',
			'width=820,height=' + jQuery(window).height() + ',menubar=yes,scrollbars=yes,resizable=yes,location=yes'
	);
	//wPrintDoc = window.open('javascript: opener.loadDoc2win();', 'printDoc', 'width=820,menubar=yes,scrollbars=yes,resizable=yes,location=yes');
});
jQuery('.b-modal_body #printDoc2').live('click', function() { //окно для печати документа
	var bb = ($.browser.opera || $.browser.msie) ? 'opener.loadDoc2win2()' : 'setTimeout("opener.loadDoc2win2();", 1)';
	window.wPrintDoc = window.open(
			'javascript: ' + bb + ';',
			'printDoc',
			'width=820,height=' + jQuery(window).height() + ',menubar=yes,scrollbars=yes,resizable=yes,location=yes'
	);
});
jQuery('.b-modal_body .addUpdate textarea, .b-modal_body .addUpdate input, .b-modal_body .edit textarea, .b-modal_body .edit input').live('keypress', function(e){ //взвод проверки изменений (для чеков и ответов)
	if(e.which !=0 || e.keyCode ==46) d_r.isChanged =1;
});
jQuery('.b-modal_body .editableSave, .b-modal_body .editableCancel').live('click', function(){ //отбой проверки изменений
	d_r.isChanged =null;
});
jQuery('.b-modal_body .editableEditRef.change').live('click', function(){ //для кнопки смены организации
	if(d_r.isChanged && !confirm('Изменения документа в открытом поле ввода будут потеряны. Выполнить смену организации?')) return!1;
});
jQuery('#appendixText').elastic(); //autogrow поля ввода - дополнение к карточке проблемы
});


/* --- tasks.js  ----------------------------------------------------------- */

/*
 * 2010.10.15 panasenko
 * Обновление списка всех поручений по фильтру
 */
function updateAllTasksList() {		
	var userId = jQuery('#filterUser').val();
	var status = jQuery('#filterStatus').val();
	var taskTypeId = jQuery('#filterTask').val();
	var taskDate = jQuery('#taskDate').val();
    document.location.href="/task/taskList.seam?userId="+userId+"&status="+status+"&taskDate="+taskDate+"&taskTypeId="+taskTypeId;
}

/*
 * 2010.10.15 panasenko
 * Обновление списка поручений на вкладке "Модерация"
 */
function updateTaskList(problemId) {	
	jQuery.ajax({
		url: "/problem/card.seam",
		data: {id: problemId},
		dataType: 'html',
		cache: false,
		success: function(data){
			var d = jQuery(data).find('#tasksList').html();
			jQuery("#tasksList").html(d);
			jQuery('.actionList').hide();	
		},
		error: function(){Alert("Нет доступа к данным на сервере");}
	});	
}

/*
 * 2010.10.15 panasenko
 * Изменение исполнителя поручения
 * Вызывается из cardTask.xhtml и taskList.xhtml во втором случае без problemId
 */
function changeTaskPerformer(taskId, document, problemId, newPerformerId, taskPerformerName) {	
	var parentDiv = jQuery(document).parents(".changeTaskPerformer");	
	var ctrl = Seam.Component.getInstance("problemTaskCtrl");
	ctrl.changeTaskPerformer(taskId, newPerformerId, function(result){
		jQuery(parentDiv).find(".moderHref").html(taskPerformerName);
		jQuery(parentDiv).find('.actionList').hide();	
		/* в принципе можно и перезагружать запросом...
		if (problemId!=null)
			updateTaskList(problemId);*/	
	}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
	});	
}

/*
 * 2010.10.15 panasenko
 * Изменение статуса поручения
 * Вызывается из cardTask.xhtml и taskList.xhtml во втором случае без problemId
 */
function changeTaskStatus(taskId, document, problemId, newStatus, newStatusName) {	
	var parentDiv = jQuery(document).parents(".changeTaskStatus");		
	var ctrl = Seam.Component.getInstance("problemTaskCtrl");
	ctrl.changeTaskStatus(taskId, newStatus, function(result){		
			jQuery(parentDiv).find(".statusHref").html(newStatusName);
			jQuery(parentDiv).find('.actionList').hide();		 			
		/* в принципе можно и перезагружать запросом...
		if (problemId!=null)
			updateTaskList(problemId);*/		
	}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
	});	
}

/*
 * 2010.10.15 panasenko
 * Добавление нового поручения по проблеме/обращения на карточке проблемы
 * (закладка "модерация")
 */
function addTask(entityId, problemId, taskType) {
	
	var taskText = jQuery('#taskText').val();
	var taskDate = jQuery('#taskDate').val();	
	var taskPerformer = jQuery('#taskPerformer').val();	
	var ctrl = Seam.Component.getInstance("problemTaskCtrl");
	ctrl.addTask(entityId, taskType, taskText, taskDate, taskPerformer, function(result){
		updateTaskList(problemId);			
	}, function(e){
			alert('Произошла ошибка при сохранении данных на сервере. \nПожалуйста, сделайте скриншот этой ошибки и отправьте в службу поддержки сайта. \nСообщение об ошибке: ' + e.getMessage());
	});	
}

function initChangeDistrict(problemId) {  (function($) {

	var $changeDistrict = $('#changeDistrict');
	var $districtLink = $('#districtLink')
	var $districtPicker = $('<div>').appendTo(document.body);
	$districtPicker.dmkDistrictPicker({
		select: function(event, ui) {
			$.ajax({
				url: '/s/problem/changedistrict',
				data: { 'problemId': problemId, 'districtId': ui.id },
				success: function() {
					$districtPicker.dmkDistrictPicker('close');
					$districtLink.attr('href', '/district/' + ui.id);
					$districtLink.text(ui.name);
				}
			});
		}
	});

	$changeDistrict.click(function() {
		$districtPicker.dmkDistrictPicker('open');
	});

})(jQuery);}
