/* version 1  */

var Previewstatus = false;
var Postingstatus = false;

function exoSubmit(f)
{
	if( f == undefined )
	{
		f = $('comment_form');
	}

	if(	f.elements.status.value == 'login' )
	{
		exoLogin();
	}
	else if( ( f.elements.status.value == 'register' ) )
	{
		if( f.elements.confirm_password.value == '' )
		{
		}
		else
		{
			exoRegister();
		}
	}
	else if( f.elements.status.value == 'comment' )
	{
		PostComment();
	}
	
}

/* ajax.Request */

function exoRequest(type, url, data) {
  var aj = new Ajax.Request(
  url, {
   method: 'post',
   parameters: data,
   onComplete: type,
   evalScripts: true,
   asynchronous: true
   }
  );
}
function exoRequestUpdate(type, url, data) {
  var aj = new Ajax.Updater(
  type, url, {
   method: 'post',
   parameters: data,
   evalScripts: true,
   asynchronous: true
   }
  );
}
function exoRequestSilentUpdate(type, url, data) {
	var aj = new Ajax.Updater(
		type, url, {
		method: 'post',
		parameters: data,
		insertion: Insertion.Bottom
		}
	);
}
function exoLogin() {

	f = $('comment_form');
	
	var parameters = new Array();
	
	parameters.push( 'do=login' ); 
	
	parameters.push( Form.Element.serialize( f.elements.username ) );
	parameters.push( Form.Element.serialize( f.elements.password ) );
	parameters.push( Form.Element.serialize( f.elements.remember ) );
	parameters.push( Form.Element.serialize( f.elements.entry_id ) );
	parameters.push( Form.Element.serialize( f.elements.post_id ) );
	
	parameters = parameters.join( '&' );
	
	exoRequestUpdate( 'exo_messages', '/comment.php', parameters );
}
function exoRegister() {

	f = $('comment_form');

	var parameters = new Array();

	parameters.push( 'do=register' ); 

	parameters.push( Form.Element.serialize( f.elements.username ) );
	parameters.push( Form.Element.serialize( f.elements.password ) );
	parameters.push( Form.Element.serialize( f.elements.confirm_password ) );
	parameters.push( Form.Element.serialize( f.elements.email ) );

	parameters = parameters.join( '&' );

	exoRequestUpdate( 'exo_messages', '/comment.php', parameters );
}
/* ajax.Response */
function getLoginStatus(oReq) {

	var f = $('comment_form');
	
	$("loginstatus").innerHTML = oReq.responseText;
	
	var element = $('login');
	
	if(element.hasClassName("error") == true)
	{ 
	} else {
		Element.show('postComment');
		Element.show('comment_textarea');
		$('LoginForm').style.display = 'none';
		$('post_button').value = 'submit comment';
		f.elements.status.value = 'comment';
	}
}
function getLogoutStatus(oReq) {
	$("loginstatus").innerHTML = oReq.responseText;
}
/* hide / show forms, depending on state */
function showForm(formId) {

	var f = $('comment_form');
	
	f.elements.text.value = '';
	
	if(formId == 'RegisterForm') {
		Element.addClassName('loginWelcome', "hide");
		Element.show('loginRegisterText');
		Element.show('RegisterForm');
		$('rememberMe').style.display = 'block';
		$('loginRegisterText').style.display = 'block';
		$('postComment').style.display = 'none';
		$('loginWelcome').style.display = 'none';
		$('post_button').value = 'register';
		f.elements.status.value = 'register';
		$('new_post').style.display = 'none';
	}
	else {
	var boxes = document.getElementsByClassName( 'switchable' );
		for( var i = 0; i < boxes.length; i++ )
		{
			if( boxes[i].id == formId )
			{
				boxes[i].style.display = 'block';
			}
			else
			{
				boxes[i].style.display = 'none';
			}
		}
	}
	
	if(formId == 'LogoutForm') {
	
		var parameters = new Array();

		parameters.push( 'do=logout' );
		
		parameters = parameters.join( '&' );
		
		exoRequestUpdate(getLogoutStatus, '/comment.php', parameters);
		
		showForm('LoginForm');
		$('postComment').style.display = 'none';
		$('loginWelcome').style.display = 'block';
		$('post_button').value = 'login';
		f.elements.status.value = 'login';
		$('comment_preview').style.display = 'none';
		$('loginstatus').style.display = 'none';
		$('login').style.display = 'none';
	}
	
	if(formId == 'LoginForm') {
		$('comment_textarea').style.display = 'none';
		$('rememberMe').style.display = 'block';
	}
}
function CommentPreview()
{
	if( Postingstatus )
	{
		return;
	}

	try
	{
		var f = $('comment_form');
		var prev = $('comment_preview');
		var prev_name = $('comment_preview_name');
		var prev_body = $('comment_preview_body');
		$('comment_preview').style.display = 'block';
		
		if( Previewstatus == false )
		{
			Previewstatus = true;
			prev_name.innerHTML = f.elements.preview_name.value;
			prev.style.display = 'block';
		}
		prev_body.innerHTML = CleanComment(f.elements.text.value);
	}
	catch(e)
	{
		alert(e);
	}
}
function CleanComment(text)
{
	text = text.replace(/<a.*javascript:.*?>/ig, '');
	text = text.replace(/<a.*class=.*?>/ig, '');
	text = text.replace(/<a.*style=.*?>/ig, '');
	text = text.replace(/<a.*on\w+=.*?>/ig, '');
	text = text.replace(/<i.*class=.*?>/ig, '');
	text = text.replace(/<i.*style=.*?>/ig, '');
	text = text.replace(/<i.*on\w+=.*?>/ig, '');
	text = text.replace(/<b.*class=.*?>/ig, '');
	text = text.replace(/<b.*style=.*?>/ig, '');
	text = text.replace(/<b.*on\w+=.*?>/ig, '');
	text = text.replace(/<img.*?>/g, '');
	text = text.replace(/<(?!a.*?|\/a|b|\/b|i|\/i).*?>/ig, '');

	text = AutoLink(text);

	var pars = text.split(/\r?\n\r?\n/);
	var newtext = '';
	for(i = 0; i < pars.length; i++) {
		pars[i] = pars[i].strip();
		pars[i] = pars[i].replace(/\r?\n/g, '<br />\n');
		if(pars[i].length > 0) newtext += '<p>' + pars[i] + '</p>' + (i+1 < pars.length ? '\n' : '');
	}
	newtext = CleanQuotes(newtext);
	return newtext;
}
function CleanQuotes(text)
{
    var chars = text.split("");
    var newtext = '';
    for(i = 0; i < chars.length; i++) {
        var chr = chars[i].charCodeAt(0);
        switch( chr ) {
            case 8216: newtext += "'"; break;
            case 8217: newtext += "'"; break;
            case 8220: newtext += '"'; break;
            case 8221: newtext += '"'; break;
            case 8211: newtext += "-"; break;
            case 8212: newtext += "-"; break;
            default: newtext += chars[i];
        }
    }
    return newtext;
}
function AutoLink(text)
{
	text = ' ' + text;
	text = text.replace(/([^"=])(https?\:\/\/)([^,'"\s\<\>\)\]\!\/]*)((\/)(([^,'"\s\<\>\)\]\!]|[,])*))?/igm, '$1<a rel="nofollow" href="$2$3$4">[$3]</a>');
	text = text.substring(1,text.length);
	var re = new RegExp(/href.+>(.*?)<\/a>/g);
	var amatches = re.exec(text);
	if(amatches) {
		for(i = 1; i < amatches.length; i+=2) {
			var href = amatches[i];
			if(href.length > 60) {
				var nhref = href.substr(0, 59);
				var index = text.indexOf(href);
				var stext = text.substr(0, index);
				var etext = text.substr(index + href.length, text.length);
				text = stext + nhref + "...</a>" + etext;
			}
		}
	}
	return text;
}
function PostComment( f )
{
	if( f == undefined )
	{
		f = $('comment_form');
	}

	if( (f.elements.text != undefined) && (f.elements.text.value != '') )
	{

		var parameters = new Array();

		parameters.push( 'do=postcomment' ); 

		var tmp = f.elements.text.value;
		f.elements.text.value = CleanComment( tmp );
		parameters.push( Form.Element.serialize( f.elements.text ) );
		parameters.push( Form.Element.serialize( f.elements.entry_id ) );
		parameters.push( Form.Element.serialize( f.elements.post_id ) );
		f.elements.text.value = tmp;

		parameters = parameters.join( '&' );

		exoRequestUpdate( 'exo_response', '/comment.php', parameters );
	}

}
function CommentSuccess( id_field )
{
	var f = $('comment_form');
	var parameters = new Array();
	var prev = $('comment_preview');
	var prev_name = $('comment_preview_name');
	var prev_body = $('comment_preview_body');

	parameters.push( id_field + '=' + f.elements.entry_id.value );

	parameters = parameters.join( '&' );

	exoRequestSilentUpdate( 'comment_stretch', '/comment.php', parameters );
	Previewstatus = false;
	f.elements.text.value = '';

	prev.style.display = 'none';
	prev_name.innerHTML = '';
	prev_body.innerHTML = '';
}