var lang = window.location.pathname.match(/\/en\//) ? 'en' : 'de';
var production;


// Add exponential ease-out
jQuery.extend( jQuery.easing,
{
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(Math.E, -10 * t/d) + 1) + b;
	}
});



function AppBuilder() {
	
	var pages = {
		en: ['projects', 'office-awards', 'contact', 'clients', 'rejected'],
		de: ['arbeiten', 'buero-awards', 'kontakt', 'auftraggeber', 'entwuerfe']
	};
	var scripts = ['/js/jquery-ui-1.7.2.custom.min.js', '/js/jquery.history.js', '/js/erwinbauer.js'];
	var numberOfFrontpageNews = 8;
	var lang = window.lang;
	var languageURISegment = (lang == 'en') ? 'en/' : '';
	
	// Redirects to dynamic version, if the URL starts with anything but a '#' after the host name
	// e.g. redirects from http://erwinbauer.com/projects/ to http://erwinbauer.com/#projects/
	this.redirect = function() {
		var pathWithoutLanguage = window.location.pathname.replace(new RegExp('^/'+lang+'/'), '/');
		var matches = pathWithoutLanguage.match(/^\/(.+)/);
		if (matches) {
			var request = matches[1];
			// Scrolling through the news items is handled by Javascript and does not use page numbers in the URL
			request = request.replace(/^(\d+)\//, '');
			window.location.href = window.location.protocol + '//' + window.location.host + '/'+languageURISegment+'#' + request;
		}
	};
	
	// Loads all pages per ajax in order to make dynamic navigation possible
	this.populateCanvas = function() {
		var self = this;
		var loadedCounter = 0;
		var _lang = (lang == 'en') ? '_en' : '';
		removeCSS('standalone');
		$('body').wrapInner('<div id="canvas"></div>');
		for (var i in pages[lang]) {
			$.post('/'+languageURISegment+pages[lang][i]+'/', function(data) {
				$('#canvas').append($(data));
				loadedCounter++;
				if (loadedCounter >= pages[lang].length) {
					// load scripts only after content is in place
					self.loadScripts();
					// initialize the app if scripts have been loaded statically in development environment
					if ( ! production) init();
				}
			});
		}
		// load content that won't be referenced by the loaded scripts
		$.get('/pfeile.php?lang='+lang, function(data) {
			$('#canvas').append($(data));
		});
	};

	this.loadScripts = function() {
		if (production) {
			loadScript('/min/f='+scripts.join(','));
		}
	};

	var loadScript = function(scriptArray, index) {
		// use $.post instead of $.getScript to prevent IE cache issues
		if (typeof(scriptArray) == 'string') {
			scriptArray = [scriptArray];
		}
		if ( ! index) index = 0;
		var script = scriptArray[index];
		if (index + 1 < scriptArray.length) {
			$.getScript(script, function(){loadScript(scriptArray, index + 1)});
		}
		else {
			$.post(script);
		}
	}
	

	this.activateNews = function() {
		var activeNr = 0;
		var newsEntries = [];
		var entryWidth = $('.teaser').outerWidth(true);
		$.getJSON('/_application/getdata.php', {type: 'news', lang: lang}, function(entries) {
			newsEntries = entries;
			$('.teaser').remove();
			for (var i in entries) {
				var data = entries[i];
				var entry = $('<div><a><img/><a/><div/><h3/><p><a><img/></a></p></div>');
				entry.addClass('teaser');
				entry.find('a').attr({href: data['url']})
				if (data['internal']) {
					entry.find('a').addClass('internal');
				}
				entry.find('div').addClass('date').text(data['date']);
				entry.find('a:first img').attr({alt: data['title']});
				entry.find('h3').html(data['title']);
				entry.find('p').prepend(data['body']+' ');
				entry.find('p img').attr({src: '/css/images/pfeil-klein.gif'});
				if (i < numberOfFrontpageNews + 1) {
					entry.find('a:first img').attr({src: data['image']});
				}
				entry.appendTo('#scrollWidget');
				$('#scrollWidget').css('width', numberOfFrontpageNews * entryWidth);
				$('#aktuell .next').css('left', $('#scrollWidget').width() + 9);
			}
			
			$('#scrollWidget').wrapInner($('<div/>', {css: {position: 'absolute', width: newsEntries.length * entryWidth}}));

			$('#aktuell .next').click(function(event) {
				event.preventDefault();
				//if ($('#scrollWidget>div').is(':animated')) return;
				activeNr ++;
				preloadNr = activeNr + numberOfFrontpageNews;
				$('#scrollWidget>div').stop().animate({
					left: '-'+(entryWidth * activeNr)
				}, 2000, 'easeOutExpo');
				$('#aktuell').removeClass('start');
				if (preloadNr >= newsEntries.length) {
					$('#aktuell').addClass('end');
				}
				if (typeof(newsEntries[preloadNr]) !== 'undefined') {
					$('.teaser').eq(preloadNr).find('a:first img').attr({
						src: newsEntries[preloadNr]['image']
					});
				}
			});
			$('#aktuell .prev').click(function(event) {
				event.preventDefault();
				//if ($('#scrollWidget>div').is(':animated')) return;
				activeNr --;
				$('#scrollWidget>div').stop().animate({
					left: '-'+(entryWidth * activeNr)
				}, 2000, 'easeOutExpo');
				if ($('#aktuell').hasClass('end')) {
					$('#aktuell').removeClass('end');
				}
				if (activeNr <= 0) {
					$('#aktuell').addClass('start');
				}
			});
		});
	}

	
	
	
	
	var removeCSS = function(file) {
		//$('head link[href*="'+file+'"]').remove(); // this won't work for safari <= 3
		$('head link[href*="'+file+'"]').get(0).disabled = true;
	};
	
}


var app = new AppBuilder();
// If client supports javascript, redirect to dynamic version immediately
app.redirect();




// Wait for DOMready before adding Content
$(function() {
	window.production = ! $('body').hasClass('development');
	app.activateNews();
	app.populateCanvas();
	
	// Google Analytics
	if (production) {
		window._gaq = window._gaq || [];
		window._gaq.push(['_setAccount', 'UA-4799731-1']);
		window._gaq.push(['_trackPageview']);
		(function(){
			var ga = document.createElement('script');
			ga.type = 'text/javascript';
			ga.async = true;
			ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
			(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
		})();
	}

});

