// Affichage d'erreurs.
function alert_error(r)
{
	if (r == '')
	{
		r = 'unknown error.';
	}
	if (r.length > 500)
	{
		r = r.slice(0, 500) + '...';
	}
	alert('Error: ' + r);
}

// Global.
jQuery(function($)
{
	// Focus sur les champs de formulaires.
	$('.focus').focus();

	// Erreur sur un champ de formulaire.
	if (typeof field_error != 'undefined')
	{
		$('.box #f_' + field_error).parent().addClass('field_error');
	}

	// Lien de déconnexion.
	$('#deconnect_link').click(function()
	{
		$('#deconnect_input').click();
	});

	// Affichage d'éléments de la page courante.
	$('a[rel].show_parts').click(function()
	{
		var id = '#' + $(this).attr('rel');
		if ($(id).is(':hidden'))
		{
			$(id).show();
			$(id + ' .show_parts_focus').focus();
		}
		else
		{
			$(id).hide();
		}
	});

	// Édition du profil.
	$('#birthdate_reset').click(function()
	{
		$('.date_title').attr('selected', 'selected');
	});

	// Menu des langues.
	if ($('#lang_change').is('img'))
	{
		var timeout_lang_list;
		$('#lang_change, #lang_list span').click(function()
		{
			if ($('#lang_list div').is(':hidden'))
			{
				$('#lang_list div').fadeIn('fast');
			}
			else
			{
				$('#lang_list div').fadeOut('fast');
			}
		});
		$('#lang_change, #lang_list')
			.bind('mouseleave', function()
			{
				timeout_lang_list = setTimeout(function()
				{
					$('#lang_list div').fadeOut('fast');
				}, 500);
			})
			.bind('mouseenter', function()
			{
				clearTimeout(timeout_lang_list);
			});
		$('#lang_list li').click(function()
		{
			$('#new_lang').val($(this).find('a').attr('rel'));
			$('#change_lang').click();
		});
	}

	// Smilies.
	if ($('#smilies').is('span'))
	{
		$('#smilies img').click(function()
		{
			var start, end, scrollPos, smiley = ' ' + $(this).attr('alt') + ' ';
			textarea = document.getElementById('message');
			textarea.focus();
			if (typeof(document['selection']) != 'undefined')
			{
				document.selection.createRange().text = smiley;
				textarea.caretPos += smiley.length;
			}
			else if (typeof(textarea['setSelectionRange']) != 'undefined')
			{
				start = textarea.selectionStart;
				end = textarea.selectionEnd;
				scrollPos = textarea.scrollTop;
				textarea.value = textarea.value.substring(0, start)
					+ smiley+textarea.value.substring(end);
				textarea.setSelectionRange(start + smiley.length, start + smiley.length);
				textarea.scrollTop = scrollPos;
			}
		});
	}

	// Tablesorter.
	if ($('.sorter').is('table'))
	{
		$('table.sorter').tablesorter({sortList: [[0,0]]});
	}

	// Diaporama.
	if ($('#tool_diaporama').is('li'))
	{
		var diaporama = new Diaporama;
		var diaporama_options = { autoStart : diaporama_auto_start };
		//diaporama.start($('#tool_diaporama').find('a').attr('rel'), diaporama_options);

		$('#tool_diaporama').click(function()
		{
			$('#obj_tool_menu').hide();
			$('#obj_tools_link a').removeClass('tool_menu_open');
			diaporama.start($(this).find('a').attr('rel'), diaporama_options);
		});
	}

});

