var msgid = -1;
var forumMsgid = -1;
var updateTimer;
var forumUpdateTimer;
var blankUpdates = 0;
var profiles = [];
var timerMode = 1;
var getForumMessages = function(message){
	if(forumUpdateTimer) clearTimeout(forumUpdateTimer);
	msgdata = {};
	if(message) msgdata = message;
	if(forumMsgid) msgdata.msgid = forumMsgid;
	msgdata.races_id = RacesID;
	msgdata.messagetype = 1;
	new Ajax.Updater(
		'subItems2',
		'/tractalk/forum.php',
		{
			insertion: 'top',
			method: 'post',
			parameters: msgdata,
			onComplete: function(res){
				if(res.getHeader('msgid')){
					if(timerMode == 2){
						res.getHeader('msglist').split(',').each(
							function(_id){
								$(_id).hide();
							}
						);
					}
					res.getHeader('msglist').split(',').each(
						function(_id){
							$(_id).getElementsBySelector('.hidethread')[0].hide();
							$(_id).getElementsBySelector('.replies')[0].hide();
						}
					);
					forumMsgid = res.getHeader('msgid');
				}
				forumUpdateTimer = setTimeout('getForumMessages()', 10000);
				if(UserID < 1) $$('#subItems2 .reply').invoke('hide');
			}
		}
	);
}
var getForumReplies = function(replyto, message){
	msgdata = {};
	msgdata.replyto = replyto;
	if(message) msgdata = message;
	if(!msgdata.clienttime) msgdata.clienttime = getClientTime();
	msgdata.races_id = RacesID;
	msgdata.messagetype = 1;
	new Ajax.Updater(
		$$('#'+replyto+' .replies')[0],
		'/tractalk/forum.php',
		{
			method: 'post',
			parameters: msgdata,
			onComplete:function(res){
				if(res.getHeader('repliesto')){
					$$('#subItems2 #'+res.getHeader('repliesto')+' .openthread')[0].hide();
					$$('#subItems2 #'+res.getHeader('repliesto')+' .hidethread')[0].show();
					$$('#subItems2 #'+res.getHeader('repliesto')+' .replies')[0].show();
				}
			}
		}
	);
}
var fillForm = function(f, data){
	f.getElements().each(
		function(item){
			if(data[item.name]){
				if(item.type.startsWith('select')){
					item.selectedIndex=-1;
					for(i=0;i<item.options.length;i++){
						opt = item.options[i];
						//select relevant options
						opt.selected = (Object.isArray(data[item.name]) ? data[item.name].indexOf(opt.value) : (data[item.name] == opt.value));
					}
				} else {
					f[item.name].value = data[item.name];
				}
			} else f[item.name].clear();
		}
	);
}
var loadProfile = function(){
	new Ajax.Request(
		'/tractalk/profile.php',
		{
			method: 'post',
			parameters: {},
			onComplete:function(res){
				if(res.getHeader('data')){
					fillForm($('profileForm'), res.getHeader('data').toQueryParams());
				}
			}
		}
	);
}
function setMsgBoxSize(){
	_adjust = $('loginline').visible() ? ($('loginline').getHeight()+10) : ($('forumline').visible() ? ($('forumline').getHeight()+10) : 0);
	_height = document.viewport.getHeight() - _adjust - 70;
	if(_height<=20)_height=20;
	$('subItems2').setStyle({height:_height+'px'});
	$('startThread').setStyle({height:_height+'px'});
	$('replyThread').setStyle({height:_height+'px'});
	$('subItems3').setStyle({height:_height+'px'});
	$('profilePage').setStyle({height:_height+'px'});
}
setInterval(setMsgBoxSize, '100');
function doSignup(event){
	f = $(event.target);
	if(validate(f)){
		if(f.newpassword.value == f.newpassword2.value){
			params = f.serialize(true);
			params['action'] = 'signup';
			new Ajax.Request('/tractalk/',
				{
					method: 'post',
					parameters: params,
					onComplete: function(response){
						if(response.getHeader('SignupStatus')=='0'){
							alert(response.getHeader('Message'));
						} else if(response.getHeader('SignupStatus')=='1'){
							$('signupform').reset();
							loginSuccess(response.getHeader('usrid'));
						} else {
							alert('Signup failed - unknown error.\n'+response.responseText);
						}
					}
				}
			);
		} else {
			alert('Password does not match. Please try again.');
			f.newpassword.focus();
			Event.stop(event);
			return false;
		}
	}
}
var click2 = function(){
	$('startThread').hide();
	$('replyThread').hide();
	toggleTab('subItems2', $('mainItem2'));
	if(UserID==-1){
		$('loginline').show();
		$('forumline').hide();
	} else {
		$('loginline').hide();
		$('forumline').show();
	}
}
var click3 = function(){
	$('startThread').hide();
	toggleTab('subItems3', $('mainItem3'));
	$('loginline').hide();
	$('forumline').hide();
}

