var serverURL = window.location.protocol+"//"+window.location.host+"/";
var json404 = '{"content":"<h2>Seite nicht gefunden</h2>","title":"404","imagesrc":"'+serverURL+'templates/blue/img/404.jpg"}';
var contentInnerWidth = 400;
var firstRun = true;
var ajaxData = null;
var animating = false;
var origContent = null;

function startsWith(haystack, needle)
{
	return haystack.match("^"+needle)==needle;
}

function loadUrlWithHistoryPlugin(url)
{
	// jquery.history stuff		
    url = url.replace(/^.*#/, '');
    url = url.replace(/\.html$/,"");
    $.history.load(url);
}

function markExternalLink(domElement)
{
	if(domElement.children("img").length == 0 && domElement.text()!="")
		domElement.addClass("textLink");
		
	if(typeof(domElement.attr("href")) == "undefined") return;
		
	href = domElement.attr("href").replace(/\//, "\/");
	
	if( (!href.match("/^"+serverURL+"/i") && href.match(/.*\:\/\//i)) ){
		domElement.attr("rel","external");
		domElement.attr("target","_blank");
	}
	if(href.match(/\.pdf$/i)){
		domElement.attr("target","_blank");
	}
}

function prepare()
{
    $("a").each(function(){
    	markExternalLink($(this));
    });
    
	$("#main #content a").click( function(){
		if($(this).attr("rel") != "external"){
			loadUrlWithHistoryPlugin($(this).attr('href'));
			return false;
		}
	});
	// adjust width for screen
	$("#main #content #inner p,#main #content #inner div,#main #content #inner table")
		.css("width",contentInnerWidth);
	$("#main #content #inner h1, #main #content #inner h2, #main #content #inner h3")
		.css("max-width",contentInnerWidth);
}

function navigateTo(target)
{
	return navigate(target,null);
}

function navigateToByForm(target,passwdField)
{
	return navigate(target,$(passwdField).val());
}

function generateTarget(target)
{
	if(target.match("^index.php")=="index.php")
		target = target.substr(9);
					
	// do not use cached data for empty hash! -> reload news when going back to root
	if( target == "" || target == null ){
		url = window.location.pathname;
		target = url.substring(url.lastIndexOf('/')+1);
		if( target == "" || target == null ){
			target = "news.html";
		}
	}
	
	target = target.replace(/\.html$/,"");
	
	// workaround to avoid sliding on load
	if(firstRun){
		firstRun = false;

		url = window.location.pathname;
		if(url.substring(url.lastIndexOf('/')+1) != "" || target == "news")
			return null;
	}
	
	return target;	
}

function navigate(target,passwd)
{	
	ajaxData = null;

	target = generateTarget(target);
	if(target==null) return;
	
	$("header nav a").each(function(){
		t = generateTarget($(this).attr("href"));
		if(t == target)
			$(this).addClass("current");
		else
			$(this).removeClass("current");
	});
	
	animationStart();
		
	if(passwd!=null)
		url = serverURL+"templates/blue/ajax/loadPage.php?p="+target+"&passwd="+passwd;
	else
		url = serverURL+"templates/blue/ajax/loadPage.php?p="+target;
		
	$.ajax({
		url : url,
		success : function(data)
		{
			ajaxData = data;
			loadingComplete();
		},
		statusCode: {
			404: function() {
				ajaxData = json404;
				loadingComplete();
			}
		},
		error: function() { // Opera does not support statusCode
			ajaxData = json404;
			loadingComplete();
		}
	})
	
	$("#main #content").animate({
		height:"50px"
	}, 2000, function(){
		$("#main #content #inner").css("overflow","hidden");
		$("#main #content #inner").html("<div class='loading'><img src='templates/blue/img/ajax-loader.gif' /> Loading new page...</div>");
		animationComplete();
	});
	
	return false;
}

function animationStart()
{
	animating = true;
}

function loadingComplete()
{
	if(animating == true)
		return;
		
	handleAjaxData();
}

function animationComplete()
{
	animating = false;
	if(!ajaxData)
		return
		
	handleAjaxData();
}

function handleAjaxData()
{
	jsonData = jQuery.parseJSON(ajaxData);
	showInMain(jsonData.content,jsonData.title,jsonData.imagesrc);
	window.title = jsonData.title;
	
	$("#main #content #inner").css("overflow","auto");
}

function showInMain(data,title,imgsrc)
{		
	$("#main #content").children().fadeOut(500, function(){
		$("#main #content #inner").html("<h1>"+title+"</h1>"+data);
		if(imgsrc != "" && imgsrc != null){
			$("#main #content #inner").css("background","#FFF url('"+imgsrc+"') no-repeat right top");
		}
		else{
			$("#main #content #inner").css("background","#FFF url('"+serverURL+"templates/blue/img/default.jpg') no-repeat right top");
		}
		$("#main #content #inner").fadeOut(0);
		$("#main #content #inner").fadeIn(2000);
		
		prepare();
		
		$("#main #content").animate({
			height:contentHeight
		}, 2000, function(
		){
		});
	});
}

$(document).ready(function(){
	$.history.init(navigateTo);
		
	// make links nice
	$("nav a").click( function(){
		loadUrlWithHistoryPlugin($(this).attr('href'));
		return false;
	});
	
	// Hight calculation
	ch = $(window).height() - $("footer").outerHeight(true) - $("header").outerHeight(true);
	h = Math.max(ch,500);
	$("#main").css("height",h+"px");
	contentHeight = (h-10)+"px";
	$("#main #content").css("height",contentHeight);
	$("#main #content #inner").css("height",(h-30));
	contentInnerWidth = $("#main #content #inner").width()-393;// 382;
	
	origContent = $("#main #content #inner").html(); 
	
	hoverColor = "#00dffc";
	noHoverColor = "#FFF";
	//$("header nav a.current").css("color",noHoverColor);
	//$("header nav a:hover").css("color",noHoverColor);
	$("header nav a").on("mouseenter",function(){
		if($(this).hasClass("current"))
			return;
		$(this).animate({
				color : hoverColor
			},
			1000
		);
	});
	$("header nav a").on("mouseleave",function(){
		if($(this).hasClass("current"))
			return;
		$(this).animate({
				color : noHoverColor
			},
			1000
		);
	});
	
	// Prepare the styles for the loaded page
	prepare();
})

