/**
 * Copyright Desgranges Mickael mickael@4publish.com
 * 
 * Ce logiciel est un programme informatique servant à la création d'application
 * web.
 * 
 * Ce logiciel est régi par la licence CeCILL-B soumise au droit français et
 * respectant les principes de diffusion des logiciels libres. Vous pouvez
 * utiliser, modifier et/ou redistribuer ce programme sous les conditions de la
 * licence CeCILL-B telle que diffusée par le CEA, le CNRS et l'INRIA sur le
 * site "http://www.cecill.info".
 * 
 * En contrepartie de l'accessibilité au code source et des droits de copie, de
 * modification et de redistribution accordés par cette licence, il n'est offert
 * aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, seule une
 * responsabilité restreinte pèse sur l'auteur du programme, le titulaire des
 * droits patrimoniaux et les concédants successifs.
 * 
 * A cet égard l'attention de l'utilisateur est attirée sur les risques associés
 * au chargement, à l'utilisation, à la modification et/ou au développement et à
 * la reproduction du logiciel par l'utilisateur étant donné sa spécificité de
 * logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve
 * donc à des développeurs et des professionnels avertis possédant des
 * connaissances informatiques approfondies. Les utilisateurs sont donc invités
 * à charger et tester l'adéquation du logiciel à leurs besoins dans des
 * conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs
 * données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes
 * conditions de sécurité.
 * 
 * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez pris
 * connaissance de la licence CeCILL-B, et que vous en avez accepté les termes.
 * 
 * @author Desgranges Mickael
 * @license CeciLL-B
 * @link http://4publish.com
 */
(function($) {
	var methods = {};
	var t = {};
	methods.init = function(params) {
			t.options = {
				url_rpc_inscription: $4p.glob('url_static_module')+'/mod_User/Inscription/1_static/User.Inscription.jsonRpc.js',
				url_themes  : $4p.glob('url_static_module')+'/mod_Coment/1_static/themes', 
				url_static  : $4p.glob('url_static_module')+'/mod_Coment/1_static/',
				url_rpc 	: $4p.glob('url')+'/mod_Coment/json',
				id_source	: 0,
				type_source : 'coment',
				title		: ' un commentaire ...',
				auth: function () {
					
				},
				inscription: function () {
					
				}
			};		
			
			
			var op = jQuery.extend(t.options, params);			
			$4p.scriptLoad(t.options.url_static+'/coment.jsonRpc.js');
			t.rpc = $4p.mod_Coment_rpc(t.options.url_rpc);
			
			t._tpl_postComent  = $4p.tpl(t.options.url_themes+'/js_template/post_coment.html');
			t._tpl_threadComent = $4p.tpl(t.options.url_themes+'/js_template/thread_coment.html');
			t._tpl_auth = $4p.tpl(t.options.url_themes+'/js_template/auth.html');
			
			return this.each(function() {
				var data = {};
				var that = this;				
				var r = t._tpl_postComent.render(data);
				
				$(this).html('<div class="coment"><div class="post"></div><div class="thread"></div></div>');
				$('.post',this).html(r);			
				$(this).coment('getComent',t.options.id_source,t.options.type_source);				
				
				var textarea = $('.post',this).find('textarea');
				var button   = $('.post',this).find('button');			
				button.click(function() {					
					$(that).coment('addComent');
				});		
			});	
	};
	
	methods.getComent = function () { 
		var id_source   = t.options.id_source;
		var type_source = t.options.type_source;
		var that = this;
		$('.thread',that).html('');
		t.rpc.getComentThread(id_source,type_source).addCallback(function(r) {
			if ( !r.error ) { 				
				if ( typeof r.result.post != 'undefined' ) {
					var data = r.result;							
					var r = t._tpl_threadComent.render(data);
					
					$('.thread',that).html(r);
				}
			}			
		});		
	};
	
	methods.auth = function (dial) {
		var that = this;
		var mail       = $('.login-mail',dial).val();
		var password   = $('.login-pass',dial).val();	
		t.rpc.auth(password,mail).addCallback( function (r) { 
			if ( r.result ) { 
				dial.dialog("close");
				$(that).coment('addComent');
			}
			else { 
				$('.login-pass',dial).val('');	
				$4p.msg('erreur',"l'identification a échoué");
			}
		});
	};
	
	methods.inscription = function (dial) { 
		    var that = this;
		 	var alias      = $('.inscription-alias',dial).val();
			var mail       = $('.inscription-mail',dial).val();
			var password   = $('.inscription-pass',dial).val();							
			$4p.rpcWait(1);
			//if ( password && alias ) { 
				$4p.scriptLoad(t.options.url_rpc_inscription);
				var url_rpc = $4p.glob('url')+'/mod_User_Inscription/json';
				var rpc_ins =$4p.mod_User_Inscription_rpc(url_rpc);
				
				//{'mail':a, 'password':b, 'alias':c, 'last_name':d, 'first_name':e, 'birthday':f}
				rpc_ins.inscription(mail, password, alias, null, null, null).addCallback(function (r) {
					if ( !r.error ) {
						var x=null;
						for ( x in r.result.error ) $4p.msgError('erreur !',r.result.error[x]);													
						if (!x) { 
							dial.dialog("close");
							$(that).coment('addComent');
						}										
					}
					else $4p.msgError('erreur !',r.error.message);
					$4p.rpcWait(0);										
				});
			//}
			$4p.log('inscription');
	};
	
	methods.addComent = function () { 	
		var that = this;
		var id_source   = t.options.id_source;
		var type_source = t.options.type_source;
		var title = t.options.title;
		var text  = $('.post textarea',$(this)).val();
		
		t.rpc.addComentThread(id_source,type_source,title,text).addCallback(function(r) {
			if ( !r.error  ) { 
				var success = function () { 
					$('.coment-post',$(that)).find('textarea').val('');
					var q = $('<span class="coment-success">le commentaire à été ajouté <button class="oui">un autre commentaire ?</button></span>').insertAfter($('.coment-post',$(that)));
					$(q).find('button').click(function() { 
								$(q).remove();						
								$('.coment-post',$(that)).fadeIn();
					});					
				};
				$('.coment-post',$(that)).fadeOut(600,success);
				$(that).coment('getComent');
			}
			else if ( r.error.code == 401 ) { 								
				var dial = $('<div title="une identification est requise" />').dialog({ 				
					open: function () { 
						var data = {};						
						var r = t._tpl_auth.render(data);
						$(this).html(r);
						$('#auth-tab').tabs();
						$('.close-auth').click(function () {
							$(dial).dialog("close");
						});
						$('.coment-login', $(this)).click(function () { 
							$(that).coment('auth', dial);
						});
						$('.coment-inscription', $(this)).click(function () { 
							$(that).coment('inscription', dial);
						});
					},
					height: Math.round($(window).height()*0.77),
					width:  Math.round($(window).width()*0.77),
					'close': function () { 
						$(this).remove();
					}
				});
				
				
				
			}
		});		
	};

	$.fn.coment = function(method) {
		if (methods[method]) {
			return methods[method].apply(this, Array.prototype.slice.call(
					arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error('Method ' + method + ' fail jQuery.coment');
		}
	};

})(jQuery);
