/**
 * Code Copyright Lightmaker Tunbridge Wells Ltd 2008
 * created 07/03/2008
 * @version 0.1, 07/03/2008
 * @author tony.milton(tony.milton@lightmaker.com)
 */
 
/*
 * Conventions:
 * - All variables and functions start with "forum" so they don't conflict with anything else
 * - internal functions start with "pr_forum" (private)
 *  */

var _latest_reply_id;

function forum_set_reply_id()
{
	var temp_reply_id = "0";
	
	if( document.getElementById("last_reply_id") )
	{
		_latest_reply_id = document.getElementById("last_reply_id").value;
	}
}

function forum_validate_login(thisform)
{
	// return true unless one or more tests fail
	var ret = true;
	var messageArr = new Array();
	
	with (thisform)
	{
		//test email
		if ( ! pr_forum_validate_email(login_email.value) )
		{
			messageArr.push("Email is invalid");
			document.getElementById("login_email").className = 'errHighlight';
			ret = false;
		}
		
		//test password
		if( login_password.value.length < 1 )
		{
			messageArr.push("Password is empty");
			document.getElementById("login_password").className = 'errHighlight';
			ret = false;
		}
	}
	if(messageArr.length > 0)
	{	
		pr_forum_display_errors(messageArr, "LogInErrors", true);
	}
	
	return ret;
}

function forum_validate_registration(thisform)
{
	document.getElementById("register_username").className = '';
	document.getElementById("register_email").className = '';
	document.getElementById("register_password").className = '';
	document.getElementById("register_password2").className = '';
	document.getElementById("rules_label").className = '';
	document.getElementById("terms_label").className = '';	

	// return true unless one or more tests fail
	var ret = true;
	var messageArr = new Array();
	
	with (thisform)
	{	
		//test username
		if( register_username.value.length < 1 )
		{
			messageArr.push("Screen name is empty");
			document.getElementById("register_username").className = 'errHighlight';
			ret = false;
		}
		
		//test email
		if ( ! pr_forum_validate_email(register_email.value) )
		{
			messageArr.push("Email is invalid");
			document.getElementById("register_email").className = 'errHighlight';
			ret = false;
		}
		
		//test password
		if( register_password.value.length < 1 )
		{
			messageArr.push("Password is empty");
				document.getElementById("register_password").className = 'errHighlight';
				document.getElementById("register_password2").className = 'errHighlight';
			ret = false;
		}
		else
		{
			//test passwords match
			if( register_password.value != register_password2.value )
			{
				messageArr.push("Passwords do not match");
				document.getElementById("register_password").className = 'errHighlight';
				document.getElementById("register_password2").className = 'errHighlight';
				ret = false;	
			}
		}
		
		//test house rules
		if( ! register_house_rules.checked )
		{
			messageArr.push("House rules not agreed");
			document.getElementById("rules_label").className = 'errHighlight2';
			ret = false;
		}
	
		//test terms checked
		if( ! register_terms.checked )
		{
			messageArr.push("Terms not agreed");
			document.getElementById("terms_label").className = 'errHighlight2';
			ret = false;
		}
	}
	
	if(messageArr.length > 0)
	{	
		pr_forum_display_errors(messageArr, "RegistrationErrors", true);
		document.location = '#register';
	}
	
	return ret;
}

function pr_forum_validate_email(value){
	var ret = true;
	
	if (value.length==0){
		ret = false;
	}
	
	if (value.indexOf("@") == -1 || value.indexOf("@") == value.length-1 || value.indexOf("@") != value.lastIndexOf("@") || value.indexOf("@") > value.lastIndexOf(".")){
		ret = false;
	}
	
	if (value.indexOf(".") == 0 || value.indexOf(".") == value.length-1 || value.indexOf("..") != -1 || value.indexOf("@.") != -1 || value.indexOf(".@") != -1){
		ret = false;
	}
	
	return ret;
}

function forum_validate_new_thread(thisform)
{
	// return true unless one or more tests fail
	var ret = true;
	var messageArr = new Array();
	
	with (thisform)
	{
		//test title
		if ( title.value.length < 1 )
		{
			messageArr.push("Thread title is empty");
			ret = false;
		}
		else if ( title.value.length > 50 )
		{
			messageArr.push("Thread title is greater than 50 characters");
			ret = false;
		}
		
		//test message
		if( message.value.length < 1 )
		{
			messageArr.push("Your post is empty");
			ret = false;
		}
		else if ( message.value.length > 500 )
		{
			messageArr.push("Your post is greater than 500 characters");
			ret = false;
		}
	}
	
	if(messageArr.length > 0)
	{	
		pr_forum_display_errors(messageArr, "AddThreadErrors", true);
		
	}
	
	return ret;
}

function forum_validate_new_reply(thisform, siteRoot, thread_id)
{
	if( ! safari1_3_2Pass)
	{
		document.add_reply.submit();
		return;
	}

	// return true unless one or more tests fail
	var messageArr = new Array();
	
	var reply_text = "";
	
	with (thisform)
	{
		//test email
		if ( reply.value.length < 1 )
		{
			messageArr.push("Your post is empty");
		}
		else if ( reply.value.length > 500 )
		{
			messageArr.push("Your post is longer than 500 characters");
		}
		
		if(messageArr.length > 0)
		{	
			pr_forum_display_errors(messageArr, "AddReplyErrors", true);
		}
		else
		{
			reply_text = reply.value;
			
			var form_data = "";
			form_data += 'method=newreply';
			form_data += '&thread_id=' + thread_id ;
			form_data += '&reply=' + escape(reply_text);
			form_data += '&last_reply_id=' + _latest_reply_id;
			
			
			//post form using mootools ajax
			
			ajax = new Ajax(siteRoot+"/forums/newpost.aspx", 
										{
											data: form_data,
											method: 'post', 
											evalScripts: false, 
											onComplete: pr_forum_new_reply_success, 
											onFailure: pr_forum_new_reply_fail
										}
							);
			response = ajax.request();
		
		}
	}
	
	// only submit the new reply via ajax
	return false;
}


