function init_forum() {
	if (!$("#forum").length)
		return;
		
	/**
	* bbCode control by subBlue design [ www.subBlue.com ]
	* Includes unixsafe colour palette selector by SHS`
	*/
	
	// Startup variables
	var imageTag = false;
	var theSelection = false;
	
	// Check for Browser & Platform for PC & IE specific bits
	// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
	var clientPC = navigator.userAgent.toLowerCase(); // Get client info
	var clientVer = parseInt(navigator.appVersion); // Get browser version
	
	var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1));
	var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1));
	
	var baseHeight;
	//onload_functions.push('initInsertions()');
	
	/**
	* Shows the help messages in the helpline window
	*/
	function helpline(help)
	{
		document.forms[form_name].helpbox.value = help_line[help];
	}
	
	/**
	* Fix a bug involving the TextRange object. From
	* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
	*/ 
	function initInsertions() 
	{
		var doc;
	
		if ($("#forum #" + form_name).length)
		{
			doc = document;
		}
		else if (opener)
		{
			doc = opener.document;
		}
		else
		{
			return;
		}
	
		var textarea = doc.forms[form_name].elements[text_name];
	
	/*	if (is_ie && typeof(baseHeight) != 'number')
		{
			textarea.focus();
			baseHeight = doc.selection.createRange().duplicate().boundingHeight;
	
			if (!document.forms[form_name])
			{
				document.body.focus();
			}
		}
	*/
	}
	
	/**
	* bbstyle
	*/
	function bbstyle(bbnumber)
	{	
		if (bbnumber != -1)
		{
			bbfontstyle(bbtags[Number(bbnumber)], bbtags[Number(bbnumber)+1]);
		} 
		else 
		{
			insert_text('[*]');
			document.forms[form_name].elements[text_name].focus();
		}
	}
	
	/**
	* Apply bbcodes
	*/
	function bbfontstyle(bbopen, bbclose)
	{
		theSelection = false;
		
		var textarea = document.forms[form_name].elements[text_name];
	
		textarea.focus();
	
		if ((clientVer >= 4) && is_ie && is_win)
		{
			// Get text selection
			theSelection = document.selection.createRange().text;
	
			if (theSelection)
			{
				// Add tags around selection
				document.selection.createRange().text = bbopen + theSelection + bbclose;
				document.forms[form_name].elements[text_name].focus();
				theSelection = '';
				return;
			}
		}
		else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0))
		{
			mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose);
			document.forms[form_name].elements[text_name].focus();
			theSelection = '';
			return;
		}
		
		//The new position for the cursor after adding the bbcode
		var caret_pos = getCaretPosition(textarea).start;
		var new_pos = caret_pos + bbopen.length;		
	
		// Open tag
		insert_text(bbopen + bbclose);
	
		// Center the cursor when we don't have a selection
		// Gecko and proper browsers
		if (!isNaN(textarea.selectionStart))
		{
			textarea.selectionStart = new_pos;
			textarea.selectionEnd = new_pos;
		}	
		// IE
		else if (document.selection)
		{
			var range = textarea.createTextRange(); 
			range.move("character", new_pos); 
			range.select();
			storeCaret(textarea);
		}
	
		textarea.focus();
		return;
	}
	
	/**
	* Insert text at position
	*/
	function insert_text(text, spaces, popup)
	{
		var textarea;
		
		if (!popup) 
		{
			textarea = document.forms[form_name].elements[text_name];
		} 
		else 
		{
			textarea = opener.document.forms[form_name].elements[text_name];
		}
		if (spaces) 
		{
			text = ' ' + text + ' ';
		}
		
		if (!isNaN(textarea.selectionStart))
		{
			var sel_start = textarea.selectionStart;
			var sel_end = textarea.selectionEnd;
	
			mozWrap(textarea, text, '')
			textarea.selectionStart = sel_start + text.length;
			textarea.selectionEnd = sel_end + text.length;
		}
		else if (textarea.createTextRange && textarea.caretPos)
		{
			if (baseHeight != textarea.caretPos.boundingHeight) 
			{
				textarea.focus();
				storeCaret(textarea);
			}
	
			var caret_pos = textarea.caretPos;
			caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;
		}
		else
		{
			textarea.value = textarea.value + text;
		}
		if (!popup) 
		{
			textarea.focus();
		}
	}
	
	/**
	* Add inline attachment at position
	*/
	function attach_inline(index, filename)
	{
		insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
		document.forms[form_name].elements[text_name].focus();
	}
	
	/**
	* Add quote text to message
	*/
	function addquote(post_id, username)
	{
		var message_name = 'message_' + post_id;
		var theSelection = '';
		var divarea = false;
	
		if (document.all)
		{
			divarea = document.all[message_name];
		}
		else
		{
			divarea = document.getElementById(message_name);
		}
	
		// Get text selection - not only the post content :(
		if (window.getSelection)
		{
			theSelection = window.getSelection().toString();
		}
		else if (document.getSelection)
		{
			theSelection = document.getSelection();
		}
		else if (document.selection)
		{
			theSelection = document.selection.createRange().text;
		}
	
		if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null)
		{
			if (divarea.innerHTML)
			{
				theSelection = divarea.innerHTML.replace(/<br>/ig, '\n');
				theSelection = theSelection.replace(/<br\/>/ig, '\n');
				theSelection = theSelection.replace(/&lt\;/ig, '<');
				theSelection = theSelection.replace(/&gt\;/ig, '>');
				theSelection = theSelection.replace(/&amp\;/ig, '&');
				theSelection = theSelection.replace(/&nbsp\;/ig, ' ');
			}
			else if (document.all)
			{
				theSelection = divarea.innerText;
			}
			else if (divarea.textContent)
			{
				theSelection = divarea.textContent;
			}
			else if (divarea.firstChild.nodeValue)
			{
				theSelection = divarea.firstChild.nodeValue;
			}
		}
	
		if (theSelection)
		{
			insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
		}
	
		return;
	}
	
	/**
	* From http://www.massless.org/mozedit/
	*/
	function mozWrap(txtarea, open, close)
	{
		var selLength = txtarea.textLength;
		var selStart = txtarea.selectionStart;
		var selEnd = txtarea.selectionEnd;
		var scrollTop = txtarea.scrollTop;
	
		if (selEnd == 1 || selEnd == 2) 
		{
			selEnd = selLength;
		}
	
		var s1 = (txtarea.value).substring(0,selStart);
		var s2 = (txtarea.value).substring(selStart, selEnd)
		var s3 = (txtarea.value).substring(selEnd, selLength);
	
		txtarea.value = s1 + open + s2 + close + s3;
		txtarea.selectionStart = selEnd + open.length + close.length;
		txtarea.selectionEnd = txtarea.selectionStart;
		txtarea.focus();
		txtarea.scrollTop = scrollTop;
	
		return;
	}
	
	/**
	* Insert at Caret position. Code from
	* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
	*/
	function storeCaret(textEl)
	{
		if (textEl.createTextRange)
		{
			textEl.caretPos = document.selection.createRange().duplicate();
		}
	}
	
	/**
	* Color pallette
	*/
	function colorPalette(dir, width, height)
	{
		var r = 0, g = 0, b = 0;
		var numberList = new Array(6);
		var color = '';
	
		numberList[0] = '00';
		numberList[1] = '40';
		numberList[2] = '80';
		numberList[3] = 'BF';
		numberList[4] = 'FF';
	
		document.writeln('<table cellspacing="1" cellpadding="0" border="0">');
	
		for (r = 0; r < 5; r++)
		{
			if (dir == 'h')
			{
				document.writeln('<tr>');
			}
	
			for (g = 0; g < 5; g++)
			{
				if (dir == 'v')
				{
					document.writeln('<tr>');
				}
				
				for (b = 0; b < 5; b++)
				{
					color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]);
					document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">');
					document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>');
					document.writeln('</td>');
				}
	
				if (dir == 'v')
				{
					document.writeln('</tr>');
				}
			}
	
			if (dir == 'h')
			{
				document.writeln('</tr>');
			}
		}
		document.writeln('</table>');
	}
	
	
	/**
	* Caret Position object
	*/
	function caretPosition()
	{
		var start = null;
		var end = null;
	}
	
	
	/**
	* Get the caret position in an textarea
	*/
	function getCaretPosition(txtarea)
	{
		var caretPos = new caretPosition();
		
		// simple Gecko/Opera way
		if(txtarea.selectionStart || txtarea.selectionStart == 0)
		{
			caretPos.start = txtarea.selectionStart;
			caretPos.end = txtarea.selectionEnd;
		}
		// dirty and slow IE way
		else if(document.selection)
		{
		
			// get current selection
			var range = document.selection.createRange();
	
			// a new selection of the whole textarea
			var range_all = document.body.createTextRange();
			range_all.moveToElementText(txtarea);
			
			// calculate selection start point by moving beginning of range_all to beginning of range
			var sel_start;
			for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++)
			{		
				range_all.moveStart('character', 1);
			}
		
			txtarea.sel_start = sel_start;
		
			// we ignore the end value for IE, this is already dirty enough and we don't need it
			caretPos.start = txtarea.sel_start;
			caretPos.end = txtarea.sel_start;			
		}
	
		return caretPos;
	}
	
	function init_form () {
		initInsertions();
	}
	
	function init_reply_form() {
		form_name = 'reply_form_small';
		text_name = 'ADATA[MESSAGE]';
		$("#forum #form-comment-add input[TYPE=hidden]").attr("disabled", "disabled");
		$("#forum #form-comment-add #comment_ac, #forum #form-comment-add #comment_section, #forum #form-comment-add #comment_cat_tag").removeAttr("disabled");
		init_form();
	}
		
	var form_name = 'create_topics_form';
	var text_name = 'ADATA[MESSAGE]';
	var load_draft = false;
	var upload = false;

	// Define the bbCode tags
	var bbcode = new Array();
	var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]','[img]','[/img]','[url]','[/url]','[flash=]', '[/flash]','[size=]','[/size]');
	var imageTag = false;

	// Helpline messages
	var help_line = {
		b: 'Bold: [b]text[/b]',
		i: 'Italic: [i]text[/i]',
		u: 'Underlined: [u]text[/u]',
		q: 'Quote: [quote]text[/quote]',
		c: 'Code: [code]code[/code]',
		l: 'List: [list]text[/list]',
		o: 'Numbered list: [list=]text[/list]',
		p: 'Insert image: [img]http://image_url[/img]',
		w: 'Insert hyperlink: [url]http://url[/url] or [url=http://url]URL text[/url]',
		a: 'Insert attachment: [attachment=]filename.ext[/attachment]',
		s: 'Font color: [color=red]text[/color] You can also use this construction: color=#FF0000',
		f: 'Font size: [size=85]small text[/size]',
		e: 'List: add an element',
		d: 'Flash: [flash=width,height]http://url[/flash]'
			}

	var panels = new Array('');
	var show_panel = '';

	$("#forum .create_topic").click(function(){
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		$("#forum .new-topic-cancel").show();
		$("#forum #form_topics").insertAfter('#forum #forum_cat_list_end');
		$("#forum #form_topics").show();
		form_name = 'create_topics_form';
		text_name = 'DATA[MESSAGE]';
		init_form();
		$("#forum #form_topics #PICT1").attr("name","DATA[PICT1]");
		location.href = '#NEWTOPIC';
		return 1;
	});
	$("#forum .non_auth").click(function(){
		alert($(this).attr("title"));
		location.href = $(this).attr("href");
	});
	$("#forum .forum_subscribe").click(function(){
		if (confirm($(this).attr("rel") + ' "' + $(this).attr("title") + '"?')) {
			$("#forum #forum_subscribe_form #subscribe_topic_id").attr("value", $(this).attr("href"));
			$("#forum #forum_subscribe_form #subscribe_message").attr("value", 1);
			$("#forum #forum_subscribe_form").submit();
		}
	});
	$("#forum .forum_unsubscribe").click(function(){
		if (confirm($(this).attr("rel") + ' "' + $(this).attr("title") + '"?')) {
			$("#forum #forum_subscribe_form #subscribe_topic_id").attr("value", $(this).attr("href"));
			$("#forum #forum_subscribe_form #unsubscribe_message").attr("value", 1);
			$("#forum #forum_subscribe_form").submit();
		}
	});
	$("#forum .new-topic-cancel").click(function(){
		$("#forum #form_topics").hide();
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").show();
	});
	$("#forum .insert_smiley").click(function(){
		insert_text($(this).attr("alt"), $(this).attr("href"));
	});
	$("#forum .insert_bbcode").click(function(){
		bbstyle($(this).attr("href"));
	});
	$("#forum #create_topics_form").submit(function(){
		//apply_rich_editor_text('create_topics_form', 'MESSAGE');
		res = generic_mandatory_check($(this).attr("name"), 'FORM_VALIDATOR', 'Validation Number')
  			  + generic_mandatory_check(form_name, '$NAME_NAME', 'Topic')
 			  + generic_mandatory_check(form_name, '$MESSAGE_NAME', '$MESSAGE_CAPTION');
 		if (res!=''){
 			alert(res);
 			return false;
 		}
 		return true;
	});
	$("#forum .clear_form").click(function(){
		var parent = $(this).parents("form").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$(parent_id + " textarea").attr("value", "");
	});
	$("#forum .fold").click(function(){
		$("#forum .forum_comment_content2hide").hide();
		$("#forum .forum_attach_content2hide").hide();
		setCookie('forum_posts_opened', 0, "", "/");
	});
	$("#forum .unfold").click(function(){
		$("#forum .forum_comment_content2hide").show();
		$("#forum .forum_attach_content2hide").show();
		setCookie('forum_posts_opened', 1, "", "/");
	});
	if (!isNaN(getCookie('forum_posts_opened')))
	{
		if (getCookie('forum_posts_opened')=='1') {
			$("#forum .forum_comment_content2hide").show();
			$("#forum .forum_attach_content2hide").show();
		}
	}
	$("#forum .s-msg-cancel").click(function(){
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum #form-comment-edit, #form-comment-add").hide();
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").show();
	});
	$("#forum .add_new_post_button").click(function(){
		init_reply_form();
		$("#forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_catid").attr("value", $(this).attr("rel"));
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "");
		$("#forum #form-comment-add").insertAfter('#forum #topic_posts_bar');
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-reply").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #comment_PARENT_ID, #forum #form-comment-add #comment_LEVEL, #forum #form-comment-add #comment_subject, #forum #form-comment-add #comment_username, #forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).attr("value")) + 1);
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "");
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-quote").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #comment_PARENT_ID, #forum #form-comment-add #comment_LEVEL, #forum #form-comment-add #comment_subject, #forum #form-comment-add #comment_username, #forum #form-comment-add #comment_catid").removeAttr("disabled");
		$("#forum #form-comment-add #comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).attr("value")) + 1);
		$("#forum #form-comment-add #comment_ac").attr("value", "insert");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", "[quote=" + $("#AUTHOR_" + $(parent).attr("id")).attr("value") + "]" + $("#CODE_" + $(parent).attr("id")).attr("value") + "[/quote]");
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .s-msg-edit").click(function(){
		init_reply_form();
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#forum " + parent_id + " .forum_comment_content2hide").toggle();
		$("#forum " + parent_id + " .forum_attach_content2hide").toggle();
		$("#forum #form-comment-add #edit_ID").removeAttr("disabled");
		$("#forum #form-comment-add #edit_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add #comment_ac").attr("value", "update");
		$("#forum #form-comment-add #comment_MESSAGE").attr("value", $("#CODE_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").insertAfter('#forum #attach' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#forum #form-comment-add").show();
		$("#forum #form-comment-add #PICT1").attr("name","ADATA[PICT1]");
		$("#forum .s-msg-edit, #forum .s-msg-quote, #forum .s-msg-reply, #forum .add-new-topic, #forum .add_new_post_button, #forum .s-msg-del, #forum .create_topic").hide();
		location.href = '#write-comment';
	});
	$("#forum .post_header").click(function(){
		var parent = $(this).parents("div.forum_post").get(0);
		var parent_id = $(parent).attr("id");
		$("#forum #comment" + $("#ID_" + parent_id).attr("value")).toggle();
		$("#forum #attach" + $("#ID_" + parent_id).attr("value")).toggle();
	});
	
}

function init_comments() {
	if (!$("#comments").length)
		return;
	jQuery(function( $ ){
		$("#comments").init_bbcode({
			form_name: 'COMMENTS_FORM', 
			text_name: 'DATA[COMMENT]',
			bbcode_buttons:	'.insert_bbcode'
		});
	});
	$(".s-msg-reply").click(function(){
		var parent = $(this).parents("div.info").get(0);
		var parent_id = '#' + $(parent).attr("id");
		$("#COMMENT").html('[quote=' + $("#AUTHOR_" + $(parent).attr("id")).text() + ']' + $("#SOURCE_" + $(parent).attr("id")).attr("value") + '[/quote]');
		$("#comment_PARENT_ID").attr("value", $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#comment_LEVEL").attr("value", parseInt($("#LEVEL_" + $(parent).attr("id")).attr("value") + 1));
		$("#comment_PARENT_ID").removeAttr("disabled");
		$("#comment_LEVEL").removeAttr("disabled");
		$("#form-comment-add").insertAfter('#comment' + $("#ID_" + $(parent).attr("id")).attr("value"));
		$("#form-comment-add").show();
		return false;
	});
	$(".s-msg-add").click(function(){
		$("#comment_PARENT_ID").attr("disabled", "disabled");
		$("#comment_LEVEL").attr("disabled", "disabled");
		$("#comment_PARENT_ID").attr("value", "");
		$("#comment_LEVEL").attr("value", "");
		$("#COMMENT").html("");
		$("#form-comment-add").insertAfter('#comments_form_start_position');
		$("#form-comment-add").show();
		return false;
	});
}

function init_lightbox() {
	$.each($("a"),function(i,obj){
		if ($(obj).attr('rel') == 'lightbox')
			$(obj).lightBox();
	});
	$(".lightbox").lightBox();
}

function init_after_login_return() {
	$('.after_login_return').click(function() {
		//alert("You should login");
		setCookie('after_login_return_url',document.location.href,'','/');
		//location.href="/login/";
	});
}

function init_tabs_listing() {
	$.each($('.tabs_listing'),function(i,obj){
		$(obj).innerfade({
			speed: 2000,
			timeout: 4000,
			containerheight: $(obj).css("height")
		});
	});
	$('#top_menu').css({'z-index':'1500'});
}

//main jquery hook-up function
$(document).ready(
	function() {
		//init_lightbox();
		init_comments();
		init_forum();
		init_after_login_return();
		init_tabs_listing();
	}
);