/********************************************************************************************************************\ 
 ajax.js - copyright (c)2008,2009,2010,2011 by Jeff Clayton
 In addition to the login form, put this in your page that calls this script:
 
 <span id="timeoutput"></span>    (for general results)
 <span id="loginoutput"></span>   (for login and logout results)
 
\********************************************************************************************************************/ 
// general ajax variables

var ajax = ajaxObj(); // the global ajax object	
var ajax_delimiter = ":@:"; // for array callbacks

/********************************************************************************************************************/ 
// accessible login variables

var ajax_logged_in = false;

var OnlineUser = new Array('','',''); // user_id, username, email

var login_user_default = '';//'enter email adress'; // check bypass below

var login_password_default = '';//'*******';

var login_button_code = '<input name="login" type="image" value="Submit" src="images/login.png" style="vertical-align:middle" onclick="return do_login(this.form.email.value,this.form.password.value);" />';

//var login_button_code = '<input name="login" type="image" value="Submit" src="images/clapboard_arrow.png" style="vertical-align:middle" onclick="return do_login(this.form.email.value,this.form.password.value);" />';

var logout_button_code = '<input name="logout" type="image" value="Submit" src="images/logout.png" style="vertical-align:middle" onclick="return do_logout();" />';

var nologin_message = 'You are not logged in';

var login_redirect = 'main.php';

var logout_redirect = 'index.php';

/********************************************************************************************************************/ 

