//отправка обращения на сервер
function online_process_form(){
	$user_list = document.getElementById('online_users_list').innerHTML;
	if($user_list == "" || $user_list == "Загрузка..."){
		alert("Страница не загружена");
		return false;
	}

	form = document.getElementById('bug_submit_form');
	
	if(form.elements['handler'].value == "" || form.elements['summary'].value == "" || form.elements['type'].value == "0" || form.elements['periodic'].value == "0"){
		alert("Не заполнены поля формы");
		return false;
	}

	x_handle_sajax('message', form.elements['handler'].value, form.elements['summary'].value, form.elements['type'].value, form.elements['periodic'].value, online_process_form_cb);	
	form.elements['summary'].value = "";
	form.elements['type'].value = "0";
	form.elements['periodic'].value = "0";
	return false;
}

//обработка ответа сервера о добавлении обращения
function online_process_form_cb(response){
	alert("Сообщение добавлено");
	get_messages_list(0);
}

//запрос списка пользователей
// type - вспомогательный пар-р для других онлайнов (например админского)
function get_users_list(){
	if(document.getElementById('online_users_list').innerHTML == ""){
		document.getElementById('online_users_list').innerHTML = "Загрузка...";
		
		select = document.getElementById('bug_submit_form').elements['handler'];

		var oOption = document.createElement("OPTION");
		oOption.text = "Загрузка...";
		oOption.value = "-1";
		select.options.add(oOption);

	}
	x_handle_sajax('users', online_type, get_users_list_cb);	
	
	setTimeout("get_users_list", online_refresh_time * 1000);
}

function get_type_list(){
	x_handle_sajax('types', get_type_list_ok);
}

function get_type_list_ok(data){
	select = document.getElementById('type');
	for(var i in data){
		var oOption = document.createElement("OPTION");
		oOption.text = data[i][1];
		oOption.value = data[i][0];
		oOption.title = data[i][2];
		select.options.add(oOption);
	}	
	//SelectTools.clear(select);
	//SelectTools.fill(select, data, null);
}



//обработка ответа сервера со списком пользователей
function get_users_list_cb(list){
	$user_list = "";

	select = document.getElementById('bug_submit_form').elements['handler'];

	while(select.options.length)
		select.remove(0);

	var oOption = document.createElement("OPTION");
	oOption.text = "Всем";
	oOption.value = "0";
	select.options.add(oOption);
	
	for(handler in list['handlers']){
		if(0 == handler){
			$user_list += "<b>Исполнители онлайн</b><br />";
		}
		$user_list += list['handlers'][handler]['realname_decorated'] + "<br />";

		var oOption = document.createElement("OPTION");
		oOption.text = list['handlers'][handler]['realname'];
		oOption.value = list['handlers'][handler]['id'];
		select.options.add(oOption);
	}
	
	for(reporter in list['reporters']){
		if(0 == reporter){
			$user_list += "<b>Пользователи онлайн</b><br />";
		}
		$user_list += list['reporters'][reporter]['realname_decorated'] + "<br />";
	}
	
	for(handler in list['handlers_not_online']){
		var oOption = document.createElement("OPTION");
		oOption.text = list['handlers_not_online'][handler]['realname'];
		oOption.value = list['handlers_not_online'][handler]['id'];
		oOption.style.color = 'grey';
		select.options.add(oOption);
	}	
	
	document.getElementById('online_users_list').innerHTML = $user_list;
}

//запрос списка сообщений
function get_messages_list(repeat, message_id){
	if(document.getElementById('online_message_board').innerHTML == "&nbsp;"){
		document.getElementById('online_message_board').innerHTML = "Загрузка...";

	}
	sajax_debug_mode = 0;
	// фильтрация сообщений - в action через _ передаем фильтр
	filter_type = document.getElementById('message_filter').value;
	if(!filter_type){
		filter_type = "really";
	}
    if (message_id !== undefined) {
        filter_type = message_id;
    }
    
	x_handle_sajax('bug_list_' + filter_type, control_sum, get_messages_list_cb);	
	
	if(repeat){
		setTimeout("get_messages_list(1)", online_refresh_time * 1000);
	}
}


