var chat;
var users;
var ping;
var bid;
var start;
var currID;
var speed=5;
var movedowntimeout
var moveuptimeout

function movedown(){
	crossobj= $('aulist');
	contentheight = crossobj.offsetHeight;
	if (crossobj.scrollHeight>=(contentheight+crossobj.scrollTop)) { crossobj.scrollTop=crossobj.scrollTop+speed; }
		movedowntimeout = setTimeout(function() { movedown(); },20);
}

function moveup(){
	crossobj = $('aulist');
	contentheight = crossobj.offsetHeight;
	if (crossobj.scrollTop>0) { crossobj.scrollTop=crossobj.scrollTop-speed; }
		moveuptimeout = setTimeout(function() { moveup(); },20);
}

function init() {
	chat = new PeriodicalExecuter(function(pe) {
		new Ajax.Request('/components/chat.php?action=getmsgs&id='+currID+'&start='+start,{onSuccess:function(transport){handleGetMsg(transport);}});
		}, 1);
	ping = new PeriodicalExecuter(function(pe) {
		new Ajax.Request('/components/chat.php?action=ping&id='+currID+'&start='+start);
		}, 20);
	if(start == "b") {
		new Ajax.Request('/components/chat.php?action=getau',{onSuccess:function(transport){handleGetAu(transport);}});
		users = new PeriodicalExecuter(function(pe) {
		new Ajax.Request('/components/chat.php?action=getau',{onSuccess:function(transport){handleGetAu(transport);}});
		}, 5);
	}
}

function getXmlNodeValue(xmlNode){
		if(xmlNode.text != null) { return xmlNode.text;}
		if(xmlNode.textContent != null) { return xmlNode.textContent;}
}

function handleInit(object) {
	var temp = object.responseXML.documentElement.getElementsByTagName("initialized");
	if(getXmlNodeValue(temp[0]) == "false") { alert("Sorry, the business you are trying to chat with is currently offline"); }
	else if(getXmlNodeValue(temp[0]) == "true") {
		$('chatContainer').removeClassName('hide');
		chat = new PeriodicalExecuter(function(pe) {
		new Ajax.Request('/components/chat.php?action=getmsgs&id='+currID+'&start='+start,{onSuccess:function(transport){handleGetMsg(transport);}});
		}, 1);
	} else {
		alert("There was an error processing your request. Please try again later or notify an administrator");
	}		
}

function handleGetAu(object) {
	if(Object.isElement($('activeusers'))) {
		var temp = {};
		temp = object.responseXML.documentElement.getElementsByTagName("user");
		var cids = new Array();
		var ulTag = $('au');
		for(i = 0; i< temp.length; i++) {
			s = temp[i];
			var status = getXmlNodeValue(s.firstChild);
			var name = getXmlNodeValue(s.lastChild);
			var id = s.lastChild.getAttribute('id');
			cids[i] = id;
			if(!Object.isElement($('u' + id))) {
				liTag = document.createElement("li");
				liTag.setAttribute('id','u' + id);
				liTag.setAttribute('rel', id);
				liTag.setAttribute('onclick',function (e) {
					switchUser(this.rel,name);
				});
				liTag.innerHTML = name;
				ulTag.appendChild(liTag);
				liTag.observe('click',function (e) {
					switchUser(e.target.getAttribute('rel'),name);
				});
			} else {
				liTag = $('u' + id);
			}
		}
		var uids = $$('ul.activeusers li');
		for(i = 0; i< uids.length; i++) {
			found = false;
			tempid = uids[i].getAttribute('rel');
			for(j = 0; j<cids.length; j++) {
				if(cids[j] == tempid) { found = true; }
			}
			if(!found) { uids[i].remove(); }
		}
		tempobj = $('aulist');
		if(tempobj.scrollHeight < tempobj.offsetHeight+tempobj.scrollTop) { tempobj.scrollTop = "0"; }
	}
}

function initChat(id) {
		new Ajax.Request('/components/chat.php?action=initchat&id='+id,{onSuccess:function(transport){handleInit(transport)}});
}

function switchUser(tag,name) {
	uid = tag;
	if(!Object.isElement($(uid))) {
		divTag = document.createElement("div");
		divTag.setAttribute('id',uid);
		$('chat').appendChild(divTag);
	}
	chats = $A($$('#chat div'));
	chats.each(function(s) {
		if(s.getAttribute('rel') == uid) {
			s.removeClassName('hide');
		} else {
			s.addClassName('hide');
		}
	});
	$(uid).removeClassName('hide');
	if($('u'+uid).hasClassName('newmessage')) {
		$('u'+uid).removeClassName('newmessage');
	}
	if($('currid').value != '') $('u'+$('currid').value).removeClassName('currentchat');
	$('u'+uid).addClassName('currentchat');
	$('currid').value = uid;
}

function handleGetMsg(object) {
	var temp = {};
	temp = object.responseXML.documentElement.getElementsByTagName("message");
	for(i = 0; i < temp.length;i++) {
		s = temp[i];
		var uid = getXmlNodeValue(s.firstChild);
		var text = getXmlNodeValue(s.lastChild);
		if(!Object.isElement($(uid))) {
			divTag = document.createElement("div");
			divTag.setAttribute('id',uid);
			$('chat').appendChild(divTag);
			if(start == 'b') {
				$(uid).addClassName('hide');
			}
		}
		if(Object.isElement($('u'+uid))) {
			if(!$('u'+uid).hasClassName('newmessage')) {
				$('u'+uid).addClassName('newmessage');
			}
		}
		$(uid).innerHTML = $(uid).innerHTML + text;
		if($(uid).scrollHeight > $(uid).style.height) { $(uid).scrollTop = $(uid).scrollHeight - $(uid).style.height; }
	};
}

function sendMsg(el,id) {
	if(el.value == '') { alert("Please enter a message!"); return false; }
	if(id == '') { alert("Please select a user to message!"); return false; }
	while(chat.currentlyExecuting){}
	var myhash = new Hash();
	myhash.set('mesg',el.value);
	query = myhash.toQueryString();
	el.value="";
	new Ajax.Request('/components/chat.php?action=sndmsg&id='+id+'&start='+start,{parameters:query,onSuccess:function(transport){handleGetMsg(transport);}});
	return false;
}

function logout(event) {
	new Ajax.Request('/components/chat.php?action=logout&id='+bid);
}

Event.observe(window, 'unload', logout);
Event.observe(window, 'beforeunload', logout);

document.observe("dom:loaded", function() {
  ##ajaxUp();
});

function ajaxUp() {
	if(arguments.length == 1) {
		cssRule = arguments[0] + ' a';
	} else {
		cssRule = 'a';
	}
	$$(cssRule).each(function(e) {
		if(e.target != '_blank' && e.onclick == undefined) {
			e.link = e.href;
			e.href = "#";
			e.onclick = "return false;";
			e.observe('click', function(event) {
				$('content').innerHTML = '<div style="text-align:center"><img src="/greybox/indicator.gif" alt="Loading..." /></div>';
				var element = Event.element(event);
				loadLinkAsAjax(element.link);
				return false;
			});
		}
	});
}

function loadLinkAsAjax(link) {
	new Ajax.Updater('content', link, { parameters: { ajax: 'true'} } );
	ajaxUp('#content');
}