// Cufon.replace

Cufon.replace('h1, h2, h3, h5, code',{fontFamily:'regular'});

Cufon.replace('h4',{fontFamily:'light'});

Cufon.replace('.header-menu a',{fontFamily:'regular', hover:'#B72126'});
Cufon.replace('.menu-links li a',{fontFamily:'regular',hover:'true'});

Cufon.replace('.content-posts blockquote, .post-date',{fontFamily:'regular'});

Cufon.replace('.menu-publication',{fontFamily:'light', hover:'#B72126'});
Cufon.replace('.footer-contact',{fontFamily:'light'});
Cufon.replace('.accolade-grid-data-title',{fontFamily:'light'});

Cufon.replace('.agenda-mois .nom',{fontFamily:'regular'});
Cufon.replace('.agenda-mois .lieu',{fontFamily:'light'});

Cufon.replace('.box-adresse',{fontFamily:'light'});

// Slider horizontal

function BoxH(elem) {
	this.$elem=$(elem);
	
	var $this=this.$elem;
	this.boxWidth=$this.width();
	this.slideWidth=$this.find('.slide').width();
	
	this.scroll=0;
	this.scrollMax=this.slideWidth-this.boxWidth;
	if(this.scrollMax > 0) {
		this.addControls();
		this.scrollbarContainerWidth=$this.find('.center').width();
		this.scrollbarWidth=Math.round(this.boxWidth/this.slideWidth*this.scrollbarContainerWidth);
		this.scrollbarMax=this.scrollbarContainerWidth-this.scrollbarWidth;
		this.scrollbarStart=0;
		this.scrollbarOffset=0;
	
		this.dragging=false;
		this.mouseStart=0;
	
		this.initStyle();
		this.initEvents();}}

BoxH.prototype.addControls=function() {this.$elem.append($('<div class="controls"><div class="left"></div><div class="right"></div><div class="center"><div class="face"></div></div></div>'));}
BoxH.prototype.initStyle=function() {this.$elem.find('.face').css('width', this.scrollbarWidth);this.styleArrows();}
BoxH.prototype.styleArrows=function() {this.$elem.find('.left').css('opacity', (this.scroll <= 0) ? 0.5 : 1);this.$elem.find('.right').css('opacity', (this.scroll >= this.scrollMax) ? 0.5 : 1);}

BoxH.prototype.scrollTo=function(scroll) {
	var $this=this.$elem;
	this.scroll=Math.max(0, Math.min(scroll, this.scrollMax));
	this.scrollbarOffset=this.scroll/this.scrollMax*this.scrollbarMax;

	$this.find('.slide').css('margin-left', -this.scroll);
	$this.find('.face').css('margin-left', this.scrollbarOffset);
	
	this.styleArrows();
}

BoxH.prototype.scrollBy=function(by) {this.scrollTo(this.scroll-by);}
BoxH.prototype.dragHandler=function(mousePosition) {if(this.dragging) {this.scrollTo((mousePosition-this.mouseStart+this.scrollbarStart)/this.scrollbarContainerWidth*this.slideWidth);}}

BoxH.prototype.initEvents=function() {
	var $this=this.$elem;
	var boxH=this;
	$this.find('.center').mousedown(function(e) {
		boxH.mouseStart=e.clientX;
		boxH.dragging=$(e.target).hasClass('face');
		boxH.scrollbarStart=boxH.scrollbarOffset;
		return false;
	});
	$(document).mouseup(function(e){boxH.dragging=false;
	}).mousemove(function(e) {boxH.dragHandler(e.clientX);});
	$this.find('.left').click(function() {boxH.scrollBy(50);});
	$this.find('.right').click(function() {boxH.scrollBy(-50);});
}

// Slider
function Slider(elem) {
	this.$elem=$(elem);
	this.$slides=$('.slide', this.$elem);
	this.current=0;
	this.animating = false;
	this.nbSlides=this.$slides.length;
	var numbers = '<span class="active">1</span>';
	for(var i=1;i<this.nbSlides;i++) numbers += '<span>'+(i+1)+'</span>';
	this.$elem.append('<div class="numbers">'+numbers+'</div>');
	this.timer = null;
	this.resetTimer();
	this.initEvents();
}

Slider.prototype.next=function() {return (this.current+1<this.nbSlides) ? this.current+1 : 0;}
Slider.prototype.currentSlide=function() {return $(this.$slides[this.current]);}
Slider.prototype.nextSlide=function() {return $(this.$slides[this.next()]);}
Slider.prototype.initEvents=function() {
	var slider = this;
	this.$elem.find('.numbers span').each(function(i){
		$(this).click(function() {
			slider.animate(i);
		});
	});
}
Slider.prototype.resetTimer = function() {
	var slider = this;
	if(this.timer !== null) window.clearInterval(this.timer);
	this.timer = window.setInterval(function() {slider.animate();},7000);
}

Slider.prototype.animate=function(next) {
	var $current=this.currentSlide();
	var next = (typeof next !== 'undefined') ? next : this.next();
	var $next = $(this.$slides[next]);
	if(this.animating == false && next != this.current) {
		var slider = this;
		this.animating = true;
		this.$slides.css('z-index',10);
		$current.css('z-index',20);
		$next.css('z-index',30);
		$next.find('.image').css('width',0).find('img').css('right',-120);
		$next.find('.legend').css('left',-930);
		$next.show();
		$next.find('.image').animate({width:930},600,'easeOutQuart')
		.find('img').animate({right: 0},600);
		$next.find('.legend').delay(300).animate({left:0},300)
		$current.find('.image img').animate({right:120},600, function() {slider.animating = false});
		$current.find('.legend').animate({left:-930},300,'easeOutQuart');
		this.$elem.find('.active').removeClass('active');
		this.$elem.find('.numbers span').eq(next).addClass('active');
		this.current=next;
		this.resetTimer();
	}
}

// Document ready
$(document).ready(function() {new BoxH('.box-horizontal');});