//обработка ответа сервера со списокм сообщений
function get_messages_list_cb(response){
	
	//сравниваем контрольные суммы
	if (control_sum == response.crc )
		return ;
	
	control_sum = response.crc ;
	
	messages_list_object = response.list;
	sajax_debug_mode = 0;
	
	curr_last_updated = last_updated;
	new_message = false;
	
	message_board_text = "";
	
	for(message in response.list){
		if(response.list[message]['description'] == "")
			response.list[message]['description'] = "--";
		message_board_text += "<table cellspacing='0' cellpadding='0' border='0' style='width: 100%; word-wrap: break-word;'>";
		message_board_text += '<tr bgcolor="' + response.list[message]['status_color'] + '"><td style="width: 55px; text-align:center;"><b><a href="#' + response.list[message]['id'] + '" name="' + response.list[message]['id'] + '">' + response.list[message]['id'] + '</a></b></td>';
        message_board_text += '<td class="content_message"><div style="font-size: 13px;">';
		message_board_text += '<b>' + response.list[message]['time_submitted'] + ' ' + response.list[message]['reporter'] + '</b> ' + response.list[message]['summary'] + '</div>';
		message_board_text += '<div style="font-size: 11px;"><b>Адресовано:</b> ' + response.list[message]['recipient'] + '  <b>Принято:</b> ' + response.list[message]['handler'] + '  </div>';
		message_board_text += '<div style="font-size: 11px;"><b>Статус:</b> ' + response.list[message]['status_name'] + ' (' + response.list[message]['time_updated'] + ')</div>';
		message_board_text += '<div style="font-size: 11px;"><b>Тип:</b> <span style="font-size: 11px;" title="' + response.list[message]['type_title'] + '">' + response.list[message]['type_name'] + '</span>  <b>Повторяемость:</b> ' + response.list[message]['periodic_text'] + '</div>';
		message_board_text += '<div style="font-size: 11px;"><b>Комментарий:</b> ' + response.list[message]['description'] + '</div>';
		colspan = 3;
		//вывод инпутов для исполнителей
		if(user_is_handler && response.list[message]['status'] < 40){
			message_board_text +="</td><td style='width: 150px; text-align: center;'><input type='button' value='Обработать' onClick='show_bug_process(" + message + ");'>";  //response.list[message]['id']
			colspan = 3;
		}

		message_board_text += '</td></tr><tr><td colspan="' + colspan + '"><hr></td></tr></table>';

		if(response.list[message]['date_created_u'] > last_updated && response.list[message]['is_handler']){
			last_updated = response.list[message]['date_created_u'];
		}
		
		if(curr_last_updated != 0 && last_updated > curr_last_updated && response.list[message]['is_handler']){
			curr_last_updated = last_updated;
			display_new_message(response.list[message]);
		}
		
		if(response.list[message]['resolved']){
			display_message_resolved(response.list[message]);
		}
		
	}
	message_board_text += "</tr></table>";
    var board_width = $('#online_message_board').width();
	document.getElementById('online_message_board').innerHTML = message_board_text;
    $('.content_message div').css('width', board_width - 150 - 55);

}

//показываем сообщение о новом обращении
function display_new_message(message){
	// Instantiate a Panel from script
	panel = new YAHOO.widget.Panel("new_message_panel" + message['id'], { width:"360px", visible:false, draggable:true, close:true, constraintoviewport:true } );
	panel.setHeader(message['time_submitted'] + " Новое сообщение");
	panel.setBody("<div style='width: 340px; word-wrap: break-word;'><b>Автор:</b> " + message['reporter'] + "<br /><b>Кому:</b> " + message['recipient'] + "<br /><b>Сообщение: </b>" + message['summary'] + "</div>");
	panel.render("container1");
	panel.show();
	panel.center();
	window.focus();
	alert("Новое сообщение!!");
}

//показываем сообщение о решенном обращении
function display_message_resolved(message){
	// Instantiate a Panel from script
	panel = new YAHOO.widget.Panel("message_resolved_panel" + message['id'], { width:"360px", visible:false, draggable:true, close:true, constraintoviewport:true} );
	panel.setHeader(message['time_submitted'] + " Ваше обращение решено");
	panel.setBody("<div style='width: 340px; word-wrap: break-word;'><b>Обращение:</b> " + message['summary'] + "<br /><b>Решил:</b> " + message['handler'] + "<br /><b>Статус:</b> " + message['status_name'] + "<br /><b>Комментарий: </b>" + message['description'] + "</div>");
	panel.render("container1");
	panel.show();
	panel.canter();
	window.focus();
	alert("Обращение решено!");
}