function ajaxObj()
{	
 	var ajaxobject = false;

	try { ajaxobject = new XMLHttpRequest(); } // Firefox, Opera 8.0+, Safari  
	catch (e)
	{  // Internet Explorer 
		try
		{ ajaxobject = new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (e)
		{  
			try { ajaxobject = new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (e) { /*alert("Your browser does not support AJAX");*/ return false; }    
		}  
	}
	return ajaxobject;
}
		
/********************************************************************************************************************/ 
// filename: the external form action file - returns text to this function
		
function AjaxReq(form_method, filename, option, extra) // form_method = 'GET', 'POST', etc..., option for user options
{
	var datetime = new Date();
	var timestamp = datetime.getTime();	// required to clear caching
	ajax.abort();
	ajax.open(form_method, filename+'?ajax='+timestamp+'&delim='+ajax_delimiter+'&opt='+option+'&'+extra, true);
	ajax.onreadystatechange=function() 
	{			
		if(ajax.readyState == 4) 
		{
			if (ajax.status == 200) 
			{					
				if (ajax.responseText)
				{		
					//alert('responseText: '+ajax.responseText); // 
					var ajaxdata = ajax.responseText.split("\n",1)[0]; 
					ajaxmain(ajaxdata);
				}
			}
		} 																
	}
			
	ajax.send(null);
}
		
/********************************************************************************************************************/ 

function ajaxmain(ajaxresponse)
{
	var ajaxdata = ajaxresponse.split(ajax_delimiter);

	if (ajaxdata)
	{
//if (document.getElementById("fulloutput")) document.getElementById("fulloutput").innerHTML = ajaxdata; // for testing 		
		var idx = 0;
		var option = ajaxdata.shift(); // option for switch statement
		
		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		// Main Code
		
		switch (option)
		{
			/////////////////////////////////////////////////////////////
			
			case 'time':
			
				var timestamp = ajaxdata.shift();
				var servertime = ajaxdata.shift();
				if (document.getElementById("timeoutput")) document.getElementById("timeoutput").innerHTML = timestamp+':'+servertime; 
				
			break;

			/////////////////////////////////////////////////////////////
			
			case 'login': 
			
				var login_result = ajaxdata.shift();
				var login_response = ajaxdata.shift();
				
				if (login_result!=0)
				{
					ajax_logged_in = true;
				//alert(login_result);
					OnlineUser = login_result.split(':');
				}
				else
					ajax_logged_in = false;
			
				if (document.getElementById("loginoutput")) 
				{
					var login_info = login_response;
					
					if (ajax_logged_in)
					{
						login_info = login_info + " ( " + OnlineUser[1] + " )";
						document.loginform.email.value = login_user_default;
						document.loginform.password.value = '';						
						document.getElementById("loginbuttons").innerHTML = logout_button_code;
						document.getElementById("loginfields").style.visibility='hidden';
						location.href=login_redirect; // force redirect
					}
					
					document.getElementById("loginoutput").innerHTML = login_info;
				}
				
			break;

			/////////////////////////////////////////////////////////////
			
			case 'logout': 
			
				var logout_response = ajaxdata.shift();
				ajax_logged_in = false;		
				if (document.getElementById("loginoutput")) document.getElementById("loginoutput").innerHTML = logout_response;
				for (var i=0; i<OnlineUser.length; i++) OnlineUser[i] = ''; 
				document.getElementById("loginbuttons").innerHTML = login_button_code;
				document.getElementById("loginfields").style.visibility='visible';
				location.href=logout_redirect; // force redirect
				
			break;
						
			/////////////////////////////////////////////////////////////

			case 'question_setup':
			
				var question_response = ajaxdata.shift();				
				if (document.getElementById("questionoutput")) document.getElementById("questionoutput").innerHTML = question_response;
			
			break;
			
			/////////////////////////////////////////////////////////////

			case 'question':
			
				var question_response = ajaxdata.shift();				
				if (document.getElementById("questionoutput")) document.getElementById("questionoutput").innerHTML = question_response;
			
			break;
			
			/////////////////////////////////////////////////////////////

			case 'send_im':
			
				var im_response = ajaxdata.shift(); 
				if (document.getElementById("msgoutput")) document.getElementById("msgoutput").innerHTML = im_response;
				document.im_form.message.value = '';
			
			break;
			
			/////////////////////////////////////////////////////////////

			case 'get_ims':
			
				var im_response = ajaxdata.shift(); 
				if (document.getElementById("instant_messages")) document.getElementById("instant_messages").innerHTML = im_response;
			
			break;
			
			/////////////////////////////////////////////////////////////

			default: break;

			/////////////////////////////////////////////////////////////			
		}		
	}
}

/********************************************************************************************************************/ 

function logged_in_preset()
{
	document.loginform.email.value = login_user_default;
	document.loginform.password.value = '';						
	document.getElementById("loginbuttons").innerHTML = logout_button_code;
	document.getElementById("loginfields").style.visibility='hidden';	
}

/********************************************************************************************************************/ 

function trim(str)  { return str.replace(/^\s+|\s+$/g, ''); }

/********************************************************************************************************************/ 

function collapse_whitespace(str)  { return str.replace(/\s+/g, ' '); }

/********************************************************************************************************************/ 

function livetimer(method, filename, option, extra)
{
	AjaxReq('GET','ajax.php','time','');
	setTimeout("livetimer('"+method+"','"+filename+"','"+option+"','"+extra+"')", 1000);
}

/********************************************************************************************************************/ 

function do_login(user,pass)
{ //alert(trim(user)+' :: '+trim(pass)); // clear
	//if (trim(user)!='' && trim(pass)!='' && user!=login_user_default) // user and pass required
	if (trim(pass)!='') // only a password required
	//if (trim(user)!='' && trim(pass)!='') // bypass - only a username, no password required
	{
		AjaxReq('GET','ajax.php','login','user='+trim(user)+'&pass='+trim(pass));
	} 
	return false;
}

/********************************************************************************************************************/ 

function do_send_im(send_from,send_to,message)
{
	if (trim(send_from)!='' && trim(send_to)!='' && trim(message)!='') 
	{
		AjaxReq('GET','ajax.php','send_im','send_from='+trim(send_from)+'&send_to='+trim(send_to)+'&message='+trim(message));
	} 
	return false;
}

/****************************************************************************************************************/ 

function do_get_ims(userid,start,amount)
{
	AjaxReq('GET','ajax.php','get_ims','userid='+trim(userid)+'&start='+trim(start)+'&amount='+trim(amount));
	return false;
}

/********************************************************************************************************************/ 

function do_logout()
{
	document.loginform.email.value=login_user_default;
	document.loginform.password.value='';
	AjaxReq('GET','ajax.php','logout','');
	return false;
}

/****************************************************************************************************************/ 

function do_simple_logout()
{
	AjaxReq('GET','ajax.php','logout','logtype=simple');
	return false;
}

/****************************************************************************************************************/ 

function do_question_setup()
{
	AjaxReq('GET','ajax.php','question_setup','');
	return false;
}

/****************************************************************************************************************/ 

function do_question(topic, question, answer)
{
	AjaxReq('GET','ajax.php','question','topic='+trim(topic)+'&question='+trim(question)+'&answer='+trim(answer));
	return false;
}

/********************************************************************************************************************/ 

function clear_login_email()
{
	if (document.loginform.email.value==login_user_default)
		document.loginform.email.value = '';
}

/********************************************************************************************************************/ 

function clear_login_password()
{
	if (document.loginform.password.value==login_password_default)
		document.loginform.password.value = '';
}

/********************************************************************************************************************/ 

