/**
 * @author Vlad Yakovlev (red.scorpix@gmail.com)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @link www.scorpix.ru
 * @version 0.1.1
 * @date 2009-11-30
 * @requires jQuery
 * @requires jTweener
 */
/**
 * Управление стопками изображений.
 */
$(function() {

	/** Количество пикселей драг-н-дропа, при котором возможен переход по ссылке — ошибки пользователя. */
	var maxUserMistake = 5;

	function stackPicture(bodyEl, rootEl, ahref) {

		var
			tweenerNs = 'stack_pictures' + Math.random(),
			previews = rootEl.find('.preview'),
			lastImage = previews.eq(previews.length - 1),
			isDnd = false,
			isMoved = false,
			dndXStart,
			dndYStart,
			dndXMouseOffset,
			dndYMouseOffset,
			wrap = rootEl.find('.previews'),
			imagesLoaded = 0,
			images = [],
			docEl = $(document),
			winEl = $(window);

		init();

		function init() {
			previews.each(function(index) {
				$(this).css({
					marginTop: -2 * index,
					marginLeft: 2 * index
				});
			});

			jTweener.addNSAction({
				onComplete: function() {
					if (!isDnd) {
						previews.css({ left: '', top: '' });
						isMoved = false;
						wrap.appendTo(rootEl.find('a')).css({
							left: '',
							top: ''
						});
						rootEl.css('height', '');
					}
				}
			}, tweenerNs);
			
			lastImage.mousedown(startDnd).click(disableImage);

			if(typeof(ahref) == "string" && ahref != "#" )
				lastImage.dblclick(function(){window.location.href = ahref});
		}

		/**
		 * @param {Event} evt
		 */
		function startDnd(evt) {
			isDnd = true;
			activeAction = true;
			// убить анимацию свертывания, если только что отпустили фотки
			jTweener.removeTween(tweenerNs)
			
	        // отменить перенос и выделение текста при клике на тексте
	        document.ondragstart = function() { return false };
	        document.body.onselectstart = function() { return false };			
			
			rootEl.height(rootEl.height());

			var offset = rootEl.offset();

			var slid = 0;
			if($c.browser.mozilla)
				slid = 4;
			else if($c.browser.safari)
				slid = 5;
			else if($c.browser.opera)
				slid = 5;
			else if($c.browser.msie)
				slid = -2;
			else
				slid = 5;
				
			
			wrap.appendTo(bodyEl).css({
				left: parseInt(offset.left),
				top: parseInt(offset.top)-slid
			});


			evt.preventDefault();
			evt.stopPropagation();

			dndXStart = parseInt(evt.pageX);
			dndYStart = parseInt(evt.pageY);
			var imageOffset = previews.eq(previews.length - 1).offset();
			dndXMouseOffset = dndXStart - parseInt(imageOffset.left) - 1;
			dndYMouseOffset = dndYStart - parseInt(imageOffset.top) - 1;

			docEl.one('mouseup', stopDnd).bind('mousemove', dnd);
		}

		/**
		 * @param {Event} evt
		 */
		function dnd(evt) {
			if (!isDnd) return;

			evt.preventDefault();
			evt.stopPropagation();

			var
				count = previews.length,
				maxX = winEl.scrollLeft() + winEl.width() + dndXMouseOffset - previews.eq(count - 1).width(),
				maxY = winEl.scrollTop() + winEl.height() + dndYMouseOffset - previews.eq(count - 1).height(),
				pageX = parseInt(evt.pageX) > maxX ? maxX : parseInt(evt.pageX),
				pageY = parseInt(evt.pageY) > maxY ? maxY : parseInt(evt.pageY),
				rX = pageX - dndXStart,
				rY = pageY - dndYStart;

			for (var i = 1; i < count; i++) {
				var k = i / (count - 1);
				previews.eq(i).css({
					left: Math.round(k * rX),
					top: Math.round(k * rY)
				});
			}

			isMoved = true;
		}

		/**
		 * @param {Event} evt
		 */
		function stopDnd(evt) {
			docEl.unbind('mousemove', dnd);
			
			document.ondragstart = null;
			document.body.onselectstart = null;

			if (isMoved) {
				for (var i = 0; i < previews.size(); i++) {
					$t(previews[i], {
						time: 0.3,
						left: 0,
						top: 0,
						namespace: tweenerNs
					}).tween();
				}
			} else if ($c.browser.msie) {
				// В IE баг с кликом на изображении в ссылке.
				lastImage.click();
			}

			isDnd = false;
			activeAction = false;
		}

		function disableImage(evt) {
			if (isMoved) {
				if (maxUserMistake < parseInt(evt.pageX) - dndXStart || maxUserMistake < parseInt(evt.pageY) - dndYStart) {
					evt.preventDefault();
					evt.stopPropagation();
				}
			}
		}
	}

	var bodyEl = $('<div class="stack_pictures_free"></div>').appendTo('body');

	$('.object_short_view .picture').each(function() {
		1 < $(this).find('.preview').length && stackPicture(bodyEl, $(this),$(this).find('a').attr("href"));
	});
});

$(function() {
    $(".other_photos img").click(
        function(){
            var curImg = $(this);
            curImg.parent().find("img").removeClass("selected");
            curImg.addClass("selected");
            $c.loadImage("i/photo_" + (curImg.prevAll("img").length + 1) + ".jpg",
                    function(){
                       curImg.parent().parent().find(".photo").html(this);
                    });
        }
    );
});