$( function () {

	//----------------------------------------------------------------------
	//GM:
	
	var gm_attachments = {
			form_id:'postform',
			title_max_length:200, //Must be the same as gm_attachments.php::$title_max_length
			description_max_length:1000, //Must be the same as gm_attachments.php::$description_max_length
			max_attachments:5, //Must be the same as gm_attachments.php::$max_attachments
			init:function(){
				gm_attachments.form_submit_validation();
			},	
			update_attachment:function(index,attach_item_length){
				jQuery('#total_attachments').attr({value:attach_item_length});
				
				//Limit attachments number:
				if( attach_item_length >= gm_attachments.max_attachments ){
					$('a.attach-file').hide();
				}else{
					$('a.attach-file').show();
				}
				
				jQuery('.attachment_title').each(function(){
					gm_attachments.update_attachment_title_counter(this);
					jQuery(this).keyup(function(e){
						jQuery(this).parents('.ligne-champs').next('.ligne-messages').find('span').removeClass('message-erreur');
						jQuery(this).parents('.ligne-champs').next('.ligne-messages').find('span').addClass('message-normal');
						jQuery(this).removeClass('erreur');
						gm_attachments.update_attachment_title_counter(this);
					});
				});
				
				jQuery('textarea.attachment_description').each(function(){
					gm_attachments.update_attachment_description_counter(this);
					var max = gm_attachments.description_max_length;
					jQuery(this).keyup(function(e){
						//this.value = this.value.slice(0,max);
						gm_attachments.update_attachment_description_counter(this);
					});
					jQuery(this).change(function(e){
						//this.value = this.value.slice(0,max);
					});
					
					/*jQuery(this).focus(function(e){
						if( this.value == gm_attachments.description_label ){
							this.value = '';
							jQuery(this).removeClass('attachment_empty');
						}
					});
					jQuery(this).blur(function(e){
						if( jQuery(this).val().trim() == '' ){
							jQuery(this).addClass('attachment_empty');
							this.value = gm_attachments.description_label;
						}
					});*/
					
					/*jQuery(this).autoResize({
					    animateDuration : 200,
					    extraSpace : 30,
					    limit : 200
					});*/
					
				});
				
				gm_attachments.create_ajax_upload(index);
			},
			create_ajax_upload:function(index){
				var ajax_upload_config = {
					action: '/my-plugins/gm-attachments/gm_upload_handler.php',
					responseType: "json",
					onSubmit: function(file, extension) {
						//jQuery('#upload_file_path_'+ index).parent('p').removeClass('error');
						//jQuery('a#remove_attachment_'+ index).hide();
						jQuery('#upload_file_path'+ index).val(file);
						jQuery('#message-chargement-erreur'+ index).hide();
						jQuery('#message-chargement-fin'+ index).hide();
						jQuery('#message-chargement-encours'+ index).show();
					},				
					onComplete : function(file,response){
						if( response.ok == 1 ){
							jQuery('#upload_file_path'+ index).removeClass('erreur');
							jQuery('#uploaded_file'+ index).val(response.filename);
							jQuery('#message-chargement-erreur'+ index).hide();
							jQuery('#message-chargement-encours'+ index).hide();
							jQuery('#message-chargement-fin'+ index).show();
							//jQuery('#upload_file_path_'+ index).parent('p').removeClass('error');
						}else{
							jQuery('#upload_file_path'+ index).addClass('erreur');
							jQuery('#message-chargement-encours'+ index).hide();
							jQuery('#message-chargement-fin'+ index).hide();
							jQuery('#message-chargement-erreur'+ index).html(response.message).show();
							jQuery('#uploaded_file'+ index).val('');
							//jQuery('#upload_file_path_'+ index).parent('p').addClass('error');
						}
						//jQuery('a#remove_attachment_'+ index).show();
					}
				};	
					
				new Ajax_upload('upload_file_button'+ index, ajax_upload_config);	
				new Ajax_upload('upload_file_path'+ index, ajax_upload_config);
			},
			form_submit_validation:function(){
				jQuery('#'+gm_attachments.form_id).submit(function(){
					
					var ok = true;
					
					//Don't submit if currently uploading:
					if( jQuery('span.message-chargement-encours:visible').length > 0 ){
						alert("Une pièce jointe est en cours de téléchargement, attendez que l'information \"Chargement effectué\" soit affichée pour soumettre votre question/réponse.");
						ok = false;
					}
					
					var nb_attachments = $('.attache-item').length;
					if( nb_attachments != 0 ){
					
						function update_error_field(element,ok,message,message_span_class){
							if(ok){
								jQuery(element).parents('.ligne-champs').next('.ligne-messages').find('span').removeClass('message-erreur');
								jQuery(element).parents('.ligne-champs').next('.ligne-messages').find('span').addClass('message-normal');
								jQuery(element).removeClass('erreur');
							}else{
								jQuery(element).parents('.ligne-champs').next('.ligne-messages').find('span').removeClass('message-normal');
								jQuery(element).parents('.ligne-champs').next('.ligne-messages').find('span').addClass('message-erreur');
								jQuery(element).addClass('erreur');
							}
	
							var message_span = 'span';
							if( message_span_class ){
								message_span += '.'+ message_span_class;
							}
							
							jQuery(element).parents('.ligne-champs').next('.ligne-messages').find(message_span).html(message).show();
							
						}
								
						jQuery(this).find('.attachment_title').each(function(){
							if( jQuery.trim(jQuery(this).val()) == '' || jQuery(this).hasClass('inittext') ){
								ok = false;
								update_error_field(this,false,'Ce champ est obligatoire');
							}else if( this.value.length > gm_attachments.title_max_length ){
								ok = false;
								update_error_field(this,false,'Le titre doit comporter moins de '+ gm_attachments.title_max_length +' signes');
							}else{
								update_error_field(this,true,'');
								gm_attachments.update_attachment_title_counter(this);
							}
						});
						
						jQuery(this).find('.upload_file_path').each(function(){
							if( jQuery.trim(jQuery(this).val()) == '' ){
								ok = false;
								update_error_field(this,false,'Vous devez sélectionner un fichier','message-chargement-erreur');
							}else{
								update_error_field(this,true,'','message-chargement-erreur');
							}
						});
						
						
						jQuery('.attachment_description').each(function(){
							if( jQuery(this).val().length > gm_attachments.description_max_length ){
								ok = false;
								update_error_field(this,false,'La description doit comporter moins de '+ gm_attachments.description_max_length +' signes');
							}else{
								update_error_field(this,true,'');
							}	
						});
					
						/*
						jQuery('.upload_file_path').each(function(){
							var index = jQuery(this).attr('id').replace(/.*_([0-9]+)$/g,'$1');
							if( jQuery(this).val().length == 0 ){
								jQuery(this).parent('p').addClass('error');
								var info_content = '<strong class="upload_infos upload_error" id="upload_infos_'+ index +'">Ce champ est obligatoire</strong>';
								if( jQuery('#upload_infos_'+ index).length ){
									jQuery('#upload_infos_'+ index).replaceWith(info_content);
								}else{
									jQuery(info_content).insertAfter('#upload_file_button_'+ index).hide();
									jQuery('#upload_infos_'+ index).slideDown();
								}
								ok = false;
							}else{
								if( jQuery('#uploaded_file_'+ index).val().length == 0 ){
									ok = false;
								}
							}	
						});*/
					}

					if( ok ){
						jQuery(this).find('.attachment_description').each(function(){
							if( jQuery(this).hasClass('inittext') ){
								jQuery(this).val('');
							}
						});
					}

					//(Ugly) hack to prevent to click several times on the submit button:
					//"jQuery(this).data('gm_validation_ok')" is set in gazette_forums_forms.js::topic_post_form_submit_validation() ... 
					if( !ok || !jQuery(this).data('gm_validation_ok') ){
						$(this).data('gm_can_submit',true);
					}
					
					return ok;
				});			
			},
			update_attachment_title_counter:function(title_element){
				var char_count = jQuery(title_element).val().length;
				var max = gm_attachments.title_max_length;
				var left = jQuery(title_element).hasClass('inittext') ? max : max - char_count;
				var s = (left > 1 || left < -1) ? 's' : '';
				var reste = 'Reste ';
				
				var span = jQuery(title_element).parents('.ligne-champs').next('.ligne-messages').find('span');
				if( !span.hasClass('message-erreur') ){
					span.text(reste + left +' signe'+ s);
				}
				
			},
			update_attachment_description_counter:function(description_element){
				var char_count = jQuery(description_element).val().length;
				var max = gm_attachments.description_max_length;
				var left = jQuery(description_element).hasClass('inittext') ? max : max - char_count;
				var s = (left > 1 || left < -1) ? 's' : '';
				var reste = left == gm_attachments.description_max_length ? '' : 'Reste ';
				var span = jQuery(description_element).parents('.ligne-champs').next('.ligne-messages').find('span');
				span.text(reste + left +' signe'+ s);
				if( left < 0 ){
					span.addClass('message-erreur');
					span.removeClass('message-normal');
					jQuery(description_element).addClass('erreur');
				}else{
					span.addClass('message-normal');
					span.removeClass('message-erreur');
					jQuery(description_element).removeClass('erreur');
				}
			}
	
	}
	
	gm_attachments.init();
	
	//----------------------------------------------------------------------
	//Neov:
	
	// affichage formulaire pieces jointes
	var attachItemLenght = 0;
	var inputFileName = $('.attache-template').find('.inputfile').attr('name'); 
	//GM: .text -> .attachment_title
	var inputTitreName = $('.attache-template').find('.attachment_title').attr('name');
	var inputDescName = $('.attache-template').find('textarea').attr('name');
	
	var processFieldName = function () {

		attachItemLenght = $('.attache-item').length;

		if (attachItemLenght == 1) {
			$('.avec-bouton').addClass ('cacher');
			$('.sans-bouton').show ();
			$('.bouton-fichiers-joints').removeClass ('cacher')
		}
		
		if (attachItemLenght == 0) {
			$('.avec-bouton').removeClass ('cacher');
			$('.sans-bouton').hide ();
			$('.bouton-fichiers-joints').addClass ('cacher')
		}

		$('.attache-item').each ( function (index) {
			var indexId = index + 1; 
			$(this).find('.numero').text('Fichier n°' + indexId );
			$(this).find('.inputfile').attr({ name: inputFileName + indexId, id: inputFileName + indexId });
			$(this).find('.text').attr({ name: inputTitreName + indexId, id: inputTitreName + indexId });
			$(this).find('textarea').attr({ name: inputDescName + indexId, id: inputDescName + indexId });

			//GM:
			$(this).find('.upload_file_path').attr({ id: 'upload_file_path' + indexId });
			$(this).find('.upload_file_button').attr({ id: 'upload_file_button' + indexId });
			$(this).find('.uploaded_file').attr({ id: 'uploaded_file' + indexId, name: 'uploaded_file' + indexId });
			$(this).find('.message-chargement-fin').attr({ id: 'message-chargement-fin' + indexId });
			$(this).find('.message-chargement-encours').attr({ id: 'message-chargement-encours' + indexId });
			$(this).find('.message-chargement-erreur').attr({ id: 'message-chargement-erreur' + indexId });
			gm_attachments.update_attachment(indexId,attachItemLenght);
			//End GM
			
			$(this).find("a[title='Supprimer']").click ( function () {
				//console.log ($(this).parents('.attache-item'));
				// pour resoudre le probleme de bouton qui flotte dans Ie à cause du position relative du bouton arrondi
				if ( $.browser.msie ) {
					$('.form-boutons a').css ({ position:'static' });
				}
				
				$(this).parents('.attache-item').slideUp("fast", function () { 
					$(this).remove();
					processFieldName ();				
					// remettre la position:relative dans IE du bouton arrondi sinon le fond du bouton ne s'affiche pas
					if ( $.browser.msie ) {	
						$('.form-boutons a').css ({ position:'relative' });
					}
				})				

				return false;
			})
			
			$(this).find ('.toclear').focus ( function () {
				clearField(this);
			});

			$(this).find ('.toclear').blur ( function () {
				restoreField(this);
			});
		});
		
	}

	var clearField = function ( field ) {
		if ( $(field).attr('title') == $(field).val()) {
			$(field).val('');
			$(field).removeClass('inittext');
		}
	}

	var restoreField = function ( field ) {
		if ( $(field).val() == '') {
			$(field).val( $(field).attr('title') );
			$(field).addClass('inittext');
		}
	}

	$('.attach-file').click ( function () {

		

		// attachItemLenght = $('.attache-item').length;

		

		// pour resoudre le probleme de bouton qui flotte dans Ie à cause du position relative du bouton arrondi

		if ( $.browser.msie ) {

			$('.form-boutons a').css ({ position:'static' });

		}

		

		var $template = $($('.attache-template').html ());

		

		/*if (attachItemLenght == 0) {

			$('.avec-bouton').addClass ('cacher');

			$('.sans-bouton').show ();

			$('.bouton-fichiers-joints').removeClass ('cacher')

		}*/

		

		var $attachItem = $('<li class="attache-item clearfix" style="display:none;"></li>');

		$attachItem.append ($template);

		$('.forum-pieces-jointes').append ($attachItem);

		

		// traitement des noms des champs

		processFieldName ();

		

		var itemLength = $('.forum-pieces-jointes').find('>li').length ;

		

		//console.log ( itemLength, $(this).position().top );

		if ( $(this).position().top > 0 ) {

			$.scrollTo( $(this).position().top - 10, 800 );

		}

		

		$('.forum-pieces-jointes').find('>li').eq(itemLength - 1).slideDown( 'fast', function () { 

			// remettre la position:relative dans IE du bouton arrondi sinon le fond du bouton ne s'affiche pas

			if ( $.browser.msie ) {	

				$('.form-boutons a').css ({ position:'relative' });

			}

		 } );		

		

		

		return false;

	});
});