// Géolocalisation sur la page "carte du monde".
jQuery(function($)
{
	if (!$('#section_worldmap').is('body'))
	{
		return;
	}

	// Création de la map.
	var map_options = {
		center: new google.maps.LatLng(25, 5),
		mapTypeId: google.maps.MapTypeId.HYBRID,
		zoom: 2
    };
	var map = new google.maps.Map(document.getElementById('worldmap_canvas'), map_options);

	// Création des marqueurs.
	var infowindow;
	var create_marker = function(lat, lng, html, icon)
	{
		var marker = new google.maps.Marker(
		{
			icon: gallery_path + '/images/markers/' + icon,
			position: new google.maps.LatLng(lat, lng),
			map: map,
			shadow: gallery_path + '/images/markers/marker-shadow.png'
		});

		google.maps.event.addListener(marker, 'click', function()
		{
			if (infowindow)
			{
				infowindow.close();
			}
			else
			{
				infowindow = new google.maps.InfoWindow();
			}
			infowindow.setContent(html);
			infowindow.open(map, marker);
		});
	};

	// Images.
	for (var i = 0; i < geoloc_images.length; i++)
	{
		create_marker(
			geoloc_images[i]['latitude'],
			geoloc_images[i]['longitude'],
			geoloc_images[i]['html'],
			'marker-image.png'
		);
	}

	// Catégories.
	for (var i = 0; i < geoloc_categories.length; i++)
	{
		
		create_marker(
			geoloc_categories[i]['latitude'],
			geoloc_categories[i]['longitude'],
			geoloc_categories[i]['html'],
			'marker-album.png'
		);
	}
});

// Géolocalisation sur la page des images.
jQuery(function($)
{
	if (!$('#section_image').is('body')
	 || !$('#gmap_canvas').is('div'))
	{
		return;
	}

	// Création de la map.
	var latlng = new google.maps.LatLng(img_lat, img_long);
	var map_options = {
		center: latlng,
		mapTypeId: google.maps.MapTypeId.HYBRID,
		zoom: 10
    };
	var map = new google.maps.Map(document.getElementById('gmap_canvas'), map_options);

	// Création du marqueur.
	var marker = new google.maps.Marker(
	{
		icon: gallery_path + '/images/markers/marker-image.png',
		position: latlng,
		map: map,
		shadow: gallery_path + '/images/markers/marker-shadow.png'
	});
	google.maps.event.addListener(marker, 'click', function()
	{
		map.setCenter(latlng);
	});
});

// Vote.
jQuery(function($)
{
	if (!$('#image_rate').is('div'))
	{
		return;
	}

	// Initialisation.
	var rate_init = [];
	var rate_c = 0;
	var rate_i = 0;
	$('#image_rate img').each(function()
	{
		rate_init[rate_i] = $(this).attr('src');
		$(this)
			.attr('id', 'rate_' + rate_i)
			.attr('style', 'cursor:pointer')
			.bind('mouseenter', {id: $(this).attr('id')}, rate_over)
			.bind('mouseleave', {id: $(this).attr('id')}, rate_out)
			.bind('click', {id: $(this).attr('id')}, rate_click);
		rate_i++;
	});

	// Enregistrement du vote.
	function rate_click(e)
	{
		rate_c = 1;
		rate_i = 0;
		var rate = parseInt(e.data.id.replace(/[^\d]+/, '')) + 1;
		var temp = [];
		$('#image_rate img').each(function()
		{
			temp[rate_i] = $(this).attr('src');
			rate_i++;
		});
		$.post(gallery_path + '/ajax.php', {
			section: 'rate', rate: rate, id: img_id
		},
		function(r)
		{
			if (r == null)
			{
				return;
			}
			switch (r.status)
			{
				case 'success' :
					$('#image_stats #rate').html(image_stat_rate
						.replace(/%1\$s/, r.rate_visual)
						.replace(/%2\$s/, r.rate)
						.replace(/%3\$s/, r.votes)
					);
					rate_init = temp;
					break;

				case 'error' :
					alert_error(r.msg);
			}
			rate_c = 0;
		}, 'json');
	}

	// Survol par la souris.
	function rate_over(e)
	{
		if (rate_c)
		{
			return;
		}
		var rate = e.data.id.replace(/[^\d]+/, '');
		rate_i = 0;
		$('#image_rate img').each(function()
		{
			if (rate_i <= rate) {
				$(this).attr('src', $(this).attr('src').replace(/empty/, 'full'));
			}
			else
			{
				$(this).attr('src', $(this).attr('src').replace(/full/, 'empty'));
			}
			rate_i++;
		});
	}
	function rate_out(e)
	{
		if (rate_c)
		{
			return;
		}
		rate_i = 0;
		$('#image_rate img').each(function()
		{
			$(this).attr('src', rate_init[rate_i]);
			rate_i++;
		});
	}
});