//показываем диалог обработки сообщения
function show_bug_process(message_id){

	if(!bug_process_panels[message_id]){	
		message = messages_list_object[message_id];
		panel = new YAHOO.widget.Panel("process_message_panel" + message['id'], { width:"420px", visible:false, draggable:true, close:true, constraintoviewport:true} );
		panel.setHeader("Обработать обращение");
		
		select = "<select id='message_status_select" + message['id'] + "' onchange='messge_toggle_bug_id_input(this, "+message['id']+")'>\n";
		for(i in message_statuses){
			selected = "";
			if(parseInt(i) ==  parseInt(message['status'])){
				selected = " selected";
			}
			select += "<option value='"+i+"'"+selected+">" + message_statuses[i] + "</option>\n";
		}
		select += "</select>\n";
		
		bug_id_input_visibility = 'hidden';
		if(message['status'] == '20' || message['status'] == '50'){
			bug_id_input_visibility = 'visible';
		}
		
		panel.setBody("<b>Автор:</b> " + message['reporter'] + "<br /><b>Сообщение: </b>" + message['summary'] + 
					  "<br /><b>Статус:</b> " + select +"<input type='text' size='2' value='"+message['online_type']+"' style='visibility:hidden;' id='message_type" + message['id'] + "'><br /><input type='text' size='2' value='"+message['bug_id']+"' style='visibility:" + bug_id_input_visibility + ";' id='message_bug_id" + message['id'] + "'><br /><textarea style='width:95%' rows='5' id='message_process_text"+ message['id'] +"'></textarea>" + 
					  "<input type='button' value='Обработать' onClick='message_process(" + message['id'] + ");'>");
		panel.render("container1");
		panel.show();
		panel.center();
		bug_process_panels[message['id']] = panel;
		bug_process_panels[message['id']].cfg.subscribeToConfigEvent("visible", function (p_sType, p_aArgs) {
			var oValue = p_aArgs[0];
			if(!oValue){
				document.getElementById("message_bug_id" + message['id']).style.visibility = 'hidden';
				document.getElementById("message_status_select" + message['id']).value = "10";
				document.getElementById("message_process_text" + message['id']).value = "";
			}
			});
			
	} 
	else {
		bug_process_panels[message_id].show();
	}
}

//меняем видимость инпута номера обращения в зависимости от статуса
function messge_toggle_bug_id_input(select, message_id){
	switch(select.value){
		case "20":
		case "50":
			document.getElementById("message_bug_id" + message_id).style.visibility = 'visible';
			break;
		default: 
			document.getElementById("message_bug_id" + message_id).style.visibility = 'hidden';
			break;
	}
}


//обрабатываем сообщение
function message_process(message_id){
	
	description = document.getElementById("message_process_text" + message_id).value;
	status = document.getElementById("message_status_select" + message_id).value;
	bug_id = document.getElementById("message_bug_id" + message_id).value;
	type = document.getElementById("message_type" + message_id).value;
	bug_process_panels[message_id].hide();

	x_handle_sajax('change_status', status, description, message_id, bug_id, type, message_process_cb);
}

function message_process_cb(response){
	if(response == 'ok'){
		get_messages_list(0);
	} else {
		//alert(response);
	}
}

//оповещаем о своем присутствии 
function online_pulse(){
	//непосредственно в онлайне эта штука не нужна
	if(!i_m_online){
		x_handle_sajax('pulse', online_pulse_cb);
		setTimeout('online_pulse()', 1000 * online_refresh_time);
	}
}


function online_pulse_cb(response){
	if(response['list']){
		for(i in response['list']){
			if(response['list'][i]['user_id'] == response['list'][i]['reporter_id']){
				if(confirm('Статус вашего обращения "' + response['list'][i]['summary_d'] + '" изменен. Посмотреть?')){
					window.open('/ls_online.php', 'online');
				}
			} else if (response['list'][i]['is_handler'] && response['list'][i]['status'] == 10){
				if(confirm('Создано обращение "' + response['list'][i]['summary_d'] + '". Адресовано: ' + response['list'][i]['recipient_d'] + '. Посмотреть?')){
					window.open('/ls_online.php', 'online');
				}
			}
		}
	}
}

