/**
 * @author Vlad Yakovlev (red.scorpix@gmail.com)
 * @link www.scorpix.ru
 * @requires jQuery
 * @requires jCommon
 * @version 0.1
 * @date 2010-02-12
 */

var baloons = (function() {

	function init() {
		$q('.notice').each(
			function() {
				var el = $q(this),
					reg = /(\w+)_block/,
					className = reg.test(el.attr('class')) ? 'notice_' + /(\w+)_block/.exec(el.attr('class'))[1] : null,
					noteBlock = $q('.' + className);

				if (!className) return;

				var link = el.find('a'),
					elWidth = link.width(),
					elHeight = link.height();

				link.click(
					function(event) {
						var rightOffset = $q('body').width() - link.offset().left - elWidth,
							bottomOffset = $q('body').height() - link.offset().top - elHeight;

						noteBlock.css('visibility', 'hidden').removeClass('hidden');

						var noteBlockW = noteBlock.width(),
							noteBlockH = noteBlock.height();

						noteBlock.addClass('hidden').removeAttr('style');

						noteBlock.css(
							{
								left: (rightOffset < noteBlockW) ? parseInt(el.css('left')) - noteBlockW : parseInt(el.css('left')) - elWidth,
								top: (bottomOffset < noteBlockH) ? parseInt(el.css('top')) - noteBlockH : parseInt(el.css('top')) - elHeight
							}
						);
						event.preventDefault();
						event.stopPropagation();
					}
				);

				$c.popupBlock(noteBlock, {
					link: link,
					close: noteBlock.find('.close')
				});
			}
		);
	};

	return {
		init : init
	}

})();

var gallery = (function() {

	function init() {
		var gallery = $q('.gallery'),
			picturesCont = gallery.find('.pictures'),
			logo = gallery.find('.logo'),
			favourite = gallery.find('.favourite'),
			picContHeight,
			previewsImgs = $q('.previews img'),
			descriptionHeight,
			imagesList,
			imagesData = [];

		function previewInit(el) {
			picContHeight = gallery.height() - logo.height() - parseInt(logo.css('padding-top')) - favourite.height() - parseInt(favourite.css('padding-top')) - parseInt(favourite.css('padding-bottom'));

			var previewSld = el,
				previewChild = previewSld.nextAll(),
				piccount = 0;

			picturesCont.height(picContHeight);

			$q.ajax(
				{
					url: '/?ZRP=gallery.ajax&args={"aid":"1","list":"1"}',
					dataType: 'json',
					success: function(data) {
						var imgOffset = 0;
						for (var key in data) {
							var tmp,
								obj = {};
							if (piccount < 3) {
								tmp = $q('<div class="picture"><div class="description"><h3></h3></div><img src="' + data[key].url + '"/></div>');
								obj.visible = true;
							}
							else {
								tmp = $q('<div class="picture"><div class="description"><h3></h3></div></div>');
								obj.visible = false;
							}
							piccount++;
							obj.computed_w = data[key].w * picContHeight / data[key].h;
							tmp.css(
								{
									width: obj.computed_w,
									height: picContHeight
								}
							);
							picturesCont.append(tmp);
							obj.id = key;
							obj.offset = imgOffset;
							obj.preview = $q('#r_'+key);
							obj.image = tmp;
							obj.image_src = data[key].url;
							obj.image_w = data[key].w;
							obj.image_h = data[key].h;
							obj.computed_h = picContHeight;
							imagesData.push(obj);
							imgOffset += obj.computed_w;
						}
					}
				}
			);
		};

		function showBigPic(obj) {
			if (obj && !obj.visible) {
				var img = new Image();
				img.onload = function() {
					$q(img).attr('width', obj.computed_w).attr('height', obj.computed_h);
					obj.image.append(img);
					obj.visible = true;
				}
				img.src = obj.image_src;
			}
		};

		function resizeImg() {
			picContHeight = gallery.height() - logo.height() - parseInt(logo.css('padding-top')) - favourite.height() - parseInt(favourite.css('padding-top')) - parseInt(favourite.css('padding-bottom'));
			picturesCont.height(picContHeight);

			var actualHeight = picContHeight;

			for (var i=0, l = imagesData.length; i < l; i++) {
				var k = actualHeight / imagesData[i].image_h;
				$q(imagesData[i].image).css(
					{
						width: imagesData[i].image_w * k,
						height: actualHeight
					}
				);
			}
		};

		function previewClick() {
			previewsImgs.removeClass('selected');
			$q(this).addClass('selected');
			var curObj;
			for(var i=0,l = imagesData.length; i<l; i++) {
				if (('r_'+imagesData[i].id) === $q(this).attr('id')) {
					curObj = imagesData[i];
					showBigPic(imagesData[i+1]);
					showBigPic(imagesData[i+2]);
				}
			};
			picturesCont.animate(
				{
					left: -curObj.offset
				},
				500
			);
			if (!curObj.visible) {
				showBigPic(curObj);
			}
		};

		previewsImgs.click(previewClick);

		$q(window).resize(resizeImg);

		$c.popupBlock('.gallery', {
			link: $q('.main .gallery_notice .pseudo'),
			close: $q('.gallery .close .pseudo'),
			afterShow: function(){
				previewInit(gallery.find('.previews img.selected'));
			}
		});

		$q('.main .gallery_notice .pseudo').click(
			function(evt){
				evt.preventDefault();
				evt.stopPropagation();
			}
		);

	};

	return {
		init: init
	}
})();

$q(function() {
	gallery.init();
	baloons.init();
});