/**
 * @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('#picture_queue img'), // все превьюхи
			descriptionHeight, //высота описания, чтобы выровнять большую картинку
			firstTime = true, // девственница
			imagesList = []; // список загруженных больших картинок

		//получить адрес большой картинки
		function getBigSrc(id) {
			var s = new String(id); id = s.split('_')[1]; //берем кусок с номером
			return jQuery('img[id=b_' + id + ']').attr('src'); //собсно адрес
		}

		// инит галереи по кликнутой превьюхе
		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(); //сохраняем все последующие превьюхи

			picturesCont.height(picContHeight); //задаем высоту основной картинке (это просто высота экрана минус шапка)

			//показываем большую картинку
			if(firstTime) {
				showBigPic(getBigSrc(previewSld.attr('id')), previewSld.attr('alt'));
				firstTime = false;
			} else {
				animateBigPic(getBigSrc(previewSld.attr('id')));
			}

			//если кликнутая картинка уже была загружена, то мимо
			//если нет - подгружаем ее показываем и сохраняем
			for (var i = 0; i < 10; i++) {
				var bigSrc = getBigSrc(previewChild.eq(i).attr('id')),
					oldPic = false;
					
				for (var j = 0, l = imagesList.length; j < l; j++) {
					if (imagesList[j].src === bigSrc) {
						oldPic = true;
					}
				};
				if (!oldPic) showBigPic(bigSrc, previewChild.eq(i).attr('alt'));
			};
		};

		//показываем большую картинку и подгружаем
		function showBigPic(src, alt) {
			var img = new Image(),
				picEl = $q('<div class="picture"><div class="description"><h3>' + alt + '</h3></div></div>'); // зачем-то новый хтмл с альтом превьюхи
            
			// ставим событие
			img.onload = function() {
				var picWidth = img.width,
					picHeight = img.height,
					picAlt = alt;

                
				picturesCont.append(picEl); // зачем-то добавляем в хтмл
				descriptionHeight = picEl.find('.description').height(); //наверное чтобы получить фактическую высоту 

				//растягиваем картинку на весь экран
				$q(img).css(
					{
						width: picWidth * (picContHeight - descriptionHeight) / picHeight,
						height: picContHeight - descriptionHeight
					}
				);

				picEl.prepend(img); // собсно добавляем сам img к сформированному хтмл выше
				imagesList.push({'element': $q(img), 'src': src, 'width': picWidth, 'height': picHeight}); // добавляем в массив уже загруженных больших картинок с параметрами
			};

			//чтобы дальше попер onload
			img.src = 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 - descriptionHeight;

			for (var i=0, l = imagesList.length; i < l; i++) {
				var k = actualHeight / imagesList[i].height;
				$q(imagesList[i].element).css(
					{
						width: imagesList[i].width * k,
						height: actualHeight
					}
				);
			}
		};

		// ставим класс на кликнутую превью и запускаем
		function previewClick() {
			previewsImgs.removeClass('selected');
			previewInit($q(this).addClass('selected'));
		};

		// тоже показываем большую картинку
		function animateBigPic(src) {
			var activePic,
				activeOffset = 0;

			for (var i = 0, l = imagesList.length; i < l; i++) {
				if(imagesList[i].src === src) {
					activePic = imagesList[i].element;
				}
			};

			var activePrev = activePic.parent().prevAll();

			for (var i = 0, l = activePrev.length; i < l; i++) {
				activeOffset += activePrev.eq(i).width();
			}

			$t(picturesCont).tween(
				{
					time: 0.5,
					left: -activeOffset
				}
			);
		}

		// вешаем событие на клик
		previewsImgs.click(previewClick); 
		$q('#picture_queue img:first').addClass('selected'); 
		$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() {

    //собсно начало
    
    //все прьевьюхи
	var imagesQueue = $q("#picture_queue > img");
	
	//для каждой получаем контент
//	for (i=0; imagesQueue[i]; i++)
//	{
//		var s = new String(imagesQueue[i].id); 
//		id = s.split('_')[1];
//		
//		$q.get('/?ZRP=gallery.ajax&args={"aid":"1","id":"'+id+'"}', 
//			function(data) {
//				$q("#picture_gallery").html(jQuery("#picture_gallery").html() + data); //дописываем контент в #picture_gallery
//		});				
//	}
	//в итоге мы загрузили полностью все большие картинки в хтмл
	//фактически картинки еще на загрузились 
	
	gallery.init();
	baloons.init();
    
    
    
});

