var smdiv = new Array();
var server = 'shoutbox.php';
var posting = false;
var total = 0;

function input_disable(type) {
	disableThis = document.getElementsByTagName("input");
	for (i=0; i< disableThis.length; i++) {
		disableThis[i].disabled = type;
	}
}

function get_messages() {
	var args = 'action=shouts&last_msg='+LastMsg;
	var do_ajax = new Ajax.Request(server, { method: 'get', parameters: args, onComplete: handle_response });
	Element.show('shout_reloading');
}

function get_members() {
	var args = 'action=members';
	var do_ajax = new Ajax.Request(server, { method: 'get', parameters: args, onComplete: handle_members });
	setTimeout("get_members()",5000);
}

function send_message() {
	var req_color = $('req_color').value;
	var req_message = $('req_message').value;
	var args = 'action=shout&last_msg=' + LastMsg + '&req_message=' + encodeURIComponent(req_message) + '&req_color=' + encodeURIComponent(req_color) ;
	var do_ajax = new Ajax.Request(server, { method: 'post', parameters: args, onComplete: handle_response });
	input_disable(true);
	Element.show('shout_reloading');
	posting = true;
}

function handle_response(request) {
	var LastMsgInfo = '';
	Element.hide('shout_reloading');
	var response = request.responseText;
	LastMsgInfo = response.substring(0, 10);
	if (LastMsgInfo == 'shoutError') {
		 error = response.substring(10 , response.length);
		 var shoutbox = $('shout_msg');
		 if ($('shout_error')) Element.hide('shout_error');
		 shoutbox.innerHTML = '<div id="shout_error" class="shout-error">'+error +'</div>'+shoutbox.innerHTML+'\n';
		 setTimeout("Element.hide('shout_error')",1500);
	} else if (LastMsgInfo == 'PostedInDB') {
		get_messages();
	} else if (LastMsgInfo != LastMsg) {
		LastMsg = LastMsgInfo;
		messages = response.substring(10, response.length);
		var shoutbox = $('shout_msg');
		shout_display(shoutbox.innerHTML);
		shoutbox.innerHTML = messages + shoutbox.innerHTML +'\n';
	}
	if (posting == true) {
		setTimeout('input_disable(false)', 500);
		if (LastMsgInfo != 'shoutError') $('req_message').value = '';
		$('req_message').focus();
		posting = false; 
	}
}

function handle_members(request) {
	$('shout_members').innerHTML = request.responseText+'\n';
	$('shout_members_total').innerHTML = $('members_total').innerHTML;
}

function handle_smilies(request) {
	Element.hide('shout_reloading');
	$('smilieslist').innerHTML = request.responseText+'\n';
	dragndrag('smilies_header','smilieslist');
}

function overlay(curid, subid, offset) {
	var curobj = $(curid);
	var subobj = $(subid);
	if(isUndefined(offset)) offset = 0;
	subobj.style.display=(subobj.style.display!='block')? 'block' : 'none';
	curobj.pos = fetchOffset(curobj);
	curobj.X = curobj.pos['left'];
	curobj.Y = curobj.pos['top'];
	curobj.w = curobj.offsetWidth;
	curobj.h = curobj.offsetHeight;
	subobj.w = subobj.offsetWidth;
	subobj.h = subobj.offsetHeight;
	subobj.style.left = (curobj.X + subobj.w > document.body.clientWidth) && (curobj.X + curobj.w - subobj.w >= 0) ? curobj.X + curobj.w - subobj.w + 'px' : curobj.X + 'px';
	subobj.style.top = offset == 1 ? curobj.Y + 'px' : (offset == 2 || ((curobj.Y + curobj.h + subobj.h > document.documentElement.scrollTop + document.documentElement.clientHeight) && (curobj.Y - subobj.h >= 0)) ? (curobj.Y - subobj.h) + 'px' : curobj.Y + curobj.h + 'px');
}

function drag(e, open, obj) {
	if(open == 1) {
		dragstart = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
		dragstart[2] = parseInt(obj.style.left);
		dragstart[3] = parseInt(obj.style.top);
		doane(e);
	} else if(open == 2 && dragstart[0]) {
		var dragnow = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY];
		l = dragstart[2] + dragnow[0] - dragstart[0];
		t = dragstart[3] + dragnow[1] - dragstart[1];
		l = l < 5 ? 5 : l;
		t = t < 5 ? 5 : t;
		maxl = document.body.clientWidth - obj.clientWidth - 5;
		maxt = document.body.clientHeight - obj.clientHeight - 5;
		l = l > maxl ? maxl : l;
		t = t > maxt ? maxt : t;
		obj.style.left = l + 'px';
		obj.style.top = t + 'px';
		doane(e);
	} else if(open == 3) {
		dragstart = [];
		doane(e);
	}
}

