$('body').ready(init);

var navigation, projectsHover, departmentsHover, imagesLoad, useragentDetect, modelProjects;

function init ()
{
	modelProjects = new ModelProjects();
	useragentDetection = new UseragentDetection();
	navigation = new Navigation();
	projectsHover = new ProjectsHover();
	departmentsHover = new DepartmentsHover();
	imagesLoad = new ImagesLoad();
}


function ProjectsHover()
{
	var _over = function(e)
	{
		var target = e.currentTarget;
		$(target).find('img').stop().animate({
			'opacity' : 0
		}, 'slow');
	};

	var _out = function(e)
	{
		var target = e.currentTarget;
		$(target).find('img').stop().animate({
			'opacity' : 1
		}, 'slow');
	};

	var _setBackground = function(i, v)
	{
		var src = $(v).find('img').attr('src').replace('mout', 'mover');

		$(v).css({
			'background' : 'url(' + src + ')'
		});
	};

	_constructor = function()
	{
		$('.page[data-page="realizacje_lista"] .item .image').each(_setBackground);

		$('.page[data-page="realizacje_lista"] .item').hover(_over, _out);
	};

	_constructor();
}

function DepartmentsHover()
{
	var _over = function(e)
	{
		var target = e.currentTarget;
		var index = $(target).attr('data-index');
		var a = $(target).parent().parent().find('ul li.nth-child-' + index + ' a').get(0);
		var color = $(target).parent().parent().find('ul li.nth-child-' + index).css('border-top-color');
		$(a).css('color', color);
	};

	var _out = function(e)
	{
		var target = e.currentTarget;
		var index = $(target).attr('data-index');
		var a = $(target).parent().parent().find('ul li.nth-child-' + index + ' a').get(0);
		var color = '#7b7b7a';
		$(a).css('color', color);
	};

	_constructor = function()
	{
		$('.page[data-page="dzialy_lista"] .small-people').hover(_over, _out);
	};

	_constructor();
}

function ImagesLoad()
{
	var _images = new Array();

	var _check = function(e)
	{
		var top, left, length, screenHeight;
		length = _images.length;
		screenHeight = $(window).height();
		top = $(window).scrollTop();
		left = $(window).scrollLeft();

		for (var i = 0; i < length; i++)
		{
			var img = _images[i];

			if ($(img).attr('src') == '#') {
				if ((top + screenHeight) > $(img).offset().top)
				{
					$(img).attr('src', $(img).attr('data-src'));
				}
			}
		}
	};

	var _constructor = function()
	{
		_images = $('img');

		$(window).scroll(_check);
		_check();
	};

	_constructor();
}

