// 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();
			diaporama.start($(this).find('a').attr('rel'), diaporama_options);
		});
	}

});

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

	var create_marker = function(map, point, html, color)
	{
		var icon = MapIconMaker.createMarkerIcon({width: 32, height: 32, primaryColor: color});
		var marker_options = { icon: icon };
		var marker = new GMarker(point, marker_options);
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(html);
		});
		return marker;
	}

	var map = new GMap2(document.getElementById('worldmap_canvas'));
	var point;
	map.setCenter(new GLatLng(28, 5), 2);
	map.setMapType(G_HYBRID_MAP);
	map.addControl(new GMapTypeControl());
	map.addControl(new GLargeMapControl());
	map.enableScrollWheelZoom();

	// Images.
	for (var i = 0; i < geoloc_images.length; i++)
	{
		point = new GLatLng(geoloc_images[i]['latitude'], geoloc_images[i]['longitude']);
		map.addOverlay(create_marker(map, point, geoloc_images[i]['html'], '#61D961'));
	}

	// Catégories.
	for (var i = 0; i < geoloc_categories.length; i++)
	{
		point = new GLatLng(geoloc_categories[i]['latitude'], geoloc_categories[i]['longitude']);
		map.addOverlay(create_marker(map, point, geoloc_categories[i]['html'], '#F2F260'));
	}
});

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

	var create_marker = function(map, point)
	{
		var icon = MapIconMaker.createMarkerIcon({width: 32, height: 32, primaryColor: '#61D961'});
		var marker_options = { icon: icon };
		var marker = new GMarker(point, marker_options);
		GEvent.addListener(marker, 'click', function() {
			map.setCenter(new GLatLng(img_lat, img_long), 10);
		});
		return marker;
	}

	var map = new GMap2(document.getElementById('gmap_canvas'));
	var point = new GLatLng(img_lat, img_long);
	map.setCenter(new GLatLng(img_lat, img_long), 10);
	map.setMapType(G_HYBRID_MAP);
	map.addControl(new GMapTypeControl());
	map.addControl(new GSmallMapControl());
	map.addOverlay(create_marker(map, point));
});

// 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)
		{
			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 = 'fast';
	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);
	};

	// Outils : menu.
	var timeout_menu;
	var hide_menu = function()
	{
		clear_menu();
		timeout_menu = setTimeout(function()
		{
			$('#obj_tool_menu').hide(anim_speed);
		}, 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);
			});
		}
		else
		{
			$('#obj_tool_menu').hide(anim_speed);
		}
	});
	$('#obj_tool_menu .js_link').removeAttr('href');

	// Outils : boîtes.
	$('.obj_tool_box').css('opacity', 0.95);
	$('.obj_tool_title').click(hide_box);
	$('.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
		);
	};

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

	// Outil : enregistrer.
	$('#obj_tool_menu li#tool_save').click(function()
	{
		$('#obj_tool_menu').hide();
		var img = $('#image img').attr('src').replace(gallery_path, '');
		window.location = gallery_path + '/download.php?img=' + img;
	});

	// Outil : ajout aux favoris.
	if ($('#position .current.favorite').is('span'))
	{
		$('#tool_fav .icon').addClass('icon_fav_remove');
		$('#tool_fav .icon').removeClass('icon_fav_add');
	}
	$('#obj_tool_menu li#tool_fav').click(function()
	{
		$('#obj_tool_menu').hide();
		ajax_session = 'fav';
		$.post(gallery_path + '/ajax.php', { section: 'favorite', id: img_id, anticsrf: anticsrf },
		function(r)
		{
			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)
			{
				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;

	$('#fileUpload').fileUpload(
	{
		'uploader': gallery_path + '/uploader.swf',
		'cancelImg': style_path + '/icons/cancel.png',
		'script': gallery_path + '/uploader.php',
		'multi': true,
		'fileDesc': 'Images (*.jpg, *.gif, *.png)',
		'fileExt': '*.jpg;*.jpeg;*.gif;*.png',
		'wmode': 'transparent',
		'width': 200,
		'height': 50,
		'hideButton': true,
		'displayData': 'speed',
		'simUploadLimit': 2,
		'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);
				$('#fileUpload').fileUploadClearQueue();
			}
		},
		'onAllComplete': function(event, data)
		{
			$('#fileUploadAdd').before(
				'<input name="cat_id" type="hidden" value="' + alb_id + '" />'
			);
			$('#fileUploadAdd').parents('form').submit();
		}
	});
	$('#fileUploadClear').click(function()
	{
		$('#fileUpload').fileUploadClearQueue();
	});
	$('#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');
		$('#fileUpload').fileUploadSettings('scriptData', '&sid=' + upload_sid
			+ '&tempdir=' + upload_tempdir + '&id=' + alb_id + '&from=gallery');
		$('#fileUpload').fileUploadStart();
	});

	$('#fileUploadUploader').width($('#fileUploadAdd').width() +
		parseInt($('#fileUploadAdd').css('padding-left')) +
		parseInt($('#fileUploadAdd').css('padding-right')) + 4);
	$('#fileUploadUploader').height($('#fileUploadAdd').height() + 6);
	$('#fileUploadUploader').bind('mouseenter', function()
	{
		$('#fileUploadAdd').addClass('hover');
	});
	var offset = $('#fileUploadAdd').offset();
	$('#fileUploadUploader').css(
	{
		top: offset.top,
		left: offset.left
	});
});