function dragndrag(curid, subid) {
	$(curid).onmousedown = function(event){try{drag(event, 1, $(subid));}catch(e){}};
	$(curid).onmousemove = function(event){try{drag(event, 2, $(subid));}catch(e){}};
	$(curid).onmouseup = function(event){try{drag(event, 3, $(subid));}catch(e){}};
}

function addText(txt) {
	var obj = $('req_message');
	selection = document.selection;
	obj.focus();
	if(!isUndefined(obj.selectionStart)) {
		var opn = obj.selectionStart + 0;
		obj.value = obj.value.substr(0, obj.selectionStart) + txt + obj.value.substr(obj.selectionEnd);
	} else if(selection && selection.createRange) {
		var sel = selection.createRange();
		sel.text = txt;
		sel.moveStart('character', -strlen(txt));
	} else {
		obj.value += txt;
	}
}

function insertSmiley(smilieid) {
	addText($('smilie_' + smilieid).code+' ');
}

function smileyMenu(ctrl) {
	var smiley = ctrl.firstChild;
	ctrl.style.cursor = 'pointer';
	if(smiley.alt) {
		smiley.code = smiley.alt;
		smiley.alt = '';
	}
	if(smiley.title) {
		smiley.lw = smiley.title;
		smiley.title = '';
	}
	smdiv[ctrl.id] = document.createElement('div');
	smdiv[ctrl.id].id = smiley.id + '_menu';
	smdiv[ctrl.id].style.display = 'none';
	smdiv[ctrl.id].style.width = '60px';
	smdiv[ctrl.id].style.height = '60px';
	smdiv[ctrl.id].className = 'popupmenu_popup';
	$('popup_shoutbox').appendChild(smdiv[ctrl.id]);
	smdiv[ctrl.id].innerHTML = '<table width="100%" height="100%"><tr><td align="center" valign="middle"><img src="' + smiley.src + '" border="0" width="' + smiley.lw + '" /></td></tr></table>';
	showMenu(ctrl.id, 0, 0, 1, 0, 0, smiley.id);
}

function smileyTypes(ctrl) {
	ctrl.style.cursor = 'pointer';
	smdiv[ctrl.id] = document.createElement('div');
	smdiv[ctrl.id].id = ctrl.id + '_menu';
	smdiv[ctrl.id].style.display = 'none';
	smdiv[ctrl.id].className = 'popupmenu_popup';
	$('popup_shoutbox').appendChild(smdiv[ctrl.id]);
	smdiv[ctrl.id].innerHTML = $(ctrl.id+'_popup').innerHTML;
	showMenu(ctrl.id, true, 0, 2);
}

function shout_keydown(event) {
	if (event && event.keyCode==13) send_message();
}

function shout_clear() {
	$('req_message').value = '';
}

function shout_refresh() {
	$('shout_msg').innerHTML= '';
	LastMsg = '';
	get_messages();
}

function shout_smilies(stypeid, page) {
	var type = '';
	if (!stypeid && !page) overlay('smilies', 'smilieslist', 0);
	else type = '&stypeid='+stypeid+'&page='+page;
	var args = 'action=smilies'+type;
	var do_ajax = new Ajax.Request(server, {method: 'get', parameters: args, onComplete: handle_smilies});
	Element.show('shout_reloading');
}

function shout_display(messages) {
	if (is_ie) {
		var filterstring="progid:DXImageTransform.Microsoft.Fade(duration=0.8,overlap=1.0)";
		var shoutbox = $('shout_msg');
		if (shoutbox.filters && window.createPopup) {
			shoutbox.style.filter=filterstring;
			shoutbox.filters[0].Apply();
		}
		shoutbox.innerHTML= messages;
		if (shoutbox.filters && window.createPopup) shoutbox.filters[0].Play();
	} else {
		var speed = Math.round(1000 / 100);
		var timer = 0;
		for(i=0; i<=100; i++) {
			setTimeout("shout_change_opac("+i+")",(timer * speed));
			timer++;
		}
	}
	$('shout_msg').scrollTop = 0;
}

function shout_change_opac(opacity) {
     var object = $('shout_msg_'+LastMsg).style; 
     object.opacity = (opacity / 100);
     object.MozOpacity = (opacity / 100);
     object.KhtmlOpacity = (opacity / 100);
     object.filter = "alpha(opacity=" + opacity + ")";
}
