/* ****************************************************

	@file         global.js
	@description  Comportements globaux
	@author       remi (ixmedia.com)
	vim: set noet ts=4 fdm=marker fenc=utf-8:

***************************************************** */

(function($) {

	$(function() {

/* @section Commun {{{
******************************************************************************/

/* @section Formulaire de connexion {{{
******************************************************************************/

		$('#connexion .connexion > a').click(function() {
			$(this).siblings().toggleClass('visible');
		});

		$('#connexion').each(function() {
			$(this).find('li.champ').each(function() {
				var label = $(this).find('label');
				var input = $(this).find('input');
				var label_text = label.text();
				if ( !input.is('.plein') ) {
					input.val( label_text );
				} else {
					if ( input.val() != label_text ) {
						input.addClass('focus')
					}
				}
				label.remove();

				if ( input.attr('type') == 'password' ) {
					var input_original = input.hide();
					$(this).append('<input type="text" id="'+input.attr('id')+'-fake" value="'+label_text+'" />');
					var input = $(this).find('#'+input.attr('id')+'-fake')
					input.focus(function() {
						if ( $(this).val() == label_text ) {
							input_original.focus().val('').show().focus().addClass('focus');
							input.hide();
						}
					})
					input_original.blur(function() {
						if ( $(this).val() == '' ) {
							input.show();
							input_original.hide().removeClass('focus');
						}
					});
				} else {
					input.focus(function() {
						if ( $(this).val() == label_text ) {
							$(this).val('').addClass('focus');
						}
					}).blur(function() {
						if ( $(this).val() == '' ) {
							$(this).val(label_text).removeClass('focus');
						}
					});
				}

			});
		});

/*}}}*/

/* @section Formulaire de recherche {{{
******************************************************************************/

		$('#s').not('.plein').focus(function() {
			if ( $(this).val() == this.defaultValue ) {
				$(this).val('').addClass('focus');
			}
		}).blur(function() {
			if ( $(this).val() == '' ) {
				$(this).val(this.defaultValue).removeClass('focus');
			}
		});

/*}}}*/

/* @section Userbar {{{
******************************************************************************/

		$('#userbar').each(function() {
			if ( !$(this).is('.ouverte')) {
				$(this).find('.intro').hide();
			}
			$(this).find('.userbar-toggle a').click(function() {
				var $this = $(this);
				$this.parents('#userbar').find('.intro').slideToggle(200, function() {
					if ( $(this).is(':visible') ) {
						$this.find('span').text('Fermer').addClass('fermer')
					} else {
						$this.find('span').text('Inscription').removeClass('fermer')
					}
				});
			});
		});

/*}}}*/

/* @section Recherche {{{
******************************************************************************/

	$('#recherche').each( function() {
		var $recherche = $(this);
		var $sugg = $(this).find('.suggestions').hide();
		var $champ = $(this).find('#s').attr('autocomplete', 'off');
		var timeout = null;

		$recherche.find('select').selectbox();

		$champ.bind('keyup', function() {
			clearTimeout(timeout);
			if ( $champ.val() == '' ) { $sugg.hide() }
			timeout = setTimeout(function(){
				$recherche.trigger('search');
				clearTimeout(timeout);
			}, 500);
		}).bind('dblclick', function() {
			$recherche.trigger('search');
		});

		$recherche.bind('search', function() {
			var val = $champ.val();
			if ( val != "" && val.length >= 3 ) {
				$.ajax({
					type : 'GET',
					dataType : 'json',
					data : { s : val },
					url : '/ajax/recherche.php',
					success : function(data) {
						$recherche.trigger('get_results', [data])
					}
				});
			} else {
				$sugg.hide();
			}
		}).bind('get_results', function(e,data) {
			$sugg.show().html('');
			if (data != '') {
				var output = '<ul>';
				$.each( data, function (k,v) {
					output += '<li><h3>'+k+'</h3><ul>';
					$.each(v, function() {
						output += '<li><a href="'+this.url+'">'+this.titre+'</a></li>';
					});
					output += '</ul>';
				});
				output += '</ul>';
			}
			else {
				var output = '<p class="aucun">Aucun résultat n’a été trouvé suite à votre recherche.</p>';
			}
			output += '<p class="proposer"><a href="/proposer/"><span>Proposer une émission</span></a></p>';
			
			$sugg.html(output);
			$('#overlay').trigger('update_proposer');

		}).bind('click', function(e) {
			if ( $(e.target).is('a, input:image, label, .selectbox, a > span, button, img') ) { return true; }
			e.preventDefault();
			return false;
		})

		$(document).click(function(e) {
			$sugg.hide();
		});
	});

/*}}}*/

/*}}}*/

/*}}}*/

/* @section Accueil {{{
******************************************************************************/

/* @section En vedette {{{
******************************************************************************/

		$('.template-accueil #vedette').each(function() {
			var $v = $(this);
			$v.find('.nav a').bind('click', function() {
				$( $(this).attr('href') ).show().siblings().hide();
				$(this).parent().hide().siblings().show();
				return false;
			}).eq(0).trigger('click');
		});

/*}}}*/

/* @section Explorer {{{
******************************************************************************/

		$('.template-accueil #explorer').each(function() {
			var $v = $(this);
			$v.find('.nav a').bind('click', function() {
				$( $(this).attr('href') ).show().siblings().hide();
				$(this).parent().addClass('active').siblings().removeClass('active');
				return false;
			}).eq(0).trigger('click');
		});

/*}}}*/

/*}}}*/

/* @section Fiche {{{
******************************************************************************/

/* @section Médias {{{
******************************************************************************/

		$('.template-fiche .medias-contenu').each(function() {
			var $v = $(this);
			$v.find('.nav a').bind('click', function() {
				$( $(this).attr('href') ).show().siblings().hide().find('.media-media').html('');
				$( $(this).attr('href') ).find('.viewport a').eq(0).trigger('click');
				$( $(this).attr('href') ).find('.liste').trigger('reset');
				$(this).parent().addClass('active').siblings().removeClass('active');
				return false;
			}).eq(0).trigger('click');
		});

		$('.template-fiche .medias-contenu .liste').each(function() {
			var step = 360;
			var liste = $(this).find('.viewport ul');
			var position = 0;
			var $prev = $(this).find('.prev');
			var $next = $(this).find('.next');
			var largeur = 9999;
			var max = false;
			var $this = $(this);

			$(this).bind('set_largeur', function(e) {
				var l  = 0;
				$(this).find('.viewport li').each(function() {
					l += $(this).width()+6
				});
				largeur = l-462;
				if ( l < 469 ) {
					max = true;
					update_nav();
				}
			});

			$(this).bind('reset', function(e,l) {
				liste.css('left', '0px')
				max = false;
				position = 0;
				//if ( largeur == 9999 ) { $(this).trigger('set_largeur') }
				$(this).trigger('set_largeur')
				update_nav();
			});

			$(this).find('.liste-nav a').click(function() {
				if ( $(this).parent().is('.prev-inactif, .next-inactif') ) { return false; }
				deplacer( ($(this).parent().is('.prev-inactif, .prev')?-1:1));
				return false;
			});

			$(this).find('.viewport a').click(function() {
				$(this).parent().addClass('actif').css('opacity', 1).siblings().css('opacity', 0.5).removeClass('actif');
				var m = $(this).parent().metadata();
				var cadre = $this.prev().find('.media-media');
				if ( m.html ) {
					cadre.html( unescape( m.html ) );
				}
				cadre.toggleClass('media-media-avec-padding', ( m.largeur < 518 ) )
				cadre.find('img').css('margin-top', ((382-parseInt(m.hauteur))/2)+'px');
				return false;
			})

			function update_nav() {
				if ( position <= 0 ) {
					$prev.addClass('prev-inactif').removeClass('prev')
				} else {
					$prev.addClass('prev').removeClass('prev-inactif')
				}
				if ( max ) {
					$next.addClass('next-inactif').removeClass('next')
				} else {
					$next.addClass('next').removeClass('next-inactif')
				}
			}
			update_nav();

			function deplacer(sens) {
				position = position + (sens*1);
				var new_left = -1 * step * position;

				max = false;
				if ( position <= 0 ) { new_left = 0; }
				if ( new_left < (-1*largeur) ) { new_left = -1*largeur; max = true; }

				liste.stop().animate({
					left : new_left + 'px'
				},{
					duration: 200
				});
				update_nav();
			}
		}).eq(0).find('.viewport a').eq(0).trigger('click');

/*}}}*/

/* @section Liste de soumissions {{{
******************************************************************************/

		$('.template-fiche .liste-soumissions').each(function() {
			$(this).find('.tous').next().hide().prev().find('a').click(function() {
				var $this = $(this);
				$(this).parent().hide().next().show().next().show();
				return false;
			});
			$(this).find('.fermer a').click(function() {
				$(this).parent().hide().prev().hide().prev().show();
			});
			$(this).find('.vote a').click(function() {
				var $this = $(this);
				if ( $this.parent().is('.desactive') ) { return false; }
				var meta = $(this).metadata();
				var o = {
					type : meta.type,
					id : meta.id,
					action : $this.is('.up') ? 'a' : 'p'
				}
				$.ajax({
					url : '/ajax/vote.php',
					type : 'POST',
					dataType : 'json',
					data : o,
					success : function(data) {
						$this.parent().addClass('desactive').find('.up').text(data.aime).parent().find('.down').text(data.aimepas)
						$this.addClass('choisi')
					}
				})
				return false;
			});
		});

/*}}}*/

/* @section Commentaires {{{
******************************************************************************/

		$('.template-fiche #commentaires, .template-blogue-billet #commenter').each(function() {
			$(this).find('.tous').next().hide().prev().find('a').click(function() {
				var $this = $(this);
				$(this).parent().hide().next().show().next().show();
				return false;
			});
			$(this).find('.fermer a').click(function() {
				$(this).parent().hide().prev().hide().prev().show();
			});
			$(this).find('.commenter a').click(function() {
				if ( $('#commenter').is(':visible') ) {
					$('#commenter').slideUp(300);
				} else {
					var input = null;
					$('#commenter').show().find('input, textarea').eq(0).each(function() {
						input = this;
					});
					$('html').animate({
						scrollTop : ( $('#commentaires').position().top + $('#commenter').position().top ) +'px'
					},{
						duration: 600,
						complete: function() {
							setTimeout(function() {
								if ( $(input).is(':visible') ) {
									input.focus();
								}
							}, 1000);
						}
					});
				}
				return false;
			});
			$(this).find('form').submit(function() {
				var $form = $(this);
				$.ajax({
					type : 'POST',
					dataType : 'json',
					url : '/ajax/commentaire.php',
					data : $form.serialize(),
					success : function(data) {
						$form.find('.message').remove();
						if ( data && data.succes ) {
							$('#commentaires .premiere-partie ul').prepend(data.html);
							$('#commentaires .commentslist').prepend(data.html);
							$form.find('input, textarea').val('')
						} else {
							$form.find('h2').after('<div class="message message-erreur"><p>Erreur! Le commentaire n’a pu être publié car le formulaire contient des erreurs.</p></div>');
						}
					}
				});
				return false;
			});
		});

/*}}}*/

/* @section Partager {{{
******************************************************************************/

		$('#infos .partager').each(function() {
			var $this = $(this);
			$this.find('.facebook').click(function() {
				var url = 'http://'+window.location.hostname+$(this).attr('href');
				var d = document,
				f = 'http://www.facebook.com/share',
				l = d.location,
				e = encodeURIComponent,
				p = '.php?src=bm&v=4&i=0&u=' + e(url) + '&t=' + e(d.title);
				a = function() { if (!window.open(f + 'r' + p, 'sharer', 'toolbar=0,status=0,resizable=1,width=626,height=436')) l.href = f + p };
				if (/Firefox/.test(navigator.userAgent)) setTimeout(a, 0);
				else { a() }
			})
		});

/*}}}*/

/*}}}*/

/* @section Overlay de modification {{{
******************************************************************************/


		$('#overlay').each(function() {
			var $this = $(this);
			var $form = $this.find('#overlay-form form');
			var $form_oubli = $this.find('#overlay-texte form');
			var $bg = $this.find('#overlay-bg').css('opacity', 0.75)
			var $usager = $form.find('.infos strong').text();

			var config = {
				'biographie' : {
					'label' : 'biographie',
					'preremplir' : function() {
						return $(this).parent().next().html()
					}
				},
				'synopsis' : {
					'label' : 'Synopsis',
					'preremplir' : function() {
						return $(this).parent().next().html()
					}
				},
				'artisans' : {
					'label' : 'Artisans',
					'preremplir' : function() {
						return $(this).prev().html()+"\n\n";
					}
				},
				'personnage' : {
					'label' : 'Personnages / Équipe technique',
					'preremplir' : function() {
						return $(this).prev().html()+"\n\n";
					}
				},
				'media' : {
					'label' : 'Proposer un média'
				},
				'signalement' : {
					'label' : 'Signalement'
				},
				'lien' : {
					'label' : 'Liens'
				}
			};

			function ajuster_hauteur() {
				var offset = $(window).scrollTop() + 100;
				$this.find('#overlay-form, #overlay-texte').css('top', offset+'px')
				$this.find('#overlay-fermer').css('top', (offset-10)+'px')
			}

			function ouvrir(classe) {
				ajuster_hauteur();
				$this.show().find('textarea:visible, input:visible').eq(0).each(function() {
					this.focus();
				});
				$this.find('.'+classe).show().siblings().hide();
			}

			function fermer() {
				$this.hide();
				$form.find('.message').hide();
				$form.find('.overlay-form-formulaires, .bouton').show();
				$form_oubli.find('.message').hide().parent().siblings().show();
			}

			function preremplir(o,e) {
				var c = config[o.type];
				if ( o.type == "signalement" ) { o.type = ''; }
				$form.find('.type').html(c.label);
				$form.find('.infos span').html(c.label);
				if ( c.preremplir  && o.code != 'a') {
					$form.find('textarea').val( c.preremplir.call(e).replace(/<[^>]+>/gm,'').replace(/^\s*/gm,'').replace(/\n/,"\r").replace(/\r/gm,"\n\n").replace(/&nbsp;/gm, ' '))
				} else {
					$form.find('textarea').val( '' )
				}
				
				$form.find('.infos strong').text( (o.auteur)?o.auteur:$usager )

				$form.find('#h-objet-type').val(o.type);
				o.id = o.id || '';
				$form.find('#h-objet-id').val(o.id);
				$form.find('#h-code').val(o.code);

				if ( o.type == 'media' ) {
					$form.find('.overlay-form-media').show().siblings().hide()
				} else {
					$form.find('.overlay-form-default').show().siblings().hide()
				}

			}

			$this.find('#overlay-fermer a, h1 a, .message .fermer').click(function() {
				fermer();
			});

			$this.find('a[href=#connexion]').click(function() {
				fermer();
				$('#connexion .connexion form').addClass('visible');
				window.scrollTo(0,1);
				return false;
			});

			$this.find('.overlay-form-media .onglets a').click(function() {
				var id = $(this).attr('href').replace(/^#/,'');
				$('.'+id).show().siblings('div').hide();
				$(this).parent().addClass('active').siblings().removeClass('active');
				var type = id.match(/overlay-form-media-([a-z]+)/)
				$this.find('input[name=media_type]').val(type[1])
				return false;
			});

			$form.submit(function() {
				var f = $(this);
				$.ajax({
					type : 'POST',
					dataType : 'json',
					data : f.serialize(),
					url : '/ajax/demande.php',
					success : function(data) {
						if ( data && data.succes ) {
							$form.find('.overlay-form-formulaires, .bouton').hide();
							$form.find('.message.succes').show();
							$form.find('.message.erreur').hide();
						} else {
							$form.find('.message.erreur').show().find('ul').remove();
							var output = '';
							$.each(data.erreurs, function() {
								output += '<li>'+this+'</li>';
							});
							$form.find('.message.erreur').append('<ul>'+output+'</ul>');
						}
					}
				});
				return false;
			});

			$form_oubli.submit(function() {
				var f = $(this);
				$.ajax({
					type : 'POST',
					dataType : 'json',
					data : f.serialize(),
					url : '/ajax/motdepasse.php',
					success : function(data) {
						if ( data && data.succes ) {
							$form_oubli.find('.messages').siblings().hide();
							$form_oubli.find('.message.succes').show();
							$form_oubli.find('.message.erreur').hide();
						} else {
							$form_oubli.find('.message.erreur').show().find('ul').remove();
							var output = '';
							$.each(data.erreurs, function() {
								output += '<li>'+this+'</li>';
							});
							$form_oubli.find('.message.erreur').append('<ul>'+output+'</ul>');
						}
					}
				});
				return false;
			});

			if ( $('#h-image-fichier').length ) {
				new AjaxUpload('h-image-fichier', {
					action: '/ajax/demande-upload.php',
					name: 'userfile',
					data: {},
					autoSubmit: true,
					responseType: 'json',
					onChange: function(file, extension){},
					onSubmit: function(file, extension) {},
					onComplete: function(file, response) {
						if ( response.succes == 1 ) {
							$('#h-image-fichier').after('<span class="fichier">'+response.fichier+' <a href="javascript://" onclick="$(this).parent().prev().show(); $(this).parent().next().remove(); $(this).parent().remove()"><b>[X]</b></a></span><input type="hidden" name="image" value="'+response.fichier+'" />')
							$('#h-image-fichier').hide();
						} else {
						}
					}
				});
			}

			$('a.modification').click(function() {
				var meta = $(this).metadata();
				preremplir(meta, this);
				ouvrir('demande-modification');
				return false;
			});

			$this.bind('update_proposer', function() {
				$('body').not('.template-connecte').find('.proposer a').click(function() {
					ouvrir('demande-modification')
					return false;
				});
			}).trigger('update_proposer');

			$('#connexion .oubli a').click(function() {
				ouvrir('oubli-motdepasse');
				return false;
			});

		});

/*}}}*/

	})

	$(window).load(function() {
		$('.medias-contenu .liste .viewport ul').eq(0).trigger('set_largeur');
	});

})(jQuery);
