//======================================================================//
//== About redmine.js
//==--------------------------------------------------------------------//
//== This file is part of puppets library, redmine class.
//== Copyright (c) 2009-2010 - Erwan LE LOSTEC
//== Licensed under the GPL version 2.0 license.
//== See LICENSE file or
//== http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
//==--------------------------------------------------------------------//
//== Contributor : Erwan LE LOSTEC
//==--------------------------------------------------------------------//
//== @requires jQuery v1.4 or later
//== 
//== Usage: 
//== 
//== $.redmine.settings.ajax_url = './ajax/redmine.ajax.php';
//== $.redmine();
//==
//======================================================================//
(function($) 
{
	$.redmine = function() 
	{
		$.redmine.loading();
	}
	$.extend($.redmine, 
	{
		settings: 
		{
			ajax_url			: "redmine.ajax.php",
			opacity      		: 0.5,
			overlay				: true,
			feedback_text		: "signaler un bug",
			close_text	   		: "×",
			error_header		: "<span class='red'>Oups !</span>",
			success_header		: "<span class='green'>Félicitations</span>",
			error_text			: "<p><b>Nous sommes désolé !</b></p><p>Une erreur est survenue lors de l'enregistrement de votre feedback. Essayez de recommencer ultèrieurement.</p>",
			success_text		: "<p><b>Merci de votre contribution !</b></p><p>Nous avons enregistré votre demande, et la traiterons dans les meilleurs délais.</p>",
			error_button		: "Recommencer",
			success_button		: "Fermer cette fenêtre",
			feedback_button		: "<a id='redmine-feedback'>&nbsp;</a>",
			feedback_html  		: "<div id='redmine'>\
								    \
								    <div id='redmine-front'>\
								     <span id='redmine-close'>&nbsp;</span>\
								     <ul>\
								      <li class='redmine-header'>Feedback</li>\
								      <li class='redmine-content'>\
								       <input type='hidden' id='redmine-tracker_id' name='redmine-tracker_id' value='1' />\
								       <p class='redmine-help'>Utilisez le feedback pour tout ce qui est suggestion, report de bugs, et autres problèmes.</p>\
								       <ul id='redmine-tracker'>\
								        <li onclick=\"$.redmine.check('redmine-tracker_id', 1);\"><span id='redmine-tracker_id1' class='redmine-radio selected'>✓</span><label>Problème/Bug</label></li>\
								        <li onclick=\"$.redmine.check('redmine-tracker_id', 2);\"><span id='redmine-tracker_id2' class='redmine-radio'>&nbsp;</span><label>Suggestion</label></li>\
								        <li onclick=\"$.redmine.check('redmine-tracker_id', 3);\"><span id='redmine-tracker_id3' class='redmine-radio'>&nbsp;</span><label>Assistance</label></li>\
								       </ul>\
								       <textarea id='redmine-description' name='redmine-description' class='needed' rows='5' cols='50'></textarea>\
								      </li>\
								      <li class='redmine-footer'><span id='redmine-send' class='redmine-button'>Envoyer le feedback</span></li>\
								     </ul>\
								    </div>\
								    \
								    <div id='redmine-back'>\
								     <ul>\
								      <li class='redmine-header'>Feedback</li>\
								      <li class='redmine-content'>\
								      </li>\
								      <li class='redmine-footer'><span id='redmine-button' class='redmine-button'>close</span></li>\
								     </ul>\
								    </div>\
								    \
								   </div>"
		},
		loading:function() 
		{
			init();
			$(document).trigger('loading.redmine');
		},
		check:function(input_id, value) 
		{
			check(input_id, value);
		},
		close:function() 
		{
			$(document).trigger('close.redmine');
			return false;
		},
		show:function() 
		{
			showOverlay();
			show();
			$(document).bind('keydown.redmine', function(e) { if(e.keyCode == 27) { $.redmine.close() }; return true; });
		}
	})
	
	function init(settings) 
	{/** @function init()
	  * called one time to setup redmine on this page
	  *
	  * @param		settings	<object>	the redmine settings.
	  *
	  * @return	nothing
	  **/
		$.redmine.settings.inited = true;
		
		$(document).trigger("init.redmine");
		
		if(settings) { $.extend($.redmine.settings, settings); };
		$("body").append($.redmine.settings.feedback_button);
		$("#redmine-feedback").html($.redmine.settings.feedback_text);
		$("#redmine-feedback").click($.redmine.show);
	}
	function show(settings) 
	{/** @function show()
	  * show redmine feedback form
	  *
	  * @param		settings	<object>	the redmine settings.
	  *
	  * @return	nothing
	  **/
	  	$(document).trigger("show.redmine");
		
		if(settings) { $.extend($.redmine.settings, settings); };
		
		$("body").append($.redmine.settings.feedback_html);
		
		$("#redmine-send").click(function() { addIssues(); } );
		
		$("#redmine-close").html($.redmine.settings.close_text);
		$("#redmine-close").click($.redmine.close);
	}
	function addIssues() 
	{/** @function addIssues()
	  * call an ajax to save the form
	  *
	  * @return	nothing
	  **/
	  	function onSuccess(data)
	  	{
	  		if(data == "false")
	  		{
	  			$("#redmine-back .redmine-header").html($.redmine.settings.error_header);
	  			$("#redmine-back .redmine-content").empty().html($.redmine.settings.error_text);
	  			$("#redmine-button").html($.redmine.settings.error_button);
	  			$("#redmine-button").click(function() { $("#redmine").removeClass("flip"); } );
	  		}
	  		else
	  		{
	  			$("#redmine-back .redmine-header").html($.redmine.settings.success_header);
	  			$("#redmine-back .redmine-content").empty().html($.redmine.settings.success_text);
	  			$("#redmine-button").html($.redmine.settings.success_button);
	  			$("#redmine-button").click(function() { $(document).trigger('close.redmine'); } );
	  		}
	  	}
	  	function onInit()
	  	{
	  		$("#redmine").addClass("flip");
	  		
	  	}
	  	
	  	var error_flag = false;
	  	var tab_input = $('.needed'); 
		for(var i = 0; i < tab_input.length; i++) { $(tab_input[i]).removeClass("redmine-needed"); if($(tab_input[i]).val() == '') { error_flag = true; $(tab_input[i]).addClass("redmine-needed"); } };
	  	
	  	if(error_flag == false ) 
	  	{
	  		$.ajax( { type:"POST", url:$.redmine.settings.ajax_url, data:"tracker_id="+ $("#redmine-tracker_id").val() +"&description="+ $("#redmine-description").val(), beforeSend:onInit, success:onSuccess } ); 
		}
	}
	function skipOverlay() 
	{/** @function skipOverlay()
	  * specify if we must show overlay or not
	  *
	  * @return	nothing
	  **/
		return $.redmine.settings.overlay == false || $.redmine.settings.opacity === null;
	}
	function showOverlay() 
	{/** @function showOverlay()
	  * show overlay
	  *
	  * @return	nothing
	  **/
		if(skipOverlay()) { return; };
		
		if($("redmine-overlay").length == 0) { $("body").append("<div id='redmine-overlay'></div>"); };
				
		$('#redmine-overlay').css('opacity', $.redmine.settings.opacity).fadeIn(900, function() { $('#redmine-overlay').click(function() { $(document).trigger('close.redmine') }) });
							
		return false;
	}
	function hideOverlay() 
	{/** @function hideOverlay()
	  * hide overlay
	  *
	  * @return	nothing
	  **/
		if(skipOverlay()) { return; };
		
		$('#redmine-overlay').fadeOut(900, function() { $("#redmine-overlay").remove(); })
		
		return false;
	}
	function check(input_id, value)
 	{/** @function check()
	  * hide overlay
	  *
	  * @param		input_id	<string>	the id of input.
	  * @param		value		<integer>	the value of input.
	  *
	  * @return	nothing
	  **/
	  	if(value != $("#"+ input_id).val())
 		{
 			$("#"+ input_id + $("#"+ input_id).val()).html("&nbsp;");
 			$("#"+ input_id).val(value);
 			$("#"+ input_id + $("#"+ input_id).val()).html("✓");
 		}
 	}
	$(document).bind('close.redmine', function() 
	{
		$(document).unbind('keydown.redmine');
		$(document).unbind('init.redmine');
			
		hideOverlay();
		$("#redmine").remove();
		
		$(document).unbind('show.redmine');
	});	
})(jQuery);
