;/**_*/

document.documentElement.className = document.documentElement.className ? document.documentElement.className + ' js' : 'js';

$(function() {

	var domRoot = document.documentElement;

	/**
	 * getScrollPos
	 * @return {Number[]} left, top
	 */
	function _getScrollPos() {
		var pos = [0, 0];

		if( typeof window.pageYOffset !== 'undefind' && window.pageYOffset > 0 ) {

			pos = [
				window.pageXOffset,
				window.pageYOffset
			];

		} else if( typeof document.documentElement.scrollTop !== 'undefind' && document.documentElement.scrollTop > 0 ) {

			var _docRoot = document.documentElement;
			pos = [
			       _docRoot.scrollLeft,
			       _docRoot.scrollTop
			];

		} else if( typeof document.body.scrollTop !== 'undefind' ) {

			var _docRoot = document.body;
			pos = [
			       _docRoot.scrollLeft,
			       _docRoot.scrollTop
			];

		}
		return pos;
	}

	var layout = $('#window'),
		lands = layout.find('.landscape'),
		plaine = layout.find('.airplane'),
		clouds = layout.find('.clouds');

	var layoutOffsetTop,
		layoutSize = [0, 0],
		planeSize = [0, 0],
		scrollPos = [0, 0],
		landsHeight,
		wndHeight;

	var landsDisp = [0, 0],
		plaineDisp = [0, 0];

	function getDimmentions() {
		/** {Number} высота окна браузера */
		wndHeight = $(window).height();

		/** {Number} ширина иллюмнатора */
		layoutSize[0] = layout.width();
		/** {Number} высота иллюминатора */
		layoutSize[1] = layout.height();
		/** {Number} расстояние от верхней границы окна до иллюминатора */
		layoutOffsetTop = layout.offset().top;

		/** {Number} высота изображения земли */
		landsHeight = lands.height();

		/** {Number[]} габариты изображения самолета (WxH) */
		plaineSize = [1005, 243];

		scrollPos = _getScrollPos();
	}

	/**
	 * Виден ли иллюминатор?
	 * @return {Boolean}
	 */
	function isLayoutVisible() {
		var layoutDisp = layoutOffsetTop - scrollPos[1];
		return (layoutDisp < wndHeight) && (layoutDisp + layoutSize[1] > 0);
	}

	function setup() {
		getDimmentions();

		if( lands.css('background-attachment') === 'fixed' ) {
			landsDisp[1] = (layoutOffsetTop + wndHeight)/3 - landsHeight/2;

			plaineDisp[0] = (layoutSize[0] - plaineSize[0]) / 2 - 250;
			plaineDisp[1] = (layoutOffsetTop + wndHeight)/3;

			_mobileFactor = 1;
		} else {
			_mobileFactor = -1;
		}

		lands.css('background-position', '50% ' + landsDisp[1] + 'px');
		plaine.css('background-position', plaineDisp[0] + 'px ' + plaineDisp[1] + 'px');
	}

	/**
	 * On Scroll Handler
	 */
	function onScrollHandler(e) {
		scrollPos = _getScrollPos();
		var posY = scrollPos[1];

		if( !isLayoutVisible() ) {
			return;
		}

		var plaineXPos = plaineDisp[0] + posY/1.2,
			plaineYPos = plaineDisp[1] - posY/1.5;

		lands.css('background-position', '50% ' + (landsDisp[1] - posY/4) + 'px');
		plaine.css('background-position', plaineXPos + 'px ' + plaineYPos + 'px');
	}

	if( layout ) {
		setup();
		onScrollHandler();

		$(window)
			.bind('resize', function(){
				setup();
				onScrollHandler();
			})
			.bind('scroll', onScrollHandler);

		// iPhone's Playground
		/*
		var _position = 0,
			startY = 0,
			scrollStartY = 0, scrollStartTime = 0,
			moved;

		$(document)
			.bind('touchstart', function(e){
				lands.css('-webkit-transition-duration', 0);
				var theTransform = lands.css('-webkit-transform');

				theTransform = new WebKitCSSMatrix(theTransform).m42;
				//alert( theTransform );
				if( theTransform != _position ) {
					_position = theTransform;
				}

				startY = e.targetTouches[0].clientY;
				scrollStartY = _position;
				scrollStartTime = e.timeStamp;
				moved = false;
			})
			.bind('touchmove', function(e){
				if( e.targetTouches.length != 1 ) {
					return false;
				}

				var topDelta = e.targetTouches[0].clientY - startY;
				if( _position>0) {
					topDelta/=2;
				}
				_position += topDelta;
				startY = e.targetTouches[0].clientY;
				moved = true;

				// Prevent slingshot effect
				if(e.timeStamp - scrollStartTime>100 ) {
					this.scrollStartY = this.position;
					this.scrollStartTime = e.timeStamp;
				}

				return false;

			})
			.bind('touchend', function(e){
				//alert();
			});
		*/
	}


	/**
	 * KeyNavigator
	 */
	var KeyNavigator = (function() {
		var aLinks = [
			{
				sRel     : 'next',
				iKeyCode : 0x28,	// Up Arrow
				sHref    : ''
			},
			{
				sRel     : 'prev',
				iKeyCode : 0x26,	// Down Arrow
				sHref    : ''
			}
		];


		function _processKey(e) {
			var keyCode = e.keyCode;

			if( e.ctrlKey ){

				for( var i = 0, nLinks = aLinks.length; i < nLinks; i++ ) {
					if( aLinks[i] && aLinks[i].iKeyCode == keyCode && aLinks[i].sHref !== '' ) {

						e.preventDefault();
						document.location = aLinks[i].sHref;

					}
				}

			}
		}

		return {
			init: function() {
				var aLinkElements = $('link');

				for(var i = 0, sRel, nLen = aLinkElements.length; i < nLen; i++) {
					sRel = aLinkElements[i].rel;

					for( var j = 0; j < aLinks.length; j++ ) {
						if( aLinks[j] && aLinks[j].sRel === sRel && aLinks[j].href !== '' ) {

							aLinks[j].sHref = aLinkElements[i].href;
							break;
						}
					}
				}

				//console.log( aLinks );

				// Keyboard
				if( navigator.userAgent.indexOf('Opera') > -1 ) {
					// Не работает в Chrome
					$(window).bind('keypress', function(e){ _processKey(e) });
				} else {
					// Не работает в Opera
					$(document).bind('keydown', function(e){ _processKey(e) });
				}

			}
		}
	})();

	KeyNavigator.init();

});