// Outils.
jQuery(function($)
{
	var ajax_session;
	var ajax_report_timeout;
	var anim_speed = 0;
	var current_tool = '#obj_tool_menu';
	var change_icon = function()
	{
		$('#obj_tools_link').removeClass().addClass('obj_tool_menu_icon');
	};
	var hide_box = function()
	{
		clear_menu();
		$('.obj_tool_box').hide(anim_speed, change_icon);
		$('#obj_tools_link a').removeClass('tool_menu_open');
	};

	// Outils : menu.
	var timeout_menu;
	var hide_menu = function()
	{
		if ($('#obj_tool_menu').is(':hidden'))
		{
			return;
		}
		clear_menu();
		timeout_menu = setTimeout(function()
		{
			$('#obj_tool_menu').hide(anim_speed);
			if ($('#obj_tools_link').hasClass('obj_tool_menu_icon'))
			{
				$('#obj_tools_link a').removeClass('tool_menu_open');
			}
		}, 500);
	};
	var clear_menu = function()
	{
		clearTimeout(timeout_menu);
	};
	$('#obj_tool_menu').bind('mouseenter', clear_menu).bind('mouseleave', hide_menu);
	$('#obj_tools_link').bind('mouseenter', clear_menu).bind('mouseleave', hide_menu);
	$('#obj_tools_link').click(function()
	{
		clear_menu();
		if ($('#obj_tool_menu').is(':hidden'))
		{
			$(current_tool).hide(anim_speed, function()
			{
				$('#obj_tool_menu').show(anim_speed, change_icon);
				$('#obj_tools_link a').addClass('tool_menu_open');
			});
		}
		else
		{
			$('#obj_tool_menu').hide(anim_speed, function()
			{
				$('#obj_tools_link a').removeClass('tool_menu_open');
			});
		}
	});
	$('#obj_tool_menu .js_link').removeAttr('href');

	// Outils : boîtes.
	$('.obj_tool_title').click(function(){ $('#obj_tools_link').trigger('click'); });
	$('.obj_tool_box .cancel').click(hide_box);
	$('.obj_tool_box_link').each(function()
	{
		$(this).click(function()
		{
			current_tool = '#obj_' + $(this).attr('id');
			$('#obj_tool_menu').hide(anim_speed, function()
			{
				$(current_tool).show(anim_speed, function()
				{
					$('#obj_tools_link').removeClass();
					$('#obj_tools_link').addClass($(this).attr('id') + '_icon');
					$(current_tool + ' .obj_tool_focus:visible:first').focus();
				});
			});
		});
	});
	$('.obj_tool_box form').submit(function()
	{
		return false;
	});

	// Outils : rapports.
	var ajax_report = function(e)
	{
		$('#obj_tool_' + e + ' .message_success').ajaxStart(function()
		{
			if (ajax_session == e)
			{
				clearTimeout(ajax_report_timeout);
				$(this).addClass('loading');
				$('#obj_tool_' + e + ' .message_success span').hide();
				$('#obj_tool_' + e + ' .message_success').show();
				$('#obj_tool_' + e + ' input').attr('disabled', 'disabled');
				$('#obj_tool_' + e + ' textarea').attr('disabled', 'disabled');
			}
		});
		$('#obj_tool_' + e + ' .message_success').ajaxComplete(function()
		{
			if (ajax_session == e)
			{
				$(this).removeClass('loading');
				$('#obj_tool_' + e + ' input').removeAttr('disabled');
				$('#obj_tool_' + e + ' textarea').removeAttr('disabled');
			}
		});
	};
	var ajax_message_error = function(e, msg)
	{
		$('#obj_tool_' + e + ' .message').hide();
		$('#obj_tool_' + e + ' .message_error span').text(msg);
		$('#obj_tool_' + e + ' .message_error').show();
		ajax_report_timeout = setTimeout(
			function() { $('#obj_tool_' + e + ' .message_error').hide(); },
			4000
		);
	};
	var ajax_message_success = function(e)
	{
		$('#obj_tool_' + e + ' .message_success span').show();
		ajax_report_timeout = setTimeout(
			function() { $('#obj_tool_' + e + ' .message_success').hide(); },
			3000
		);
	};

	// Outil : administrer.
	$('#tool_admin').click(function()
	{
		window.location = $('#tool_admin a').attr('href');
	});

	// Outil : ajout aux favoris.
	$('#obj_tool_menu li#tool_fav').click(function()
	{
		ajax_session = 'fav';
		$.post(gallery_path + '/ajax.php', { section: 'favorite', id: img_id },
		function(r)
		{
			if (r == null)
			{
				return;
			}
			switch (r.status)
			{
				case 'success:1' :
					$('#position .current').addClass('favorite');
					$('#tool_fav a').text(msg_fav_del);
					$('#tool_fav .icon').addClass('icon_fav_remove');
					$('#tool_fav .icon').removeClass('icon_fav_add');
					break;
				case 'success:0' :
					$('#position .current').removeClass('favorite');
					$('#tool_fav a').text(msg_fav_add);
					$('#tool_fav .icon').removeClass('icon_fav_remove');
					$('#tool_fav .icon').addClass('icon_fav_add');
					break;
				case 'error' :
					alert_error(r.msg);
					break;
			}
		}, 'json');
	});

	// Outil : édition.
	if ($('#obj_tool_edit').is('div'))
	{
		// Langues d'édition.
		if ($('#edit_langs select').is('select'))
		{
			$('#edit_langs select').change(function()
			{
				var lang = $(this).find(':selected').val();
				$('#obj_tool_edit label.icon_lang').parents('p').hide();
				$('#obj_tool_edit label.icon_' + lang).parents('p').show();
			});
		}

		// Initialisation.
		ajax_report('edit');
		var edit_data = [];
		edit_data['title'] = [];
		edit_data['desc'] = [];
		var edit_title = [];
		var edit_desc = [];
		$('.edit_desc').each(function()
		{
			var lang = $(this).attr('name').replace(/(title|desc|\[|\])/g, '');
			edit_title[lang] = $('#edit_title_' + lang).val();
			edit_desc[lang] = $('#edit_desc_' + lang).val();
			edit_data['title'][lang] = $('#edit_title_' + lang).val();
			edit_data['desc'][lang] = $('#edit_desc_' + lang).val();
		});

		// Envoi du formulaire.
		$('#obj_tool_edit .submit').click(function()
		{
			var edit_urlname = $('#edit_urlname').val();
			var edit_tags = $('#edit_tags').val();
			$('.edit_desc').each(function()
			{
				var lang = $(this).attr('name').replace(/(title|desc|\[|\])/g, '');
				edit_title[lang] = $('#edit_title_' + lang).val();
				edit_desc[lang] = $('#edit_desc_' + lang).val();
			});
			ajax_session = 'edit';
			$.post(gallery_path + '/ajax.php', {
				section: typeof img_id != 'undefined' ? 'edit-image' : 'edit-category',
				id: typeof img_id != 'undefined' ? img_id : cat_id,
				data: $('#obj_tool_edit form').serialize(),
				urlname: edit_urlname,
				tags: edit_tags,
				anticsrf: anticsrf
			},
			function(r)
			{
				if (r == null)
				{
					return;
				}
				switch (r.status)
				{
					// Aucun changement.
					case 'nochange' :
						$('#obj_tool_edit .message').hide();
						break;

					// Modification réussie.
					case 'success' :

						// Description des images.
						if (typeof img_id != 'undefined') {
							if ($('#image_description').is('div')
							&& edit_desc[user_lang] == '') {
								$('#image_description').slideUp('slow', function()
								{
									$('#image_description').remove();
									if (!$('#image_infos').children().is('div'))
									{
										$('#image_infos').remove();
										$('#image_ratecom').removeClass('image_column');
									}
								});
							}
							else if (!$('#image_description').is('div')
							&& edit_desc[user_lang] != '')
							{
								var image_description = '<div style="display:none"' 
									+ 'class="image_column_bloc" id="image_description">'
									+ '<h2>' + text_desc + '</h2><p></p></div>';
								if ($('#image_infos').is('div'))
								{
									if ($('#image_tags').is('div'))
									{
										$('#image_tags').after(image_description);
									}
									else
									{
										$('#image_infos').prepend(image_description);
									}
								}
								else
								{
									var image_column;
									if ($('#image_ratecom').is('div'))
									{
										image_column = ' class="image_column"';
										$('#image_ratecom').addClass('image_column');
									}
									$('#image_container').after(
										'<div' + image_column  + ' id="image_infos">'
										+ image_description + '</div>'
									);
								}
							}
							$('#image_description p').html(r.desc);
							$('#image_description').slideDown('slow');
						}

						// Description des catégories.
						else if (page == 1)
						{
							if ($('#cat_description').is('div')
							&& edit_desc[user_lang] == '')
							{
								$('#cat_description').slideUp('slow', function()
								{
									$('#cat_description').remove();
								});
							}
							else if (!$('#cat_description').is('div')
							&& edit_desc[user_lang] != '')
							{
								$('#position').after(
									'<div style="display:none" id="cat_description"><p></p></div>'
								);
							}
							$('#cat_description p').html(r.desc);
							$('#cat_description').slideDown('slow');
						}

						// Titre.
						if (typeof img_id != 'undefined')
						{
							$('#position .current a').html(r.title);
						}

						// Tags.
						if (typeof text_tags != 'undefined' && typeof r.tags == 'object')
						{
							// Si aucun tag, on supprime le bloc des tags,
							// et le bloc d'infomations de l'image si nécessaire.
							if ($('#image_tags').is('div') && r.tags == '')
							{
								$('#image_tags').slideUp('slow', function()
								{
									$('#image_tags').remove();
									if (!$('#image_infos').children().is('div'))
									{
										$('#image_infos').remove();
										$('#image_ratecom').removeClass('image_column');
									}
								});
							}

							// Sinon, si le bloc de tags n'existe pas, on le crée, de même
							// que le bloc des informations de l'image si nécessaire.
							else if (!$('#image_tags').is('div') && r.tags != '')
							{
								var image_tags = '<div style="display:none"' 
									+ 'class="image_column_bloc" id="image_tags">'
									+ '<h2>' + text_tags + '</h2><ul></ul></div>';
								if ($('#image_infos').is('div'))
								{
									$('#image_infos').prepend(image_tags);
								}
								else
								{
									var image_column;
									if ($('#image_ratecom').is('div'))
									{
										image_column = ' class="image_column"';
										$('#image_ratecom').addClass('image_column');
									}
									$('#image_container').after(
										'<div' + image_column  + ' id="image_infos">'
										+ image_tags + '</div>'
									);
								}
							}

							// Construction de la liste des tags.
							if (r.tags != null)
							{
								var tags_list = '';
								for (var i = 0; i < r.tags.length; i++)
								{
									tags_list += '<li class="icon icon_tag"><a href="'
										+ r.tags[i].tag_link + '">'
										+  r.tags[i].tag_name + '</a></li>' + "\n"
								}
								$('#image_tags ul').html(tags_list);
							}

							$('#image_tags').slideDown('slow');
						}

						$('.edit_desc').each(function()
						{
							var lang = $(this).attr('name').replace(/(title|desc|\[|\])/g, '');
							if (typeof r.desc_langs != 'undefined'
							 && typeof r.desc_langs[lang] != 'undefined')
							{
								edit_data['desc'][lang] = r.desc_langs[lang];
								$('#edit_desc_' + lang).val(r.desc_langs[lang]);
							}
							if (typeof r.title_langs != 'undefined'
							 && typeof r.title_langs[lang] != 'undefined')
							{
								edit_data['title'][lang] = r.title_langs[lang];
								$('#edit_title_' + lang).val(r.title_langs[lang]);
							}
						});
						ajax_message_success('edit');
						break;

					// Avertissement.
					case 'warning' :
						ajax_message_error('edit', r.msg);
						break;

					// Erreur.
					case 'error' :
						$('#obj_tool_edit .message').hide();
						alert_error(r.msg);
				}
			}, 'json');
		});

		// Annulation.
		$('#obj_tool_edit .cancel').click(function()
		{
			$('.edit_desc').each(function()
			{
				var lang = $(this).attr('name').replace(/(title|desc|\[|\])/g, '');
				$('#edit_title_' + lang).val(edit_data['title'][lang]);
				$('#edit_desc_' + lang).val(edit_data['desc'][lang]);
			});
			return false;
		});
	}
});

