/* callbacks */
eventHandler = {};
eventHandler.onFailure 			= 	function(transport) {
//										alert('last action failed');
                         			}
eventHandler.onCompleteTray 	= 	function(transport) {
										down( transport.request.target.identify() );
										track(transport.request.post_id);
										setHash( transport.request.post_id );
	                         		}

eventHandler.onCompleteNavigate = 	function(transport) {
										fadeIn( transport.request.target.identify() );
										track( '___navigate');
										setHash( transport.request.post_id );
	                         		}

                         		
eventHandler.onError			=	function(e) {
//										alert("error");
										return true;
									}

function setHash(post_id) {
	window.location.hash = post_id || '';	
}

function func_clear(element) {
	return function() { 
				element.update('');
				setHash();
			};
}

function tick() {
	$('ticker').right();
}

/** getters **/
function pb(tray_id) {
    return $(tray_id).getElementsByClassName('body')[0];
}

function tray(post_id) {
	var tray = $('link' + post_id).up().up();
	var body = pb( tray.identify() );
	if( !body.empty() ) {
		up( body.identify(), func_clear(body) );
	} else {
		upAllButOne(tray);
		var query = '?q=5&p=' + (post_id);
		var params = {  method: 'get',
	                    onComplete: eventHandler.onCompleteTray,
	                    onFailure: 	eventHandler.onFailure };
		try {
		    var request = new Ajax.Updater(pb(tray.identify()).identify(), query, params);
		    request.target = pb(tray.identify());
		    request.post_id = post_id;
	    } catch (err) {
//	    	alert('ignore this error');
	    }
    }
}

function navigate(query, dir) {
	setHash();
	fadeOut('posts');
	var params = {  method: 'get',
                    onComplete: eventHandler.onCompleteNavigate,
                    onFailure: 	eventHandler.onFailure };
	var request = new Ajax.Updater('posts', query, params);
	request.target = $('posts');
}

/** animation **/
function down(element_id, callback) {
    new Effect.SlideDown(element_id, { queue: 'end', duration: 0.5, afterFinish: callback });
}

function up(element_id, callback) {
    new Effect.SlideUp(element_id, {  queue: 'end', duration: 0.5, afterFinish: callback });
}

function fadeOut(element_id, callback) {
	new Effect.Opacity(element_id, { from: 1.0, to: 0.0, duration: 0.2, afterFinish: callback } );
}

function fadeIn(element_id, callback) {
	new Effect.Opacity(element_id, { from: 0.0, to: 1.0, duration: 0.3, afterFinish: callback } );
}

function upAllButOne(tray) {
	var i = 1;		
	while( $('post' + i) ) {
		if( ('post' + i) != tray.identify() && !pb('post'+i).empty() ) {
			up( pb('post'+i).identify(), func_clear( pb('post'+i) ) );
		}
		i++;
	}
}

function ajaxify() {
	var i = 1;
	while( $('post' + i) ) {
		$('post' + i).down().down().writeAttribute('href', null);
		i++;
	}
//	$('nav_home').writeAttribute('href', null);
	$('nav_prev').writeAttribute('href', null);
	$('nav_next').writeAttribute('href', null);
}

function init() {
	ajaxify();
	track();
}

function track(identifier) {
	var prefix = 'horizon';
	identifier = identifier || '';
	identifier = prefix + '/' + identifier;
	
	try{
		var pageTracker = _gat._getTracker("UA-285252-1");
		pageTracker._trackPageview(identifier);
	} catch(err) {}	
}


// execute right away:

window.onerror = eventHandler.onError;

google.load("prototype", "1.6.0.3");
google.load("scriptaculous", "1.8.2");
google.load("swfobject", "2.2");

onload = init;