var PhotoCommenter = {
	'photos' : null,
	'picUrl' : null, // текущая картинка

	Show: function(coords, jqObj) {
		var par = $('#PhotoComments');
		var dir = par.attr('albumDir');

		setTimeout(function() {
			PhotoCommenter.ShowCommentsDropDown(coords, jqObj, jqObj.children('a').attr('href'));
		}, 2000);

		if (!this.photos) {
			this.LoadXML(coords, jqObj, dir);
		} else {
			par.children('.wrapper_Form').hide();
			par.children('.wrapper_Comments').show();
			var curPicIndex = jqObj.parent().children("li").index(jqObj);
			var commentsList = 'комментариев нет';
			if (this.photos[curPicIndex].comments.length > 0) {
				var commentsList = this.BuildCommentsListHTML(this.photos[curPicIndex].comments);
			}
			$('#PhotoCommentsArea').removeAttr('class').html(commentsList);

			PhotoCommenter.picUrl = jqObj.children('a').attr('href');
			// document.getElementById('PhotoCommentsArea').innerHTML = commentsList;
		}
	},

	ShowCommentsDropDown: function(coords, jqObj, picUrl) {
		if (PhotoCommenter.picUrl == picUrl) {
			var par = $('#PhotoComments');

			var img = jqObj.children('a').children('img').attr('src');
			var fullPicUrl = jqObj.children('a').attr('href');
			par.children('a').attr('href', fullPicUrl);
			par.children('a').children('img').attr('src', img);

			var totalWidth = $('body').width();
			var offsetLeft = coords.x;
			var dropDownWidth = par.width();
			if (offsetLeft+dropDownWidth+210<totalWidth) {
				var x = coords.x - 10 + 'px';
			} else {
				var x = offsetLeft + 100 - dropDownWidth - 120 + 'px';
			}
			var y = coords.y - 10 + 'px';

			par.css({'left':x, 'top':y}).fadeIn(200);
		}
	},

	BuildCommentsListHTML: function(comments) {
		var list = [];

		list.push('<ul class="PhotoCommentsList">');
		for (var i=0; i<comments.length; i++) {
			list.push('<li>');
			list.push('<p>'+comments[i].text+'</p>');
			list.push('<p class="signature">'+comments[i].author+', '+comments[i].date+'</p>');
			list.push('</li>');
		}
		list.push('</ul>');

		return(list.join(''));
	},

	Hide: function() {
		$('#PhotoComments').hide();
	},

	Add: function() {
		var url = SITE_URL + '?daemon=photos'
		var comment = $('#userComment').val();
		var author = $('#userName').val();
		var date = Dater.GetDateTimeString();
		var picUrl = PhotoCommenter.picUrl;

		$.ajax({
			url: url,
			data : { 'action':'addComment', 'picUrl':picUrl, 'comment':comment, 'author':author, 'date':date },
			dataType : "json",
			type : "post",
			success: function(json) {
				PhotoCommenter.InjectAddedComment(json);
			},
			error: function() {
				alert('Error occured while trying to add a comment');
			}
		});
	},

	InjectAddedComment: function(json) {
		// добавляем новый комментарий в объект
		for (var i=0; i<PhotoCommenter.photos.length; i++) {
			if (PhotoCommenter.photos[i].url == json.picUrl) {
				var newComment = {
					'text'		: json.comment,
					'date'		: json.date,
					'author'	: json.author
				};
				PhotoCommenter.photos[i].comments.unshift(newComment);
			}
		}

		// добавляем комментарий в видимый дропдаун с комментариями
		var item = '<li>';
		item += '<p>'+json.comment+'</p>';
		item += '<p class="signature">'+json.author+', '+json.date+'</p>';
		item += '</li>';

		if ($('#PhotoCommentsArea .PhotoCommentsList').length == 0) {
			var comments = new Array({ 'text': json.comment, 'author': json.author, 'date': json.date });
			$('#PhotoCommentsArea').removeAttr('class').html(PhotoCommenter.BuildCommentsListHTML(comments));
		} else {
			$('#PhotoCommentsArea .PhotoCommentsList li:first').before(item);
		}

		// скрываем форму, показываем список комментариев
		var par = $('#PhotoComments');
		par.children('.wrapper_Form').fadeOut(200, function(){
			par.children('.wrapper_Comments').fadeIn(200);
		});
	},

	LoadXML: function(coords, jqObj, dir) {
		//var url = SITE_URL+'uploads/photos/'+dir+'gallery.xml';
		var url = '/modules/xml.php';

setTimeout(function() { // DEBUG имитация лага при загрузке
		$.ajax({
			url: url,
			data : { 'action':'loadAlbumXML', 'dir':dir },
			dataType : "xml",
			type : "post",
			success: function(xml) {
				var photos = [];
				$(xml).find('image').each(function(){
					var obj = {
						'url'		: $(this).children('url').text(),
						'caption'	: $(this).children('caption').text(),
						'width'		: $(this).children('width').text(),
						'height'	: $(this).children('height').text(),
						'comments'	: []
					};
					var comments = $(this).children('comments').children('comment').each(function(){
						var comment = {
							'text'		: $(this).attr('text'),
							'date'		: $(this).attr('date'),
							'author'	: $(this).attr('author')
						};
						obj.comments.unshift(comment);
					});
					photos.push(obj);
				});
				PhotoCommenter.photos = photos;
				PhotoCommenter.Show(coords, jqObj);
			},
			error: function() {
				alert('Error loading xml while trying to get comments list');
			}
		});
}, 0);
	}
}

