/**
 * copyright Tim Ebbinghaus
 * no distribution without my permission
 */

var width = 75;
var height= 75;

var columns = 6;
var rows = 5;
var interval = 5000;

var apiKey = '8653d7641b33d9831c5a1f36ca8e35e6';
var userId = '35825450@N08';


// ----------

var nextId = 0;
var canvas = [];

var queue = [];
var page = 1;
var fill = true;
var loading = false;
var first = true;

var selected = [];

var months = ["Januar", "Februar", "M&auml;rz", "April", "Mai", "Juni",
                      "Juli", "August", "September", "Oktober", "November", "Dezember"];

function arrayShuffle(){
  var tmp, rand;
  for(var i =0; i < this.length; i++){
    rand = Math.floor(Math.random() * this.length);
    tmp = this[i]; 
    this[i] = this[rand]; 
    this[rand] =tmp;
  }
}

Array.prototype.shuffle =arrayShuffle;


function run() {
	var mail = 'contact';
	mail += '@';
	mail += 'luminatix';
	mail += '.de';
	
	$('#email').attr('href', 'mailto:'+mail);
	
	$(window).stopTime('refresh');
	
	$('#main').empty();
	canvas = [];
	page = 1;
	loading = false;
	fill = true;
	
	columns = Math.floor(($('#wrapper').width() - $('#details').width() - 16)/(width+1));
		
	for(var x = 0; x < columns; x++) {
		for(var y = 0; y < rows; y++) {
			var ch = $('<div />');
			ch.attr('id', 'canvas-'+nextId++);
			ch.css({
				width: width+'px',
				height: height+'px',
				left: x * (width+1),
				top: y * (height+1),
				'z-index': 1
			});
			ch.addClass('canvas');
			canvas.push(ch);
			$('#main').append(ch);
		}
	}
	$('#main').css({
		width: columns*(width+1)+1,
		height: rows*(height+1)+1	
	});
	$('#content').css({
		height: rows*(height+1)+1	
	});
    $('#image-holder a').lightBox();
	
	
	if(first) {
		loadLatestImage();
	} else {
		$('head').append('<script type="text/javascript" language="javascript" src="http://api.flickr.com/services/rest/?format=json&sort=random&user_id='+userId+'&method=flickr.photos.search&api_key='+apiKey+'&per_page='+(canvas.length*2)+'&page=1">');
	}
	
	$('#main').mouseenter(function() {
		$(window).stopTime('refresh');
	});
	$('#main').mouseleave(function() {
		$(document).everyTime(interval, changeImage);
		$('.selected').removeClass('selected');
	});
	$(document).everyTime(interval, changeImage);
}

function loadLatestImage() {
	$('head').append('<script type="text/javascript" language="javascript" src="http://api.flickr.com/services/rest/?format=json&sort=date-posted-desc&user_id='+userId+'&method=flickr.photos.search&api_key='+apiKey+'&per_page=1&page=1">');
}

function changeImage() {
	if(loading) return;
	if(queue.length <= 1) {
		loading = true;
		page++;
		$('head').append('<script type="text/javascript" language="javascript" src="http://api.flickr.com/services/rest/?format=json&sort=random&user_id='+userId+'&method=flickr.photos.search&api_key='+apiKey+'&per_page='+(canvas.length*2)+'&page='+page+'">');
	}
	if(queue.length == 0) return;
	
	if(canvas.length == 0) return;
	canvas.shuffle();
	if(canvas[0].hasClass('selected')) {
		setImage(canvas[1],queue.pop());
	} else {
		setImage(canvas[0],queue.pop());
	}
}

function showImageDetails(secret, id) {
	$('#image-holder').hide();
	$('#loading-image').fadeIn('slow');
	
	
	$('head').append('<script type="text/javascript" language="javascript" src="http://api.flickr.com/services/rest/?format=json&method=flickr.photos.getInfo&api_key='+apiKey+'&secret='+secret+'&photo_id='+id+'">');
}

