var load;
(function ($) {
	$.event.special.load = {
		add: function (hollaback) {
			if ( this.nodeType === 1 && this.tagName.toLowerCase() === 'img' && this.src !== '' ) {
				// Image is already complete, fire the hollaback (fixes browser issues were cached
				// images isn't triggering the load event)
				if ( this.complete || this.readyState === 4 ) {
					hollaback.handler.apply(this);
				}

				// Check if data URI images is supported, fire 'error' event if not
				else if ( this.readyState === 'uninitialized' && this.src.indexOf('data:') === 0 ) {
					$(this).trigger('error');
				}
				
				else {
					$(this).bind('load', hollaback.handler);
				}
			}
		}
	};
}(jQuery));


function roundToNumber(number, to, round){
	if(round == 'up'){
		return to * Math.ceil(number / to);
	}else if(round == 'down'){
		return to * Math.floor(number / to);
	}else{
		return to * Math.round(number / to);
	}
	
}


$(document).ready(function() {
	$('.cstypo').cstypo();
	$('#logo').show();
	$('img').map(function(){
		var placeImage = ($(this).parents('.page').hasClass('print')) ? 'placeholder' : 'placeholder-web';
		$(this).lazyload({ 
			delay: 1000,
			placeholder: '/files/images/' + placeImage +'.gif',
		    effect : "fadeIn",
			failurelimit : 2,
			threshold : -200
		}).css('height',roundToNumber($(this).attr('height'),20,'down') + 14 +'px');
	})
	
		
	var logo = [];
	logo = ($('#logo').length > 0) ? $('#logo').html().split('<br>') : '';
	$('#logo').text('');
	var i = 0;
	var render = false;
	var speed = 1;
	var txt = [];
	function renderLogo(){
		if(render == false){
			render = true;
			var renderLogoInt = setInterval(function(){
				if($('#logo').height() > $(window).scrollTop() + $(window).height()){
					clearInterval(renderLogoInt);
					render = false;
					speed = 100
				}else if(logo[i] == undefined){
					logo.reverse();
					i=0;
					speed = 100;
				}else{
					txt += '<br />' +logo[i].replace('sinfin','<a class="sinfin" href="/">sinfin</a><br />');
					$('#logo').html(txt);
					i++;
				}
			}, speed)
		}
	}
	
	var n = 1;
	var render2 = false;
	function renderNumbers(){
		if(render2 == false){
			render2 = true;
			var renderNumbersInt = setInterval(function(){
				if($('#numbers').height() > $(window).scrollTop() + $(window).height()){
					clearInterval(renderNumbersInt);
					render2 = false;
					speed = 50
				}else{
					$('#numbers').append(n+'<br />');
					n++;
				}
			}, speed)
		}
	}
	
	$('#numbers').css({'margin-left':'-' + $(this).width() +'px'});
	
	$('#logo').hover(function(){
		$('#numbers').stop().animate({'margin-left':'0'});
	}, function(){
		$('#numbers').stop().animate({'margin-left':'-' + $(this).width() +'px'});
	})
	
	
	
	renderNumbers();
	renderLogo();
	cloneMenu();
	gallery();
	
	$(window).resize(cloneMenu).scroll(function(){
		renderLogo();
		renderNumbers();	
	});
	
	for(var i=0; i < 99; i++) {
		$('.year-20'+i + ', .year-200'+i + ', .year-190'+i + ', .year-19'+i).hide();
	};
});



function gallery(){	
	$('.prev').css('visibility', 'hidden');
	$('.gallery').map(function(){
		var gal = $(this).find('.thumb');
		if(gal.length <= 1){
			$(this).find('.nav').hide();
		}else{
			$(this).append('<div class="pagination"><span class="length">1</span><span class="count">/' + gal.length +'</span><span class="loader"></span></div>')
		}
		$(this).find('.thumb:first').addClass('current');
	})
	
	function showHideNav(el){
		var current = el.parents('.gallery').find('.current');
		var next = current.next('.thumb');
		var prev = current.prev('.thumb');
		if(el.is('.next')){
			if(next.length < 1){
				el.css('visibility', 'hidden');
			}else{
				el.css('visibility', 'visible');
			}
		}else if(el.is('.prev')){
			if(prev.length < 1){
				el.css('visibility', 'hidden');
			}else{
				el.css('visibility', 'visible');
			}
		}
		el.siblings('.prev, .next').css('visibility', 'visible');
	}
	
	$('.next').live('click',function(){
		var $this = $(this);
		var gallery = $this.parents('.gallery')
		var current = gallery.find('.current');
		var next = current.next('.thumb:first');
		
		loading(next.attr('src'), next)
		
		current.removeClass('current').hide();
		next.addClass('current').show();
		

		
		var length = $(this).parents('.gallery').find('.length');
		length.text(parseInt(length.text()) + 1);
		
		showHideNav($(this));
		return false;
	}).hover(function(){
		$('#next-cursor').show();
		$('#prev-cursor').hide();
	}, function(){
		$('#next-cursor').hide();
	}).mousemove(function(e){
		$('#next-cursor').css({
			'left' : e.clientX + 30,
			'top' : e.clientY + $('#fixer').offset().top
			})		
	})
	
	$('.prev').live('click',function(){
		var current = $(this).parents('.gallery').find('.current');
		var prev = current.prev('.thumb:first');
		
		loading(prev.attr('src'), prev);
		
		current.removeClass('current').hide();
		prev.addClass('current').show();
				
		var length = $(this).parents('.gallery').find('.length');
		length.text(parseInt(length.text()) - 1);
		
		showHideNav($(this));
		return false;
	}).hover(function(){
		$('#prev-cursor').show();
		$('#next-cursor').hide();
	}, function(){
		$('#prev-cursor').hide();
	}).mousemove(function(e){
		$('#prev-cursor').css({
			'left' : e.clientX - ($('#prev-cursor').width()+30),
			'top' : e.clientY + $('#fixer').offset().top
			})		
	})
	
}

function loading(src, thumb){	
	var loader = thumb.parents('.gallery').find('.loader');
	loader.text('');	
	clearInterval(load);
	var image = new Image();
	image.src = src;
	
	load = setInterval(function(){
		loader.append('.');
		
		if(loader.width() >= (thumb.width() - 300)) {
			loader.text('');
		};
		
		$(image).bind('load',function(){
			$(this).delay(500).queue(function(){
				clearInterval(load);
				loader.text('');
				$(this).dequeue();
			})
		})
	}, 100)
}


function cloneMenu(){
	$('ul.clone-menu').remove();
	var menu = $('#menu');
	var win = $(window);
	var i = 1;
	var docHeight = $(document).height();
	var cloneMenuInt = setInterval(function(){
		menu.clone().appendTo('body').css({
			'position':'absolute',
			'top': roundToNumber(menu.height() * i, 20, 'up'),
			'left':menu.position().left
		}).addClass('clone-menu');

		if((menu.height() * i) > docHeight) clearInterval(cloneMenuInt);
		i++;
	}, 100)
}
