var chat_showing = false;
var chat_built = false;
var poll_interval;

bln_start = "<bl_name>";
bln_end = "</bl_name>";

function request_chat(caller_ob){
	if(!chat_built){
		init_chat(caller_ob);
		chat_built = true;
		chat_showing = true;
		return;
		}
	var cw = document.getElementById("chat_window");
	if(chat_showing)cw.style.display = "none";
		else cw.style.display = "block";
	chat_showing = !chat_showing;
	
	if(chat_showing)position_chat(caller_ob);
 	}
	
function position_chat(dom_object){
	var button_x = xPageX(dom_object);
	var button_y = xPageY(dom_object);
	
	var cw = document.getElementById("chat_window");
	var left_px = (button_x + (xWidth(cw)/2));
	var max_left = ((xClientWidth() - xWidth(cw)) - 5) + xScrollLeft();
	if(left_px > max_left)left_px = max_left;
	cw.style.left = left_px + "px";
	var top_px = (button_y - (xHeight(cw) + 30));
	if(top_px < 0)top_px = 0;
	cw.style.top = top_px + "px";
	}
	
function init_chat(dom_object){
	if(dom_object){
		var button_x = xPageX(dom_object);
		var button_y = xPageY(dom_object);
		}else {
			//alert("auto-loading");
			var button_x = -130;
			var button_y = 450;
			}
	
	var doc_body = xGetElementsByTagName("body");
	doc_body = doc_body[0];
	
	var cw = document.createElement("div");
	//alert(doc_body);
	cw.className = "chat_window";
	cw.id = "chat_window";
	doc_body.appendChild(cw);
	 cw.style.display = "block";
	
	var left_px = (button_x + (xWidth(cw)/2));
	var max_left = ((xClientWidth() - xWidth(cw)) - 5) + xScrollLeft();
	if(left_px > max_left)left_px = max_left;
	
	cw.style.left = left_px + "px";
	
	var top_px = (button_y - (xHeight(cw) + 30));
	if(top_px < 0)top_px = 10;
	cw.style.top = top_px + "px";
	get_chat_content();
	}
	
function check_keyboard_input(e){
	var xe = new xEvent(e);
  	var key_code = xe.keyCode;
	if(key_code == 13){
		xPreventDefault(e);
		send_message();
		}
	}
	
function send_message(){
	var cta = document.getElementById("chat_ta");
	var msg = cta.value;
	cta.value = "";
	aj = new ajaxObject("/chat/include/send_message.php");
	aj.callback = function(output){
		display_messages(output);
		}
	aj.update("msg=" + escape(msg));
	}
	
function get_chat_content(){
	myRequest = new ajaxObject('/chat/include/chat_window.php');
	myRequest.callback = function(responseText){
		var cw = document.getElementById("chat_window");
		cw.innerHTML = responseText;
		var ct = document.getElementById("chat_title");
		xEnableDrag(ct,drag_start,drag);
		init_polling();
		}
	myRequest.update();
	}
	
function init_polling(){
	poll_interval = setInterval("poll_server()",1000);
	var cta = document.getElementById("chat_ta");
	xAddEventListener(cta,"keypress",check_keyboard_input);
	}
	
function poll_server(){
	var aj = new ajaxObject("/chat/include/refresh_chat.php");
	aj.callback = function(output){
		display_messages(output);
		}
	aj.update();
	}
	
var prev_status = "";

function display_messages(output){
	
	var responses = output.split("###block###");
	var em_len = responses.length;

	for(var x=0; x < em_len; x++){
		var response_block = responses[x];
		var block_name_start = response_block.indexOf("<bl_name>");
		var block_name_end = response_block.indexOf(bln_end);
		var block_name = response_block.substr(block_name_start + bln_start.length,block_name_end - bln_start.length);
		var block_content = response_block.substr(block_name_end + bln_end.length);

		switch(block_name){
			case "status_message":
				if(block_content == "Chat Ended")disable_chat();
				if(block_content.indexOf("aiting for a") != -1){
				//alert(prev_status.indexOf("lease wait"));
					if(prev_status.indexOf("lease wait") == -1){
						set_status(block_content);
						}
					}else set_status(block_content);	
				break;
			
			case "message_content":
				set_message_content(block_content);
				break;
			}
		}
	}

function set_status(data){
   prev_status = data;
   var cs = document.getElementById("chat_status");
   cs.innerHTML = data;
   }

function set_message_content(data){
   if(!data.length)return;//don't blank the chat screen just cos the admin has closed their end.
   var cm = document.getElementById("chat_messages");
   var d_comp = data.substr(-50);
   var cm_comp = cm.innerHTML.substr(-50);
   if(d_comp == cm_comp)return;//no change!
   cm.innerHTML = data;
   cm.scrollTop = cm.scrollHeight;
   }
	
function drag(ele, mouseX, mouseY, ev){
	var x = xPageX(ele) + mouseX; // absolute coords of target
	var y = xPageY(ele) + mouseY;
	
	min_x = xScrollLeft();
	min_y = xScrollTop();
	
	if(x <= min_x)x = min_x;
	if(y <= min_y)y = min_y;
	
	cw = xParent(ele);
	cw.style.left = (x) + "px";
	cw.style.top = (y) + "px";
	}
	
function drag_start(){
	//do nothing
	}
	
function close_chat(){
	clearInterval(poll_interval);
	var aj = new ajaxObject("/chat/include/close_chat.php");
	aj.callback = function(output){
		//if(output == "OK")remove_window();
		if(true)remove_window();
			else {
				alert("Failed to exit chat");
				setInterval("poll_server()",1000);
				}
		}
	aj.update();
	}
	
function remove_window(){
	var cw = document.getElementById("chat_window");
	var doc_body = xGetElementsByTagName("body");
	doc_body = doc_body[0];
	doc_body.removeChild(cw);
	chat_built = false;
	chat_showing = false;
	}
	
function disable_chat(){
	var cta = document.getElementById("chat_ta");
	cta.disabled = true;
	cta.style.backgroundColor = "#bebebe";
	}