// Uploadify.
jQuery(function($)
{
	if (typeof upload_tempdir == 'undefined')
	{
		return;
	}

	var alb_id;

	$('#uploadify').uploadify(
	{
		'auto' : false,
		'cancelImg' : style_path + '/icons/cancel.png',
		'fileDesc' : 'Images (*.jpg, *.gif, *.png)',
		'fileExt': '*.jpg;*.jpeg;*.gif;*.png;*.JPG;*.JPEG;*.GIF;*.PNG',
		'height': 50,
		'hideButton': true,
		'multi' : true,
		'queueID' : 'fileUploadQueue',
		'script' : gallery_path + '/uploader.php',
		'sizeLimit': max_file_size,
		'uploader' : gallery_path + '/uploader.swf',
		'width': 200,
		'wmode': 'transparent',
		'onComplete': function(event, queueID, fileObj, response, data)
		{
			if (response.substr(0, 8) == 'success:')
			{
				$('#fileUploadAdd').before(
					'<input name="files[]" type="hidden" value="'
						+ encodeURI(response.substr(8)) + '" />'
				);
			}
			else if (response.substr(0, 8) == 'warning:')
			{
				$('#fileUploadAdd').before(
					'<input name="warning[]" type="hidden" value="'
						+ encodeURI(response.substr(8)) + '" />'
				);
			}
			else if (response.substr(0, 6) == 'error:')
			{
				$('#fileUploadAdd').before(
					'<input name="error[]" type="hidden" value="'
						+ encodeURI(response.substr(6)) + '" />'
				);
			}
			else if (response != '')
			{
				alert(response);
				$('#uploadify').uploadifyClearQueue();
			}
		},
		'onAllComplete': function(event, data)
		{
			$('#fileUploadAdd').before(
				'<input name="cat_id" type="hidden" value="' + alb_id + '" />'
			);
			$('#fileUploadAdd').parents('form').submit();
		}
	});
	$('#fileUploadClear').click(function()
	{
		$('#uploadify').uploadifyClearQueue();
	});
	$('#fileUploadStart').click(function()
	{
		// L'objet sélectionné ne doit pas être une catégorie.
		$('#upload_categories option').each(function()
		{
			if ($(this).attr('selected'))
			{
				if ($(this).hasClass('category'))
				{
					alert(msg_upload_category);
					$('#upload_categories')
						.addClass('error')
						.focus()
						.blur(function()
						{
							$('#upload_categories').removeClass('error')
						});
				}
				else
				{
					alb_id = $(this).val();
				}
			}
		});
		if (!alb_id)
		{
			return;
		}

		$('#fileUploadButtons').slideUp('slow');
		$('#uploadify').uploadifySettings('scriptData',
			{
				'from': 'gallery',
				'id': alb_id,
				'session_token': upload_session_token,
				'tempdir': upload_tempdir
			});
		$('#uploadify').uploadifyUpload();
	});

	var uploader_init = function()
	{
		var offset = $('#fileUploadAdd').offset();
		$('#uploadifyUploader')
			.height($('#fileUploadAdd').outerHeight())
			.width($('#fileUploadAdd').outerWidth())
			.css({
				top: offset.top + 'px',
				left: offset.left + 'px'
			});
	};
	setTimeout(function(){uploader_init()}, 200);
});