function Navigation()
{
	/**
	 * Przechowyje wyrażenia regularne
	 * @type {Array}
	 */
	var _regexp = new Array();

	/**
	 * Aktualna strona
	 * @type {String}
	 */
	var _currentPage = '';

	/**
	 * Aktualna podstrona
	 * @type {String}
	 */
	var _currentSubpage = '';

	var _getVariables = function(url)
	{
		var variables = url.replace(/^.*\?/, '').split('&');
		var result = new Array();
		for (var i = 0; i < variables.length; i++)
		{
			var name, value;
			name = variables[i].split('=')[0];
			value = variables[i].split('=')[1];
			result[name] = value;
		}
		return result;
	};

	/**
	 * Przechodzi do danej strony
	 * @param  {String} page strona do której ma przejść
	 */
	var _gotoPage = function(page, subpage, animation)
	{
		var animation = animation;

		if (page != 'javascript:void(0);')
		{
			var page = $('.page[data-page="'+ page +'"]').get(0);

			if (subpage != '')
			{
				var subpage = $(page).find('.subpage[data-subpage="'+ subpage +'"]').get(0);
			}
			else
			{
				var subpage = '';
			}
			

			$('html, body').stop().animate({
				'scrollTop' : $(page).position().top + 1
			}, 800);

			if ($(page).height() < $(page).attr('data-height'))
			{
				$(page).stop().animate({
					'height' : $(page).attr('data-height')
				}, 'slow', function () {_gotoSubpage(page, subpage, animation)});
			}
			else
			{
				_gotoSubpage(page, subpage, animation);
			}
		}
	};

	/**
	 * Przechodzi do danej podstrony
	 * @param  {String} page podstrona do której ma przejść
	 */
	var _gotoSubpage = function(page, subpage, animation)
	{
		if (subpage == '')
		{
			return false;
		}

		if ($(page).attr('data-page') == "realizacja_szczegoly")
		{
			modelProjects.loadSubpage($(subpage));
		}

		$(page).find('.next, .prev').css('display', 'none');

		$(page).find('.next, .prev').stop().animate({
			'opacity' : 0
		}, 'fast');

		var subpages = $(page).find('.subpage').get();
		var length = subpages.length;

		for (var i = 0; i < length; i++)
		{
			if ($(subpages[i]).attr('data-subpage') == $(subpage).attr('data-subpage'))
			{
			
				if (subpages[i - 1] != undefined)
				{
					$(page).find('.prev').attr('href', '#' + $(page).attr('data-page') + '-' + $(subpages[i - 1]).attr('data-subpage'));
				}

				if (subpages[i + 1] != undefined)
				{
					$(page).find('.next').attr('href', '#' + $(page).attr('data-page') + '-' + $(subpages[i + 1]).attr('data-subpage'));
				}
			}
		}
		if (animation == true)
		{
			$(page).find('> .group').stop().animate({
				'scrollLeft' : $(subpage).position().left
			}, 800, function() {_eventSubpageAnimation(page, subpage);});
		}
		else
		{
			$(page).find('> .group').scrollLeft($(subpage).position().left);
			_eventSubpageAnimation(page, subpage);
		}
	};

	var _scrollStart = function(e)
	{
		if (useragentDetection.isMobile() == false)
		{
			return false;
		}

		$('header, footer').animate({
			'opacity' : 0
		}, 'fast');
	};

	var _scrollStop = function(e)
	{
		if (useragentDetection.isMobile() == false)
		{
			return false;
		}

		_setNavigationPosition();

		$('header, footer').animate({
			'opacity' : 1
		}, 'slow');
	};

	var _setNavigationPosition = function()
	{
		$('header').css({
			'position' : 'absolute',
			'top' : $(window).scrollTop()
		});

		$('footer').css({
			'position' : 'absolute',
			'top' : ($(window).scrollTop() + $(window).height()) - $('footer').height()
		});
	};

	/**
	 * Zwraca tablicę z ścieżką wyciągniętą z href linka
	 * @param  {String} href
	 * @return {Array}
	 */
	var _getPage = function(href)
	{
		var href = href,
			page = new Array(),
			regexp = new RegExp(_regexp['clear']);
		
		href = href.replace(_regexp['clear'], '');
		page = href.split('-');

		return page;
	};

	var _setAttributes = function()
	{
		$('.page[data-visible="false"]').attr('data-height', $('.page[data-visible="false"]').height());
		$('.page[data-visible="false"]').css('height', '0px');
	};

	var _eventSubpageAnimation = function(page, subpage)
	{

		if ($(subpage).position().left == $(page).find('> .group .items').width() - $(page).find('> .group .items .subpage').width())
		{
			$(page).find('.next').stop().animate({
				'opacity' : 0
			}, 'fast');
		}
		else
		{
			$(page).find('.next').css('display', 'block');

			$(page).find('.next').stop().animate({
				'opacity' : 1
			}, 'fast');
		}

		if ( $(subpage).position().left == 0)
		{
			$(page).find('.prev').stop().animate({
				'opacity' : 0
			}, 'fast');
		}
		else
		{
			$(page).find('.prev').css('display', 'block');

			$(page).find('.prev').stop().animate({
				'opacity' : 1
			}, 'fast');
		}
	};

	var _eventClickedClose = function(e)
	{
		$(e.currentTarget).parent().animate({
			'height' : '0px'
		}, 'slow');
	};

	/**
	 * @param  {Event} e
	 */
	var _eventClickedLink = function(e)
	{
		var animation;

		if (_getVariables(e.currentTarget.href)['animation'] == undefined)
		{
			animation = true;
		}
		else if (_getVariables(e.currentTarget.href)['animation'] === false)
		{
			animation = false;
		}

		var page = _getPage(e.currentTarget.href.replace(/\?.*$/, ''));

		if (page.length == 1)
		{
			_gotoPage(page[0], '', animation);
		}

		if (page.length == 2)
		{
			_gotoPage(page[0], page[1], animation);
		}

		return false;
	};

	var _getActive = function ()
	{
		var links = $('nav a').get();
		var pages = $('.page').get();
		var countLinks, countPages;

		for (countLinks = 0; countLinks < links.length; countLinks++)
		{
			for (countPages = 0; countPages < pages.length; countPages++)
			{
				var pageTop = $(pages[countPages]).offset().top;
				var screenHeight = $(window).height();
				var scrollTop = $(document).scrollTop();
				var min = scrollTop;
				var max = scrollTop + (screenHeight / 2);

				if (pageTop > min && pageTop < max)
				{
					if($(links[countLinks]).attr('href').replace('#', '') == $(pages[countPages]).attr('data-page'))
					{
						$(links[countLinks]).addClass('active');
					}
					else
					{
						$(links[countLinks]).removeClass('active');
					}
				}
			}
		}
	}

	var _constructor = function()
	{
		if (useragentDetection.isMobile() == true)
		{
			_setNavigationPosition();
			$(document).bind('scrollstart', _scrollStart);
			$(document).bind('scrollstop', _scrollStop);
		}

		$(document).bind('scrollstart', _getActive);
		$(document).bind('scrollstop', _getActive);

		$('#page-fix').css('height', $(window).height() - (462 + 130));

		_regexp['clear'] = /^.*\#/;

		$('a, area').bind('click', _eventClickedLink);
		$('.close').bind('click', _eventClickedClose);

		$('.lang a').unbind('click', _eventClickedLink);
		_setAttributes();
	};

	_constructor();

}

