// Params
var chat_id = null;
var chat_page = null;
var chat_url = 'http://www.mixnews.lv/mixer/xml/chat.xml';
var chat_xml_running = false;
var chat_xml_running_url;
var chat_http_request = false;

var chat_loaded = false;
var chat_msg_ids = Array();

// Init from scratch
function chat_init(id, page) {
  if (id == 'chat-mini-static') {
    chat_id = 'chat-mini';
    chat_url = 'http://www.mixnews.lv/mixer/xml/chat-static.xml';
  } else {
    chat_id = id;
    chat_page = page;
  }
	chat_xml_request(chat_url + "?id=" + id + "&page=" + page);
}

function chat_loading_start() {
	chat = $("#" + chat_id);
	h = chat.height() + 20;

	if (h < 100) {
		h = 360;
	}

	loading = $("#loading");
	loading.height(h);

	bg = $("#loading-bg");
	bg.height(h);

	item = $("#loading-item");
	item.height(h);

	$("#loading").show();
}

function chat_loading_stop() {
	$("#loading").hide();
}

// Request xml
function chat_xml_request(url) {
	if (chat_xml_running) {
		return false;
	}

//	chat_loading_start();

  chat_http_request = false;

  if (window.XMLHttpRequest) { // Mozilla
     chat_http_request = new XMLHttpRequest();         
     if (chat_http_request.overrideMimeType) {
        chat_http_request.overrideMimeType('text/xml');
     }
  } else if (window.ActiveXObject) { // IE
    try {
      chat_http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        chat_http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  if (!chat_http_request) {
//     alert('Error!');

     return false;
  }     	

	chat_xml_running = true;
	chat_xml_running_url = url;


	time = Math.round(new Date().getTime() / 1000);

  chat_http_request.onreadystatechange = chat_xml_worker;
  chat_http_request.open('GET', url + '&time=' + time, true);
  chat_http_request.send(null);

  return true;
}

// Worker, parse xml
function chat_xml_worker() {
	if (chat_http_request.readyState == 4) { 
	try {
		if (chat_http_request.status == 200) {
			var xmldoc = chat_http_request.responseXML;
			var root = xmldoc.getElementsByTagName('chat').item(0); 

			var data = Array();
			var counter = 0;
			for (var iNode = 0; iNode < root.childNodes.length; iNode++) {
				var node = root.childNodes.item(iNode);			 

				if (node.tagName) {
					if (node.tagName == 'message') {
						data[counter] = Array();

						for (var siNode = 0; siNode < node.childNodes.length; siNode++) {
							var snode = node.childNodes.item(siNode);
							if (snode.tagName && snode.childNodes.item(0)) {
//								data[counter][snode.tagName] = snode.childNodes.item(0).data;
                if (snode.textContent) {
                  data[counter][snode.tagName] = snode.textContent;
                } else if (snode.text) {
                  data[counter][snode.tagName] = snode.text;
                } else {
                  data[counter][snode.tagName] = snode.childNodes.item(0).data;
                }
							}
						}

						counter++;
					}
				}
			}

			if (chat_loaded) {
				chat_refresh(data);
			} else {
				chat_loaded = true;
				chat_show(data);
			}

//			chat_loading_stop();

		} else {
//			alert('Error!');
		}

		chat_xml_running = false;
		setTimeout('chat_init(chat_id, chat_page)', 5000);
	} catch (e) {
		chat_xml_running = false;
		setTimeout('chat_init(chat_id, chat_page)', 5000);
		chat_xml_running_url = null;
	}
	}
} 

// Update chat
function chat_refresh(data) {
	var max_count;
	if (chat_id == 'chat') {
		max_count = 20;
	} else {
		max_count = 6;
	}

	var new_count = 0;
	for (i = 0, c = data.length; i < c && i < max_count; i++) {
		if (data[i]['id'] > chat_msg_ids[0]) {
			new_count++;
		} else {
			i = max_count;
		}
	}

	var last = null;
	if (new_count > 0) {
		if (new_count > max_count) {
			new_count = max_count;
		}
		for (i = new_count - 1; i >= 0; i--) {
			last = chat_msg_ids.pop();
			$("#chat-msg-" + last).slideUp("slow", function() {
				$("#chat-msg-" + last).remove();
			});
			
			var item = chat_show_item(data[i], i < max_count - 1);
			$("#chat-msg-" + chat_msg_ids[0]).before(item);
			chat_msg_ids.unshift(data[i]['id']);
			$("#chat-msg-" + data[i]['id']).slideDown("slow");
		}
	}
}

// Show chat
function chat_show(data) {
	var src = '';
	if (chat_id == 'chat') {
		src += "<div id=\"chat-go\" class=\"go\">\n";
		src += "<a href=\"/mixer/chat/napisat/\"><img src=\"/mixer/images/chat_compose.png\"></a>\n";
		src += "</div>\n";
	}
	src += '<div id="chat-messages" class="messages">';

	var max_count;
	if (chat_id == 'chat') {
		max_count = 20;
	} else if (chat_id == 'chat-front') {
		max_count = 10;
	} else {
		max_count = 6;
	}

	for (i = 0, c = data.length; i < c && i < max_count; i++) {
		chat_msg_ids.push(data[i]['id']);
		src += chat_show_item(data[i], i < max_count - 1);
	}

	src += "</div>\n";

	if (chat_id == 'chat') {
		src += "<div id=\"chat-go\" class=\"go\">\n";
		src += "<a href=\"/mixer/chat/napisat/\"><img src=\"/mixer/images/chat_compose.png\"></a>\n";
		src += "</div>\n";
	} else {
		src += "<div class=\"button-next\">";
		src += "<a href=\"/mixer/chat/\">Перейти в чат</a>";
		src += "</div>";
/*
		src += "<div id=\"chat-go\" class=\"go\">\n";
		src += "<a href=\"/mixer/chat/\">Перейти в чат</a>\n";
		src += "</div>\n";
*/
	}

	$("#" + chat_id).html(src);
	$("#chat-messages").slideDown("slow");
	$("#chat-go").slideDown("slow");

	$("a[rel='gallery']").colorbox({current:'Фото {current} из {total}', next:'Следующая', previous:'Предыдущая', close:'Закрыть', slideshow:false, slideshowAuto:false, slideshowSpeed:2000, maxWidth:'90%', maxHeight:'90%', opacity:0.7});
}

function chat_show_item(data, show_spacer) {
	var item = '';

	item += "<div id=\"chat-msg-" + data['id'] + "\">\n";

	var avatar_class = '';
	if (data['member-id'] < 1 || !data['member-avatar']) {
		avatar_class = ' no-height';
	}
	var type_class = '';
	if (data['type'] == 'private' || data['type'] == 'private-answer') {
		type_class = ' body-private';
	}
	item += "<div class=\"item" + avatar_class + "\">\n";
	item += "<div class=\"body" + avatar_class + type_class + "\">\n";

	item += chat_show_item_content(data, 1);
	item += "</div>\n";

	if (data['init-id'] > 0) {
		item += chat_show_item_content(data, 2);
	}

	item += "</div>\n";

	if (show_spacer) {
		item += "<div class=\"spacer\"><!-- --></div>";
	}
	item += "</div>\n";

	return item;
}

function chat_show_item_content(data, type) {
	var prefix = null;
	if (chat_id == 'chat' && type == 2) {
		prefix = 'init-';
	} else {
		prefix = '';
	}

	var avatar_type = null;
	if (type == 2) {
		avatar_type = "40";
	} else {
		if (chat_id == 'chat-mini' || chat_id == 'chat-front') {
			avatar_type = "40";
		} else {
			avatar_type = "60";
		}
	}

	var item = '';
	if (type == 2) {
		item += "<span class=\"init-label\">Ответ на:</span>\n";
		item += "<div class=\"body-init\">\n";
	}

//	if (chat_id == 'chat-front') {
//		item += "<div class=\"body-fixed\">\n";
//	}

	if (data[prefix + 'member-id'] > 0 && type != 2) {
		if (data[prefix + 'member-avatar']) {
			item += "<span class=\"avatar" + (avatar_type) + "\"><a href=\"" + data[prefix + 'member-url'] + "\"><img src=\"" + data[prefix + 'member-avatar']+ "\"></a></span>";
		}
		if (chat_id == 'chat-mini' || chat_id == 'chat-front') {
			item += "<span class=\"time\">" + data[prefix + 'time'] + "</span>\n";
		}
		item += "<a href=\"" + data[prefix + 'member-url'] + "\" class=\"member\">" + data[prefix + 'member-nick'] + "</a>";
	} else {
		if (chat_id == 'chat-mini' || chat_id == 'chat-front') {
			item += "<span class=\"time\">" + data[prefix + 'time'] + "</span>\n";
		}
		item += "<strong class=\"member\">" + data[prefix + 'member-nick'] + "</strong>";
	}
	item += " " + data[prefix + 'text'];
	if (chat_id == 'chat') {
		if (data[prefix + 'picture']) {
			if (type == 2) {
				item += "<p><a href=\"" + data[prefix + 'picture'] + "\" rel=\"gallery\">А также фотография.</a>";
			} else {
				item += "<p><a href=\"" + data[prefix + 'picture'] + "\" rel=\"gallery\"><img src=\"" + data[prefix + 'picture-thumb'] + "\" alt=\"\"></a>";
			}
		}
	}

//	if (chat_id == 'chat-front') {
//		item += "</div>\n";
//	}

	if (chat_id != 'chat-mini' && chat_id != 'chat-front') {
		if (type == 2) {
			item += "<div class=\"controls\">\n";
			item += "<span class=\"time\">" + data[prefix + 'time'] + "</span>\n";
			item += "</div>\n";
		} else {
			item += "<div class=\"controls\">\n";
			item += "<span class=\"time\">" + data[prefix + 'time'] + "</span>\n";
			item += "<span class=\"buttons\">\n";
			item += "<a href=\"/mixer/chat/otvetit/" + data[prefix + 'id'] + "/\" class=\"reply\">ответить</a>";
			if (data[prefix + 'member-id']) {
				item += "<a href=\"/mixer/chat/nasheptat/" + data[prefix + 'member-id'] + "/\" class=\"private\">нашептать</a>";
			}
			item += "</span>\n";
			item += "</div>\n";
		}
	}
	if (type == 2) {
		item += "</div>\n";
	}

	return item;
}

