if( !resultWidth )		var resultWidth = 100;
/*if( !resultMargin )*/		var resultMargin;
if( !currentView )	var currentView = 0;
if( !currentBodyType )	var currentBodyType = 0;
var jsonRequest;

window.addEvent('domready', function() {
	setup();
	getItems();
});

function randomKeys( amount, maxVal ) {
	var keys = new Array();
	while( keys.length < amount ) {
		rnd = Math.round( Math.random() * maxVal )
		while( keys.contains( rnd ) ) rnd = Math.round( Math.random() * maxVal )
		keys[keys.length] = rnd;
	}
	return keys;
}


function setup() {
	currentView = defaultView;	
	
	if( type == "vertical" ) showResults = Math.floor( ( $( document ).getSize().y - 110 ) / ( resultHeight + 5 ) ); 
	else showResults = Math.floor( $( document ).getSize().x / ( resultWidth + 5 ) );
	
	if( showResults > 10 ) showResults = 10;

	
	// setup view tabs
	var totalWidth = 0;
	for( i = 0; i < views.length; i++ ) {
		var newView = new Element( "li" )
		var newViewA = new Element( "div" ).set( "text", views[i].topic );
		if( i == 0 ) newView.set( "id","first" );
		if( i == views.length - 1 ) newView.set( "id", "last" );
		if( i == currentView ) newView.addClass( "selected" );
		newViewA.addEvent( 'click', setSelected );
		newViewA.injectInside( newView );
		newView.injectInside( $('tabs') );
		
		totalWidth += newView.getCoordinates().width + 2;
	}
	
	// Calculate metrics
	if( type == "vertical" ) {
		$('tabs').setStyle( "left", ( $( document ).getSize().x - totalWidth ) / 2 );
		$('container').setStyle( 'height', $( document ).getSize().y - 100 );
		resultMargin = ( document.getCoordinates().height - 110 - resultHeight * showResults ) / ( showResults + 1 );
		var borderMargin = 9;
	}
	else {
		var borderMargin = 9;
		$('tabs').setStyle( "width", totalWidth + "px" );
		resultMargin = ( document.getCoordinates().width - resultWidth * showResults ) / ( showResults + 1 );
	}
	
	var bHeight = $( document ).getSize().y - ( $( 'header' ).getSize().y + borderMargin );
	$('borderr').setStyle('height', bHeight );
	$('borderl').setStyle('height', bHeight );
}

function getItems() {
	if( jsonRequest ) jsonRequest.cancel();
	jsonRequest = new Request.HTML({ url: views[ currentView ].dataurl, secure: false, async: false } );

	jsonRequest.get();
	
	if( $('results').getChildren().length > 0 ) hideItems( jsonRequest ); 
	else {
		if( jsonRequest.response ) showItems( jsonRequest.response.html );
		else jsonRequest.addEvent( 'onComplete', function( tree, elements, html, script ) { jsonRequest = null; showItems( html ); } );
	}
}

function extractData( pattern, data ) {
	var store = new Array();
	var regExp = new RegExp( pattern, "mgi" );
	while( m = regExp.exec( data ) ) store.push( m[1] );
	return store;
}


function showItems( html ) {
	// Parse RSS
	var titles = extractData( "<title\\b[^>]*>(.*?)</title>", html );
	var links = extractData( "<link\\b[^>]*>(.*?)</link>", html );
	var descriptions = extractData( "<description\\b[^>]*>(.*?)</description>", html );
	if( titles.length > 0 ) {
		// Drop the general info away
		titles.shift();
		links.shift();
		descriptions.shift();
		var keys = randomKeys( showResults, titles.length - 1 ); // Get random keys
		for( i = 0; i < keys.length; i++ ) {
	    	j = keys[i];
				var newItem 	= new Element( 'a', { 'class': 'item', 'target': '_blank', 'href': links[j].replace( new RegExp( "&amp;", "g" ), "&" ), styles: { opacity: 0 } } );
	    	var newTopic 	= new Element( 'h3' ).set( "text", correctEntities( titles[j] ) );
	    	var newImg 		= new Element( 'img', { 'src': descriptions[j] } );
	
	    	if( type == "vertical" ) {
	    		newItem.setStyle( "top", resultMargin + ( (resultHeight + resultMargin ) * i ) );
	    		newTopic.setStyle( "width", $( document ).getSize().x - 135 );
	    	}
	    	else newItem.setStyle( "left", resultMargin + ( (resultWidth + resultMargin ) * i ) );
	    	
	    	newItem.number = i;
				newItem.tween = new Fx.Morph( newItem, { duration: 500 } );

	    	
	    	newImg.injectInside( newItem );
	    	newTopic.injectInside( newItem );
	    	newItem.injectInside( $( "results" ) );

				if( newItem.getAllPrevious()[ showResults ] ) newItem.getAllPrevious()[ showResults ].destroy();
	    	
	    	if( type == "vertical" && newTopic.getSize().y < 75 ) newTopic.setStyle( "margin-top", ( 75 - newTopic.getSize().y ) / 2 );
	    	( function() { this.tween.start( { 'marginTop': [ 100, 0 ], 'opacity': [ 0, 1 ] } ); } ).bind( newItem ).delay( 250 * i );
		}
	
    // Setup link info
    $( 'footer' ).getElements('a')[0].set('text', views[ currentView ].linktext );
    $( 'footer' ).getElements('a')[0].set('href', views[ currentView ].linkurl );
	}
	else $( 'footer' ).set('text', "Feed not found" ); 
}

function hideItems( request ) {
    for( i = 0; i < $('results').getChildren().length; i++ ) {
    	if( type == "vertical" ) var j = $('results').getChildren().length - 1 - i;
    	else var j = i; 
    	$('results').getChildren()[j].tween.addEvent( 'complete', function( e ) {
			if( e.number + 1 == Math.ceil( showResults / 3 )) {
				if( request.response ) showItems( request.response.html );
				else request.addEvent( 'onComplete', function( tree, elements, html, script ) { showItems( html ); } );
			}
			e.destroy();
		} );
    	( function() { this.tween.start( { 'marginTop': [0, 100], 'opacity': [1, 0] } ); } ).bind( $('results').getChildren()[j] ).delay( 100 * i );
    }
}

function setSelected( e ) {
	var f = e.target;
	if( f.nodeName != "LI" ) f = f.getParent("li");
	if( !f.hasClass( "selected" ) ) {
		f.getParent("ul").getElements( '.selected' ).removeClass( 'selected' );
		f.addClass( 'selected' );
		currentView	= $( 'tabs' ).getElements( '.selected' )[0].getAllPrevious().length;
		getItems();
	}
}

function correctEntities( string ) {
	string = string.replace( new RegExp( "&#196;", "g" ), "Ä" );
	string = string.replace( new RegExp( "&#214;", "g" ), "Ö" );
	string = string.replace( new RegExp( "&#197;", "g" ), "Å" );
	string = string.replace( new RegExp( "&#228;", "g" ), "ä" );
	string = string.replace( new RegExp( "&#229;", "g" ), "å" );
	string = string.replace( new RegExp( "&#246;", "g" ), "ö" );
	return string;
}
