(function($) {

	$.ctfetchalbumjson = function(options) {

		var opts = $.extend({}, $.ctfetchalbumjson.defaults, options);

	
					
		var $this = $(this);
	
		var o = $.meta ? $.extend({}, opts, $this.data()) : opts;

		if(o.dateinfo) {
			
			var dateinfo = o.dateinfo;
			var date = dateinfo.date;
			var kat = dateinfo.kat;
			var offset = dateinfo.fetched;
			var fetched = dateinfo.fetched;
			dateinfo.fetched = dateinfo.fetched + 4; // Vi lägger på fetch direkt, utifall vi köar på oss många ajaxanrop
			
			if(date) {
				$.getJSON('/album/jsonalbum.html', { date : date, offset : offset }, function(json) {
					
					dateinfo.total_pics = json.data.total_pics;
					
					$.each(json.data.pictures, function(i,item){
						fetched = fetched + 1;
						new Image(). src = '/album/images/' + item.filnamn;
						var newel = ('<div class="json-pic" id="pic_' + date + '_' + fetched + '"><ul><li>Bild ' + fetched + '/' + dateinfo.total_pics + '</li></ul><img src="/album/images/' + item.filnamn  + '"><p>' + 	item.info1 + '</p></div>');
						$('#album_' + date + ' .action_closer').before(newel);
						
					});
					runer_scrolling = 0;
				});
			}
			else if(kat) {
				
				$.getJSON('/album/jsonalbum.html', { cat : kat, offset : offset }, function(json) {
					
					dateinfo.total_pics = json.data.total_pics;
				
					$.each(json.data.pictures, function(i,item){

						fetched = fetched + 1;
						new Image(). src = '/album/images/' + item.filnamn;
						var newel = ('<div class="json-pic" id="pic_' + kat + '_' + fetched + '"><ul><li>Bild ' + fetched + '/' + dateinfo.total_pics + '</li></ul><img src="/album/images/' + item.filnamn  + '"><p>' + 	item.info1 + '</p></div>');
						$('#album_' + kat + ' .action_closer').before(newel);
						
					});
					runer_scrolling = 0;
				});
			}
		}
	};


	$.ctfetchalbumjson.defaults = {
		dateinfo : { date : 's' }
	};
	
	$.ctalbumjsonscroll = function(options) {
		// Så att vi inte gör resten så ofta - blir segt
		var _timediff = new Date().getTime() - runer_lastscroll;
		
		// Det har gått tid sen senast, vi scrollar inte, och vi har jsonalbum
		if(_timediff > 0 && !runer_scrolling && runer_dates.length > 0) {
			runer_lastscroll = new Date().getTime();
	
			// Hur långt ner på sidan är vi?
			var offset = getScrollTop();
			var date = 0;
			
			$('div.json-album').each(function (i) {
				if($(this).css('display') != 'none') {
					
					// Var slutar albumet?
					var album_start = $(this).offset().top;
					var album_end = album_start + $(this).height() - 300;
					
					if(album_start < offset && album_end > offset) {
						
						
						var datematch = new RegExp('album_([0-9]+)').exec(this.id);
						
						if(datematch != null) {
							date = datematch[1];
						}
						//$('#info').empty().append(this.id + '* ' + album_start + '<' + offset + '<' +  album_end);
						//$('#info').append('-' + date);
						
					}
				}
			});
			
			
			if(date && runer_dates[ date ].fetched < runer_dates[ date ].total_pics) {
				var pic = getCurrentPic('#album_' + date, offset).pic;
	
				$('#info').empty().append('pic: ' + pic + ' total: ' + runer_dates[ date ].total_pics + ' fetched: ' + runer_dates[ date ].fetched);
				
				// Vi har en bild + vi har inte alla bilder + vi börjar närma oss slutet av de vi har : HÄMTA FLER
				if(pic > 0 && pic < runer_dates[ date ].total_pics && pic > runer_dates[ date ].fetched - 6) {
		
					runer_scrolling = 1;
					$.ctfetchalbumjson( { dateinfo : runer_dates[ date ] } );
				}
			}
		}	
	};
	$.ctalbumjsonremovemargin = function(options) {
		var _timediff = new Date().getTime() - runer_lastmove;
		
		// Det har gått tid sen senast, vi scrollar inte, och vi har jsonalbum
		if(_timediff > 500 && !runer_scrolling && runer_dates.length > 0) {
			runer_lastmove = new Date().getTime();
			var picdata = getCurrentPic('body', getScrollTop());
			$('#pic_' + picdata.date + '_' + picdata.pic).removeClass('json-pic-margin');
		}
	};
	
	$.ctalbumjsonkey = function(event, options) {
		var charnum = event.which;
		
		if($(event.target).is('input') || $(event.target).is('textarea')) {
			return;
		}
				
		var chr = String.fromCharCode(charnum);

		if(chr == 'j' || chr == ' ') {
			event.preventDefault();
			event.stopPropagation();
			picgo(1);
			
		}
		else if(chr == 'k') {
			event.preventDefault();
			event.stopPropagation();
			picgo(-1);
			
		}
	};
	
	function picgo(count) {

		var picdata = getCurrentPic('body', getScrollTop());
		var currentpic = picdata.pic;
		var gotopic = currentpic + count;
		var date = picdata.date ? picdata.date : picdata.cat;
		$('#info').empty().append(date);
		
		if($('#pic_' + date + '_' + gotopic) && $('#pic_' + date + '_' + gotopic).offset().top - 20 != getScrollTop()) {
			$('#pic_' + date + '_' + currentpic).removeClass('json-pic-margin');
			$('#pic_' + date + '_' + gotopic).addClass('json-pic-margin');
			window.scrollTo(0, $('#pic_' + date + '_' + gotopic).offset().top - 20);
					
		}

	};
	
	function getCurrentPic(parent, offset) {
		parent = parent ? parent : 'body';
		offset = offset ? offset : 0;
		
		var pic = -1;
		var date = 0;
		var kat = 0;

		$(parent + ' .json-pic').each(function (j) {
					
			// Hur långt ner är den här bilden?
			var pic_start = $(this).offset().top - 33;
	
			// Om vi är nedanför bildens överkant är den aktuell bild
			if((pic_start < offset)) {

				var picmatch = new RegExp('pic_([0-9]{8,8})_(([0-9]+))').exec(this.id);
				var picmatch2 = new RegExp('pic_([0-9]+)_(([0-9]+))').exec(this.id);
				
				// Har bilden korrekt datum/kategori
				if (picmatch != null) {
					date = picmatch[1];
					pic = parseInt(picmatch[2], 10);
				}
				else if(picmatch2 != null) {
					kat = picmatch2[1];
					pic = parseInt(picmatch2[2], 10);
				}
					
			}
		});
		var picdata = { pic : pic, date : date, cat : kat };
		return picdata;
	};
	
	function getScrollTop() {
		if (document.documentElement && document.documentElement.scrollTop) {
			return(document.documentElement.scrollTop);
		}
		else if (document.body) {
			return(document.body.scrollTop);
		}
		else {
			return(window.pageYOffset);
		}
	};

})(jQuery);