var AlbumPreviewer = {
	'items' : [],
	'current' : false,

	ShowPreview: function(albumDir, jqObj) {
		//if (!AlbumPreviewer.current)
			var cached = AlbumPreviewer.AlbumCached(albumDir);
		//else
		//	var cached = AlbumPreviewer.items[AlbumPreviewer.current];

		if (!cached) {
			AlbumPreviewer.AddItem(albumDir, jqObj);
		} else {
			var bg = "url('"+SITE_URL+'uploads/photos/'+cached.pics[0]+"')";
			cached.jqObj.css({'background-image' : bg});
		}
	},

	AlbumCached: function(albumDir) {
		var cached = false;
		for (var i=0; i<AlbumPreviewer.items.length; i++) {
			var item = AlbumPreviewer.items[i];
			if (item.albumDir == albumDir) {
				cached = item;
				AlbumPreviewer.current = i;
				return(cached);
			}
		}
		return(cached);
	},

	ChangePreview: function(coords) {
		var cached = AlbumPreviewer.items[AlbumPreviewer.current];

		if (cached) {
			var width = cached.jqObj.width();
			var picsNum = cached.pics.length;
			var interval = (width/picsNum);

// так проще
			var intNum = coords.x/interval;
			var picNum = intNum.toFixed(0) - 1;
			picNum = picNum < 0 ? 0 : picNum;
/*
// так более надежно
			for (var i=1; i<picsNum+1; i++) {
				if (coords.x < interval*i) {
					picNum = i-1;
					break;
				}
			}
*/
			var bg = "url('"+SITE_URL+'uploads/photos/'+cached.pics[picNum]+"')";
			cached.jqObj.css({'background-image' : bg});
		}
	},

	ResetPreview: function() {
		var cached = AlbumPreviewer.items[AlbumPreviewer.current];
		var bg = "url('"+SITE_URL+'uploads/photos/'+cached.pics[0]+"')";
		cached.jqObj.css({'background-image' : bg});
		AlbumPreviewer.current = false;
	},

	AddItem: function(albumDir, jqObj) {
		var url = '/modules/json.php';

setTimeout(function() { // DEBUG имитация лага при загрузке
		$.ajax({
			url: url,
			data : { albumDir: albumDir },
			dataType : "json",
			type : "post",
			success: function(json) {
				var str = json.toString();
				var arr = str.split(",");
				var obj = { 'albumDir' : albumDir, 'jqObj' : jqObj, 'pics' : arr };
				AlbumPreviewer.current = AlbumPreviewer.items.length;
				AlbumPreviewer.items.push(obj);
				AlbumPreviewer.ShowPreview(albumDir, jqObj);
			},
			error: function() {
				alert('error loading json');
			}
		});
}, 500);
	}
}



$(document).ready(function(){

	$('.albumPics').each(function() {
		var albumDir = $(this).attr('albumDir');
		var sectionDir = $(this).attr('sectionDir');
		var obj = {	'jqObj':$(this), 'albumDir':albumDir, 'sectionDir':sectionDir };
		AlbumPreviewer.ShowPreview(albumDir, $(this));
	});

	// фотоальбомы

	$(".albumPics").hover(function(){
		$(this).addClass('active');
		var albumDir = $(this).attr('albumDir');
		AlbumPreviewer.ShowPreview(albumDir, $(this).children('.link_Album'));
	}, function(){
		$(this).removeClass('active');
		AlbumPreviewer.ResetPreview();
	});

	$(".albumPics").mousemove(function(e){
		var x = $(this).offset().left;
		var coords = { 'x' : e.clientX - x, 'y' : e.clientY };
		AlbumPreviewer.ChangePreview(coords);
	});

	// фотографии

	$(".PhotosList > li").hover(function(e){
		var x = $(this).offset().left;
		var y = $(this).offset().top;
		var coords = { 'x' : x, 'y' : y };
		PhotoCommenter.Show(coords, $(this));
	});

	$("#PhotoComments").hover(function(e){
	}, function(){
		PhotoCommenter.Hide();
	});

		// добавление комментариев
	$("#link_AddPhotoComment").live("click", function(){
		var par = $('#PhotoComments');
		par.children('.wrapper_Comments').hide();
		par.children('.wrapper_Form').show();
		return false;
	});

	$("#button_HideCommentsForm").live("click", function(){
		var par = $('#PhotoComments');
		par.children('.wrapper_Form').hide();
		par.children('.wrapper_Comments').show();
	});

	$("#button_AddComment").live("click", function(){
		PhotoCommenter.Add();
	});

});

