var currentHRef = '';
new PeriodicalExecuter(updateHRef, 0.2)

function updateHRef()
{
	var href = window.location.hash.substring(1);
	if( href != currentHRef )
	{	
		currentHRef = href;
		
		var params = {ajax: 'CONTENT,PAGE:TITLE'};
		
		return new Ajax.Request( '/' + href, {
			method: 'get',
			parameters: params,
			requestHeaders: {Accept: 'application/json'},
			onSuccess: function(transport){
				var json = transport.responseText.evalJSON(true);
				$('content').update(json.CONTENT);
				document.title = json.TITLE;
				document.fire("ajax:load");
				initLinks( $('content') );
			},
			onFailure: function(transport){ 
				var json = transport.responseText.evalJSON(true);
				if( typeof( json.TITLE ) != "undefined" )
				{
					$('content').update(json.CONTENT);
					document.title = json.TITLE;
					document.fire("ajax:load");
					initLinks( $('content') );
				}
				else
				{
					$('content').update('An error has occured...');
					document.title = 'An error has occured...';
				}
			}
		});
	}
}

function initLinks(start)
{
	var elements = start.getElementsByTagName("a");
	for( var i = elements.length - 1; i >= 0; i-- )
	{
		if( elements[i].className.indexOf("dal") != -1 )
		{
			elements[i].className.replace(/dal/, "");
			elements[i].href = "/#" + elements[i].href.substring(1).replace(/\.html/,"");
		}
	}
	initAnchors(start);
}

function initLinks()
{
	$$('a').each(function(element){
		if( element.hasClassName('dal') )
		{
			element.removeClassName('dal');
			element.setAttribute("href", "/#" + element.readAttribute("href").substring(1).replace(/\.html/,"") );
		}
		if( element.readAttribute('href').indexOf('#') == 0 )
		{
			if( element.readAttribute('rel') == "" )
			{
				dest = element.readAttribute('href').substring( 1 );
				if( dest.length > 0 )
				{
					element.setAttribute('href', '#');
					element.setAttribute('dest', dest);
					element.observe('click', function(e){
						scrollToAnchor(this.get('dest')); 
						return false;
					});
				}
			}
		}
	});
}


function oLink(URL)
{
	if( URL.indexOf('?') === -1 ) {
		URL += '?ajax';
	} else {
		URL += '&ajax';
	}
	
	var params = {ajax: 'CONTENT,PAGE:TITLE'};
	
	new Ajax.Request( URL, {
		method: 'post',
		parameters: params,
		onSuccess: function(transport){
			$('content').update(transport.responseText);
			initLinks($('content'));
		},
		onFailure: function(){ $('content').update('An error has occured...'); }
	});

	return false;
}

function initAnchors(start)
{
	var elements = start.getElementsByTagName("a");
	for( var i = elements.length -1; i >= 0; i-- )
	{
		if( (elements[i].href.indexOf("#") != -1) )
		{
			dest = elements[i].href.substring( elements[i].href.indexOf("#")+1 );
			if( dest.length > 0 )
			{
				elements[i].href = "#";
				elements[i].dest = dest; /*document.getElementsByName( dest );*/
				elements[i].onclick = function(){ scrollToAnchor(this.dest); return false; }
			}
		}
	}
}

function easeInOut(t,b,c,d)
{
	return c/2 * (1 - Math.cos(Math.PI*t/d)) + b;
}

var scrollInt;
var scrTime, scrSt, scrDist, scrDur, scrInt;

function scrollPage()
{
	scrTime += scrInt;
	if (scrTime < scrDur) {
		window.scrollTo( 0, easeInOut(scrTime,scrSt,scrDist,scrDur) );
	} else {
		window.scrollTo( 0, scrSt+scrDist );
		clearInterval(scrollInt);
	}
}
	
function scrollToAnchor(aname)
{
	var anchors, i, ele;
	
	if (!document.getElementById)
		return;

	ele = document.getElementById(aname);
	
	if (window.scrollY)
		scrSt = window.scrollY;
	else if (document.documentElement.scrollTop)
		scrSt = document.documentElement.scrollTop;
	else
		scrSt = document.body.scrollTop;

	scrDist = ele.offsetTop - scrSt;
	scrDur = 500;
	scrTime = 0;
	scrInt = 10;
		
	clearInterval(scrollInt);
	scrollInt = setInterval( scrollPage, scrInt );
}

document.observe("dom:loaded", function() {
	initLinks(); 
});