function forum_validate_password(thisform)
{
	// return true unless one or more tests fail
	var ret = true;
	var messageArr = new Array();
	
	with (thisform)
	{
		//test screen name
		if ( screenname.value.length < 1 )
		{
			messageArr.push("Screen name is empty");
			ret = false;
		}
		
		//test email
		if ( ! pr_forum_validate_email(email.value) )
		{
			messageArr.push("Email is invalid");
			ret = false;
		}
	}
	
	if(messageArr.length > 0)
	{	
		pr_forum_display_errors(messageArr, "ResetPasswordErrors", true);
		
	}
	
	return ret;
}

function forum_validate_reset_password(thisform)
{
	// return true unless one or more tests fail
	var ret = true;
	var messageArr = new Array();
	
	with (thisform)
	{
		document.getElementById("email_err").style.display = "none";
		document.getElementById("pin_err").style.display = "none";
		document.getElementById("password_err").style.display = "none";
		document.getElementById("password2_err").style.display = "none";
		
		//test email
		if ( ! pr_forum_validate_email(email.value) )
		{
			messageArr.push("Email is invalid");
			document.getElementById("email_err").style.display = "";
			ret = false;
		}

		//test pin
		if( pin.value.length < 1 )
		{
			messageArr.push("Pin is empty");
			document.getElementById("pin_err").style.display = "";
			ret = false;
		}

		//test password
		if( password.value.length < 1 )
		{
			messageArr.push("Password is empty");
				document.getElementById("password_err").style.display = "";
				document.getElementById("password2_err").style.display = "";
			ret = false;
		}
		else
		{
			//test passwords match
			if( password.value != password2.value )
			{
				messageArr.push("Passwords do not match");
				document.getElementById("password_err").style.display = "";
				document.getElementById("password2_err").style.display = "";
				ret = false;	
			}
		}
	}
	
	if(messageArr.length > 0)
	{	
		pr_forum_display_errors(messageArr, "ResetPasswordErrors", true);
	}
	
	return ret;
}



function pr_forum_new_reply_success(text, xml)
{
	var stat;
	var success = xml.getElementsByTagName("stat")[0];
	if ( success != null ) {
		lvl1 = success.childNodes[0];
		stat = lvl1.nodeValue;
	}
	
	if ( stat == "noforum" ){
		document.location = "../errors/forum.html";
		return;
	}
	
	if ( stat == "loggedout" ){
		document.location.reload();
		return;
	}
	
	if ( stat != "ok" ){
		pr_forum_add_post_failed();
		return;
	}

	pr_forum_reset_errors();
	
	old_message = document.getElementById('reply');
	old_message.value = '';

	var message = '';

	
	var messages = xml.getElementsByTagName("message");
	
	var new_messages = "";
	
	//build up new content string
	for(var i = 0; i < messages.length; i++)
	{
		var msg = messages[i];
		if ( msg != null ) {
			lvl1 = msg.childNodes[0];
			message = lvl1.nodeValue;

			new_messages += "<div class=\"dark_table\"><div class=\"bb p10\">" + message  + "</div></div>";

			
			_latest_reply_id = msg.attributes.getNamedItem("id").value;
		}		
	}
	
	//add new content string to posts div
	
	var posts_container = document.getElementById("replies");
	
	posts_container.innerHTML += new_messages;
	
	var post_successful = document.getElementById("post_successful");
	post_successful.style.display = "block";
	
	var reply = document.getElementById('reply');
	
	reply.value = '';
	
	document.location = '#recent';
	var topforumreplies = document.getElementById("topforumreplies");
	// Refreshes the iframe
	topforumreplies.src = topforumreplies.src;
}

function pr_forum_new_reply_fail(text, xml)
{

	pr_forum_add_post_failed();
}

function pr_forum_add_post_failed()
{
	var messageArr = new Array();
	messageArr.push("Your post could not be added");
	pr_forum_display_errors(messageArr, "AddReplyErrors", false);
	
	var post_successful = document.getElementById("post_successful");
	post_successful.style.display = "none";
}

function pr_forum_display_errors(messageArr, errorControlName, fields_not_completed){

	pr_forum_reset_errors();

	var objErr = document.getElementById(errorControlName);
	
	objErr.style.display = "block";

	
	var strErr = '';
	
	if(fields_not_completed)
	{
		strErr = "<p>Before you can proceed please correct the following errors:</p>";
	}
	strErr += "<ul>\n";
	
	for( var a=0;a<messageArr.length;a++){
		strErr += "<li>" + messageArr[a] + "</li>\n";
	}
	
	strErr += "</ul>";

	objErr.innerHTML = strErr;
}

function pr_forum_reset_errors()
{

	$each( $$('div'), function(divelement, index){	
		if(divelement.className == "error"){
			divelement.style.display ="none";
		}
	});
	
}
