jQuery().ready(function(){

	var $ = jQuery;
	
	//Private attributes:
	var form_id = 'postform';
	var topic_title_max_length = 80;
	
	//gm_forums_forms spacename: public attributes and functions:
	$.gm_forums_forms = {
		init:function(){
			if( $('#'+form_id).length ){
				topic_post_form_submit_validation();
				topic_title_counter_init();
				submit_button_init();
				display_postform_if_anchor();
			}
		},
		//TinyMCE keyup callback: see plugins/gm-tiny-mce/js/gm_tiny_mce.js:
		tinymce_keyup:function(ed,e){
			if( $('#forums_question_textarea').hasClass('erreur') ){
				$('#forums_question_textarea_infos').text('');
				remove_tiny_mce_error();			
			}
		}
	}
	
	//Private functions:
	
	function topic_title_counter_init(){
		/* Topic title: xxx signs left: */
		if( $('input[name=topic]').length ){
			update_topic_title_counter();
			$('input[name=topic]').keyup(function(e){
				$(this).parents('.ligne-champs').next('.ligne-messages').find('span').removeClass('message-erreur');
				$(this).parents('.ligne-champs').next('.ligne-messages').find('span').addClass('message-normal');
				$(this).removeClass('erreur');
				update_topic_title_counter();
			});
		}
	}
		
	function update_topic_title_counter(){
		title_element = $('#forums_question_titre');
		var char_count = title_element.val().length;
		var max = topic_title_max_length;
		var left = max - char_count;
		var s = (left > 1 || left < -1) ? 's' : '';
		var reste = left == topic_title_max_length ? '' : 'Reste ';

		if( !$('#forums_question_titre_infos').hasClass('message-erreur') ){
			$('#forums_question_titre_infos').text(reste + left +' signe'+ s);
		}
		
	}
	
	function submit_button_init(){
		
		$('#'+form_id).data('gm_can_submit',true);
		
		$('#'+form_id).find('.bouton-action').click ( function () {
	
			//(Ugly) hack to prevent to click several times on the submit button:
			if( $('#'+form_id).data('gm_can_submit') ){
				$('#'+form_id).data('gm_can_submit',false);
				$('#'+form_id).submit();
			}
			
			return false;
		});
	}
	
	function remove_tiny_mce_error(){
		$('#forums_question_textarea').removeClass('erreur');
		
		//Handly handled tinymce error state:
		$('#forums_question_textarea_tbl').css('border','none');
		$('#forums_question_textarea_tbl').css('border-left','1px solid #CCCCCC');
		$('#forums_question_textarea_tbl').css('border-right','1px solid #CCCCCC');
		
		$('#forums_question_textarea_infos').removeClass('message-erreur');
	}
	
	function topic_post_form_submit_validation(){
		$('#'+form_id).submit(function(){
			var ok = true;
			
			$('#forums_question_textarea_infos').text('');
			if( $('#forums_question_textarea').val().length == 0 ){	
				$('#forums_question_textarea').addClass('erreur');
				
				//Handly handled tinymce error state:
				$('#forums_question_textarea_tbl').css('border','1px solid #CD3333');
				
				$('#forums_question_textarea_infos').addClass('message-erreur');
				$('#forums_question_textarea_infos').append('Ce champ est obligatoire');
				ok = false;
			}else{
				remove_tiny_mce_error();
			}
	
			if( $('#forums_question_titre').length ){
				update_topic_title_counter();
				if( $('#forums_question_titre').val().length == 0 ){
					$('#forums_question_titre').addClass('erreur');
					$('#forums_question_titre_infos').removeClass('message-normal');
					$('#forums_question_titre_infos').addClass('message-erreur');
					$('#forums_question_titre_infos').text('Ce champ est obligatoire');
					ok = false;
				}else{
					$('#forums_question_titre').removeClass('erreur');
					$('#forums_question_titre_infos').removeClass('message-erreur');
					$('#forums_question_titre_infos').addClass('message-normal');
				}
			}	
			
			if( $('#forum-id').length ){			
				$('#forum_id_infos').text('');
				if( $('#forum-id').val() == 0 ){
					$('#forum-id').addClass('erreur');
					$('#forum_id_infos').addClass('message-erreur');
					$('#forum_id_infos').text('Sélectionnez un forum');
					ok = false;
				}else{
					$('#forum-id').removeClass('erreur');
					$('#forum_id_infos').removeClass('message-erreur');
				}
			}

			//(Ugly) hack to prevent to click several times on the submit button:
			$(this).data('gm_validation_ok',ok);
			
			return ok;
		});
	}
	
	function display_postform_if_anchor(){
		/*
		 * Display the postform if asked by url anchor.
		 * The following form display is the same as in forum.js
		 */
		var url = window.location;
		var anchor = url.hash.substring(1);
		if( anchor == form_id ){
			$.scrollTo($('#forum-reponse').position().top - navHeight, 1000, {
				onAfter: function () {
					$('.forum-reponse').slideDown();
				}
			} );
		}
	}
	
	$.gm_forums_forms.init();

});