function UseragentDetection()
{
	var _useragemt = window.navigator.userAgent;
	var _isMobile = false;

	this.isMobile = function()
	{
		return _isMobile;	
	};

	var _constructor = function()
	{
		_isMobile = false; //=!!(_useragemt.match(/(iPhone|iPod|iPad|blackberry|android|htc|kindle|lg|midp|mmp|mobile|nokia|opera mini|palm|pocket|psp|sgh|smartphone|symbian|treo mini|Playstation Portable|SonyEricsson|Samsung|MobileExplorer|PalmSource|Benq|Windows Phone)/i));
	};

	_constructor();
}

function ModelProjects()
{
	/**
	 * Nazwy podstron
	 * @type {Array}
	 */
	var _subpages = new Array();

	var _subpage = new Array();

	var _eventLoadedXML = function (data)
	{
		var length, items;

		items = $(data).find('item').get();
		length = items.length;

		$('.page[data-page="realizacja_szczegoly"] .group .items').css('width', length * 940)
		
		for (var i = 0; i < length; i++)
		{
			var subpage = document.createElement('div');

			var tmp = $(items[i]).find('title').text().toLowerCase().replace(/\<br\>/, '').replace(/[\t]/g, '').replace(/[^A-Za-z]+/g, '_').replace(/^\_/gi, '').replace(/\_$/gi, '');

			_subpage[tmp] = new Array();
			_subpage[tmp]['title'] = $(items[i]).find('title').text()
			_subpage[tmp]['color'] = $(items[i]).find('title').attr('color');
			_subpage[tmp]['description'] = $(items[i]).find('description').text();
			_subpage[tmp]['images'] = new Array();

			if ($(items[i]).find('video').get().length > 0)
			{
				_subpage[tmp]['video'] = new Array();
				_subpage[tmp]['video']['mp4'] = $(items[i]).find('video').attr('mp4');
				_subpage[tmp]['video']['webm'] = $(items[i]).find('video').attr('webm');
				_subpage[tmp]['video']['ogv'] = $(items[i]).find('video').attr('ogv');
				_subpage[tmp]['video']['width'] = $(items[i]).find('video').attr('width');
				_subpage[tmp]['video']['height'] = $(items[i]).find('video').attr('height');
			}

			$(items[i]).find('images image').each(function (index , value) {
				_subpage[tmp]['images'][index] = $(value).attr('src');
			});

			$(subpage).addClass('subpage');
			$(subpage).attr('data-subpage', tmp);

			$('.page[data-page="realizacja_szczegoly"] .group .items').append(subpage);
		}
		
	};

	this.loadSubpage = function(subpage)
	{
		if ($(subpage).html() == "")
		{
			var subpage, title, content, slider, name;
			name = $(subpage).attr('data-subpage');
			subpage = subpage;

			title = document.createElement('div');
			content = document.createElement('div');
			slider = document.createElement('div');

			$(slider).addClass('slider');

			$(subpage).append('<div class="pager"></div>')
			$(slider).append('<ul></ul>');
			$(slider).find('ul').attr('id', 'slider-' + name);

			for (var i = 0; i < _subpage[name]['images'].length; i++)
			{
				$(slider).find('ul').append('<li><img src="' + _subpage[name]['images'][i] + '" alt=""></li>');
			}
			
			$(subpage).append(slider);

			if (_subpage[name]['video'] == undefined)
			{
				new Slider($('#slider-' + name).get(), {
					visibleSlide : 1,
					auto: true,
					animationTime: 600,

					onAnimationFinish : function ($slider)
					{
						$(subpage).find('.pager a').removeClass('active')
						$(subpage).find('.pager a:nth-child(' + ($slider.getCurrent() + 1) + ')').addClass('active');
					},

					onInit: function ($slider)
					{	
						for (var i = 0; i < $slider.getLength(); i++)
						{
							var a = document.createElement('a');
							$(a).text(i + 1);
							$(subpage).find('.pager').append(a);
						}

						$(subpage).find('.pager a').click(function (e) {
							$slider.gotoSlide($(e.currentTarget).text() - 1);
							return false;
						});
					}
				});
			}
			else
			{
				var play = document.createElement('a');
				$(play).addClass('play');
				$(play).text('PLAY');
				$(subpage).append(play);

				$(play).click(function() {
					console.log(_subpage[name]['video']['mp4']);
					console.log(_subpage[name]['video']['webm']);
					console.log(_subpage[name]['video']['ogv']);
					console.log(_subpage[name]['video']['width']);
					console.log(_subpage[name]['video']['height']);
					$.fancybox({
						padding: 7,
						overlayOpacity: 0,
						autoDimensions: false,
						width: Number(_subpage[name]['video']['width']),
						height: Number(_subpage[name]['video']['height']),
						content: '<!-- Begin VideoJS -->' +
								  '<div class="video-js-box">' +
								    '<!-- Using the Video for Everybody Embed Code http://camendesign.com/code/video_for_everybody -->' +
								    '<video class="video-js" width="773" height="435" controls preload>' +
								      '<source src="' + _subpage[name]['video']['mp4'] + '" type=\'video/mp4; codecs="avc1.42E01E, mp4a.40.2"\' />' +
								      '<source src="' + _subpage[name]['video']['webm'] + '" type=\'video/webm; codecs="vp8, vorbis"\' />' +
								      '<source src="' + _subpage[name]['video']['ogv'] + '" type=\'video/ogg; codecs="theora, vorbis"\' />' +
								      '<!-- Flash Fallback. Use any flash video player here. Make sure to keep the vjs-flash-fallback class. -->' +
								      '<object id="flash_fallback_1" class="vjs-flash-fallback" width="'+ _subpage[name]['video']['width'] +'" height="' + _subpage[name]['video']['height'] + '" type="application/x-shockwave-flash"'  +
								        'data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf">' +
								        '<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />' +
								        '<param name="allowfullscreen" value="true" />' +
								        '<param name="flashvars"' + 
								          'value=\'config={"playlist":[{"url": "' + _subpage[name]['video']['mp4'] + '","autoPlay":false,"autoBuffering":true}]}\' />' +
								      '</object>' +
								    '</video>' +
								  '</div>' +
								  '<!-- End VideoJS -->'
					});
				});

				VideoJS.setupAllWhenReady();
			}

			$(title).addClass('title');
			$(title).append('<span></span>');
			$(title).find('span').html(_subpage[name]['title']);
			$(title).css('color', _subpage[name]['color'])

			$(content).addClass('content');
			$(content).html(_subpage[name]['description']);
			$(subpage).append(title);
			$(subpage).append(content);
		}
		else if ($(subpage).find('.slider').length > 0)
		{
			$(subpage).find('.pager a:nth-child(1)').click();
		}
	};

	var _loadXML = function()
	{

		$.ajax({
			type : 'GET',
			url : 'data/projects.xml',
			dataType : 'xml',
			success : _eventLoadedXML
		});
	};

	var _constructor = function()
	{
		_loadXML();
	};

	_constructor();
}


/*
function scroll(e)
{
	var page = e.currentTarget.href.replace(/.*\#/, '');
	$(document).scrollTo($('.page[data-page="'+ page +'"]').get(0).offsetTop - 58, 800);
	return false;
}
*/
