// ==UserScript==
// @name           zAjaxEdit
// @description    Edition Ajax pour les forums
// @include        http://*.siteduzero.com/forum*
// @author         delphiki
// @version	0.6.0
// ==/UserScript==

if(typeof unsafeWindow == 'undefined') {
	window.unsafeWindow = window;
}

var $ = unsafeWindow.jQuery;
var hasEdited = false;
var zae_version = '0.6.0';
var zae_thread_url = 'http://www.siteduzero.com/forum-83-417267-userscript-zajaxedit.html';
var zae_dblclick = GM_getValue('zae_dblclick', true);
var zae_updates = GM_getValue('zae_updates', true);

$(function(){
	// début settings
	$('#popup_menu_compte > ul').append('<li><a href="#" id="zae_settings_link">zAjaxEdit</a></li>');
	
	$('#zae_settings_link').click(function(){
		$('#zae_settings').remove();
		var settings_html = '<div id="zae_settings" class="infobox">'
			+'<h3 class="special">Préférences zAjaxEdit'
				+'<a href="#" id="close_zae_settings" title="Fermer" style="float:right"><img src="Templates/images/designs/2/forum/supprimer.png" alt="Fermer" /></a>'
			+'</h3>'
			+'<div style="padding:15px;">'
				+'<input type="checkbox" name="zae_dblclick" id="zae_dblclick" /><label for="zae_dblclick">Édition au double-clic</label><br /><br />'
				+'<input type="checkbox" name="zae_updates" id="zae_updates" /><label for="zae_updates">Recherche automatique des mises à jour</label><br /><br />'
				+'<p style="text-align:center">'
					+'<input type="button" value="Enregistrer" id="zae_save" /><br /><br />'
					+'zAjaxEdit v'+zae_version+' - <a href="'+zae_thread_url+'">Sujet du forum</a>'
				+'</p>'
			+'</div>'
		+'</div>';
		
		$('body').append(settings_html);
		$('#zae_settings').css({
			'position':'fixed',
			'top':'50%',
			'left':'50%',
			'width':'400px',
			'height':'200px',
			'margin-top':'-100px',
			'margin-left':'-200px',
			'background-color':'white',
			'box-shadow':'3px 3px 5px #888',
			'-moz-box-shadow':'3px 3px 5px #888',
			'-webkit-box-shadow':'3px 3px 5px #888',
		}).hide().fadeIn();
		$('#zae_dblclick').attr('checked', zae_dblclick);
		$('#zae_updates').attr('checked', zae_updates);
		return false;
	});
	
	$('#close_zae_settings').live('click', function(){
		$('#zae_settings').remove();
		return false;
	});
	
	$('#zae_save').live('click', function(){
		zae_dblclick = $('#zae_dblclick').attr('checked');
		zae_updates = $('#zae_updates').attr('checked');
		GM_setValue('zae_dblclick', zae_dblclick);
		GM_setValue('zae_updates', zae_updates);
		$(this).after('<img src="Templates/images/designs/2/forum/resolu.png" alt="enregistré" style="position:absolute;margin-left:4px;" />');
		return false;
	});
	
	//fin settings

	// fonction qui vérifie les mises à jour du script
	function checkUpdate(){
		$.get(zae_thread_url,
			function(data){
				var version = $('h1', data).text();
				version = version.substr(24);
				if(version != zae_version){
					$('body').append('<div id="zajax_update" />');
					$('#zajax_update').hide();
					$('#zajax_update').append('Une nouvelle version (v'+version+') de zAjaxEdit est disponible !<br />');
					$('#zajax_update').append('<a href="http://www.siteduzero.com/forum-83-417267.html">Topic</a>');
					$('#zajax_update').append(' - <a href="http://www.delphiki.com/divers/zajaxedit.user.js">Téléchargement</a>');
					$('#zajax_update').css({
						'text-align':'center',
						'font-weight':'bold',
						'color':'#7d9b0a',
						'position':'fixed',
						'top':'0',
						'width':'100%',
						'padding':'15px',
						'background-color':'#f8fafd',
						'border-bottom':'2px solid #e3e7ec'
					}).slideDown();
					$('#zajax_update').hover(function(){$(this).css({'background-color':'#fdffe6'});},
						function(){$(this).css({'background-color':'#f8fafd'});
					});
					$('#zajax_update').click(function(){
						$(this).slideUp();
					});
				}
			}
		);
		GM_setValue('check_date', new Date().getTime()+'');
	}
	
	// on vérifie une fois par jour
	var jour = new Date().getTime();
	if(zae_updates && (jour - GM_getValue('check_date', jour-96400000)) > 86400000){
		checkUpdate();
	}
	
	function zAjaxEdit(link){
		hasEdited = true;
		// on retire le lien pour éditer
		var edit_link = link;
		edit_link.hide();
	
		var postId = link.attr('href').split('-')[2].split('.')[0];
		
		var msgBox = link.parent().parent().next().find('.boite_message');
		var msgBoxHtmlContent = msgBox.html();
		
		// on ajoute le lien pour fermer l'édition
		link.parent().append('<a href="#" id="close_edit_'+postId+'">[ Fermer l\'édition ]</a>');
		
		// si on ferme l'édition
		$('#close_edit_'+postId).click(function(){
			$('#ajaxedit_'+postId).hide();
			msgBox.fadeIn();
			$(this).remove();
			edit_link.show();
			edit_link.find('img').attr({
				src: 'http://www.siteduzero.com/uploads/fr/files/181001_182000/181126.png',
				title: 'Éditer (le formulaire est en cache)'
			});
			return false;
		});
		
		// si le formulaire existe déjà, on sort
		if($('#ajaxedit_'+postId).length){
			$('#ajaxedit_'+postId).show();
			msgBox.hide();
			return false;
		}
		
		msgBox.hide();
		msgBox.parent().append('<p id="loader_'+postId+'" class="barre_msg barre_info" style="text-align:center">Chargement...</p>');
	
		var url = link.attr('href');		
	
		$('<div id="ajaxedit_'+postId+'" />').load(url + ' form:last', function(){
			$('#loader_'+postId+'').remove();
			$(this).insertBefore(msgBox).hide().fadeIn();
			
			// ajout des scripts pour la zForm
			$.getScript('Templates/js/fr/form.min.js');
			$.getScript('Templates/js/xmlhttprequest.min.js');
			
			// Envoi du formulaire
			$('div.centre > input[name="send"]:last-child').click(function(){
				var target = $('#ajaxedit_'+postId+' form').attr('action');
				
				// On teste si c'est le premier post du topic
				if(target.split('-')[1] == 87)
					var firstPost = true;
				else
					var firstPost = false;
				
				var form_data = $('#ajaxedit_'+postId+' form').serialize()+'&send=true';
				$('#ajaxedit_'+postId).hide();
				msgBox.parent().append('<p id="loader_'+postId+'" class="barre_msg barre_info" style="text-align:center">Chargement...</p>');
				
				// poste le formulaire et récupère le résultat
				$.post(target,
					form_data,
					function(data){
						$('#loader_'+postId).remove();
						if(firstPost){
							var sentMsg = $('.boite_message:first', data).html();
							var bTitle = $('title', data).text();
							var arbre = $('#arbre a:last', data).text();
							var titre = $('h1.titre_forum', data).text();
							var titre2 = $('h2', data).text();
							
							$('title').text(bTitle);
							$('#arbre a:last').text(arbre).hide().fadeIn();
							$('h1.titre_forum').text(titre).hide().fadeIn();
							$('h2').text(titre2).hide().fadeIn();
						}
						else{
							var sentMsg = $('.liste_messages', data).find('#r'+postId).parent().parent().next().find('.boite_message').html();
						}
						var visiteurs = $('.liste_messages tfoot', data).html();
						$('.liste_messages tfoot').html(visiteurs).hide().fadeIn();
						msgBox.html(sentMsg).hide().fadeIn();
						$('#close_edit_'+postId).remove();
						edit_link.show();
						edit_link.find('img').attr({
												src: 'http://www.siteduzero.com/uploads/fr/files/181001_182000/181126.png',
												title: 'Éditer (le formulaire est en cache)'
												});
					}
				); // fin $.post()
				
				return false;
			}); // fin Envoyer
			
		}); // fin load du formulaire
		
	}
	
	// si on clique sur Editer
	$('td.dates a img[alt="Éditer"]').parent().click(function(){
		zAjaxEdit($(this));
		return false;
	});
	
	// si on double-clique sur le message
	$('.boite_message').dblclick(function(){
		if(zae_dblclick){
			var link = $(this).parent().parent().prev().find('td.dates a img[alt="Éditer"]').parent();
			zAjaxEdit(link);
		}
	});
	
	// Réponse rapide en ajax
	$('input[value="Plus d\'options"]').click(function(){
		var repBox = $(this).parent().parent();
		var repAction = repBox.attr('action');
		repBox.hide();
		var form_data = repBox.serialize()+'&plus_options=true';
			
		$('<p id="loader_rep" class="barre_msg barre_info" style="text-align:center">Chargement...</p>').insertBefore(repBox);
		$.post(repAction,
				form_data,
				function(data){
					$('#loader_rep').remove();
					$('form[method=post]', data).insertBefore(repBox).hide().fadeIn();
					// ajout des scripts pour la zForm
					$.getScript('Templates/js/fr/form.min.js');
					$.getScript('Templates/js/xmlhttprequest.min.js');
				}
		);
		
		return false;
	});	
});

// GM_ functions from http://www.howtocreate.co.uk/operaStuff/userJavaScript.html
function GM_setValue(cookieName, cookieValue, lifeTime){
	if(!cookieName) return
  	if(lifeTime == 'delete')
		lifeTime = -10
	else
		lifeTime = 31536000

	document.cookie = 'zae_' + escape(cookieName) + '=' + escape(cookieValue) + ';expires=' + (new Date((new Date()).getTime() + (1000 * lifeTime))).toGMTString() + ';path=/'
}

function GM_getValue(cookieName, oDefault){
	var cookieJar = document.cookie.split('; ')
	for(var x = 0; x < cookieJar.length; x++){
		var oneCookie = cookieJar[x].split('=')
		if(oneCookie[0] == escape('zae_' + cookieName)){
			if(unescape(oneCookie[1]) != 'false')
				return unescape(oneCookie[1])
			else
				return false
		}
	}
	return oDefault
}