/**
 * Simple Gallery as jQuery plugin
 */
(function($){

	$.fn.gallery = function(settings) {

		var params = {
			single: '.b-photo_single',
			list: '.b-photo_list',
			navigator: '.b-photo_navigator'
		};

		if (settings) {
			$.extend(params, settings);
		}

		var _classCurrent = 'active',
			listItems, singleImg, singleTitle,
			nCurrentItem = 0,
			nItems,
			keyPrev, keyNext;

		/**
		 * url:width:height
		 *
		 * example:
		 *   /on-line/i/AA56E7FF-567E-4BEB-8CC2-8679B8452EF8/photo.jpg:652:652
		 */
		function _parseSingleUrl(sUrl) {
			return sUrl.split(':');
		}

		/**
		 * _setSingle
		 */
		function _setSingle(newSingle) {
			listItems.removeClass(_classCurrent);

			var _newSingleAttr = _parseSingleUrl( newSingle.attr('rel') );
			_newSingleAttr.push( newSingle.attr('title') );

			singleImg.attr({
				src: _newSingleAttr[0],
				width: _newSingleAttr[1],
				height: _newSingleAttr[2],
				alt: _newSingleAttr[3]
			});

			singleTitle.html( newSingle.attr('title') );

			newSingle.addClass(_classCurrent);
			nCurrentItem = listItems.index( newSingle );

			_updateKeyNavigator();
		}

		/**
		 * _prev
		 */
		function _prev() {
			var next = nCurrentItem;
			if( nCurrentItem > 0 ) {
				next = nCurrentItem - 1;
			}

			(nCurrentItem !== next) && _setSingle( listItems.eq(next) );
		}

		/**
		 * _next
		 */
		function _next() {
			var next = nCurrentItem;
			if( nCurrentItem < nItems-1 ) {
				next = nCurrentItem + 1;
			}

			(nCurrentItem !== next) && _setSingle( listItems.eq(next) );
		}

		/**
		 * _first
		 */
		function _first() {
			_setSingle( listItems.eq(0) );
		}

		/**
		 * _keyNavigator
		 */
		function _keyNavigator(e) {
			/*
			if( is_process ) {
				e.stopPropagation();
				return true;
			}
			*/

			var keyCode = e.keyCode;

			if( e.ctrlKey ){
				// Move
				if( keyCode == 37 || keyCode == 39 ) {
					e.preventDefault();
					e.stopPropagation();

					var next = nCurrentItem;
					//console.log( nCurrentItem );

					if( keyCode == 37 && nCurrentItem > 0 ) {
						next = nCurrentItem - 1;
					} else if( keyCode == 39 && nCurrentItem < nItems-1) {
						next = nCurrentItem + 1;
					}

					(nCurrentItem !== next) && _setSingle( listItems.eq(next) );
				}
			}

			return true;
		}

		/**
		 *
		 */
		function _updateKeyNavigator() {
			if(nCurrentItem === 0) {
				keyPrev.addClass('locked');
			} else {
				keyPrev.removeClass('locked');
			}

			if(nCurrentItem < nItems-1) {
				keyNext.removeClass('locked');
			} else {
				keyNext.addClass('locked');
			}
		}


		$(this).each(function(){

			var single = $(this).find(params.single),
				list = $(this).find(params.list),
				keyControls = $(this).find(params.navigator);

			if(!single || !list) {
				return;
			}

			singleImg = single.find('img');
			singleTitle = single.find('.title');
			listItems = list.find('a[rel]');

			single.addClass('b-photo_single__inited');

			nItems = listItems.size();

			listItems
				.bind('click', function(e){
					var $t = $(this);
					if( $t.hasClass(_classCurrent) ) {
						return;
					}

					_setSingle( $t );

					return false;
				})
				.hover(
					function(){
						$(this).addClass('hover');
					},
					function(){
						$(this).removeClass('hover');
					}
				);

			singleImg.bind('click', function(){
				(nCurrentItem < nItems-1) ? _next() : _first();
			});

			if( keyControls ) {
				keyPrev = keyControls.find('.prev'),
				keyNext = keyControls.find('.next');

				keyPrev.click(function(){
					!$(this).hasClass('locked') && _prev();
					return false;
				});
				keyNext.click(function(){
					!$(this).hasClass('locked') && _next();
					return false;
				});

				_updateKeyNavigator()

				// Keyboard
				if( navigator.userAgent.indexOf('Opera') > -1 ) {
					// Не работает в Chrome
					$(window).bind('keypress', function(e){ _keyNavigator(e) });
				} else {
					$(document).bind('keydown', function(e){ _keyNavigator(e); });
				}
			}
		});
	};

})(jQuery);

