/**
 * Отображение окон приложения.
 * 28.03.2010
 * @author Баштанник А.С. bashtannik@gmail.com
 * @version 0.5
 */

/* Функция jQuery для загрузки файла из репозитория. Синтаксис аналогичен $.get */
jQuery.repositoryGetHTML = function (param) {
		$.getJSON(messenger.cfg.base_url+"export.php?file="+param.file+"&callback=?",function(data) {
			param.success(data);
		});
};

/* jQuery plugin для скролла вниз. */
$.fn.scrollDown = function() {
        return this.each(function() {
			this.scrollTop=this.scrollHeight;
        });
};


/**  
 * Оконный менеджер.
 */


var wmanager= new function() {
	
	/**
	 * Создание диалогового окна.
	 * @param id Идентификатор пользователя.
	 * @param onshow Функция, вызываемая после показа окна.
	 * @return Идентификатор окна.
	 */
	this.createDialogWindow = function(id,onshow)	{

		//$("body").find(".panel").show();
		messenger.include.css(messenger.cfg.source_url+"css/dialog_window.css");
		
		messenger.send(id, { "type":"event", "event_type" : "window_opened", "operator" : id.substr(3) });

		if($("#dw_"+id).length != 0) { // Если диалоговое окно с этим оператором существует

			$("#dw_"+id).show();
			if(typeof(onshow)!="undefined") onshow();
		}
		
		else // Если диалоговое окно не существует
			$.repositoryGetHTML({
				"file" : "html/visitor/dialog_window.html",
				"success": function(data) {
				 
					$("#messenger-container").append(data).find(".dialog-window:last").attr("id","dw_"+id).draggable({ containment: Array( 16, 0, $("body").width()-$("#dw_"+id).width(), $("body").height()), handle: ".dialog-window-title" }).resizable();
					
					/* Обработчик нажатия на кнопку Отправить */
					
					$("#dw_"+id).find(".dialog-window-button-send").click(function() { 
					
							if($("#dw_"+id).find(".dialog-window-text-message").val()=="") return;
									
							var input_text=$("#dw_"+id).find(".dialog-window-text-message").val();
							var reach_text = "<span class=\"GUI-msg-me\">&#x42F;</span> : "+ input_text;
							
							var log = $("#dw_"+id).find(".dialog-window-text-log").html();
							var d = new Date();
							var time = d.toLocaleTimeString();
							
							$("#dw_"+id).find(".dialog-window-text-log").html(log+"("+time+") "+reach_text+"<br>");
							
							var message = { 
								"type" : "text",
								"author" : messenger.cfg.client.name, 
								"text" : input_text 
							};

							messenger.send(id,message);

							$("#dw_"+id).find(".dialog-window-text-message").val("").focus();
							$("#dw_"+id).find(".dialog-window-text-log").scrollDown();	
							
							
					});
					
					/* Обработчик события закрытия окна */
					$("#dw_"+id).find(".dialog-window-button-close").click(function() {
						messenger.send(id, { "type":"event", "event_type" : "window_closed" });
					});
					
					if($(".panel").offset().left+$(".panel").width()+10+$("#dw_"+id).width() >  $("body").width()) // Если справа от панели  нет места для окна
						$("#dw_"+id).offset({ "left" : $(".panel").offset().left-$("#dw_"+id).width()-10, "top" : $(".panel").offset().top}); // Сдвиг окна слева
					else
						$("#dw_"+id).offset({ "left" : $(".panel").offset().left+$(".panel").width()+10, "top" : $(".panel").offset().top}); // Сдвиг окна справа
					
					var username=id.substr(3);
					
					$.getJSON(messenger.cfg.base_url+"engine/controller.php?website="+messenger.cfg.website+"&action=get_operator_details&username="+username+"&callback=?", 
						function(data) {
							$("#dw_"+id).find(".dialog-window-title").html(data.name+" (<i>"+data.post+"</i>)");
							$("#dw_"+id).find(".op-name").html(data.name);
							$("#dw_"+id).find(".op-post").html(data.post);
							$("#dw_"+id).find(".op-photo").attr("src",messenger.cfg.source_url+"photos/"+data.photo);
						});
											
					if(typeof(onshow)!="undefined")
						onshow();
				}
			});
	}
	
	/**
	 * Создание панели со списком пользователей.
	 */
	this.createPanel = function(visible)	{
		if($(".panel").length > 0) return;
		messenger.include.css(messenger.cfg.source_url+"css/visitor_panel.css");
		$.repositoryGetHTML({
			"file" : "html/visitor/panel.html",
			"success" : function(data) {
				$("#messenger-container").append(data);
				if(!visible) 
					$(".panel","body").hide();
				$(".panel","body").draggable({ containment: "document" });

			}});
	}
	
	/**
	 * Создание блока пользователя в панели пользователей.
	 * @param id Идентификатор пользователя.
	 * @return Идентификатор блока или FALSE в случае ошибки.
	 */
	this.panelAddOperator = function(id) {
		
		var username=id.substr(3);
		var name;
		
		/* Получение информации об операторе */
		$.getJSON(messenger.cfg.base_url+"engine/controller.php?website="+messenger.cfg.website+"&action=get_operator_details&username="+username+"&callback=?", function(data) {
			
			name=data.name+" (<i>"+data.post+"</i>)";
			
			$.repositoryGetHTML({
			"file" : "html/visitor/panel_operator_entry.html", 
			"success" : function(data) { 
				$(".panel-operators").append(data);
				$(".panel-operators > .panel-operator-entry:last").attr("id","oe_"+id);
				$("#oe_"+id).find(".panel-operator-name").html(name).click(function() {
							wmanager.createDialogWindow(id);
				});
			}});
		});
	}
	
	/**
	 * Удаление блока пользователя из панели пользователя и его окна.
	 * @id Идентификатор пользователя. 
	 */
	this.panelRemoveOperator = function(id) {
		$("#oe_"+id).remove(); // Удалить блок
		$("#dw_"+id).remove(); // Удалить окно
	}


}