function setDetailImage(photo) {
	$('#details').fadeTo('fast', 1);
	
	$('#image-title').html(photo.title._content ? photo.title._content : 'Ohne Titel');
	$('#image-holder a').attr({
			href: 'http://farm'+photo.farm+'.static.flickr.com/'+photo.server+'/'+photo.id+'_'+photo.secret+'.jpg',
			title: photo.title._content ? photo.title._content : 'Ohne Titel'
	});
	var date = new Date(photo.dates.posted * 1000);
	$('#image-date-taken').html(date.getDate()+'. '+months[date.getMonth()]+' '+date.getFullYear());
	
	if(photo.location) {
		$('#image-location').show();
		var loc = '';
		if(photo.location.locality) {
			loc += photo.location.locality._content;
		}
		if(photo.location.country) {
			if(loc != '') loc += ', ';
			loc += photo.location.country._content;
		}
		$('#image-location-name').html(loc);
	} else {
		$('#image-location').hide();
	}
	
	$('#image-flickr-url').attr('href','http://www.flickr.com/photos/'+photo.owner.nsid+'/'+photo.id);
	$('#image-views').html(photo.views);
	
	if(photo.tags.tag.length == 0) {
		$('#image-tags').hide();
	} else {
		$('#image-tags').show();
		var tags = '';
		for(var i = 0; i < photo.tags.tag.length; i++) {
			if(tags != '') tags += ', ';
			tags += '<a href="http://www.flickr.com/photos/tags/'+photo.tags.tag[i]._content+'/" target="_blank">'+photo.tags.tag[i].raw+'</a>';
		}
		$('#image-tags-content').html(tags);
	}
	
	$('#image-data').attr({
		src: 'http://farm'+photo.farm+'.static.flickr.com/'+photo.server+'/'+photo.id+'_'+photo.secret+'_m.jpg',
		title: photo.title._content ? photo.title._content : 'Ohne Titel',
		alt: photo.title._content ? photo.title._content : 'Ohne Titel'
	});
	
	$('#image-data').bind('load', function() {
		var that = $(this);
		$('#loading-image').hide();
		$('#image-holder').fadeIn('slow');
		
		if(false && $.browser.msie) {
			$('#image-holder').css({
				width: (that.width()+12)+'px',
				height: (that.height()+12)+'px'
			});
		} else {
			$('#image-holder').css({
				width: (that.width()+2)+'px',
				height: (that.height()+2)+'px'
			});
		}
		$('#image-data').unbind();
	});
	
	if(pageTracker) {
		pageTracker._trackPageview('/special:flickr/'+photo.id);
	}
}

function setImage(c, photo, prevent) {		
	var img = $('<img />');
	img.attr({
		src: 'http://farm'+photo.farm+'.static.flickr.com/'+photo.server+'/'+photo.id+'_'+photo.secret+'_s.jpg',
		title: photo.title,
		alt: photo.title
	});
	img.css('display', 'none');
	img.attr('canvas-id', c.attr('id'));
	img.bind('click', function() {
		$('#details').fadeTo('fast', 0.25);
		showImageDetails(photo.secret, photo.id);
	});
	c.append(img);
	
	img.load(function() {
		var that = $(this);
		if($('#'+that.attr('canvas-id')).children().length > 1) {
			$('#'+that.attr('canvas-id')+' img:first').remove()
		}
		
		that.fadeTo('slow', 1.0);
		selected.push(that);
		
		if(selected.length > canvas.length/3) {
			selected.shift().fadeTo('slow', 0.5);
		}
			
		
		that.bind('mouseenter', function() {
			
			$('.selected').removeClass('selected');
			
			var that = $(this);
			$('#'+that.attr('canvas-id')).addClass('selected');
			
			that.fadeTo('fast', 1.0);
			selected.push(that);
			
			if(selected.length > canvas.length/3) {
				selected.shift().fadeTo('slow', 0.5);
			}
		});
	});
}

function jsonFlickrApi(rsp) {
	loading = false;
	
	if (rsp.stat != "ok"){
		return;
	}
	if(rsp.photo) {
		// its a single/details response
		setDetailImage(rsp.photo);
	} else {
		
	if(rsp.photos.photo.length == 0) {
		
		page = 0;
		return;
	}
	if(first) {
		first = false;
		$('head').append('<script type="text/javascript" language="javascript" src="http://api.flickr.com/services/rest/?format=json&sort=random&user_id='+userId+'&method=flickr.photos.search&api_key='+apiKey+'&per_page='+(canvas.length*2)+'&page=1">');
		
		showImageDetails(rsp.photos.photo[0].secret, rsp.photos.photo[0].id);
		return;
	}
	queue = rsp.photos.photo;
	queue.shuffle();
	
	if(fill) {
		for(var i = 0; i < canvas.length; i++) {
			var c = canvas[i];
			
			var photo = queue.pop();
			setImage(c, photo, true);
		}
		fill = false;
	}
	}
	/*
 var s = "";
 var i = Math.random();
 i = i * 100;
 i = Math.ceil(i);
 
 photo = rsp.photos.photo[ i ];
 
 t_url = "http://farm" + photo.farm +
 ".static.flickr.com/" + photo.server + "/" +
 photo.id + "_" + photo.secret + "_" + "m.jpg";
 
 p_url = "http://www.flickr.com/photos/" +
 photo.owner + "/" + photo.id;
 
 s =  '<img alt="'+ photo.title + '"src="' + t_url + '"/>'  ;
 
 
 document.writeln(s);
 //this tells the JavaScript to write
 //everything in variable "s" onto the page
 */
}