var closedTimer;
Event.observe(document, 'dom:loaded',
	function(){
		$$('.subItems').invoke('hide');
		$('subItems2').show();
		$('startThread').hide();
		$('replyThread').hide();
		selectedSegmentBox = $('subItems2');
		selectedTabElm = $('mainItem2');
		Event.observe(document.body, 'click',
			function(){
				$('infobox').hide();
			}
		);
		$('forumline').hide();
		$('forumline').observe('click',
			function(event){
				$('subItems2').hide();
				$('startThread').show();
			}
		);
		$('newdiscussion').observe('submit',
			function(event){
				Event.stop(event);
				getForumMessages($(event.target).serialize(true));
				Event.element(event).reset();
				$('startThread').hide();
				$('subItems2').style.display='block';
				return false;
			}
		);
		$('newreply').observe('submit',
			function(event){
				Event.stop(event);
				getForumReplies($('replyto').value, $(event.target).serialize(true));
				Event.element(event).reset();
				$('replyThread').hide();
				$('subItems2').show();
				return false;
			}
		);
		$('signupform').observe('submit',
			function(event){
				Event.stop(event);
				doSignup(event);
				return false;
			}
		);
		$('infobox').hide();
		$('subItems2').observe('click',
			function(event){
				elm=$(event.target);
				if(elm.hasClassName('openthread')){
				/*hack to prevent IE from fucking up my eventhandlers*/
					if(!closedTimer){
						reps = $(elm.readAttribute('msgid')).getElementsBySelector('.replies')[0];
						getForumReplies(elm.readAttribute('msgid'));
						$(elm.readAttribute('msgid')).getElementsBySelector('.replies')[0].show();
						elm.hide();
						elm.adjacent('.hidethread')[0].show();
					}
				}
				if(elm.hasClassName('hidethread')){
					$(elm.readAttribute('msgid')).getElementsBySelector('.replies')[0].hide();
					elm.hide();
					elm.adjacent('.openthread')[0].show();
					/*hack to prevent IE from fucking up my eventhandlers*/
					closedTimer = setTimeout('closedTimer=null',200);
				}
				if(elm.hasClassName('reply')){
					$('replyto').value = elm.readAttribute('msgid');
					$('subItems2').hide();
					$('replyThread').style.display='block';
				}
			}
		);
		$('infobox').observe('click',
			function(event){
				elm=$(event.target);
				if(elm.hasClassName('digg')){
					new Ajax.Request('events.php', {method:'post', parameters: {'id': $('infobox').readAttribute('msgid'), 'event' : 'digg'}});
				}
				if(elm.hasClassName('block')){
					if(confirm('Block all messages from '+$('infobox').readAttribute('authorname')+'?')){
						new Ajax.Request('events.php', {method:'post', parameters: {'id': $('infobox').readAttribute('author'), 'event' : 'block'}});
						$$('#msgbox p[author='+$('infobox').readAttribute('author')+']').each(function(elm){ $(elm).remove();});
					} else return;
				}
				$('infobox').hide();
				Event.stop(event);
			}
		);
		$('mainItem2').observe('click', click2);
		$('mainItem3').observe('click', click3);
		$('profileItem').observe('click',
			function(){
				loadProfile();
				$('startThread').hide();
				toggleTab('profilePage', $('profileItem'));
				$('loginline').hide();
				$('forumline').hide();
				if($('profileForm')['pioneer'].options[$('profileForm')['pioneer'].selectedIndex].value != 2){
					//$('pwhich').hide();
				}
			}
		);
		$('mainItem4').observe('click',
			function(){
				doLogout();
				if(selectedSegmentBox == $('languages') || selectedSegmentBox == $('profilePage')) $('mainItem1').click();
			}
		);
		$('profileForm').observe('submit',
			function(event){
				Event.stop(event);
				f=$(event.target);
				if(validate(f)){
					f.request();
				} else return false;
				$('mainItem1').click();
				return false;
			}
		);
		document.observe('click',
			function(event){
				elm = Event.element(event);
				if(elm.hasClassName('author') && (elm.ancestors().indexOf($('infobox'))==-1)){
					$('infobox').setStyle({'left' : (Event.pointerX(event)+5)+'px', 'top'  : Event.pointerY(event)+'px'});
					$('infobox').writeAttribute({author: elm.ancestors()[0].readAttribute('author'), msgid: elm.ancestors()[0].readAttribute('id'), authorname:elm.innerHTML});

					$('infoboxText').innerHTML = 'Loading ...';
					$('infobox').show();
					new Ajax.Updater(
						'infoboxText',
						'profile.php',
						{
							method: 'post',
							parameters: {author: $('infobox').readAttribute('author')}
						}
					); //end Ajax.Request
					Event.stop(event);
				}//end if(elm.hasClassName
			}
		);//end document.observe(
		getForumMessages();
	}
);
function logoutSuccess(){
	UserID=-1;
	$('mainItem3').show();
	$('mainItem4').hide();
	$('loginline').show();
	$('forumline').hide();
	$('profileItem').hide();
	click2();
	$$('#subItems2 .reply').invoke('hide');
}
function loginSuccess(usrid){
	UserID = 1;
	$('loginboxform').reset();
	$('mainItem3').hide();
	$('mainItem4').show();
	$('profileItem').show();
	click2();
	$$('#subItems2 .reply').invoke('show');
}
function getClientTime() {
	return '';
}
function getState() {
	return '';
}
function setState(state) {}
function pauseClient() {}

var selectedSegmentBox;
var selectedTabElm;
function toggleTab(segmentBox, tabElm) {
	currentSegmentBox = $(segmentBox);
	if ($(currentSegmentBox)!=$(selectedSegmentBox)) {
		$(currentSegmentBox).style.display='block';
		$(selectedSegmentBox).style.display='none';
		$(tabElm).addClassName('selected');
		$(selectedTabElm).removeClassName('selected');
		selectedSegmentBox = $(currentSegmentBox);
		selectedTabElm = $(tabElm);
	}
}
